diff --git a/.babelrc b/.babelrc deleted file mode 100644 index f94e2d8a15a..00000000000 --- a/.babelrc +++ /dev/null @@ -1,19 +0,0 @@ -{ - "presets": [ - [ - "@babel/preset-env", - { - "targets": { - "ie": "11" - } - } - ], - "@babel/preset-react" - ], - "plugins": [ - "@babel/plugin-proposal-class-properties", - "@babel/plugin-syntax-dynamic-import", - "@babel/plugin-transform-regenerator", - "@babel/plugin-transform-runtime" - ] -} diff --git a/.circleci/config.yml b/.circleci/config.yml index af7134d2932..5816f066d8c 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -1,4 +1,4 @@ -version: 2 +version: 2.1 ### ABOUT # @@ -9,17 +9,29 @@ version: 2 # create pull request previews and to update `https://docs.ohif.org` ### +orbs: + codecov: codecov/codecov@1.0.5 + cypress: cypress-io/cypress@1.8.0 + defaults: &defaults - working_directory: ~/repo docker: - - image: circleci/node:10.15.1 + - image: circleci/node:10.16.0 + environment: + TERM: xterm # Enable colors in term + working_directory: ~/repo jobs: - build_and_test: + PR_UNIT_TESTS: <<: *defaults + steps: - # Download and cache dependencies - - checkout + # Enable yarn workspaces + - run: yarn config set workspaces-experimental true + + # Checkout code and ALL Git Tags + - checkout: + post: + - git fetch --all - restore_cache: name: Restore Yarn and Cypress Package Cache keys: @@ -35,34 +47,56 @@ jobs: paths: - ~/.cache ## Cache yarn and Cypress key: yarn-packages-v1-{{ .Branch }}-{{ checksum "yarn.lock" }} - # Build & Test - - run: yarn build:package:ci - # https://www.viget.com/articles/using-junit-on-circleci-2-0-with-jest-and-eslint/ + + # RUN TESTS - run: name: 'JavaScript Test Suite' - command: yarn test:unit:ci - environment: - JEST_JUNIT_OUTPUT: 'reports/junit/js-test-results.xml' - # Store result - - store_test_results: - path: reports/junit - - store_artifacts: - path: reports/junit + command: yarn run test:unit:ci + + # PLATFORM/VIEWER + - run: + name: 'VIEWER: Combine report output' + command: | + viewerCov="/home/circleci/repo/platform/viewer/coverage" + touch "${viewerCov}/reports" + cat "${viewerCov}/clover.xml" >> "${viewerCov}/reports" + echo "\<<\<<\<< EOF" >> "${viewerCov}/reports" + cat "${viewerCov}/lcov.info" >>"${viewerCov}/reports" + echo "\<<\<<\<< EOF" >> "${viewerCov}/reports" + - codecov/upload: + file: '/home/circleci/repo/platform/viewer/coverage/reports' + flags: 'viewer' + + # PLATFORM/CORE + - run: + name: 'CORE: Combine report output' + command: | + coreCov="/home/circleci/repo/platform/core/coverage" + touch "${coreCov}/reports" + cat "${coreCov}/clover.xml" >> "${coreCov}/reports" + echo "\<<\<<\<< EOF" >> "${coreCov}/reports" + cat "${coreCov}/lcov.info" >> "${coreCov}/reports" + echo "\<<\<<\<< EOF" >> "${coreCov}/reports" + - codecov/upload: + file: '/home/circleci/repo/platform/core/coverage/reports' + flags: 'core' + # Persist :+1: - persist_to_workspace: root: ~/repo paths: . - e2e_test: - working_directory: ~/repo - docker: - - image: cypress/base:8 - environment: - ## this enables colors in the output - TERM: xterm + MERGE_UNIT_TESTS: + <<: *defaults + steps: - - attach_workspace: - at: ~/repo + # Enable yarn workspaces + - run: yarn config set workspaces-experimental true + + # Checkout code and ALL Git Tags + - checkout: + post: + - git fetch --all - restore_cache: name: Restore Yarn and Cypress Package Cache keys: @@ -70,12 +104,52 @@ jobs: - yarn-packages-v1-{{ .Branch }}-{{ checksum "yarn.lock" }} - yarn-packages-v1-{{ .Branch }}- - yarn-packages-v1- - # - run: $(yarn bin)/cypress run --record - # Shouldn't be needed if we're using a package cache that contains Cypress - # Could do a check here, if it doesn't exist, install cypress? - - run: yarn install - - run: yarn run test:e2e:ci - - run: yarn run test:e2e:scriptTag + - run: + name: Install Dependencies + command: yarn install --frozen-lockfile + - save_cache: + name: Save Yarn Package Cache + paths: + - ~/.cache ## Cache yarn and Cypress + key: yarn-packages-v1-{{ .Branch }}-{{ checksum "yarn.lock" }} + + # RUN TESTS + - run: + name: 'JavaScript Test Suite' + command: yarn run test:unit:ci + + # PLATFORM/VIEWER + - run: + name: 'VIEWER: Combine report output' + command: | + viewerCov="/home/circleci/repo/platform/viewer/coverage" + touch "${viewerCov}/reports" + cat "${viewerCov}/clover.xml" >> "${viewerCov}/reports" + echo "\<<\<<\<< EOF" >> "${viewerCov}/reports" + cat "${viewerCov}/lcov.info" >>"${viewerCov}/reports" + echo "\<<\<<\<< EOF" >> "${viewerCov}/reports" + - codecov/upload: + file: '/home/circleci/repo/platform/viewer/coverage/reports' + flags: 'viewer' + + # PLATFORM/CORE + - run: + name: 'CORE: Combine report output' + command: | + coreCov="/home/circleci/repo/platform/core/coverage" + touch "${coreCov}/reports" + cat "${coreCov}/clover.xml" >> "${coreCov}/reports" + echo "\<<\<<\<< EOF" >> "${coreCov}/reports" + cat "${coreCov}/lcov.info" >> "${coreCov}/reports" + echo "\<<\<<\<< EOF" >> "${coreCov}/reports" + - codecov/upload: + file: '/home/circleci/repo/platform/core/coverage/reports' + flags: 'core' + + # Persist :+1: + - persist_to_workspace: + root: ~/repo + paths: . npm_publish: <<: *defaults @@ -87,11 +161,14 @@ jobs: command: mkdir ~/.ssh/ && echo -e "Host github.com\n\tStrictHostKeyChecking no\n" > ~/.ssh/config - # --no-ci argument is not ideal; however, semantic-rlease thinks we're - # attempting to run it from a `pr`, which is not the case + # - run: + # name: Publish using Semantic Release + # command: npx semantic-release --debug - run: - name: Publish using Semantic Release - command: npx semantic-release --debug + npx lerna version --allow-branch monorepo --conventional-commits + --conventional-prerelease=* --create-release github + - run: npx lerna publish from-package --canary --dist-tag canary + # Persist :+1: - persist_to_workspace: root: ~/repo @@ -215,43 +292,70 @@ workflows: # PULL REQUESTS pull_requests: jobs: - - build_and_test: + - PR_UNIT_TESTS: filters: branches: ignore: - master - feature/* - hotfix/* - - e2e_test: + # Cypress job added by `cypress-io` orb + - cypress/run: + pre-steps: + - run: 'rm -rf ~/.yarn && npm i -g yarn && yarn -v' # Use yarn latest + yarn: true + store_artifacts: true + start: yarn run dev + wait-on: 'http://localhost:3000' + no-workspace: true # Don't persist workspace + working_directory: platform/viewer + cache-key: 'yarn-packages-v1-{{ .Branch }}-{{ checksum "yarn.lock" }}' + post-steps: + - store_test_results: + path: cypress/results requires: - - build_and_test + - PR_UNIT_TESTS # MERGE TO MASTER cut_release: jobs: - - build_and_test: + - MERGE_UNIT_TESTS: filters: branches: - only: master - - e2e_test: + only: monorepo + # only: master + # Cypress job added by `cypress-io` orb + - cypress/run: + pre-steps: + - run: 'rm -rf ~/.yarn && npm i -g yarn && yarn -v' # Use yarn latest + yarn: true + record: true + store_artifacts: true + start: yarn run dev + wait-on: 'http://localhost:3000' + working_directory: platform/viewer + cache-key: 'yarn-packages-v1-{{ .Branch }}-{{ checksum "yarn.lock" }}' + post-steps: + - store_test_results: + path: cypress/results requires: - - build_and_test + - MERGE_UNIT_TESTS # Update NPM - npm_publish: requires: - - e2e_test + - cypress/run # Update docs.ohif.org - - docs_publish: - requires: - - e2e_test + # - docs_publish: + # requires: + # - cypress/run # Update hub.docker.org - - docker_publish: - requires: - - npm_publish + # - docker_publish: + # requires: + # - npm_publish # Update viewer.ohif.org - - build_demo_site: - requires: - - e2e_test - - demo_site_publish: - requires: - - build_demo_site + # - build_demo_site: + # requires: + # - cypress/run + # - demo_site_publish: + # requires: + # - build_demo_site diff --git a/.codecov.yml b/.codecov.yml index 5290207e441..692f4dcc450 100644 --- a/.codecov.yml +++ b/.codecov.yml @@ -9,4 +9,15 @@ coverage: project: default: threshold: 0.10% + core: + flags: core + viewer: + flags: viewer patch: off +flags: + core: + paths: + - platform/core + viewer: + paths: + - platform/viewer diff --git a/.eslintrc b/.eslintrc.json similarity index 63% rename from .eslintrc rename to .eslintrc.json index cd48512523c..49f82e81c56 100644 --- a/.eslintrc +++ b/.eslintrc.json @@ -1,5 +1,10 @@ { - "extends": ["react-app", "eslint:recommended", "plugin:react/recommended"], + "extends": [ + "react-app", + "eslint:recommended", + "plugin:react/recommended", + "plugin:prettier/recommended" + ], "parser": "babel-eslint", "env": { "jest": true diff --git a/.gitattributes b/.gitattributes deleted file mode 100644 index aafee01fcd0..00000000000 --- a/.gitattributes +++ /dev/null @@ -1,40 +0,0 @@ -# These settings are for any web project - -# Handle line endings automatically for files detected as text -# and leave all files detected as binary untouched. -* text=auto - -# Force the following filetypes to have unix eols, so Windows does not break them -*.* text eol=lf - -# Windows forced line-endings -/.idea/* text eol=crlf - -# -## These files are binary and should be left untouched -# - -# (binary is a macro for -text -diff) -*.png binary -*.jpg binary -*.jpeg binary -*.gif binary -*.ico binary -*.mov binary -*.mp4 binary -*.mp3 binary -*.flv binary -*.fla binary -*.swf binary -*.gz binary -*.zip binary -*.7z binary -*.ttf binary -*.eot binary -*.woff binary -*.pyc binary -*.pdf binary -*.ez binary -*.bz2 binary -*.swp binary -*.fig binary \ No newline at end of file diff --git a/.github/ISSUE_TEMPLATE/---bug-report.md b/.github/ISSUE_TEMPLATE/---bug-report.md new file mode 100644 index 00000000000..974c3fd37e9 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/---bug-report.md @@ -0,0 +1,40 @@ +--- +name: "\U0001F41B Bug report" +about: Create a report to help us improve +title: '' +labels: 'Bug Report :bug:' +assignees: '' + +--- + +**Before Creating an issue** + +- Are you running the latest version? +- Are you reporting to the correct repository? +- Did you search existing issues? + +**Describe the bug** + +*A clear and concise description of what the bug is.* + +**Steps To Reproduce** + +1. [First Step] +2. [Second Step] +3. ... + +``` +Please use code blocks to show formatted errors or code snippets +``` + +**Expected behavior** + +*A clear and concise description of what you expected to happen.* + + +**Environment** + - OS: [e.g. iOS] + - Browser [e.g. chrome, safari] + - Version [e.g. 22] + +**Additional context** diff --git a/.github/ISSUE_TEMPLATE/---feature-request.md b/.github/ISSUE_TEMPLATE/---feature-request.md new file mode 100644 index 00000000000..0231ff905cd --- /dev/null +++ b/.github/ISSUE_TEMPLATE/---feature-request.md @@ -0,0 +1,18 @@ +--- +name: "\U0001F680 Feature request" +about: Suggest an idea for this project +title: '' +labels: enhancement +assignees: '' + +--- + +## Awesome, do you have an idea? 😍 + +If you have a **feature request, improvement or idea**, check [our official roadmap](https://github.com/OHIF/react-viewerbase/projects) to see if it is already planned! + +### πŸ‘‰   [Go to Roadmap](https://github.com/OHIF/react-viewerbase/projects) + +If your feature request isn't there, continue with this issue and we can discuss it 🀟 + +Please include the reasons why you think your change should be made, and any supporting evidence that helps us asses its value and priority. diff --git a/.github/ISSUE_TEMPLATE/---support-question.md b/.github/ISSUE_TEMPLATE/---support-question.md new file mode 100644 index 00000000000..e2cd7e5ffeb --- /dev/null +++ b/.github/ISSUE_TEMPLATE/---support-question.md @@ -0,0 +1,15 @@ +--- +name: "\U0001F917 Support Question" +about: "I have a question \U0001F4AC" +title: '' +labels: question +assignees: '' + +--- + +We are a small team with limited resources. Your question is much more likely to be answered if it is [a good question](https://stackoverflow.com/help/how-to-ask) + +**Description** + + +Questions can often be answered by our documentation. Unable to find an answer in our docs? We'll try to help. In the meantime, if you answer your own question, please respond with the answer here so that others may benefit as well. Better yet, open a PR to expand our docs ^_^ diff --git a/.gitignore b/.gitignore index 6f408382794..86124426b9d 100644 --- a/.gitignore +++ b/.gitignore @@ -8,6 +8,7 @@ docs/_book src/version.js junit.xml coverage/ +.docz/ # YALC (for Erik) .yalc diff --git a/.jscsrc b/.jscsrc deleted file mode 100644 index bd50f548064..00000000000 --- a/.jscsrc +++ /dev/null @@ -1,45 +0,0 @@ -{ - "requireCurlyBraces": { - "keywords": [ "if", "else", "for", "while", "do" ], - "allExcept" : ["return" , "continue", "break"] - }, - "requireSpaceAfterKeywords": [ "if", "else", "for", "while", "do", "switch", "return" ], - "requireSpacesInFunctionExpression": { - "beforeOpeningCurlyBrace": true - }, - "disallowSpacesInFunctionExpression": { - "beforeOpeningRoundBrace": true - }, - "disallowSpacesInsideParentheses": true, - "disallowKeywordsOnNewLine": ["else"], - "disallowNewlineBeforeBlockStatements": true, - "requirePaddingNewLinesAfterUseStrict": true, - "requirePaddingNewLinesAfterBlocks": { - "allExcept": ["inCallExpressions", "inArrayExpressions", "inProperties"] - }, - "requireObjectKeysOnNewLine": true, - "requireSemicolons": true, - "requireSpaceAfterBinaryOperators": true, - "requireSpaceAfterComma": true, - "requireSpaceBeforeObjectValues": true, - "requireSpacesInsideObjectBrackets": "all", - "requireLineBreakAfterVariableAssignment": true, - "requireSpaceBeforeBinaryOperators": ["+", "-", "/", "*", "=", "==", "===", "!=", "!=="], - "disallowSpaceAfterPrefixUnaryOperators": ["++", "--", "+", "-"], - "disallowSpaceBeforePostfixUnaryOperators": ["++", "--"], - "disallowKeywords": [ "with" ], - "disallowMultipleLineBreaks": true, - "requireLineFeedAtFileEnd": true, - "disallowSpaceAfterObjectKeys": true, - "disallowQuotedKeysInObjects": true, - "disallowMultipleSpaces": true, - "disallowVar": true, - "validateLineBreaks": "LF", - "validateIndentation": 4, - "validateQuoteMarks": { - "mark": "'", - "escape": true - }, - "validateParameterSeparator": ", ", - "requireDollarBeforejQueryAssignment": true -} diff --git a/.jshintrc b/.jshintrc deleted file mode 100644 index 587615625b2..00000000000 --- a/.jshintrc +++ /dev/null @@ -1,93 +0,0 @@ -{ - // JSHint Default Configuration File (as on JSHint website) - // See http://jshint.com/docs/ for more details - - "maxerr" : 50, // {int} Maximum error before stopping - - // Enforcing - "bitwise" : true, // true: Prohibit bitwise operators (&, |, ^, etc.) - "camelcase" : false, // true: Identifiers must be in camelCase - "curly" : false, // true: Require {} for every new block or scope - "eqeqeq" : true, // true: Require triple equals (===) for comparison - "forin" : true, // true: Require filtering for..in loops with obj.hasOwnProperty() - "freeze" : true, // true: prohibits overwriting prototypes of native objects such as Array, Date etc. - "immed" : false, // true: Require immediate invocations to be wrapped in parens e.g. `(function () { } ());` - "latedef" : false, // true: Require variables/functions to be defined before being used - "newcap" : false, // true: Require capitalization of all constructor functions e.g. `new F()` - "noarg" : true, // true: Prohibit use of `arguments.caller` and `arguments.callee` - "noempty" : true, // true: Prohibit use of empty blocks - "nonbsp" : true, // true: Prohibit "non-breaking whitespace" characters. - "nonew" : false, // true: Prohibit use of constructors for side-effects (without assignment) - "plusplus" : false, // true: Prohibit use of `++` and `--` - "quotmark" : false, // Quotation mark consistency: - // false : do nothing (default) - // true : ensure whatever is used is consistent - // "single" : require single quotes - // "double" : require double quotes - "undef" : true, // true: Require all non-global variables to be declared (prevents global leaks) - "unused" : "vars", // Unused variables: - // true : all variables, last function parameter - // "vars" : all variables only - // "strict" : all variables, all function parameters - "strict" : false, // true: Requires all functions run in ES5 Strict Mode - "maxparams" : false, // {int} Max number of formal params allowed per function - "maxdepth" : false, // {int} Max depth of nested blocks (within functions) - "maxstatements" : false, // {int} Max number statements per function - "maxcomplexity" : false, // {int} Max cyclomatic complexity per function - "maxlen" : false, // {int} Max number of characters per line - "varstmt" : false, // true: Disallow any var statements. Only `let` and `const` are allowed. - - // Relaxing - "asi" : false, // true: Tolerate Automatic Semicolon Insertion (no semicolons) - "boss" : false, // true: Tolerate assignments where comparisons would be expected - "debug" : false, // true: Allow debugger statements e.g. browser breakpoints. - "eqnull" : false, // true: Tolerate use of `== null` - "es5" : true, // true: Allow ES5 syntax (ex: getters and setters) - "esnext" : true, // true: Allow ES.next (ES6) syntax (ex: `const`) - "moz" : false, // true: Allow Mozilla specific syntax (extends and overrides esnext features) - // (ex: `for each`, multiple try/catch, function expression…) - "evil" : false, // true: Tolerate use of `eval` and `new Function()` - "expr" : false, // true: Tolerate `ExpressionStatement` as Programs - "funcscope" : false, // true: Tolerate defining variables inside control statements - "globalstrict" : false, // true: Allow global "use strict" (also enables 'strict') - "iterator" : false, // true: Tolerate using the `__iterator__` property - "lastsemic" : false, // true: Tolerate omitting a semicolon for the last statement of a 1-line block - "laxbreak" : false, // true: Tolerate possibly unsafe line breakings - "laxcomma" : false, // true: Tolerate comma-first style coding - "loopfunc" : false, // true: Tolerate functions being defined in loops - "multistr" : false, // true: Tolerate multi-line strings - "noyield" : false, // true: Tolerate generator functions with no yield statement in them. - "notypeof" : false, // true: Tolerate invalid typeof operator values - "proto" : false, // true: Tolerate using the `__proto__` property - "scripturl" : false, // true: Tolerate script-targeted URLs - "shadow" : false, // true: Allows re-define variables later in code e.g. `var x=1; x=2;` - "sub" : false, // true: Tolerate using `[]` notation when it can still be expressed in dot notation - "supernew" : false, // true: Tolerate `new function () { ... };` and `new Object;` - "validthis" : false, // true: Tolerate using this in a non-constructor function - - // Environments - "browser" : true, // Web Browser (window, document, etc) - "browserify" : false, // Browserify (node.js code in the browser) - "couch" : false, // CouchDB - "devel" : false, // Development/debugging (alert, confirm, etc) - "dojo" : false, // Dojo Toolkit - "jasmine" : false, // Jasmine - "jquery" : true, // jQuery - "mocha" : false, // Mocha - "mootools" : false, // MooTools - "node" : false, // Node.js - "nonstandard" : false, // Widely adopted globals (escape, unescape, etc) - "phantom" : false, // PhantomJS - "prototypejs" : false, // Prototype and Scriptaculous - "qunit" : false, // QUnit - "rhino" : false, // Rhino - "shelljs" : false, // ShellJS - "typed" : false, // Globals for typed array constructions - "worker" : false, // Web Workers - "wsh" : false, // Windows Scripting Host - "yui" : false, // Yahoo User Interface - "globals" : { - "require": true, - "Package": true // Meteor Package definition - } -} diff --git a/.netlify/build-deploy-preview.sh b/.netlify/build-deploy-preview.sh new file mode 100644 index 00000000000..cbb51c37668 --- /dev/null +++ b/.netlify/build-deploy-preview.sh @@ -0,0 +1,30 @@ +#!/bin/bash + +# Set directory to location of this script +# https://stackoverflow.com/a/3355423/1867984 +cd "$(dirname "$0")" +cd .. # Up to project root + +# Helpful to verify which versions we're using +yarn -v +node -v + +# Install build deps and all monorepo package dependencies. Yarn Workspaces +# should also symlink all projects appropriately +yarn install --no-ignore-optional --pure-lockfile + +dir +ls + +# Build && Move PWA Output +yarn run build:ci +mkdir -p ./.netlify/www/pwa +mv platform/viewer/dist/* .netlify/www/pwa -v + +# Build && Move script output +# yarn run build:package + +echo 'Nothing left to see here. Go home, folks.' + +# Build using react-scripts +# npx cross-env PUBLIC_URL=/demo REACT_APP_CONFIG=config/netlify.js react-scripts --max_old_space_size=4096 build diff --git a/publishStaticSite.sh b/.netlify/publishStaticSite.sh old mode 100755 new mode 100644 similarity index 100% rename from publishStaticSite.sh rename to .netlify/publishStaticSite.sh diff --git a/.netlify/www/index.html b/.netlify/www/index.html new file mode 100644 index 00000000000..904597849e5 --- /dev/null +++ b/.netlify/www/index.html @@ -0,0 +1,14 @@ + + + OHIF Viewer: Deploy Preview + + +

Hello World

+ + + + diff --git a/.prettierrc b/.prettierrc index 12348ec6acf..b80ec6b3474 100644 --- a/.prettierrc +++ b/.prettierrc @@ -4,6 +4,5 @@ "proseWrap": "always", "tabWidth": 2, "semi": true, - "singleQuote": true, - "endOfLine": "lf" + "singleQuote": true } diff --git a/.releaserc b/.releaserc deleted file mode 100644 index 88ee1fae727..00000000000 --- a/.releaserc +++ /dev/null @@ -1,14 +0,0 @@ -{ - "plugins": [ - "@semantic-release/commit-analyzer", - "@semantic-release/release-notes-generator", - "@semantic-release/npm", - "@semantic-release/github", - [ - "@semantic-release/exec", - { - "publishCmd": "mkdir tmp && echo ${nextRelease.version} > tmp/updated-version.txt" - } - ] - ] -} diff --git a/.scripts/dev.sh b/.scripts/dev.sh new file mode 100644 index 00000000000..ba4ef9b9254 --- /dev/null +++ b/.scripts/dev.sh @@ -0,0 +1,14 @@ +#!/bin/bash +# https://github.com/shelljs/shelljs +# https://github.com/shelljs/shelljs#exclude-options +PROJECT=$1 + +if [ -z "$PROJECT" ] +then + # Default + npx lerna run dev:viewer +else + eval "npx lerna run dev:$PROJECT" +fi + +read -p 'Press [Enter] key to continue...' diff --git a/.vscode/settings.json b/.vscode/settings.json index 1b8e6b90e24..50eed834345 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,30 +1,30 @@ { - "editor.rulers": [80, 120], - - // === - // Spacing - // === - - "editor.insertSpaces": true, - "editor.tabSize": 2, - "editor.trimAutoWhitespace": true, - "files.trimTrailingWhitespace": true, - "files.eol": "\n", - "files.insertFinalNewline": true, - "files.trimFinalNewlines": true, - - // === - // Event Triggers - // === - - "editor.formatOnSave": true, - "eslint.autoFixOnSave": true, - "eslint.run": "onSave", - "eslint.validate": [ - { "language": "javascript", "autoFix": true }, - { "language": "javascriptreact", "autoFix": true } - ], - "prettier.disableLanguages": [], - "prettier.endOfLine": "lf" - } - \ No newline at end of file + "editor.rulers": [80, 120], + + // === + // Spacing + // === + + "editor.insertSpaces": true, + "editor.tabSize": 2, + "editor.trimAutoWhitespace": true, + "files.trimTrailingWhitespace": true, + "files.eol": "\n", + "files.insertFinalNewline": true, + "files.trimFinalNewlines": true, + + // === + // Event Triggers + // === + + "editor.formatOnSave": true, + "eslint.autoFixOnSave": true, + "eslint.run": "onSave", + "eslint.validate": [ + { "language": "javascript", "autoFix": true }, + { "language": "javascriptreact", "autoFix": true } + ], + "prettier.disableLanguages": [], + "prettier.endOfLine": "lf", + "workbench.colorCustomizations": {} +} diff --git a/.webpack/webpack.common.js b/.webpack/webpack.common.js new file mode 100644 index 00000000000..29dcb487fd8 --- /dev/null +++ b/.webpack/webpack.common.js @@ -0,0 +1,127 @@ +const path = require('path'); +const webpack = require('webpack'); +const autoprefixer = require('autoprefixer'); +// const ExtractCssChunks = require('extract-css-chunks-webpack-plugin'); + +module.exports = (env, argv, { SRC_DIR, DIST_DIR }) => { + return { + entry: { + bundle: `${SRC_DIR}/index.js`, + }, + context: SRC_DIR, + module: { + rules: [ + /** + * JSX + */ + { + test: /\.jsx?$/, + exclude: [/node_modules/, /packages\\extension/], + loader: 'babel-loader', + options: { + // Find babel.config.js in monorepo root + // https://babeljs.io/docs/en/options#rootmode + rootMode: 'upward', + presets: [ + [ + '@babel/preset-env', + { + // Do not transform ES6 modules to another format. + // Webpack will take care of that. + modules: false, + targets: { + ie: '11', + }, + // https://babeljs.io/docs/en/babel-preset-env#usebuiltins + useBuiltIns: 'usage', + // https://babeljs.io/docs/en/babel-preset-env#corejs + corejs: 3, + }, + ], + ], + }, + }, + /** + * Stylus to CSS + * CSS to CommonJS + * Style nodes from JS Strings + */ + { + test: /\.styl$/, + use: [ + { loader: 'style-loader' }, + { loader: 'css-loader' }, + { loader: 'stylus-loader' }, + ], + }, + { + test: /\.css$/, + use: [ + 'style-loader', + // ExtractCssChunks.loader, + { loader: 'css-loader', options: { importLoaders: 1 } }, + { + loader: 'postcss-loader', + options: { + config: { + path: './postcss.config.js', + }, + plugins: () => [autoprefixer('last 2 version', 'ie >= 11')], + }, + }, + ], + }, + /** + * This allows us to include web workers in our bundle, and VTK.js + * web workers in our bundle. While this increases bundle size, it + * cuts down on the number of includes we need for `script tag` usage. + */ + { + test: /\.worker\.js$/, + include: /vtk\.js[\/\\]Sources/, + use: [ + { + loader: 'worker-loader', + options: { inline: true, fallback: false }, + }, + ], + }, + /** + * This is exclusively used by `vtk.js` to bundle glsl files. + */ + { + test: /\.glsl$/i, + include: /vtk\.js[\/\\]Sources/, + loader: 'shader-loader', + }, + ], + }, + resolve: { + // Which directories to search when resolving modules + modules: [ + // Modules specific to this package + path.resolve(__dirname, '../node_modules'), + // Hoisted Yarn Workspace Modules + path.resolve(__dirname, '../../../node_modules'), + SRC_DIR, + ], + // Attempt to resolve these extensions in order. + extensions: ['.js', '.jsx', '.json', '*'], + // symlinked resources are resolved to their real path, not their symlinked location + symlinks: true, + }, + plugins: [ + new webpack.DefinePlugin({ + 'process.env.NODE_ENV': JSON.stringify(process.env.NODE_ENV), + 'process.env.DEBUG': JSON.stringify(process.env.DEBUG), + 'process.env.APP_CONFIG': JSON.stringify(process.env.APP_CONFIG || ''), + 'process.env.PUBLIC_URL': JSON.stringify(process.env.PUBLIC_URL || ''), + }), + ], + // Fix: https://github.com/webpack-contrib/css-loader/issues/447#issuecomment-285598881 + // For issue in cornerstone-wado-image-loader + node: { + fs: 'empty', + }, + }; +}; diff --git a/Dockerfile b/Dockerfile deleted file mode 100644 index 64e32098088..00000000000 --- a/Dockerfile +++ /dev/null @@ -1,60 +0,0 @@ -# This dockerfile is used to publish the `ohif/viewer` image on dockerhub. -# -# It's a good example of how to build our static application and package it -# with a web server capable of hosting it as static content. -# -# docker build -# -------------- -# If you would like to use this dockerfile to build and tag an image, make sure -# you set the context to the project's root directory: -# https://docs.docker.com/engine/reference/commandline/build/ -# -# -# SUMMARY -# -------------- -# This dockerfile has two stages: -# -# 1. Building the React application for production -# 2. Setting up our Nginx (Alpine Linux) image w/ step one's output -# - - -# Stage 1: Build the application -# docker build -t ohif/viewer:latest . -FROM node:11.2.0-slim as builder - -# RUN apt-get update && apt-get install -y git yarn -RUN mkdir /usr/src/app -WORKDIR /usr/src/app - -COPY package.json /usr/src/app/package.json -COPY yarn.lock /usr/src/app/yarn.lock - -# Run the install before copying the rest of the files -RUN yarn install - -ENV PATH /usr/src/app/node_modules/.bin:$PATH -ENV GENERATE_SOURCEMAP=false -ENV REACT_APP_CONFIG=config/default.js - -# White list instead of copying the whole directory -COPY src /usr/src/app/src -COPY public /usr/src/app/public -COPY .babelrc /usr/src/app/.babelrc -COPY .eslintrc /usr/src/app/.eslintrc - -RUN yarn run build:web - -# Stage 2: Bundle the built application into a Docker container -# which runs Nginx using Alpine Linux -FROM nginx:1.15.5-alpine -RUN apk add --no-cache bash -RUN rm -rf /etc/nginx/conf.d -COPY docker/Viewer-v2.x /etc/nginx/conf.d -COPY docker/Viewer-v2.x/entrypoint.sh /usr/src/ -RUN chmod 777 /usr/src/entrypoint.sh -COPY --from=builder /usr/src/app/build /usr/share/nginx/html -EXPOSE 80 -EXPOSE 443 -ENTRYPOINT ["/usr/src/entrypoint.sh"] -CMD ["nginx", "-g", "daemon off;"] diff --git a/LICENSE b/LICENSE index 8b0905575ef..19e20dd35ca 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,6 @@ -The MIT License (MIT) +MIT License -Copyright (c) 2015 Open Health Imaging Foundation +Copyright (c) 2018 Open Health Imaging Foundation Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/README.md b/README.md index 74db02c09ba..cebac8e6618 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,8 @@
-

ohif-viewer

-

ohif-viewer is a zero-footprint medical image viewer provided by the Open Health Imaging Foundation (OHIF). It is a configurable and extensible progressive web application with out-of-the-box support for image archives which support DICOMweb.

+

OHIF Medical Imaging Viewer

+

The OHIF Viewer is a zero-footprint medical image viewer provided by the Open Health Imaging Foundation (OHIF). It is a configurable and extensible progressive web application with out-of-the-box support for image archives which support DICOMweb.

@@ -19,233 +19,175 @@
-[![CircleCI][circleci-image]][circleci-url] -[![codecov][codecov-image]][codecov-url] -[![All Contributors](https://img.shields.io/badge/all_contributors-10-orange.svg?style=flat-square)](#contributors) -[![code style: prettier][prettier-image]][prettier-url] -[![semantic-release][semantic-image]][semantic-url] - [![NPM version][npm-version-image]][npm-url] [![NPM downloads][npm-downloads-image]][npm-url] [![Pulls][docker-pulls-img]][docker-image-url] [![MIT License][license-image]][license-url] - - - -> ATTENTION: If you are looking for Version 1 (the Meteor Version) of this -> repository, it lives on -> [the `v1.x` branch](https://github.com/OHIF/Viewers/tree/v1.x) -## Why? +[![Netlify Status][netlify-image]][netlify-url] +[![CircleCI][circleci-image]][circleci-url] +[![codecov][codecov-image]][codecov-url] +[![All Contributors](https://img.shields.io/badge/all_contributors-10-orange.svg?style=flat-square)](#contributors) -Building a web based medical imaging viewer from scratch is time intensive, hard -to get right, and expensive. Instead of re-inventing the wheel, you can use the -OHIF Viewer as a rock solid platform to build on top of. The Viewer is a -[React][react-url] [Progressive Web Application][pwa-url] that can be embedded -in existing applications via it's [packaged source -(ohif-viewer)][ohif-viewer-url] or hosted stand-alone. The Viewer exposes -[configuration][configuration-url] and [extensions][extensions-url] to support -workflow customization and advanced functionality at common integration points. +## What? -If you're interested in using the OHIF Viewer, but you're not sure it supports -your use case [check out our docs](https://docs.ohif.org/). Still not sure, or -you would like to propose new features? Don't hesitate to -[create an issue](https://github.com/OHIF/Viewers/issues) or open a pull -request. +The OHIF Medical Imaging Viewer is for viewing medical images. It can retrieve and load images from most sources and formats; render sets in 2D, 3D, and reconstructed representations; allows for the manipulation, annotation, and serialization of observations; supports internationalization, OpenID Connect, offline use, hotkeys, and many more features. -## Getting Started +Almost everything offers some degree of customization and configuration. If it doesn't support something you need, we accept pull requests and have an ever improving Extension System. -This readme is specific to testing and developing locally. If you're more -interested in production deployment strategies, -[you can check out our documentation on publishing](https://docs.ohif.org/). +## Why Choose Us -Want to play around before you dig in? -[Check out our LIVE Demo](https://viewer.ohif.org/) +### Community & Experience -### Setup +The OHIF Viewer is a collaborative effort that has served as the basis for many active, production, and FDA Cleared medical imaging viewers. It benefits from our extensive community's collective experience, and from the sponsored contributions of individuals, research groups, and commercial organizations. -_Requirements:_ +### Built to Adapt -- [NodeJS & NPM](https://nodejs.org/en/download/) -- [Yarn](https://yarnpkg.com/lang/en/docs/install/) +... -_Steps:_ -1. Fork this repository -2. Clone your forked repository (your `origin`) +### Support -- `git clone git@github.com:YOUR_GITHUB_USERNAME/Viewers.git` +... -3. Add `OHIF/Viewers` as a `remote` repository (the `upstream`) +## Quick Start Deployment -- `git remote add upstream git@github.com:OHIF/Viewers.git` +> This is only one of many ways to configure and deploy the OHIF Viewer. To learn more about your options, and how to choose the best one for your requirements, check out [our deployment recipes and documentation](https://docs.ohif.org/deployment/). -### Developing Locally +The fastest and easiest way to get started is to include the OHIF Viewer with a script tag. In practice, this is as simple as: -In your cloned repository's root folder, run: +- Including the following dependencies with script tags: + - [React](https://unpkg.com/react@16/umd/react.production.min.js) + - [React Dom](https://unpkg.com/react-dom@16/umd/react-dom.production.min.js) + - The [OHIF Viewer](https://unpkg.com/ohif-viewer@0.19.5/dist/index.umd.js) +- Have an element with an ID of `root` on the page +- Configure the OHIF Viewer at `window.config`: ```js -// Restore dependencies -yarn install - -// Stands up local server to host Viewer. -// Viewer connects to our public cloud PACS by default -yarn start +window.config = { + routerBasename: "/", + servers: { + dicomWeb: [ + { + name: "DCM4CHEE", + qidoRoot: "https://server.dcmjs.org/dcm4chee-arc/aets/DCM4CHEE/rs", + wadoRoot: "https://server.dcmjs.org/dcm4chee-arc/aets/DCM4CHEE/rs", + qidoSupportsIncludeField: true, + imageRendering: "wadors", + thumbnailRendering: "wadors" + } + ] + } +}; ``` -For more advanced local development scenarios, like using your own locally -hosted PACS and test data, -[check out our Essential: Getting Started](https://docs.ohif.org/essentials/getting-started.html) -guide. - -### E2E Tests +- Install the viewer: `window.OHIFStandaloneViewer.installViewer(window.config);` -Using [Cypress](https://www.cypress.io/) to create End-to-End tests and check whether the application flow is performing correctly, ensuring that the integrated components are working as expected. +This exact setup is demonstrated in this [CodeSandbox](https://codesandbox.io/s/ohif-viewer-script-tag-usage-c4u4t) and in our [Embedding The Viewer](https://docs.ohif.org/deployment/recipes/embedded-viewer.html) deployment recipe. -#### Why Cypress? +## Developing -Cypress is a next generation front end testing tool built for the modern web. -With Cypress is easy to set up, write, run and debug tests +### Requirements -It allow us to write different types of tests: +- [Yarn 1.17.3+](https://yarnpkg.com/en/docs/install) +- [Node 8+](https://nodejs.org/en/) +- Yarn Workspaces should be enabled on your machine: + - `yarn config set workspaces-experimental true` -- End-to-End tests -- Integration tests -- Unit tets +### Getting Started -All tests must be in `./cypress/integration` folder. +1. [Fork this repository][how-to-fork] +2. [Clone your forked repository][how-to-clone] + - `git clone https://github.com/YOUR-USERNAME/Viewers.git` +3. Navigate to the cloned project's directory +4. Add this repo as a `remote` named `upstream` + - `git remote add upstream https://github.com/OHIF/Viewers.git` +5. `yarn install` to restore dependencies and link projects -Commands to run the tests: +#### To Develop -```js -// Open Cypress Dashboard that provides insight into what happened when your tests ran -yarn run cy +_From this repository's root directory:_ -// Run all tests using Electron browser headless -yarn run cy:run +```bash +# Enable Yarn Workspaces +yarn config set workspaces-experimental true -// Run all tests in CI mode -yarn run cy:run:ci +# Restore dependencies +yarn install ``` -### Contributing - -> Large portions of the Viewer's functionality are maintained in other -> repositories. To get a better understanding of the Viewer's architecture and -> "where things live", read -> [our docs on the Viewer's architecture](https://docs.ohif.org/advanced/architecture.html#diagram) - -It is notoriously difficult to setup multiple dependent repositories for -end-to-end testing and development. That's why we recommend writing and running -unit tests when adding and modifying features. This allows us to program in -isolation without a complex setup, and has the added benefit of producing -well-tested business logic. - -1. Clone this repository -2. Navigate to the project directory, and `yarn install` -3. To begin making changes, `yarn run dev` -4. To commit changes, run `yarn run cm` - -When creating tests, place the test file "next to" the file you're testing. -[For example](https://github.com/OHIF/Viewers/blob/master/src/utils/index.test.js): - -```js -// File -index.js - -// Test for file -index.test.js +## Commands + +These commands are available from the root directory. Each project directory also supports a number of commands that can be found in their respective `README.md` and `project.json` files. + +| Yarn Commands | Description | +| -------------------- | ------------------------------------------------------------- | +| **Develop** | | +| `dev` or `start` | Default development experience for Viewer | +| `dev:project ` | Replace with `core`, `ui`, `i18n`, `cornerstone`, `vtk`, etc. | +| `test:unit` | Jest multi-project test runner; overall coverage | +| **Deploy** | | +| `build`* | Builds production output for our PWA Viewer | +| `build:package`* | Builds production `commonjs` output for our Viewer | +| `build:package-all`* | Builds commonjs bundles for all projects | + + +\* - For more information on our different builds, check out our [Deploy Docs][deployment-docs] + +## Projects + +The OHIF Medical Image Viewing Platform is maintained as a +[`monorepo`][monorepo]. This means that this repository, instead of containing a +single project, contains many projects. If you explore our project structure, +you'll see the following: + +```bash +. +β”œβ”€β”€ extensions # +β”‚ β”œβ”€β”€ _example # Skeleton of example extension +β”‚ β”œβ”€β”€ cornerstone # 2D images w/ Cornerstone.js +β”‚ β”œβ”€β”€ dicom-html # Structured Reports as HTML in viewport +β”‚ β”œβ”€β”€ dicom-microscopy # Whole slide microscopy viewing +β”‚ β”œβ”€β”€ dicom-pdf # View DICOM wrapped PDFs in viewport +β”‚ └── vtk # MPR and Volume support w/ VTK.js +β”‚ +β”œβ”€β”€ platform # +β”‚ β”œβ”€β”€ core # Business Logic +β”‚ β”œβ”€β”€ i18n # Internationalization Support +β”‚ β”œβ”€β”€ ui # React component library +β”‚ └── viewer # Connects platform and extension projects +β”‚ +β”œβ”€β”€ ... # misc. shared configuration +β”œβ”€β”€ lerna.json # MonoRepo (Lerna) settings +β”œβ”€β”€ package.json # Shared devDependencies and commands +└── README.md # This file ``` -As you add and modify code, `jest` will watch for uncommitted changes and run -your tests, reporting the results to your terminal. Make a pull request with -your changes to `master`, and a core team member will review your work. If you -have any questions, please don't hesitate to reach out via a GitHub issue. - -## Issues - -_Looking to contribute? Look for the [Good First Issue][good-first-issue] -label._ - -### πŸ› Bugs +Want to better understand why and how we've structured this repository? Read +more about it in our [Architecture Documentation][ohif-architecture]. -Please file an issue for bugs, missing documentation, or unexpected behavior. +### Platform -[**See Bugs**][bugs] +These projects comprise the -### πŸ’‘ Feature Requests +| Name | Description | Links | +| ------------------------------- | ----------- | ----- | +| [@ohif/core][platform-core] | | NPM | +| [@ohif/i18n][platform-i18n] | | NPM | +| [@ohif/viewer][platform-viewer] | | NPM | +| [@ohif/ui][platform-ui] | | NPM | -Please file an issue to suggest new features. Vote on feature requests by adding -a πŸ‘. This helps maintainers prioritize what to work on. +### Extensions -[**See Feature Requests**][requests-feature] +This is a list of Extensions maintained by the OHIF Core team. It's possible to customize and configure these extensions, and you can even create your own. You can [read more about extensions here][ohif-extensions]. -### ❓ Questions - -For questions related to using the library, please visit our support community, -or file an issue on GitHub. - -[Google Group][google-group] - -## Roadmap - -If you want to know what's planned for the very near future, -[check out our roadmap](https://ohif.canny.io/). The best way to influence when -and what is worked on is to contribute to the conversation by creating GitHub -issues, and contributing code through pull requests. OHIF's high level -priorities for the near future are: - -- Feature parity with version 1 -- Extension and configuration improvements with key integration partners -- Continued Developer Experience Improvements -- Segmentation Tools, and improved VTK.js support - -More granular information will make it's way to the backlog as these items -become scoped for development by core maintainers. - -> Don't hesitate to ask questions, propose features, or create pull requests. -> We're here, we're listening, and we're ready to build the best open source -> medical imaging viewer on the web. - -#### Roadmap Generously Powered by Canny.io - - - - - -## Contributors - -Thanks goes to these wonderful people -([emoji key](https://allcontributors.org/docs/en/emoji-key)): - - - - - - - - - - - - - - - - - - -
Erik Ziegler
Erik Ziegler

πŸ’» πŸš‡
Evren Ozkan
Evren Ozkan

πŸ’»
Gustavo AndrΓ© Lelis
Gustavo AndrΓ© Lelis

πŸ’»
Danny Brown
Danny Brown

πŸ’» πŸš‡
allcontributors[bot]
allcontributors[bot]

πŸ“–
Esref Durna
Esref Durna

πŸ’¬
diego0020
diego0020

πŸ’»
David Wire
David Wire

πŸ’»
JoΓ£o Felipe de Medeiros Moreira
JoΓ£o Felipe de Medeiros Moreira

⚠️
Egor Lezhnin
Egor Lezhnin

πŸ’»
- - - -This project follows the -[all-contributors](https://github.com/all-contributors/all-contributors) -specification. Contributions of any kind welcome! - -## License - -MIT Β© [OHIF](https://github.com/OHIF) +| Name | Description | Links | +| -------------------------------------------------------------- | ----------- | ----- | +| [@ohif/extension-cornestone][extension-cornerstone] | | NPM | +| [@ohif/extension-dicom-html][extension-dicom-html] | | NPM | +| [@ohif/extension-dicom-microscopy][extension-dicom-microscopy] | | NPM | +| [@ohif/extension-dicom-pdf][extension-dicom-pdf] | | NPM | +| [@ohif/extension-vtk][extension-vtk] | | NPM | ## Acknowledgments @@ -269,12 +211,20 @@ Cancer Institute, Informatics Technology for Cancer Research (ITCR) program, under a [grant to Dr. Gordon Harris at Massachusetts General Hospital (U24 CA199460)](https://projectreporter.nih.gov/project_info_description.cfm?aid=8971104). +## License + +MIT Β© [OHIF](https://github.com/OHIF) + + Links + --> - + +[lerna-image]: https://img.shields.io/badge/maintained%20with-lerna-cc00ff.svg +[lerna-url]: https://lerna.js.org/ +[netlify-image]: https://api.netlify.com/api/v1/badges/a5d369ab-18a6-41c3-bcde-83805205ac7f/deploy-status +[netlify-url]: https://app.netlify.com/sites/ohif/deploys [all-contributors-image]: https://img.shields.io/badge/all_contributors-0-orange.svg?style=flat-square [contributing-url]: https://github.com/OHIF/Viewers/blob/react/CONTRIBUTING.md [circleci-image]: https://circleci.com/gh/OHIF/Viewers.svg?style=svg @@ -293,18 +243,27 @@ Links: [docker-image-url]: https://hub.docker.com/r/ohif/viewer [license-image]: https://img.shields.io/badge/license-MIT-blue.svg?style=flat-square [license-url]: LICENSE - + +[monorepo]: https://en.wikipedia.org/wiki/Monorepo +[how-to-fork]: https://help.github.com/en/articles/fork-a-repo +[how-to-clone]: https://help.github.com/en/articles/fork-a-repo#step-2-create-a-local-clone-of-your-fork +[ohif-architecture]: https://docs.ohif.org/advanced/architecture.html +[ohif-extensions]: https://docs.ohif.org/advanced/architecture.html +[deployment-docs]: https://docs.ohif.org/deployment/ [react-url]: https://reactjs.org/ [pwa-url]: https://developers.google.com/web/progressive-web-apps/ [ohif-viewer-url]: https://www.npmjs.com/package/ohif-viewer [configuration-url]: https://docs.ohif.org/essentials/configuration.html [extensions-url]: https://docs.ohif.org/advanced/extensions.html - -[react-viewer]: https://github.com/OHIF/Viewers/tree/react - -[bugs]: https://github.com/OHIF/Viewers/labels/bug -[requests-feature]: https://github.com/OHIF/Viewers/labels/enhancement -[good-first-issue]: https://github.com/OHIF/Viewers/labels/good%20first%20issue -[google-group]: https://groups.google.com/forum/#!forum/cornerstone-platform - + +[platform-core]: platform/core/README.md +[platform-i18n]: platform/i18n/README.md +[platform-ui]: platform/ui/README.md +[platform-viewer]: platform/viewer/README.md + +[extension-cornerstone]: extensions/cornerstone/README.md +[extension-dicom-html]: extensions/dicom-html/README.md +[extension-dicom-microscopy]: extensions/dicom-microscopy/README.md +[extension-dicom-pdf]: extensions/dicom-pdf/README.md +[extension-vtk]: extensions/vtk/README.md diff --git a/aliases.config.js b/aliases.config.js new file mode 100644 index 00000000000..e828c9f97ba --- /dev/null +++ b/aliases.config.js @@ -0,0 +1,8 @@ +/* Used by webpack, babel and eslint */ + +const path = require('path'); + +module.exports = { + '@codinsky/parse-js': path.resolve(__dirname, 'packages/parse/src'), + '@codinsky/curate': path.resolve(__dirname, 'packages/curate/src'), +}; diff --git a/babel.config.js b/babel.config.js new file mode 100644 index 00000000000..041795dea1b --- /dev/null +++ b/babel.config.js @@ -0,0 +1,56 @@ +const aliases = require('./aliases.config'); +const path = require('path'); + +module.exports = { + // Also specified in .webpack/webpack.common.js + // https://github.com/zloirock/core-js/blob/master/docs/2019-03-19-core-js-3-babel-and-a-look-into-the-future.md + presets: [ + [ + '@babel/preset-env', + { + targets: { + ie: '11', + }, + // https://babeljs.io/docs/en/babel-preset-env#usebuiltins + useBuiltIns: 'usage', + // https://babeljs.io/docs/en/babel-preset-env#corejs + corejs: 3, + }, + ], + '@babel/preset-react', + ], + // https://babeljs.io/docs/en/options#babelrcroots + babelrcRoots: ['./platform/*', './extensions/*'], + plugins: [ + 'inline-react-svg', + '@babel/plugin-proposal-class-properties', + '@babel/plugin-proposal-object-rest-spread', + '@babel/plugin-syntax-dynamic-import', + '@babel/plugin-transform-regenerator', + '@babel/plugin-transform-runtime', + [ + 'module-resolver', + { + // https://github.com/tleunen/babel-plugin-module-resolver/issues/338 + // There seem to be a bug with module-resolver with a mono-repo setup: + // It doesn't resolve paths correctly when using root/alias combo, so we + // use this function instead. + resolvePath(sourcePath, currentFile, opts) { + // This will return undefined if aliases has no key for the sourcePath, + // in which case module-resolver will fallback on its default behaviour. + return aliases[sourcePath]; + }, + }, + ], + ], + env: { + debug: { + sourceMaps: 'inline', + retainLines: true, + }, + build: { + ignore: ['**/*.test.jsx', '**/*.test.js', '__snapshots__', '__tests__'], + }, + }, + // ignore: ["node_modules"] +}; diff --git a/docs/latest/advanced/architecture.md b/docs/latest/advanced/architecture.md index 0d7e6007d00..20d99239083 100644 --- a/docs/latest/advanced/architecture.md +++ b/docs/latest/advanced/architecture.md @@ -12,17 +12,13 @@ architected, and the role each of it's dependent libraries plays. ## Overview -The [`OHIF/Viewers`](https://github.com/OHIF/Viewers/tree/react) repository -contains the source code for the OHIF Medical Imaging Viewer. It is effectively -a React -[progressive web app](https://developers.google.com/web/progressive-web-apps/) -(PWA) that combines the business logic housed in -[`OHIF/ohif-core`](https://github.com/OHIF/ohif-core) and the components in our -React Component library -[`OHIF/react-viewerbase`](https://github.com/OHIF/react-viewerbase). It provides -customization for common use cases through -[configuration](../essentials/configuration.md) and for adding functionality via -[extensions](./extensions.md). +The [`OHIF/Viewers`][viewers-project] project contains the source code for the +OHIF Medical Imaging Viewer. It is effectively a React [progressive web +app][pwa] (PWA) that combines the business logic housed in +[`OHIF/ohif-core`][core] and the components in our React Component library +[`OHIF/react-viewerbase`][component-library]. It provides customization for +common use cases through [configuration][configuration] and for adding +functionality via [extensions][extensions]. ### Business Logic @@ -71,13 +67,13 @@ looking for ways to improve our extensibility ^\_^ This diagram is a conceptual illustration of how the Viewer is architected. -0. (optional) `extensions` can be registered with `ohif-core`'s extension +1. (optional) `extensions` can be registered with `ohif-core`'s extension manager -1. `ohif-core` provides bussiness logic and a way for `viewer` to access +2. `ohif-core` provides bussiness logic and a way for `viewer` to access registered extensions -1. The `viewer` composes and provides data to components from our component +3. The `viewer` composes and provides data to components from our component library (`react-viewerbase`) -1. The `viewer` can be built and served as a stand-alone PWA, or as an +4. The `viewer` can be built and served as a stand-alone PWA, or as an embeddable package ([`ohif-viewer`](https://www.npmjs.com/package/ohif-viewer)) @@ -98,3 +94,16 @@ You can, but you will not be able to leverage as much of the existing code and components. `ohif-core` could still be used for business logic, and to provide a model for extensions. `react-viewerbase` would then become a guide for the components you would need to recreate. + + + + +[viewers-project]: https://github.com/OHIF/Viewers +[pwa]: https://developers.google.com/web/progressive-web-apps/ +[core]: https://github.com/OHIF/ohif-core +[component-library]: https://github.com/OHIF/react-viewerbase +[configuration]: ../essentials/configuration.md +[extensions]: ./extensions.m + diff --git a/docs/latest/advanced/extensions.md b/docs/latest/advanced/extensions.md index dc4284271cc..4953eb80de1 100644 --- a/docs/latest/advanced/extensions.md +++ b/docs/latest/advanced/extensions.md @@ -197,9 +197,9 @@ would like included at startup. _app.js_ ```js -import { createStore, combineReducers } from 'redux'; -import OHIF from 'ohif-core'; -import OHIFCornerstoneExtension from 'ohif-cornerstone-extension'; +import { createStore, combineReducers } from "redux"; +import OHIF from "@ohif/core"; +import OHIFCornerstoneExtension from "ohif-cornerstone-extension"; const combined = combineReducers(OHIF.redux.reducers); const store = createStore(combined); diff --git a/docs/latest/advanced/monorepos-a-crash-courese.md b/docs/latest/advanced/monorepos-a-crash-courese.md new file mode 100644 index 00000000000..1ddb598b29d --- /dev/null +++ b/docs/latest/advanced/monorepos-a-crash-courese.md @@ -0,0 +1,23 @@ +# MonoRepos: A Crash Course + +- [Lerna][lerna] + +Solutions: + +## Semantic-Release + +- [Semantic-Release](https://github.com/semantic-release/semantic-release/issues/193#issuecomment-462063871) +- [Multi-semantic-release](https://github.com/dhoulb/multi-semantic-release) +- [semantic-release-monorepo](https://github.com/Updater/semantic-release-monorepo) + +# Netlify + +- https://community.netlify.com/t/best-practices-for-deploying-sites-from-monorepos/818 + + + + +[lerna]: https://github.com/lerna/lerna + diff --git a/docs/latest/assets/designs/canny-full.fig b/docs/latest/assets/designs/canny-full.fig index cb8d0ee27d2..8756e9f7951 100644 Binary files a/docs/latest/assets/designs/canny-full.fig and b/docs/latest/assets/designs/canny-full.fig differ diff --git a/docs/latest/assets/designs/nginx-image-archive.fig b/docs/latest/assets/designs/nginx-image-archive.fig index 625066aa96c..460ae95dd35 100644 Binary files a/docs/latest/assets/designs/nginx-image-archive.fig and b/docs/latest/assets/designs/nginx-image-archive.fig differ diff --git a/docs/latest/assets/designs/scope-of-project.fig b/docs/latest/assets/designs/scope-of-project.fig index 1a3c9033d23..5eb82e561df 100644 Binary files a/docs/latest/assets/designs/scope-of-project.fig and b/docs/latest/assets/designs/scope-of-project.fig differ diff --git a/docs/latest/assets/designs/user-access-control-request-flow.fig b/docs/latest/assets/designs/user-access-control-request-flow.fig index 17d278d90ec..8982a8fedd5 100644 Binary files a/docs/latest/assets/designs/user-access-control-request-flow.fig and b/docs/latest/assets/designs/user-access-control-request-flow.fig differ diff --git a/eslintAliasesResolver.js b/eslintAliasesResolver.js new file mode 100644 index 00000000000..146d8d1ee6f --- /dev/null +++ b/eslintAliasesResolver.js @@ -0,0 +1,8 @@ +module.exports.interfaceVersion = 2; + +module.exports.resolve = (source, file, aliases) => { + if (aliases[source]) { + return { found: true, path: aliases[source] }; + } + return { found: false }; +}; diff --git a/extensions/_ohif-example-extension/src/index.js b/extensions/_example/src/index.js similarity index 100% rename from extensions/_ohif-example-extension/src/index.js rename to extensions/_example/src/index.js diff --git a/extensions/cornerstone/.webpack/webpack.dev.js b/extensions/cornerstone/.webpack/webpack.dev.js new file mode 100644 index 00000000000..180994fd663 --- /dev/null +++ b/extensions/cornerstone/.webpack/webpack.dev.js @@ -0,0 +1,16 @@ +const path = require('path'); +const merge = require('webpack-merge'); +const webpackCommon = require('./../../../.webpack/webpack.common.js'); + +// +const SRC_DIR = path.join(__dirname, '../src'); +const DIST_DIR = path.join(__dirname, '../dist'); + +module.exports = (env, argv) => { + const commonConfig = webpackCommon(env, argv, { SRC_DIR, DIST_DIR }); + + return merge(commonConfig, { + // https://webpack.js.org/configuration/mode/#mode-development + mode: 'development', + }); +}; diff --git a/extensions/cornerstone/.webpack/webpack.prod.js b/extensions/cornerstone/.webpack/webpack.prod.js new file mode 100644 index 00000000000..cacedd1bcc8 --- /dev/null +++ b/extensions/cornerstone/.webpack/webpack.prod.js @@ -0,0 +1,39 @@ +const merge = require('webpack-merge'); +const path = require('path'); +const webpackCommon = require('./../../../.webpack/webpack.common.js'); +const pkg = require('./../package.json'); + +const ROOT_DIR = path.join(__dirname, './..'); +const SRC_DIR = path.join(__dirname, '../src'); +const DIST_DIR = path.join(__dirname, '../dist'); + +module.exports = (env, argv) => { + const commonConfig = webpackCommon(env, argv, { SRC_DIR, DIST_DIR }); + + return merge(commonConfig, { + // https://webpack.js.org/configuration/mode/#mode-production + mode: 'production', + devtool: 'source-map', + stats: { + colors: true, + hash: true, + timings: true, + assets: true, + chunks: false, + chunkModules: false, + modules: false, + children: false, + warnings: true, + }, + optimization: { + minimize: true, + sideEffects: true, + }, + output: { + path: ROOT_DIR, + library: 'ohifExtensionCornerstone', + libraryTarget: 'umd', + filename: pkg.main, + }, + }); +}; diff --git a/extensions/cornerstone/CHANGELOG.md b/extensions/cornerstone/CHANGELOG.md new file mode 100644 index 00000000000..0af4bb56edb --- /dev/null +++ b/extensions/cornerstone/CHANGELOG.md @@ -0,0 +1,61 @@ +# Change Log + +All notable changes to this project will be documented in this file. See +[Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +## [0.0.39-alpha.7](https://github.com/OHIF/Viewers/compare/@ohif/extension-cornerstone@0.0.39-alpha.6...@ohif/extension-cornerstone@0.0.39-alpha.7) (2019-08-08) + +**Note:** Version bump only for package @ohif/extension-cornerstone + +# Change Log + +All notable changes to this project will be documented in this file. See +[Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +## [0.0.39-alpha.6](https://github.com/OHIF/Viewers/compare/@ohif/extension-cornerstone@0.0.39-alpha.5...@ohif/extension-cornerstone@0.0.39-alpha.6) (2019-08-08) + +**Note:** Version bump only for package @ohif/extension-cornerstone + +# Change Log + +All notable changes to this project will be documented in this file. See +[Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +## [0.0.39-alpha.5](https://github.com/OHIF/Viewers/compare/@ohif/extension-cornerstone@0.0.39-alpha.4...@ohif/extension-cornerstone@0.0.39-alpha.5) (2019-08-08) + +**Note:** Version bump only for package @ohif/extension-cornerstone + +# Change Log + +All notable changes to this project will be documented in this file. See +[Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +## [0.0.39-alpha.4](https://github.com/OHIF/Viewers/compare/@ohif/extension-cornerstone@0.0.39-alpha.3...@ohif/extension-cornerstone@0.0.39-alpha.4) (2019-08-08) + +**Note:** Version bump only for package @ohif/extension-cornerstone + +# Change Log + +All notable changes to this project will be documented in this file. See +[Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +## [0.0.39-alpha.3](https://github.com/OHIF/Viewers/compare/@ohif/extension-cornerstone@0.0.39-alpha.2...@ohif/extension-cornerstone@0.0.39-alpha.3) (2019-08-08) + +**Note:** Version bump only for package @ohif/extension-cornerstone + +# Change Log + +All notable changes to this project will be documented in this file. See +[Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +## [0.0.39-alpha.2](https://github.com/OHIF/Viewers/compare/@ohif/extension-cornerstone@0.0.39-alpha.1...@ohif/extension-cornerstone@0.0.39-alpha.2) (2019-08-07) + +**Note:** Version bump only for package @ohif/extension-cornerstone + +## [0.0.39-alpha.1](https://github.com/OHIF/Viewers/compare/@ohif/extension-cornerstone@0.0.39-alpha.0...@ohif/extension-cornerstone@0.0.39-alpha.1) (2019-08-07) + +**Note:** Version bump only for package @ohif/extension-cornerstone + +## 0.0.39-alpha.0 (2019-08-05) + +**Note:** Version bump only for package @ohif/extension-cornerstone diff --git a/extensions/ohif-cornerstone-extension/LICENSE b/extensions/cornerstone/LICENSE similarity index 100% rename from extensions/ohif-cornerstone-extension/LICENSE rename to extensions/cornerstone/LICENSE diff --git a/extensions/ohif-cornerstone-extension/README.md b/extensions/cornerstone/README.md similarity index 100% rename from extensions/ohif-cornerstone-extension/README.md rename to extensions/cornerstone/README.md diff --git a/extensions/cornerstone/package.json b/extensions/cornerstone/package.json new file mode 100644 index 00000000000..ae89b5212d0 --- /dev/null +++ b/extensions/cornerstone/package.json @@ -0,0 +1,52 @@ +{ + "name": "@ohif/extension-cornerstone", + "version": "0.0.39-alpha.7", + "description": "OHIF extension for Cornerstone", + "author": "OHIF", + "license": "MIT", + "repository": "OHIF/Viewers", + "main": "dist/index.umd.js", + "module": "src/index.js", + "engines": { + "node": ">=8", + "npm": ">=5" + }, + "files": [ + "dist", + "README.md" + ], + "publishConfig": { + "access": "public" + }, + "scripts": { + "dev": "webpack --config .webpack/webpack.dev.js --watch --debug --output-pathinfo", + "dev:cornerstone": "yarn run dev", + "build": "webpack --config .webpack/webpack.prod.js", + "build:package": "yarn run build", + "prepublishOnly": "yarn run build", + "start": "yarn run dev" + }, + "peerDependencies": { + "@ohif/core": "^0.11.1-alpha.0", + "@ohif/ui": "^0.2.18-alpha.0", + "cornerstone-core": "^2.2.8", + "cornerstone-math": "^0.1.8", + "cornerstone-tools": "^3.1.0", + "cornerstone-wado-image-loader": "^3.0.0", + "dcmjs": "^0.3.8", + "dicom-parser": "^1.8.3", + "hammerjs": "^2.0.8", + "prop-types": "^15.6.2", + "react": "^15.0.0 || ^16.0.0", + "react-dom": "^15.0.0 || ^16.0.0", + "react-redux": "^6.0.0", + "react-resize-detector": "^3.4.0", + "redux": "^4.0.1" + }, + "dependencies": { + "@babel/runtime": "^7.5.5", + "classnames": "^2.2.6", + "lodash.throttle": "^4.1.1", + "react-cornerstone-viewport": "0.1.30" + } +} diff --git a/extensions/ohif-cornerstone-extension/src/ConnectedCornerstoneViewport.js b/extensions/cornerstone/src/ConnectedCornerstoneViewport.js similarity index 96% rename from extensions/ohif-cornerstone-extension/src/ConnectedCornerstoneViewport.js rename to extensions/cornerstone/src/ConnectedCornerstoneViewport.js index f0d775047d7..87a82d04dc9 100644 --- a/extensions/ohif-cornerstone-extension/src/ConnectedCornerstoneViewport.js +++ b/extensions/cornerstone/src/ConnectedCornerstoneViewport.js @@ -1,5 +1,5 @@ import CornerstoneViewport from 'react-cornerstone-viewport'; -import OHIF from 'ohif-core'; +import OHIF from '@ohif/core'; import { connect } from 'react-redux'; import throttle from 'lodash.throttle'; @@ -13,12 +13,12 @@ const { // TODO: Transition to enums for the action names so that we can ensure they stay up to date // everywhere they're used. const MEASUREMENT_ACTION_MAP = { - 'added': onAdded, - 'removed': onRemoved, - 'modified': throttle(event => { + added: onAdded, + removed: onRemoved, + modified: throttle(event => { return onModified(event); }, 300), -} +}; const mapStateToProps = (state, ownProps) => { let dataFromStore; diff --git a/extensions/ohif-cornerstone-extension/src/OHIFCornerstoneViewport.js b/extensions/cornerstone/src/OHIFCornerstoneViewport.js similarity index 83% rename from extensions/ohif-cornerstone-extension/src/OHIFCornerstoneViewport.js rename to extensions/cornerstone/src/OHIFCornerstoneViewport.js index a9e6fdae6e4..cb6a00e6604 100644 --- a/extensions/ohif-cornerstone-extension/src/OHIFCornerstoneViewport.js +++ b/extensions/cornerstone/src/OHIFCornerstoneViewport.js @@ -1,10 +1,10 @@ -import React, { Component } from 'react'; +import React, { Component } from "react"; -import ConnectedCornerstoneViewport from './ConnectedCornerstoneViewport'; -import OHIF from 'ohif-core'; -import PropTypes from 'prop-types'; -import cornerstone from 'cornerstone-core'; -import handleSegmentationStorage from './handleSegmentationStorage.js'; +import ConnectedCornerstoneViewport from "./ConnectedCornerstoneViewport"; +import OHIF from "@ohif/core"; +import PropTypes from "prop-types"; +import cornerstone from "cornerstone-core"; +import handleSegmentationStorage from "./handleSegmentationStorage.js"; const { StackManager } = OHIF.utils; @@ -18,7 +18,7 @@ cornerstone.metaData.addProvider( StackManager.setMetadataProvider(metadataProvider); const SOP_CLASSES = { - SEGMENTATION_STORAGE: '1.2.840.10008.5.1.4.1.1.66.4', + SEGMENTATION_STORAGE: "1.2.840.10008.5.1.4.1.1.66.4" }; const specialCaseHandlers = {}; @@ -28,11 +28,11 @@ specialCaseHandlers[ class OHIFCornerstoneViewport extends Component { state = { - viewportData: null, + viewportData: null }; static defaultProps = { - customProps: {}, + customProps: {} }; static propTypes = { @@ -40,17 +40,17 @@ class OHIFCornerstoneViewport extends Component { displaySet: PropTypes.object, viewportIndex: PropTypes.number, children: PropTypes.node, - customProps: PropTypes.object, + customProps: PropTypes.object }; - static id = 'OHIFCornerstoneViewport'; + static id = "OHIFCornerstoneViewport"; static init() { - console.log('OHIFCornerstoneViewport init()'); + console.log("OHIFCornerstoneViewport init()"); } static destroy() { - console.log('OHIFCornerstoneViewport destroy()'); + console.log("OHIFCornerstoneViewport destroy()"); StackManager.clearStacks(); } @@ -72,15 +72,15 @@ class OHIFCornerstoneViewport extends Component { frameIndex = 0 ) { if (!studies || !studies.length) { - throw new Error('Studies not provided.'); + throw new Error("Studies not provided."); } if (!studyInstanceUid) { - throw new Error('StudyInstanceUID not provided.'); + throw new Error("StudyInstanceUID not provided."); } if (!displaySetInstanceUid) { - throw new Error('StudyInstanceUID not provided.'); + throw new Error("StudyInstanceUID not provided."); } // Create shortcut to displaySet @@ -89,7 +89,7 @@ class OHIFCornerstoneViewport extends Component { ); if (!study) { - throw new Error('Study not found.'); + throw new Error("Study not found."); } const displaySet = study.displaySets.find(set => { @@ -97,7 +97,7 @@ class OHIFCornerstoneViewport extends Component { }); if (!displaySet) { - throw new Error('Display Set not found.'); + throw new Error("Display Set not found."); } // Get stack from Stack Manager @@ -110,7 +110,7 @@ class OHIFCornerstoneViewport extends Component { if (sopInstanceUid) { const index = stack.imageIds.findIndex(imageId => { const sopCommonModule = cornerstone.metaData.get( - 'sopCommonModule', + "sopCommonModule", imageId ); if (!sopCommonModule) { @@ -124,7 +124,7 @@ class OHIFCornerstoneViewport extends Component { stack.currentImageIdIndex = index; } else { console.warn( - 'SOPInstanceUID provided was not found in specified DisplaySet' + "SOPInstanceUID provided was not found in specified DisplaySet" ); } } @@ -183,7 +183,7 @@ class OHIFCornerstoneViewport extends Component { viewportData = { studyInstanceUid, displaySetInstanceUid, - stack, + stack }; break; @@ -199,7 +199,7 @@ class OHIFCornerstoneViewport extends Component { displaySetInstanceUid, sopClassUids, sopInstanceUid, - frameIndex, + frameIndex } = displaySet; if (!studyInstanceUid || !displaySetInstanceUid) { @@ -208,7 +208,7 @@ class OHIFCornerstoneViewport extends Component { if (sopClassUids && sopClassUids.length > 1) { console.warn( - 'More than one SOPClassUid in the same series is not yet supported.' + "More than one SOPClassUid in the same series is not yet supported." ); } @@ -223,7 +223,7 @@ class OHIFCornerstoneViewport extends Component { frameIndex ).then(viewportData => { this.setState({ - viewportData, + viewportData }); }); } @@ -254,7 +254,7 @@ class OHIFCornerstoneViewport extends Component { childrenWithProps = this.props.children.map((child, index) => { return React.cloneElement(child, { viewportIndex: this.props.viewportIndex, - key: index, + key: index }); }); } diff --git a/extensions/ohif-cornerstone-extension/src/commandsModule.js b/extensions/cornerstone/src/commandsModule.js similarity index 99% rename from extensions/ohif-cornerstone-extension/src/commandsModule.js rename to extensions/cornerstone/src/commandsModule.js index 96ad024e1f6..17011a766a8 100644 --- a/extensions/ohif-cornerstone-extension/src/commandsModule.js +++ b/extensions/cornerstone/src/commandsModule.js @@ -1,6 +1,6 @@ import cornerstone from 'cornerstone-core'; import cornerstoneTools from 'cornerstone-tools'; -import OHIF from 'ohif-core'; +import OHIF from '@ohif/core'; const scroll = cornerstoneTools.import('util/scroll'); const actions = { @@ -161,7 +161,7 @@ const actions = { ); scroll(enabledElement, -1); - } + }, }; const definitions = { diff --git a/extensions/ohif-cornerstone-extension/src/handleSegmentationStorage.js b/extensions/cornerstone/src/handleSegmentationStorage.js similarity index 89% rename from extensions/ohif-cornerstone-extension/src/handleSegmentationStorage.js rename to extensions/cornerstone/src/handleSegmentationStorage.js index a65d667d4b4..8b999badc85 100644 --- a/extensions/ohif-cornerstone-extension/src/handleSegmentationStorage.js +++ b/extensions/cornerstone/src/handleSegmentationStorage.js @@ -1,8 +1,8 @@ -import * as dcmjs from 'dcmjs'; +import * as dcmjs from "dcmjs"; -import OHIF from 'ohif-core'; -import cornerstone from 'cornerstone-core'; -import cornerstoneTools from 'cornerstone-tools'; +import OHIF from "@ohif/core"; +import cornerstone from "cornerstone-core"; +import cornerstoneTools from "cornerstone-tools"; const { StackManager } = OHIF.utils; @@ -56,7 +56,7 @@ function retrieveDicomData(wadoUri) { // TODO: Authorization header depends on the server. If we ever have multiple servers // we will need to figure out how / when to pass this information in. return fetch(wadoUri, { - headers: OHIF.DICOMWeb.getAuthorizationHeader(), + headers: OHIF.DICOMWeb.getAuthorizationHeader() }).then(response => response.arrayBuffer()); } @@ -91,7 +91,7 @@ async function handleSegmentationStorage( if (displaySets.length > 1) { console.warn( - 'More than one display set with the same seriesInstanceUid. This is not supported yet...' + "More than one display set with the same seriesInstanceUid. This is not supported yet..." ); } @@ -100,7 +100,7 @@ async function handleSegmentationStorage( const results = parseSeg(arrayBuffer, imageIds); if (!results) { - throw new Error('Fractional segmentations are not supported'); + throw new Error("Fractional segmentations are not supported"); } const { segMetadata, toolState } = results; @@ -123,7 +123,7 @@ async function handleSegmentationStorage( return { studyInstanceUid, displaySetInstanceUid, - stack, + stack }; } diff --git a/extensions/ohif-cornerstone-extension/src/index.js b/extensions/cornerstone/src/index.js similarity index 100% rename from extensions/ohif-cornerstone-extension/src/index.js rename to extensions/cornerstone/src/index.js diff --git a/extensions/ohif-cornerstone-extension/src/toolbarModule.js b/extensions/cornerstone/src/toolbarModule.js similarity index 100% rename from extensions/ohif-cornerstone-extension/src/toolbarModule.js rename to extensions/cornerstone/src/toolbarModule.js diff --git a/extensions/dicom-html/.webpack/webpack.dev.js b/extensions/dicom-html/.webpack/webpack.dev.js new file mode 100644 index 00000000000..180994fd663 --- /dev/null +++ b/extensions/dicom-html/.webpack/webpack.dev.js @@ -0,0 +1,16 @@ +const path = require('path'); +const merge = require('webpack-merge'); +const webpackCommon = require('./../../../.webpack/webpack.common.js'); + +// +const SRC_DIR = path.join(__dirname, '../src'); +const DIST_DIR = path.join(__dirname, '../dist'); + +module.exports = (env, argv) => { + const commonConfig = webpackCommon(env, argv, { SRC_DIR, DIST_DIR }); + + return merge(commonConfig, { + // https://webpack.js.org/configuration/mode/#mode-development + mode: 'development', + }); +}; diff --git a/extensions/dicom-html/.webpack/webpack.prod.js b/extensions/dicom-html/.webpack/webpack.prod.js new file mode 100644 index 00000000000..6ec4c874423 --- /dev/null +++ b/extensions/dicom-html/.webpack/webpack.prod.js @@ -0,0 +1,39 @@ +const merge = require('webpack-merge'); +const path = require('path'); +const webpackCommon = require('./../../../.webpack/webpack.common.js'); +const pkg = require('./../package.json'); + +const ROOT_DIR = path.join(__dirname, './..'); +const SRC_DIR = path.join(__dirname, '../src'); +const DIST_DIR = path.join(__dirname, '../dist'); + +module.exports = (env, argv) => { + const commonConfig = webpackCommon(env, argv, { SRC_DIR, DIST_DIR }); + + return merge(commonConfig, { + // https://webpack.js.org/configuration/mode/#mode-production + mode: 'production', + devtool: 'source-map', + stats: { + colors: true, + hash: true, + timings: true, + assets: true, + chunks: false, + chunkModules: false, + modules: false, + children: false, + warnings: true, + }, + optimization: { + minimize: true, + sideEffects: true, + }, + output: { + path: ROOT_DIR, + library: 'ohifExtensionDicomHtml', + libraryTarget: 'umd', + filename: pkg.main, + }, + }); +}; diff --git a/extensions/dicom-html/CHANGELOG.md b/extensions/dicom-html/CHANGELOG.md new file mode 100644 index 00000000000..f64a54437f7 --- /dev/null +++ b/extensions/dicom-html/CHANGELOG.md @@ -0,0 +1,61 @@ +# Change Log + +All notable changes to this project will be documented in this file. See +[Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +## [0.0.4-alpha.7](https://github.com/OHIF/Viewers/compare/@ohif/extension-dicom-html@0.0.4-alpha.6...@ohif/extension-dicom-html@0.0.4-alpha.7) (2019-08-08) + +**Note:** Version bump only for package @ohif/extension-dicom-html + +# Change Log + +All notable changes to this project will be documented in this file. See +[Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +## [0.0.4-alpha.6](https://github.com/OHIF/Viewers/compare/@ohif/extension-dicom-html@0.0.4-alpha.5...@ohif/extension-dicom-html@0.0.4-alpha.6) (2019-08-08) + +**Note:** Version bump only for package @ohif/extension-dicom-html + +# Change Log + +All notable changes to this project will be documented in this file. See +[Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +## [0.0.4-alpha.5](https://github.com/OHIF/Viewers/compare/@ohif/extension-dicom-html@0.0.4-alpha.4...@ohif/extension-dicom-html@0.0.4-alpha.5) (2019-08-08) + +**Note:** Version bump only for package @ohif/extension-dicom-html + +# Change Log + +All notable changes to this project will be documented in this file. See +[Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +## [0.0.4-alpha.4](https://github.com/OHIF/Viewers/compare/@ohif/extension-dicom-html@0.0.4-alpha.3...@ohif/extension-dicom-html@0.0.4-alpha.4) (2019-08-08) + +**Note:** Version bump only for package @ohif/extension-dicom-html + +# Change Log + +All notable changes to this project will be documented in this file. See +[Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +## [0.0.4-alpha.3](https://github.com/OHIF/Viewers/compare/@ohif/extension-dicom-html@0.0.4-alpha.2...@ohif/extension-dicom-html@0.0.4-alpha.3) (2019-08-08) + +**Note:** Version bump only for package @ohif/extension-dicom-html + +# Change Log + +All notable changes to this project will be documented in this file. See +[Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +## [0.0.4-alpha.2](https://github.com/OHIF/Viewers/compare/@ohif/extension-dicom-html@0.0.4-alpha.1...@ohif/extension-dicom-html@0.0.4-alpha.2) (2019-08-07) + +**Note:** Version bump only for package @ohif/extension-dicom-html + +## [0.0.4-alpha.1](https://github.com/OHIF/Viewers/compare/@ohif/extension-dicom-html@0.0.4-alpha.0...@ohif/extension-dicom-html@0.0.4-alpha.1) (2019-08-07) + +**Note:** Version bump only for package @ohif/extension-dicom-html + +## 0.0.4-alpha.0 (2019-08-05) + +**Note:** Version bump only for package @ohif/extension-dicom-html diff --git a/extensions/ohif-dicom-html-extension/LICENSE b/extensions/dicom-html/LICENSE similarity index 100% rename from extensions/ohif-dicom-html-extension/LICENSE rename to extensions/dicom-html/LICENSE diff --git a/extensions/dicom-html/README.md b/extensions/dicom-html/README.md new file mode 100644 index 00000000000..2c6e5b7bcc8 --- /dev/null +++ b/extensions/dicom-html/README.md @@ -0,0 +1 @@ +# @ohif/extension-dicom-html diff --git a/extensions/dicom-html/app.css b/extensions/dicom-html/app.css new file mode 100644 index 00000000000..76fb4239cfe --- /dev/null +++ b/extensions/dicom-html/app.css @@ -0,0 +1 @@ +:root{--text-color-primary:#fff}.DicomHtmlViewport{padding:20px;overflow-y:scroll;width:100%;height:100%;color:#fff;color:var(--text-color-primary)} diff --git a/extensions/dicom-html/package.json b/extensions/dicom-html/package.json new file mode 100644 index 00000000000..ba9e0463b80 --- /dev/null +++ b/extensions/dicom-html/package.json @@ -0,0 +1,39 @@ +{ + "name": "@ohif/extension-dicom-html", + "version": "0.0.4-alpha.7", + "description": "OHIF extension for rendering structured reports to HTML", + "author": "OHIF", + "license": "MIT", + "repository": "OHIF/Viewers", + "main": "dist/index.umd.js", + "module": "src/index.js", + "engines": { + "node": ">=8", + "npm": ">=5" + }, + "files": [ + "dist", + "README.md" + ], + "publishConfig": { + "access": "public" + }, + "scripts": { + "dev": "webpack --config .webpack/webpack.dev.js --watch --debug --output-pathinfo", + "dev:dicom-html": "yarn run dev", + "build": "webpack --config .webpack/webpack.prod.js", + "build:package": "yarn run build", + "prepublishOnly": "yarn run build", + "start": "yarn run dev" + }, + "peerDependencies": { + "@ohif/core": "^0.11.1-alpha.0", + "dcmjs": "^0.3.3", + "prop-types": "^15.6.2", + "react": "^15.0.0 || ^16.0.0", + "react-dom": "^15.0.0 || ^16.0.0" + }, + "dependencies": { + "@babel/runtime": "^7.5.5" + } +} diff --git a/extensions/ohif-dicom-html-extension/src/DicomHtmlViewport.css b/extensions/dicom-html/src/DicomHtmlViewport.css similarity index 100% rename from extensions/ohif-dicom-html-extension/src/DicomHtmlViewport.css rename to extensions/dicom-html/src/DicomHtmlViewport.css diff --git a/extensions/ohif-dicom-html-extension/src/DicomHtmlViewport.js b/extensions/dicom-html/src/DicomHtmlViewport.js similarity index 100% rename from extensions/ohif-dicom-html-extension/src/DicomHtmlViewport.js rename to extensions/dicom-html/src/DicomHtmlViewport.js diff --git a/extensions/ohif-dicom-html-extension/src/OHIFDicomHtmlSopClassHandler.js b/extensions/dicom-html/src/OHIFDicomHtmlSopClassHandler.js similarity index 89% rename from extensions/ohif-dicom-html-extension/src/OHIFDicomHtmlSopClassHandler.js rename to extensions/dicom-html/src/OHIFDicomHtmlSopClassHandler.js index e55a10c47bd..72ae8122458 100644 --- a/extensions/ohif-dicom-html-extension/src/OHIFDicomHtmlSopClassHandler.js +++ b/extensions/dicom-html/src/OHIFDicomHtmlSopClassHandler.js @@ -1,4 +1,4 @@ -import { MODULE_TYPES, utils } from 'ohif-core'; +import { MODULE_TYPES, utils } from '@ohif/core'; // TODO: Should probably use dcmjs for this const SOP_CLASS_UIDS = { @@ -8,7 +8,7 @@ const SOP_CLASS_UIDS = { PROCEDURE_LOG_STORAGE: '1.2.840.10008.5.1.4.1.1.88.40', MAMMOGRAPHY_CAD_SR: '1.2.840.10008.5.1.4.1.1.88.50', CHEST_CAD_SR: '1.2.840.10008.5.1.4.1.1.88.65', - X_RAY_RADIATION_DOSE_SR: '1.2.840.10008.5.1.4.1.1.88.67' + X_RAY_RADIATION_DOSE_SR: '1.2.840.10008.5.1.4.1.1.88.67', }; const sopClassUids = Object.values(SOP_CLASS_UIDS); @@ -31,9 +31,9 @@ const OHIFDicomHtmlSopClassHandler = { sopInstanceUid: instance.getSOPInstanceUID(), seriesInstanceUid: series.getSeriesInstanceUID(), studyInstanceUid: study.getStudyInstanceUID(), - authorizationHeaders + authorizationHeaders, }; - } + }, }; export default OHIFDicomHtmlSopClassHandler; diff --git a/extensions/ohif-dicom-html-extension/src/OHIFDicomHtmlViewport.js b/extensions/dicom-html/src/OHIFDicomHtmlViewport.js similarity index 100% rename from extensions/ohif-dicom-html-extension/src/OHIFDicomHtmlViewport.js rename to extensions/dicom-html/src/OHIFDicomHtmlViewport.js diff --git a/extensions/ohif-dicom-html-extension/src/TypedArrayProp.js b/extensions/dicom-html/src/TypedArrayProp.js similarity index 100% rename from extensions/ohif-dicom-html-extension/src/TypedArrayProp.js rename to extensions/dicom-html/src/TypedArrayProp.js diff --git a/extensions/ohif-dicom-html-extension/src/index.js b/extensions/dicom-html/src/index.js similarity index 100% rename from extensions/ohif-dicom-html-extension/src/index.js rename to extensions/dicom-html/src/index.js diff --git a/extensions/dicom-microscopy/.webpack/webpack.dev.js b/extensions/dicom-microscopy/.webpack/webpack.dev.js new file mode 100644 index 00000000000..180994fd663 --- /dev/null +++ b/extensions/dicom-microscopy/.webpack/webpack.dev.js @@ -0,0 +1,16 @@ +const path = require('path'); +const merge = require('webpack-merge'); +const webpackCommon = require('./../../../.webpack/webpack.common.js'); + +// +const SRC_DIR = path.join(__dirname, '../src'); +const DIST_DIR = path.join(__dirname, '../dist'); + +module.exports = (env, argv) => { + const commonConfig = webpackCommon(env, argv, { SRC_DIR, DIST_DIR }); + + return merge(commonConfig, { + // https://webpack.js.org/configuration/mode/#mode-development + mode: 'development', + }); +}; diff --git a/extensions/dicom-microscopy/.webpack/webpack.prod.js b/extensions/dicom-microscopy/.webpack/webpack.prod.js new file mode 100644 index 00000000000..aeaf013157f --- /dev/null +++ b/extensions/dicom-microscopy/.webpack/webpack.prod.js @@ -0,0 +1,39 @@ +const merge = require('webpack-merge'); +const path = require('path'); +const webpackCommon = require('./../../../.webpack/webpack.common.js'); +const pkg = require('./../package.json'); + +const ROOT_DIR = path.join(__dirname, './..'); +const SRC_DIR = path.join(__dirname, '../src'); +const DIST_DIR = path.join(__dirname, '../dist'); + +module.exports = (env, argv) => { + const commonConfig = webpackCommon(env, argv, { SRC_DIR, DIST_DIR }); + + return merge(commonConfig, { + // https://webpack.js.org/configuration/mode/#mode-production + mode: 'production', + devtool: 'source-map', + stats: { + colors: true, + hash: true, + timings: true, + assets: true, + chunks: false, + chunkModules: false, + modules: false, + children: false, + warnings: true, + }, + optimization: { + minimize: true, + sideEffects: true, + }, + output: { + path: ROOT_DIR, + library: 'ohifExtensionDicomMicroscopy', + libraryTarget: 'umd', + filename: pkg.main, + }, + }); +}; diff --git a/extensions/dicom-microscopy/CHANGELOG.md b/extensions/dicom-microscopy/CHANGELOG.md new file mode 100644 index 00000000000..4b05c943857 --- /dev/null +++ b/extensions/dicom-microscopy/CHANGELOG.md @@ -0,0 +1,61 @@ +# Change Log + +All notable changes to this project will be documented in this file. See +[Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +## [0.0.9-alpha.7](https://github.com/OHIF/Viewers/compare/@ohif/extension-dicom-microscopy@0.0.9-alpha.6...@ohif/extension-dicom-microscopy@0.0.9-alpha.7) (2019-08-08) + +**Note:** Version bump only for package @ohif/extension-dicom-microscopy + +# Change Log + +All notable changes to this project will be documented in this file. See +[Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +## [0.0.9-alpha.6](https://github.com/OHIF/Viewers/compare/@ohif/extension-dicom-microscopy@0.0.9-alpha.5...@ohif/extension-dicom-microscopy@0.0.9-alpha.6) (2019-08-08) + +**Note:** Version bump only for package @ohif/extension-dicom-microscopy + +# Change Log + +All notable changes to this project will be documented in this file. See +[Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +## [0.0.9-alpha.5](https://github.com/OHIF/Viewers/compare/@ohif/extension-dicom-microscopy@0.0.9-alpha.4...@ohif/extension-dicom-microscopy@0.0.9-alpha.5) (2019-08-08) + +**Note:** Version bump only for package @ohif/extension-dicom-microscopy + +# Change Log + +All notable changes to this project will be documented in this file. See +[Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +## [0.0.9-alpha.4](https://github.com/OHIF/Viewers/compare/@ohif/extension-dicom-microscopy@0.0.9-alpha.3...@ohif/extension-dicom-microscopy@0.0.9-alpha.4) (2019-08-08) + +**Note:** Version bump only for package @ohif/extension-dicom-microscopy + +# Change Log + +All notable changes to this project will be documented in this file. See +[Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +## [0.0.9-alpha.3](https://github.com/OHIF/Viewers/compare/@ohif/extension-dicom-microscopy@0.0.9-alpha.2...@ohif/extension-dicom-microscopy@0.0.9-alpha.3) (2019-08-08) + +**Note:** Version bump only for package @ohif/extension-dicom-microscopy + +# Change Log + +All notable changes to this project will be documented in this file. See +[Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +## [0.0.9-alpha.2](https://github.com/OHIF/Viewers/compare/@ohif/extension-dicom-microscopy@0.0.9-alpha.1...@ohif/extension-dicom-microscopy@0.0.9-alpha.2) (2019-08-07) + +**Note:** Version bump only for package @ohif/extension-dicom-microscopy + +## [0.0.9-alpha.1](https://github.com/OHIF/Viewers/compare/@ohif/extension-dicom-microscopy@0.0.9-alpha.0...@ohif/extension-dicom-microscopy@0.0.9-alpha.1) (2019-08-07) + +**Note:** Version bump only for package @ohif/extension-dicom-microscopy + +## 0.0.9-alpha.0 (2019-08-05) + +**Note:** Version bump only for package @ohif/extension-dicom-microscopy diff --git a/extensions/ohif-dicom-microscopy-extension/LICENSE b/extensions/dicom-microscopy/LICENSE similarity index 100% rename from extensions/ohif-dicom-microscopy-extension/LICENSE rename to extensions/dicom-microscopy/LICENSE diff --git a/extensions/ohif-dicom-microscopy-extension/README.md b/extensions/dicom-microscopy/README.md similarity index 100% rename from extensions/ohif-dicom-microscopy-extension/README.md rename to extensions/dicom-microscopy/README.md diff --git a/extensions/dicom-microscopy/package.json b/extensions/dicom-microscopy/package.json new file mode 100644 index 00000000000..9a6fe7ff1a7 --- /dev/null +++ b/extensions/dicom-microscopy/package.json @@ -0,0 +1,39 @@ +{ + "name": "@ohif/extension-dicom-microscopy", + "version": "0.0.9-alpha.7", + "description": "OHIF extension for Dicom Microscopy", + "author": "OHIF", + "license": "MIT", + "repository": "OHIF/Viewers", + "main": "dist/index.umd.js", + "module": "src/index.js", + "publishConfig": { + "access": "public" + }, + "files": [ + "dist", + "README.md" + ], + "engines": { + "node": ">=8", + "npm": ">=5" + }, + "scripts": { + "dev": "webpack --config .webpack/webpack.dev.js --watch --debug --output-pathinfo", + "dev:dicom-microscopy": "yarn run dev", + "build": "webpack --config .webpack/webpack.prod.js", + "build:package": "yarn run build", + "prepublishOnly": "yarn run build", + "start": "yarn run dev" + }, + "peerDependencies": { + "@ohif/core": "^0.11.1-alpha.0", + "react": "^15.0.0 || ^16.0.0", + "react-dom": "^15.0.0 || ^16.0.0" + }, + "dependencies": { + "@babel/runtime": "^7.5.5", + "classnames": "^2.2.6", + "dicom-microscopy-viewer": "^0.4.3" + } +} diff --git a/extensions/ohif-dicom-microscopy-extension/src/DicomMicroscopySopClassHandler.js b/extensions/dicom-microscopy/src/DicomMicroscopySopClassHandler.js similarity index 96% rename from extensions/ohif-dicom-microscopy-extension/src/DicomMicroscopySopClassHandler.js rename to extensions/dicom-microscopy/src/DicomMicroscopySopClassHandler.js index 18d848c2e81..ae116d96d0b 100644 --- a/extensions/ohif-dicom-microscopy-extension/src/DicomMicroscopySopClassHandler.js +++ b/extensions/dicom-microscopy/src/DicomMicroscopySopClassHandler.js @@ -1,4 +1,4 @@ -import OHIF from 'ohif-core'; +import OHIF from '@ohif/core'; const { utils } = OHIF; diff --git a/extensions/ohif-dicom-microscopy-extension/src/DicomMicroscopyViewport.js b/extensions/dicom-microscopy/src/DicomMicroscopyViewport.js similarity index 100% rename from extensions/ohif-dicom-microscopy-extension/src/DicomMicroscopyViewport.js rename to extensions/dicom-microscopy/src/DicomMicroscopyViewport.js diff --git a/extensions/ohif-dicom-microscopy-extension/src/index.js b/extensions/dicom-microscopy/src/index.js similarity index 100% rename from extensions/ohif-dicom-microscopy-extension/src/index.js rename to extensions/dicom-microscopy/src/index.js diff --git a/extensions/dicom-pdf/.webpack/webpack.dev.js b/extensions/dicom-pdf/.webpack/webpack.dev.js new file mode 100644 index 00000000000..180994fd663 --- /dev/null +++ b/extensions/dicom-pdf/.webpack/webpack.dev.js @@ -0,0 +1,16 @@ +const path = require('path'); +const merge = require('webpack-merge'); +const webpackCommon = require('./../../../.webpack/webpack.common.js'); + +// +const SRC_DIR = path.join(__dirname, '../src'); +const DIST_DIR = path.join(__dirname, '../dist'); + +module.exports = (env, argv) => { + const commonConfig = webpackCommon(env, argv, { SRC_DIR, DIST_DIR }); + + return merge(commonConfig, { + // https://webpack.js.org/configuration/mode/#mode-development + mode: 'development', + }); +}; diff --git a/extensions/dicom-pdf/.webpack/webpack.prod.js b/extensions/dicom-pdf/.webpack/webpack.prod.js new file mode 100644 index 00000000000..02b27112c53 --- /dev/null +++ b/extensions/dicom-pdf/.webpack/webpack.prod.js @@ -0,0 +1,39 @@ +const merge = require('webpack-merge'); +const path = require('path'); +const webpackCommon = require('./../../../.webpack/webpack.common.js'); +const pkg = require('./../package.json'); + +const ROOT_DIR = path.join(__dirname, './..'); +const SRC_DIR = path.join(__dirname, '../src'); +const DIST_DIR = path.join(__dirname, '../dist'); + +module.exports = (env, argv) => { + const commonConfig = webpackCommon(env, argv, { SRC_DIR, DIST_DIR }); + + return merge(commonConfig, { + // https://webpack.js.org/configuration/mode/#mode-production + mode: 'production', + devtool: 'source-map', + stats: { + colors: true, + hash: true, + timings: true, + assets: true, + chunks: false, + chunkModules: false, + modules: false, + children: false, + warnings: true, + }, + optimization: { + minimize: true, + sideEffects: true, + }, + output: { + path: ROOT_DIR, + library: 'ohifExtensionDicomPdf', + libraryTarget: 'umd', + filename: pkg.main, + }, + }); +}; diff --git a/extensions/dicom-pdf/CHANGELOG.md b/extensions/dicom-pdf/CHANGELOG.md new file mode 100644 index 00000000000..4300713218c --- /dev/null +++ b/extensions/dicom-pdf/CHANGELOG.md @@ -0,0 +1,61 @@ +# Change Log + +All notable changes to this project will be documented in this file. See +[Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +## [0.0.8-alpha.7](https://github.com/OHIF/Viewers/compare/@ohif/extension-dicom-pdf@0.0.8-alpha.6...@ohif/extension-dicom-pdf@0.0.8-alpha.7) (2019-08-08) + +**Note:** Version bump only for package @ohif/extension-dicom-pdf + +# Change Log + +All notable changes to this project will be documented in this file. See +[Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +## [0.0.8-alpha.6](https://github.com/OHIF/Viewers/compare/@ohif/extension-dicom-pdf@0.0.8-alpha.5...@ohif/extension-dicom-pdf@0.0.8-alpha.6) (2019-08-08) + +**Note:** Version bump only for package @ohif/extension-dicom-pdf + +# Change Log + +All notable changes to this project will be documented in this file. See +[Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +## [0.0.8-alpha.5](https://github.com/OHIF/Viewers/compare/@ohif/extension-dicom-pdf@0.0.8-alpha.4...@ohif/extension-dicom-pdf@0.0.8-alpha.5) (2019-08-08) + +**Note:** Version bump only for package @ohif/extension-dicom-pdf + +# Change Log + +All notable changes to this project will be documented in this file. See +[Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +## [0.0.8-alpha.4](https://github.com/OHIF/Viewers/compare/@ohif/extension-dicom-pdf@0.0.8-alpha.3...@ohif/extension-dicom-pdf@0.0.8-alpha.4) (2019-08-08) + +**Note:** Version bump only for package @ohif/extension-dicom-pdf + +# Change Log + +All notable changes to this project will be documented in this file. See +[Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +## [0.0.8-alpha.3](https://github.com/OHIF/Viewers/compare/@ohif/extension-dicom-pdf@0.0.8-alpha.2...@ohif/extension-dicom-pdf@0.0.8-alpha.3) (2019-08-08) + +**Note:** Version bump only for package @ohif/extension-dicom-pdf + +# Change Log + +All notable changes to this project will be documented in this file. See +[Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +## [0.0.8-alpha.2](https://github.com/OHIF/Viewers/compare/@ohif/extension-dicom-pdf@0.0.8-alpha.1...@ohif/extension-dicom-pdf@0.0.8-alpha.2) (2019-08-07) + +**Note:** Version bump only for package @ohif/extension-dicom-pdf + +## [0.0.8-alpha.1](https://github.com/OHIF/Viewers/compare/@ohif/extension-dicom-pdf@0.0.8-alpha.0...@ohif/extension-dicom-pdf@0.0.8-alpha.1) (2019-08-07) + +**Note:** Version bump only for package @ohif/extension-dicom-pdf + +## 0.0.8-alpha.0 (2019-08-05) + +**Note:** Version bump only for package @ohif/extension-dicom-pdf diff --git a/extensions/ohif-dicom-pdf-extension/LICENSE b/extensions/dicom-pdf/LICENSE similarity index 100% rename from extensions/ohif-dicom-pdf-extension/LICENSE rename to extensions/dicom-pdf/LICENSE diff --git a/extensions/dicom-pdf/README.md b/extensions/dicom-pdf/README.md new file mode 100644 index 00000000000..c988c4be6d8 --- /dev/null +++ b/extensions/dicom-pdf/README.md @@ -0,0 +1 @@ +# @ohif/extension-dicom-pdf diff --git a/extensions/dicom-pdf/package.json b/extensions/dicom-pdf/package.json new file mode 100644 index 00000000000..8d6cc3ea9b6 --- /dev/null +++ b/extensions/dicom-pdf/package.json @@ -0,0 +1,42 @@ +{ + "name": "@ohif/extension-dicom-pdf", + "version": "0.0.8-alpha.7", + "description": "OHIF extension for Dicom PDF", + "author": "OHIF", + "license": "MIT", + "repository": "OHIF/Viewers", + "main": "dist/index.umd.js", + "module": "src/index.js", + "publishConfig": { + "access": "public" + }, + "engines": { + "node": ">=8", + "npm": ">=5" + }, + "files": [ + "dist", + "README.md" + ], + "scripts": { + "dev": "webpack --config .webpack/webpack.dev.js --watch --debug --output-pathinfo", + "dev:dicom-pdf": "yarn run dev", + "build": "webpack --config .webpack/webpack.prod.js", + "build:package": "yarn run build", + "prepublishOnly": "yarn run build", + "start": "yarn run dev" + }, + "peerDependencies": { + "@ohif/core": "^0.11.1-alpha.0", + "dicom-parser": "^1.8.3", + "prop-types": "^15.6.2", + "react": "^15.0.0 || ^16.0.0", + "react-dom": "^15.0.0 || ^16.0.0" + }, + "dependencies": { + "@babel/runtime": "^7.5.5", + "classnames": "^2.2.6", + "lodash.isequal": "^4.5.0" + }, + "gitHead": "a5baa9228c0eda0df880136bde4420d78e6f8706" +} diff --git a/extensions/ohif-dicom-pdf-extension/src/DicomPDFViewport.js b/extensions/dicom-pdf/src/DicomPDFViewport.js similarity index 100% rename from extensions/ohif-dicom-pdf-extension/src/DicomPDFViewport.js rename to extensions/dicom-pdf/src/DicomPDFViewport.js diff --git a/extensions/ohif-dicom-pdf-extension/src/OHIFComponentPlugin.js b/extensions/dicom-pdf/src/OHIFComponentPlugin.js similarity index 100% rename from extensions/ohif-dicom-pdf-extension/src/OHIFComponentPlugin.js rename to extensions/dicom-pdf/src/OHIFComponentPlugin.js diff --git a/extensions/ohif-dicom-pdf-extension/src/OHIFDicomPDFSopClassHandler.js b/extensions/dicom-pdf/src/OHIFDicomPDFSopClassHandler.js similarity index 83% rename from extensions/ohif-dicom-pdf-extension/src/OHIFDicomPDFSopClassHandler.js rename to extensions/dicom-pdf/src/OHIFDicomPDFSopClassHandler.js index fe36cecaf1c..63a020e0b81 100644 --- a/extensions/ohif-dicom-pdf-extension/src/OHIFDicomPDFSopClassHandler.js +++ b/extensions/dicom-pdf/src/OHIFDicomPDFSopClassHandler.js @@ -1,8 +1,8 @@ -import { MODULE_TYPES, utils } from 'ohif-core'; +import { MODULE_TYPES, utils } from '@ohif/core'; // TODO: Should probably use dcmjs for this const SOP_CLASS_UIDS = { - ENCAPSULATED_PDF: '1.2.840.10008.5.1.4.1.1.104.1' + ENCAPSULATED_PDF: '1.2.840.10008.5.1.4.1.1.104.1', }; const OHIFDicomPDFSopClassHandler = { @@ -21,9 +21,9 @@ const OHIFDicomPDFSopClassHandler = { sopInstanceUid: instance.getSOPInstanceUID(), seriesInstanceUid: series.getSeriesInstanceUID(), studyInstanceUid: study.getStudyInstanceUID(), - authorizationHeaders: authorizationHeaders + authorizationHeaders: authorizationHeaders, }; - } + }, }; export default OHIFDicomPDFSopClassHandler; diff --git a/extensions/ohif-dicom-pdf-extension/src/OHIFDicomPDFViewport.js b/extensions/dicom-pdf/src/OHIFDicomPDFViewport.js similarity index 51% rename from extensions/ohif-dicom-pdf-extension/src/OHIFDicomPDFViewport.js rename to extensions/dicom-pdf/src/OHIFDicomPDFViewport.js index 604220c4c54..37ed988ddb1 100644 --- a/extensions/ohif-dicom-pdf-extension/src/OHIFDicomPDFViewport.js +++ b/extensions/dicom-pdf/src/OHIFDicomPDFViewport.js @@ -1,8 +1,8 @@ -import React, { Component } from 'react'; -import PropTypes from 'prop-types'; -import OHIF from 'ohif-core'; -import OHIFComponentPlugin from './OHIFComponentPlugin.js'; -import DicomPDFViewport from './DicomPDFViewport'; +import React, { Component } from "react"; +import PropTypes from "prop-types"; +import OHIF from "@ohif/core"; +import OHIFComponentPlugin from "./OHIFComponentPlugin.js"; +import DicomPDFViewport from "./DicomPDFViewport"; const { DICOMWeb } = OHIF; @@ -18,44 +18,69 @@ class OHIFDicomPDFViewport extends Component { error: null }; - static id = 'DicomPDFViewportPDF'; + static id = "DicomPDFViewportPDF"; static init() { - console.log('DicomPDFViewport init()'); + console.log("DicomPDFViewport init()"); } static destroy() { - console.log('DicomPDFViewport destroy()'); + console.log("DicomPDFViewport destroy()"); } componentDidMount() { const { displaySet } = this.props.viewportData; - const { studyInstanceUid, seriesInstanceUid, sopInstanceUid, wadoRoot, wadoUri, authorizationHeaders} = displaySet; + const { + studyInstanceUid, + seriesInstanceUid, + sopInstanceUid, + wadoRoot, + wadoUri, + authorizationHeaders + } = displaySet; - this.retrieveDicomData(studyInstanceUid, seriesInstanceUid, sopInstanceUid, wadoRoot, wadoUri, authorizationHeaders).then(byteArray => { - this.setState({ - byteArray - }); - }, error => { - this.setState({ - error - }); + this.retrieveDicomData( + studyInstanceUid, + seriesInstanceUid, + sopInstanceUid, + wadoRoot, + wadoUri, + authorizationHeaders + ).then( + byteArray => { + this.setState({ + byteArray + }); + }, + error => { + this.setState({ + error + }); throw new Error(error); } ); } - retrieveDicomData(studyInstanceUid, seriesInstanceUid, sopInstanceUid, wadoRoot, wadoUri, authorizationHeaders) { + retrieveDicomData( + studyInstanceUid, + seriesInstanceUid, + sopInstanceUid, + wadoRoot, + wadoUri, + authorizationHeaders + ) { // TODO: Passing in a lot of data we aren't using // TODO: Authorization header depends on the server. If we ever have multiple servers // we will need to figure out how / when to pass this information in. return fetch(wadoUri, { headers: authorizationHeaders - }).then(response => response.arrayBuffer()).then(arraybuffer => { - return new Uint8Array(arraybuffer); - }); + }) + .then(response => response.arrayBuffer()) + .then(arraybuffer => { + return new Uint8Array(arraybuffer); + }); } render() { diff --git a/extensions/ohif-dicom-pdf-extension/src/TypedArrayProp.js b/extensions/dicom-pdf/src/TypedArrayProp.js similarity index 100% rename from extensions/ohif-dicom-pdf-extension/src/TypedArrayProp.js rename to extensions/dicom-pdf/src/TypedArrayProp.js diff --git a/extensions/ohif-dicom-pdf-extension/src/index.js b/extensions/dicom-pdf/src/index.js similarity index 100% rename from extensions/ohif-dicom-pdf-extension/src/index.js rename to extensions/dicom-pdf/src/index.js diff --git a/extensions/ohif-cornerstone-extension/.babelrc b/extensions/ohif-cornerstone-extension/.babelrc deleted file mode 100644 index 430b9904b69..00000000000 --- a/extensions/ohif-cornerstone-extension/.babelrc +++ /dev/null @@ -1,14 +0,0 @@ -{ - "presets": [ - ["@babel/preset-env", { - "targets": { - "ie": "11" - } - }], - "@babel/preset-react" - ], - "plugins": [ - "@babel/plugin-proposal-class-properties", - "@babel/plugin-transform-runtime" - ] -} diff --git a/extensions/ohif-cornerstone-extension/.editorconfig b/extensions/ohif-cornerstone-extension/.editorconfig deleted file mode 100644 index 9d08a1a828a..00000000000 --- a/extensions/ohif-cornerstone-extension/.editorconfig +++ /dev/null @@ -1,9 +0,0 @@ -root = true - -[*] -charset = utf-8 -indent_style = space -indent_size = 2 -end_of_line = lf -insert_final_newline = true -trim_trailing_whitespace = true diff --git a/extensions/ohif-cornerstone-extension/.eslintrc b/extensions/ohif-cornerstone-extension/.eslintrc deleted file mode 100644 index 77d67cd94b1..00000000000 --- a/extensions/ohif-cornerstone-extension/.eslintrc +++ /dev/null @@ -1,16 +0,0 @@ -{ - "extends": [ - "react-app", - "eslint:recommended", - "plugin:react/recommended" - ], - "parser": "babel-eslint", - "env": { - "jest": true - }, - "settings": { - "react": { - "version": "detect", - }, - }, -} diff --git a/extensions/ohif-cornerstone-extension/.gitignore b/extensions/ohif-cornerstone-extension/.gitignore deleted file mode 100644 index 32c3cd46645..00000000000 --- a/extensions/ohif-cornerstone-extension/.gitignore +++ /dev/null @@ -1,26 +0,0 @@ - -# See https://help.github.com/ignore-files/ for more about ignoring files. - -# dependencies -node_modules - -# builds -build -dist -.rpt2_cache - -# misc -.DS_Store -.env -.env.local -.env.development.local -.env.test.local -.env.production.local - -npm-debug.log* -yarn-debug.log* -yarn-error.log* -.idea - -yalc.lock -.yalc \ No newline at end of file diff --git a/extensions/ohif-cornerstone-extension/.prettierrc b/extensions/ohif-cornerstone-extension/.prettierrc deleted file mode 100644 index 12348ec6acf..00000000000 --- a/extensions/ohif-cornerstone-extension/.prettierrc +++ /dev/null @@ -1,9 +0,0 @@ -{ - "trailingComma": "es5", - "printWidth": 80, - "proseWrap": "always", - "tabWidth": 2, - "semi": true, - "singleQuote": true, - "endOfLine": "lf" -} diff --git a/extensions/ohif-cornerstone-extension/.travis.yml b/extensions/ohif-cornerstone-extension/.travis.yml deleted file mode 100644 index 984658c939e..00000000000 --- a/extensions/ohif-cornerstone-extension/.travis.yml +++ /dev/null @@ -1,4 +0,0 @@ -language: node_js -node_js: - - 9 - - 8 diff --git a/extensions/ohif-cornerstone-extension/package.json b/extensions/ohif-cornerstone-extension/package.json deleted file mode 100644 index 329e3dc00e0..00000000000 --- a/extensions/ohif-cornerstone-extension/package.json +++ /dev/null @@ -1,101 +0,0 @@ -{ - "name": "@ohif/extension-cornerstone", - "version": "0.0.43", - "description": "OHIF extension for Cornerstone", - "author": "OHIF", - "license": "MIT", - "repository": "OHIF/Viewers", - "main": "dist/index.umd.js", - "module": "dist/index.es.js", - "jsnext:main": "dist/index.es.js", - "engines": { - "node": ">=8", - "npm": ">=5" - }, - "scripts": { - "build": "rollup -c", - "prepublishOnly": "npm run build", - "start": "rollup -c -w", - "lint": "eslint -c .eslintrc --fix src && prettier --single-quote --write src/**/*.{js,jsx,json,css}" - }, - "peerDependencies": { - "cornerstone-core": "^2.2.8", - "cornerstone-math": "^0.1.8", - "cornerstone-tools": "^3.1.0", - "cornerstone-wado-image-loader": "^2.2.3", - "dcmjs": "^0.3.8", - "dicom-parser": "^1.8.3", - "hammerjs": "^2.0.8", - "ohif-core": "^0.6.0", - "prop-types": "^15.6.2", - "react": "^15.0.0 || ^16.0.0", - "react-dom": "^15.0.0 || ^16.0.0", - "react-redux": "^6.0.0", - "react-resize-detector": "^3.4.0", - "react-viewerbase": "^0.6.0", - "redux": "^4.0.1" - }, - "dependencies": { - "@babel/runtime": "^7.2.0", - "classnames": "^2.2.6", - "lodash.throttle": "^4.1.1", - "react-cornerstone-viewport": "0.1.32" - }, - "devDependencies": { - "@babel/core": "^7.2.2", - "@babel/plugin-external-helpers": "^7.2.0", - "@babel/plugin-proposal-class-properties": "^7.2.3", - "@babel/plugin-transform-runtime": "^7.2.0", - "@babel/preset-env": "^7.2.3", - "@babel/preset-react": "^7.0.0", - "babel-eslint": "^10.0.1", - "cross-env": "^5.2.0", - "eslint": "5.13.0", - "eslint-plugin-import": "^2.14.0", - "eslint-plugin-node": "^8.0.0", - "eslint-plugin-promise": "^4.0.1", - "eslint-plugin-react": "^7.11.1", - "gh-pages": "^2.0.1", - "husky": "^1.3.1", - "lint-staged": "^8.1.0", - "lodash.clonedeep": "^4.5.0", - "prettier": "^1.15.3", - "react": "^16.6.3", - "react-dom": "^16.6.3", - "rollup": "^1.1.2", - "rollup-plugin-babel": "^4.2.0", - "rollup-plugin-commonjs": "^9.2.0", - "rollup-plugin-node-builtins": "^2.1.2", - "rollup-plugin-node-resolve": "^4.0.0", - "rollup-plugin-peer-deps-external": "^2.2.0", - "rollup-plugin-postcss": "^2.0.3", - "rollup-plugin-url": "^2.1.0", - "stylelint": "^9.9.0", - "stylelint-config-recommended": "^2.1.0", - "stylus": "^0.54.5" - }, - "husky": { - "hooks": { - "pre-commit": "lint-staged" - } - }, - "lint-staged": { - "src/**/*.{js,jsx,json,css}": [ - "prettier --single-quote --write", - "git add" - ] - }, - "browserslist": [ - ">0.2%", - "not dead", - "not ie <= 11", - "not op_mini all" - ], - "files": [ - "dist", - "README.md" - ], - "publishConfig": { - "access": "public" - } -} diff --git a/extensions/ohif-cornerstone-extension/rollup.config.js b/extensions/ohif-cornerstone-extension/rollup.config.js deleted file mode 100644 index f4130377c84..00000000000 --- a/extensions/ohif-cornerstone-extension/rollup.config.js +++ /dev/null @@ -1,68 +0,0 @@ -import babel from 'rollup-plugin-babel' -import commonjs from 'rollup-plugin-commonjs' -import external from 'rollup-plugin-peer-deps-external' -import postcss from 'rollup-plugin-postcss' -import resolve from 'rollup-plugin-node-resolve' -import url from 'rollup-plugin-url' -import pkg from './package.json' -// Deal with https://github.com/rollup/rollup-plugin-commonjs/issues/297 -import builtins from 'rollup-plugin-node-builtins'; - -const globals = { - 'react': 'React', - 'react-dom': 'ReactDOM', - 'react-redux': 'ReactRedux', - 'react-resize-detector': 'ReactResizeDetector', - 'react-viewerbase': 'reactViewerbase', - 'prop-types': 'PropTypes', - 'cornerstone-core': 'cornerstone', - 'cornerstone-wado-image-loader': 'cornerstoneWADOImageLoader', - 'cornerstone-math': 'cornerstoneMath', - 'cornerstone-tools': 'cornerstoneTools', - 'dcmjs': 'dcmjs', - 'dicom-parser': 'dicomParser', - 'ohif-core': 'OHIF', - 'hammerjs': 'Hammer' -}; - -export default { - input: 'src/index.js', - output: [ - { - file: pkg.main, - format: 'umd', - name: 'ohif-cornerstone-extension', - sourcemap: true, - globals - }, - { - file: pkg.module, - format: 'es', - sourcemap: true, - globals - } - ], - plugins: [ - builtins(), - external(), - postcss({ - modules: false - }), - url(), - babel({ - exclude: 'node_modules/**', - externalHelpers: true, - runtimeHelpers: true - }), - resolve(), - commonjs({ - include: 'node_modules/**', - namedExports: { - 'node_modules/react-is/index.js': [ - 'isValidElementType' - ] - } - }) - ], - external: Object.keys(pkg.peerDependencies || {}), -} diff --git a/extensions/ohif-cornerstone-extension/yarn.lock b/extensions/ohif-cornerstone-extension/yarn.lock deleted file mode 100644 index c86149adf76..00000000000 --- a/extensions/ohif-cornerstone-extension/yarn.lock +++ /dev/null @@ -1,5643 +0,0 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -"@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" - dependencies: - "@babel/highlight" "^7.0.0" - -"@babel/core@^7.1.2": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.2.0.tgz#a4dd3814901998e93340f0086e9867fefa163ada" - dependencies: - "@babel/code-frame" "^7.0.0" - "@babel/generator" "^7.2.0" - "@babel/helpers" "^7.2.0" - "@babel/parser" "^7.2.0" - "@babel/template" "^7.1.2" - "@babel/traverse" "^7.1.6" - "@babel/types" "^7.2.0" - convert-source-map "^1.1.0" - debug "^4.1.0" - json5 "^2.1.0" - lodash "^4.17.10" - resolve "^1.3.2" - semver "^5.4.1" - source-map "^0.5.0" - -"@babel/core@^7.2.2": - version "7.2.2" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.2.2.tgz#07adba6dde27bb5ad8d8672f15fde3e08184a687" - dependencies: - "@babel/code-frame" "^7.0.0" - "@babel/generator" "^7.2.2" - "@babel/helpers" "^7.2.0" - "@babel/parser" "^7.2.2" - "@babel/template" "^7.2.2" - "@babel/traverse" "^7.2.2" - "@babel/types" "^7.2.2" - convert-source-map "^1.1.0" - debug "^4.1.0" - json5 "^2.1.0" - lodash "^4.17.10" - resolve "^1.3.2" - semver "^5.4.1" - source-map "^0.5.0" - -"@babel/generator@^7.1.6", "@babel/generator@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.2.0.tgz#eaf3821fa0301d9d4aef88e63d4bcc19b73ba16c" - dependencies: - "@babel/types" "^7.2.0" - jsesc "^2.5.1" - lodash "^4.17.10" - source-map "^0.5.0" - trim-right "^1.0.1" - -"@babel/generator@^7.2.2": - version "7.2.2" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.2.2.tgz#18c816c70962640eab42fe8cae5f3947a5c65ccc" - dependencies: - "@babel/types" "^7.2.2" - jsesc "^2.5.1" - lodash "^4.17.10" - source-map "^0.5.0" - trim-right "^1.0.1" - -"@babel/helper-annotate-as-pure@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.0.0.tgz#323d39dd0b50e10c7c06ca7d7638e6864d8c5c32" - dependencies: - "@babel/types" "^7.0.0" - -"@babel/helper-builder-binary-assignment-operator-visitor@^7.1.0": - version "7.1.0" - resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.1.0.tgz#6b69628dfe4087798e0c4ed98e3d4a6b2fbd2f5f" - dependencies: - "@babel/helper-explode-assignable-expression" "^7.1.0" - "@babel/types" "^7.0.0" - -"@babel/helper-builder-react-jsx@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/helper-builder-react-jsx/-/helper-builder-react-jsx-7.0.0.tgz#fa154cb53eb918cf2a9a7ce928e29eb649c5acdb" - dependencies: - "@babel/types" "^7.0.0" - esutils "^2.0.0" - -"@babel/helper-call-delegate@^7.1.0": - version "7.1.0" - resolved "https://registry.yarnpkg.com/@babel/helper-call-delegate/-/helper-call-delegate-7.1.0.tgz#6a957f105f37755e8645343d3038a22e1449cc4a" - dependencies: - "@babel/helper-hoist-variables" "^7.0.0" - "@babel/traverse" "^7.1.0" - "@babel/types" "^7.0.0" - -"@babel/helper-create-class-features-plugin@^7.2.3": - version "7.2.3" - resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.2.3.tgz#f6e719abb90cb7f4a69591e35fd5eb89047c4a7c" - dependencies: - "@babel/helper-function-name" "^7.1.0" - "@babel/helper-member-expression-to-functions" "^7.0.0" - "@babel/helper-optimise-call-expression" "^7.0.0" - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-replace-supers" "^7.2.3" - -"@babel/helper-define-map@^7.1.0": - version "7.1.0" - resolved "https://registry.yarnpkg.com/@babel/helper-define-map/-/helper-define-map-7.1.0.tgz#3b74caec329b3c80c116290887c0dd9ae468c20c" - dependencies: - "@babel/helper-function-name" "^7.1.0" - "@babel/types" "^7.0.0" - lodash "^4.17.10" - -"@babel/helper-explode-assignable-expression@^7.1.0": - version "7.1.0" - resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.1.0.tgz#537fa13f6f1674df745b0c00ec8fe4e99681c8f6" - dependencies: - "@babel/traverse" "^7.1.0" - "@babel/types" "^7.0.0" - -"@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" - dependencies: - "@babel/helper-get-function-arity" "^7.0.0" - "@babel/template" "^7.1.0" - "@babel/types" "^7.0.0" - -"@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" - dependencies: - "@babel/types" "^7.0.0" - -"@babel/helper-hoist-variables@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.0.0.tgz#46adc4c5e758645ae7a45deb92bab0918c23bb88" - dependencies: - "@babel/types" "^7.0.0" - -"@babel/helper-member-expression-to-functions@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.0.0.tgz#8cd14b0a0df7ff00f009e7d7a436945f47c7a16f" - dependencies: - "@babel/types" "^7.0.0" - -"@babel/helper-module-imports@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.0.0.tgz#96081b7111e486da4d2cd971ad1a4fe216cc2e3d" - dependencies: - "@babel/types" "^7.0.0" - -"@babel/helper-module-transforms@^7.1.0": - version "7.1.0" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.1.0.tgz#470d4f9676d9fad50b324cdcce5fbabbc3da5787" - dependencies: - "@babel/helper-module-imports" "^7.0.0" - "@babel/helper-simple-access" "^7.1.0" - "@babel/helper-split-export-declaration" "^7.0.0" - "@babel/template" "^7.1.0" - "@babel/types" "^7.0.0" - lodash "^4.17.10" - -"@babel/helper-optimise-call-expression@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.0.0.tgz#a2920c5702b073c15de51106200aa8cad20497d5" - 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" - -"@babel/helper-regex@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/helper-regex/-/helper-regex-7.0.0.tgz#2c1718923b57f9bbe64705ffe5640ac64d9bdb27" - dependencies: - lodash "^4.17.10" - -"@babel/helper-remap-async-to-generator@^7.1.0": - version "7.1.0" - resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.1.0.tgz#361d80821b6f38da75bd3f0785ece20a88c5fe7f" - dependencies: - "@babel/helper-annotate-as-pure" "^7.0.0" - "@babel/helper-wrap-function" "^7.1.0" - "@babel/template" "^7.1.0" - "@babel/traverse" "^7.1.0" - "@babel/types" "^7.0.0" - -"@babel/helper-replace-supers@^7.1.0": - version "7.1.0" - resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.1.0.tgz#5fc31de522ec0ef0899dc9b3e7cf6a5dd655f362" - dependencies: - "@babel/helper-member-expression-to-functions" "^7.0.0" - "@babel/helper-optimise-call-expression" "^7.0.0" - "@babel/traverse" "^7.1.0" - "@babel/types" "^7.0.0" - -"@babel/helper-replace-supers@^7.2.3": - version "7.2.3" - resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.2.3.tgz#19970020cf22677d62b3a689561dbd9644d8c5e5" - dependencies: - "@babel/helper-member-expression-to-functions" "^7.0.0" - "@babel/helper-optimise-call-expression" "^7.0.0" - "@babel/traverse" "^7.2.3" - "@babel/types" "^7.0.0" - -"@babel/helper-simple-access@^7.1.0": - version "7.1.0" - resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.1.0.tgz#65eeb954c8c245beaa4e859da6188f39d71e585c" - dependencies: - "@babel/template" "^7.1.0" - "@babel/types" "^7.0.0" - -"@babel/helper-split-export-declaration@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.0.0.tgz#3aae285c0311c2ab095d997b8c9a94cad547d813" - dependencies: - "@babel/types" "^7.0.0" - -"@babel/helper-wrap-function@^7.1.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.2.0.tgz#c4e0012445769e2815b55296ead43a958549f6fa" - dependencies: - "@babel/helper-function-name" "^7.1.0" - "@babel/template" "^7.1.0" - "@babel/traverse" "^7.1.0" - "@babel/types" "^7.2.0" - -"@babel/helpers@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.2.0.tgz#8335f3140f3144270dc63c4732a4f8b0a50b7a21" - dependencies: - "@babel/template" "^7.1.2" - "@babel/traverse" "^7.1.5" - "@babel/types" "^7.2.0" - -"@babel/highlight@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.0.0.tgz#f710c38c8d458e6dd9a201afb637fcb781ce99e4" - dependencies: - chalk "^2.0.0" - esutils "^2.0.2" - js-tokens "^4.0.0" - -"@babel/parser@^7.0.0", "@babel/parser@^7.1.2", "@babel/parser@^7.1.6", "@babel/parser@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.2.0.tgz#02d01dbc330b6cbf36b76ac93c50752c69027065" - -"@babel/parser@^7.2.2", "@babel/parser@^7.2.3": - version "7.2.3" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.2.3.tgz#32f5df65744b70888d17872ec106b02434ba1489" - -"@babel/plugin-external-helpers@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-external-helpers/-/plugin-external-helpers-7.2.0.tgz#7f4cb7dee651cd380d2034847d914288467a6be4" - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-proposal-async-generator-functions@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.2.0.tgz#b289b306669dce4ad20b0252889a15768c9d417e" - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-remap-async-to-generator" "^7.1.0" - "@babel/plugin-syntax-async-generators" "^7.2.0" - -"@babel/plugin-proposal-class-properties@^7.2.3": - version "7.2.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.2.3.tgz#c9e1294363b346cff333007a92080f3203698461" - dependencies: - "@babel/helper-create-class-features-plugin" "^7.2.3" - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-proposal-json-strings@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.2.0.tgz#568ecc446c6148ae6b267f02551130891e29f317" - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-syntax-json-strings" "^7.2.0" - -"@babel/plugin-proposal-object-rest-spread@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.2.0.tgz#88f5fec3e7ad019014c97f7ee3c992f0adbf7fb8" - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-syntax-object-rest-spread" "^7.2.0" - -"@babel/plugin-proposal-optional-catch-binding@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.2.0.tgz#135d81edb68a081e55e56ec48541ece8065c38f5" - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-syntax-optional-catch-binding" "^7.2.0" - -"@babel/plugin-proposal-unicode-property-regex@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.2.0.tgz#abe7281fe46c95ddc143a65e5358647792039520" - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-regex" "^7.0.0" - regexpu-core "^4.2.0" - -"@babel/plugin-syntax-async-generators@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.2.0.tgz#69e1f0db34c6f5a0cf7e2b3323bf159a76c8cb7f" - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-syntax-json-strings@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.2.0.tgz#72bd13f6ffe1d25938129d2a186b11fd62951470" - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-syntax-jsx@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.2.0.tgz#0b85a3b4bc7cdf4cc4b8bf236335b907ca22e7c7" - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-syntax-object-rest-spread@^7.2.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" - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-syntax-optional-catch-binding@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.2.0.tgz#a94013d6eda8908dfe6a477e7f9eda85656ecf5c" - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-arrow-functions@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.2.0.tgz#9aeafbe4d6ffc6563bf8f8372091628f00779550" - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-async-to-generator@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.2.0.tgz#68b8a438663e88519e65b776f8938f3445b1a2ff" - dependencies: - "@babel/helper-module-imports" "^7.0.0" - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-remap-async-to-generator" "^7.1.0" - -"@babel/plugin-transform-block-scoped-functions@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.2.0.tgz#5d3cc11e8d5ddd752aa64c9148d0db6cb79fd190" - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-block-scoping@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.2.0.tgz#f17c49d91eedbcdf5dd50597d16f5f2f770132d4" - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - lodash "^4.17.10" - -"@babel/plugin-transform-classes@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.2.0.tgz#374f8876075d7d21fea55aeb5c53561259163f96" - dependencies: - "@babel/helper-annotate-as-pure" "^7.0.0" - "@babel/helper-define-map" "^7.1.0" - "@babel/helper-function-name" "^7.1.0" - "@babel/helper-optimise-call-expression" "^7.0.0" - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-replace-supers" "^7.1.0" - "@babel/helper-split-export-declaration" "^7.0.0" - globals "^11.1.0" - -"@babel/plugin-transform-computed-properties@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.2.0.tgz#83a7df6a658865b1c8f641d510c6f3af220216da" - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-destructuring@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.2.0.tgz#e75269b4b7889ec3a332cd0d0c8cff8fed0dc6f3" - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-dotall-regex@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.2.0.tgz#f0aabb93d120a8ac61e925ea0ba440812dbe0e49" - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-regex" "^7.0.0" - regexpu-core "^4.1.3" - -"@babel/plugin-transform-duplicate-keys@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.2.0.tgz#d952c4930f312a4dbfff18f0b2914e60c35530b3" - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-exponentiation-operator@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.2.0.tgz#a63868289e5b4007f7054d46491af51435766008" - dependencies: - "@babel/helper-builder-binary-assignment-operator-visitor" "^7.1.0" - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-for-of@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.2.0.tgz#ab7468befa80f764bb03d3cb5eef8cc998e1cad9" - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-function-name@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.2.0.tgz#f7930362829ff99a3174c39f0afcc024ef59731a" - dependencies: - "@babel/helper-function-name" "^7.1.0" - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-literals@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.2.0.tgz#690353e81f9267dad4fd8cfd77eafa86aba53ea1" - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-modules-amd@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.2.0.tgz#82a9bce45b95441f617a24011dc89d12da7f4ee6" - dependencies: - "@babel/helper-module-transforms" "^7.1.0" - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-modules-commonjs@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.2.0.tgz#c4f1933f5991d5145e9cfad1dfd848ea1727f404" - dependencies: - "@babel/helper-module-transforms" "^7.1.0" - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-simple-access" "^7.1.0" - -"@babel/plugin-transform-modules-systemjs@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.2.0.tgz#912bfe9e5ff982924c81d0937c92d24994bb9068" - dependencies: - "@babel/helper-hoist-variables" "^7.0.0" - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-modules-umd@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.2.0.tgz#7678ce75169f0877b8eb2235538c074268dd01ae" - dependencies: - "@babel/helper-module-transforms" "^7.1.0" - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-new-target@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.0.0.tgz#ae8fbd89517fa7892d20e6564e641e8770c3aa4a" - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-object-super@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.2.0.tgz#b35d4c10f56bab5d650047dad0f1d8e8814b6598" - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-replace-supers" "^7.1.0" - -"@babel/plugin-transform-parameters@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.2.0.tgz#0d5ad15dc805e2ea866df4dd6682bfe76d1408c2" - dependencies: - "@babel/helper-call-delegate" "^7.1.0" - "@babel/helper-get-function-arity" "^7.0.0" - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-react-display-name@^7.0.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.2.0.tgz#ebfaed87834ce8dc4279609a4f0c324c156e3eb0" - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-react-jsx-self@^7.0.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.2.0.tgz#461e21ad9478f1031dd5e276108d027f1b5240ba" - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-syntax-jsx" "^7.2.0" - -"@babel/plugin-transform-react-jsx-source@^7.0.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.2.0.tgz#20c8c60f0140f5dd3cd63418d452801cf3f7180f" - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-syntax-jsx" "^7.2.0" - -"@babel/plugin-transform-react-jsx@^7.0.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.2.0.tgz#ca36b6561c4d3b45524f8efb6f0fbc9a0d1d622f" - dependencies: - "@babel/helper-builder-react-jsx" "^7.0.0" - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-syntax-jsx" "^7.2.0" - -"@babel/plugin-transform-regenerator@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.0.0.tgz#5b41686b4ed40bef874d7ed6a84bdd849c13e0c1" - dependencies: - regenerator-transform "^0.13.3" - -"@babel/plugin-transform-runtime@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.2.0.tgz#566bc43f7d0aedc880eaddbd29168d0f248966ea" - dependencies: - "@babel/helper-module-imports" "^7.0.0" - "@babel/helper-plugin-utils" "^7.0.0" - resolve "^1.8.1" - semver "^5.5.1" - -"@babel/plugin-transform-shorthand-properties@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.2.0.tgz#6333aee2f8d6ee7e28615457298934a3b46198f0" - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-spread@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.2.0.tgz#0c76c12a3b5826130078ee8ec84a7a8e4afd79c4" - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-sticky-regex@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.2.0.tgz#a1e454b5995560a9c1e0d537dfc15061fd2687e1" - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-regex" "^7.0.0" - -"@babel/plugin-transform-template-literals@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.2.0.tgz#d87ed01b8eaac7a92473f608c97c089de2ba1e5b" - dependencies: - "@babel/helper-annotate-as-pure" "^7.0.0" - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-typeof-symbol@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.2.0.tgz#117d2bcec2fbf64b4b59d1f9819894682d29f2b2" - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-unicode-regex@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.2.0.tgz#4eb8db16f972f8abb5062c161b8b115546ade08b" - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-regex" "^7.0.0" - regexpu-core "^4.1.3" - -"@babel/preset-env@^7.2.3": - version "7.2.3" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.2.3.tgz#948c8df4d4609c99c7e0130169f052ea6a7a8933" - dependencies: - "@babel/helper-module-imports" "^7.0.0" - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-proposal-async-generator-functions" "^7.2.0" - "@babel/plugin-proposal-json-strings" "^7.2.0" - "@babel/plugin-proposal-object-rest-spread" "^7.2.0" - "@babel/plugin-proposal-optional-catch-binding" "^7.2.0" - "@babel/plugin-proposal-unicode-property-regex" "^7.2.0" - "@babel/plugin-syntax-async-generators" "^7.2.0" - "@babel/plugin-syntax-object-rest-spread" "^7.2.0" - "@babel/plugin-syntax-optional-catch-binding" "^7.2.0" - "@babel/plugin-transform-arrow-functions" "^7.2.0" - "@babel/plugin-transform-async-to-generator" "^7.2.0" - "@babel/plugin-transform-block-scoped-functions" "^7.2.0" - "@babel/plugin-transform-block-scoping" "^7.2.0" - "@babel/plugin-transform-classes" "^7.2.0" - "@babel/plugin-transform-computed-properties" "^7.2.0" - "@babel/plugin-transform-destructuring" "^7.2.0" - "@babel/plugin-transform-dotall-regex" "^7.2.0" - "@babel/plugin-transform-duplicate-keys" "^7.2.0" - "@babel/plugin-transform-exponentiation-operator" "^7.2.0" - "@babel/plugin-transform-for-of" "^7.2.0" - "@babel/plugin-transform-function-name" "^7.2.0" - "@babel/plugin-transform-literals" "^7.2.0" - "@babel/plugin-transform-modules-amd" "^7.2.0" - "@babel/plugin-transform-modules-commonjs" "^7.2.0" - "@babel/plugin-transform-modules-systemjs" "^7.2.0" - "@babel/plugin-transform-modules-umd" "^7.2.0" - "@babel/plugin-transform-new-target" "^7.0.0" - "@babel/plugin-transform-object-super" "^7.2.0" - "@babel/plugin-transform-parameters" "^7.2.0" - "@babel/plugin-transform-regenerator" "^7.0.0" - "@babel/plugin-transform-shorthand-properties" "^7.2.0" - "@babel/plugin-transform-spread" "^7.2.0" - "@babel/plugin-transform-sticky-regex" "^7.2.0" - "@babel/plugin-transform-template-literals" "^7.2.0" - "@babel/plugin-transform-typeof-symbol" "^7.2.0" - "@babel/plugin-transform-unicode-regex" "^7.2.0" - browserslist "^4.3.4" - invariant "^2.2.2" - js-levenshtein "^1.1.3" - semver "^5.3.0" - -"@babel/preset-react@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.0.0.tgz#e86b4b3d99433c7b3e9e91747e2653958bc6b3c0" - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-transform-react-display-name" "^7.0.0" - "@babel/plugin-transform-react-jsx" "^7.0.0" - "@babel/plugin-transform-react-jsx-self" "^7.0.0" - "@babel/plugin-transform-react-jsx-source" "^7.0.0" - -"@babel/runtime@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.2.0.tgz#b03e42eeddf5898e00646e4c840fa07ba8dcad7f" - dependencies: - regenerator-runtime "^0.12.0" - -"@babel/template@^7.1.0", "@babel/template@^7.1.2": - version "7.1.2" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.1.2.tgz#090484a574fef5a2d2d7726a674eceda5c5b5644" - dependencies: - "@babel/code-frame" "^7.0.0" - "@babel/parser" "^7.1.2" - "@babel/types" "^7.1.2" - -"@babel/template@^7.2.2": - version "7.2.2" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.2.2.tgz#005b3fdf0ed96e88041330379e0da9a708eb2907" - dependencies: - "@babel/code-frame" "^7.0.0" - "@babel/parser" "^7.2.2" - "@babel/types" "^7.2.2" - -"@babel/traverse@^7.0.0", "@babel/traverse@^7.1.0", "@babel/traverse@^7.1.5", "@babel/traverse@^7.1.6": - version "7.1.6" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.1.6.tgz#c8db9963ab4ce5b894222435482bd8ea854b7b5c" - dependencies: - "@babel/code-frame" "^7.0.0" - "@babel/generator" "^7.1.6" - "@babel/helper-function-name" "^7.1.0" - "@babel/helper-split-export-declaration" "^7.0.0" - "@babel/parser" "^7.1.6" - "@babel/types" "^7.1.6" - debug "^4.1.0" - globals "^11.1.0" - lodash "^4.17.10" - -"@babel/traverse@^7.2.2", "@babel/traverse@^7.2.3": - version "7.2.3" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.2.3.tgz#7ff50cefa9c7c0bd2d81231fdac122f3957748d8" - dependencies: - "@babel/code-frame" "^7.0.0" - "@babel/generator" "^7.2.2" - "@babel/helper-function-name" "^7.1.0" - "@babel/helper-split-export-declaration" "^7.0.0" - "@babel/parser" "^7.2.3" - "@babel/types" "^7.2.2" - debug "^4.1.0" - globals "^11.1.0" - lodash "^4.17.10" - -"@babel/types@^7.0.0", "@babel/types@^7.1.2", "@babel/types@^7.1.6", "@babel/types@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.2.0.tgz#7941c5b2d8060e06f9601d6be7c223eef906d5d8" - dependencies: - esutils "^2.0.2" - lodash "^4.17.10" - to-fast-properties "^2.0.0" - -"@babel/types@^7.2.2": - version "7.2.2" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.2.2.tgz#44e10fc24e33af524488b716cdaee5360ea8ed1e" - dependencies: - esutils "^2.0.2" - lodash "^4.17.10" - to-fast-properties "^2.0.0" - -"@iamstarkov/listr-update-renderer@0.4.1": - version "0.4.1" - resolved "https://registry.yarnpkg.com/@iamstarkov/listr-update-renderer/-/listr-update-renderer-0.4.1.tgz#d7c48092a2dcf90fd672b6c8b458649cb350c77e" - dependencies: - chalk "^1.1.3" - cli-truncate "^0.2.1" - elegant-spinner "^1.0.1" - figures "^1.7.0" - indent-string "^3.0.0" - log-symbols "^1.0.2" - log-update "^2.3.0" - strip-ansi "^3.0.1" - -"@mrmlnc/readdir-enhanced@^2.2.1": - version "2.2.1" - resolved "https://registry.yarnpkg.com/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz#524af240d1a360527b730475ecfa1344aa540dde" - dependencies: - call-me-maybe "^1.0.1" - glob-to-regexp "^0.3.0" - -"@nodelib/fs.stat@^1.1.2": - version "1.1.3" - resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz#2b5a3ab3f918cca48a8c754c08168e3f03eba61b" - -"@samverschueren/stream-to-observable@^0.3.0": - version "0.3.0" - resolved "https://registry.yarnpkg.com/@samverschueren/stream-to-observable/-/stream-to-observable-0.3.0.tgz#ecdf48d532c58ea477acfcab80348424f8d0662f" - dependencies: - any-observable "^0.3.0" - -"@types/estree@0.0.39": - version "0.0.39" - resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.39.tgz#e177e699ee1b8c22d23174caaa7422644389509f" - -"@types/node@*": - version "10.12.12" - resolved "https://registry.yarnpkg.com/@types/node/-/node-10.12.12.tgz#e15a9d034d9210f00320ef718a50c4a799417c47" - -"@types/q@^1.5.1": - version "1.5.1" - resolved "https://registry.yarnpkg.com/@types/q/-/q-1.5.1.tgz#48fd98c1561fe718b61733daed46ff115b496e18" - -abstract-leveldown@~0.12.0, abstract-leveldown@~0.12.1: - version "0.12.4" - resolved "https://registry.yarnpkg.com/abstract-leveldown/-/abstract-leveldown-0.12.4.tgz#29e18e632e60e4e221d5810247852a63d7b2e410" - dependencies: - xtend "~3.0.0" - -acorn-jsx@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.0.1.tgz#32a064fd925429216a09b141102bfdd185fae40e" - -acorn@^6.0.2: - version "6.0.4" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.0.4.tgz#77377e7353b72ec5104550aa2d2097a2fd40b754" - -acorn@^6.0.5: - version "6.0.7" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.0.7.tgz#490180ce18337270232d9488a44be83d9afb7fd3" - -ajv@^6.5.3, ajv@^6.6.1: - version "6.6.1" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.6.1.tgz#6360f5ed0d80f232cc2b294c362d5dc2e538dd61" - dependencies: - fast-deep-equal "^2.0.1" - fast-json-stable-stringify "^2.0.0" - json-schema-traverse "^0.4.1" - uri-js "^4.2.2" - -alphanum-sort@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/alphanum-sort/-/alphanum-sort-1.0.2.tgz#97a1119649b211ad33691d9f9f486a8ec9fbe0a3" - -amdefine@>=0.0.4: - version "1.0.1" - resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5" - -ansi-escapes@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.1.0.tgz#f73207bb81207d75fd6c83f125af26eea378ca30" - -ansi-regex@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" - -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: - version "4.0.0" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.0.0.tgz#70de791edf021404c3fd615aa89118ae0432e5a9" - -ansi-styles@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" - -ansi-styles@^3.2.0, ansi-styles@^3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" - dependencies: - color-convert "^1.9.0" - -any-observable@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/any-observable/-/any-observable-0.3.0.tgz#af933475e5806a67d0d7df090dd5e8bef65d119b" - -argparse@^1.0.7: - version "1.0.10" - resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" - integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== - dependencies: - sprintf-js "~1.0.2" - -arr-diff@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-2.0.0.tgz#8f3b827f955a8bd669697e4a4256ac3ceae356cf" - dependencies: - arr-flatten "^1.0.1" - -arr-diff@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" - -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@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" - -array-find-index@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1" - -array-includes@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.0.3.tgz#184b48f62d92d7452bb31b323165c7f8bd02266d" - dependencies: - define-properties "^1.1.2" - es-abstract "^1.7.0" - -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: - 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" - -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.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" - dependencies: - bn.js "^4.0.0" - inherits "^2.0.1" - minimalistic-assert "^1.0.0" - -assign-symbols@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" - -astral-regex@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9" - -async@^2.6.1: - version "2.6.1" - resolved "https://registry.yarnpkg.com/async/-/async-2.6.1.tgz#b245a23ca71930044ec53fa46aa00a3e87c6a610" - dependencies: - lodash "^4.17.10" - -atob@^2.1.1: - version "2.1.2" - resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" - -autoprefixer@^9.0.0: - version "9.4.2" - resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-9.4.2.tgz#0234d20900684fc4bfb67926493deb68384067f5" - dependencies: - browserslist "^4.3.5" - caniuse-lite "^1.0.30000914" - normalize-range "^0.1.2" - num2fraction "^1.2.2" - postcss "^7.0.6" - postcss-value-parser "^3.3.1" - -babel-eslint@^10.0.1: - version "10.0.1" - resolved "https://registry.yarnpkg.com/babel-eslint/-/babel-eslint-10.0.1.tgz#919681dc099614cd7d31d45c8908695092a1faed" - dependencies: - "@babel/code-frame" "^7.0.0" - "@babel/parser" "^7.0.0" - "@babel/traverse" "^7.0.0" - "@babel/types" "^7.0.0" - eslint-scope "3.7.1" - eslint-visitor-keys "^1.0.0" - -bail@^1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/bail/-/bail-1.0.3.tgz#63cfb9ddbac829b02a3128cd53224be78e6c21a3" - -balanced-match@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" - -base@^0.11.1: - version "0.11.2" - resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" - dependencies: - cache-base "^1.0.1" - class-utils "^0.3.5" - component-emitter "^1.2.1" - define-property "^1.0.0" - isobject "^3.0.1" - mixin-deep "^1.2.0" - pascalcase "^0.1.1" - -big.js@^3.1.3: - version "3.2.0" - resolved "https://registry.yarnpkg.com/big.js/-/big.js-3.2.0.tgz#a5fc298b81b9e0dca2e458824784b65c52ba588e" - -bl@~0.8.1: - version "0.8.2" - resolved "https://registry.yarnpkg.com/bl/-/bl-0.8.2.tgz#c9b6bca08d1bc2ea00fc8afb4f1a5fd1e1c66e4e" - dependencies: - readable-stream "~1.0.26" - -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" - -boolbase@^1.0.0, boolbase@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" - -brace-expansion@^1.1.7: - version "1.1.11" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" - dependencies: - balanced-match "^1.0.0" - concat-map "0.0.1" - -braces@^1.8.2: - version "1.8.5" - resolved "https://registry.yarnpkg.com/braces/-/braces-1.8.5.tgz#ba77962e12dff969d6b76711e914b737857bf6a7" - dependencies: - expand-range "^1.8.1" - preserve "^0.2.0" - repeat-element "^1.1.2" - -braces@^2.3.1: - version "2.3.2" - resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" - 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" - -brorand@^1.0.1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" - -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" - 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" - 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" - dependencies: - cipher-base "^1.0.1" - des.js "^1.0.0" - inherits "^2.0.1" - safe-buffer "^5.1.2" - -browserify-fs@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/browserify-fs/-/browserify-fs-1.0.0.tgz#f075aa8a729d4d1716d066620e386fcc1311a96f" - dependencies: - level-filesystem "^1.0.1" - level-js "^2.1.3" - levelup "^0.18.2" - -browserify-rsa@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.0.1.tgz#21e0abfaf6f2029cf2fafb133567a701d4135524" - 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" - 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" - -browserslist@^4.0.0: - version "4.4.1" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.4.1.tgz#42e828954b6b29a7a53e352277be429478a69062" - dependencies: - caniuse-lite "^1.0.30000929" - electron-to-chromium "^1.3.103" - node-releases "^1.1.3" - -browserslist@^4.3.4, browserslist@^4.3.5: - version "4.3.5" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.3.5.tgz#1a917678acc07b55606748ea1adf9846ea8920f7" - dependencies: - caniuse-lite "^1.0.30000912" - electron-to-chromium "^1.3.86" - node-releases "^1.0.5" - -buffer-es6@^4.9.2: - version "4.9.3" - resolved "https://registry.yarnpkg.com/buffer-es6/-/buffer-es6-4.9.3.tgz#f26347b82df76fd37e18bcb5288c4970cfd5c404" - -buffer-from@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" - -buffer-xor@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" - -builtin-modules@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" - -builtin-modules@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-3.0.0.tgz#1e587d44b006620d90286cc7a9238bbc6129cab1" - -cache-base@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" - dependencies: - collection-visit "^1.0.0" - component-emitter "^1.2.1" - get-value "^2.0.6" - has-value "^1.0.0" - isobject "^3.0.1" - set-value "^2.0.0" - to-object-path "^0.3.0" - union-value "^1.0.0" - unset-value "^1.0.0" - -call-me-maybe@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/call-me-maybe/-/call-me-maybe-1.0.1.tgz#26d208ea89e37b5cbde60250a15f031c16a4d66b" - -caller-callsite@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/caller-callsite/-/caller-callsite-2.0.0.tgz#847e0fce0a223750a9a027c54b33731ad3154134" - dependencies: - callsites "^2.0.0" - -caller-path@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-2.0.0.tgz#468f83044e369ab2010fac5f06ceee15bb2cb1f4" - dependencies: - caller-callsite "^2.0.0" - -callsites@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/callsites/-/callsites-2.0.0.tgz#06eb84f00eea413da86affefacbffb36093b3c50" - -callsites@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.0.0.tgz#fb7eb569b72ad7a45812f93fd9430a3e410b3dd3" - -camelcase-keys@^4.0.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-4.2.0.tgz#a2aa5fb1af688758259c32c141426d78923b9b77" - dependencies: - camelcase "^4.1.0" - map-obj "^2.0.0" - quick-lru "^1.0.0" - -camelcase@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd" - -caniuse-api@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/caniuse-api/-/caniuse-api-3.0.0.tgz#5e4d90e2274961d46291997df599e3ed008ee4c0" - dependencies: - browserslist "^4.0.0" - caniuse-lite "^1.0.0" - lodash.memoize "^4.1.2" - lodash.uniq "^4.5.0" - -caniuse-lite@^1.0.0, caniuse-lite@^1.0.30000929: - version "1.0.30000935" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000935.tgz#d1b59df00b46f4921bb84a8a34c1d172b346df59" - -caniuse-lite@^1.0.30000912, caniuse-lite@^1.0.30000914: - version "1.0.30000918" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000918.tgz#6288f79da3c5c8b45e502f47ad8f3eb91f1379a9" - -ccount@^1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/ccount/-/ccount-1.0.3.tgz#f1cec43f332e2ea5a569fd46f9f5bde4e6102aff" - -chalk@^1.0.0, chalk@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" - dependencies: - ansi-styles "^2.2.1" - escape-string-regexp "^1.0.2" - has-ansi "^2.0.0" - strip-ansi "^3.0.0" - supports-color "^2.0.0" - -chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.3.1, chalk@^2.4.1: - version "2.4.1" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.1.tgz#18c49ab16a037b6eb0152cc83e3471338215b66e" - dependencies: - ansi-styles "^3.2.1" - escape-string-regexp "^1.0.5" - supports-color "^5.3.0" - -chalk@^2.4.2: - version "2.4.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" - dependencies: - ansi-styles "^3.2.1" - escape-string-regexp "^1.0.5" - supports-color "^5.3.0" - -character-entities-html4@^1.0.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/character-entities-html4/-/character-entities-html4-1.1.2.tgz#c44fdde3ce66b52e8d321d6c1bf46101f0150610" - -character-entities-legacy@^1.0.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/character-entities-legacy/-/character-entities-legacy-1.1.2.tgz#7c6defb81648498222c9855309953d05f4d63a9c" - -character-entities@^1.0.0: - version "1.2.2" - resolved "https://registry.yarnpkg.com/character-entities/-/character-entities-1.2.2.tgz#58c8f371c0774ef0ba9b2aca5f00d8f100e6e363" - -character-reference-invalid@^1.0.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/character-reference-invalid/-/character-reference-invalid-1.1.2.tgz#21e421ad3d84055952dab4a43a04e73cd425d3ed" - -chardet@^0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" - -ci-info@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" - -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" - dependencies: - inherits "^2.0.1" - safe-buffer "^5.0.1" - -circular-json@^0.3.1: - version "0.3.3" - resolved "https://registry.yarnpkg.com/circular-json/-/circular-json-0.3.3.tgz#815c99ea84f6809529d2f45791bdf82711352d66" - -class-utils@^0.3.5: - version "0.3.6" - resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" - dependencies: - arr-union "^3.1.0" - define-property "^0.2.5" - isobject "^3.0.0" - static-extend "^0.1.1" - -classnames@^2.2.6: - version "2.2.6" - resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.2.6.tgz#43935bffdd291f326dad0a205309b38d00f650ce" - -cli-cursor@^2.0.0, cli-cursor@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5" - dependencies: - restore-cursor "^2.0.0" - -cli-truncate@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-0.2.1.tgz#9f15cfbb0705005369216c626ac7d05ab90dd574" - dependencies: - slice-ansi "0.0.4" - string-width "^1.0.1" - -cli-width@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.0.tgz#ff19ede8a9a5e579324147b0c11f0fbcbabed639" - -clone-regexp@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/clone-regexp/-/clone-regexp-1.0.1.tgz#051805cd33173375d82118fc0918606da39fd60f" - dependencies: - is-regexp "^1.0.0" - is-supported-regexp-flag "^1.0.0" - -clone@~0.1.9: - version "0.1.19" - resolved "https://registry.yarnpkg.com/clone/-/clone-0.1.19.tgz#613fb68639b26a494ac53253e15b1a6bd88ada85" - -coa@~2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/coa/-/coa-2.0.2.tgz#43f6c21151b4ef2bf57187db0d73de229e3e7ec3" - dependencies: - "@types/q" "^1.5.1" - chalk "^2.4.1" - q "^1.1.2" - -code-point-at@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" - -collapse-white-space@^1.0.2: - version "1.0.4" - resolved "https://registry.yarnpkg.com/collapse-white-space/-/collapse-white-space-1.0.4.tgz#ce05cf49e54c3277ae573036a26851ba430a0091" - -collection-visit@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" - dependencies: - map-visit "^1.0.0" - object-visit "^1.0.0" - -color-convert@^1.9.0, color-convert@^1.9.1: - version "1.9.3" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" - dependencies: - color-name "1.1.3" - -color-name@1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" - -color-name@^1.0.0: - version "1.1.4" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" - -color-string@^1.5.2: - version "1.5.3" - resolved "https://registry.yarnpkg.com/color-string/-/color-string-1.5.3.tgz#c9bbc5f01b58b5492f3d6857459cb6590ce204cc" - dependencies: - color-name "^1.0.0" - simple-swizzle "^0.2.2" - -color@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/color/-/color-3.1.0.tgz#d8e9fb096732875774c84bf922815df0308d0ffc" - dependencies: - color-convert "^1.9.1" - color-string "^1.5.2" - -colors@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/colors/-/colors-1.1.2.tgz#168a4701756b6a7f51a12ce0c97bfa28c084ed63" - -commander@^2.14.1, commander@^2.18.0, commander@^2.9.0: - version "2.19.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.19.0.tgz#f6198aa84e5b83c46054b94ddedbfed5ee9ff12a" - -component-emitter@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.2.1.tgz#137918d6d78283f7df7a6b7c5a63e140e69425e6" - -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.4.4: - version "1.6.2" - resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" - dependencies: - buffer-from "^1.0.0" - inherits "^2.0.3" - readable-stream "^2.2.2" - typedarray "^0.0.6" - -concat-with-sourcemaps@^1.0.5: - version "1.1.0" - resolved "https://registry.yarnpkg.com/concat-with-sourcemaps/-/concat-with-sourcemaps-1.1.0.tgz#d4ea93f05ae25790951b99e7b3b09e3908a4082e" - dependencies: - source-map "^0.6.1" - -contains-path@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/contains-path/-/contains-path-0.1.0.tgz#fe8cf184ff6670b6baef01a9d4861a5cbec4120a" - -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" - dependencies: - safe-buffer "~5.1.1" - -copy-descriptor@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" - -core-util-is@~1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" - -cosmiconfig@5.0.6: - version "5.0.6" - resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-5.0.6.tgz#dca6cf680a0bd03589aff684700858c81abeeb39" - dependencies: - is-directory "^0.3.1" - js-yaml "^3.9.0" - parse-json "^4.0.0" - -cosmiconfig@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-4.0.0.tgz#760391549580bbd2df1e562bc177b13c290972dc" - dependencies: - is-directory "^0.3.1" - js-yaml "^3.9.0" - parse-json "^4.0.0" - require-from-string "^2.0.1" - -cosmiconfig@^5.0.0, cosmiconfig@^5.0.7: - version "5.0.7" - resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-5.0.7.tgz#39826b292ee0d78eda137dfa3173bd1c21a43b04" - dependencies: - import-fresh "^2.0.0" - is-directory "^0.3.1" - js-yaml "^3.9.0" - parse-json "^4.0.0" - -create-ecdh@^4.0.0: - version "4.0.3" - resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.3.tgz#c9111b6f33045c4697f144787f9254cdc77c45ff" - 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" - 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" - 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-env@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/cross-env/-/cross-env-5.2.0.tgz#6ecd4c015d5773e614039ee529076669b9d126f2" - dependencies: - cross-spawn "^6.0.5" - is-windows "^1.0.0" - -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" - dependencies: - nice-try "^1.0.4" - path-key "^2.0.1" - semver "^5.5.0" - shebang-command "^1.2.0" - which "^1.2.9" - -crypto-browserify@^3.11.0: - version "3.12.0" - resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec" - 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" - -css-color-names@0.0.4, css-color-names@^0.0.4: - version "0.0.4" - resolved "https://registry.yarnpkg.com/css-color-names/-/css-color-names-0.0.4.tgz#808adc2e79cf84738069b646cb20ec27beb629e0" - -css-declaration-sorter@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/css-declaration-sorter/-/css-declaration-sorter-4.0.1.tgz#c198940f63a76d7e36c1e71018b001721054cb22" - dependencies: - postcss "^7.0.1" - timsort "^0.3.0" - -css-modules-loader-core@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/css-modules-loader-core/-/css-modules-loader-core-1.1.0.tgz#5908668294a1becd261ae0a4ce21b0b551f21d16" - dependencies: - icss-replace-symbols "1.1.0" - postcss "6.0.1" - postcss-modules-extract-imports "1.1.0" - postcss-modules-local-by-default "1.2.0" - postcss-modules-scope "1.1.0" - postcss-modules-values "1.3.0" - -css-parse@1.7.x: - version "1.7.0" - resolved "https://registry.yarnpkg.com/css-parse/-/css-parse-1.7.0.tgz#321f6cf73782a6ff751111390fc05e2c657d8c9b" - -css-select-base-adapter@~0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz#3b2ff4972cc362ab88561507a95408a1432135d7" - -css-select@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/css-select/-/css-select-2.0.2.tgz#ab4386cec9e1f668855564b17c3733b43b2a5ede" - dependencies: - boolbase "^1.0.0" - css-what "^2.1.2" - domutils "^1.7.0" - nth-check "^1.0.2" - -css-selector-tokenizer@^0.7.0: - version "0.7.1" - resolved "https://registry.yarnpkg.com/css-selector-tokenizer/-/css-selector-tokenizer-0.7.1.tgz#a177271a8bca5019172f4f891fc6eed9cbf68d5d" - dependencies: - cssesc "^0.1.0" - fastparse "^1.1.1" - regexpu-core "^1.0.0" - -css-tree@1.0.0-alpha.28: - version "1.0.0-alpha.28" - resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.0.0-alpha.28.tgz#8e8968190d886c9477bc8d61e96f61af3f7ffa7f" - dependencies: - mdn-data "~1.1.0" - source-map "^0.5.3" - -css-tree@1.0.0-alpha.29: - version "1.0.0-alpha.29" - resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.0.0-alpha.29.tgz#3fa9d4ef3142cbd1c301e7664c1f352bd82f5a39" - dependencies: - mdn-data "~1.1.0" - source-map "^0.5.3" - -css-unit-converter@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/css-unit-converter/-/css-unit-converter-1.1.1.tgz#d9b9281adcfd8ced935bdbaba83786897f64e996" - -css-url-regex@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/css-url-regex/-/css-url-regex-1.1.0.tgz#83834230cc9f74c457de59eebd1543feeb83b7ec" - -css-what@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/css-what/-/css-what-2.1.2.tgz#c0876d9d0480927d7d4920dcd72af3595649554d" - -cssesc@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-0.1.0.tgz#c814903e45623371a0477b40109aaafbeeaddbb4" - -cssesc@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-2.0.0.tgz#3b13bd1bb1cb36e1bcb5a4dcd27f54c5dcb35703" - -cssnano-preset-default@^4.0.6: - version "4.0.6" - resolved "https://registry.yarnpkg.com/cssnano-preset-default/-/cssnano-preset-default-4.0.6.tgz#92379e2a6db4a91c0ea727f5f556eeac693eab6a" - dependencies: - css-declaration-sorter "^4.0.1" - cssnano-util-raw-cache "^4.0.1" - postcss "^7.0.0" - postcss-calc "^7.0.0" - postcss-colormin "^4.0.2" - postcss-convert-values "^4.0.1" - postcss-discard-comments "^4.0.1" - postcss-discard-duplicates "^4.0.2" - postcss-discard-empty "^4.0.1" - postcss-discard-overridden "^4.0.1" - postcss-merge-longhand "^4.0.10" - postcss-merge-rules "^4.0.2" - postcss-minify-font-values "^4.0.2" - postcss-minify-gradients "^4.0.1" - postcss-minify-params "^4.0.1" - postcss-minify-selectors "^4.0.1" - postcss-normalize-charset "^4.0.1" - postcss-normalize-display-values "^4.0.1" - postcss-normalize-positions "^4.0.1" - postcss-normalize-repeat-style "^4.0.1" - postcss-normalize-string "^4.0.1" - postcss-normalize-timing-functions "^4.0.1" - postcss-normalize-unicode "^4.0.1" - postcss-normalize-url "^4.0.1" - postcss-normalize-whitespace "^4.0.1" - postcss-ordered-values "^4.1.1" - postcss-reduce-initial "^4.0.2" - postcss-reduce-transforms "^4.0.1" - postcss-svgo "^4.0.1" - postcss-unique-selectors "^4.0.1" - -cssnano-util-get-arguments@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/cssnano-util-get-arguments/-/cssnano-util-get-arguments-4.0.0.tgz#ed3a08299f21d75741b20f3b81f194ed49cc150f" - -cssnano-util-get-match@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/cssnano-util-get-match/-/cssnano-util-get-match-4.0.0.tgz#c0e4ca07f5386bb17ec5e52250b4f5961365156d" - -cssnano-util-raw-cache@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/cssnano-util-raw-cache/-/cssnano-util-raw-cache-4.0.1.tgz#b26d5fd5f72a11dfe7a7846fb4c67260f96bf282" - dependencies: - postcss "^7.0.0" - -cssnano-util-same-parent@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/cssnano-util-same-parent/-/cssnano-util-same-parent-4.0.1.tgz#574082fb2859d2db433855835d9a8456ea18bbf3" - -cssnano@^4.1.8: - version "4.1.8" - resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-4.1.8.tgz#8014989679d5fd42491e4499a521dbfb85c95fd1" - dependencies: - cosmiconfig "^5.0.0" - cssnano-preset-default "^4.0.6" - is-resolvable "^1.0.0" - postcss "^7.0.0" - -csso@^3.5.0: - version "3.5.1" - resolved "https://registry.yarnpkg.com/csso/-/csso-3.5.1.tgz#7b9eb8be61628973c1b261e169d2f024008e758b" - dependencies: - css-tree "1.0.0-alpha.29" - -currently-unhandled@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/currently-unhandled/-/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea" - dependencies: - array-find-index "^1.0.1" - -date-fns@^1.27.2: - version "1.29.0" - resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-1.29.0.tgz#12e609cdcb935127311d04d33334e2960a2a54e6" - -debug@*, debug@^4.0.0, debug@^4.0.1, debug@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.0.tgz#373687bffa678b38b1cd91f861b63850035ddc87" - dependencies: - ms "^2.1.1" - -debug@^2.2.0, debug@^2.3.3, debug@^2.6.8, debug@^2.6.9: - version "2.6.9" - resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" - dependencies: - ms "2.0.0" - -debug@^3.1.0: - version "3.2.6" - resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" - dependencies: - ms "^2.1.1" - -decamelize-keys@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/decamelize-keys/-/decamelize-keys-1.1.0.tgz#d171a87933252807eb3cb61dc1c1445d078df2d9" - dependencies: - decamelize "^1.1.0" - map-obj "^1.0.0" - -decamelize@^1.1.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" - -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" - -dedent@^0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c" - -deep-is@~0.1.3: - version "0.1.3" - resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" - -deferred-leveldown@~0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/deferred-leveldown/-/deferred-leveldown-0.2.0.tgz#2cef1f111e1c57870d8bbb8af2650e587cd2f5b4" - dependencies: - abstract-leveldown "~0.12.1" - -define-properties@^1.1.2, define-properties@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" - dependencies: - object-keys "^1.0.12" - -define-property@^0.2.5: - version "0.2.5" - resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116" - dependencies: - is-descriptor "^0.1.0" - -define-property@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6" - dependencies: - is-descriptor "^1.0.0" - -define-property@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d" - dependencies: - is-descriptor "^1.0.2" - isobject "^3.0.1" - -del@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/del/-/del-3.0.0.tgz#53ecf699ffcbcb39637691ab13baf160819766e5" - dependencies: - globby "^6.1.0" - is-path-cwd "^1.0.0" - is-path-in-cwd "^1.0.0" - p-map "^1.1.1" - pify "^3.0.0" - rimraf "^2.2.8" - -des.js@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.0.tgz#c074d2e2aa6a8a9a07dbd61f9a15c2cd83ec8ecc" - dependencies: - inherits "^2.0.1" - minimalistic-assert "^1.0.0" - -diffie-hellman@^5.0.0: - version "5.0.3" - resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.3.tgz#40e8ee98f55a2149607146921c63e1ae5f3d2875" - dependencies: - bn.js "^4.1.0" - miller-rabin "^4.0.0" - randombytes "^2.0.0" - -dir-glob@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-2.0.0.tgz#0b205d2b6aef98238ca286598a8204d29d0a0034" - dependencies: - arrify "^1.0.1" - path-type "^3.0.0" - -doctrine@1.5.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-1.5.0.tgz#379dce730f6166f76cefa4e6707a159b02c5a6fa" - dependencies: - esutils "^2.0.2" - isarray "^1.0.0" - -doctrine@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d" - dependencies: - esutils "^2.0.2" - -dom-serializer@0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.1.0.tgz#073c697546ce0780ce23be4a28e293e40bc30c82" - dependencies: - domelementtype "~1.1.1" - entities "~1.1.1" - -domelementtype@1, domelementtype@^1.3.0: - version "1.3.1" - resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.1.tgz#d048c44b37b0d10a7f2a3d5fee3f4333d790481f" - -domelementtype@~1.1.1: - version "1.1.3" - resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.1.3.tgz#bd28773e2642881aec51544924299c5cd822185b" - -domhandler@^2.3.0: - version "2.4.2" - resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.4.2.tgz#8805097e933d65e85546f726d60f5eb88b44f803" - dependencies: - domelementtype "1" - -domutils@^1.5.1, domutils@^1.7.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.7.0.tgz#56ea341e834e06e6748af7a1cb25da67ea9f8c2a" - dependencies: - dom-serializer "0" - domelementtype "1" - -dot-prop@^4.1.1: - version "4.2.0" - resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-4.2.0.tgz#1f19e0c2e1aa0e32797c49799f2837ac6af69c57" - dependencies: - is-obj "^1.0.0" - -electron-to-chromium@^1.3.103: - version "1.3.113" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.113.tgz#b1ccf619df7295aea17bc6951dc689632629e4a9" - -electron-to-chromium@^1.3.86: - version "1.3.88" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.88.tgz#f36ab32634f49ef2b0fdc1e82e2d1cc17feb29e7" - -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" - 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" - -email-addresses@^3.0.1: - version "3.0.3" - resolved "https://registry.yarnpkg.com/email-addresses/-/email-addresses-3.0.3.tgz#fc3c6952f68da24239914e982c8a7783bc2ed96d" - -emojis-list@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389" - -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" - dependencies: - once "^1.4.0" - -entities@^1.1.1, entities@~1.1.1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.2.tgz#bdfa735299664dfafd34529ed4f8522a275fea56" - -errno@^0.1.1, errno@~0.1.1: - version "0.1.7" - resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.7.tgz#4684d71779ad39af177e3f007996f7c67c852618" - dependencies: - prr "~1.0.1" - -error-ex@^1.2.0, error-ex@^1.3.1: - version "1.3.2" - resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" - dependencies: - is-arrayish "^0.2.1" - -es-abstract@^1.12.0, es-abstract@^1.5.1: - version "1.13.0" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.13.0.tgz#ac86145fdd5099d8dd49558ccba2eaf9b88e24e9" - dependencies: - es-to-primitive "^1.2.0" - function-bind "^1.1.1" - has "^1.0.3" - is-callable "^1.1.4" - is-regex "^1.0.4" - object-keys "^1.0.12" - -es-abstract@^1.7.0: - version "1.12.0" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.12.0.tgz#9dbbdd27c6856f0001421ca18782d786bf8a6165" - dependencies: - es-to-primitive "^1.1.1" - function-bind "^1.1.1" - has "^1.0.1" - is-callable "^1.1.3" - is-regex "^1.0.4" - -es-to-primitive@^1.1.1, es-to-primitive@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.0.tgz#edf72478033456e8dda8ef09e00ad9650707f377" - dependencies: - is-callable "^1.1.4" - is-date-object "^1.0.1" - is-symbol "^1.0.2" - -escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.4, escape-string-regexp@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" - -eslint-import-resolver-node@^0.3.1: - version "0.3.2" - resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.2.tgz#58f15fb839b8d0576ca980413476aab2472db66a" - dependencies: - debug "^2.6.9" - resolve "^1.5.0" - -eslint-module-utils@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.2.0.tgz#b270362cd88b1a48ad308976ce7fa54e98411746" - dependencies: - debug "^2.6.8" - pkg-dir "^1.0.0" - -eslint-plugin-es@^1.3.1: - version "1.4.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-es/-/eslint-plugin-es-1.4.0.tgz#475f65bb20c993fc10e8c8fe77d1d60068072da6" - dependencies: - eslint-utils "^1.3.0" - regexpp "^2.0.1" - -eslint-plugin-import@^2.14.0: - version "2.14.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.14.0.tgz#6b17626d2e3e6ad52cfce8807a845d15e22111a8" - dependencies: - contains-path "^0.1.0" - debug "^2.6.8" - doctrine "1.5.0" - eslint-import-resolver-node "^0.3.1" - eslint-module-utils "^2.2.0" - has "^1.0.1" - lodash "^4.17.4" - minimatch "^3.0.3" - read-pkg-up "^2.0.0" - resolve "^1.6.0" - -eslint-plugin-node@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-node/-/eslint-plugin-node-8.0.0.tgz#fb9e8911f4543514f154bb6a5924b599aa645568" - dependencies: - eslint-plugin-es "^1.3.1" - eslint-utils "^1.3.1" - ignore "^5.0.2" - minimatch "^3.0.4" - resolve "^1.8.1" - semver "^5.5.0" - -eslint-plugin-promise@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-promise/-/eslint-plugin-promise-4.0.1.tgz#2d074b653f35a23d1ba89d8e976a985117d1c6a2" - -eslint-plugin-react@^7.11.1: - version "7.11.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.11.1.tgz#c01a7af6f17519457d6116aa94fc6d2ccad5443c" - dependencies: - array-includes "^3.0.3" - doctrine "^2.1.0" - has "^1.0.3" - jsx-ast-utils "^2.0.1" - prop-types "^15.6.2" - -eslint-scope@3.7.1: - version "3.7.1" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-3.7.1.tgz#3d63c3edfda02e06e01a452ad88caacc7cdcb6e8" - dependencies: - esrecurse "^4.1.0" - estraverse "^4.1.1" - -eslint-scope@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-4.0.0.tgz#50bf3071e9338bcdc43331794a0cb533f0136172" - dependencies: - esrecurse "^4.1.0" - estraverse "^4.1.1" - -eslint-utils@^1.3.0, eslint-utils@^1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-1.3.1.tgz#9a851ba89ee7c460346f97cf8939c7298827e512" - -eslint-visitor-keys@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz#3f3180fb2e291017716acb4c9d6d5b5c34a6a81d" - -eslint@5.13.0: - version "5.13.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-5.13.0.tgz#ce71cc529c450eed9504530939aa97527861ede9" - dependencies: - "@babel/code-frame" "^7.0.0" - ajv "^6.5.3" - chalk "^2.1.0" - cross-spawn "^6.0.5" - debug "^4.0.1" - doctrine "^2.1.0" - eslint-scope "^4.0.0" - eslint-utils "^1.3.1" - eslint-visitor-keys "^1.0.0" - espree "^5.0.0" - esquery "^1.0.1" - esutils "^2.0.2" - file-entry-cache "^2.0.0" - functional-red-black-tree "^1.0.1" - glob "^7.1.2" - globals "^11.7.0" - ignore "^4.0.6" - import-fresh "^3.0.0" - imurmurhash "^0.1.4" - inquirer "^6.1.0" - js-yaml "^3.12.0" - json-stable-stringify-without-jsonify "^1.0.1" - levn "^0.3.0" - lodash "^4.17.5" - minimatch "^3.0.4" - mkdirp "^0.5.1" - natural-compare "^1.4.0" - optionator "^0.8.2" - path-is-inside "^1.0.2" - progress "^2.0.0" - regexpp "^2.0.1" - semver "^5.5.1" - strip-ansi "^4.0.0" - strip-json-comments "^2.0.1" - table "^5.0.2" - text-table "^0.2.0" - -espree@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/espree/-/espree-5.0.0.tgz#fc7f984b62b36a0f543b13fb9cd7b9f4a7f5b65c" - dependencies: - acorn "^6.0.2" - acorn-jsx "^5.0.0" - eslint-visitor-keys "^1.0.0" - -esprima@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" - integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== - -esquery@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.0.1.tgz#406c51658b1f5991a5f9b62b1dc25b00e3e5c708" - dependencies: - estraverse "^4.0.0" - -esrecurse@^4.1.0: - version "4.2.1" - resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.2.1.tgz#007a3b9fdbc2b3bb87e4879ea19c92fdbd3942cf" - dependencies: - estraverse "^4.1.0" - -estraverse@^4.0.0, estraverse@^4.1.0, estraverse@^4.1.1: - version "4.2.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.2.0.tgz#0dee3fed31fcd469618ce7342099fc1afa0bdb13" - -estree-walker@^0.5.2: - version "0.5.2" - resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-0.5.2.tgz#d3850be7529c9580d815600b53126515e146dd39" - -esutils@^2.0.0, esutils@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b" - -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" - dependencies: - md5.js "^1.3.4" - safe-buffer "^5.1.1" - -execa@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8" - 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" - -execall@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/execall/-/execall-1.0.0.tgz#73d0904e395b3cab0658b08d09ec25307f29bb73" - dependencies: - clone-regexp "^1.0.0" - -expand-brackets@^0.1.4: - version "0.1.5" - resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-0.1.5.tgz#df07284e342a807cd733ac5af72411e581d1177b" - dependencies: - is-posix-bracket "^0.1.0" - -expand-brackets@^2.1.4: - version "2.1.4" - resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" - dependencies: - debug "^2.3.3" - define-property "^0.2.5" - extend-shallow "^2.0.1" - posix-character-classes "^0.1.0" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.1" - -expand-range@^1.8.1: - version "1.8.2" - resolved "https://registry.yarnpkg.com/expand-range/-/expand-range-1.8.2.tgz#a299effd335fe2721ebae8e257ec79644fc85337" - dependencies: - fill-range "^2.1.0" - -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" - dependencies: - homedir-polyfill "^1.0.1" - -extend-shallow@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" - dependencies: - is-extendable "^0.1.0" - -extend-shallow@^3.0.0, extend-shallow@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8" - dependencies: - assign-symbols "^1.0.0" - is-extendable "^1.0.1" - -extend@^3.0.0: - version "3.0.2" - resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" - -external-editor@^3.0.0: - version "3.0.3" - resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.0.3.tgz#5866db29a97826dbe4bf3afd24070ead9ea43a27" - dependencies: - chardet "^0.7.0" - iconv-lite "^0.4.24" - tmp "^0.0.33" - -extglob@^0.3.1: - version "0.3.2" - resolved "https://registry.yarnpkg.com/extglob/-/extglob-0.3.2.tgz#2e18ff3d2f49ab2765cec9023f011daa8d8349a1" - dependencies: - is-extglob "^1.0.0" - -extglob@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" - dependencies: - array-unique "^0.3.2" - define-property "^1.0.0" - expand-brackets "^2.1.4" - extend-shallow "^2.0.1" - fragment-cache "^0.2.1" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.1" - -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" - -fast-glob@^2.0.2: - version "2.2.4" - resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-2.2.4.tgz#e54f4b66d378040e0e4d6a68ec36bbc5b04363c0" - dependencies: - "@mrmlnc/readdir-enhanced" "^2.2.1" - "@nodelib/fs.stat" "^1.1.2" - glob-parent "^3.1.0" - is-glob "^4.0.0" - merge2 "^1.2.3" - micromatch "^3.1.10" - -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" - -fast-levenshtein@~2.0.4: - version "2.0.6" - resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" - -fastparse@^1.1.1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/fastparse/-/fastparse-1.1.2.tgz#91728c5a5942eced8531283c79441ee4122c35a9" - -figures@^1.7.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/figures/-/figures-1.7.0.tgz#cbe1e3affcf1cd44b80cadfed28dc793a9701d2e" - dependencies: - escape-string-regexp "^1.0.5" - object-assign "^4.1.0" - -figures@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962" - dependencies: - escape-string-regexp "^1.0.5" - -file-entry-cache@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-2.0.0.tgz#c392990c3e684783d838b8c84a45d8a048458361" - dependencies: - flat-cache "^1.2.1" - object-assign "^4.0.1" - -filename-regex@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/filename-regex/-/filename-regex-2.0.1.tgz#c1c4b9bee3e09725ddb106b75c1e301fe2f18b26" - -filename-reserved-regex@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/filename-reserved-regex/-/filename-reserved-regex-1.0.0.tgz#e61cf805f0de1c984567d0386dc5df50ee5af7e4" - -filenamify-url@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/filenamify-url/-/filenamify-url-1.0.0.tgz#b32bd81319ef5863b73078bed50f46a4f7975f50" - dependencies: - filenamify "^1.0.0" - humanize-url "^1.0.0" - -filenamify@^1.0.0: - version "1.2.1" - resolved "https://registry.yarnpkg.com/filenamify/-/filenamify-1.2.1.tgz#a9f2ffd11c503bed300015029272378f1f1365a5" - dependencies: - filename-reserved-regex "^1.0.0" - strip-outer "^1.0.0" - trim-repeated "^1.0.0" - -fill-range@^2.1.0: - version "2.2.4" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-2.2.4.tgz#eb1e773abb056dcd8df2bfdf6af59b8b3a936565" - dependencies: - is-number "^2.1.0" - isobject "^2.0.0" - randomatic "^3.0.0" - repeat-element "^1.1.2" - repeat-string "^1.5.2" - -fill-range@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" - dependencies: - extend-shallow "^2.0.1" - is-number "^3.0.0" - repeat-string "^1.6.1" - to-regex-range "^2.1.0" - -find-parent-dir@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/find-parent-dir/-/find-parent-dir-0.3.0.tgz#33c44b429ab2b2f0646299c5f9f718f376ff8d54" - -find-up@^1.0.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f" - dependencies: - path-exists "^2.0.0" - pinkie-promise "^2.0.0" - -find-up@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" - dependencies: - locate-path "^2.0.0" - -find-up@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" - dependencies: - locate-path "^3.0.0" - -flat-cache@^1.2.1: - version "1.3.4" - resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-1.3.4.tgz#2c2ef77525cc2929007dfffa1dd314aa9c9dee6f" - dependencies: - circular-json "^0.3.1" - graceful-fs "^4.1.2" - rimraf "~2.6.2" - write "^0.2.1" - -for-in@^1.0.1, for-in@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" - -for-own@^0.1.4: - version "0.1.5" - resolved "https://registry.yarnpkg.com/for-own/-/for-own-0.1.5.tgz#5265c681a4f294dabbf17c9509b6763aa84510ce" - dependencies: - for-in "^1.0.1" - -foreach@~2.0.1: - version "2.0.5" - resolved "https://registry.yarnpkg.com/foreach/-/foreach-2.0.5.tgz#0bee005018aeb260d0a3af3ae658dd0136ec1b99" - -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" - -fs-extra@^7.0.0: - version "7.0.1" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-7.0.1.tgz#4f189c44aa123b895f722804f55ea23eadc348e9" - dependencies: - graceful-fs "^4.1.2" - jsonfile "^4.0.0" - universalify "^0.1.0" - -fs.realpath@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" - -function-bind@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" - -functional-red-black-tree@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" - -fwd-stream@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/fwd-stream/-/fwd-stream-1.0.4.tgz#ed281cabed46feecf921ee32dc4c50b372ac7cfa" - dependencies: - readable-stream "~1.0.26-4" - -g-status@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/g-status/-/g-status-2.0.2.tgz#270fd32119e8fc9496f066fe5fe88e0a6bc78b97" - dependencies: - arrify "^1.0.1" - matcher "^1.0.0" - simple-git "^1.85.0" - -generic-names@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/generic-names/-/generic-names-1.0.3.tgz#2d786a121aee508876796939e8e3bff836c20917" - dependencies: - loader-utils "^0.2.16" - -get-own-enumerable-property-symbols@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.0.tgz#b877b49a5c16aefac3655f2ed2ea5b684df8d203" - -get-stdin@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-6.0.0.tgz#9e09bf712b360ab9225e812048f71fde9c89657b" - -get-stream@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" - 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" - -gh-pages@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/gh-pages/-/gh-pages-2.0.1.tgz#aefe47a43b8d9d2aa3130576b33fe95641e29a2f" - dependencies: - async "^2.6.1" - commander "^2.18.0" - email-addresses "^3.0.1" - filenamify-url "^1.0.0" - fs-extra "^7.0.0" - globby "^6.1.0" - graceful-fs "^4.1.11" - rimraf "^2.6.2" - -glob-base@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/glob-base/-/glob-base-0.3.0.tgz#dbb164f6221b1c0b1ccf82aea328b497df0ea3c4" - dependencies: - glob-parent "^2.0.0" - is-glob "^2.0.0" - -glob-parent@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-2.0.0.tgz#81383d72db054fcccf5336daa902f182f6edbb28" - dependencies: - is-glob "^2.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" - dependencies: - is-glob "^3.1.0" - path-dirname "^1.0.0" - -glob-to-regexp@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz#8c5a1494d2066c570cc3bfe4496175acc4d502ab" - -glob@7.0.x: - version "7.0.6" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.0.6.tgz#211bafaf49e525b8cd93260d14ab136152b3f57a" - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.0.2" - once "^1.3.0" - path-is-absolute "^1.0.0" - -glob@^7.0.3, glob@^7.0.5, glob@^7.1.2: - version "7.1.3" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.3.tgz#3960832d3f1574108342dafd3a67b332c0969df1" - dependencies: - 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" - -global-modules@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-1.0.0.tgz#6d770f0eb523ac78164d72b5e71a8877265cc3ea" - dependencies: - global-prefix "^1.0.1" - is-windows "^1.0.1" - resolve-dir "^1.0.0" - -global-prefix@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-1.0.2.tgz#dbf743c6c14992593c655568cb66ed32c0122ebe" - dependencies: - expand-tilde "^2.0.2" - homedir-polyfill "^1.0.1" - ini "^1.3.4" - is-windows "^1.0.1" - which "^1.2.14" - -globals@^11.1.0, globals@^11.7.0: - version "11.9.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-11.9.0.tgz#bde236808e987f290768a93d065060d78e6ab249" - -globby@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/globby/-/globby-6.1.0.tgz#f5a6d70e8395e21c858fb0489d64df02424d506c" - dependencies: - array-union "^1.0.1" - glob "^7.0.3" - object-assign "^4.0.1" - pify "^2.0.0" - pinkie-promise "^2.0.0" - -globby@^8.0.0: - version "8.0.1" - resolved "https://registry.yarnpkg.com/globby/-/globby-8.0.1.tgz#b5ad48b8aa80b35b814fc1281ecc851f1d2b5b50" - dependencies: - array-union "^1.0.1" - dir-glob "^2.0.0" - fast-glob "^2.0.2" - glob "^7.1.2" - ignore "^3.3.5" - pify "^3.0.0" - slash "^1.0.0" - -globjoin@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/globjoin/-/globjoin-0.1.4.tgz#2f4494ac8919e3767c5cbb691e9f463324285d43" - -gonzales-pe@^4.2.3: - version "4.2.3" - resolved "https://registry.yarnpkg.com/gonzales-pe/-/gonzales-pe-4.2.3.tgz#41091703625433285e0aee3aa47829fc1fbeb6f2" - dependencies: - minimist "1.1.x" - -graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.6: - version "4.1.15" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.15.tgz#ffb703e1066e8a0eeaa4c8b80ba9253eeefbfb00" - -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@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" - -has-symbols@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.0.tgz#ba1a8f1af2a0fc39650f5c850367704122063b44" - -has-value@^0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" - dependencies: - get-value "^2.0.3" - has-values "^0.1.4" - isobject "^2.0.0" - -has-value@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177" - dependencies: - get-value "^2.0.6" - has-values "^1.0.0" - isobject "^3.0.0" - -has-values@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771" - -has-values@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f" - dependencies: - is-number "^3.0.0" - kind-of "^4.0.0" - -has@^1.0.0, has@^1.0.1, has@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" - dependencies: - function-bind "^1.1.1" - -hash-base@^3.0.0: - version "3.0.4" - resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.0.4.tgz#5fc8686847ecd73499403319a6b0a3f3f6ae4918" - 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" - dependencies: - inherits "^2.0.3" - minimalistic-assert "^1.0.1" - -hex-color-regex@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/hex-color-regex/-/hex-color-regex-1.1.0.tgz#4c06fccb4602fe2602b3c93df82d7e7dbf1a8a8e" - -hmac-drbg@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" - dependencies: - hash.js "^1.0.3" - minimalistic-assert "^1.0.0" - minimalistic-crypto-utils "^1.0.1" - -homedir-polyfill@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/homedir-polyfill/-/homedir-polyfill-1.0.1.tgz#4c2bbc8a758998feebf5ed68580f76d46768b4bc" - dependencies: - parse-passwd "^1.0.0" - -hosted-git-info@^2.1.4: - version "2.7.1" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.7.1.tgz#97f236977bd6e125408930ff6de3eec6281ec047" - -hsl-regex@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/hsl-regex/-/hsl-regex-1.0.0.tgz#d49330c789ed819e276a4c0d272dffa30b18fe6e" - -hsla-regex@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/hsla-regex/-/hsla-regex-1.0.0.tgz#c1ce7a3168c8c6614033a4b5f7877f3b225f9c38" - -html-comment-regex@^1.1.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/html-comment-regex/-/html-comment-regex-1.1.2.tgz#97d4688aeb5c81886a364faa0cad1dda14d433a7" - -html-tags@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/html-tags/-/html-tags-2.0.0.tgz#10b30a386085f43cede353cc8fa7cb0deeea668b" - -htmlparser2@^3.9.2: - version "3.10.0" - resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.10.0.tgz#5f5e422dcf6119c0d983ed36260ce9ded0bee464" - dependencies: - domelementtype "^1.3.0" - domhandler "^2.3.0" - domutils "^1.5.1" - entities "^1.1.1" - inherits "^2.0.1" - readable-stream "^3.0.6" - -humanize-url@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/humanize-url/-/humanize-url-1.0.1.tgz#f4ab99e0d288174ca4e1e50407c55fbae464efff" - dependencies: - normalize-url "^1.0.0" - strip-url-auth "^1.0.0" - -husky@^1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/husky/-/husky-1.3.1.tgz#26823e399300388ca2afff11cfa8a86b0033fae0" - dependencies: - cosmiconfig "^5.0.7" - execa "^1.0.0" - find-up "^3.0.0" - get-stdin "^6.0.0" - is-ci "^2.0.0" - pkg-dir "^3.0.0" - please-upgrade-node "^3.1.1" - read-pkg "^4.0.1" - run-node "^1.0.0" - slash "^2.0.0" - -iconv-lite@^0.4.24: - version "0.4.24" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" - dependencies: - safer-buffer ">= 2.1.2 < 3" - -icss-replace-symbols@1.1.0, icss-replace-symbols@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz#06ea6f83679a7749e386cfe1fe812ae5db223ded" - -idb-wrapper@^1.5.0: - version "1.7.2" - resolved "https://registry.yarnpkg.com/idb-wrapper/-/idb-wrapper-1.7.2.tgz#8251afd5e77fe95568b1c16152eb44b396767ea2" - -ignore@^3.3.5: - version "3.3.10" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.3.10.tgz#0a97fb876986e8081c631160f8f9f389157f0043" - -ignore@^4.0.6: - version "4.0.6" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" - -ignore@^5.0.2, ignore@^5.0.4: - version "5.0.4" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.0.4.tgz#33168af4a21e99b00c5d41cbadb6a6cb49903a45" - -import-cwd@^2.0.0, import-cwd@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/import-cwd/-/import-cwd-2.1.0.tgz#aa6cf36e722761285cb371ec6519f53e2435b0a9" - dependencies: - import-from "^2.1.0" - -import-fresh@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-2.0.0.tgz#d81355c15612d386c61f9ddd3922d4304822a546" - dependencies: - caller-path "^2.0.0" - resolve-from "^3.0.0" - -import-fresh@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.0.0.tgz#a3d897f420cab0e671236897f75bc14b4885c390" - dependencies: - parent-module "^1.0.0" - resolve-from "^4.0.0" - -import-from@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/import-from/-/import-from-2.1.0.tgz#335db7f2a7affd53aaa471d4b8021dee36b7f3b1" - dependencies: - resolve-from "^3.0.0" - -import-lazy@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/import-lazy/-/import-lazy-3.1.0.tgz#891279202c8a2280fdbd6674dbd8da1a1dfc67cc" - -imurmurhash@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" - -indent-string@^3.0.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-3.2.0.tgz#4a5fd6d27cc332f37e5419a504dbb837105c9289" - -indexes-of@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/indexes-of/-/indexes-of-1.0.1.tgz#f30f716c8e2bd346c7b67d3df3915566a7c05607" - -indexof@~0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/indexof/-/indexof-0.0.1.tgz#82dc336d232b9062179d05ab3293a66059fd435d" - -inflight@^1.0.4: - version "1.0.6" - resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" - dependencies: - once "^1.3.0" - wrappy "1" - -inherits@2, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.1, inherits@~2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" - -ini@^1.3.4: - version "1.3.5" - resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" - -inquirer@^6.1.0: - version "6.2.1" - resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-6.2.1.tgz#9943fc4882161bdb0b0c9276769c75b32dbfcd52" - dependencies: - ansi-escapes "^3.0.0" - chalk "^2.0.0" - cli-cursor "^2.1.0" - cli-width "^2.0.0" - external-editor "^3.0.0" - figures "^2.0.0" - lodash "^4.17.10" - mute-stream "0.0.7" - run-async "^2.2.0" - rxjs "^6.1.0" - string-width "^2.1.0" - strip-ansi "^5.0.0" - through "^2.3.6" - -invariant@^2.2.2: - version "2.2.4" - resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" - dependencies: - loose-envify "^1.0.0" - -is-absolute-url@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-absolute-url/-/is-absolute-url-2.1.0.tgz#50530dfb84fcc9aa7dbe7852e83a37b93b9f2aa6" - -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" - dependencies: - kind-of "^3.0.2" - -is-accessor-descriptor@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656" - dependencies: - kind-of "^6.0.0" - -is-alphabetical@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-alphabetical/-/is-alphabetical-1.0.2.tgz#1fa6e49213cb7885b75d15862fb3f3d96c884f41" - -is-alphanumeric@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-alphanumeric/-/is-alphanumeric-1.0.0.tgz#4a9cef71daf4c001c1d81d63d140cf53fd6889f4" - -is-alphanumerical@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-alphanumerical/-/is-alphanumerical-1.0.2.tgz#1138e9ae5040158dc6ff76b820acd6b7a181fd40" - dependencies: - is-alphabetical "^1.0.0" - is-decimal "^1.0.0" - -is-arrayish@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" - -is-arrayish@^0.3.1: - version "0.3.2" - resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.3.2.tgz#4574a2ae56f7ab206896fb431eaeed066fdf8f03" - -is-buffer@^1.1.4, is-buffer@^1.1.5: - version "1.1.6" - resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" - -is-builtin-module@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-builtin-module/-/is-builtin-module-1.0.0.tgz#540572d34f7ac3119f8f76c30cbc1b1e037affbe" - dependencies: - builtin-modules "^1.0.0" - -is-callable@^1.1.3, is-callable@^1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.4.tgz#1e1adf219e1eeb684d691f9d6a05ff0d30a24d75" - -is-ci@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c" - dependencies: - ci-info "^2.0.0" - -is-color-stop@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-color-stop/-/is-color-stop-1.1.0.tgz#cfff471aee4dd5c9e158598fbe12967b5cdad345" - dependencies: - css-color-names "^0.0.4" - hex-color-regex "^1.1.0" - hsl-regex "^1.0.0" - hsla-regex "^1.0.0" - rgb-regex "^1.0.1" - rgba-regex "^1.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" - dependencies: - kind-of "^3.0.2" - -is-data-descriptor@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7" - dependencies: - kind-of "^6.0.0" - -is-date-object@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.1.tgz#9aa20eb6aeebbff77fbd33e74ca01b33581d3a16" - -is-decimal@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-decimal/-/is-decimal-1.0.2.tgz#894662d6a8709d307f3a276ca4339c8fa5dff0ff" - -is-descriptor@^0.1.0: - version "0.1.6" - resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca" - dependencies: - is-accessor-descriptor "^0.1.6" - is-data-descriptor "^0.1.4" - kind-of "^5.0.0" - -is-descriptor@^1.0.0, is-descriptor@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec" - dependencies: - is-accessor-descriptor "^1.0.0" - is-data-descriptor "^1.0.0" - kind-of "^6.0.2" - -is-directory@^0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/is-directory/-/is-directory-0.3.1.tgz#61339b6f2475fc772fd9c9d83f5c8575dc154ae1" - -is-dotfile@^1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/is-dotfile/-/is-dotfile-1.0.3.tgz#a6a2f32ffd2dfb04f5ca25ecd0f6b83cf798a1e1" - -is-equal-shallow@^0.1.3: - version "0.1.3" - resolved "https://registry.yarnpkg.com/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz#2238098fc221de0bcfa5d9eac4c45d638aa1c534" - dependencies: - is-primitive "^2.0.0" - -is-extendable@^0.1.0, is-extendable@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" - -is-extendable@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4" - dependencies: - is-plain-object "^2.0.4" - -is-extglob@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-1.0.0.tgz#ac468177c4943405a092fc8f29760c6ffc6206c0" - -is-extglob@^2.1.0, is-extglob@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" - -is-fullwidth-code-point@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" - dependencies: - number-is-nan "^1.0.0" - -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-glob@^2.0.0, is-glob@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-2.0.1.tgz#d096f926a3ded5600f3fdfd91198cb0888c2d863" - dependencies: - is-extglob "^1.0.0" - -is-glob@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a" - dependencies: - is-extglob "^2.1.0" - -is-glob@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.0.tgz#9521c76845cc2610a85203ddf080a958c2ffabc0" - dependencies: - is-extglob "^2.1.1" - -is-hexadecimal@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-hexadecimal/-/is-hexadecimal-1.0.2.tgz#b6e710d7d07bb66b98cb8cece5c9b4921deeb835" - -is-module@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-module/-/is-module-1.0.0.tgz#3258fb69f78c14d5b815d664336b4cffb6441591" - -is-number@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-2.1.0.tgz#01fcbbb393463a548f2f466cce16dece49db908f" - dependencies: - kind-of "^3.0.2" - -is-number@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" - dependencies: - kind-of "^3.0.2" - -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: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" - -is-object@~0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/is-object/-/is-object-0.1.2.tgz#00efbc08816c33cfc4ac8251d132e10dc65098d7" - -is-observable@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-observable/-/is-observable-1.1.0.tgz#b3e986c8f44de950867cab5403f5a3465005975e" - dependencies: - symbol-observable "^1.1.0" - -is-path-cwd@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-1.0.0.tgz#d225ec23132e89edd38fda767472e62e65f1106d" - -is-path-in-cwd@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz#5ac48b345ef675339bd6c7a48a912110b241cf52" - dependencies: - is-path-inside "^1.0.0" - -is-path-inside@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-1.0.1.tgz#8ef5b7de50437a3fdca6b4e865ef7aa55cb48036" - dependencies: - path-is-inside "^1.0.1" - -is-plain-obj@^1.0.0, is-plain-obj@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" - -is-plain-object@^2.0.1, is-plain-object@^2.0.3, is-plain-object@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" - dependencies: - isobject "^3.0.1" - -is-posix-bracket@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz#3334dc79774368e92f016e6fbc0a88f5cd6e6bc4" - -is-primitive@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-primitive/-/is-primitive-2.0.0.tgz#207bab91638499c07b2adf240a41a87210034575" - -is-promise@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa" - -is-regex@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.4.tgz#5517489b547091b0930e095654ced25ee97e9491" - dependencies: - has "^1.0.1" - -is-regexp@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-regexp/-/is-regexp-1.0.0.tgz#fd2d883545c46bac5a633e7b9a09e87fa2cb5069" - -is-resolvable@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-resolvable/-/is-resolvable-1.1.0.tgz#fb18f87ce1feb925169c9a407c19318a3206ed88" - -is-stream@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" - -is-supported-regexp-flag@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-supported-regexp-flag/-/is-supported-regexp-flag-1.0.1.tgz#21ee16518d2c1dd3edd3e9a0d57e50207ac364ca" - -is-svg@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-svg/-/is-svg-3.0.0.tgz#9321dbd29c212e5ca99c4fa9794c714bcafa2f75" - dependencies: - html-comment-regex "^1.1.0" - -is-symbol@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.2.tgz#a055f6ae57192caee329e7a860118b497a950f38" - dependencies: - has-symbols "^1.0.0" - -is-whitespace-character@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-whitespace-character/-/is-whitespace-character-1.0.2.tgz#ede53b4c6f6fb3874533751ec9280d01928d03ed" - -is-windows@^1.0.0, 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-word-character@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-word-character/-/is-word-character-1.0.2.tgz#46a5dac3f2a1840898b91e576cd40d493f3ae553" - -is@~0.2.6: - version "0.2.7" - resolved "https://registry.yarnpkg.com/is/-/is-0.2.7.tgz#3b34a2c48f359972f35042849193ae7264b63562" - -isarray@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" - -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" - -isbuffer@~0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/isbuffer/-/isbuffer-0.0.0.tgz#38c146d9df528b8bf9b0701c3d43cf12df3fc39b" - -isexe@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" - -isobject@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" - dependencies: - isarray "1.0.0" - -isobject@^3.0.0, isobject@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" - -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-validate@^23.5.0: - version "23.6.0" - resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-23.6.0.tgz#36761f99d1ed33fcd425b4e4c5595d62b6597474" - dependencies: - chalk "^2.0.1" - jest-get-type "^22.1.0" - leven "^2.1.0" - pretty-format "^23.6.0" - -js-levenshtein@^1.1.3: - version "1.1.4" - resolved "https://registry.yarnpkg.com/js-levenshtein/-/js-levenshtein-1.1.4.tgz#3a56e3cbf589ca0081eb22cd9ba0b1290a16d26e" - -"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" - -js-yaml@^3.12.0, js-yaml@^3.9.0: - 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" - -jsesc@^2.5.1: - version "2.5.2" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" - -jsesc@~0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" - -json-parse-better-errors@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" - -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" - -json-stable-stringify-without-jsonify@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" - -json5@^0.5.0: - version "0.5.1" - resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821" - -json5@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/json5/-/json5-2.1.0.tgz#e7a0c62c48285c628d20a10b85c89bb807c32850" - dependencies: - minimist "^1.2.0" - -jsonfile@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" - optionalDependencies: - graceful-fs "^4.1.6" - -jsx-ast-utils@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-2.0.1.tgz#e801b1b39985e20fffc87b40e3748080e2dcac7f" - dependencies: - array-includes "^3.0.3" - -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" - dependencies: - is-buffer "^1.1.5" - -kind-of@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" - dependencies: - is-buffer "^1.1.5" - -kind-of@^5.0.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d" - -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" - -known-css-properties@^0.10.0: - version "0.10.0" - resolved "https://registry.yarnpkg.com/known-css-properties/-/known-css-properties-0.10.0.tgz#8378a8921e6c815ecc47095744a8900af63d577d" - -level-blobs@^0.1.7: - version "0.1.7" - resolved "https://registry.yarnpkg.com/level-blobs/-/level-blobs-0.1.7.tgz#9ab9b97bb99f1edbf9f78a3433e21ed56386bdaf" - dependencies: - level-peek "1.0.6" - once "^1.3.0" - readable-stream "^1.0.26-4" - -level-filesystem@^1.0.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/level-filesystem/-/level-filesystem-1.2.0.tgz#a00aca9919c4a4dfafdca6a8108d225aadff63b3" - dependencies: - concat-stream "^1.4.4" - errno "^0.1.1" - fwd-stream "^1.0.4" - level-blobs "^0.1.7" - level-peek "^1.0.6" - level-sublevel "^5.2.0" - octal "^1.0.0" - once "^1.3.0" - xtend "^2.2.0" - -level-fix-range@2.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/level-fix-range/-/level-fix-range-2.0.0.tgz#c417d62159442151a19d9a2367868f1724c2d548" - dependencies: - clone "~0.1.9" - -level-fix-range@~1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/level-fix-range/-/level-fix-range-1.0.2.tgz#bf15b915ae36d8470c821e883ddf79cd16420828" - -"level-hooks@>=4.4.0 <5": - version "4.5.0" - resolved "https://registry.yarnpkg.com/level-hooks/-/level-hooks-4.5.0.tgz#1b9ae61922930f3305d1a61fc4d83c8102c0dd93" - dependencies: - string-range "~1.2" - -level-js@^2.1.3: - version "2.2.4" - resolved "https://registry.yarnpkg.com/level-js/-/level-js-2.2.4.tgz#bc055f4180635d4489b561c9486fa370e8c11697" - dependencies: - abstract-leveldown "~0.12.0" - idb-wrapper "^1.5.0" - isbuffer "~0.0.0" - ltgt "^2.1.2" - typedarray-to-buffer "~1.0.0" - xtend "~2.1.2" - -level-peek@1.0.6, level-peek@^1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/level-peek/-/level-peek-1.0.6.tgz#bec51c72a82ee464d336434c7c876c3fcbcce77f" - dependencies: - level-fix-range "~1.0.2" - -level-sublevel@^5.2.0: - version "5.2.3" - resolved "https://registry.yarnpkg.com/level-sublevel/-/level-sublevel-5.2.3.tgz#744c12c72d2e72be78dde3b9b5cd84d62191413a" - dependencies: - level-fix-range "2.0" - level-hooks ">=4.4.0 <5" - string-range "~1.2.1" - xtend "~2.0.4" - -levelup@^0.18.2: - version "0.18.6" - resolved "https://registry.yarnpkg.com/levelup/-/levelup-0.18.6.tgz#e6a01cb089616c8ecc0291c2a9bd3f0c44e3e5eb" - dependencies: - bl "~0.8.1" - deferred-leveldown "~0.2.0" - errno "~0.1.1" - prr "~0.0.0" - readable-stream "~1.0.26" - semver "~2.3.1" - xtend "~3.0.0" - -leven@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/leven/-/leven-2.1.0.tgz#c2e7a9f772094dee9d34202ae8acce4687875580" - -levn@^0.3.0, levn@~0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" - dependencies: - prelude-ls "~1.1.2" - type-check "~0.3.2" - -lint-staged@^8.1.0: - version "8.1.0" - resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-8.1.0.tgz#dbc3ae2565366d8f20efb9f9799d076da64863f2" - dependencies: - "@iamstarkov/listr-update-renderer" "0.4.1" - chalk "^2.3.1" - commander "^2.14.1" - cosmiconfig "5.0.6" - debug "^3.1.0" - dedent "^0.7.0" - del "^3.0.0" - execa "^1.0.0" - find-parent-dir "^0.3.0" - g-status "^2.0.2" - is-glob "^4.0.0" - is-windows "^1.0.2" - jest-validate "^23.5.0" - listr "^0.14.2" - lodash "^4.17.5" - log-symbols "^2.2.0" - micromatch "^3.1.8" - npm-which "^3.0.1" - p-map "^1.1.1" - path-is-inside "^1.0.2" - pify "^3.0.0" - please-upgrade-node "^3.0.2" - staged-git-files "1.1.2" - string-argv "^0.0.2" - stringify-object "^3.2.2" - -listr-silent-renderer@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/listr-silent-renderer/-/listr-silent-renderer-1.1.1.tgz#924b5a3757153770bf1a8e3fbf74b8bbf3f9242e" - -listr-update-renderer@^0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/listr-update-renderer/-/listr-update-renderer-0.5.0.tgz#4ea8368548a7b8aecb7e06d8c95cb45ae2ede6a2" - dependencies: - chalk "^1.1.3" - cli-truncate "^0.2.1" - elegant-spinner "^1.0.1" - figures "^1.7.0" - indent-string "^3.0.0" - log-symbols "^1.0.2" - log-update "^2.3.0" - strip-ansi "^3.0.1" - -listr-verbose-renderer@^0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/listr-verbose-renderer/-/listr-verbose-renderer-0.5.0.tgz#f1132167535ea4c1261102b9f28dac7cba1e03db" - dependencies: - chalk "^2.4.1" - cli-cursor "^2.1.0" - date-fns "^1.27.2" - figures "^2.0.0" - -listr@^0.14.2: - version "0.14.3" - resolved "https://registry.yarnpkg.com/listr/-/listr-0.14.3.tgz#2fea909604e434be464c50bddba0d496928fa586" - dependencies: - "@samverschueren/stream-to-observable" "^0.3.0" - is-observable "^1.1.0" - is-promise "^2.1.0" - is-stream "^1.1.0" - listr-silent-renderer "^1.1.1" - listr-update-renderer "^0.5.0" - listr-verbose-renderer "^0.5.0" - p-map "^2.0.0" - rxjs "^6.3.3" - -load-json-file@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-2.0.0.tgz#7947e42149af80d696cbf797bcaabcfe1fe29ca8" - dependencies: - graceful-fs "^4.1.2" - parse-json "^2.2.0" - pify "^2.0.0" - strip-bom "^3.0.0" - -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" - dependencies: - graceful-fs "^4.1.2" - parse-json "^4.0.0" - pify "^3.0.0" - strip-bom "^3.0.0" - -loader-utils@^0.2.16: - version "0.2.17" - resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-0.2.17.tgz#f86e6374d43205a6e6c60e9196f17c0299bfb348" - dependencies: - big.js "^3.1.3" - emojis-list "^2.0.0" - json5 "^0.5.0" - object-assign "^4.0.1" - -locate-path@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" - dependencies: - p-locate "^2.0.0" - path-exists "^3.0.0" - -locate-path@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" - dependencies: - p-locate "^3.0.0" - path-exists "^3.0.0" - -lodash.camelcase@^4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6" - -lodash.clonedeep@^4.5.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef" - integrity sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8= - -lodash.debounce@^4.0.8: - version "4.0.8" - resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" - -lodash.memoize@^4.1.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" - -lodash.throttle@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/lodash.throttle/-/lodash.throttle-4.1.1.tgz#c23e91b710242ac70c37f1e1cda9274cc39bf2f4" - -lodash.uniq@^4.5.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" - -lodash@^4.17.10, lodash@^4.17.11, lodash@^4.17.4, lodash@^4.17.5: - version "4.17.11" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.11.tgz#b39ea6229ef607ecd89e2c8df12536891cac9b8d" - -log-symbols@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-1.0.2.tgz#376ff7b58ea3086a0f09facc74617eca501e1a18" - dependencies: - chalk "^1.0.0" - -log-symbols@^2.0.0, log-symbols@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-2.2.0.tgz#5740e1c5d6f0dfda4ad9323b5332107ef6b4c40a" - dependencies: - chalk "^2.0.1" - -log-update@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/log-update/-/log-update-2.3.0.tgz#88328fd7d1ce7938b29283746f0b1bc126b24708" - dependencies: - ansi-escapes "^3.0.0" - cli-cursor "^2.0.0" - wrap-ansi "^3.0.1" - -longest-streak@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/longest-streak/-/longest-streak-2.0.2.tgz#2421b6ba939a443bb9ffebf596585a50b4c38e2e" - -loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.3.1: - version "1.4.0" - resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" - dependencies: - js-tokens "^3.0.0 || ^4.0.0" - -loud-rejection@^1.0.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/loud-rejection/-/loud-rejection-1.6.0.tgz#5b46f80147edee578870f086d04821cf998e551f" - dependencies: - currently-unhandled "^0.4.1" - signal-exit "^3.0.0" - -ltgt@^2.1.2: - version "2.2.1" - resolved "https://registry.yarnpkg.com/ltgt/-/ltgt-2.2.1.tgz#f35ca91c493f7b73da0e07495304f17b31f87ee5" - -magic-string@^0.25.1: - version "0.25.1" - resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.25.1.tgz#b1c248b399cd7485da0fe7385c2fc7011843266e" - dependencies: - sourcemap-codec "^1.4.1" - -map-cache@^0.2.2: - version "0.2.2" - resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" - -map-obj@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d" - -map-obj@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-2.0.0.tgz#a65cd29087a92598b8791257a523e021222ac1f9" - -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" - -markdown-escapes@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/markdown-escapes/-/markdown-escapes-1.0.2.tgz#e639cbde7b99c841c0bacc8a07982873b46d2122" - -markdown-table@^1.1.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/markdown-table/-/markdown-table-1.1.2.tgz#c78db948fa879903a41bce522e3b96f801c63786" - -matcher@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/matcher/-/matcher-1.1.1.tgz#51d8301e138f840982b338b116bb0c09af62c1c2" - dependencies: - escape-string-regexp "^1.0.4" - -math-random@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/math-random/-/math-random-1.0.1.tgz#8b3aac588b8a66e4975e3cdea67f7bb329601fac" - -mathml-tag-names@^2.0.1: - version "2.1.0" - resolved "https://registry.yarnpkg.com/mathml-tag-names/-/mathml-tag-names-2.1.0.tgz#490b70e062ee24636536e3d9481e333733d00f2c" - -md5.js@^1.3.4: - version "1.3.5" - resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f" - dependencies: - hash-base "^3.0.0" - inherits "^2.0.1" - safe-buffer "^5.1.2" - -mdast-util-compact@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/mdast-util-compact/-/mdast-util-compact-1.0.2.tgz#c12ebe16fffc84573d3e19767726de226e95f649" - dependencies: - unist-util-visit "^1.1.0" - -mdn-data@~1.1.0: - version "1.1.4" - resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-1.1.4.tgz#50b5d4ffc4575276573c4eedb8780812a8419f01" - -meow@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/meow/-/meow-5.0.0.tgz#dfc73d63a9afc714a5e371760eb5c88b91078aa4" - dependencies: - camelcase-keys "^4.0.0" - decamelize-keys "^1.0.0" - loud-rejection "^1.0.0" - minimist-options "^3.0.1" - normalize-package-data "^2.3.4" - read-pkg-up "^3.0.0" - redent "^2.0.0" - trim-newlines "^2.0.0" - yargs-parser "^10.0.0" - -merge2@^1.2.3: - version "1.2.3" - resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.2.3.tgz#7ee99dbd69bb6481689253f018488a1b902b0ed5" - -micromatch@^2.3.11: - version "2.3.11" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-2.3.11.tgz#86677c97d1720b363431d04d0d15293bd38c1565" - dependencies: - arr-diff "^2.0.0" - array-unique "^0.2.1" - braces "^1.8.2" - expand-brackets "^0.1.4" - extglob "^0.3.1" - filename-regex "^2.0.0" - is-extglob "^1.0.0" - is-glob "^2.0.1" - kind-of "^3.0.2" - normalize-path "^2.0.1" - object.omit "^2.0.0" - parse-glob "^3.0.4" - regex-cache "^0.4.2" - -micromatch@^3.1.10, micromatch@^3.1.8: - version "3.1.10" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" - dependencies: - arr-diff "^4.0.0" - array-unique "^0.3.2" - braces "^2.3.1" - define-property "^2.0.2" - extend-shallow "^3.0.2" - extglob "^2.0.4" - fragment-cache "^0.2.1" - kind-of "^6.0.2" - nanomatch "^1.2.9" - object.pick "^1.3.0" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.2" - -miller-rabin@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.1.tgz#f080351c865b0dc562a8462966daa53543c78a4d" - dependencies: - bn.js "^4.0.0" - brorand "^1.0.1" - -mime@^2.3.1: - version "2.4.0" - resolved "https://registry.yarnpkg.com/mime/-/mime-2.4.0.tgz#e051fd881358585f3279df333fe694da0bcffdd6" - -mimic-fn@^1.0.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" - -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" - -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" - -minimatch@^3.0.2, 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: - brace-expansion "^1.1.7" - -minimist-options@^3.0.1: - version "3.0.2" - resolved "https://registry.yarnpkg.com/minimist-options/-/minimist-options-3.0.2.tgz#fba4c8191339e13ecf4d61beb03f070103f3d954" - dependencies: - arrify "^1.0.1" - is-plain-obj "^1.1.0" - -minimist@0.0.8: - version "0.0.8" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" - -minimist@1.1.x: - version "1.1.3" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.1.3.tgz#3bedfd91a92d39016fcfaa1c681e8faa1a1efda8" - -minimist@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" - -mixin-deep@^1.2.0: - version "1.3.1" - resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.1.tgz#a49e7268dce1a0d9698e45326c5626df3543d0fe" - dependencies: - for-in "^1.0.2" - is-extendable "^1.0.1" - -mkdirp@0.5.x, mkdirp@^0.5.1, mkdirp@~0.5.1: - version "0.5.1" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" - dependencies: - minimist "0.0.8" - -mkpath@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/mkpath/-/mkpath-1.0.0.tgz#ebb3a977e7af1c683ae6fda12b545a6ba6c5853d" - -moment@^2.23.0: - version "2.24.0" - resolved "https://registry.yarnpkg.com/moment/-/moment-2.24.0.tgz#0d055d53f5052aa653c9f6eb68bb5d12bf5c2b5b" - -ms@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" - -ms@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" - -mute-stream@0.0.7: - version "0.0.7" - resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" - -nanomatch@^1.2.9: - version "1.2.13" - resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" - dependencies: - arr-diff "^4.0.0" - array-unique "^0.3.2" - define-property "^2.0.2" - extend-shallow "^3.0.2" - fragment-cache "^0.2.1" - is-windows "^1.0.2" - kind-of "^6.0.2" - object.pick "^1.3.0" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.1" - -natural-compare@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" - -nice-try@^1.0.4: - version "1.0.5" - resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" - -node-releases@^1.0.5: - version "1.1.0" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.0.tgz#be7464fa8d877808237520fd49436d5e79191c3d" - dependencies: - semver "^5.3.0" - -node-releases@^1.1.3: - version "1.1.7" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.7.tgz#b09a10394d0ed8f7778f72bb861dde68b146303b" - dependencies: - semver "^5.3.0" - -normalize-package-data@^2.3.2, normalize-package-data@^2.3.4: - version "2.4.0" - resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.4.0.tgz#12f95a307d58352075a04907b84ac8be98ac012f" - dependencies: - hosted-git-info "^2.1.4" - is-builtin-module "^1.0.0" - semver "2 || 3 || 4 || 5" - validate-npm-package-license "^3.0.1" - -normalize-path@^2.0.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" - dependencies: - remove-trailing-separator "^1.0.1" - -normalize-range@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942" - -normalize-selector@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/normalize-selector/-/normalize-selector-0.2.0.tgz#d0b145eb691189c63a78d201dc4fdb1293ef0c03" - -normalize-url@^1.0.0: - version "1.9.1" - resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-1.9.1.tgz#2cc0d66b31ea23036458436e3620d85954c66c3c" - dependencies: - object-assign "^4.0.1" - prepend-http "^1.0.0" - query-string "^4.1.0" - sort-keys "^1.0.0" - -normalize-url@^3.0.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-3.3.0.tgz#b2e1c4dc4f7c6d57743df733a4f5978d18650559" - -npm-path@^2.0.2: - version "2.0.4" - resolved "https://registry.yarnpkg.com/npm-path/-/npm-path-2.0.4.tgz#c641347a5ff9d6a09e4d9bce5580c4f505278e64" - dependencies: - which "^1.2.10" - -npm-run-path@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" - dependencies: - path-key "^2.0.0" - -npm-which@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/npm-which/-/npm-which-3.0.1.tgz#9225f26ec3a285c209cae67c3b11a6b4ab7140aa" - dependencies: - commander "^2.9.0" - npm-path "^2.0.2" - which "^1.2.10" - -nth-check@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-1.0.2.tgz#b2bd295c37e3dd58a3bf0700376663ba4d9cf05c" - dependencies: - boolbase "~1.0.0" - -num2fraction@^1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/num2fraction/-/num2fraction-1.2.2.tgz#6f682b6a027a4e9ddfa4564cd2589d1d4e669ede" - -number-is-nan@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" - -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" - -object-copy@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c" - dependencies: - copy-descriptor "^0.1.0" - define-property "^0.2.5" - kind-of "^3.0.3" - -object-keys@^1.0.12: - version "1.0.12" - resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.0.12.tgz#09c53855377575310cca62f55bb334abff7b3ed2" - -object-keys@~0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-0.2.0.tgz#cddec02998b091be42bf1035ae32e49f1cb6ea67" - dependencies: - foreach "~2.0.1" - indexof "~0.0.1" - is "~0.2.6" - -object-keys@~0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-0.4.0.tgz#28a6aae7428dd2c3a92f3d95f21335dd204e0336" - -object-visit@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" - dependencies: - isobject "^3.0.0" - -object.getownpropertydescriptors@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz#8758c846f5b407adab0f236e0986f14b051caa16" - dependencies: - define-properties "^1.1.2" - es-abstract "^1.5.1" - -object.omit@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/object.omit/-/object.omit-2.0.1.tgz#1a9c744829f39dbb858c76ca3579ae2a54ebd1fa" - dependencies: - for-own "^0.1.4" - is-extendable "^0.1.1" - -object.pick@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" - dependencies: - isobject "^3.0.1" - -object.values@^1.0.4: - version "1.1.0" - resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.0.tgz#bf6810ef5da3e5325790eaaa2be213ea84624da9" - dependencies: - define-properties "^1.1.3" - es-abstract "^1.12.0" - function-bind "^1.1.1" - has "^1.0.3" - -octal@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/octal/-/octal-1.0.0.tgz#63e7162a68efbeb9e213588d58e989d1e5c4530b" - -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: - wrappy "1" - -onetime@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4" - dependencies: - mimic-fn "^1.0.0" - -optionator@^0.8.2: - version "0.8.2" - resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.2.tgz#364c5e409d3f4d6301d6c0b4c05bba50180aeb64" - dependencies: - deep-is "~0.1.3" - fast-levenshtein "~2.0.4" - levn "~0.3.0" - prelude-ls "~1.1.2" - type-check "~0.3.2" - wordwrap "~1.0.0" - -os-tmpdir@~1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" - -p-finally@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" - -p-limit@^1.1.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" - dependencies: - p-try "^1.0.0" - -p-limit@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.0.0.tgz#e624ed54ee8c460a778b3c9f3670496ff8a57aec" - 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" - 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-map@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/p-map/-/p-map-2.0.0.tgz#be18c5a5adeb8e156460651421aceca56c213a50" - -p-queue@^2.4.2: - version "2.4.2" - resolved "https://registry.yarnpkg.com/p-queue/-/p-queue-2.4.2.tgz#03609826682b743be9a22dba25051bd46724fc34" - -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.0.0" - resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.0.0.tgz#85080bb87c64688fa47996fe8f7dfbe8211760b1" - -parent-module@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.0.tgz#df250bdc5391f4a085fb589dad761f5ad6b865b5" - dependencies: - callsites "^3.0.0" - -parse-asn1@^5.0.0: - version "5.1.1" - resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.1.tgz#f6bf293818332bd0dab54efb16087724745e6ca8" - 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" - -parse-entities@^1.0.2, parse-entities@^1.1.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/parse-entities/-/parse-entities-1.2.0.tgz#9deac087661b2e36814153cb78d7e54a4c5fd6f4" - dependencies: - character-entities "^1.0.0" - character-entities-legacy "^1.0.0" - character-reference-invalid "^1.0.0" - is-alphanumerical "^1.0.0" - is-decimal "^1.0.0" - is-hexadecimal "^1.0.0" - -parse-glob@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/parse-glob/-/parse-glob-3.0.4.tgz#b2c376cfb11f35513badd173ef0bb6e3a388391c" - dependencies: - glob-base "^0.3.0" - is-dotfile "^1.0.0" - is-extglob "^1.0.0" - is-glob "^2.0.0" - -parse-json@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" - 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" - dependencies: - error-ex "^1.3.1" - json-parse-better-errors "^1.0.1" - -parse-passwd@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/parse-passwd/-/parse-passwd-1.0.0.tgz#6d5b934a456993b23d37f40a382d6f1666a8e5c6" - -pascalcase@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" - -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" - -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: - version "1.0.1" - resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" - -path-is-inside@^1.0.1, path-is-inside@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" - -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" - -path-parse@^1.0.5: - version "1.0.6" - resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" - -path-type@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-2.0.0.tgz#f012ccb8415b7096fc2daa1054c3d72389594c73" - dependencies: - pify "^2.0.0" - -path-type@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f" - dependencies: - pify "^3.0.0" - -pbkdf2@^3.0.3: - version "3.0.17" - resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.0.17.tgz#976c206530617b14ebb32114239f7b09336e93a6" - 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" - -pify@^2.0.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" - -pify@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" - -pify@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" - -pinkie-promise@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" - dependencies: - pinkie "^2.0.0" - -pinkie@^2.0.0: - version "2.0.4" - resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" - -pkg-dir@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-1.0.0.tgz#7a4b508a8d5bb2d629d447056ff4e9c9314cf3d4" - dependencies: - find-up "^1.0.0" - -pkg-dir@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-3.0.0.tgz#2749020f239ed990881b1f71210d51eb6523bea3" - dependencies: - find-up "^3.0.0" - -please-upgrade-node@^3.0.2, please-upgrade-node@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/please-upgrade-node/-/please-upgrade-node-3.1.1.tgz#ed320051dfcc5024fae696712c8288993595e8ac" - dependencies: - semver-compare "^1.0.0" - -posix-character-classes@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" - -postcss-calc@^7.0.0: - version "7.0.1" - resolved "https://registry.yarnpkg.com/postcss-calc/-/postcss-calc-7.0.1.tgz#36d77bab023b0ecbb9789d84dcb23c4941145436" - dependencies: - css-unit-converter "^1.1.1" - postcss "^7.0.5" - postcss-selector-parser "^5.0.0-rc.4" - postcss-value-parser "^3.3.1" - -postcss-colormin@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-colormin/-/postcss-colormin-4.0.2.tgz#93cd1fa11280008696887db1a528048b18e7ed99" - dependencies: - browserslist "^4.0.0" - color "^3.0.0" - has "^1.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - -postcss-convert-values@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-convert-values/-/postcss-convert-values-4.0.1.tgz#ca3813ed4da0f812f9d43703584e449ebe189a7f" - dependencies: - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - -postcss-discard-comments@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-discard-comments/-/postcss-discard-comments-4.0.1.tgz#30697735b0c476852a7a11050eb84387a67ef55d" - dependencies: - postcss "^7.0.0" - -postcss-discard-duplicates@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-discard-duplicates/-/postcss-discard-duplicates-4.0.2.tgz#3fe133cd3c82282e550fc9b239176a9207b784eb" - dependencies: - postcss "^7.0.0" - -postcss-discard-empty@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-discard-empty/-/postcss-discard-empty-4.0.1.tgz#c8c951e9f73ed9428019458444a02ad90bb9f765" - dependencies: - postcss "^7.0.0" - -postcss-discard-overridden@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-discard-overridden/-/postcss-discard-overridden-4.0.1.tgz#652aef8a96726f029f5e3e00146ee7a4e755ff57" - dependencies: - postcss "^7.0.0" - -postcss-html@^0.34.0: - version "0.34.0" - resolved "https://registry.yarnpkg.com/postcss-html/-/postcss-html-0.34.0.tgz#9bfd637ad8c3d3a43625b5ef844dc804b3370868" - dependencies: - htmlparser2 "^3.9.2" - -postcss-jsx@^0.35.0: - version "0.35.0" - resolved "https://registry.yarnpkg.com/postcss-jsx/-/postcss-jsx-0.35.0.tgz#1d6cb82393994cdc7e9aa421648e3f0f3f98209b" - dependencies: - "@babel/core" "^7.1.2" - optionalDependencies: - postcss-styled ">=0.34.0" - -postcss-less@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/postcss-less/-/postcss-less-3.1.0.tgz#0e14a80206b452f44d3a09d082fa72645e8168cc" - dependencies: - postcss "^7.0.3" - -postcss-load-config@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-2.0.0.tgz#f1312ddbf5912cd747177083c5ef7a19d62ee484" - dependencies: - cosmiconfig "^4.0.0" - import-cwd "^2.0.0" - -postcss-markdown@^0.34.0: - version "0.34.0" - resolved "https://registry.yarnpkg.com/postcss-markdown/-/postcss-markdown-0.34.0.tgz#7a043e6eee3ab846a4cefe3ab43d141038e2da79" - dependencies: - remark "^9.0.0" - unist-util-find-all-after "^1.0.2" - -postcss-media-query-parser@^0.2.3: - version "0.2.3" - resolved "https://registry.yarnpkg.com/postcss-media-query-parser/-/postcss-media-query-parser-0.2.3.tgz#27b39c6f4d94f81b1a73b8f76351c609e5cef244" - -postcss-merge-longhand@^4.0.10: - version "4.0.10" - resolved "https://registry.yarnpkg.com/postcss-merge-longhand/-/postcss-merge-longhand-4.0.10.tgz#c4d63ab57bdc054ab4067ab075d488c8c2978380" - dependencies: - css-color-names "0.0.4" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - stylehacks "^4.0.0" - -postcss-merge-rules@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-merge-rules/-/postcss-merge-rules-4.0.2.tgz#2be44401bf19856f27f32b8b12c0df5af1b88e74" - dependencies: - browserslist "^4.0.0" - caniuse-api "^3.0.0" - cssnano-util-same-parent "^4.0.0" - postcss "^7.0.0" - postcss-selector-parser "^3.0.0" - vendors "^1.0.0" - -postcss-minify-font-values@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-minify-font-values/-/postcss-minify-font-values-4.0.2.tgz#cd4c344cce474343fac5d82206ab2cbcb8afd5a6" - dependencies: - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - -postcss-minify-gradients@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-minify-gradients/-/postcss-minify-gradients-4.0.1.tgz#6da95c6e92a809f956bb76bf0c04494953e1a7dd" - dependencies: - cssnano-util-get-arguments "^4.0.0" - is-color-stop "^1.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - -postcss-minify-params@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-minify-params/-/postcss-minify-params-4.0.1.tgz#5b2e2d0264dd645ef5d68f8fec0d4c38c1cf93d2" - dependencies: - alphanum-sort "^1.0.0" - browserslist "^4.0.0" - cssnano-util-get-arguments "^4.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - uniqs "^2.0.0" - -postcss-minify-selectors@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-minify-selectors/-/postcss-minify-selectors-4.0.1.tgz#a891c197977cc37abf60b3ea06b84248b1c1e9cd" - dependencies: - alphanum-sort "^1.0.0" - has "^1.0.0" - postcss "^7.0.0" - postcss-selector-parser "^3.0.0" - -postcss-modules-extract-imports@1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-1.1.0.tgz#b614c9720be6816eaee35fb3a5faa1dba6a05ddb" - dependencies: - postcss "^6.0.1" - -postcss-modules-local-by-default@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-1.2.0.tgz#f7d80c398c5a393fa7964466bd19500a7d61c069" - dependencies: - css-selector-tokenizer "^0.7.0" - postcss "^6.0.1" - -postcss-modules-scope@1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-1.1.0.tgz#d6ea64994c79f97b62a72b426fbe6056a194bb90" - dependencies: - css-selector-tokenizer "^0.7.0" - postcss "^6.0.1" - -postcss-modules-values@1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/postcss-modules-values/-/postcss-modules-values-1.3.0.tgz#ecffa9d7e192518389f42ad0e83f72aec456ea20" - dependencies: - icss-replace-symbols "^1.1.0" - postcss "^6.0.1" - -postcss-modules@^1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/postcss-modules/-/postcss-modules-1.4.1.tgz#8aa35bd3461db67e27377a7ce770d77b654a84ef" - dependencies: - css-modules-loader-core "^1.1.0" - generic-names "^1.0.3" - lodash.camelcase "^4.3.0" - postcss "^7.0.1" - string-hash "^1.1.1" - -postcss-normalize-charset@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-normalize-charset/-/postcss-normalize-charset-4.0.1.tgz#8b35add3aee83a136b0471e0d59be58a50285dd4" - dependencies: - postcss "^7.0.0" - -postcss-normalize-display-values@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.1.tgz#d9a83d47c716e8a980f22f632c8b0458cfb48a4c" - dependencies: - cssnano-util-get-match "^4.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - -postcss-normalize-positions@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-normalize-positions/-/postcss-normalize-positions-4.0.1.tgz#ee2d4b67818c961964c6be09d179894b94fd6ba1" - dependencies: - cssnano-util-get-arguments "^4.0.0" - has "^1.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - -postcss-normalize-repeat-style@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-4.0.1.tgz#5293f234b94d7669a9f805495d35b82a581c50e5" - dependencies: - cssnano-util-get-arguments "^4.0.0" - cssnano-util-get-match "^4.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - -postcss-normalize-string@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-normalize-string/-/postcss-normalize-string-4.0.1.tgz#23c5030c2cc24175f66c914fa5199e2e3c10fef3" - dependencies: - has "^1.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - -postcss-normalize-timing-functions@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-4.0.1.tgz#8be83e0b9cb3ff2d1abddee032a49108f05f95d7" - dependencies: - cssnano-util-get-match "^4.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - -postcss-normalize-unicode@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-normalize-unicode/-/postcss-normalize-unicode-4.0.1.tgz#841bd48fdcf3019ad4baa7493a3d363b52ae1cfb" - dependencies: - browserslist "^4.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - -postcss-normalize-url@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-normalize-url/-/postcss-normalize-url-4.0.1.tgz#10e437f86bc7c7e58f7b9652ed878daaa95faae1" - dependencies: - is-absolute-url "^2.0.0" - normalize-url "^3.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - -postcss-normalize-whitespace@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-normalize-whitespace/-/postcss-normalize-whitespace-4.0.1.tgz#d14cb639b61238418ac8bc8d3b7bdd65fc86575e" - dependencies: - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - -postcss-ordered-values@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/postcss-ordered-values/-/postcss-ordered-values-4.1.1.tgz#2e3b432ef3e489b18333aeca1f1295eb89be9fc2" - dependencies: - cssnano-util-get-arguments "^4.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - -postcss-reduce-initial@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-reduce-initial/-/postcss-reduce-initial-4.0.2.tgz#bac8e325d67510ee01fa460676dc8ea9e3b40f15" - dependencies: - browserslist "^4.0.0" - caniuse-api "^3.0.0" - has "^1.0.0" - postcss "^7.0.0" - -postcss-reduce-transforms@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-reduce-transforms/-/postcss-reduce-transforms-4.0.1.tgz#8600d5553bdd3ad640f43bff81eb52f8760d4561" - dependencies: - cssnano-util-get-match "^4.0.0" - has "^1.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - -postcss-reporter@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/postcss-reporter/-/postcss-reporter-6.0.0.tgz#44c873129d8c029a430b6d2186210d79c8de88b8" - dependencies: - chalk "^2.0.1" - lodash "^4.17.4" - log-symbols "^2.0.0" - postcss "^7.0.2" - -postcss-resolve-nested-selector@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/postcss-resolve-nested-selector/-/postcss-resolve-nested-selector-0.1.1.tgz#29ccbc7c37dedfac304e9fff0bf1596b3f6a0e4e" - -postcss-safe-parser@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-safe-parser/-/postcss-safe-parser-4.0.1.tgz#8756d9e4c36fdce2c72b091bbc8ca176ab1fcdea" - dependencies: - postcss "^7.0.0" - -postcss-sass@^0.3.5: - version "0.3.5" - resolved "https://registry.yarnpkg.com/postcss-sass/-/postcss-sass-0.3.5.tgz#6d3e39f101a53d2efa091f953493116d32beb68c" - dependencies: - gonzales-pe "^4.2.3" - postcss "^7.0.1" - -postcss-scss@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/postcss-scss/-/postcss-scss-2.0.0.tgz#248b0a28af77ea7b32b1011aba0f738bda27dea1" - dependencies: - postcss "^7.0.0" - -postcss-selector-parser@^3.0.0, postcss-selector-parser@^3.1.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-3.1.1.tgz#4f875f4afb0c96573d5cf4d74011aee250a7e865" - dependencies: - dot-prop "^4.1.1" - indexes-of "^1.0.1" - uniq "^1.0.1" - -postcss-selector-parser@^5.0.0-rc.4: - version "5.0.0" - resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz#249044356697b33b64f1a8f7c80922dddee7195c" - dependencies: - cssesc "^2.0.0" - indexes-of "^1.0.1" - uniq "^1.0.1" - -postcss-styled@>=0.34.0, postcss-styled@^0.34.0: - version "0.34.0" - resolved "https://registry.yarnpkg.com/postcss-styled/-/postcss-styled-0.34.0.tgz#07d47bcb13707289782aa058605fd9feaf84391d" - -postcss-svgo@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-svgo/-/postcss-svgo-4.0.1.tgz#5628cdb38f015de6b588ce6d0bf0724b492b581d" - dependencies: - is-svg "^3.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - svgo "^1.0.0" - -postcss-syntax@^0.34.0: - version "0.34.0" - resolved "https://registry.yarnpkg.com/postcss-syntax/-/postcss-syntax-0.34.0.tgz#4a85c022f1cdecea72102775c91af1e7f506d83a" - -postcss-unique-selectors@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-unique-selectors/-/postcss-unique-selectors-4.0.1.tgz#9446911f3289bfd64c6d680f073c03b1f9ee4bac" - dependencies: - alphanum-sort "^1.0.0" - postcss "^7.0.0" - uniqs "^2.0.0" - -postcss-value-parser@^3.0.0, postcss-value-parser@^3.3.0, postcss-value-parser@^3.3.1: - version "3.3.1" - resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz#9ff822547e2893213cf1c30efa51ac5fd1ba8281" - -postcss@6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-6.0.1.tgz#000dbd1f8eef217aa368b9a212c5fc40b2a8f3f2" - dependencies: - chalk "^1.1.3" - source-map "^0.5.6" - supports-color "^3.2.3" - -postcss@^6.0.1: - version "6.0.23" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-6.0.23.tgz#61c82cc328ac60e677645f979054eb98bc0e3324" - dependencies: - chalk "^2.4.1" - source-map "^0.6.1" - supports-color "^5.4.0" - -postcss@^7.0.0, postcss@^7.0.1, postcss@^7.0.2, postcss@^7.0.3, postcss@^7.0.6: - version "7.0.6" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.6.tgz#6dcaa1e999cdd4a255dcd7d4d9547f4ca010cdc2" - dependencies: - chalk "^2.4.1" - source-map "^0.6.1" - supports-color "^5.5.0" - -postcss@^7.0.14, postcss@^7.0.5: - version "7.0.14" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.14.tgz#4527ed6b1ca0d82c53ce5ec1a2041c2346bbd6e5" - dependencies: - chalk "^2.4.2" - source-map "^0.6.1" - supports-color "^6.1.0" - -prelude-ls@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" - -prepend-http@^1.0.0: - version "1.0.4" - resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc" - -preserve@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b" - -prettier@^1.15.3: - version "1.15.3" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.15.3.tgz#1feaac5bdd181237b54dbe65d874e02a1472786a" - -pretty-format@^23.6.0: - version "23.6.0" - resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-23.6.0.tgz#5eaac8eeb6b33b987b7fe6097ea6a8a146ab5760" - dependencies: - ansi-regex "^3.0.0" - ansi-styles "^3.2.0" - -private@^0.1.6: - version "0.1.8" - resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff" - -process-es6@^0.11.2: - version "0.11.6" - resolved "https://registry.yarnpkg.com/process-es6/-/process-es6-0.11.6.tgz#c6bb389f9a951f82bd4eb169600105bd2ff9c778" - -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" - -progress@^2.0.0: - version "2.0.3" - resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" - -promise.series@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/promise.series/-/promise.series-0.2.0.tgz#2cc7ebe959fc3a6619c04ab4dbdc9e452d864bbd" - -prop-types@^15.6.2: - version "15.6.2" - resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.6.2.tgz#05d5ca77b4453e985d60fc7ff8c859094a497102" - dependencies: - loose-envify "^1.3.1" - object-assign "^4.1.1" - -prr@~0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/prr/-/prr-0.0.0.tgz#1a84b85908325501411853d0081ee3fa86e2926a" - -prr@~1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" - -public-encrypt@^4.0.0: - version "4.0.3" - resolved "https://registry.yarnpkg.com/public-encrypt/-/public-encrypt-4.0.3.tgz#4fcc9d77a07e48ba7527e7cbe0de33d0701331e0" - 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@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" - dependencies: - end-of-stream "^1.1.0" - once "^1.3.1" - -punycode@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" - -q@^1.1.2: - version "1.5.1" - resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" - -query-string@^4.1.0: - version "4.3.4" - resolved "https://registry.yarnpkg.com/query-string/-/query-string-4.3.4.tgz#bbb693b9ca915c232515b228b1a02b609043dbeb" - dependencies: - object-assign "^4.1.0" - strict-uri-encode "^1.0.0" - -quick-lru@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-1.1.0.tgz#4360b17c61136ad38078397ff11416e186dcfbb8" - -randomatic@^3.0.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-3.1.1.tgz#b776efc59375984e36c537b2f51a1f0aff0da1ed" - dependencies: - is-number "^4.0.0" - kind-of "^6.0.0" - math-random "^1.0.1" - -randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5: - version "2.0.6" - resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.0.6.tgz#d302c522948588848a8d300c932b44c24231da80" - 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" - dependencies: - randombytes "^2.0.5" - safe-buffer "^5.1.0" - -react-cornerstone-viewport@0.1.32: - version "0.1.32" - resolved "https://registry.yarnpkg.com/react-cornerstone-viewport/-/react-cornerstone-viewport-0.1.32.tgz#0777d1f3497b27b017aa5eae3d1d4c078383219b" - integrity sha512-NdFsRq4kMgE6zpZo+DEnlQzC2B6OxOgFTkLCTDTYif0IxoXzKhngXP4xujwrUGjud98mTQKtiJOM0ah/fns3og== - dependencies: - lodash.debounce "^4.0.8" - moment "^2.23.0" - stylus "^0.54.5" - -react-dom@^16.6.3: - version "16.8.1" - resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-16.8.1.tgz#ec860f98853d09d39bafd3a6f1e12389d283dbb4" - dependencies: - loose-envify "^1.1.0" - object-assign "^4.1.1" - prop-types "^15.6.2" - scheduler "^0.13.1" - -react@^16.6.3: - version "16.8.1" - resolved "https://registry.yarnpkg.com/react/-/react-16.8.1.tgz#ae11831f6cb2a05d58603a976afc8a558e852c4a" - dependencies: - loose-envify "^1.1.0" - object-assign "^4.1.1" - prop-types "^15.6.2" - scheduler "^0.13.1" - -read-pkg-up@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-2.0.0.tgz#6b72a8048984e0c41e79510fd5e9fa99b3b549be" - dependencies: - find-up "^2.0.0" - read-pkg "^2.0.0" - -read-pkg-up@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-3.0.0.tgz#3ed496685dba0f8fe118d0691dc51f4a1ff96f07" - dependencies: - find-up "^2.0.0" - read-pkg "^3.0.0" - -read-pkg@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-2.0.0.tgz#8ef1c0623c6a6db0dc6713c4bfac46332b2368f8" - dependencies: - load-json-file "^2.0.0" - normalize-package-data "^2.3.2" - path-type "^2.0.0" - -read-pkg@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-3.0.0.tgz#9cbc686978fee65d16c00e2b19c237fcf6e38389" - dependencies: - load-json-file "^4.0.0" - normalize-package-data "^2.3.2" - path-type "^3.0.0" - -read-pkg@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-4.0.1.tgz#963625378f3e1c4d48c85872b5a6ec7d5d093237" - dependencies: - normalize-package-data "^2.3.2" - parse-json "^4.0.0" - pify "^3.0.0" - -readable-stream@^1.0.26-4: - version "1.1.14" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.14.tgz#7cf4c54ef648e3813084c636dd2079e166c081d9" - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.1" - isarray "0.0.1" - string_decoder "~0.10.x" - -readable-stream@^2.2.2: - version "2.3.6" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf" - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.3" - isarray "~1.0.0" - process-nextick-args "~2.0.0" - safe-buffer "~5.1.1" - string_decoder "~1.1.1" - util-deprecate "~1.0.1" - -readable-stream@^3.0.6: - version "3.0.6" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.0.6.tgz#351302e4c68b5abd6a2ed55376a7f9a25be3057a" - dependencies: - inherits "^2.0.3" - string_decoder "^1.1.1" - util-deprecate "^1.0.1" - -readable-stream@~1.0.26, readable-stream@~1.0.26-4: - version "1.0.34" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.0.34.tgz#125820e34bc842d2f2aaafafe4c2916ee32c157c" - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.1" - isarray "0.0.1" - string_decoder "~0.10.x" - -redent@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/redent/-/redent-2.0.0.tgz#c1b2007b42d57eb1389079b3c8333639d5e1ccaa" - dependencies: - indent-string "^3.0.0" - strip-indent "^2.0.0" - -regenerate-unicode-properties@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-7.0.0.tgz#107405afcc4a190ec5ed450ecaa00ed0cafa7a4c" - dependencies: - regenerate "^1.4.0" - -regenerate@^1.2.1, regenerate@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.0.tgz#4a856ec4b56e4077c557589cae85e7a4c8869a11" - -regenerator-runtime@^0.12.0: - version "0.12.1" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.12.1.tgz#fa1a71544764c036f8c49b13a08b2594c9f8a0de" - -regenerator-transform@^0.13.3: - version "0.13.3" - resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.13.3.tgz#264bd9ff38a8ce24b06e0636496b2c856b57bcbb" - dependencies: - private "^0.1.6" - -regex-cache@^0.4.2: - version "0.4.4" - resolved "https://registry.yarnpkg.com/regex-cache/-/regex-cache-0.4.4.tgz#75bdc58a2a1496cec48a12835bc54c8d562336dd" - dependencies: - is-equal-shallow "^0.1.3" - -regex-not@^1.0.0, regex-not@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" - dependencies: - extend-shallow "^3.0.2" - safe-regex "^1.1.0" - -regexpp@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-2.0.1.tgz#8d19d31cf632482b589049f8281f93dbcba4d07f" - -regexpu-core@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-1.0.0.tgz#86a763f58ee4d7c2f6b102e4764050de7ed90c6b" - dependencies: - regenerate "^1.2.1" - regjsgen "^0.2.0" - regjsparser "^0.1.4" - -regexpu-core@^4.1.3, regexpu-core@^4.2.0: - version "4.4.0" - resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.4.0.tgz#8d43e0d1266883969720345e70c275ee0aec0d32" - dependencies: - regenerate "^1.4.0" - regenerate-unicode-properties "^7.0.0" - regjsgen "^0.5.0" - regjsparser "^0.6.0" - unicode-match-property-ecmascript "^1.0.4" - unicode-match-property-value-ecmascript "^1.0.2" - -regjsgen@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.2.0.tgz#6c016adeac554f75823fe37ac05b92d5a4edb1f7" - -regjsgen@^0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.5.0.tgz#a7634dc08f89209c2049adda3525711fb97265dd" - -regjsparser@^0.1.4: - version "0.1.5" - resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.1.5.tgz#7ee8f84dc6fa792d3fd0ae228d24bd949ead205c" - dependencies: - jsesc "~0.5.0" - -regjsparser@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.6.0.tgz#f1e6ae8b7da2bae96c99399b868cd6c933a2ba9c" - dependencies: - jsesc "~0.5.0" - -remark-parse@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/remark-parse/-/remark-parse-5.0.0.tgz#4c077f9e499044d1d5c13f80d7a98cf7b9285d95" - dependencies: - collapse-white-space "^1.0.2" - is-alphabetical "^1.0.0" - is-decimal "^1.0.0" - is-whitespace-character "^1.0.0" - is-word-character "^1.0.0" - markdown-escapes "^1.0.0" - parse-entities "^1.1.0" - repeat-string "^1.5.4" - state-toggle "^1.0.0" - trim "0.0.1" - trim-trailing-lines "^1.0.0" - unherit "^1.0.4" - unist-util-remove-position "^1.0.0" - vfile-location "^2.0.0" - xtend "^4.0.1" - -remark-stringify@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/remark-stringify/-/remark-stringify-5.0.0.tgz#336d3a4d4a6a3390d933eeba62e8de4bd280afba" - dependencies: - ccount "^1.0.0" - is-alphanumeric "^1.0.0" - is-decimal "^1.0.0" - is-whitespace-character "^1.0.0" - longest-streak "^2.0.1" - markdown-escapes "^1.0.0" - markdown-table "^1.1.0" - mdast-util-compact "^1.0.0" - parse-entities "^1.0.2" - repeat-string "^1.5.4" - state-toggle "^1.0.0" - stringify-entities "^1.0.1" - unherit "^1.0.4" - xtend "^4.0.1" - -remark@^9.0.0: - version "9.0.0" - resolved "https://registry.yarnpkg.com/remark/-/remark-9.0.0.tgz#c5cfa8ec535c73a67c4b0f12bfdbd3a67d8b2f60" - dependencies: - remark-parse "^5.0.0" - remark-stringify "^5.0.0" - unified "^6.0.0" - -remove-trailing-separator@^1.0.1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" - -repeat-element@^1.1.2: - version "1.1.3" - resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.3.tgz#782e0d825c0c5a3bb39731f84efee6b742e6b1ce" - -repeat-string@^1.5.2, repeat-string@^1.5.4, repeat-string@^1.6.1: - version "1.6.1" - resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" - -replace-ext@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/replace-ext/-/replace-ext-1.0.0.tgz#de63128373fcbf7c3ccfa4de5a480c45a67958eb" - -require-from-string@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" - -reserved-words@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/reserved-words/-/reserved-words-0.1.2.tgz#00a0940f98cd501aeaaac316411d9adc52b31ab1" - -resolve-dir@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/resolve-dir/-/resolve-dir-1.0.1.tgz#79a40644c362be82f26effe739c9bb5382046f43" - dependencies: - expand-tilde "^2.0.0" - global-modules "^1.0.0" - -resolve-from@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748" - -resolve-from@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" - -resolve-url@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" - -resolve@^1.3.2, resolve@^1.5.0, resolve@^1.6.0, resolve@^1.8.1: - version "1.8.1" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.8.1.tgz#82f1ec19a423ac1fbd080b0bab06ba36e84a7a26" - dependencies: - path-parse "^1.0.5" - -restore-cursor@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf" - dependencies: - onetime "^2.0.0" - signal-exit "^3.0.2" - -ret@~0.1.10: - version "0.1.15" - resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" - -rgb-regex@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/rgb-regex/-/rgb-regex-1.0.1.tgz#c0e0d6882df0e23be254a475e8edd41915feaeb1" - -rgba-regex@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/rgba-regex/-/rgba-regex-1.0.0.tgz#43374e2e2ca0968b0ef1523460b7d730ff22eeb3" - -rimraf@^2.2.8, rimraf@^2.6.2, 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" - -ripemd160@^2.0.0, ripemd160@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c" - dependencies: - hash-base "^3.0.0" - inherits "^2.0.1" - -rollup-plugin-babel@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/rollup-plugin-babel/-/rollup-plugin-babel-4.2.0.tgz#9a2c119b5c923928842783ec2abd306fa733054f" - dependencies: - "@babel/helper-module-imports" "^7.0.0" - rollup-pluginutils "^2.3.0" - -rollup-plugin-commonjs@^9.2.0: - version "9.2.0" - resolved "https://registry.yarnpkg.com/rollup-plugin-commonjs/-/rollup-plugin-commonjs-9.2.0.tgz#4604e25069e0c78a09e08faa95dc32dec27f7c89" - dependencies: - estree-walker "^0.5.2" - magic-string "^0.25.1" - resolve "^1.8.1" - rollup-pluginutils "^2.3.3" - -rollup-plugin-node-builtins@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/rollup-plugin-node-builtins/-/rollup-plugin-node-builtins-2.1.2.tgz#24a1fed4a43257b6b64371d8abc6ce1ab14597e9" - dependencies: - browserify-fs "^1.0.0" - buffer-es6 "^4.9.2" - crypto-browserify "^3.11.0" - process-es6 "^0.11.2" - -rollup-plugin-node-resolve@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/rollup-plugin-node-resolve/-/rollup-plugin-node-resolve-4.0.0.tgz#9bc6b8205e9936cc0e26bba2415f1ecf1e64d9b2" - dependencies: - builtin-modules "^3.0.0" - is-module "^1.0.0" - resolve "^1.8.1" - -rollup-plugin-peer-deps-external@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/rollup-plugin-peer-deps-external/-/rollup-plugin-peer-deps-external-2.2.0.tgz#99ef9231aa01736f3e9605b7c3084a0d627f665b" - -rollup-plugin-postcss@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/rollup-plugin-postcss/-/rollup-plugin-postcss-2.0.3.tgz#1fd5b7e1fc7545cb0084d9c99d11b259e41a05e6" - dependencies: - chalk "^2.4.2" - concat-with-sourcemaps "^1.0.5" - cssnano "^4.1.8" - import-cwd "^2.1.0" - p-queue "^2.4.2" - pify "^3.0.0" - postcss "^7.0.14" - postcss-load-config "^2.0.0" - postcss-modules "^1.4.1" - promise.series "^0.2.0" - reserved-words "^0.1.2" - resolve "^1.5.0" - rollup-pluginutils "^2.0.1" - style-inject "^0.3.0" - -rollup-plugin-url@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/rollup-plugin-url/-/rollup-plugin-url-2.1.0.tgz#c06be791dfee1b9f5e0854a94cc6bb3dc2743bc0" - dependencies: - mime "^2.3.1" - mkpath "^1.0.0" - rollup-pluginutils "^2.3.3" - -rollup-pluginutils@^2.0.1, rollup-pluginutils@^2.3.0, rollup-pluginutils@^2.3.3: - version "2.3.3" - resolved "https://registry.yarnpkg.com/rollup-pluginutils/-/rollup-pluginutils-2.3.3.tgz#3aad9b1eb3e7fe8262820818840bf091e5ae6794" - dependencies: - estree-walker "^0.5.2" - micromatch "^2.3.11" - -rollup@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/rollup/-/rollup-1.1.2.tgz#8d094b85683b810d0c05a16bd7618cf70d48eba7" - dependencies: - "@types/estree" "0.0.39" - "@types/node" "*" - acorn "^6.0.5" - -run-async@^2.2.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.3.0.tgz#0371ab4ae0bdd720d4166d7dfda64ff7a445a6c0" - dependencies: - is-promise "^2.1.0" - -run-node@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/run-node/-/run-node-1.0.0.tgz#46b50b946a2aa2d4947ae1d886e9856fd9cabe5e" - -rxjs@^6.1.0, rxjs@^6.3.3: - version "6.3.3" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.3.3.tgz#3c6a7fa420e844a81390fb1158a9ec614f4bad55" - dependencies: - tslib "^1.9.0" - -safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: - version "5.1.2" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" - -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" - -"safer-buffer@>= 2.1.2 < 3": - version "2.1.2" - resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" - -sax@0.5.x: - version "0.5.8" - resolved "https://registry.yarnpkg.com/sax/-/sax-0.5.8.tgz#d472db228eb331c2506b0e8c15524adb939d12c1" - -sax@~1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" - -scheduler@^0.13.1: - version "0.13.1" - resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.13.1.tgz#1a217df1bfaabaf4f1b92a9127d5d732d85a9591" - dependencies: - loose-envify "^1.1.0" - object-assign "^4.1.1" - -semver-compare@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/semver-compare/-/semver-compare-1.0.0.tgz#0dee216a1c941ab37e9efb1788f6afc5ff5537fc" - -"semver@2 || 3 || 4 || 5", semver@^5.3.0, semver@^5.4.1, semver@^5.5.0, semver@^5.5.1: - version "5.6.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.6.0.tgz#7e74256fbaa49c75aa7c7a205cc22799cac80004" - -semver@~2.3.1: - version "2.3.2" - resolved "https://registry.yarnpkg.com/semver/-/semver-2.3.2.tgz#b9848f25d6cf36333073ec9ef8856d42f1233e52" - -set-value@^0.4.3: - version "0.4.3" - resolved "https://registry.yarnpkg.com/set-value/-/set-value-0.4.3.tgz#7db08f9d3d22dc7f78e53af3c3bf4666ecdfccf1" - dependencies: - extend-shallow "^2.0.1" - is-extendable "^0.1.1" - is-plain-object "^2.0.1" - to-object-path "^0.3.0" - -set-value@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.0.tgz#71ae4a88f0feefbbf52d1ea604f3fb315ebb6274" - dependencies: - extend-shallow "^2.0.1" - is-extendable "^0.1.1" - is-plain-object "^2.0.3" - split-string "^3.0.1" - -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" - 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" - dependencies: - shebang-regex "^1.0.0" - -shebang-regex@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" - -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" - -simple-git@^1.85.0: - version "1.107.0" - resolved "https://registry.yarnpkg.com/simple-git/-/simple-git-1.107.0.tgz#12cffaf261c14d6f450f7fdb86c21ccee968b383" - dependencies: - debug "^4.0.1" - -simple-swizzle@^0.2.2: - version "0.2.2" - resolved "https://registry.yarnpkg.com/simple-swizzle/-/simple-swizzle-0.2.2.tgz#a4da6b635ffcccca33f70d17cb92592de95e557a" - dependencies: - is-arrayish "^0.3.1" - -slash@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55" - -slash@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/slash/-/slash-2.0.0.tgz#de552851a1759df3a8f206535442f5ec4ddeab44" - -slice-ansi@0.0.4: - version "0.0.4" - resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-0.0.4.tgz#edbf8903f66f7ce2f8eafd6ceed65e264c831b35" - -slice-ansi@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-2.0.0.tgz#5373bdb8559b45676e8541c66916cdd6251612e7" - dependencies: - ansi-styles "^3.2.0" - astral-regex "^1.0.0" - is-fullwidth-code-point "^2.0.0" - -slice-ansi@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-2.1.0.tgz#cacd7693461a637a5788d92a7dd4fba068e81636" - dependencies: - ansi-styles "^3.2.0" - astral-regex "^1.0.0" - is-fullwidth-code-point "^2.0.0" - -snapdragon-node@^2.0.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" - dependencies: - define-property "^1.0.0" - isobject "^3.0.0" - snapdragon-util "^3.0.1" - -snapdragon-util@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2" - dependencies: - kind-of "^3.2.0" - -snapdragon@^0.8.1: - version "0.8.2" - resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d" - dependencies: - base "^0.11.1" - debug "^2.2.0" - define-property "^0.2.5" - extend-shallow "^2.0.1" - map-cache "^0.2.2" - source-map "^0.5.6" - source-map-resolve "^0.5.0" - use "^3.1.0" - -sort-keys@^1.0.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/sort-keys/-/sort-keys-1.1.2.tgz#441b6d4d346798f1b4e49e8920adfba0e543f9ad" - dependencies: - is-plain-obj "^1.0.0" - -source-map-resolve@^0.5.0: - version "0.5.2" - resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.2.tgz#72e2cc34095543e43b2c62b2c4c10d4a9054f259" - dependencies: - atob "^2.1.1" - decode-uri-component "^0.2.0" - resolve-url "^0.2.1" - source-map-url "^0.4.0" - urix "^0.1.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.1.x: - version "0.1.43" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.1.43.tgz#c24bc146ca517c1471f5dacbe2571b2b7f9e3346" - dependencies: - amdefine ">=0.0.4" - -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.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" - -sourcemap-codec@^1.4.1: - version "1.4.4" - resolved "https://registry.yarnpkg.com/sourcemap-codec/-/sourcemap-codec-1.4.4.tgz#c63ea927c029dd6bd9a2b7fa03b3fec02ad56e9f" - -spdx-correct@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.0.tgz#fb83e504445268f154b074e218c87c003cd31df4" - dependencies: - spdx-expression-parse "^3.0.0" - spdx-license-ids "^3.0.0" - -spdx-exceptions@^2.1.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz#2ea450aee74f2a89bfb94519c07fcd6f41322977" - -spdx-expression-parse@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz#99e119b7a5da00e05491c9fa338b7904823b41d0" - dependencies: - spdx-exceptions "^2.1.0" - spdx-license-ids "^3.0.0" - -spdx-license-ids@^3.0.0: - version "3.0.2" - resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.2.tgz#a59efc09784c2a5bada13cfeaf5c75dd214044d2" - -specificity@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/specificity/-/specificity-0.4.1.tgz#aab5e645012db08ba182e151165738d00887b019" - -split-string@^3.0.1, split-string@^3.0.2: - version "3.1.0" - resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" - dependencies: - extend-shallow "^3.0.0" - -sprintf-js@~1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" - integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= - -stable@~0.1.6: - version "0.1.8" - resolved "https://registry.yarnpkg.com/stable/-/stable-0.1.8.tgz#836eb3c8382fe2936feaf544631017ce7d47a3cf" - -staged-git-files@1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/staged-git-files/-/staged-git-files-1.1.2.tgz#4326d33886dc9ecfa29a6193bf511ba90a46454b" - -state-toggle@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/state-toggle/-/state-toggle-1.0.1.tgz#c3cb0974f40a6a0f8e905b96789eb41afa1cde3a" - -static-extend@^0.1.1: - version "0.1.2" - resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" - dependencies: - define-property "^0.2.5" - object-copy "^0.1.0" - -strict-uri-encode@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713" - -string-argv@^0.0.2: - version "0.0.2" - resolved "https://registry.yarnpkg.com/string-argv/-/string-argv-0.0.2.tgz#dac30408690c21f3c3630a3ff3a05877bdcbd736" - -string-hash@^1.1.1: - version "1.1.3" - resolved "https://registry.yarnpkg.com/string-hash/-/string-hash-1.1.3.tgz#e8aafc0ac1855b4666929ed7dd1275df5d6c811b" - -string-range@~1.2, string-range@~1.2.1: - version "1.2.2" - resolved "https://registry.yarnpkg.com/string-range/-/string-range-1.2.2.tgz#a893ed347e72299bc83befbbf2a692a8d239d5dd" - -string-width@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" - dependencies: - code-point-at "^1.0.0" - is-fullwidth-code-point "^1.0.0" - strip-ansi "^3.0.0" - -string-width@^2.1.0, string-width@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" - dependencies: - is-fullwidth-code-point "^2.0.0" - strip-ansi "^4.0.0" - -string_decoder@^1.1.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.2.0.tgz#fe86e738b19544afe70469243b2a1ee9240eae8d" - dependencies: - safe-buffer "~5.1.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.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" - dependencies: - safe-buffer "~5.1.0" - -stringify-entities@^1.0.1: - version "1.3.2" - resolved "https://registry.yarnpkg.com/stringify-entities/-/stringify-entities-1.3.2.tgz#a98417e5471fd227b3e45d3db1861c11caf668f7" - dependencies: - character-entities-html4 "^1.0.0" - character-entities-legacy "^1.0.0" - is-alphanumerical "^1.0.0" - is-hexadecimal "^1.0.0" - -stringify-object@^3.2.2: - version "3.3.0" - resolved "https://registry.yarnpkg.com/stringify-object/-/stringify-object-3.3.0.tgz#703065aefca19300d3ce88af4f5b3956d7556629" - dependencies: - get-own-enumerable-property-symbols "^3.0.0" - is-obj "^1.0.1" - is-regexp "^1.0.0" - -strip-ansi@^3.0.0, strip-ansi@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" - dependencies: - ansi-regex "^2.0.0" - -strip-ansi@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" - dependencies: - ansi-regex "^3.0.0" - -strip-ansi@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.0.0.tgz#f78f68b5d0866c20b2c9b8c61b5298508dc8756f" - dependencies: - ansi-regex "^4.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-eof@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" - -strip-indent@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-2.0.0.tgz#5ef8db295d01e6ed6cbf7aab96998d7822527b68" - -strip-json-comments@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" - -strip-outer@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/strip-outer/-/strip-outer-1.0.1.tgz#b2fd2abf6604b9d1e6013057195df836b8a9d631" - dependencies: - escape-string-regexp "^1.0.2" - -strip-url-auth@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/strip-url-auth/-/strip-url-auth-1.0.1.tgz#22b0fa3a41385b33be3f331551bbb837fa0cd7ae" - -style-inject@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/style-inject/-/style-inject-0.3.0.tgz#d21c477affec91811cc82355832a700d22bf8dd3" - -style-search@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/style-search/-/style-search-0.1.0.tgz#7958c793e47e32e07d2b5cafe5c0bf8e12e77902" - -stylehacks@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/stylehacks/-/stylehacks-4.0.1.tgz#3186595d047ab0df813d213e51c8b94e0b9010f2" - dependencies: - browserslist "^4.0.0" - postcss "^7.0.0" - postcss-selector-parser "^3.0.0" - -stylelint-config-recommended@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/stylelint-config-recommended/-/stylelint-config-recommended-2.1.0.tgz#f526d5c771c6811186d9eaedbed02195fee30858" - -stylelint@^9.9.0: - version "9.9.0" - resolved "https://registry.yarnpkg.com/stylelint/-/stylelint-9.9.0.tgz#dde466e9b049e0bd30e912ad280f1a2ecf6efdf8" - dependencies: - autoprefixer "^9.0.0" - balanced-match "^1.0.0" - chalk "^2.4.1" - cosmiconfig "^5.0.0" - debug "^4.0.0" - execall "^1.0.0" - file-entry-cache "^2.0.0" - get-stdin "^6.0.0" - global-modules "^1.0.0" - globby "^8.0.0" - globjoin "^0.1.4" - html-tags "^2.0.0" - ignore "^5.0.4" - import-lazy "^3.1.0" - imurmurhash "^0.1.4" - known-css-properties "^0.10.0" - leven "^2.1.0" - lodash "^4.17.4" - log-symbols "^2.0.0" - mathml-tag-names "^2.0.1" - meow "^5.0.0" - micromatch "^3.1.10" - normalize-selector "^0.2.0" - pify "^4.0.0" - postcss "^7.0.0" - postcss-html "^0.34.0" - postcss-jsx "^0.35.0" - postcss-less "^3.1.0" - postcss-markdown "^0.34.0" - postcss-media-query-parser "^0.2.3" - postcss-reporter "^6.0.0" - postcss-resolve-nested-selector "^0.1.1" - postcss-safe-parser "^4.0.0" - postcss-sass "^0.3.5" - postcss-scss "^2.0.0" - postcss-selector-parser "^3.1.0" - postcss-styled "^0.34.0" - postcss-syntax "^0.34.0" - postcss-value-parser "^3.3.0" - resolve-from "^4.0.0" - signal-exit "^3.0.2" - slash "^2.0.0" - specificity "^0.4.1" - string-width "^2.1.0" - style-search "^0.1.0" - sugarss "^2.0.0" - svg-tags "^1.0.0" - table "^5.0.0" - -stylus@^0.54.5: - version "0.54.5" - resolved "https://registry.yarnpkg.com/stylus/-/stylus-0.54.5.tgz#42b9560931ca7090ce8515a798ba9e6aa3d6dc79" - dependencies: - css-parse "1.7.x" - debug "*" - glob "7.0.x" - mkdirp "0.5.x" - sax "0.5.x" - source-map "0.1.x" - -sugarss@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/sugarss/-/sugarss-2.0.0.tgz#ddd76e0124b297d40bf3cca31c8b22ecb43bc61d" - dependencies: - postcss "^7.0.2" - -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.2.3: - 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.3.0, supports-color@^5.4.0, supports-color@^5.5.0: - version "5.5.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" - dependencies: - has-flag "^3.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" - dependencies: - has-flag "^3.0.0" - -svg-tags@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/svg-tags/-/svg-tags-1.0.0.tgz#58f71cee3bd519b59d4b2a843b6c7de64ac04764" - -svgo@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/svgo/-/svgo-1.1.1.tgz#12384b03335bcecd85cfa5f4e3375fed671cb985" - dependencies: - coa "~2.0.1" - colors "~1.1.2" - css-select "^2.0.0" - css-select-base-adapter "~0.1.0" - css-tree "1.0.0-alpha.28" - css-url-regex "^1.1.0" - csso "^3.5.0" - js-yaml "^3.12.0" - mkdirp "~0.5.1" - object.values "^1.0.4" - sax "~1.2.4" - stable "~0.1.6" - unquote "~1.1.1" - util.promisify "~1.0.0" - -symbol-observable@^1.1.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.2.0.tgz#c22688aed4eab3cdc2dfeacbb561660560a00804" - -table@^5.0.0: - version "5.1.1" - resolved "https://registry.yarnpkg.com/table/-/table-5.1.1.tgz#92030192f1b7b51b6eeab23ed416862e47b70837" - dependencies: - ajv "^6.6.1" - lodash "^4.17.11" - slice-ansi "2.0.0" - string-width "^2.1.1" - -table@^5.0.2: - version "5.2.2" - resolved "https://registry.yarnpkg.com/table/-/table-5.2.2.tgz#61d474c9e4d8f4f7062c98c7504acb3c08aa738f" - dependencies: - ajv "^6.6.1" - lodash "^4.17.11" - slice-ansi "^2.0.0" - string-width "^2.1.1" - -text-table@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" - -through@^2.3.6: - version "2.3.8" - resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" - -timsort@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/timsort/-/timsort-0.3.0.tgz#405411a8e7e6339fe64db9a234de11dc31e02bd4" - -tmp@^0.0.33: - version "0.0.33" - resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" - dependencies: - os-tmpdir "~1.0.2" - -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" - -to-object-path@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" - dependencies: - kind-of "^3.0.2" - -to-regex-range@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38" - dependencies: - is-number "^3.0.0" - repeat-string "^1.6.1" - -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" - dependencies: - define-property "^2.0.2" - extend-shallow "^3.0.2" - regex-not "^1.0.2" - safe-regex "^1.1.0" - -trim-newlines@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-2.0.0.tgz#b403d0b91be50c331dfc4b82eeceb22c3de16d20" - -trim-repeated@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/trim-repeated/-/trim-repeated-1.0.0.tgz#e3646a2ea4e891312bf7eace6cfb05380bc01c21" - dependencies: - escape-string-regexp "^1.0.2" - -trim-right@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003" - -trim-trailing-lines@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/trim-trailing-lines/-/trim-trailing-lines-1.1.1.tgz#e0ec0810fd3c3f1730516b45f49083caaf2774d9" - -trim@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/trim/-/trim-0.0.1.tgz#5858547f6b290757ee95cccc666fb50084c460dd" - -trough@^1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/trough/-/trough-1.0.3.tgz#e29bd1614c6458d44869fc28b255ab7857ef7c24" - -tslib@^1.9.0: - version "1.9.3" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.9.3.tgz#d7e4dd79245d85428c4d7e4822a79917954ca286" - -type-check@~0.3.2: - version "0.3.2" - resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" - dependencies: - prelude-ls "~1.1.2" - -typedarray-to-buffer@~1.0.0: - version "1.0.4" - resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-1.0.4.tgz#9bb8ba0e841fb3f4cf1fe7c245e9f3fa8a5fe99c" - -typedarray@^0.0.6: - version "0.0.6" - resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" - -unherit@^1.0.4: - version "1.1.1" - resolved "https://registry.yarnpkg.com/unherit/-/unherit-1.1.1.tgz#132748da3e88eab767e08fabfbb89c5e9d28628c" - dependencies: - inherits "^2.0.1" - xtend "^4.0.1" - -unicode-canonical-property-names-ecmascript@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz#2619800c4c825800efdd8343af7dd9933cbe2818" - -unicode-match-property-ecmascript@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz#8ed2a32569961bce9227d09cd3ffbb8fed5f020c" - dependencies: - unicode-canonical-property-names-ecmascript "^1.0.4" - unicode-property-aliases-ecmascript "^1.0.4" - -unicode-match-property-value-ecmascript@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.0.2.tgz#9f1dc76926d6ccf452310564fd834ace059663d4" - -unicode-property-aliases-ecmascript@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.0.4.tgz#5a533f31b4317ea76f17d807fa0d116546111dd0" - -unified@^6.0.0: - version "6.2.0" - resolved "https://registry.yarnpkg.com/unified/-/unified-6.2.0.tgz#7fbd630f719126d67d40c644b7e3f617035f6dba" - dependencies: - bail "^1.0.0" - extend "^3.0.0" - is-plain-obj "^1.1.0" - trough "^1.0.0" - vfile "^2.0.0" - x-is-string "^0.1.0" - -union-value@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.0.tgz#5c71c34cb5bad5dcebe3ea0cd08207ba5aa1aea4" - dependencies: - arr-union "^3.1.0" - get-value "^2.0.6" - is-extendable "^0.1.1" - set-value "^0.4.3" - -uniq@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/uniq/-/uniq-1.0.1.tgz#b31c5ae8254844a3a8281541ce2b04b865a734ff" - -uniqs@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/uniqs/-/uniqs-2.0.0.tgz#ffede4b36b25290696e6e165d4a59edb998e6b02" - -unist-util-find-all-after@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/unist-util-find-all-after/-/unist-util-find-all-after-1.0.2.tgz#9be49cfbae5ca1566b27536670a92836bf2f8d6d" - dependencies: - unist-util-is "^2.0.0" - -unist-util-is@^2.0.0, unist-util-is@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/unist-util-is/-/unist-util-is-2.1.2.tgz#1193fa8f2bfbbb82150633f3a8d2eb9a1c1d55db" - -unist-util-remove-position@^1.0.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/unist-util-remove-position/-/unist-util-remove-position-1.1.2.tgz#86b5dad104d0bbfbeb1db5f5c92f3570575c12cb" - dependencies: - unist-util-visit "^1.1.0" - -unist-util-stringify-position@^1.0.0, unist-util-stringify-position@^1.1.1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/unist-util-stringify-position/-/unist-util-stringify-position-1.1.2.tgz#3f37fcf351279dcbca7480ab5889bb8a832ee1c6" - -unist-util-visit-parents@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/unist-util-visit-parents/-/unist-util-visit-parents-2.0.1.tgz#63fffc8929027bee04bfef7d2cce474f71cb6217" - dependencies: - unist-util-is "^2.1.2" - -unist-util-visit@^1.1.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/unist-util-visit/-/unist-util-visit-1.4.0.tgz#1cb763647186dc26f5e1df5db6bd1e48b3cc2fb1" - dependencies: - unist-util-visit-parents "^2.0.0" - -universalify@^0.1.0: - version "0.1.2" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" - -unquote@~1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/unquote/-/unquote-1.1.1.tgz#8fded7324ec6e88a0ff8b905e7c098cdc086d544" - -unset-value@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" - dependencies: - has-value "^0.3.1" - isobject "^3.0.0" - -uri-js@^4.2.2: - version "4.2.2" - resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0" - 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" - -use@^3.1.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" - -util-deprecate@^1.0.1, util-deprecate@~1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" - -util.promisify@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.0.0.tgz#440f7165a459c9a16dc145eb8e72f35687097030" - dependencies: - define-properties "^1.1.2" - object.getownpropertydescriptors "^2.0.3" - -validate-npm-package-license@^3.0.1: - version "3.0.4" - resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" - dependencies: - spdx-correct "^3.0.0" - spdx-expression-parse "^3.0.0" - -vendors@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/vendors/-/vendors-1.0.2.tgz#7fcb5eef9f5623b156bcea89ec37d63676f21801" - -vfile-location@^2.0.0: - version "2.0.4" - resolved "https://registry.yarnpkg.com/vfile-location/-/vfile-location-2.0.4.tgz#2a5e7297dd0d9e2da4381464d04acc6b834d3e55" - -vfile-message@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/vfile-message/-/vfile-message-1.0.2.tgz#0f8a62584c5dff0f81760531b8e34f3cea554ebc" - dependencies: - unist-util-stringify-position "^1.1.1" - -vfile@^2.0.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/vfile/-/vfile-2.3.0.tgz#e62d8e72b20e83c324bc6c67278ee272488bf84a" - dependencies: - is-buffer "^1.1.4" - replace-ext "1.0.0" - unist-util-stringify-position "^1.0.0" - vfile-message "^1.0.0" - -which@^1.2.10, which@^1.2.14, which@^1.2.9: - version "1.3.1" - resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" - dependencies: - isexe "^2.0.0" - -wordwrap@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" - -wrap-ansi@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-3.0.1.tgz#288a04d87eda5c286e060dfe8f135ce8d007f8ba" - dependencies: - string-width "^2.1.1" - strip-ansi "^4.0.0" - -wrappy@1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" - -write@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/write/-/write-0.2.1.tgz#5fc03828e264cea3fe91455476f7a3c566cb0757" - dependencies: - mkdirp "^0.5.1" - -x-is-string@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/x-is-string/-/x-is-string-0.1.0.tgz#474b50865af3a49a9c4657f05acd145458f77d82" - -xtend@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/xtend/-/xtend-2.2.0.tgz#eef6b1f198c1c8deafad8b1765a04dad4a01c5a9" - -xtend@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af" - -xtend@~2.0.4: - version "2.0.6" - resolved "https://registry.yarnpkg.com/xtend/-/xtend-2.0.6.tgz#5ea657a6dba447069c2e59c58a1138cb0c5e6cee" - dependencies: - is-object "~0.1.2" - object-keys "~0.2.0" - -xtend@~2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/xtend/-/xtend-2.1.2.tgz#6efecc2a4dad8e6962c4901b337ce7ba87b5d28b" - dependencies: - object-keys "~0.4.0" - -xtend@~3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/xtend/-/xtend-3.0.0.tgz#5cce7407baf642cba7becda568111c493f59665a" - -yargs-parser@^10.0.0: - version "10.1.0" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-10.1.0.tgz#7202265b89f7e9e9f2e5765e0fe735a905edbaa8" - dependencies: - camelcase "^4.1.0" diff --git a/extensions/ohif-dicom-html-extension/.babelrc b/extensions/ohif-dicom-html-extension/.babelrc deleted file mode 100644 index 430b9904b69..00000000000 --- a/extensions/ohif-dicom-html-extension/.babelrc +++ /dev/null @@ -1,14 +0,0 @@ -{ - "presets": [ - ["@babel/preset-env", { - "targets": { - "ie": "11" - } - }], - "@babel/preset-react" - ], - "plugins": [ - "@babel/plugin-proposal-class-properties", - "@babel/plugin-transform-runtime" - ] -} diff --git a/extensions/ohif-dicom-html-extension/.editorconfig b/extensions/ohif-dicom-html-extension/.editorconfig deleted file mode 100644 index 9d08a1a828a..00000000000 --- a/extensions/ohif-dicom-html-extension/.editorconfig +++ /dev/null @@ -1,9 +0,0 @@ -root = true - -[*] -charset = utf-8 -indent_style = space -indent_size = 2 -end_of_line = lf -insert_final_newline = true -trim_trailing_whitespace = true diff --git a/extensions/ohif-dicom-html-extension/.eslintrc b/extensions/ohif-dicom-html-extension/.eslintrc deleted file mode 100644 index 77d67cd94b1..00000000000 --- a/extensions/ohif-dicom-html-extension/.eslintrc +++ /dev/null @@ -1,16 +0,0 @@ -{ - "extends": [ - "react-app", - "eslint:recommended", - "plugin:react/recommended" - ], - "parser": "babel-eslint", - "env": { - "jest": true - }, - "settings": { - "react": { - "version": "detect", - }, - }, -} diff --git a/extensions/ohif-dicom-html-extension/.gitignore b/extensions/ohif-dicom-html-extension/.gitignore deleted file mode 100644 index 2ac57034390..00000000000 --- a/extensions/ohif-dicom-html-extension/.gitignore +++ /dev/null @@ -1,23 +0,0 @@ - -# See https://help.github.com/ignore-files/ for more about ignoring files. - -# dependencies -node_modules - -# builds -build -dist -.rpt2_cache - -# misc -.DS_Store -.env -.env.local -.env.development.local -.env.test.local -.env.production.local - -npm-debug.log* -yarn-debug.log* -yarn-error.log* -.idea diff --git a/extensions/ohif-dicom-html-extension/.prettierrc b/extensions/ohif-dicom-html-extension/.prettierrc deleted file mode 100644 index 12348ec6acf..00000000000 --- a/extensions/ohif-dicom-html-extension/.prettierrc +++ /dev/null @@ -1,9 +0,0 @@ -{ - "trailingComma": "es5", - "printWidth": 80, - "proseWrap": "always", - "tabWidth": 2, - "semi": true, - "singleQuote": true, - "endOfLine": "lf" -} diff --git a/extensions/ohif-dicom-html-extension/.travis.yml b/extensions/ohif-dicom-html-extension/.travis.yml deleted file mode 100644 index 984658c939e..00000000000 --- a/extensions/ohif-dicom-html-extension/.travis.yml +++ /dev/null @@ -1,4 +0,0 @@ -language: node_js -node_js: - - 9 - - 8 diff --git a/extensions/ohif-dicom-html-extension/package.json b/extensions/ohif-dicom-html-extension/package.json deleted file mode 100644 index 837b1cd3864..00000000000 --- a/extensions/ohif-dicom-html-extension/package.json +++ /dev/null @@ -1,89 +0,0 @@ -{ - "name": "@ohif/extension-dicom-html", - "version": "0.0.4", - "description": "OHIF extension for rendering structured reports to HTML", - "author": "OHIF", - "license": "MIT", - "repository": "OHIF/Viewers", - "main": "dist/index.umd.js", - "module": "dist/index.es.js", - "jsnext:main": "dist/index.es.js", - "engines": { - "node": ">=8", - "npm": ">=5" - }, - "scripts": { - "build": "rollup -c", - "prepublishOnly": "npm run build", - "start": "rollup -c -w", - "lint": "eslint -c .eslintrc --fix src && prettier --single-quote --write src/**/*.{js,jsx,json,css}" - }, - "peerDependencies": { - "dcmjs": "^0.3.3", - "ohif-core": "^0.6.0", - "prop-types": "^15.6.2", - "react": "^15.0.0 || ^16.0.0", - "react-dom": "^15.0.0 || ^16.0.0" - }, - "dependencies": { - "@babel/runtime": "^7.2.0" - }, - "devDependencies": { - "@babel/core": "^7.2.2", - "@babel/plugin-external-helpers": "^7.2.0", - "@babel/plugin-proposal-class-properties": "^7.2.3", - "@babel/plugin-transform-runtime": "^7.2.0", - "@babel/preset-env": "^7.2.3", - "@babel/preset-react": "^7.0.0", - "@svgr/rollup": "^4.1.0", - "babel-eslint": "^9.0.0", - "cross-env": "^5.2.0", - "eslint": "5.6.0", - "eslint-plugin-import": "^2.14.0", - "eslint-plugin-node": "^8.0.0", - "eslint-plugin-promise": "^4.0.1", - "eslint-plugin-react": "^7.11.1", - "gh-pages": "^2.0.1", - "husky": "^1.3.1", - "lint-staged": "^8.1.0", - "lodash.clonedeep": "^4.5.0", - "prettier": "^1.15.3", - "react": "^16.6.3", - "react-dom": "^16.6.3", - "react-scripts": "^2.1.2", - "rollup": "^0.68.2", - "rollup-plugin-babel": "^4.2.0", - "rollup-plugin-commonjs": "^9.2.0", - "rollup-plugin-node-builtins": "^2.1.2", - "rollup-plugin-node-resolve": "^4.0.0", - "rollup-plugin-peer-deps-external": "^2.2.0", - "rollup-plugin-postcss": "^1.6.3", - "rollup-plugin-url": "^2.1.0", - "stylelint": "^9.9.0", - "stylelint-config-recommended": "^2.1.0", - "stylus": "^0.54.5" - }, - "husky": { - "hooks": { - "pre-commit": "lint-staged" - } - }, - "lint-staged": { - "src/**/*.{js,jsx,json,css}": [ - "prettier --single-quote --write", - "git add" - ] - }, - "browserslist": [ - ">0.2%", - "not dead", - "not ie <= 11", - "not op_mini all" - ], - "files": [ - "dist" - ], - "publishConfig": { - "access": "public" - } -} diff --git a/extensions/ohif-dicom-html-extension/rollup.config.js b/extensions/ohif-dicom-html-extension/rollup.config.js deleted file mode 100644 index 9a010209d65..00000000000 --- a/extensions/ohif-dicom-html-extension/rollup.config.js +++ /dev/null @@ -1,55 +0,0 @@ -import babel from 'rollup-plugin-babel' -import commonjs from 'rollup-plugin-commonjs' -import external from 'rollup-plugin-peer-deps-external' -import postcss from 'rollup-plugin-postcss' -import resolve from 'rollup-plugin-node-resolve' -import url from 'rollup-plugin-url' -import svgr from '@svgr/rollup' -import pkg from './package.json' -// Deal with https://github.com/rollup/rollup-plugin-commonjs/issues/297 -import builtins from 'rollup-plugin-node-builtins'; - -const globals = { - 'react': 'React', - 'react-dom': 'ReactDOM', - 'prop-types': 'PropTypes', - 'ohif-core': 'OHIF', - 'dcmjs': 'dcmjs' -}; - -export default { - input: 'src/index.js', - output: [ - { - file: pkg.main, - format: 'umd', - name: 'ohif-dicom-pdf-extension', - sourcemap: true, - globals - }, - { - file: pkg.module, - format: 'es', - sourcemap: true, - globals - } - ], - plugins: [ - builtins(), - external(), - postcss({ - modules: false - }), - url(), - svgr(), - babel({ - exclude: 'node_modules/**', - plugins: [ '@babel/external-helpers' ], - externalHelpers: true, - runtimeHelpers: true - }), - resolve(), - commonjs() - ], - external: Object.keys(pkg.peerDependencies || {}), -} diff --git a/extensions/ohif-dicom-html-extension/yarn.lock b/extensions/ohif-dicom-html-extension/yarn.lock deleted file mode 100644 index 992eee7216c..00000000000 --- a/extensions/ohif-dicom-html-extension/yarn.lock +++ /dev/null @@ -1,10911 +0,0 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -"@babel/code-frame@7.0.0", "@babel/code-frame@^7.0.0", "@babel/code-frame@^7.0.0-beta.35": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.0.0.tgz#06e2ab19bdb535385559aabb5ba59729482800f8" - dependencies: - "@babel/highlight" "^7.0.0" - -"@babel/core@7.1.6": - version "7.1.6" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.1.6.tgz#3733cbee4317429bc87c62b29cf8587dba7baeb3" - dependencies: - "@babel/code-frame" "^7.0.0" - "@babel/generator" "^7.1.6" - "@babel/helpers" "^7.1.5" - "@babel/parser" "^7.1.6" - "@babel/template" "^7.1.2" - "@babel/traverse" "^7.1.6" - "@babel/types" "^7.1.6" - convert-source-map "^1.1.0" - debug "^4.1.0" - json5 "^2.1.0" - lodash "^4.17.10" - resolve "^1.3.2" - semver "^5.4.1" - source-map "^0.5.0" - -"@babel/core@^7.0.1", "@babel/core@^7.1.2", "@babel/core@^7.1.6": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.2.0.tgz#a4dd3814901998e93340f0086e9867fefa163ada" - dependencies: - "@babel/code-frame" "^7.0.0" - "@babel/generator" "^7.2.0" - "@babel/helpers" "^7.2.0" - "@babel/parser" "^7.2.0" - "@babel/template" "^7.1.2" - "@babel/traverse" "^7.1.6" - "@babel/types" "^7.2.0" - convert-source-map "^1.1.0" - debug "^4.1.0" - json5 "^2.1.0" - lodash "^4.17.10" - resolve "^1.3.2" - semver "^5.4.1" - source-map "^0.5.0" - -"@babel/core@^7.2.2": - version "7.2.2" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.2.2.tgz#07adba6dde27bb5ad8d8672f15fde3e08184a687" - dependencies: - "@babel/code-frame" "^7.0.0" - "@babel/generator" "^7.2.2" - "@babel/helpers" "^7.2.0" - "@babel/parser" "^7.2.2" - "@babel/template" "^7.2.2" - "@babel/traverse" "^7.2.2" - "@babel/types" "^7.2.2" - convert-source-map "^1.1.0" - debug "^4.1.0" - json5 "^2.1.0" - lodash "^4.17.10" - resolve "^1.3.2" - semver "^5.4.1" - source-map "^0.5.0" - -"@babel/generator@^7.1.6", "@babel/generator@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.2.0.tgz#eaf3821fa0301d9d4aef88e63d4bcc19b73ba16c" - dependencies: - "@babel/types" "^7.2.0" - jsesc "^2.5.1" - lodash "^4.17.10" - source-map "^0.5.0" - trim-right "^1.0.1" - -"@babel/generator@^7.2.2": - version "7.2.2" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.2.2.tgz#18c816c70962640eab42fe8cae5f3947a5c65ccc" - dependencies: - "@babel/types" "^7.2.2" - jsesc "^2.5.1" - lodash "^4.17.10" - source-map "^0.5.0" - trim-right "^1.0.1" - -"@babel/helper-annotate-as-pure@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.0.0.tgz#323d39dd0b50e10c7c06ca7d7638e6864d8c5c32" - dependencies: - "@babel/types" "^7.0.0" - -"@babel/helper-builder-binary-assignment-operator-visitor@^7.1.0": - version "7.1.0" - resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.1.0.tgz#6b69628dfe4087798e0c4ed98e3d4a6b2fbd2f5f" - dependencies: - "@babel/helper-explode-assignable-expression" "^7.1.0" - "@babel/types" "^7.0.0" - -"@babel/helper-builder-react-jsx@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/helper-builder-react-jsx/-/helper-builder-react-jsx-7.0.0.tgz#fa154cb53eb918cf2a9a7ce928e29eb649c5acdb" - dependencies: - "@babel/types" "^7.0.0" - esutils "^2.0.0" - -"@babel/helper-call-delegate@^7.1.0": - version "7.1.0" - resolved "https://registry.yarnpkg.com/@babel/helper-call-delegate/-/helper-call-delegate-7.1.0.tgz#6a957f105f37755e8645343d3038a22e1449cc4a" - dependencies: - "@babel/helper-hoist-variables" "^7.0.0" - "@babel/traverse" "^7.1.0" - "@babel/types" "^7.0.0" - -"@babel/helper-create-class-features-plugin@^7.2.3": - version "7.2.3" - resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.2.3.tgz#f6e719abb90cb7f4a69591e35fd5eb89047c4a7c" - dependencies: - "@babel/helper-function-name" "^7.1.0" - "@babel/helper-member-expression-to-functions" "^7.0.0" - "@babel/helper-optimise-call-expression" "^7.0.0" - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-replace-supers" "^7.2.3" - -"@babel/helper-define-map@^7.1.0": - version "7.1.0" - resolved "https://registry.yarnpkg.com/@babel/helper-define-map/-/helper-define-map-7.1.0.tgz#3b74caec329b3c80c116290887c0dd9ae468c20c" - dependencies: - "@babel/helper-function-name" "^7.1.0" - "@babel/types" "^7.0.0" - lodash "^4.17.10" - -"@babel/helper-explode-assignable-expression@^7.1.0": - version "7.1.0" - resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.1.0.tgz#537fa13f6f1674df745b0c00ec8fe4e99681c8f6" - dependencies: - "@babel/traverse" "^7.1.0" - "@babel/types" "^7.0.0" - -"@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" - dependencies: - "@babel/helper-get-function-arity" "^7.0.0" - "@babel/template" "^7.1.0" - "@babel/types" "^7.0.0" - -"@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" - dependencies: - "@babel/types" "^7.0.0" - -"@babel/helper-hoist-variables@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.0.0.tgz#46adc4c5e758645ae7a45deb92bab0918c23bb88" - dependencies: - "@babel/types" "^7.0.0" - -"@babel/helper-member-expression-to-functions@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.0.0.tgz#8cd14b0a0df7ff00f009e7d7a436945f47c7a16f" - dependencies: - "@babel/types" "^7.0.0" - -"@babel/helper-module-imports@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.0.0.tgz#96081b7111e486da4d2cd971ad1a4fe216cc2e3d" - dependencies: - "@babel/types" "^7.0.0" - -"@babel/helper-module-transforms@^7.1.0": - version "7.1.0" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.1.0.tgz#470d4f9676d9fad50b324cdcce5fbabbc3da5787" - dependencies: - "@babel/helper-module-imports" "^7.0.0" - "@babel/helper-simple-access" "^7.1.0" - "@babel/helper-split-export-declaration" "^7.0.0" - "@babel/template" "^7.1.0" - "@babel/types" "^7.0.0" - lodash "^4.17.10" - -"@babel/helper-optimise-call-expression@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.0.0.tgz#a2920c5702b073c15de51106200aa8cad20497d5" - 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" - -"@babel/helper-regex@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/helper-regex/-/helper-regex-7.0.0.tgz#2c1718923b57f9bbe64705ffe5640ac64d9bdb27" - dependencies: - lodash "^4.17.10" - -"@babel/helper-remap-async-to-generator@^7.1.0": - version "7.1.0" - resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.1.0.tgz#361d80821b6f38da75bd3f0785ece20a88c5fe7f" - dependencies: - "@babel/helper-annotate-as-pure" "^7.0.0" - "@babel/helper-wrap-function" "^7.1.0" - "@babel/template" "^7.1.0" - "@babel/traverse" "^7.1.0" - "@babel/types" "^7.0.0" - -"@babel/helper-replace-supers@^7.1.0": - version "7.1.0" - resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.1.0.tgz#5fc31de522ec0ef0899dc9b3e7cf6a5dd655f362" - dependencies: - "@babel/helper-member-expression-to-functions" "^7.0.0" - "@babel/helper-optimise-call-expression" "^7.0.0" - "@babel/traverse" "^7.1.0" - "@babel/types" "^7.0.0" - -"@babel/helper-replace-supers@^7.2.3": - version "7.2.3" - resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.2.3.tgz#19970020cf22677d62b3a689561dbd9644d8c5e5" - dependencies: - "@babel/helper-member-expression-to-functions" "^7.0.0" - "@babel/helper-optimise-call-expression" "^7.0.0" - "@babel/traverse" "^7.2.3" - "@babel/types" "^7.0.0" - -"@babel/helper-simple-access@^7.1.0": - version "7.1.0" - resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.1.0.tgz#65eeb954c8c245beaa4e859da6188f39d71e585c" - dependencies: - "@babel/template" "^7.1.0" - "@babel/types" "^7.0.0" - -"@babel/helper-split-export-declaration@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.0.0.tgz#3aae285c0311c2ab095d997b8c9a94cad547d813" - dependencies: - "@babel/types" "^7.0.0" - -"@babel/helper-wrap-function@^7.1.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.2.0.tgz#c4e0012445769e2815b55296ead43a958549f6fa" - dependencies: - "@babel/helper-function-name" "^7.1.0" - "@babel/template" "^7.1.0" - "@babel/traverse" "^7.1.0" - "@babel/types" "^7.2.0" - -"@babel/helpers@^7.1.5", "@babel/helpers@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.2.0.tgz#8335f3140f3144270dc63c4732a4f8b0a50b7a21" - dependencies: - "@babel/template" "^7.1.2" - "@babel/traverse" "^7.1.5" - "@babel/types" "^7.2.0" - -"@babel/highlight@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.0.0.tgz#f710c38c8d458e6dd9a201afb637fcb781ce99e4" - dependencies: - chalk "^2.0.0" - esutils "^2.0.2" - js-tokens "^4.0.0" - -"@babel/parser@^7.0.0", "@babel/parser@^7.1.2", "@babel/parser@^7.1.6", "@babel/parser@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.2.0.tgz#02d01dbc330b6cbf36b76ac93c50752c69027065" - -"@babel/parser@^7.2.2", "@babel/parser@^7.2.3": - version "7.2.3" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.2.3.tgz#32f5df65744b70888d17872ec106b02434ba1489" - -"@babel/plugin-external-helpers@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-external-helpers/-/plugin-external-helpers-7.2.0.tgz#7f4cb7dee651cd380d2034847d914288467a6be4" - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-proposal-async-generator-functions@^7.1.0", "@babel/plugin-proposal-async-generator-functions@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.2.0.tgz#b289b306669dce4ad20b0252889a15768c9d417e" - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-remap-async-to-generator" "^7.1.0" - "@babel/plugin-syntax-async-generators" "^7.2.0" - -"@babel/plugin-proposal-class-properties@7.1.0": - version "7.1.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.1.0.tgz#9af01856b1241db60ec8838d84691aa0bd1e8df4" - dependencies: - "@babel/helper-function-name" "^7.1.0" - "@babel/helper-member-expression-to-functions" "^7.0.0" - "@babel/helper-optimise-call-expression" "^7.0.0" - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-replace-supers" "^7.1.0" - "@babel/plugin-syntax-class-properties" "^7.0.0" - -"@babel/plugin-proposal-class-properties@^7.2.3": - version "7.2.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.2.3.tgz#c9e1294363b346cff333007a92080f3203698461" - dependencies: - "@babel/helper-create-class-features-plugin" "^7.2.3" - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-proposal-decorators@7.1.6": - version "7.1.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.1.6.tgz#460c31edbd01953efe45d491583b3ec31661d689" - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-replace-supers" "^7.1.0" - "@babel/helper-split-export-declaration" "^7.0.0" - "@babel/plugin-syntax-decorators" "^7.1.0" - -"@babel/plugin-proposal-json-strings@^7.0.0", "@babel/plugin-proposal-json-strings@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.2.0.tgz#568ecc446c6148ae6b267f02551130891e29f317" - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-syntax-json-strings" "^7.2.0" - -"@babel/plugin-proposal-object-rest-spread@7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.0.0.tgz#9a17b547f64d0676b6c9cecd4edf74a82ab85e7e" - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-syntax-object-rest-spread" "^7.0.0" - -"@babel/plugin-proposal-object-rest-spread@^7.0.0", "@babel/plugin-proposal-object-rest-spread@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.2.0.tgz#88f5fec3e7ad019014c97f7ee3c992f0adbf7fb8" - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-syntax-object-rest-spread" "^7.2.0" - -"@babel/plugin-proposal-optional-catch-binding@^7.0.0", "@babel/plugin-proposal-optional-catch-binding@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.2.0.tgz#135d81edb68a081e55e56ec48541ece8065c38f5" - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-syntax-optional-catch-binding" "^7.2.0" - -"@babel/plugin-proposal-unicode-property-regex@^7.0.0", "@babel/plugin-proposal-unicode-property-regex@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.2.0.tgz#abe7281fe46c95ddc143a65e5358647792039520" - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-regex" "^7.0.0" - regexpu-core "^4.2.0" - -"@babel/plugin-syntax-async-generators@^7.0.0", "@babel/plugin-syntax-async-generators@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.2.0.tgz#69e1f0db34c6f5a0cf7e2b3323bf159a76c8cb7f" - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-syntax-class-properties@^7.0.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.2.0.tgz#23b3b7b9bcdabd73672a9149f728cd3be6214812" - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-syntax-decorators@^7.1.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.2.0.tgz#c50b1b957dcc69e4b1127b65e1c33eef61570c1b" - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-syntax-dynamic-import@7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.0.0.tgz#6dfb7d8b6c3be14ce952962f658f3b7eb54c33ee" - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-syntax-flow@^7.0.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.2.0.tgz#a765f061f803bc48f240c26f8747faf97c26bf7c" - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-syntax-json-strings@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.2.0.tgz#72bd13f6ffe1d25938129d2a186b11fd62951470" - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-syntax-jsx@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.2.0.tgz#0b85a3b4bc7cdf4cc4b8bf236335b907ca22e7c7" - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-syntax-object-rest-spread@^7.0.0", "@babel/plugin-syntax-object-rest-spread@^7.2.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" - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-syntax-optional-catch-binding@^7.0.0", "@babel/plugin-syntax-optional-catch-binding@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.2.0.tgz#a94013d6eda8908dfe6a477e7f9eda85656ecf5c" - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-syntax-typescript@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.2.0.tgz#55d240536bd314dcbbec70fd949c5cabaed1de29" - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-arrow-functions@^7.0.0", "@babel/plugin-transform-arrow-functions@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.2.0.tgz#9aeafbe4d6ffc6563bf8f8372091628f00779550" - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-async-to-generator@^7.1.0", "@babel/plugin-transform-async-to-generator@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.2.0.tgz#68b8a438663e88519e65b776f8938f3445b1a2ff" - dependencies: - "@babel/helper-module-imports" "^7.0.0" - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-remap-async-to-generator" "^7.1.0" - -"@babel/plugin-transform-block-scoped-functions@^7.0.0", "@babel/plugin-transform-block-scoped-functions@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.2.0.tgz#5d3cc11e8d5ddd752aa64c9148d0db6cb79fd190" - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-block-scoping@^7.1.5", "@babel/plugin-transform-block-scoping@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.2.0.tgz#f17c49d91eedbcdf5dd50597d16f5f2f770132d4" - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - lodash "^4.17.10" - -"@babel/plugin-transform-classes@7.1.0": - version "7.1.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.1.0.tgz#ab3f8a564361800cbc8ab1ca6f21108038432249" - dependencies: - "@babel/helper-annotate-as-pure" "^7.0.0" - "@babel/helper-define-map" "^7.1.0" - "@babel/helper-function-name" "^7.1.0" - "@babel/helper-optimise-call-expression" "^7.0.0" - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-replace-supers" "^7.1.0" - "@babel/helper-split-export-declaration" "^7.0.0" - globals "^11.1.0" - -"@babel/plugin-transform-classes@^7.1.0", "@babel/plugin-transform-classes@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.2.0.tgz#374f8876075d7d21fea55aeb5c53561259163f96" - dependencies: - "@babel/helper-annotate-as-pure" "^7.0.0" - "@babel/helper-define-map" "^7.1.0" - "@babel/helper-function-name" "^7.1.0" - "@babel/helper-optimise-call-expression" "^7.0.0" - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-replace-supers" "^7.1.0" - "@babel/helper-split-export-declaration" "^7.0.0" - globals "^11.1.0" - -"@babel/plugin-transform-computed-properties@^7.0.0", "@babel/plugin-transform-computed-properties@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.2.0.tgz#83a7df6a658865b1c8f641d510c6f3af220216da" - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-destructuring@7.1.3": - version "7.1.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.1.3.tgz#e69ff50ca01fac6cb72863c544e516c2b193012f" - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-destructuring@^7.0.0", "@babel/plugin-transform-destructuring@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.2.0.tgz#e75269b4b7889ec3a332cd0d0c8cff8fed0dc6f3" - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-dotall-regex@^7.0.0", "@babel/plugin-transform-dotall-regex@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.2.0.tgz#f0aabb93d120a8ac61e925ea0ba440812dbe0e49" - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-regex" "^7.0.0" - regexpu-core "^4.1.3" - -"@babel/plugin-transform-duplicate-keys@^7.0.0", "@babel/plugin-transform-duplicate-keys@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.2.0.tgz#d952c4930f312a4dbfff18f0b2914e60c35530b3" - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-exponentiation-operator@^7.1.0", "@babel/plugin-transform-exponentiation-operator@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.2.0.tgz#a63868289e5b4007f7054d46491af51435766008" - dependencies: - "@babel/helper-builder-binary-assignment-operator-visitor" "^7.1.0" - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-flow-strip-types@7.1.6": - version "7.1.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.1.6.tgz#4b7be62604d39e63cfe23b1d00d63e9fb7e763ba" - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-syntax-flow" "^7.0.0" - -"@babel/plugin-transform-for-of@^7.0.0", "@babel/plugin-transform-for-of@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.2.0.tgz#ab7468befa80f764bb03d3cb5eef8cc998e1cad9" - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-function-name@^7.1.0", "@babel/plugin-transform-function-name@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.2.0.tgz#f7930362829ff99a3174c39f0afcc024ef59731a" - dependencies: - "@babel/helper-function-name" "^7.1.0" - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-literals@^7.0.0", "@babel/plugin-transform-literals@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.2.0.tgz#690353e81f9267dad4fd8cfd77eafa86aba53ea1" - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-modules-amd@^7.1.0", "@babel/plugin-transform-modules-amd@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.2.0.tgz#82a9bce45b95441f617a24011dc89d12da7f4ee6" - dependencies: - "@babel/helper-module-transforms" "^7.1.0" - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-modules-commonjs@^7.1.0", "@babel/plugin-transform-modules-commonjs@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.2.0.tgz#c4f1933f5991d5145e9cfad1dfd848ea1727f404" - dependencies: - "@babel/helper-module-transforms" "^7.1.0" - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-simple-access" "^7.1.0" - -"@babel/plugin-transform-modules-systemjs@^7.0.0", "@babel/plugin-transform-modules-systemjs@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.2.0.tgz#912bfe9e5ff982924c81d0937c92d24994bb9068" - dependencies: - "@babel/helper-hoist-variables" "^7.0.0" - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-modules-umd@^7.1.0", "@babel/plugin-transform-modules-umd@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.2.0.tgz#7678ce75169f0877b8eb2235538c074268dd01ae" - dependencies: - "@babel/helper-module-transforms" "^7.1.0" - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-new-target@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.0.0.tgz#ae8fbd89517fa7892d20e6564e641e8770c3aa4a" - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-object-super@^7.1.0", "@babel/plugin-transform-object-super@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.2.0.tgz#b35d4c10f56bab5d650047dad0f1d8e8814b6598" - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-replace-supers" "^7.1.0" - -"@babel/plugin-transform-parameters@^7.1.0", "@babel/plugin-transform-parameters@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.2.0.tgz#0d5ad15dc805e2ea866df4dd6682bfe76d1408c2" - dependencies: - "@babel/helper-call-delegate" "^7.1.0" - "@babel/helper-get-function-arity" "^7.0.0" - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-react-constant-elements@7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.0.0.tgz#ab413e33e9c46a766f5326014bcbf9e2b34ef7a4" - dependencies: - "@babel/helper-annotate-as-pure" "^7.0.0" - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-react-constant-elements@^7.0.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.2.0.tgz#ed602dc2d8bff2f0cb1a5ce29263dbdec40779f7" - dependencies: - "@babel/helper-annotate-as-pure" "^7.0.0" - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-react-display-name@7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.0.0.tgz#93759e6c023782e52c2da3b75eca60d4f10533ee" - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-react-display-name@^7.0.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.2.0.tgz#ebfaed87834ce8dc4279609a4f0c324c156e3eb0" - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-react-jsx-self@^7.0.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.2.0.tgz#461e21ad9478f1031dd5e276108d027f1b5240ba" - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-syntax-jsx" "^7.2.0" - -"@babel/plugin-transform-react-jsx-source@^7.0.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.2.0.tgz#20c8c60f0140f5dd3cd63418d452801cf3f7180f" - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-syntax-jsx" "^7.2.0" - -"@babel/plugin-transform-react-jsx@^7.0.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.2.0.tgz#ca36b6561c4d3b45524f8efb6f0fbc9a0d1d622f" - dependencies: - "@babel/helper-builder-react-jsx" "^7.0.0" - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-syntax-jsx" "^7.2.0" - -"@babel/plugin-transform-regenerator@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.0.0.tgz#5b41686b4ed40bef874d7ed6a84bdd849c13e0c1" - dependencies: - regenerator-transform "^0.13.3" - -"@babel/plugin-transform-runtime@7.1.0": - version "7.1.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.1.0.tgz#9f76920d42551bb577e2dc594df229b5f7624b63" - dependencies: - "@babel/helper-module-imports" "^7.0.0" - "@babel/helper-plugin-utils" "^7.0.0" - resolve "^1.8.1" - semver "^5.5.1" - -"@babel/plugin-transform-runtime@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.2.0.tgz#566bc43f7d0aedc880eaddbd29168d0f248966ea" - integrity sha512-jIgkljDdq4RYDnJyQsiWbdvGeei/0MOTtSHKO/rfbd/mXBxNpdlulMx49L0HQ4pug1fXannxoqCI+fYSle9eSw== - dependencies: - "@babel/helper-module-imports" "^7.0.0" - "@babel/helper-plugin-utils" "^7.0.0" - resolve "^1.8.1" - semver "^5.5.1" - -"@babel/plugin-transform-shorthand-properties@^7.0.0", "@babel/plugin-transform-shorthand-properties@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.2.0.tgz#6333aee2f8d6ee7e28615457298934a3b46198f0" - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-spread@^7.0.0", "@babel/plugin-transform-spread@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.2.0.tgz#0c76c12a3b5826130078ee8ec84a7a8e4afd79c4" - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-sticky-regex@^7.0.0", "@babel/plugin-transform-sticky-regex@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.2.0.tgz#a1e454b5995560a9c1e0d537dfc15061fd2687e1" - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-regex" "^7.0.0" - -"@babel/plugin-transform-template-literals@^7.0.0", "@babel/plugin-transform-template-literals@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.2.0.tgz#d87ed01b8eaac7a92473f608c97c089de2ba1e5b" - dependencies: - "@babel/helper-annotate-as-pure" "^7.0.0" - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-typeof-symbol@^7.0.0", "@babel/plugin-transform-typeof-symbol@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.2.0.tgz#117d2bcec2fbf64b4b59d1f9819894682d29f2b2" - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-typescript@^7.1.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.2.0.tgz#bce7c06300434de6a860ae8acf6a442ef74a99d1" - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-syntax-typescript" "^7.2.0" - -"@babel/plugin-transform-unicode-regex@^7.0.0", "@babel/plugin-transform-unicode-regex@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.2.0.tgz#4eb8db16f972f8abb5062c161b8b115546ade08b" - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-regex" "^7.0.0" - regexpu-core "^4.1.3" - -"@babel/preset-env@7.1.6": - version "7.1.6" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.1.6.tgz#a0bf4b96b6bfcf6e000afc5b72b4abe7cc13ae97" - dependencies: - "@babel/helper-module-imports" "^7.0.0" - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-proposal-async-generator-functions" "^7.1.0" - "@babel/plugin-proposal-json-strings" "^7.0.0" - "@babel/plugin-proposal-object-rest-spread" "^7.0.0" - "@babel/plugin-proposal-optional-catch-binding" "^7.0.0" - "@babel/plugin-proposal-unicode-property-regex" "^7.0.0" - "@babel/plugin-syntax-async-generators" "^7.0.0" - "@babel/plugin-syntax-object-rest-spread" "^7.0.0" - "@babel/plugin-syntax-optional-catch-binding" "^7.0.0" - "@babel/plugin-transform-arrow-functions" "^7.0.0" - "@babel/plugin-transform-async-to-generator" "^7.1.0" - "@babel/plugin-transform-block-scoped-functions" "^7.0.0" - "@babel/plugin-transform-block-scoping" "^7.1.5" - "@babel/plugin-transform-classes" "^7.1.0" - "@babel/plugin-transform-computed-properties" "^7.0.0" - "@babel/plugin-transform-destructuring" "^7.0.0" - "@babel/plugin-transform-dotall-regex" "^7.0.0" - "@babel/plugin-transform-duplicate-keys" "^7.0.0" - "@babel/plugin-transform-exponentiation-operator" "^7.1.0" - "@babel/plugin-transform-for-of" "^7.0.0" - "@babel/plugin-transform-function-name" "^7.1.0" - "@babel/plugin-transform-literals" "^7.0.0" - "@babel/plugin-transform-modules-amd" "^7.1.0" - "@babel/plugin-transform-modules-commonjs" "^7.1.0" - "@babel/plugin-transform-modules-systemjs" "^7.0.0" - "@babel/plugin-transform-modules-umd" "^7.1.0" - "@babel/plugin-transform-new-target" "^7.0.0" - "@babel/plugin-transform-object-super" "^7.1.0" - "@babel/plugin-transform-parameters" "^7.1.0" - "@babel/plugin-transform-regenerator" "^7.0.0" - "@babel/plugin-transform-shorthand-properties" "^7.0.0" - "@babel/plugin-transform-spread" "^7.0.0" - "@babel/plugin-transform-sticky-regex" "^7.0.0" - "@babel/plugin-transform-template-literals" "^7.0.0" - "@babel/plugin-transform-typeof-symbol" "^7.0.0" - "@babel/plugin-transform-unicode-regex" "^7.0.0" - browserslist "^4.1.0" - invariant "^2.2.2" - js-levenshtein "^1.1.3" - semver "^5.3.0" - -"@babel/preset-env@^7.0.0", "@babel/preset-env@^7.1.6": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.2.0.tgz#a5030e7e4306af5a295dd5d7c78dc5464af3fee2" - dependencies: - "@babel/helper-module-imports" "^7.0.0" - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-proposal-async-generator-functions" "^7.2.0" - "@babel/plugin-proposal-json-strings" "^7.2.0" - "@babel/plugin-proposal-object-rest-spread" "^7.2.0" - "@babel/plugin-proposal-optional-catch-binding" "^7.2.0" - "@babel/plugin-proposal-unicode-property-regex" "^7.2.0" - "@babel/plugin-syntax-async-generators" "^7.2.0" - "@babel/plugin-syntax-object-rest-spread" "^7.2.0" - "@babel/plugin-syntax-optional-catch-binding" "^7.2.0" - "@babel/plugin-transform-arrow-functions" "^7.2.0" - "@babel/plugin-transform-async-to-generator" "^7.2.0" - "@babel/plugin-transform-block-scoped-functions" "^7.2.0" - "@babel/plugin-transform-block-scoping" "^7.2.0" - "@babel/plugin-transform-classes" "^7.2.0" - "@babel/plugin-transform-computed-properties" "^7.2.0" - "@babel/plugin-transform-destructuring" "^7.2.0" - "@babel/plugin-transform-dotall-regex" "^7.2.0" - "@babel/plugin-transform-duplicate-keys" "^7.2.0" - "@babel/plugin-transform-exponentiation-operator" "^7.2.0" - "@babel/plugin-transform-for-of" "^7.2.0" - "@babel/plugin-transform-function-name" "^7.2.0" - "@babel/plugin-transform-literals" "^7.2.0" - "@babel/plugin-transform-modules-amd" "^7.2.0" - "@babel/plugin-transform-modules-commonjs" "^7.2.0" - "@babel/plugin-transform-modules-systemjs" "^7.2.0" - "@babel/plugin-transform-modules-umd" "^7.2.0" - "@babel/plugin-transform-new-target" "^7.0.0" - "@babel/plugin-transform-object-super" "^7.2.0" - "@babel/plugin-transform-parameters" "^7.2.0" - "@babel/plugin-transform-regenerator" "^7.0.0" - "@babel/plugin-transform-shorthand-properties" "^7.2.0" - "@babel/plugin-transform-spread" "^7.2.0" - "@babel/plugin-transform-sticky-regex" "^7.2.0" - "@babel/plugin-transform-template-literals" "^7.2.0" - "@babel/plugin-transform-typeof-symbol" "^7.2.0" - "@babel/plugin-transform-unicode-regex" "^7.2.0" - browserslist "^4.3.4" - invariant "^2.2.2" - js-levenshtein "^1.1.3" - semver "^5.3.0" - -"@babel/preset-env@^7.2.3": - version "7.2.3" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.2.3.tgz#948c8df4d4609c99c7e0130169f052ea6a7a8933" - dependencies: - "@babel/helper-module-imports" "^7.0.0" - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-proposal-async-generator-functions" "^7.2.0" - "@babel/plugin-proposal-json-strings" "^7.2.0" - "@babel/plugin-proposal-object-rest-spread" "^7.2.0" - "@babel/plugin-proposal-optional-catch-binding" "^7.2.0" - "@babel/plugin-proposal-unicode-property-regex" "^7.2.0" - "@babel/plugin-syntax-async-generators" "^7.2.0" - "@babel/plugin-syntax-object-rest-spread" "^7.2.0" - "@babel/plugin-syntax-optional-catch-binding" "^7.2.0" - "@babel/plugin-transform-arrow-functions" "^7.2.0" - "@babel/plugin-transform-async-to-generator" "^7.2.0" - "@babel/plugin-transform-block-scoped-functions" "^7.2.0" - "@babel/plugin-transform-block-scoping" "^7.2.0" - "@babel/plugin-transform-classes" "^7.2.0" - "@babel/plugin-transform-computed-properties" "^7.2.0" - "@babel/plugin-transform-destructuring" "^7.2.0" - "@babel/plugin-transform-dotall-regex" "^7.2.0" - "@babel/plugin-transform-duplicate-keys" "^7.2.0" - "@babel/plugin-transform-exponentiation-operator" "^7.2.0" - "@babel/plugin-transform-for-of" "^7.2.0" - "@babel/plugin-transform-function-name" "^7.2.0" - "@babel/plugin-transform-literals" "^7.2.0" - "@babel/plugin-transform-modules-amd" "^7.2.0" - "@babel/plugin-transform-modules-commonjs" "^7.2.0" - "@babel/plugin-transform-modules-systemjs" "^7.2.0" - "@babel/plugin-transform-modules-umd" "^7.2.0" - "@babel/plugin-transform-new-target" "^7.0.0" - "@babel/plugin-transform-object-super" "^7.2.0" - "@babel/plugin-transform-parameters" "^7.2.0" - "@babel/plugin-transform-regenerator" "^7.0.0" - "@babel/plugin-transform-shorthand-properties" "^7.2.0" - "@babel/plugin-transform-spread" "^7.2.0" - "@babel/plugin-transform-sticky-regex" "^7.2.0" - "@babel/plugin-transform-template-literals" "^7.2.0" - "@babel/plugin-transform-typeof-symbol" "^7.2.0" - "@babel/plugin-transform-unicode-regex" "^7.2.0" - browserslist "^4.3.4" - invariant "^2.2.2" - js-levenshtein "^1.1.3" - semver "^5.3.0" - -"@babel/preset-react@7.0.0", "@babel/preset-react@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.0.0.tgz#e86b4b3d99433c7b3e9e91747e2653958bc6b3c0" - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-transform-react-display-name" "^7.0.0" - "@babel/plugin-transform-react-jsx" "^7.0.0" - "@babel/plugin-transform-react-jsx-self" "^7.0.0" - "@babel/plugin-transform-react-jsx-source" "^7.0.0" - -"@babel/preset-typescript@7.1.0": - version "7.1.0" - resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.1.0.tgz#49ad6e2084ff0bfb5f1f7fb3b5e76c434d442c7f" - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-transform-typescript" "^7.1.0" - -"@babel/runtime@7.1.5": - version "7.1.5" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.1.5.tgz#4170907641cf1f61508f563ece3725150cc6fe39" - dependencies: - regenerator-runtime "^0.12.0" - -"@babel/runtime@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.2.0.tgz#b03e42eeddf5898e00646e4c840fa07ba8dcad7f" - dependencies: - regenerator-runtime "^0.12.0" - -"@babel/template@^7.1.0", "@babel/template@^7.1.2": - version "7.1.2" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.1.2.tgz#090484a574fef5a2d2d7726a674eceda5c5b5644" - dependencies: - "@babel/code-frame" "^7.0.0" - "@babel/parser" "^7.1.2" - "@babel/types" "^7.1.2" - -"@babel/template@^7.2.2": - version "7.2.2" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.2.2.tgz#005b3fdf0ed96e88041330379e0da9a708eb2907" - dependencies: - "@babel/code-frame" "^7.0.0" - "@babel/parser" "^7.2.2" - "@babel/types" "^7.2.2" - -"@babel/traverse@^7.0.0", "@babel/traverse@^7.1.0", "@babel/traverse@^7.1.5", "@babel/traverse@^7.1.6": - version "7.1.6" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.1.6.tgz#c8db9963ab4ce5b894222435482bd8ea854b7b5c" - dependencies: - "@babel/code-frame" "^7.0.0" - "@babel/generator" "^7.1.6" - "@babel/helper-function-name" "^7.1.0" - "@babel/helper-split-export-declaration" "^7.0.0" - "@babel/parser" "^7.1.6" - "@babel/types" "^7.1.6" - debug "^4.1.0" - globals "^11.1.0" - lodash "^4.17.10" - -"@babel/traverse@^7.2.2", "@babel/traverse@^7.2.3": - version "7.2.3" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.2.3.tgz#7ff50cefa9c7c0bd2d81231fdac122f3957748d8" - dependencies: - "@babel/code-frame" "^7.0.0" - "@babel/generator" "^7.2.2" - "@babel/helper-function-name" "^7.1.0" - "@babel/helper-split-export-declaration" "^7.0.0" - "@babel/parser" "^7.2.3" - "@babel/types" "^7.2.2" - debug "^4.1.0" - globals "^11.1.0" - lodash "^4.17.10" - -"@babel/types@^7.0.0", "@babel/types@^7.1.2", "@babel/types@^7.1.6", "@babel/types@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.2.0.tgz#7941c5b2d8060e06f9601d6be7c223eef906d5d8" - dependencies: - esutils "^2.0.2" - lodash "^4.17.10" - to-fast-properties "^2.0.0" - -"@babel/types@^7.2.2": - version "7.2.2" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.2.2.tgz#44e10fc24e33af524488b716cdaee5360ea8ed1e" - dependencies: - esutils "^2.0.2" - lodash "^4.17.10" - to-fast-properties "^2.0.0" - -"@csstools/convert-colors@^1.4.0": - version "1.4.0" - resolved "https://registry.yarnpkg.com/@csstools/convert-colors/-/convert-colors-1.4.0.tgz#ad495dc41b12e75d588c6db8b9834f08fa131eb7" - -"@iamstarkov/listr-update-renderer@0.4.1": - version "0.4.1" - resolved "https://registry.yarnpkg.com/@iamstarkov/listr-update-renderer/-/listr-update-renderer-0.4.1.tgz#d7c48092a2dcf90fd672b6c8b458649cb350c77e" - dependencies: - chalk "^1.1.3" - cli-truncate "^0.2.1" - elegant-spinner "^1.0.1" - figures "^1.7.0" - indent-string "^3.0.0" - log-symbols "^1.0.2" - log-update "^2.3.0" - strip-ansi "^3.0.1" - -"@mrmlnc/readdir-enhanced@^2.2.1": - version "2.2.1" - resolved "https://registry.yarnpkg.com/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz#524af240d1a360527b730475ecfa1344aa540dde" - dependencies: - call-me-maybe "^1.0.1" - glob-to-regexp "^0.3.0" - -"@nodelib/fs.stat@^1.1.2": - version "1.1.3" - resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz#2b5a3ab3f918cca48a8c754c08168e3f03eba61b" - -"@samverschueren/stream-to-observable@^0.3.0": - version "0.3.0" - resolved "https://registry.yarnpkg.com/@samverschueren/stream-to-observable/-/stream-to-observable-0.3.0.tgz#ecdf48d532c58ea477acfcab80348424f8d0662f" - dependencies: - any-observable "^0.3.0" - -"@svgr/babel-plugin-add-jsx-attribute@^4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-4.0.0.tgz#5acf239cd2747b1a36ec7e708de05d914cb9b948" - -"@svgr/babel-plugin-remove-jsx-attribute@^4.0.3": - version "4.0.3" - resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-4.0.3.tgz#32564b5c4d761b51e34492b6a4894196c0f75803" - -"@svgr/babel-plugin-remove-jsx-empty-expression@^4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-4.0.0.tgz#0b59338c00671cf8137eb823bd84a3efac686502" - -"@svgr/babel-plugin-replace-jsx-attribute-value@^4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-4.0.0.tgz#91785643540c2300f3d89e515b37af9b5ce4e695" - -"@svgr/babel-plugin-svg-dynamic-title@^4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-4.0.0.tgz#eb8d50b80ba0a26f9b27c7268e2a803d90f1bc9e" - -"@svgr/babel-plugin-svg-em-dimensions@^4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-4.0.0.tgz#0de3972c46ff1960bed765646037a3a7f9e1da3d" - -"@svgr/babel-plugin-transform-react-native-svg@^4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-4.0.0.tgz#5e8ecc2a9870ae05fb1e553b1fe9c6b5853a1c66" - -"@svgr/babel-plugin-transform-svg-component@^4.1.0": - version "4.1.0" - resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-4.1.0.tgz#257159e28a21ac20988b1eaa5f59d4724f37fdaa" - -"@svgr/babel-preset@^4.1.0": - version "4.1.0" - resolved "https://registry.yarnpkg.com/@svgr/babel-preset/-/babel-preset-4.1.0.tgz#f6fa8ad90064b85dd7a3566a70b7006e789e8385" - dependencies: - "@svgr/babel-plugin-add-jsx-attribute" "^4.0.0" - "@svgr/babel-plugin-remove-jsx-attribute" "^4.0.3" - "@svgr/babel-plugin-remove-jsx-empty-expression" "^4.0.0" - "@svgr/babel-plugin-replace-jsx-attribute-value" "^4.0.0" - "@svgr/babel-plugin-svg-dynamic-title" "^4.0.0" - "@svgr/babel-plugin-svg-em-dimensions" "^4.0.0" - "@svgr/babel-plugin-transform-react-native-svg" "^4.0.0" - "@svgr/babel-plugin-transform-svg-component" "^4.1.0" - -"@svgr/core@^2.4.1": - version "2.4.1" - resolved "https://registry.yarnpkg.com/@svgr/core/-/core-2.4.1.tgz#03a407c28c4a1d84305ae95021e8eabfda8fa731" - dependencies: - camelcase "^5.0.0" - cosmiconfig "^5.0.6" - h2x-core "^1.1.0" - h2x-plugin-jsx "^1.1.0" - merge-deep "^3.0.2" - prettier "^1.14.2" - svgo "^1.0.5" - -"@svgr/core@^4.1.0": - version "4.1.0" - resolved "https://registry.yarnpkg.com/@svgr/core/-/core-4.1.0.tgz#4f8ad24fb4ab25c787c12a6bbb511c6430558f83" - dependencies: - "@svgr/plugin-jsx" "^4.1.0" - camelcase "^5.0.0" - cosmiconfig "^5.0.7" - -"@svgr/hast-util-to-babel-ast@^4.1.0": - version "4.1.0" - resolved "https://registry.yarnpkg.com/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-4.1.0.tgz#a1eb0f47059769896f759f47995b636fce5d9fa4" - dependencies: - "@babel/types" "^7.1.6" - -"@svgr/plugin-jsx@^4.1.0": - version "4.1.0" - resolved "https://registry.yarnpkg.com/@svgr/plugin-jsx/-/plugin-jsx-4.1.0.tgz#4045e9cc0589374a6c182a1217c80e6734b5cbec" - dependencies: - "@babel/core" "^7.1.6" - "@svgr/babel-preset" "^4.1.0" - "@svgr/hast-util-to-babel-ast" "^4.1.0" - rehype-parse "^6.0.0" - unified "^7.0.2" - vfile "^3.0.1" - -"@svgr/plugin-svgo@^4.0.3": - version "4.0.3" - resolved "https://registry.yarnpkg.com/@svgr/plugin-svgo/-/plugin-svgo-4.0.3.tgz#a07ea0a736c26fa3a5440fe8e222e2e887764cab" - dependencies: - cosmiconfig "^5.0.7" - merge-deep "^3.0.2" - svgo "^1.1.1" - -"@svgr/rollup@^4.1.0": - version "4.1.0" - resolved "https://registry.yarnpkg.com/@svgr/rollup/-/rollup-4.1.0.tgz#fd1be5eef562c31983a58101bf4528084d5094d0" - dependencies: - "@babel/core" "^7.1.6" - "@babel/plugin-transform-react-constant-elements" "^7.0.0" - "@babel/preset-env" "^7.1.6" - "@babel/preset-react" "^7.0.0" - "@svgr/core" "^4.1.0" - "@svgr/plugin-jsx" "^4.1.0" - "@svgr/plugin-svgo" "^4.0.3" - rollup-pluginutils "^2.3.3" - -"@svgr/webpack@2.4.1": - version "2.4.1" - resolved "https://registry.yarnpkg.com/@svgr/webpack/-/webpack-2.4.1.tgz#68bc581ecb4c09fadeb7936bd1afaceb9da960d2" - dependencies: - "@babel/core" "^7.0.1" - "@babel/plugin-transform-react-constant-elements" "^7.0.0" - "@babel/preset-env" "^7.0.0" - "@babel/preset-react" "^7.0.0" - "@svgr/core" "^2.4.1" - loader-utils "^1.1.0" - -"@types/estree@0.0.39": - version "0.0.39" - resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.39.tgz#e177e699ee1b8c22d23174caaa7422644389509f" - -"@types/node@*": - version "10.12.12" - resolved "https://registry.yarnpkg.com/@types/node/-/node-10.12.12.tgz#e15a9d034d9210f00320ef718a50c4a799417c47" - -"@types/tapable@1.0.2": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@types/tapable/-/tapable-1.0.2.tgz#e13182e1b69871a422d7863e11a4a6f5b814a4bd" - -"@webassemblyjs/ast@1.7.6": - version "1.7.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.7.6.tgz#3ef8c45b3e5e943a153a05281317474fef63e21e" - dependencies: - "@webassemblyjs/helper-module-context" "1.7.6" - "@webassemblyjs/helper-wasm-bytecode" "1.7.6" - "@webassemblyjs/wast-parser" "1.7.6" - mamacro "^0.0.3" - -"@webassemblyjs/floating-point-hex-parser@1.7.6": - version "1.7.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.7.6.tgz#7cb37d51a05c3fe09b464ae7e711d1ab3837801f" - -"@webassemblyjs/helper-api-error@1.7.6": - version "1.7.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.7.6.tgz#99b7e30e66f550a2638299a109dda84a622070ef" - -"@webassemblyjs/helper-buffer@1.7.6": - version "1.7.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.7.6.tgz#ba0648be12bbe560c25c997e175c2018df39ca3e" - -"@webassemblyjs/helper-code-frame@1.7.6": - version "1.7.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.7.6.tgz#5a94d21b0057b69a7403fca0c253c3aaca95b1a5" - dependencies: - "@webassemblyjs/wast-printer" "1.7.6" - -"@webassemblyjs/helper-fsm@1.7.6": - version "1.7.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-fsm/-/helper-fsm-1.7.6.tgz#ae1741c6f6121213c7a0b587fb964fac492d3e49" - -"@webassemblyjs/helper-module-context@1.7.6": - version "1.7.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-module-context/-/helper-module-context-1.7.6.tgz#116d19a51a6cebc8900ad53ca34ff8269c668c23" - dependencies: - mamacro "^0.0.3" - -"@webassemblyjs/helper-wasm-bytecode@1.7.6": - version "1.7.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.7.6.tgz#98e515eaee611aa6834eb5f6a7f8f5b29fefb6f1" - -"@webassemblyjs/helper-wasm-section@1.7.6": - version "1.7.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.7.6.tgz#783835867bdd686df7a95377ab64f51a275e8333" - dependencies: - "@webassemblyjs/ast" "1.7.6" - "@webassemblyjs/helper-buffer" "1.7.6" - "@webassemblyjs/helper-wasm-bytecode" "1.7.6" - "@webassemblyjs/wasm-gen" "1.7.6" - -"@webassemblyjs/ieee754@1.7.6": - version "1.7.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.7.6.tgz#c34fc058f2f831fae0632a8bb9803cf2d3462eb1" - dependencies: - "@xtuc/ieee754" "^1.2.0" - -"@webassemblyjs/leb128@1.7.6": - version "1.7.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.7.6.tgz#197f75376a29f6ed6ace15898a310d871d92f03b" - dependencies: - "@xtuc/long" "4.2.1" - -"@webassemblyjs/utf8@1.7.6": - version "1.7.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.7.6.tgz#eb62c66f906af2be70de0302e29055d25188797d" - -"@webassemblyjs/wasm-edit@1.7.6": - version "1.7.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.7.6.tgz#fa41929160cd7d676d4c28ecef420eed5b3733c5" - dependencies: - "@webassemblyjs/ast" "1.7.6" - "@webassemblyjs/helper-buffer" "1.7.6" - "@webassemblyjs/helper-wasm-bytecode" "1.7.6" - "@webassemblyjs/helper-wasm-section" "1.7.6" - "@webassemblyjs/wasm-gen" "1.7.6" - "@webassemblyjs/wasm-opt" "1.7.6" - "@webassemblyjs/wasm-parser" "1.7.6" - "@webassemblyjs/wast-printer" "1.7.6" - -"@webassemblyjs/wasm-gen@1.7.6": - version "1.7.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.7.6.tgz#695ac38861ab3d72bf763c8c75e5f087ffabc322" - dependencies: - "@webassemblyjs/ast" "1.7.6" - "@webassemblyjs/helper-wasm-bytecode" "1.7.6" - "@webassemblyjs/ieee754" "1.7.6" - "@webassemblyjs/leb128" "1.7.6" - "@webassemblyjs/utf8" "1.7.6" - -"@webassemblyjs/wasm-opt@1.7.6": - version "1.7.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.7.6.tgz#fbafa78e27e1a75ab759a4b658ff3d50b4636c21" - dependencies: - "@webassemblyjs/ast" "1.7.6" - "@webassemblyjs/helper-buffer" "1.7.6" - "@webassemblyjs/wasm-gen" "1.7.6" - "@webassemblyjs/wasm-parser" "1.7.6" - -"@webassemblyjs/wasm-parser@1.7.6": - version "1.7.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.7.6.tgz#84eafeeff405ad6f4c4b5777d6a28ae54eed51fe" - dependencies: - "@webassemblyjs/ast" "1.7.6" - "@webassemblyjs/helper-api-error" "1.7.6" - "@webassemblyjs/helper-wasm-bytecode" "1.7.6" - "@webassemblyjs/ieee754" "1.7.6" - "@webassemblyjs/leb128" "1.7.6" - "@webassemblyjs/utf8" "1.7.6" - -"@webassemblyjs/wast-parser@1.7.6": - version "1.7.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-parser/-/wast-parser-1.7.6.tgz#ca4d20b1516e017c91981773bd7e819d6bd9c6a7" - dependencies: - "@webassemblyjs/ast" "1.7.6" - "@webassemblyjs/floating-point-hex-parser" "1.7.6" - "@webassemblyjs/helper-api-error" "1.7.6" - "@webassemblyjs/helper-code-frame" "1.7.6" - "@webassemblyjs/helper-fsm" "1.7.6" - "@xtuc/long" "4.2.1" - mamacro "^0.0.3" - -"@webassemblyjs/wast-printer@1.7.6": - version "1.7.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.7.6.tgz#a6002c526ac5fa230fe2c6d2f1bdbf4aead43a5e" - dependencies: - "@webassemblyjs/ast" "1.7.6" - "@webassemblyjs/wast-parser" "1.7.6" - "@xtuc/long" "4.2.1" - -"@xtuc/ieee754@^1.2.0": - version "1.2.0" - resolved "https://registry.yarnpkg.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz#eef014a3145ae477a1cbc00cd1e552336dceb790" - -"@xtuc/long@4.2.1": - version "4.2.1" - resolved "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.1.tgz#5c85d662f76fa1d34575766c5dcd6615abcd30d8" - -abab@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.0.tgz#aba0ab4c5eee2d4c79d3487d85450fb2376ebb0f" - -abbrev@1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" - -abstract-leveldown@~0.12.0, abstract-leveldown@~0.12.1: - version "0.12.4" - resolved "https://registry.yarnpkg.com/abstract-leveldown/-/abstract-leveldown-0.12.4.tgz#29e18e632e60e4e221d5810247852a63d7b2e410" - dependencies: - xtend "~3.0.0" - -accepts@~1.3.4, accepts@~1.3.5: - version "1.3.5" - resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.5.tgz#eb777df6011723a3b14e8a72c0805c8e86746bd2" - dependencies: - mime-types "~2.1.18" - negotiator "0.6.1" - -acorn-dynamic-import@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/acorn-dynamic-import/-/acorn-dynamic-import-3.0.0.tgz#901ceee4c7faaef7e07ad2a47e890675da50a278" - dependencies: - acorn "^5.0.0" - -acorn-globals@^4.1.0, acorn-globals@^4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-4.3.0.tgz#e3b6f8da3c1552a95ae627571f7dd6923bb54103" - dependencies: - acorn "^6.0.1" - acorn-walk "^6.0.1" - -acorn-jsx@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.0.1.tgz#32a064fd925429216a09b141102bfdd185fae40e" - -acorn-walk@^6.0.1: - version "6.1.1" - resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-6.1.1.tgz#d363b66f5fac5f018ff9c3a1e7b6f8e310cc3913" - -acorn@^5.0.0, acorn@^5.5.3, acorn@^5.6.2: - version "5.7.3" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.7.3.tgz#67aa231bf8812974b85235a96771eb6bd07ea279" - -acorn@^6.0.1, acorn@^6.0.2: - version "6.0.4" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.0.4.tgz#77377e7353b72ec5104550aa2d2097a2fd40b754" - -address@1.0.3, address@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/address/-/address-1.0.3.tgz#b5f50631f8d6cec8bd20c963963afb55e06cbce9" - -ajv-errors@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/ajv-errors/-/ajv-errors-1.0.1.tgz#f35986aceb91afadec4102fbd85014950cefa64d" - -ajv-keywords@^3.0.0, ajv-keywords@^3.1.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.2.0.tgz#e86b819c602cf8821ad637413698f1dec021847a" - -ajv@^6.0.1, ajv@^6.1.0, ajv@^6.5.3, ajv@^6.5.5, ajv@^6.6.1: - version "6.6.1" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.6.1.tgz#6360f5ed0d80f232cc2b294c362d5dc2e538dd61" - dependencies: - fast-deep-equal "^2.0.1" - fast-json-stable-stringify "^2.0.0" - json-schema-traverse "^0.4.1" - uri-js "^4.2.2" - -alphanum-sort@^1.0.0, alphanum-sort@^1.0.1, alphanum-sort@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/alphanum-sort/-/alphanum-sort-1.0.2.tgz#97a1119649b211ad33691d9f9f486a8ec9fbe0a3" - -amdefine@>=0.0.4: - version "1.0.1" - resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5" - -ansi-colors@^3.0.0: - version "3.2.3" - resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-3.2.3.tgz#57d35b8686e851e2cc04c403f1c00203976a1813" - -ansi-escapes@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.1.0.tgz#f73207bb81207d75fd6c83f125af26eea378ca30" - -ansi-html@0.0.7: - version "0.0.7" - resolved "https://registry.yarnpkg.com/ansi-html/-/ansi-html-0.0.7.tgz#813584021962a9e9e6fd039f940d12f56ca7859e" - -ansi-regex@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" - -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: - version "4.0.0" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.0.0.tgz#70de791edf021404c3fd615aa89118ae0432e5a9" - -ansi-styles@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" - -ansi-styles@^3.2.0, ansi-styles@^3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" - dependencies: - color-convert "^1.9.0" - -any-observable@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/any-observable/-/any-observable-0.3.0.tgz#af933475e5806a67d0d7df090dd5e8bef65d119b" - -anymatch@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" - dependencies: - micromatch "^3.1.4" - normalize-path "^2.1.1" - -append-transform@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/append-transform/-/append-transform-0.4.0.tgz#d76ebf8ca94d276e247a36bad44a4b74ab611991" - dependencies: - default-require-extensions "^1.0.0" - -aproba@^1.0.3, aproba@^1.1.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" - -are-we-there-yet@~1.1.2: - version "1.1.5" - resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz#4b35c2944f062a8bfcda66410760350fe9ddfc21" - dependencies: - delegates "^1.0.0" - readable-stream "^2.0.6" - -argparse@^1.0.7: - version "1.0.10" - resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" - dependencies: - sprintf-js "~1.0.2" - -aria-query@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-3.0.0.tgz#65b3fcc1ca1155a8c9ae64d6eee297f15d5133cc" - dependencies: - ast-types-flow "0.0.7" - commander "^2.11.0" - -arr-diff@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-2.0.0.tgz#8f3b827f955a8bd669697e4a4256ac3ceae356cf" - dependencies: - arr-flatten "^1.0.1" - -arr-diff@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" - -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@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" - -array-equal@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/array-equal/-/array-equal-1.0.0.tgz#8c2a5ef2472fd9ea742b04c77a75093ba2757c93" - -array-filter@~0.0.0: - version "0.0.1" - resolved "https://registry.yarnpkg.com/array-filter/-/array-filter-0.0.1.tgz#7da8cf2e26628ed732803581fd21f67cacd2eeec" - -array-find-index@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1" - -array-flatten@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" - -array-flatten@^2.1.0: - version "2.1.2" - resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-2.1.2.tgz#24ef80a28c1a893617e2149b0c6d0d788293b099" - -array-includes@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.0.3.tgz#184b48f62d92d7452bb31b323165c7f8bd02266d" - dependencies: - define-properties "^1.1.2" - es-abstract "^1.7.0" - -array-map@~0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/array-map/-/array-map-0.0.0.tgz#88a2bab73d1cf7bcd5c1b118a003f66f665fa662" - -array-reduce@~0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/array-reduce/-/array-reduce-0.0.0.tgz#173899d3ffd1c7d9383e4479525dbe278cab5f2b" - -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: - 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" - -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.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" - -asap@~2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" - -asn1.js@^4.0.0: - version "4.10.1" - resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-4.10.1.tgz#b9c2bf5805f1e64aadeed6df3a2bfafb5a73f5a0" - dependencies: - bn.js "^4.0.0" - inherits "^2.0.1" - minimalistic-assert "^1.0.0" - -asn1@~0.2.3: - version "0.2.4" - resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136" - dependencies: - safer-buffer "~2.1.0" - -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@^1.1.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/assert/-/assert-1.4.1.tgz#99912d591836b5a6f5b345c0f07eefc08fc65d91" - dependencies: - util "0.10.3" - -assign-symbols@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" - -ast-types-flow@0.0.7, ast-types-flow@^0.0.7: - version "0.0.7" - resolved "https://registry.yarnpkg.com/ast-types-flow/-/ast-types-flow-0.0.7.tgz#f70b735c6bca1a5c9c22d982c3e39e7feba3bdad" - -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.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.1.tgz#19d386a1d9edc6e7c1c85d388aedbcc56d33602d" - -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.5.2: - version "1.5.2" - resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" - -async@^2.1.4, async@^2.6.1: - version "2.6.1" - resolved "https://registry.yarnpkg.com/async/-/async-2.6.1.tgz#b245a23ca71930044ec53fa46aa00a3e87c6a610" - dependencies: - lodash "^4.17.10" - -asynckit@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" - -atob@^2.1.1: - version "2.1.2" - resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" - -autoprefixer@^6.3.1: - version "6.7.7" - resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-6.7.7.tgz#1dbd1c835658e35ce3f9984099db00585c782014" - dependencies: - browserslist "^1.7.6" - caniuse-db "^1.0.30000634" - normalize-range "^0.1.2" - num2fraction "^1.2.2" - postcss "^5.2.16" - postcss-value-parser "^3.2.3" - -autoprefixer@^9.0.0: - version "9.4.2" - resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-9.4.2.tgz#0234d20900684fc4bfb67926493deb68384067f5" - dependencies: - browserslist "^4.3.5" - caniuse-lite "^1.0.30000914" - normalize-range "^0.1.2" - num2fraction "^1.2.2" - postcss "^7.0.6" - postcss-value-parser "^3.3.1" - -autoprefixer@^9.3.1: - version "9.4.3" - resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-9.4.3.tgz#c97384a8fd80477b78049163a91bbc725d9c41d9" - dependencies: - browserslist "^4.3.6" - caniuse-lite "^1.0.30000921" - normalize-range "^0.1.2" - num2fraction "^1.2.2" - postcss "^7.0.6" - postcss-value-parser "^3.3.1" - -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.8.0: - version "1.8.0" - resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.8.0.tgz#f0e003d9ca9e7f59c7a508945d7b2ef9a04a542f" - -axobject-query@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-2.0.2.tgz#ea187abe5b9002b377f925d8bf7d1c561adf38f9" - dependencies: - ast-types-flow "0.0.7" - -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@7.0.0-bridge.0: - version "7.0.0-bridge.0" - resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-7.0.0-bridge.0.tgz#95a492ddd90f9b4e9a4a1da14eb335b87b634ece" - -babel-core@^6.0.0, babel-core@^6.26.0: - version "6.26.3" - resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.26.3.tgz#b2e2f09e342d0f0c88e2f02e067794125e75c207" - 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.1" - debug "^2.6.9" - json5 "^0.5.1" - lodash "^4.17.4" - minimatch "^3.0.4" - path-is-absolute "^1.0.1" - private "^0.1.8" - slash "^1.0.0" - source-map "^0.5.7" - -babel-eslint@9.0.0, babel-eslint@^9.0.0: - version "9.0.0" - resolved "https://registry.yarnpkg.com/babel-eslint/-/babel-eslint-9.0.0.tgz#7d9445f81ed9f60aff38115f838970df9f2b6220" - dependencies: - "@babel/code-frame" "^7.0.0" - "@babel/parser" "^7.0.0" - "@babel/traverse" "^7.0.0" - "@babel/types" "^7.0.0" - eslint-scope "3.7.1" - eslint-visitor-keys "^1.0.0" - -babel-extract-comments@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/babel-extract-comments/-/babel-extract-comments-1.0.0.tgz#0a2aedf81417ed391b85e18b4614e693a0351a21" - dependencies: - babylon "^6.18.0" - -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.6.0, babel-jest@^23.6.0: - version "23.6.0" - resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-23.6.0.tgz#a644232366557a2240a0c083da6b25786185a2f1" - dependencies: - babel-plugin-istanbul "^4.1.6" - babel-preset-jest "^23.2.0" - -babel-loader@8.0.4: - version "8.0.4" - resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-8.0.4.tgz#7bbf20cbe4560629e2e41534147692d3fecbdce6" - dependencies: - find-cache-dir "^1.0.0" - loader-utils "^1.0.2" - mkdirp "^0.5.1" - util.promisify "^1.0.0" - -babel-messages@^6.23.0: - version "6.23.0" - resolved "https://registry.yarnpkg.com/babel-messages/-/babel-messages-6.23.0.tgz#f3cdf4703858035b2a2951c6ec5edf6c62f2630e" - dependencies: - babel-runtime "^6.22.0" - -babel-plugin-dynamic-import-node@2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.2.0.tgz#c0adfb07d95f4a4495e9aaac6ec386c4d7c2524e" - dependencies: - object.assign "^4.1.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" - 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-macros@2.4.2: - version "2.4.2" - resolved "https://registry.yarnpkg.com/babel-plugin-macros/-/babel-plugin-macros-2.4.2.tgz#21b1a2e82e2130403c5ff785cba6548e9b644b28" - dependencies: - cosmiconfig "^5.0.5" - resolve "^1.8.1" - -babel-plugin-named-asset-import@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/babel-plugin-named-asset-import/-/babel-plugin-named-asset-import-0.3.0.tgz#3289ec622d19cd1cc84df8d784b41f1b048bd524" - -babel-plugin-syntax-object-rest-spread@^6.13.0, babel-plugin-syntax-object-rest-spread@^6.8.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" - -babel-plugin-transform-object-rest-spread@^6.26.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-object-rest-spread/-/babel-plugin-transform-object-rest-spread-6.26.0.tgz#0f36692d50fef6b7e2d4b3ac1478137a963b7b06" - dependencies: - babel-plugin-syntax-object-rest-spread "^6.8.0" - babel-runtime "^6.26.0" - -babel-plugin-transform-react-remove-prop-types@0.4.20: - version "0.4.20" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-remove-prop-types/-/babel-plugin-transform-react-remove-prop-types-0.4.20.tgz#688bdea1e27ea0023775dea817fa2d3f8df8802b" - -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-preset-react-app@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/babel-preset-react-app/-/babel-preset-react-app-7.0.0.tgz#86bf71e43cb8d36e40da69f8b4ad5d6f945dec93" - dependencies: - "@babel/core" "7.1.6" - "@babel/plugin-proposal-class-properties" "7.1.0" - "@babel/plugin-proposal-decorators" "7.1.6" - "@babel/plugin-proposal-object-rest-spread" "7.0.0" - "@babel/plugin-syntax-dynamic-import" "7.0.0" - "@babel/plugin-transform-classes" "7.1.0" - "@babel/plugin-transform-destructuring" "7.1.3" - "@babel/plugin-transform-flow-strip-types" "7.1.6" - "@babel/plugin-transform-react-constant-elements" "7.0.0" - "@babel/plugin-transform-react-display-name" "7.0.0" - "@babel/plugin-transform-runtime" "7.1.0" - "@babel/preset-env" "7.1.6" - "@babel/preset-react" "7.0.0" - "@babel/preset-typescript" "7.1.0" - "@babel/runtime" "7.1.5" - babel-loader "8.0.4" - babel-plugin-dynamic-import-node "2.2.0" - babel-plugin-macros "2.4.2" - babel-plugin-transform-react-remove-prop-types "0.4.20" - -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.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" - dependencies: - babel-runtime "^6.26.0" - esutils "^2.0.2" - lodash "^4.17.4" - to-fast-properties "^1.0.3" - -babylon@^6.18.0: - version "6.18.0" - resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.18.0.tgz#af2f3b88fa6f5c1e4c634d1a0f8eac4f55b395e3" - -bail@^1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/bail/-/bail-1.0.3.tgz#63cfb9ddbac829b02a3128cd53224be78e6c21a3" - -balanced-match@^0.4.2: - version "0.4.2" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-0.4.2.tgz#cb3f3e3c732dc0f01ee70b403f302e61d7709838" - -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" - -base@^0.11.1: - version "0.11.2" - resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" - dependencies: - cache-base "^1.0.1" - class-utils "^0.3.5" - component-emitter "^1.2.1" - define-property "^1.0.0" - isobject "^3.0.1" - mixin-deep "^1.2.0" - pascalcase "^0.1.1" - -batch@0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/batch/-/batch-0.6.1.tgz#dc34314f4e679318093fc760272525f94bf25c16" - -bcrypt-pbkdf@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" - dependencies: - tweetnacl "^0.14.3" - -bfj@6.1.1: - version "6.1.1" - resolved "https://registry.yarnpkg.com/bfj/-/bfj-6.1.1.tgz#05a3b7784fbd72cfa3c22e56002ef99336516c48" - dependencies: - bluebird "^3.5.1" - check-types "^7.3.0" - hoopy "^0.1.2" - tryer "^1.0.0" - -big.js@^3.1.3: - version "3.2.0" - resolved "https://registry.yarnpkg.com/big.js/-/big.js-3.2.0.tgz#a5fc298b81b9e0dca2e458824784b65c52ba588e" - -binary-extensions@^1.0.0: - version "1.12.0" - resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.12.0.tgz#c2d780f53d45bba8317a8902d4ceeaf3a6385b14" - -bl@~0.8.1: - version "0.8.2" - resolved "https://registry.yarnpkg.com/bl/-/bl-0.8.2.tgz#c9b6bca08d1bc2ea00fc8afb4f1a5fd1e1c66e4e" - dependencies: - readable-stream "~1.0.26" - -bluebird@^3.5.1: - version "3.5.3" - resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.3.tgz#7d01c6f9616c9a51ab0f8c549a79dfe6ec33efa7" - -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" - -body-parser@1.18.3: - version "1.18.3" - resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.18.3.tgz#5b292198ffdd553b3a0f20ded0592b956955c8b4" - dependencies: - bytes "3.0.0" - content-type "~1.0.4" - debug "2.6.9" - depd "~1.1.2" - http-errors "~1.6.3" - iconv-lite "0.4.23" - on-finished "~2.3.0" - qs "6.5.2" - raw-body "2.3.3" - type-is "~1.6.16" - -bonjour@^3.5.0: - version "3.5.0" - resolved "https://registry.yarnpkg.com/bonjour/-/bonjour-3.5.0.tgz#8e890a183d8ee9a2393b3844c691a42bcf7bc9f5" - dependencies: - array-flatten "^2.1.0" - deep-equal "^1.0.1" - dns-equal "^1.0.0" - dns-txt "^2.0.2" - multicast-dns "^6.0.1" - multicast-dns-service-types "^1.1.0" - -boolbase@^1.0.0, boolbase@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" - -brace-expansion@^1.1.7: - version "1.1.11" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" - dependencies: - balanced-match "^1.0.0" - concat-map "0.0.1" - -braces@^1.8.2: - version "1.8.5" - resolved "https://registry.yarnpkg.com/braces/-/braces-1.8.5.tgz#ba77962e12dff969d6b76711e914b737857bf6a7" - dependencies: - expand-range "^1.8.1" - preserve "^0.2.0" - repeat-element "^1.1.2" - -braces@^2.3.0, braces@^2.3.1: - version "2.3.2" - resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" - 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" - -brorand@^1.0.1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" - -browser-process-hrtime@^0.1.2: - version "0.1.3" - resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-0.1.3.tgz#616f00faef1df7ec1b5bf9cfe2bdc3170f26c7b4" - -browser-resolve@^1.11.3: - version "1.11.3" - resolved "https://registry.yarnpkg.com/browser-resolve/-/browser-resolve-1.11.3.tgz#9b7cbb3d0f510e4cb86bdbd796124d28b5890af6" - dependencies: - resolve "1.1.7" - -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" - 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" - 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" - dependencies: - cipher-base "^1.0.1" - des.js "^1.0.0" - inherits "^2.0.1" - safe-buffer "^5.1.2" - -browserify-fs@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/browserify-fs/-/browserify-fs-1.0.0.tgz#f075aa8a729d4d1716d066620e386fcc1311a96f" - dependencies: - level-filesystem "^1.0.1" - level-js "^2.1.3" - levelup "^0.18.2" - -browserify-rsa@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.0.1.tgz#21e0abfaf6f2029cf2fafb133567a701d4135524" - 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" - 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" - dependencies: - pako "~1.0.5" - -browserslist@4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.1.1.tgz#328eb4ff1215b12df6589e9ab82f8adaa4fc8cd6" - dependencies: - caniuse-lite "^1.0.30000884" - electron-to-chromium "^1.3.62" - node-releases "^1.0.0-alpha.11" - -browserslist@^1.3.6, browserslist@^1.5.2, browserslist@^1.7.6: - version "1.7.7" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-1.7.7.tgz#0bd76704258be829b2398bb50e4b62d1a166b0b9" - dependencies: - caniuse-db "^1.0.30000639" - electron-to-chromium "^1.2.7" - -browserslist@^4.0.0, browserslist@^4.1.0, browserslist@^4.3.4, browserslist@^4.3.5: - version "4.3.5" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.3.5.tgz#1a917678acc07b55606748ea1adf9846ea8920f7" - dependencies: - caniuse-lite "^1.0.30000912" - electron-to-chromium "^1.3.86" - node-releases "^1.0.5" - -browserslist@^4.3.6: - version "4.3.6" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.3.6.tgz#0f9d9081afc66b36f477c6bdf3813f784f42396a" - dependencies: - caniuse-lite "^1.0.30000921" - electron-to-chromium "^1.3.92" - node-releases "^1.1.1" - -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-es6@^4.9.2: - version "4.9.3" - resolved "https://registry.yarnpkg.com/buffer-es6/-/buffer-es6-4.9.3.tgz#f26347b82df76fd37e18bcb5288c4970cfd5c404" - -buffer-from@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" - -buffer-indexof@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/buffer-indexof/-/buffer-indexof-1.1.1.tgz#52fabcc6a606d1a00302802648ef68f639da268c" - -buffer-xor@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" - -buffer@^4.3.0: - version "4.9.1" - resolved "https://registry.yarnpkg.com/buffer/-/buffer-4.9.1.tgz#6d1bb601b07a4efced97094132093027c95bc298" - dependencies: - base64-js "^1.0.2" - ieee754 "^1.1.4" - isarray "^1.0.0" - -builtin-modules@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" - -builtin-modules@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-3.0.0.tgz#1e587d44b006620d90286cc7a9238bbc6129cab1" - -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" - -bytes@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" - -cacache@^10.0.4: - version "10.0.4" - resolved "https://registry.yarnpkg.com/cacache/-/cacache-10.0.4.tgz#6452367999eff9d4188aefd9a14e9d7c6a263460" - dependencies: - bluebird "^3.5.1" - chownr "^1.0.1" - glob "^7.1.2" - graceful-fs "^4.1.11" - lru-cache "^4.1.1" - mississippi "^2.0.0" - mkdirp "^0.5.1" - move-concurrently "^1.0.1" - promise-inflight "^1.0.1" - rimraf "^2.6.2" - ssri "^5.2.4" - unique-filename "^1.1.0" - y18n "^4.0.0" - -cacache@^11.0.2: - version "11.3.1" - resolved "https://registry.yarnpkg.com/cacache/-/cacache-11.3.1.tgz#d09d25f6c4aca7a6d305d141ae332613aa1d515f" - dependencies: - bluebird "^3.5.1" - chownr "^1.0.1" - figgy-pudding "^3.1.0" - glob "^7.1.2" - graceful-fs "^4.1.11" - lru-cache "^4.1.3" - mississippi "^3.0.0" - mkdirp "^0.5.1" - move-concurrently "^1.0.1" - promise-inflight "^1.0.1" - rimraf "^2.6.2" - ssri "^6.0.0" - unique-filename "^1.1.0" - 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" - dependencies: - collection-visit "^1.0.0" - component-emitter "^1.2.1" - get-value "^2.0.6" - has-value "^1.0.0" - isobject "^3.0.1" - set-value "^2.0.0" - to-object-path "^0.3.0" - union-value "^1.0.0" - unset-value "^1.0.0" - -call-me-maybe@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/call-me-maybe/-/call-me-maybe-1.0.1.tgz#26d208ea89e37b5cbde60250a15f031c16a4d66b" - -caller-callsite@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/caller-callsite/-/caller-callsite-2.0.0.tgz#847e0fce0a223750a9a027c54b33731ad3154134" - dependencies: - callsites "^2.0.0" - -caller-path@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-0.1.0.tgz#94085ef63581ecd3daa92444a8fe94e82577751f" - dependencies: - callsites "^0.2.0" - -caller-path@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-2.0.0.tgz#468f83044e369ab2010fac5f06ceee15bb2cb1f4" - dependencies: - caller-callsite "^2.0.0" - -callsites@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/callsites/-/callsites-0.2.0.tgz#afab96262910a7f33c19a5775825c69f34e350ca" - -callsites@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/callsites/-/callsites-2.0.0.tgz#06eb84f00eea413da86affefacbffb36093b3c50" - -camel-case@3.0.x: - version "3.0.0" - resolved "https://registry.yarnpkg.com/camel-case/-/camel-case-3.0.0.tgz#ca3c3688a4e9cf3a4cda777dc4dcbc713249cf73" - dependencies: - no-case "^2.2.0" - upper-case "^1.1.1" - -camelcase-keys@^4.0.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-4.2.0.tgz#a2aa5fb1af688758259c32c141426d78923b9b77" - dependencies: - camelcase "^4.1.0" - map-obj "^2.0.0" - quick-lru "^1.0.0" - -camelcase@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd" - -camelcase@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.0.0.tgz#03295527d58bd3cd4aa75363f35b2e8d97be2f42" - -caniuse-api@^1.5.2: - version "1.6.1" - resolved "https://registry.yarnpkg.com/caniuse-api/-/caniuse-api-1.6.1.tgz#b534e7c734c4f81ec5fbe8aca2ad24354b962c6c" - dependencies: - browserslist "^1.3.6" - caniuse-db "^1.0.30000529" - lodash.memoize "^4.1.2" - lodash.uniq "^4.5.0" - -caniuse-api@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/caniuse-api/-/caniuse-api-3.0.0.tgz#5e4d90e2274961d46291997df599e3ed008ee4c0" - dependencies: - browserslist "^4.0.0" - caniuse-lite "^1.0.0" - lodash.memoize "^4.1.2" - lodash.uniq "^4.5.0" - -caniuse-db@^1.0.30000529, caniuse-db@^1.0.30000634, caniuse-db@^1.0.30000639: - version "1.0.30000918" - resolved "https://registry.yarnpkg.com/caniuse-db/-/caniuse-db-1.0.30000918.tgz#650a34372ced440a79fa600644667802c6a4b9c2" - -caniuse-lite@^1.0.0, caniuse-lite@^1.0.30000884, caniuse-lite@^1.0.30000912, caniuse-lite@^1.0.30000914: - version "1.0.30000918" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000918.tgz#6288f79da3c5c8b45e502f47ad8f3eb91f1379a9" - -caniuse-lite@^1.0.30000905, caniuse-lite@^1.0.30000921: - version "1.0.30000925" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000925.tgz#f1a3b9aae2a83071b1eccfa39959d72440409b08" - -capture-exit@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/capture-exit/-/capture-exit-1.2.0.tgz#1c5fcc489fd0ab00d4f1ac7ae1072e3173fbab6f" - dependencies: - rsvp "^3.3.3" - -case-sensitive-paths-webpack-plugin@2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.1.2.tgz#c899b52175763689224571dad778742e133f0192" - -caseless@~0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" - -ccount@^1.0.0, ccount@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/ccount/-/ccount-1.0.3.tgz#f1cec43f332e2ea5a569fd46f9f5bde4e6102aff" - -chalk@2.4.1, chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.3.1, chalk@^2.4.1: - version "2.4.1" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.1.tgz#18c49ab16a037b6eb0152cc83e3471338215b66e" - dependencies: - ansi-styles "^3.2.1" - escape-string-regexp "^1.0.5" - supports-color "^5.3.0" - -chalk@^1.0.0, chalk@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" - dependencies: - ansi-styles "^2.2.1" - escape-string-regexp "^1.0.2" - has-ansi "^2.0.0" - strip-ansi "^3.0.0" - supports-color "^2.0.0" - -character-entities-html4@^1.0.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/character-entities-html4/-/character-entities-html4-1.1.2.tgz#c44fdde3ce66b52e8d321d6c1bf46101f0150610" - -character-entities-legacy@^1.0.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/character-entities-legacy/-/character-entities-legacy-1.1.2.tgz#7c6defb81648498222c9855309953d05f4d63a9c" - -character-entities@^1.0.0: - version "1.2.2" - resolved "https://registry.yarnpkg.com/character-entities/-/character-entities-1.2.2.tgz#58c8f371c0774ef0ba9b2aca5f00d8f100e6e363" - -character-reference-invalid@^1.0.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/character-reference-invalid/-/character-reference-invalid-1.1.2.tgz#21e421ad3d84055952dab4a43a04e73cd425d3ed" - -chardet@^0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" - -check-types@^7.3.0: - version "7.4.0" - resolved "https://registry.yarnpkg.com/check-types/-/check-types-7.4.0.tgz#0378ec1b9616ec71f774931a3c6516fad8c152f4" - -chokidar@^2.0.0, chokidar@^2.0.2, chokidar@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.0.4.tgz#356ff4e2b0e8e43e322d18a372460bbcf3accd26" - dependencies: - anymatch "^2.0.0" - async-each "^1.0.0" - braces "^2.3.0" - glob-parent "^3.1.0" - inherits "^2.0.1" - is-binary-path "^1.0.0" - is-glob "^4.0.0" - lodash.debounce "^4.0.8" - normalize-path "^2.1.1" - path-is-absolute "^1.0.0" - readdirp "^2.0.0" - upath "^1.0.5" - optionalDependencies: - fsevents "^1.2.2" - -chownr@^1.0.1, chownr@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.1.tgz#54726b8b8fff4df053c42187e801fb4412df1494" - -chrome-trace-event@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.0.tgz#45a91bd2c20c9411f0963b5aaeb9a1b95e09cc48" - dependencies: - tslib "^1.9.0" - -ci-info@^1.5.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-1.6.0.tgz#2ca20dbb9ceb32d4524a683303313f0304b1e497" - -ci-info@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" - -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" - dependencies: - inherits "^2.0.1" - safe-buffer "^5.0.1" - -circular-json@^0.3.1: - version "0.3.3" - resolved "https://registry.yarnpkg.com/circular-json/-/circular-json-0.3.3.tgz#815c99ea84f6809529d2f45791bdf82711352d66" - -clap@^1.0.9: - version "1.2.3" - resolved "https://registry.yarnpkg.com/clap/-/clap-1.2.3.tgz#4f36745b32008492557f46412d66d50cb99bce51" - dependencies: - chalk "^1.1.3" - -class-utils@^0.3.5: - version "0.3.6" - resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" - dependencies: - arr-union "^3.1.0" - define-property "^0.2.5" - isobject "^3.0.0" - static-extend "^0.1.1" - -clean-css@4.2.x: - version "4.2.1" - resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-4.2.1.tgz#2d411ef76b8569b6d0c84068dabe85b0aa5e5c17" - dependencies: - source-map "~0.6.0" - -cli-cursor@^2.0.0, cli-cursor@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5" - dependencies: - restore-cursor "^2.0.0" - -cli-truncate@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-0.2.1.tgz#9f15cfbb0705005369216c626ac7d05ab90dd574" - dependencies: - slice-ansi "0.0.4" - string-width "^1.0.1" - -cli-width@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.0.tgz#ff19ede8a9a5e579324147b0c11f0fbcbabed639" - -cliui@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-4.1.0.tgz#348422dbe82d800b3022eef4f6ac10bf2e4d1b49" - dependencies: - string-width "^2.1.1" - strip-ansi "^4.0.0" - wrap-ansi "^2.0.0" - -clone-deep@^0.2.4: - version "0.2.4" - resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-0.2.4.tgz#4e73dd09e9fb971cc38670c5dced9c1896481cc6" - dependencies: - for-own "^0.1.3" - is-plain-object "^2.0.1" - kind-of "^3.0.2" - lazy-cache "^1.0.3" - shallow-clone "^0.1.2" - -clone-deep@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-2.0.2.tgz#00db3a1e173656730d1188c3d6aced6d7ea97713" - dependencies: - for-own "^1.0.0" - is-plain-object "^2.0.4" - kind-of "^6.0.0" - shallow-clone "^1.0.0" - -clone-regexp@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/clone-regexp/-/clone-regexp-1.0.1.tgz#051805cd33173375d82118fc0918606da39fd60f" - dependencies: - is-regexp "^1.0.0" - is-supported-regexp-flag "^1.0.0" - -clone@^1.0.2: - version "1.0.4" - resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" - -clone@~0.1.9: - version "0.1.19" - resolved "https://registry.yarnpkg.com/clone/-/clone-0.1.19.tgz#613fb68639b26a494ac53253e15b1a6bd88ada85" - -co@^4.6.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" - -coa@~1.0.1: - version "1.0.4" - resolved "https://registry.yarnpkg.com/coa/-/coa-1.0.4.tgz#a9ef153660d6a86a8bdec0289a5c684d217432fd" - dependencies: - q "^1.1.2" - -coa@~2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/coa/-/coa-2.0.1.tgz#f3f8b0b15073e35d70263fb1042cb2c023db38af" - dependencies: - q "^1.1.2" - -code-point-at@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" - -collapse-white-space@^1.0.2: - version "1.0.4" - resolved "https://registry.yarnpkg.com/collapse-white-space/-/collapse-white-space-1.0.4.tgz#ce05cf49e54c3277ae573036a26851ba430a0091" - -collection-visit@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" - dependencies: - map-visit "^1.0.0" - object-visit "^1.0.0" - -color-convert@^1.3.0, color-convert@^1.9.0, color-convert@^1.9.1: - version "1.9.3" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" - dependencies: - color-name "1.1.3" - -color-name@1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" - -color-name@^1.0.0: - version "1.1.4" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" - -color-string@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/color-string/-/color-string-0.3.0.tgz#27d46fb67025c5c2fa25993bfbf579e47841b991" - dependencies: - color-name "^1.0.0" - -color-string@^1.5.2: - version "1.5.3" - resolved "https://registry.yarnpkg.com/color-string/-/color-string-1.5.3.tgz#c9bbc5f01b58b5492f3d6857459cb6590ce204cc" - dependencies: - color-name "^1.0.0" - simple-swizzle "^0.2.2" - -color@^0.11.0: - version "0.11.4" - resolved "https://registry.yarnpkg.com/color/-/color-0.11.4.tgz#6d7b5c74fb65e841cd48792ad1ed5e07b904d764" - dependencies: - clone "^1.0.2" - color-convert "^1.3.0" - color-string "^0.3.0" - -color@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/color/-/color-3.1.0.tgz#d8e9fb096732875774c84bf922815df0308d0ffc" - dependencies: - color-convert "^1.9.1" - color-string "^1.5.2" - -colormin@^1.0.5: - version "1.1.2" - resolved "https://registry.yarnpkg.com/colormin/-/colormin-1.1.2.tgz#ea2f7420a72b96881a38aae59ec124a6f7298133" - dependencies: - color "^0.11.0" - css-color-names "0.0.4" - has "^1.0.1" - -colors@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/colors/-/colors-1.1.2.tgz#168a4701756b6a7f51a12ce0c97bfa28c084ed63" - -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" - dependencies: - delayed-stream "~1.0.0" - -comma-separated-tokens@^1.0.0: - version "1.0.5" - resolved "https://registry.yarnpkg.com/comma-separated-tokens/-/comma-separated-tokens-1.0.5.tgz#b13793131d9ea2d2431cf5b507ddec258f0ce0db" - dependencies: - trim "0.0.1" - -commander@2.17.x, commander@~2.17.1: - version "2.17.1" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.17.1.tgz#bd77ab7de6de94205ceacc72f1716d29f20a77bf" - -commander@^2.11.0, commander@^2.14.1, commander@^2.18.0, commander@^2.9.0: - version "2.19.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.19.0.tgz#f6198aa84e5b83c46054b94ddedbfed5ee9ff12a" - -commander@~2.13.0: - version "2.13.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.13.0.tgz#6964bca67685df7c1f1430c584f07d7597885b9c" - -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" - -commondir@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" - -component-emitter@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.2.1.tgz#137918d6d78283f7df7a6b7c5a63e140e69425e6" - -compressible@~2.0.14: - version "2.0.15" - resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.15.tgz#857a9ab0a7e5a07d8d837ed43fe2defff64fe212" - dependencies: - mime-db ">= 1.36.0 < 2" - -compression@^1.5.2: - version "1.7.3" - resolved "https://registry.yarnpkg.com/compression/-/compression-1.7.3.tgz#27e0e176aaf260f7f2c2813c3e440adb9f1993db" - dependencies: - accepts "~1.3.5" - bytes "3.0.0" - compressible "~2.0.14" - debug "2.6.9" - on-headers "~1.0.1" - safe-buffer "5.1.2" - vary "~1.1.2" - -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.4.4, concat-stream@^1.5.0: - version "1.6.2" - resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" - dependencies: - buffer-from "^1.0.0" - inherits "^2.0.3" - readable-stream "^2.2.2" - typedarray "^0.0.6" - -concat-with-sourcemaps@^1.0.5: - version "1.1.0" - resolved "https://registry.yarnpkg.com/concat-with-sourcemaps/-/concat-with-sourcemaps-1.1.0.tgz#d4ea93f05ae25790951b99e7b3b09e3908a4082e" - dependencies: - source-map "^0.6.1" - -confusing-browser-globals@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/confusing-browser-globals/-/confusing-browser-globals-1.0.5.tgz#0171050cfdd4261e278978078bc00c4d88e135f4" - -connect-history-api-fallback@^1.3.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/connect-history-api-fallback/-/connect-history-api-fallback-1.5.0.tgz#b06873934bc5e344fef611a196a6faae0aee015a" - -console-browserify@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.1.0.tgz#f0241c45730a9fc6323b206dbf38edc741d0bb10" - 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" - -constants-browserify@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75" - -contains-path@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/contains-path/-/contains-path-0.1.0.tgz#fe8cf184ff6670b6baef01a9d4861a5cbec4120a" - -content-disposition@0.5.2: - version "0.5.2" - resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.2.tgz#0cf68bb9ddf5f2be7961c3a85178cb85dba78cb4" - -content-type@~1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" - -convert-source-map@^1.1.0, convert-source-map@^1.4.0, convert-source-map@^1.5.1: - version "1.6.0" - resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.6.0.tgz#51b537a8c43e0f04dec1993bffcdd504e758ac20" - dependencies: - safe-buffer "~5.1.1" - -cookie-signature@1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" - -cookie@0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.3.1.tgz#e7e0a1f9ef43b4c8ba925c5c5a96e806d16873bb" - -copy-concurrently@^1.0.0: - version "1.0.5" - resolved "https://registry.yarnpkg.com/copy-concurrently/-/copy-concurrently-1.0.5.tgz#92297398cae34937fcafd6ec8139c18051f0b5e0" - 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.5.7: - version "2.5.7" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.5.7.tgz#f972608ff0cead68b841a16a932d0b183791814e" - -core-js@^2.4.0, core-js@^2.5.0: - version "2.6.0" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.0.tgz#1e30793e9ee5782b307e37ffa22da0eacddd84d4" - -core-util-is@1.0.2, core-util-is@~1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" - -cosmiconfig@5.0.6: - version "5.0.6" - resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-5.0.6.tgz#dca6cf680a0bd03589aff684700858c81abeeb39" - dependencies: - is-directory "^0.3.1" - js-yaml "^3.9.0" - parse-json "^4.0.0" - -cosmiconfig@^2.1.0, cosmiconfig@^2.1.1: - version "2.2.2" - resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-2.2.2.tgz#6173cebd56fac042c1f4390edf7af6c07c7cb892" - dependencies: - is-directory "^0.3.1" - js-yaml "^3.4.3" - minimist "^1.2.0" - object-assign "^4.1.0" - os-homedir "^1.0.1" - parse-json "^2.2.0" - require-from-string "^1.1.0" - -cosmiconfig@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-4.0.0.tgz#760391549580bbd2df1e562bc177b13c290972dc" - dependencies: - is-directory "^0.3.1" - js-yaml "^3.9.0" - parse-json "^4.0.0" - require-from-string "^2.0.1" - -cosmiconfig@^5.0.0, cosmiconfig@^5.0.5, cosmiconfig@^5.0.6, cosmiconfig@^5.0.7: - version "5.0.7" - resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-5.0.7.tgz#39826b292ee0d78eda137dfa3173bd1c21a43b04" - dependencies: - import-fresh "^2.0.0" - is-directory "^0.3.1" - js-yaml "^3.9.0" - parse-json "^4.0.0" - -create-ecdh@^4.0.0: - version "4.0.3" - resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.3.tgz#c9111b6f33045c4697f144787f9254cdc77c45ff" - 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" - 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" - 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-env@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/cross-env/-/cross-env-5.2.0.tgz#6ecd4c015d5773e614039ee529076669b9d126f2" - dependencies: - cross-spawn "^6.0.5" - is-windows "^1.0.0" - -cross-spawn@6.0.5, 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" - dependencies: - nice-try "^1.0.4" - path-key "^2.0.1" - semver "^5.5.0" - shebang-command "^1.2.0" - which "^1.2.9" - -cross-spawn@^5.0.1: - version "5.1.0" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" - dependencies: - lru-cache "^4.0.1" - shebang-command "^1.2.0" - which "^1.2.9" - -crypto-browserify@^3.11.0: - version "3.12.0" - resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec" - 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" - -css-color-names@0.0.4, css-color-names@^0.0.4: - version "0.0.4" - resolved "https://registry.yarnpkg.com/css-color-names/-/css-color-names-0.0.4.tgz#808adc2e79cf84738069b646cb20ec27beb629e0" - -css-declaration-sorter@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/css-declaration-sorter/-/css-declaration-sorter-4.0.1.tgz#c198940f63a76d7e36c1e71018b001721054cb22" - dependencies: - postcss "^7.0.1" - timsort "^0.3.0" - -css-loader@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-1.0.0.tgz#9f46aaa5ca41dbe31860e3b62b8e23c42916bf56" - dependencies: - babel-code-frame "^6.26.0" - css-selector-tokenizer "^0.7.0" - icss-utils "^2.1.0" - loader-utils "^1.0.2" - lodash.camelcase "^4.3.0" - postcss "^6.0.23" - postcss-modules-extract-imports "^1.2.0" - postcss-modules-local-by-default "^1.2.0" - postcss-modules-scope "^1.1.0" - postcss-modules-values "^1.3.0" - postcss-value-parser "^3.3.0" - source-list-map "^2.0.0" - -css-modules-loader-core@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/css-modules-loader-core/-/css-modules-loader-core-1.1.0.tgz#5908668294a1becd261ae0a4ce21b0b551f21d16" - dependencies: - icss-replace-symbols "1.1.0" - postcss "6.0.1" - postcss-modules-extract-imports "1.1.0" - postcss-modules-local-by-default "1.2.0" - postcss-modules-scope "1.1.0" - postcss-modules-values "1.3.0" - -css-parse@1.7.x: - version "1.7.0" - resolved "https://registry.yarnpkg.com/css-parse/-/css-parse-1.7.0.tgz#321f6cf73782a6ff751111390fc05e2c657d8c9b" - -css-select-base-adapter@~0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz#3b2ff4972cc362ab88561507a95408a1432135d7" - -css-select@^1.1.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/css-select/-/css-select-1.2.0.tgz#2b3a110539c5355f1cd8d314623e870b121ec858" - dependencies: - boolbase "~1.0.0" - css-what "2.1" - domutils "1.5.1" - nth-check "~1.0.1" - -css-select@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/css-select/-/css-select-2.0.2.tgz#ab4386cec9e1f668855564b17c3733b43b2a5ede" - dependencies: - boolbase "^1.0.0" - css-what "^2.1.2" - domutils "^1.7.0" - nth-check "^1.0.2" - -css-selector-tokenizer@^0.7.0: - version "0.7.1" - resolved "https://registry.yarnpkg.com/css-selector-tokenizer/-/css-selector-tokenizer-0.7.1.tgz#a177271a8bca5019172f4f891fc6eed9cbf68d5d" - dependencies: - cssesc "^0.1.0" - fastparse "^1.1.1" - regexpu-core "^1.0.0" - -css-tree@1.0.0-alpha.28: - version "1.0.0-alpha.28" - resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.0.0-alpha.28.tgz#8e8968190d886c9477bc8d61e96f61af3f7ffa7f" - dependencies: - mdn-data "~1.1.0" - source-map "^0.5.3" - -css-tree@1.0.0-alpha.29: - version "1.0.0-alpha.29" - resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.0.0-alpha.29.tgz#3fa9d4ef3142cbd1c301e7664c1f352bd82f5a39" - dependencies: - mdn-data "~1.1.0" - source-map "^0.5.3" - -css-unit-converter@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/css-unit-converter/-/css-unit-converter-1.1.1.tgz#d9b9281adcfd8ced935bdbaba83786897f64e996" - -css-url-regex@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/css-url-regex/-/css-url-regex-1.1.0.tgz#83834230cc9f74c457de59eebd1543feeb83b7ec" - -css-what@2.1, css-what@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/css-what/-/css-what-2.1.2.tgz#c0876d9d0480927d7d4920dcd72af3595649554d" - -cssdb@^4.1.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/cssdb/-/cssdb-4.3.0.tgz#2e1229900616f80c66ff2d568ea2b4f92db1c78c" - -cssesc@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-0.1.0.tgz#c814903e45623371a0477b40109aaafbeeaddbb4" - -cssesc@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-2.0.0.tgz#3b13bd1bb1cb36e1bcb5a4dcd27f54c5dcb35703" - -cssnano-preset-default@^4.0.5: - version "4.0.5" - resolved "https://registry.yarnpkg.com/cssnano-preset-default/-/cssnano-preset-default-4.0.5.tgz#d1756c0259d98ad311e601ba76e95c60f6771ac1" - dependencies: - css-declaration-sorter "^4.0.1" - cssnano-util-raw-cache "^4.0.1" - postcss "^7.0.0" - postcss-calc "^7.0.0" - postcss-colormin "^4.0.2" - postcss-convert-values "^4.0.1" - postcss-discard-comments "^4.0.1" - postcss-discard-duplicates "^4.0.2" - postcss-discard-empty "^4.0.1" - postcss-discard-overridden "^4.0.1" - postcss-merge-longhand "^4.0.9" - postcss-merge-rules "^4.0.2" - postcss-minify-font-values "^4.0.2" - postcss-minify-gradients "^4.0.1" - postcss-minify-params "^4.0.1" - postcss-minify-selectors "^4.0.1" - postcss-normalize-charset "^4.0.1" - postcss-normalize-display-values "^4.0.1" - postcss-normalize-positions "^4.0.1" - postcss-normalize-repeat-style "^4.0.1" - postcss-normalize-string "^4.0.1" - postcss-normalize-timing-functions "^4.0.1" - postcss-normalize-unicode "^4.0.1" - postcss-normalize-url "^4.0.1" - postcss-normalize-whitespace "^4.0.1" - postcss-ordered-values "^4.1.1" - postcss-reduce-initial "^4.0.2" - postcss-reduce-transforms "^4.0.1" - postcss-svgo "^4.0.1" - postcss-unique-selectors "^4.0.1" - -cssnano-util-get-arguments@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/cssnano-util-get-arguments/-/cssnano-util-get-arguments-4.0.0.tgz#ed3a08299f21d75741b20f3b81f194ed49cc150f" - -cssnano-util-get-match@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/cssnano-util-get-match/-/cssnano-util-get-match-4.0.0.tgz#c0e4ca07f5386bb17ec5e52250b4f5961365156d" - -cssnano-util-raw-cache@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/cssnano-util-raw-cache/-/cssnano-util-raw-cache-4.0.1.tgz#b26d5fd5f72a11dfe7a7846fb4c67260f96bf282" - dependencies: - postcss "^7.0.0" - -cssnano-util-same-parent@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/cssnano-util-same-parent/-/cssnano-util-same-parent-4.0.1.tgz#574082fb2859d2db433855835d9a8456ea18bbf3" - -cssnano@^3.10.0: - version "3.10.0" - resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-3.10.0.tgz#4f38f6cea2b9b17fa01490f23f1dc68ea65c1c38" - dependencies: - autoprefixer "^6.3.1" - decamelize "^1.1.2" - defined "^1.0.0" - has "^1.0.1" - object-assign "^4.0.1" - postcss "^5.0.14" - postcss-calc "^5.2.0" - postcss-colormin "^2.1.8" - postcss-convert-values "^2.3.4" - postcss-discard-comments "^2.0.4" - postcss-discard-duplicates "^2.0.1" - postcss-discard-empty "^2.0.1" - postcss-discard-overridden "^0.1.1" - postcss-discard-unused "^2.2.1" - postcss-filter-plugins "^2.0.0" - postcss-merge-idents "^2.1.5" - postcss-merge-longhand "^2.0.1" - postcss-merge-rules "^2.0.3" - postcss-minify-font-values "^1.0.2" - postcss-minify-gradients "^1.0.1" - postcss-minify-params "^1.0.4" - postcss-minify-selectors "^2.0.4" - postcss-normalize-charset "^1.1.0" - postcss-normalize-url "^3.0.7" - postcss-ordered-values "^2.1.0" - postcss-reduce-idents "^2.2.2" - postcss-reduce-initial "^1.0.0" - postcss-reduce-transforms "^1.0.3" - postcss-svgo "^2.1.1" - postcss-unique-selectors "^2.0.2" - postcss-value-parser "^3.2.3" - postcss-zindex "^2.0.1" - -cssnano@^4.1.0: - version "4.1.7" - resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-4.1.7.tgz#0bf112294bec103ab5f68d3f805732c8325a0b1b" - dependencies: - cosmiconfig "^5.0.0" - cssnano-preset-default "^4.0.5" - is-resolvable "^1.0.0" - postcss "^7.0.0" - -csso@^3.5.0: - version "3.5.1" - resolved "https://registry.yarnpkg.com/csso/-/csso-3.5.1.tgz#7b9eb8be61628973c1b261e169d2f024008e758b" - dependencies: - css-tree "1.0.0-alpha.29" - -csso@~2.3.1: - version "2.3.2" - resolved "https://registry.yarnpkg.com/csso/-/csso-2.3.2.tgz#ddd52c587033f49e94b71fc55569f252e8ff5f85" - dependencies: - clap "^1.0.9" - source-map "^0.5.3" - -cssom@0.3.x, "cssom@>= 0.3.2 < 0.4.0", cssom@^0.3.4: - version "0.3.4" - resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.4.tgz#8cd52e8a3acfd68d3aed38ee0a640177d2f9d797" - -cssstyle@^1.0.0, cssstyle@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-1.1.1.tgz#18b038a9c44d65f7a8e428a653b9f6fe42faf5fb" - dependencies: - cssom "0.3.x" - -currently-unhandled@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/currently-unhandled/-/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea" - dependencies: - array-find-index "^1.0.1" - -cyclist@~0.2.2: - version "0.2.2" - resolved "https://registry.yarnpkg.com/cyclist/-/cyclist-0.2.2.tgz#1b33792e11e914a2fd6d6ed6447464444e5fa640" - -damerau-levenshtein@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/damerau-levenshtein/-/damerau-levenshtein-1.0.4.tgz#03191c432cb6eea168bb77f3a55ffdccb8978514" - -dashdash@^1.12.0: - version "1.14.1" - resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" - dependencies: - assert-plus "^1.0.0" - -data-urls@^1.0.0, data-urls@^1.0.1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-1.1.0.tgz#15ee0582baa5e22bb59c77140da8f9c76963bbfe" - dependencies: - abab "^2.0.0" - whatwg-mimetype "^2.2.0" - whatwg-url "^7.0.0" - -date-fns@^1.27.2: - version "1.29.0" - resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-1.29.0.tgz#12e609cdcb935127311d04d33334e2960a2a54e6" - -date-now@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/date-now/-/date-now-0.1.4.tgz#eaf439fd4d4848ad74e5cc7dbef200672b9e345b" - -debug@*, debug@^4.0.0, debug@^4.0.1, debug@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.0.tgz#373687bffa678b38b1cd91f861b63850035ddc87" - dependencies: - ms "^2.1.1" - -debug@2.6.9, debug@^2.1.2, debug@^2.2.0, debug@^2.3.3, debug@^2.6.0, debug@^2.6.6, debug@^2.6.8, debug@^2.6.9: - version "2.6.9" - resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" - dependencies: - ms "2.0.0" - -debug@=3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" - dependencies: - ms "2.0.0" - -debug@^3.1.0: - version "3.2.6" - resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" - dependencies: - ms "^2.1.1" - -decamelize-keys@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/decamelize-keys/-/decamelize-keys-1.1.0.tgz#d171a87933252807eb3cb61dc1c1445d078df2d9" - dependencies: - decamelize "^1.1.0" - map-obj "^1.0.0" - -decamelize@^1.1.0, decamelize@^1.1.1, decamelize@^1.1.2: - version "1.2.0" - resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" - -decamelize@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-2.0.0.tgz#656d7bbc8094c4c788ea53c5840908c9c7d063c7" - dependencies: - xregexp "4.0.0" - -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" - -dedent@^0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c" - -deep-equal@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.0.1.tgz#f5d260292b660e084eff4cdbc9f08ad3247448b5" - -deep-extend@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" - -deep-is@~0.1.3: - version "0.1.3" - resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" - -default-gateway@^2.6.0: - version "2.7.2" - resolved "https://registry.yarnpkg.com/default-gateway/-/default-gateway-2.7.2.tgz#b7ef339e5e024b045467af403d50348db4642d0f" - dependencies: - execa "^0.10.0" - ip-regex "^2.1.0" - -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" - dependencies: - strip-bom "^2.0.0" - -deferred-leveldown@~0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/deferred-leveldown/-/deferred-leveldown-0.2.0.tgz#2cef1f111e1c57870d8bbb8af2650e587cd2f5b4" - dependencies: - abstract-leveldown "~0.12.1" - -define-properties@^1.1.2: - version "1.1.3" - resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" - dependencies: - object-keys "^1.0.12" - -define-property@^0.2.5: - version "0.2.5" - resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116" - dependencies: - is-descriptor "^0.1.0" - -define-property@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6" - dependencies: - is-descriptor "^1.0.0" - -define-property@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d" - dependencies: - is-descriptor "^1.0.2" - isobject "^3.0.1" - -defined@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/defined/-/defined-1.0.0.tgz#c98d9bcef75674188e110969151199e39b1fa693" - -del@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/del/-/del-3.0.0.tgz#53ecf699ffcbcb39637691ab13baf160819766e5" - dependencies: - globby "^6.1.0" - is-path-cwd "^1.0.0" - is-path-in-cwd "^1.0.0" - p-map "^1.1.1" - pify "^3.0.0" - rimraf "^2.2.8" - -delayed-stream@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" - -delegates@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" - -depd@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" - -des.js@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.0.tgz#c074d2e2aa6a8a9a07dbd61f9a15c2cd83ec8ecc" - dependencies: - inherits "^2.0.1" - minimalistic-assert "^1.0.0" - -destroy@~1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" - -detect-indent@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-4.0.0.tgz#f76d064352cdf43a1cb6ce619c4ee3a9475de208" - dependencies: - repeating "^2.0.0" - -detect-libc@^1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" - -detect-newline@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-2.1.0.tgz#f41f1c10be4b00e87b5f13da680759f2c5bfd3e2" - -detect-node@^2.0.3: - version "2.0.4" - resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.0.4.tgz#014ee8f8f669c5c58023da64b8179c083a28c46c" - -detect-port-alt@1.1.6: - version "1.1.6" - resolved "https://registry.yarnpkg.com/detect-port-alt/-/detect-port-alt-1.1.6.tgz#24707deabe932d4a3cf621302027c2b266568275" - dependencies: - address "^1.0.1" - debug "^2.6.0" - -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" - dependencies: - bn.js "^4.1.0" - miller-rabin "^4.0.0" - randombytes "^2.0.0" - -dir-glob@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-2.0.0.tgz#0b205d2b6aef98238ca286598a8204d29d0a0034" - dependencies: - arrify "^1.0.1" - path-type "^3.0.0" - -dns-equal@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/dns-equal/-/dns-equal-1.0.0.tgz#b39e7f1da6eb0a75ba9c17324b34753c47e0654d" - -dns-packet@^1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/dns-packet/-/dns-packet-1.3.1.tgz#12aa426981075be500b910eedcd0b47dd7deda5a" - dependencies: - ip "^1.1.0" - safe-buffer "^5.0.1" - -dns-txt@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/dns-txt/-/dns-txt-2.0.2.tgz#b91d806f5d27188e4ab3e7d107d881a1cc4642b6" - dependencies: - buffer-indexof "^1.0.0" - -doctrine@1.5.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-1.5.0.tgz#379dce730f6166f76cefa4e6707a159b02c5a6fa" - dependencies: - esutils "^2.0.2" - isarray "^1.0.0" - -doctrine@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d" - dependencies: - esutils "^2.0.2" - -dom-converter@~0.2: - version "0.2.0" - resolved "https://registry.yarnpkg.com/dom-converter/-/dom-converter-0.2.0.tgz#6721a9daee2e293682955b6afe416771627bb768" - dependencies: - utila "~0.4" - -dom-serializer@0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.1.0.tgz#073c697546ce0780ce23be4a28e293e40bc30c82" - dependencies: - domelementtype "~1.1.1" - entities "~1.1.1" - -domain-browser@^1.1.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.2.0.tgz#3d31f50191a6749dd1375a7f522e823d42e54eda" - -domelementtype@1, domelementtype@^1.3.0: - version "1.3.1" - resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.1.tgz#d048c44b37b0d10a7f2a3d5fee3f4333d790481f" - -domelementtype@~1.1.1: - version "1.1.3" - resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.1.3.tgz#bd28773e2642881aec51544924299c5cd822185b" - -domexception@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/domexception/-/domexception-1.0.1.tgz#937442644ca6a31261ef36e3ec677fe805582c90" - dependencies: - webidl-conversions "^4.0.2" - -domhandler@2.1: - version "2.1.0" - resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.1.0.tgz#d2646f5e57f6c3bab11cf6cb05d3c0acf7412594" - dependencies: - domelementtype "1" - -domhandler@^2.3.0: - version "2.4.2" - resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.4.2.tgz#8805097e933d65e85546f726d60f5eb88b44f803" - dependencies: - domelementtype "1" - -domutils@1.1: - version "1.1.6" - resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.1.6.tgz#bddc3de099b9a2efacc51c623f28f416ecc57485" - dependencies: - domelementtype "1" - -domutils@1.5.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.5.1.tgz#dcd8488a26f563d61079e48c9f7b7e32373682cf" - dependencies: - dom-serializer "0" - domelementtype "1" - -domutils@^1.5.1, domutils@^1.7.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.7.0.tgz#56ea341e834e06e6748af7a1cb25da67ea9f8c2a" - dependencies: - dom-serializer "0" - domelementtype "1" - -dot-prop@^4.1.1: - version "4.2.0" - resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-4.2.0.tgz#1f19e0c2e1aa0e32797c49799f2837ac6af69c57" - dependencies: - is-obj "^1.0.0" - -dotenv-expand@4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/dotenv-expand/-/dotenv-expand-4.2.0.tgz#def1f1ca5d6059d24a766e587942c21106ce1275" - -dotenv@6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-6.0.0.tgz#24e37c041741c5f4b25324958ebbc34bca965935" - -duplexer@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.1.tgz#ace6ff808c1ce66b57d1ebf97977acb02334cfc1" - -duplexify@^3.4.2, duplexify@^3.6.0: - version "3.6.1" - resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.6.1.tgz#b1a7a29c4abfd639585efaecce80d666b1e34125" - dependencies: - end-of-stream "^1.0.0" - inherits "^2.0.1" - readable-stream "^2.0.0" - stream-shift "^1.0.0" - -ecc-jsbn@~0.1.1: - version "0.1.2" - resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" - dependencies: - jsbn "~0.1.0" - safer-buffer "^2.1.0" - -ee-first@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" - -electron-to-chromium@^1.2.7, electron-to-chromium@^1.3.62, electron-to-chromium@^1.3.86: - version "1.3.88" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.88.tgz#f36ab32634f49ef2b0fdc1e82e2d1cc17feb29e7" - -electron-to-chromium@^1.3.92: - version "1.3.96" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.96.tgz#25770ec99b8b07706dedf3a5f43fa50cb54c4f9a" - -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" - 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" - -email-addresses@^3.0.1: - version "3.0.3" - resolved "https://registry.yarnpkg.com/email-addresses/-/email-addresses-3.0.3.tgz#fc3c6952f68da24239914e982c8a7783bc2ed96d" - -emoji-regex@^6.5.1: - version "6.5.1" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-6.5.1.tgz#9baea929b155565c11ea41c6626eaa65cef992c2" - -emojis-list@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389" - -encodeurl@~1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" - -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" - dependencies: - once "^1.4.0" - -enhanced-resolve@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-4.1.0.tgz#41c7e0bfdfe74ac1ffe1e57ad6a5c6c9f3742a7f" - dependencies: - graceful-fs "^4.1.2" - memory-fs "^0.4.0" - tapable "^1.0.0" - -entities@^1.1.1, entities@~1.1.1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.2.tgz#bdfa735299664dfafd34529ed4f8522a275fea56" - -errno@^0.1.1, errno@^0.1.3, errno@~0.1.1, errno@~0.1.7: - version "0.1.7" - resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.7.tgz#4684d71779ad39af177e3f007996f7c67c852618" - dependencies: - prr "~1.0.1" - -error-ex@^1.2.0, error-ex@^1.3.1: - version "1.3.2" - resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" - dependencies: - is-arrayish "^0.2.1" - -es-abstract@^1.5.1, es-abstract@^1.6.1, es-abstract@^1.7.0: - version "1.12.0" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.12.0.tgz#9dbbdd27c6856f0001421ca18782d786bf8a6165" - dependencies: - es-to-primitive "^1.1.1" - function-bind "^1.1.1" - has "^1.0.1" - is-callable "^1.1.3" - is-regex "^1.0.4" - -es-to-primitive@^1.1.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.0.tgz#edf72478033456e8dda8ef09e00ad9650707f377" - dependencies: - is-callable "^1.1.4" - is-date-object "^1.0.1" - is-symbol "^1.0.2" - -escape-html@~1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" - -escape-string-regexp@1.0.5, escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.4, escape-string-regexp@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" - -escodegen@^1.11.0, escodegen@^1.9.1: - version "1.11.0" - resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.11.0.tgz#b27a9389481d5bfd5bec76f7bb1eb3f8f4556589" - dependencies: - esprima "^3.1.3" - estraverse "^4.2.0" - esutils "^2.0.2" - optionator "^0.8.1" - optionalDependencies: - source-map "~0.6.1" - -eslint-config-react-app@^3.0.6: - version "3.0.6" - resolved "https://registry.yarnpkg.com/eslint-config-react-app/-/eslint-config-react-app-3.0.6.tgz#addcae1359235941e95f3c96970b7ac8552e1130" - dependencies: - confusing-browser-globals "^1.0.5" - -eslint-import-resolver-node@^0.3.1: - version "0.3.2" - resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.2.tgz#58f15fb839b8d0576ca980413476aab2472db66a" - dependencies: - debug "^2.6.9" - resolve "^1.5.0" - -eslint-loader@2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/eslint-loader/-/eslint-loader-2.1.1.tgz#2a9251523652430bfdd643efdb0afc1a2a89546a" - dependencies: - loader-fs-cache "^1.0.0" - loader-utils "^1.0.2" - object-assign "^4.0.1" - object-hash "^1.1.4" - rimraf "^2.6.1" - -eslint-module-utils@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.2.0.tgz#b270362cd88b1a48ad308976ce7fa54e98411746" - dependencies: - debug "^2.6.8" - pkg-dir "^1.0.0" - -eslint-plugin-es@^1.3.1: - version "1.4.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-es/-/eslint-plugin-es-1.4.0.tgz#475f65bb20c993fc10e8c8fe77d1d60068072da6" - dependencies: - eslint-utils "^1.3.0" - regexpp "^2.0.1" - -eslint-plugin-flowtype@2.50.1: - version "2.50.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-flowtype/-/eslint-plugin-flowtype-2.50.1.tgz#36d4c961ac8b9e9e1dc091d3fba0537dad34ae8a" - dependencies: - lodash "^4.17.10" - -eslint-plugin-import@2.14.0, eslint-plugin-import@^2.14.0: - version "2.14.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.14.0.tgz#6b17626d2e3e6ad52cfce8807a845d15e22111a8" - dependencies: - contains-path "^0.1.0" - debug "^2.6.8" - doctrine "1.5.0" - eslint-import-resolver-node "^0.3.1" - eslint-module-utils "^2.2.0" - has "^1.0.1" - lodash "^4.17.4" - minimatch "^3.0.3" - read-pkg-up "^2.0.0" - resolve "^1.6.0" - -eslint-plugin-jsx-a11y@6.1.2: - version "6.1.2" - resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.1.2.tgz#69bca4890b36dcf0fe16dd2129d2d88b98f33f88" - dependencies: - aria-query "^3.0.0" - array-includes "^3.0.3" - ast-types-flow "^0.0.7" - axobject-query "^2.0.1" - damerau-levenshtein "^1.0.4" - emoji-regex "^6.5.1" - has "^1.0.3" - jsx-ast-utils "^2.0.1" - -eslint-plugin-node@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-node/-/eslint-plugin-node-8.0.0.tgz#fb9e8911f4543514f154bb6a5924b599aa645568" - dependencies: - eslint-plugin-es "^1.3.1" - eslint-utils "^1.3.1" - ignore "^5.0.2" - minimatch "^3.0.4" - resolve "^1.8.1" - semver "^5.5.0" - -eslint-plugin-promise@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-promise/-/eslint-plugin-promise-4.0.1.tgz#2d074b653f35a23d1ba89d8e976a985117d1c6a2" - -eslint-plugin-react@7.11.1, eslint-plugin-react@^7.11.1: - version "7.11.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.11.1.tgz#c01a7af6f17519457d6116aa94fc6d2ccad5443c" - dependencies: - array-includes "^3.0.3" - doctrine "^2.1.0" - has "^1.0.3" - jsx-ast-utils "^2.0.1" - prop-types "^15.6.2" - -eslint-scope@3.7.1: - version "3.7.1" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-3.7.1.tgz#3d63c3edfda02e06e01a452ad88caacc7cdcb6e8" - dependencies: - esrecurse "^4.1.0" - estraverse "^4.1.1" - -eslint-scope@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-4.0.0.tgz#50bf3071e9338bcdc43331794a0cb533f0136172" - dependencies: - esrecurse "^4.1.0" - estraverse "^4.1.1" - -eslint-utils@^1.3.0, eslint-utils@^1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-1.3.1.tgz#9a851ba89ee7c460346f97cf8939c7298827e512" - -eslint-visitor-keys@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz#3f3180fb2e291017716acb4c9d6d5b5c34a6a81d" - -eslint@5.6.0: - version "5.6.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-5.6.0.tgz#b6f7806041af01f71b3f1895cbb20971ea4b6223" - dependencies: - "@babel/code-frame" "^7.0.0" - ajv "^6.5.3" - chalk "^2.1.0" - cross-spawn "^6.0.5" - debug "^3.1.0" - doctrine "^2.1.0" - eslint-scope "^4.0.0" - eslint-utils "^1.3.1" - eslint-visitor-keys "^1.0.0" - espree "^4.0.0" - esquery "^1.0.1" - esutils "^2.0.2" - file-entry-cache "^2.0.0" - functional-red-black-tree "^1.0.1" - glob "^7.1.2" - globals "^11.7.0" - ignore "^4.0.6" - imurmurhash "^0.1.4" - inquirer "^6.1.0" - is-resolvable "^1.1.0" - js-yaml "^3.12.0" - json-stable-stringify-without-jsonify "^1.0.1" - levn "^0.3.0" - lodash "^4.17.5" - minimatch "^3.0.4" - mkdirp "^0.5.1" - natural-compare "^1.4.0" - optionator "^0.8.2" - path-is-inside "^1.0.2" - pluralize "^7.0.0" - progress "^2.0.0" - regexpp "^2.0.0" - require-uncached "^1.0.3" - semver "^5.5.1" - strip-ansi "^4.0.0" - strip-json-comments "^2.0.1" - table "^4.0.3" - text-table "^0.2.0" - -espree@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/espree/-/espree-4.1.0.tgz#728d5451e0fd156c04384a7ad89ed51ff54eb25f" - dependencies: - acorn "^6.0.2" - acorn-jsx "^5.0.0" - eslint-visitor-keys "^1.0.0" - -esprima@^2.6.0: - version "2.7.3" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-2.7.3.tgz#96e3b70d5779f6ad49cd032673d1c312767ba581" - -esprima@^3.1.3: - version "3.1.3" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633" - -esprima@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" - -esquery@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.0.1.tgz#406c51658b1f5991a5f9b62b1dc25b00e3e5c708" - dependencies: - estraverse "^4.0.0" - -esrecurse@^4.1.0: - version "4.2.1" - resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.2.1.tgz#007a3b9fdbc2b3bb87e4879ea19c92fdbd3942cf" - dependencies: - estraverse "^4.1.0" - -estraverse@^4.0.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" - -estree-walker@^0.5.2: - version "0.5.2" - resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-0.5.2.tgz#d3850be7529c9580d815600b53126515e146dd39" - -esutils@^2.0.0, esutils@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b" - -etag@~1.8.1: - version "1.8.1" - resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" - -eventemitter3@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-3.1.0.tgz#090b4d6cdbd645ed10bf750d4b5407942d7ba163" - -events@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/events/-/events-1.1.1.tgz#9ebdb7635ad099c70dcc4c2a1f5004288e8bd924" - -eventsource@0.1.6: - version "0.1.6" - resolved "https://registry.yarnpkg.com/eventsource/-/eventsource-0.1.6.tgz#0acede849ed7dd1ccc32c811bb11b944d4f29232" - dependencies: - original ">=0.0.5" - -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" - dependencies: - md5.js "^1.3.4" - safe-buffer "^5.1.1" - -exec-sh@^0.2.0: - version "0.2.2" - resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.2.2.tgz#2a5e7ffcbd7d0ba2755bdecb16e5a427dfbdec36" - dependencies: - merge "^1.2.0" - -execa@^0.10.0: - version "0.10.0" - resolved "https://registry.yarnpkg.com/execa/-/execa-0.10.0.tgz#ff456a8f53f90f8eccc71a96d11bdfc7f082cb50" - dependencies: - cross-spawn "^6.0.0" - get-stream "^3.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" - -execa@^0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/execa/-/execa-0.7.0.tgz#944becd34cc41ee32a63a9faf27ad5a65fc59777" - dependencies: - cross-spawn "^5.0.1" - get-stream "^3.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" - -execa@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8" - 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" - -execall@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/execall/-/execall-1.0.0.tgz#73d0904e395b3cab0658b08d09ec25307f29bb73" - dependencies: - clone-regexp "^1.0.0" - -exit@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" - -expand-brackets@^0.1.4: - version "0.1.5" - resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-0.1.5.tgz#df07284e342a807cd733ac5af72411e581d1177b" - dependencies: - is-posix-bracket "^0.1.0" - -expand-brackets@^2.1.4: - version "2.1.4" - resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" - dependencies: - debug "^2.3.3" - define-property "^0.2.5" - extend-shallow "^2.0.1" - posix-character-classes "^0.1.0" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.1" - -expand-range@^1.8.1: - version "1.8.2" - resolved "https://registry.yarnpkg.com/expand-range/-/expand-range-1.8.2.tgz#a299effd335fe2721ebae8e257ec79644fc85337" - dependencies: - fill-range "^2.1.0" - -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" - dependencies: - homedir-polyfill "^1.0.1" - -expect@^23.6.0: - version "23.6.0" - resolved "https://registry.yarnpkg.com/expect/-/expect-23.6.0.tgz#1e0c8d3ba9a581c87bd71fb9bc8862d443425f98" - dependencies: - ansi-styles "^3.2.0" - jest-diff "^23.6.0" - jest-get-type "^22.1.0" - jest-matcher-utils "^23.6.0" - jest-message-util "^23.4.0" - jest-regex-util "^23.3.0" - -express@^4.16.2: - version "4.16.4" - resolved "https://registry.yarnpkg.com/express/-/express-4.16.4.tgz#fddef61926109e24c515ea97fd2f1bdbf62df12e" - dependencies: - accepts "~1.3.5" - array-flatten "1.1.1" - body-parser "1.18.3" - content-disposition "0.5.2" - content-type "~1.0.4" - cookie "0.3.1" - cookie-signature "1.0.6" - debug "2.6.9" - depd "~1.1.2" - encodeurl "~1.0.2" - escape-html "~1.0.3" - etag "~1.8.1" - finalhandler "1.1.1" - fresh "0.5.2" - merge-descriptors "1.0.1" - methods "~1.1.2" - on-finished "~2.3.0" - parseurl "~1.3.2" - path-to-regexp "0.1.7" - proxy-addr "~2.0.4" - qs "6.5.2" - range-parser "~1.2.0" - safe-buffer "5.1.2" - send "0.16.2" - serve-static "1.13.2" - setprototypeof "1.1.0" - statuses "~1.4.0" - type-is "~1.6.16" - utils-merge "1.0.1" - vary "~1.1.2" - -extend-shallow@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" - dependencies: - is-extendable "^0.1.0" - -extend-shallow@^3.0.0, extend-shallow@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8" - dependencies: - assign-symbols "^1.0.0" - is-extendable "^1.0.1" - -extend@^3.0.0, extend@~3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" - -external-editor@^3.0.0: - version "3.0.3" - resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.0.3.tgz#5866db29a97826dbe4bf3afd24070ead9ea43a27" - dependencies: - chardet "^0.7.0" - iconv-lite "^0.4.24" - tmp "^0.0.33" - -extglob@^0.3.1: - version "0.3.2" - resolved "https://registry.yarnpkg.com/extglob/-/extglob-0.3.2.tgz#2e18ff3d2f49ab2765cec9023f011daa8d8349a1" - dependencies: - is-extglob "^1.0.0" - -extglob@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" - dependencies: - array-unique "^0.3.2" - define-property "^1.0.0" - expand-brackets "^2.1.4" - extend-shallow "^2.0.1" - fragment-cache "^0.2.1" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.1" - -extsprintf@1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" - -extsprintf@^1.2.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f" - -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" - -fast-glob@^2.0.2: - version "2.2.4" - resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-2.2.4.tgz#e54f4b66d378040e0e4d6a68ec36bbc5b04363c0" - dependencies: - "@mrmlnc/readdir-enhanced" "^2.2.1" - "@nodelib/fs.stat" "^1.1.2" - glob-parent "^3.1.0" - is-glob "^4.0.0" - merge2 "^1.2.3" - micromatch "^3.1.10" - -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" - -fast-levenshtein@~2.0.4: - version "2.0.6" - resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" - -fastparse@^1.1.1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/fastparse/-/fastparse-1.1.2.tgz#91728c5a5942eced8531283c79441ee4122c35a9" - -faye-websocket@^0.10.0: - version "0.10.0" - resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.10.0.tgz#4e492f8d04dfb6f89003507f6edbf2d501e7c6f4" - dependencies: - websocket-driver ">=0.5.1" - -faye-websocket@~0.11.0: - version "0.11.1" - resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.11.1.tgz#f0efe18c4f56e4f40afc7e06c719fd5ee6188f38" - dependencies: - websocket-driver ">=0.5.1" - -fb-watchman@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.0.tgz#54e9abf7dfa2f26cd9b1636c588c1afc05de5d58" - dependencies: - bser "^2.0.0" - -figgy-pudding@^3.1.0, figgy-pudding@^3.5.1: - version "3.5.1" - resolved "https://registry.yarnpkg.com/figgy-pudding/-/figgy-pudding-3.5.1.tgz#862470112901c727a0e495a80744bd5baa1d6790" - -figures@^1.7.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/figures/-/figures-1.7.0.tgz#cbe1e3affcf1cd44b80cadfed28dc793a9701d2e" - dependencies: - escape-string-regexp "^1.0.5" - object-assign "^4.1.0" - -figures@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962" - dependencies: - escape-string-regexp "^1.0.5" - -file-entry-cache@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-2.0.0.tgz#c392990c3e684783d838b8c84a45d8a048458361" - dependencies: - flat-cache "^1.2.1" - object-assign "^4.0.1" - -file-loader@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-2.0.0.tgz#39749c82f020b9e85901dcff98e8004e6401cfde" - dependencies: - loader-utils "^1.0.2" - schema-utils "^1.0.0" - -filename-regex@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/filename-regex/-/filename-regex-2.0.1.tgz#c1c4b9bee3e09725ddb106b75c1e301fe2f18b26" - -filename-reserved-regex@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/filename-reserved-regex/-/filename-reserved-regex-1.0.0.tgz#e61cf805f0de1c984567d0386dc5df50ee5af7e4" - -filenamify-url@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/filenamify-url/-/filenamify-url-1.0.0.tgz#b32bd81319ef5863b73078bed50f46a4f7975f50" - dependencies: - filenamify "^1.0.0" - humanize-url "^1.0.0" - -filenamify@^1.0.0: - version "1.2.1" - resolved "https://registry.yarnpkg.com/filenamify/-/filenamify-1.2.1.tgz#a9f2ffd11c503bed300015029272378f1f1365a5" - dependencies: - filename-reserved-regex "^1.0.0" - strip-outer "^1.0.0" - trim-repeated "^1.0.0" - -fileset@^2.0.2: - version "2.0.3" - resolved "https://registry.yarnpkg.com/fileset/-/fileset-2.0.3.tgz#8e7548a96d3cc2327ee5e674168723a333bba2a0" - dependencies: - glob "^7.0.3" - minimatch "^3.0.3" - -filesize@3.6.1: - version "3.6.1" - resolved "https://registry.yarnpkg.com/filesize/-/filesize-3.6.1.tgz#090bb3ee01b6f801a8a8be99d31710b3422bb317" - -fill-range@^2.1.0: - version "2.2.4" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-2.2.4.tgz#eb1e773abb056dcd8df2bfdf6af59b8b3a936565" - dependencies: - is-number "^2.1.0" - isobject "^2.0.0" - randomatic "^3.0.0" - repeat-element "^1.1.2" - repeat-string "^1.5.2" - -fill-range@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" - dependencies: - extend-shallow "^2.0.1" - is-number "^3.0.0" - repeat-string "^1.6.1" - to-regex-range "^2.1.0" - -finalhandler@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.1.tgz#eebf4ed840079c83f4249038c9d703008301b105" - dependencies: - debug "2.6.9" - encodeurl "~1.0.2" - escape-html "~1.0.3" - on-finished "~2.3.0" - parseurl "~1.3.2" - statuses "~1.4.0" - unpipe "~1.0.0" - -find-cache-dir@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-0.1.1.tgz#c8defae57c8a52a8a784f9e31c57c742e993a0b9" - dependencies: - commondir "^1.0.1" - mkdirp "^0.5.1" - pkg-dir "^1.0.0" - -find-cache-dir@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-1.0.0.tgz#9288e3e9e3cc3748717d39eade17cf71fc30ee6f" - dependencies: - commondir "^1.0.1" - make-dir "^1.0.0" - pkg-dir "^2.0.0" - -find-cache-dir@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-2.0.0.tgz#4c1faed59f45184530fb9d7fa123a4d04a98472d" - dependencies: - commondir "^1.0.1" - make-dir "^1.0.0" - pkg-dir "^3.0.0" - -find-parent-dir@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/find-parent-dir/-/find-parent-dir-0.3.0.tgz#33c44b429ab2b2f0646299c5f9f718f376ff8d54" - -find-up@3.0.0, find-up@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" - dependencies: - locate-path "^3.0.0" - -find-up@^1.0.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f" - dependencies: - path-exists "^2.0.0" - pinkie-promise "^2.0.0" - -find-up@^2.0.0, find-up@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" - dependencies: - locate-path "^2.0.0" - -flat-cache@^1.2.1: - version "1.3.4" - resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-1.3.4.tgz#2c2ef77525cc2929007dfffa1dd314aa9c9dee6f" - dependencies: - circular-json "^0.3.1" - graceful-fs "^4.1.2" - rimraf "~2.6.2" - write "^0.2.1" - -flatten@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/flatten/-/flatten-1.0.2.tgz#dae46a9d78fbe25292258cc1e780a41d95c03782" - -flush-write-stream@^1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/flush-write-stream/-/flush-write-stream-1.0.3.tgz#c5d586ef38af6097650b49bc41b55fabb19f35bd" - dependencies: - inherits "^2.0.1" - readable-stream "^2.0.4" - -follow-redirects@^1.0.0: - version "1.5.10" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.5.10.tgz#7b7a9f9aea2fdff36786a94ff643ed07f4ff5e2a" - dependencies: - debug "=3.1.0" - -for-in@^0.1.3: - version "0.1.8" - resolved "https://registry.yarnpkg.com/for-in/-/for-in-0.1.8.tgz#d8773908e31256109952b1fdb9b3fa867d2775e1" - -for-in@^1.0.1, for-in@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" - -for-own@^0.1.3, for-own@^0.1.4: - version "0.1.5" - resolved "https://registry.yarnpkg.com/for-own/-/for-own-0.1.5.tgz#5265c681a4f294dabbf17c9509b6763aa84510ce" - dependencies: - for-in "^1.0.1" - -for-own@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/for-own/-/for-own-1.0.0.tgz#c63332f415cedc4b04dbfe70cf836494c53cb44b" - dependencies: - for-in "^1.0.1" - -foreach@~2.0.1: - version "2.0.5" - resolved "https://registry.yarnpkg.com/foreach/-/foreach-2.0.5.tgz#0bee005018aeb260d0a3af3ae658dd0136ec1b99" - -forever-agent@~0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" - -fork-ts-checker-webpack-plugin-alt@0.4.14: - version "0.4.14" - resolved "https://registry.yarnpkg.com/fork-ts-checker-webpack-plugin-alt/-/fork-ts-checker-webpack-plugin-alt-0.4.14.tgz#1bd6c0d97b7d4682dde61255fcbd78b72f7473a0" - dependencies: - babel-code-frame "^6.22.0" - chalk "^2.4.1" - chokidar "^2.0.4" - lodash "^4.17.11" - micromatch "^3.1.10" - minimatch "^3.0.4" - resolve "^1.5.0" - tapable "^1.0.0" - -form-data@~2.3.2: - version "2.3.3" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" - dependencies: - asynckit "^0.4.0" - combined-stream "^1.0.6" - mime-types "^2.1.12" - -forwarded@~0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.2.tgz#98c23dab1175657b8c0573e8ceccd91b0ff18c84" - -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" - -fresh@0.5.2: - version "0.5.2" - resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" - -from2@^2.1.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/from2/-/from2-2.3.0.tgz#8bfb5502bde4a4d36cfdeea007fcca21d7e382af" - dependencies: - inherits "^2.0.1" - readable-stream "^2.0.0" - -fs-extra@7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-7.0.0.tgz#8cc3f47ce07ef7b3593a11b9fb245f7e34c041d6" - dependencies: - graceful-fs "^4.1.2" - jsonfile "^4.0.0" - universalify "^0.1.0" - -fs-extra@^4.0.2: - version "4.0.3" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-4.0.3.tgz#0d852122e5bc5beb453fb028e9c0c9bf36340c94" - dependencies: - graceful-fs "^4.1.2" - jsonfile "^4.0.0" - universalify "^0.1.0" - -fs-extra@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-5.0.0.tgz#414d0110cdd06705734d055652c5411260c31abd" - dependencies: - graceful-fs "^4.1.2" - jsonfile "^4.0.0" - universalify "^0.1.0" - -fs-extra@^7.0.0: - version "7.0.1" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-7.0.1.tgz#4f189c44aa123b895f722804f55ea23eadc348e9" - dependencies: - graceful-fs "^4.1.2" - jsonfile "^4.0.0" - universalify "^0.1.0" - -fs-minipass@^1.2.5: - version "1.2.5" - resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.5.tgz#06c277218454ec288df77ada54a03b8702aacb9d" - dependencies: - minipass "^2.2.1" - -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" - dependencies: - graceful-fs "^4.1.2" - iferr "^0.1.5" - imurmurhash "^0.1.4" - readable-stream "1 || 2" - -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.4, fsevents@^1.2.2, fsevents@^1.2.3: - version "1.2.4" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.4.tgz#f41dcb1af2582af3692da36fc55cbd8e1041c426" - dependencies: - nan "^2.9.2" - node-pre-gyp "^0.10.0" - -function-bind@^1.1.0, function-bind@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" - -functional-red-black-tree@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" - -fwd-stream@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/fwd-stream/-/fwd-stream-1.0.4.tgz#ed281cabed46feecf921ee32dc4c50b372ac7cfa" - dependencies: - readable-stream "~1.0.26-4" - -g-status@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/g-status/-/g-status-2.0.2.tgz#270fd32119e8fc9496f066fe5fe88e0a6bc78b97" - dependencies: - arrify "^1.0.1" - matcher "^1.0.0" - simple-git "^1.85.0" - -gauge@~2.7.3: - version "2.7.4" - resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" - dependencies: - aproba "^1.0.3" - console-control-strings "^1.0.0" - has-unicode "^2.0.0" - object-assign "^4.1.0" - signal-exit "^3.0.0" - string-width "^1.0.1" - strip-ansi "^3.0.1" - wide-align "^1.1.0" - -generic-names@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/generic-names/-/generic-names-1.0.3.tgz#2d786a121aee508876796939e8e3bff836c20917" - dependencies: - loader-utils "^0.2.16" - -get-caller-file@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.3.tgz#f978fa4c90d1dfe7ff2d6beda2a515e713bdcf4a" - -get-own-enumerable-property-symbols@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.0.tgz#b877b49a5c16aefac3655f2ed2ea5b684df8d203" - -get-stdin@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-6.0.0.tgz#9e09bf712b360ab9225e812048f71fde9c89657b" - -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" - 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" - -getpass@^0.1.1: - version "0.1.7" - resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" - dependencies: - assert-plus "^1.0.0" - -gh-pages@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/gh-pages/-/gh-pages-2.0.1.tgz#aefe47a43b8d9d2aa3130576b33fe95641e29a2f" - dependencies: - async "^2.6.1" - commander "^2.18.0" - email-addresses "^3.0.1" - filenamify-url "^1.0.0" - fs-extra "^7.0.0" - globby "^6.1.0" - graceful-fs "^4.1.11" - rimraf "^2.6.2" - -glob-base@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/glob-base/-/glob-base-0.3.0.tgz#dbb164f6221b1c0b1ccf82aea328b497df0ea3c4" - dependencies: - glob-parent "^2.0.0" - is-glob "^2.0.0" - -glob-parent@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-2.0.0.tgz#81383d72db054fcccf5336daa902f182f6edbb28" - dependencies: - is-glob "^2.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" - dependencies: - is-glob "^3.1.0" - path-dirname "^1.0.0" - -glob-to-regexp@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz#8c5a1494d2066c570cc3bfe4496175acc4d502ab" - -glob@7.0.x: - version "7.0.6" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.0.6.tgz#211bafaf49e525b8cd93260d14ab136152b3f57a" - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.0.2" - once "^1.3.0" - path-is-absolute "^1.0.0" - -glob@^7.0.3, glob@^7.0.5, glob@^7.1.1, glob@^7.1.2: - version "7.1.3" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.3.tgz#3960832d3f1574108342dafd3a67b332c0969df1" - dependencies: - 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" - -global-modules@1.0.0, global-modules@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-1.0.0.tgz#6d770f0eb523ac78164d72b5e71a8877265cc3ea" - dependencies: - global-prefix "^1.0.1" - is-windows "^1.0.1" - resolve-dir "^1.0.0" - -global-prefix@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-1.0.2.tgz#dbf743c6c14992593c655568cb66ed32c0122ebe" - dependencies: - expand-tilde "^2.0.2" - homedir-polyfill "^1.0.1" - ini "^1.3.4" - is-windows "^1.0.1" - which "^1.2.14" - -globals@^11.1.0, globals@^11.7.0: - version "11.9.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-11.9.0.tgz#bde236808e987f290768a93d065060d78e6ab249" - -globals@^9.18.0: - version "9.18.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a" - -globby@8.0.1, globby@^8.0.0: - version "8.0.1" - resolved "https://registry.yarnpkg.com/globby/-/globby-8.0.1.tgz#b5ad48b8aa80b35b814fc1281ecc851f1d2b5b50" - dependencies: - array-union "^1.0.1" - dir-glob "^2.0.0" - fast-glob "^2.0.2" - glob "^7.1.2" - ignore "^3.3.5" - pify "^3.0.0" - slash "^1.0.0" - -globby@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/globby/-/globby-6.1.0.tgz#f5a6d70e8395e21c858fb0489d64df02424d506c" - dependencies: - array-union "^1.0.1" - glob "^7.0.3" - object-assign "^4.0.1" - pify "^2.0.0" - pinkie-promise "^2.0.0" - -globjoin@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/globjoin/-/globjoin-0.1.4.tgz#2f4494ac8919e3767c5cbb691e9f463324285d43" - -gonzales-pe@^4.2.3: - version "4.2.3" - resolved "https://registry.yarnpkg.com/gonzales-pe/-/gonzales-pe-4.2.3.tgz#41091703625433285e0aee3aa47829fc1fbeb6f2" - dependencies: - minimist "1.1.x" - -graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.6: - version "4.1.15" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.15.tgz#ffb703e1066e8a0eeaa4c8b80ba9253eeefbfb00" - -growly@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081" - -gzip-size@5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/gzip-size/-/gzip-size-5.0.0.tgz#a55ecd99222f4c48fd8c01c625ce3b349d0a0e80" - dependencies: - duplexer "^0.1.1" - pify "^3.0.0" - -h2x-core@^1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/h2x-core/-/h2x-core-1.1.1.tgz#7fb31ab28e30ebf11818e3c7d183487ecf489f9f" - dependencies: - h2x-generate "^1.1.0" - h2x-parse "^1.1.1" - h2x-traverse "^1.1.0" - -h2x-generate@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/h2x-generate/-/h2x-generate-1.1.0.tgz#c2c98c60070e1eed231e482d5826c3c5dab2a9ba" - dependencies: - h2x-traverse "^1.1.0" - -h2x-parse@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/h2x-parse/-/h2x-parse-1.1.1.tgz#875712cd3be75cf736c610d279b8653b24f58385" - dependencies: - h2x-types "^1.1.0" - jsdom ">=11.0.0" - -h2x-plugin-jsx@^1.1.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/h2x-plugin-jsx/-/h2x-plugin-jsx-1.2.0.tgz#211fa02e5c4e0a07307b0005629923910e631c01" - dependencies: - h2x-types "^1.1.0" - -h2x-traverse@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/h2x-traverse/-/h2x-traverse-1.1.0.tgz#194b36c593f4e20a754dee47fa6b2288647b2271" - dependencies: - h2x-types "^1.1.0" - -h2x-types@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/h2x-types/-/h2x-types-1.1.0.tgz#ec0d5e3674e2207269f32976ac9c82aaff4818e6" - -handle-thing@^1.2.5: - version "1.2.5" - resolved "https://registry.yarnpkg.com/handle-thing/-/handle-thing-1.2.5.tgz#fd7aad726bf1a5fd16dfc29b2f7a6601d27139c4" - -handlebars@^4.0.3: - version "4.1.2" - resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.1.2.tgz#b6b37c1ced0306b221e094fc7aca3ec23b131b67" - integrity sha512-nvfrjqvt9xQ8Z/w0ijewdD/vvWDTOweBUm96NTr66Wfvo1mJenBLwcYmPs3TIBP5ruzYGD7Hx/DaM9RmhroGPw== - dependencies: - neo-async "^2.6.0" - optimist "^0.6.1" - source-map "^0.6.1" - optionalDependencies: - 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@~5.1.0: - version "5.1.3" - resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.3.tgz#1ef89ebd3e4996557675eed9893110dc350fa080" - dependencies: - ajv "^6.5.5" - har-schema "^2.0.0" - -harmony-reflect@^1.4.6: - version "1.6.1" - resolved "https://registry.yarnpkg.com/harmony-reflect/-/harmony-reflect-1.6.1.tgz#c108d4f2bb451efef7a37861fdbdae72c9bdefa9" - -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@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" - -has-symbols@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.0.tgz#ba1a8f1af2a0fc39650f5c850367704122063b44" - -has-unicode@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" - -has-value@^0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" - dependencies: - get-value "^2.0.3" - has-values "^0.1.4" - isobject "^2.0.0" - -has-value@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177" - dependencies: - get-value "^2.0.6" - has-values "^1.0.0" - isobject "^3.0.0" - -has-values@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771" - -has-values@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f" - dependencies: - is-number "^3.0.0" - kind-of "^4.0.0" - -has@^1.0.0, has@^1.0.1, has@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" - dependencies: - function-bind "^1.1.1" - -hash-base@^3.0.0: - version "3.0.4" - resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.0.4.tgz#5fc8686847ecd73499403319a6b0a3f3f6ae4918" - 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" - dependencies: - inherits "^2.0.3" - minimalistic-assert "^1.0.1" - -hast-util-from-parse5@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/hast-util-from-parse5/-/hast-util-from-parse5-5.0.0.tgz#a505a05766e0f96e389bfb0b1dd809eeefcef47b" - dependencies: - ccount "^1.0.3" - hastscript "^5.0.0" - property-information "^5.0.0" - web-namespaces "^1.1.2" - xtend "^4.0.1" - -hast-util-parse-selector@^2.2.0: - version "2.2.1" - resolved "https://registry.yarnpkg.com/hast-util-parse-selector/-/hast-util-parse-selector-2.2.1.tgz#4ddbae1ae12c124e3eb91b581d2556441766f0ab" - -hastscript@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/hastscript/-/hastscript-5.0.0.tgz#fee10382c1bc4ba3f1be311521d368c047d2c43a" - dependencies: - comma-separated-tokens "^1.0.0" - hast-util-parse-selector "^2.2.0" - property-information "^5.0.1" - space-separated-tokens "^1.0.0" - -he@1.2.x: - version "1.2.0" - resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" - -hex-color-regex@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/hex-color-regex/-/hex-color-regex-1.1.0.tgz#4c06fccb4602fe2602b3c93df82d7e7dbf1a8a8e" - -hmac-drbg@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" - 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.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/homedir-polyfill/-/homedir-polyfill-1.0.1.tgz#4c2bbc8a758998feebf5ed68580f76d46768b4bc" - dependencies: - parse-passwd "^1.0.0" - -hoopy@^0.1.2: - version "0.1.4" - resolved "https://registry.yarnpkg.com/hoopy/-/hoopy-0.1.4.tgz#609207d661100033a9a9402ad3dea677381c1b1d" - -hosted-git-info@^2.1.4: - version "2.7.1" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.7.1.tgz#97f236977bd6e125408930ff6de3eec6281ec047" - -hpack.js@^2.1.6: - version "2.1.6" - resolved "https://registry.yarnpkg.com/hpack.js/-/hpack.js-2.1.6.tgz#87774c0949e513f42e84575b3c45681fade2a0b2" - dependencies: - inherits "^2.0.1" - obuf "^1.0.0" - readable-stream "^2.0.1" - wbuf "^1.1.0" - -hsl-regex@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/hsl-regex/-/hsl-regex-1.0.0.tgz#d49330c789ed819e276a4c0d272dffa30b18fe6e" - -hsla-regex@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/hsla-regex/-/hsla-regex-1.0.0.tgz#c1ce7a3168c8c6614033a4b5f7877f3b225f9c38" - -html-comment-regex@^1.1.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/html-comment-regex/-/html-comment-regex-1.1.2.tgz#97d4688aeb5c81886a364faa0cad1dda14d433a7" - -html-encoding-sniffer@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz#e70d84b94da53aa375e11fe3a351be6642ca46f8" - dependencies: - whatwg-encoding "^1.0.1" - -html-entities@^1.2.0: - version "1.2.1" - resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-1.2.1.tgz#0df29351f0721163515dfb9e5543e5f6eed5162f" - -html-minifier@^3.2.3: - version "3.5.21" - resolved "https://registry.yarnpkg.com/html-minifier/-/html-minifier-3.5.21.tgz#d0040e054730e354db008463593194015212d20c" - dependencies: - camel-case "3.0.x" - clean-css "4.2.x" - commander "2.17.x" - he "1.2.x" - param-case "2.1.x" - relateurl "0.2.x" - uglify-js "3.4.x" - -html-tags@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/html-tags/-/html-tags-2.0.0.tgz#10b30a386085f43cede353cc8fa7cb0deeea668b" - -html-webpack-plugin@4.0.0-alpha.2: - version "4.0.0-alpha.2" - resolved "https://registry.yarnpkg.com/html-webpack-plugin/-/html-webpack-plugin-4.0.0-alpha.2.tgz#7745967e389a57a098e26963f328ebe4c19b598d" - dependencies: - "@types/tapable" "1.0.2" - html-minifier "^3.2.3" - loader-utils "^1.1.0" - lodash "^4.17.10" - pretty-error "^2.0.2" - tapable "^1.0.0" - util.promisify "1.0.0" - -htmlparser2@^3.9.2: - version "3.10.0" - resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.10.0.tgz#5f5e422dcf6119c0d983ed36260ce9ded0bee464" - dependencies: - domelementtype "^1.3.0" - domhandler "^2.3.0" - domutils "^1.5.1" - entities "^1.1.1" - inherits "^2.0.1" - readable-stream "^3.0.6" - -htmlparser2@~3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.3.0.tgz#cc70d05a59f6542e43f0e685c982e14c924a9efe" - dependencies: - domelementtype "1" - domhandler "2.1" - domutils "1.1" - readable-stream "1.0" - -http-deceiver@^1.2.7: - version "1.2.7" - resolved "https://registry.yarnpkg.com/http-deceiver/-/http-deceiver-1.2.7.tgz#fa7168944ab9a519d337cb0bec7284dc3e723d87" - -http-errors@1.6.3, http-errors@~1.6.2, http-errors@~1.6.3: - version "1.6.3" - resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.3.tgz#8b55680bb4be283a0b5bf4ea2e38580be1d9320d" - dependencies: - depd "~1.1.2" - inherits "2.0.3" - setprototypeof "1.1.0" - statuses ">= 1.4.0 < 2" - -http-parser-js@>=0.4.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.5.0.tgz#d65edbede84349d0dc30320815a15d39cc3cbbd8" - -http-proxy-middleware@~0.18.0: - version "0.18.0" - resolved "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-0.18.0.tgz#0987e6bb5a5606e5a69168d8f967a87f15dd8aab" - dependencies: - http-proxy "^1.16.2" - is-glob "^4.0.0" - lodash "^4.17.5" - micromatch "^3.1.9" - -http-proxy@^1.16.2: - version "1.17.0" - resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.17.0.tgz#7ad38494658f84605e2f6db4436df410f4e5be9a" - dependencies: - eventemitter3 "^3.0.0" - follow-redirects "^1.0.0" - requires-port "^1.0.0" - -http-signature@~1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" - dependencies: - assert-plus "^1.0.0" - jsprim "^1.2.2" - sshpk "^1.7.0" - -https-browserify@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73" - -humanize-url@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/humanize-url/-/humanize-url-1.0.1.tgz#f4ab99e0d288174ca4e1e50407c55fbae464efff" - dependencies: - normalize-url "^1.0.0" - strip-url-auth "^1.0.0" - -husky@^1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/husky/-/husky-1.3.1.tgz#26823e399300388ca2afff11cfa8a86b0033fae0" - dependencies: - cosmiconfig "^5.0.7" - execa "^1.0.0" - find-up "^3.0.0" - get-stdin "^6.0.0" - is-ci "^2.0.0" - pkg-dir "^3.0.0" - please-upgrade-node "^3.1.1" - read-pkg "^4.0.1" - run-node "^1.0.0" - slash "^2.0.0" - -iconv-lite@0.4.23: - version "0.4.23" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.23.tgz#297871f63be507adcfbfca715d0cd0eed84e9a63" - dependencies: - safer-buffer ">= 2.1.2 < 3" - -iconv-lite@0.4.24, iconv-lite@^0.4.24, iconv-lite@^0.4.4: - version "0.4.24" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" - dependencies: - safer-buffer ">= 2.1.2 < 3" - -icss-replace-symbols@1.1.0, icss-replace-symbols@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz#06ea6f83679a7749e386cfe1fe812ae5db223ded" - -icss-utils@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/icss-utils/-/icss-utils-2.1.0.tgz#83f0a0ec378bf3246178b6c2ad9136f135b1c962" - dependencies: - postcss "^6.0.1" - -idb-wrapper@^1.5.0: - version "1.7.2" - resolved "https://registry.yarnpkg.com/idb-wrapper/-/idb-wrapper-1.7.2.tgz#8251afd5e77fe95568b1c16152eb44b396767ea2" - -identity-obj-proxy@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/identity-obj-proxy/-/identity-obj-proxy-3.0.0.tgz#94d2bda96084453ef36fbc5aaec37e0f79f1fc14" - dependencies: - harmony-reflect "^1.4.6" - -ieee754@^1.1.4: - version "1.1.12" - resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.12.tgz#50bf24e5b9c8bb98af4964c941cdb0918da7b60b" - -iferr@^0.1.5: - version "0.1.5" - resolved "https://registry.yarnpkg.com/iferr/-/iferr-0.1.5.tgz#c60eed69e6d8fdb6b3104a1fcbca1c192dc5b501" - -ignore-walk@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.1.tgz#a83e62e7d272ac0e3b551aaa82831a19b69f82f8" - dependencies: - minimatch "^3.0.4" - -ignore@^3.3.5: - version "3.3.10" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.3.10.tgz#0a97fb876986e8081c631160f8f9f389157f0043" - -ignore@^4.0.6: - version "4.0.6" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" - -ignore@^5.0.2, ignore@^5.0.4: - version "5.0.4" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.0.4.tgz#33168af4a21e99b00c5d41cbadb6a6cb49903a45" - -immer@1.7.2: - version "1.7.2" - resolved "https://registry.yarnpkg.com/immer/-/immer-1.7.2.tgz#a51e9723c50b27e132f6566facbec1c85fc69547" - -import-cwd@^2.0.0, import-cwd@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/import-cwd/-/import-cwd-2.1.0.tgz#aa6cf36e722761285cb371ec6519f53e2435b0a9" - dependencies: - import-from "^2.1.0" - -import-fresh@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-2.0.0.tgz#d81355c15612d386c61f9ddd3922d4304822a546" - dependencies: - caller-path "^2.0.0" - resolve-from "^3.0.0" - -import-from@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/import-from/-/import-from-2.1.0.tgz#335db7f2a7affd53aaa471d4b8021dee36b7f3b1" - dependencies: - resolve-from "^3.0.0" - -import-lazy@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/import-lazy/-/import-lazy-3.1.0.tgz#891279202c8a2280fdbd6674dbd8da1a1dfc67cc" - -import-local@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/import-local/-/import-local-1.0.0.tgz#5e4ffdc03f4fe6c009c6729beb29631c2f8227bc" - dependencies: - pkg-dir "^2.0.0" - resolve-cwd "^2.0.0" - -import-local@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/import-local/-/import-local-2.0.0.tgz#55070be38a5993cf18ef6db7e961f5bee5c5a09d" - dependencies: - pkg-dir "^3.0.0" - resolve-cwd "^2.0.0" - -imurmurhash@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" - -indent-string@^3.0.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-3.2.0.tgz#4a5fd6d27cc332f37e5419a504dbb837105c9289" - -indexes-of@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/indexes-of/-/indexes-of-1.0.1.tgz#f30f716c8e2bd346c7b67d3df3915566a7c05607" - -indexof@0.0.1, indexof@~0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/indexof/-/indexof-0.0.1.tgz#82dc336d232b9062179d05ab3293a66059fd435d" - -inflight@^1.0.4: - version "1.0.6" - resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" - dependencies: - once "^1.3.0" - wrappy "1" - -inherits@2, inherits@2.0.3, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.1, 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" - -ini@^1.3.4, ini@~1.3.0: - version "1.3.5" - resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" - -inquirer@6.2.0: - version "6.2.0" - resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-6.2.0.tgz#51adcd776f661369dc1e894859c2560a224abdd8" - dependencies: - ansi-escapes "^3.0.0" - chalk "^2.0.0" - cli-cursor "^2.1.0" - cli-width "^2.0.0" - external-editor "^3.0.0" - figures "^2.0.0" - lodash "^4.17.10" - mute-stream "0.0.7" - run-async "^2.2.0" - rxjs "^6.1.0" - string-width "^2.1.0" - strip-ansi "^4.0.0" - through "^2.3.6" - -inquirer@^6.1.0: - version "6.2.1" - resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-6.2.1.tgz#9943fc4882161bdb0b0c9276769c75b32dbfcd52" - dependencies: - ansi-escapes "^3.0.0" - chalk "^2.0.0" - cli-cursor "^2.1.0" - cli-width "^2.0.0" - external-editor "^3.0.0" - figures "^2.0.0" - lodash "^4.17.10" - mute-stream "0.0.7" - run-async "^2.2.0" - rxjs "^6.1.0" - string-width "^2.1.0" - strip-ansi "^5.0.0" - through "^2.3.6" - -internal-ip@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/internal-ip/-/internal-ip-3.0.1.tgz#df5c99876e1d2eb2ea2d74f520e3f669a00ece27" - dependencies: - default-gateway "^2.6.0" - ipaddr.js "^1.5.2" - -invariant@^2.2.2, invariant@^2.2.4: - version "2.2.4" - resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" - dependencies: - loose-envify "^1.0.0" - -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" - -ip-regex@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-2.1.0.tgz#fa78bf5d2e6913c911ce9f819ee5146bb6d844e9" - -ip@^1.1.0, ip@^1.1.5: - version "1.1.5" - resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a" - -ipaddr.js@1.8.0: - version "1.8.0" - resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.8.0.tgz#eaa33d6ddd7ace8f7f6fe0c9ca0440e706738b1e" - -ipaddr.js@^1.5.2: - version "1.8.1" - resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.8.1.tgz#fa4b79fa47fd3def5e3b159825161c0a519c9427" - -is-absolute-url@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-absolute-url/-/is-absolute-url-2.1.0.tgz#50530dfb84fcc9aa7dbe7852e83a37b93b9f2aa6" - -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" - dependencies: - kind-of "^3.0.2" - -is-accessor-descriptor@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656" - dependencies: - kind-of "^6.0.0" - -is-alphabetical@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-alphabetical/-/is-alphabetical-1.0.2.tgz#1fa6e49213cb7885b75d15862fb3f3d96c884f41" - -is-alphanumeric@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-alphanumeric/-/is-alphanumeric-1.0.0.tgz#4a9cef71daf4c001c1d81d63d140cf53fd6889f4" - -is-alphanumerical@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-alphanumerical/-/is-alphanumerical-1.0.2.tgz#1138e9ae5040158dc6ff76b820acd6b7a181fd40" - dependencies: - is-alphabetical "^1.0.0" - is-decimal "^1.0.0" - -is-arrayish@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" - -is-arrayish@^0.3.1: - version "0.3.2" - resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.3.2.tgz#4574a2ae56f7ab206896fb431eaeed066fdf8f03" - -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" - dependencies: - binary-extensions "^1.0.0" - -is-buffer@^1.0.2, is-buffer@^1.1.4, is-buffer@^1.1.5: - version "1.1.6" - resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" - -is-buffer@^2.0.0: - version "2.0.3" - resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-2.0.3.tgz#4ecf3fcf749cbd1e472689e109ac66261a25e725" - -is-builtin-module@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-builtin-module/-/is-builtin-module-1.0.0.tgz#540572d34f7ac3119f8f76c30cbc1b1e037affbe" - dependencies: - builtin-modules "^1.0.0" - -is-callable@^1.1.3, is-callable@^1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.4.tgz#1e1adf219e1eeb684d691f9d6a05ff0d30a24d75" - -is-ci@^1.0.10: - version "1.2.1" - resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-1.2.1.tgz#e3779c8ee17fccf428488f6e281187f2e632841c" - dependencies: - ci-info "^1.5.0" - -is-ci@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c" - dependencies: - ci-info "^2.0.0" - -is-color-stop@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-color-stop/-/is-color-stop-1.1.0.tgz#cfff471aee4dd5c9e158598fbe12967b5cdad345" - dependencies: - css-color-names "^0.0.4" - hex-color-regex "^1.1.0" - hsl-regex "^1.0.0" - hsla-regex "^1.0.0" - rgb-regex "^1.0.1" - rgba-regex "^1.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" - dependencies: - kind-of "^3.0.2" - -is-data-descriptor@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7" - dependencies: - kind-of "^6.0.0" - -is-date-object@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.1.tgz#9aa20eb6aeebbff77fbd33e74ca01b33581d3a16" - -is-decimal@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-decimal/-/is-decimal-1.0.2.tgz#894662d6a8709d307f3a276ca4339c8fa5dff0ff" - -is-descriptor@^0.1.0: - version "0.1.6" - resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca" - dependencies: - is-accessor-descriptor "^0.1.6" - is-data-descriptor "^0.1.4" - kind-of "^5.0.0" - -is-descriptor@^1.0.0, is-descriptor@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec" - dependencies: - is-accessor-descriptor "^1.0.0" - is-data-descriptor "^1.0.0" - kind-of "^6.0.2" - -is-directory@^0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/is-directory/-/is-directory-0.3.1.tgz#61339b6f2475fc772fd9c9d83f5c8575dc154ae1" - -is-dotfile@^1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/is-dotfile/-/is-dotfile-1.0.3.tgz#a6a2f32ffd2dfb04f5ca25ecd0f6b83cf798a1e1" - -is-equal-shallow@^0.1.3: - version "0.1.3" - resolved "https://registry.yarnpkg.com/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz#2238098fc221de0bcfa5d9eac4c45d638aa1c534" - dependencies: - is-primitive "^2.0.0" - -is-extendable@^0.1.0, is-extendable@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" - -is-extendable@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4" - dependencies: - is-plain-object "^2.0.4" - -is-extglob@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-1.0.0.tgz#ac468177c4943405a092fc8f29760c6ffc6206c0" - -is-extglob@^2.1.0, is-extglob@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" - -is-finite@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.0.2.tgz#cc6677695602be550ef11e8b4aa6305342b6d0aa" - dependencies: - number-is-nan "^1.0.0" - -is-fullwidth-code-point@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" - dependencies: - number-is-nan "^1.0.0" - -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-glob@^2.0.0, is-glob@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-2.0.1.tgz#d096f926a3ded5600f3fdfd91198cb0888c2d863" - dependencies: - is-extglob "^1.0.0" - -is-glob@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a" - dependencies: - is-extglob "^2.1.0" - -is-glob@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.0.tgz#9521c76845cc2610a85203ddf080a958c2ffabc0" - dependencies: - is-extglob "^2.1.1" - -is-hexadecimal@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-hexadecimal/-/is-hexadecimal-1.0.2.tgz#b6e710d7d07bb66b98cb8cece5c9b4921deeb835" - -is-module@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-module/-/is-module-1.0.0.tgz#3258fb69f78c14d5b815d664336b4cffb6441591" - -is-number@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-2.1.0.tgz#01fcbbb393463a548f2f466cce16dece49db908f" - dependencies: - kind-of "^3.0.2" - -is-number@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" - dependencies: - kind-of "^3.0.2" - -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: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" - -is-object@~0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/is-object/-/is-object-0.1.2.tgz#00efbc08816c33cfc4ac8251d132e10dc65098d7" - -is-observable@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-observable/-/is-observable-1.1.0.tgz#b3e986c8f44de950867cab5403f5a3465005975e" - dependencies: - symbol-observable "^1.1.0" - -is-path-cwd@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-1.0.0.tgz#d225ec23132e89edd38fda767472e62e65f1106d" - -is-path-in-cwd@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz#5ac48b345ef675339bd6c7a48a912110b241cf52" - dependencies: - is-path-inside "^1.0.0" - -is-path-inside@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-1.0.1.tgz#8ef5b7de50437a3fdca6b4e865ef7aa55cb48036" - dependencies: - path-is-inside "^1.0.1" - -is-plain-obj@^1.0.0, is-plain-obj@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" - -is-plain-object@^2.0.1, is-plain-object@^2.0.3, is-plain-object@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" - dependencies: - isobject "^3.0.1" - -is-posix-bracket@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz#3334dc79774368e92f016e6fbc0a88f5cd6e6bc4" - -is-primitive@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-primitive/-/is-primitive-2.0.0.tgz#207bab91638499c07b2adf240a41a87210034575" - -is-promise@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa" - -is-regex@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.4.tgz#5517489b547091b0930e095654ced25ee97e9491" - dependencies: - has "^1.0.1" - -is-regexp@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-regexp/-/is-regexp-1.0.0.tgz#fd2d883545c46bac5a633e7b9a09e87fa2cb5069" - -is-resolvable@^1.0.0, is-resolvable@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-resolvable/-/is-resolvable-1.1.0.tgz#fb18f87ce1feb925169c9a407c19318a3206ed88" - -is-root@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-root/-/is-root-2.0.0.tgz#838d1e82318144e5a6f77819d90207645acc7019" - -is-stream@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" - -is-supported-regexp-flag@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-supported-regexp-flag/-/is-supported-regexp-flag-1.0.1.tgz#21ee16518d2c1dd3edd3e9a0d57e50207ac364ca" - -is-svg@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-svg/-/is-svg-2.1.0.tgz#cf61090da0d9efbcab8722deba6f032208dbb0e9" - dependencies: - html-comment-regex "^1.1.0" - -is-svg@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-svg/-/is-svg-3.0.0.tgz#9321dbd29c212e5ca99c4fa9794c714bcafa2f75" - dependencies: - html-comment-regex "^1.1.0" - -is-symbol@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.2.tgz#a055f6ae57192caee329e7a860118b497a950f38" - dependencies: - has-symbols "^1.0.0" - -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-whitespace-character@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-whitespace-character/-/is-whitespace-character-1.0.2.tgz#ede53b4c6f6fb3874533751ec9280d01928d03ed" - -is-windows@^1.0.0, 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-word-character@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-word-character/-/is-word-character-1.0.2.tgz#46a5dac3f2a1840898b91e576cd40d493f3ae553" - -is-wsl@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d" - -is@~0.2.6: - version "0.2.7" - resolved "https://registry.yarnpkg.com/is/-/is-0.2.7.tgz#3b34a2c48f359972f35042849193ae7264b63562" - -isarray@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" - -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" - -isbuffer@~0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/isbuffer/-/isbuffer-0.0.0.tgz#38c146d9df528b8bf9b0701c3d43cf12df3fc39b" - -isemail@3.x.x: - version "3.2.0" - resolved "https://registry.yarnpkg.com/isemail/-/isemail-3.2.0.tgz#59310a021931a9fb06bbb51e155ce0b3f236832c" - dependencies: - punycode "2.x.x" - -isexe@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" - -isobject@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" - dependencies: - isarray "1.0.0" - -isobject@^3.0.0, isobject@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" - -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.7" - resolved "https://registry.yarnpkg.com/istanbul-api/-/istanbul-api-1.3.7.tgz#a86c770d2b03e11e3f778cd7aedd82d2722092aa" - dependencies: - async "^2.1.4" - fileset "^2.0.2" - istanbul-lib-coverage "^1.2.1" - istanbul-lib-hook "^1.2.2" - istanbul-lib-instrument "^1.10.2" - istanbul-lib-report "^1.1.5" - istanbul-lib-source-maps "^1.2.6" - istanbul-reports "^1.5.1" - js-yaml "^3.7.0" - mkdirp "^0.5.1" - once "^1.4.0" - -istanbul-lib-coverage@^1.2.0, istanbul-lib-coverage@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-1.2.1.tgz#ccf7edcd0a0bb9b8f729feeb0930470f9af664f0" - -istanbul-lib-hook@^1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/istanbul-lib-hook/-/istanbul-lib-hook-1.2.2.tgz#bc6bf07f12a641fbf1c85391d0daa8f0aea6bf86" - dependencies: - append-transform "^0.4.0" - -istanbul-lib-instrument@^1.10.1, istanbul-lib-instrument@^1.10.2: - version "1.10.2" - resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-1.10.2.tgz#1f55ed10ac3c47f2bdddd5307935126754d0a9ca" - 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.1" - semver "^5.3.0" - -istanbul-lib-report@^1.1.5: - version "1.1.5" - resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-1.1.5.tgz#f2a657fc6282f96170aaf281eb30a458f7f4170c" - dependencies: - istanbul-lib-coverage "^1.2.1" - mkdirp "^0.5.1" - path-parse "^1.0.5" - supports-color "^3.1.2" - -istanbul-lib-source-maps@^1.2.4, istanbul-lib-source-maps@^1.2.6: - version "1.2.6" - resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-1.2.6.tgz#37b9ff661580f8fca11232752ee42e08c6675d8f" - dependencies: - debug "^3.1.0" - istanbul-lib-coverage "^1.2.1" - mkdirp "^0.5.1" - rimraf "^2.6.1" - source-map "^0.5.3" - -istanbul-reports@^1.5.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-1.5.1.tgz#97e4dbf3b515e8c484caea15d6524eebd3ff4e1a" - dependencies: - handlebars "^4.0.3" - -jest-changed-files@^23.4.2: - version "23.4.2" - resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-23.4.2.tgz#1eed688370cd5eebafe4ae93d34bb3b64968fe83" - dependencies: - throat "^4.0.0" - -jest-cli@^23.6.0: - version "23.6.0" - resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-23.6.0.tgz#61ab917744338f443ef2baa282ddffdd658a5da4" - dependencies: - ansi-escapes "^3.0.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.4.2" - jest-config "^23.6.0" - jest-environment-jsdom "^23.4.0" - jest-get-type "^22.1.0" - jest-haste-map "^23.6.0" - jest-message-util "^23.4.0" - jest-regex-util "^23.3.0" - jest-resolve-dependencies "^23.6.0" - jest-runner "^23.6.0" - jest-runtime "^23.6.0" - jest-snapshot "^23.6.0" - jest-util "^23.4.0" - jest-validate "^23.6.0" - jest-watcher "^23.4.0" - jest-worker "^23.2.0" - micromatch "^2.3.11" - 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" - -jest-config@^23.6.0: - version "23.6.0" - resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-23.6.0.tgz#f82546a90ade2d8c7026fbf6ac5207fc22f8eb1d" - dependencies: - babel-core "^6.0.0" - babel-jest "^23.6.0" - chalk "^2.0.1" - glob "^7.1.1" - jest-environment-jsdom "^23.4.0" - jest-environment-node "^23.4.0" - jest-get-type "^22.1.0" - jest-jasmine2 "^23.6.0" - jest-regex-util "^23.3.0" - jest-resolve "^23.6.0" - jest-util "^23.4.0" - jest-validate "^23.6.0" - micromatch "^2.3.11" - pretty-format "^23.6.0" - -jest-diff@^23.6.0: - version "23.6.0" - resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-23.6.0.tgz#1500f3f16e850bb3d71233408089be099f610c7d" - dependencies: - chalk "^2.0.1" - diff "^3.2.0" - jest-get-type "^22.1.0" - pretty-format "^23.6.0" - -jest-docblock@^23.2.0: - version "23.2.0" - resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-23.2.0.tgz#f085e1f18548d99fdd69b20207e6fd55d91383a7" - dependencies: - detect-newline "^2.1.0" - -jest-each@^23.6.0: - version "23.6.0" - resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-23.6.0.tgz#ba0c3a82a8054387016139c733a05242d3d71575" - dependencies: - chalk "^2.0.1" - pretty-format "^23.6.0" - -jest-environment-jsdom@^23.4.0: - version "23.4.0" - resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-23.4.0.tgz#056a7952b3fea513ac62a140a2c368c79d9e6023" - dependencies: - jest-mock "^23.2.0" - jest-util "^23.4.0" - jsdom "^11.5.1" - -jest-environment-node@^23.4.0: - version "23.4.0" - resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-23.4.0.tgz#57e80ed0841dea303167cce8cd79521debafde10" - dependencies: - jest-mock "^23.2.0" - jest-util "^23.4.0" - -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-haste-map@^23.6.0: - version "23.6.0" - resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-23.6.0.tgz#2e3eb997814ca696d62afdb3f2529f5bbc935e16" - dependencies: - fb-watchman "^2.0.0" - graceful-fs "^4.1.11" - invariant "^2.2.4" - jest-docblock "^23.2.0" - jest-serializer "^23.0.1" - jest-worker "^23.2.0" - micromatch "^2.3.11" - sane "^2.0.0" - -jest-jasmine2@^23.6.0: - version "23.6.0" - resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-23.6.0.tgz#840e937f848a6c8638df24360ab869cc718592e0" - dependencies: - babel-traverse "^6.0.0" - chalk "^2.0.1" - co "^4.6.0" - expect "^23.6.0" - is-generator-fn "^1.0.0" - jest-diff "^23.6.0" - jest-each "^23.6.0" - jest-matcher-utils "^23.6.0" - jest-message-util "^23.4.0" - jest-snapshot "^23.6.0" - jest-util "^23.4.0" - pretty-format "^23.6.0" - -jest-leak-detector@^23.6.0: - version "23.6.0" - resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-23.6.0.tgz#e4230fd42cf381a1a1971237ad56897de7e171de" - dependencies: - pretty-format "^23.6.0" - -jest-matcher-utils@^23.6.0: - version "23.6.0" - resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-23.6.0.tgz#726bcea0c5294261a7417afb6da3186b4b8cac80" - dependencies: - chalk "^2.0.1" - jest-get-type "^22.1.0" - pretty-format "^23.6.0" - -jest-message-util@^23.4.0: - version "23.4.0" - resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-23.4.0.tgz#17610c50942349508d01a3d1e0bda2c079086a9f" - dependencies: - "@babel/code-frame" "^7.0.0-beta.35" - chalk "^2.0.1" - micromatch "^2.3.11" - slash "^1.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-pnp-resolver@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/jest-pnp-resolver/-/jest-pnp-resolver-1.0.1.tgz#f397cd71dbcd4a1947b2e435f6da8e9a347308fa" - -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-resolve-dependencies@^23.6.0: - version "23.6.0" - resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-23.6.0.tgz#b4526af24c8540d9a3fab102c15081cf509b723d" - dependencies: - jest-regex-util "^23.3.0" - jest-snapshot "^23.6.0" - -jest-resolve@23.6.0, jest-resolve@^23.6.0: - version "23.6.0" - resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-23.6.0.tgz#cf1d1a24ce7ee7b23d661c33ba2150f3aebfa0ae" - dependencies: - browser-resolve "^1.11.3" - chalk "^2.0.1" - realpath-native "^1.0.0" - -jest-runner@^23.6.0: - version "23.6.0" - resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-23.6.0.tgz#3894bd219ffc3f3cb94dc48a4170a2e6f23a5a38" - dependencies: - exit "^0.1.2" - graceful-fs "^4.1.11" - jest-config "^23.6.0" - jest-docblock "^23.2.0" - jest-haste-map "^23.6.0" - jest-jasmine2 "^23.6.0" - jest-leak-detector "^23.6.0" - jest-message-util "^23.4.0" - jest-runtime "^23.6.0" - jest-util "^23.4.0" - jest-worker "^23.2.0" - source-map-support "^0.5.6" - throat "^4.0.0" - -jest-runtime@^23.6.0: - version "23.6.0" - resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-23.6.0.tgz#059e58c8ab445917cd0e0d84ac2ba68de8f23082" - dependencies: - babel-core "^6.0.0" - babel-plugin-istanbul "^4.1.6" - chalk "^2.0.1" - convert-source-map "^1.4.0" - exit "^0.1.2" - fast-json-stable-stringify "^2.0.0" - graceful-fs "^4.1.11" - jest-config "^23.6.0" - jest-haste-map "^23.6.0" - jest-message-util "^23.4.0" - jest-regex-util "^23.3.0" - jest-resolve "^23.6.0" - jest-snapshot "^23.6.0" - jest-util "^23.4.0" - jest-validate "^23.6.0" - micromatch "^2.3.11" - 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" - -jest-snapshot@^23.6.0: - version "23.6.0" - resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-23.6.0.tgz#f9c2625d1b18acda01ec2d2b826c0ce58a5aa17a" - dependencies: - babel-types "^6.0.0" - chalk "^2.0.1" - jest-diff "^23.6.0" - jest-matcher-utils "^23.6.0" - jest-message-util "^23.4.0" - jest-resolve "^23.6.0" - mkdirp "^0.5.1" - natural-compare "^1.4.0" - pretty-format "^23.6.0" - semver "^5.5.0" - -jest-util@^23.4.0: - version "23.4.0" - resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-23.4.0.tgz#4d063cb927baf0a23831ff61bec2cbbf49793561" - dependencies: - callsites "^2.0.0" - chalk "^2.0.1" - graceful-fs "^4.1.11" - is-ci "^1.0.10" - jest-message-util "^23.4.0" - mkdirp "^0.5.1" - slash "^1.0.0" - source-map "^0.6.0" - -jest-validate@^23.5.0, jest-validate@^23.6.0: - version "23.6.0" - resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-23.6.0.tgz#36761f99d1ed33fcd425b4e4c5595d62b6597474" - dependencies: - chalk "^2.0.1" - jest-get-type "^22.1.0" - leven "^2.1.0" - pretty-format "^23.6.0" - -jest-watcher@^23.4.0: - version "23.4.0" - resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-23.4.0.tgz#d2e28ce74f8dad6c6afc922b92cabef6ed05c91c" - dependencies: - ansi-escapes "^3.0.0" - chalk "^2.0.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" - dependencies: - merge-stream "^1.0.1" - -jest@23.6.0: - version "23.6.0" - resolved "https://registry.yarnpkg.com/jest/-/jest-23.6.0.tgz#ad5835e923ebf6e19e7a1d7529a432edfee7813d" - dependencies: - import-local "^1.0.0" - jest-cli "^23.6.0" - -joi@^11.1.1: - version "11.4.0" - resolved "https://registry.yarnpkg.com/joi/-/joi-11.4.0.tgz#f674897537b625e9ac3d0b7e1604c828ad913ccb" - dependencies: - hoek "4.x.x" - isemail "3.x.x" - topo "2.x.x" - -js-base64@^2.1.9: - version "2.4.9" - resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.4.9.tgz#748911fb04f48a60c4771b375cac45a80df11c03" - -js-levenshtein@^1.1.3: - version "1.1.4" - resolved "https://registry.yarnpkg.com/js-levenshtein/-/js-levenshtein-1.1.4.tgz#3a56e3cbf589ca0081eb22cd9ba0b1290a16d26e" - -"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" - -js-tokens@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" - -js-yaml@^3.12.0, js-yaml@^3.4.3, 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" - dependencies: - argparse "^1.0.7" - esprima "^4.0.0" - -js-yaml@~3.7.0: - version "3.7.0" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.7.0.tgz#5c967ddd837a9bfdca5f2de84253abe8a1c03b80" - dependencies: - argparse "^1.0.7" - esprima "^2.6.0" - -jsbn@~0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" - -jsdom@>=11.0.0: - version "13.0.0" - resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-13.0.0.tgz#f1df2411b714a4e08d1bdc343c0a0889c688210f" - dependencies: - abab "^2.0.0" - acorn "^6.0.2" - acorn-globals "^4.3.0" - array-equal "^1.0.0" - cssom "^0.3.4" - cssstyle "^1.1.1" - data-urls "^1.0.1" - domexception "^1.0.1" - escodegen "^1.11.0" - html-encoding-sniffer "^1.0.2" - nwsapi "^2.0.9" - parse5 "5.1.0" - pn "^1.1.0" - request "^2.88.0" - request-promise-native "^1.0.5" - saxes "^3.1.3" - symbol-tree "^3.2.2" - tough-cookie "^2.4.3" - w3c-hr-time "^1.0.1" - w3c-xmlserializer "^1.0.0" - webidl-conversions "^4.0.2" - whatwg-encoding "^1.0.5" - whatwg-mimetype "^2.2.0" - whatwg-url "^7.0.0" - ws "^6.1.0" - xml-name-validator "^3.0.0" - -jsdom@^11.5.1: - version "11.12.0" - resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-11.12.0.tgz#1a80d40ddd378a1de59656e9e6dc5a3ba8657bc8" - dependencies: - abab "^2.0.0" - acorn "^5.5.3" - acorn-globals "^4.1.0" - array-equal "^1.0.0" - cssom ">= 0.3.2 < 0.4.0" - cssstyle "^1.0.0" - data-urls "^1.0.0" - domexception "^1.0.1" - escodegen "^1.9.1" - html-encoding-sniffer "^1.0.2" - left-pad "^1.3.0" - nwsapi "^2.0.7" - parse5 "4.0.0" - pn "^1.1.0" - request "^2.87.0" - request-promise-native "^1.0.5" - sax "^1.2.4" - symbol-tree "^3.2.2" - tough-cookie "^2.3.4" - w3c-hr-time "^1.0.1" - webidl-conversions "^4.0.2" - whatwg-encoding "^1.0.3" - whatwg-mimetype "^2.1.0" - whatwg-url "^6.4.1" - ws "^5.2.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" - -jsesc@~0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" - -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" - -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" - -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-without-jsonify@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" - -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: - version "5.0.1" - resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" - -json3@^3.3.2: - version "3.3.2" - resolved "https://registry.yarnpkg.com/json3/-/json3-3.3.2.tgz#3c0434743df93e2f5c42aee7b19bcb483575f4e1" - -json5@^0.5.0, json5@^0.5.1: - version "0.5.1" - resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821" - -json5@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/json5/-/json5-2.1.0.tgz#e7a0c62c48285c628d20a10b85c89bb807c32850" - dependencies: - minimist "^1.2.0" - -jsonfile@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" - optionalDependencies: - graceful-fs "^4.1.6" - -jsonify@~0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73" - -jsprim@^1.2.2: - version "1.4.1" - resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" - dependencies: - assert-plus "1.0.0" - extsprintf "1.3.0" - json-schema "0.2.3" - verror "1.10.0" - -jsx-ast-utils@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-2.0.1.tgz#e801b1b39985e20fffc87b40e3748080e2dcac7f" - dependencies: - array-includes "^3.0.3" - -killable@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/killable/-/killable-1.0.1.tgz#4c8ce441187a061c7474fb87ca08e2a638194892" - -kind-of@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-2.0.1.tgz#018ec7a4ce7e3a86cb9141be519d24c8faa981b5" - dependencies: - is-buffer "^1.0.2" - -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" - dependencies: - is-buffer "^1.1.5" - -kind-of@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" - dependencies: - is-buffer "^1.1.5" - -kind-of@^5.0.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d" - -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" - -kleur@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/kleur/-/kleur-2.0.2.tgz#b704f4944d95e255d038f0cb05fb8a602c55a300" - -known-css-properties@^0.10.0: - version "0.10.0" - resolved "https://registry.yarnpkg.com/known-css-properties/-/known-css-properties-0.10.0.tgz#8378a8921e6c815ecc47095744a8900af63d577d" - -last-call-webpack-plugin@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/last-call-webpack-plugin/-/last-call-webpack-plugin-3.0.0.tgz#9742df0e10e3cf46e5c0381c2de90d3a7a2d7555" - dependencies: - lodash "^4.17.5" - webpack-sources "^1.1.0" - -lazy-cache@^0.2.3: - version "0.2.7" - resolved "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-0.2.7.tgz#7feddf2dcb6edb77d11ef1d117ab5ffdf0ab1b65" - -lazy-cache@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-1.0.4.tgz#a1d78fc3a50474cb80845d3b3b6e1da49a446e8e" - -lcid@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835" - 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" - dependencies: - invert-kv "^2.0.0" - -left-pad@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/left-pad/-/left-pad-1.3.0.tgz#5b8a3a7765dfe001261dde915589e782f8c94d1e" - -level-blobs@^0.1.7: - version "0.1.7" - resolved "https://registry.yarnpkg.com/level-blobs/-/level-blobs-0.1.7.tgz#9ab9b97bb99f1edbf9f78a3433e21ed56386bdaf" - dependencies: - level-peek "1.0.6" - once "^1.3.0" - readable-stream "^1.0.26-4" - -level-filesystem@^1.0.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/level-filesystem/-/level-filesystem-1.2.0.tgz#a00aca9919c4a4dfafdca6a8108d225aadff63b3" - dependencies: - concat-stream "^1.4.4" - errno "^0.1.1" - fwd-stream "^1.0.4" - level-blobs "^0.1.7" - level-peek "^1.0.6" - level-sublevel "^5.2.0" - octal "^1.0.0" - once "^1.3.0" - xtend "^2.2.0" - -level-fix-range@2.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/level-fix-range/-/level-fix-range-2.0.0.tgz#c417d62159442151a19d9a2367868f1724c2d548" - dependencies: - clone "~0.1.9" - -level-fix-range@~1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/level-fix-range/-/level-fix-range-1.0.2.tgz#bf15b915ae36d8470c821e883ddf79cd16420828" - -"level-hooks@>=4.4.0 <5": - version "4.5.0" - resolved "https://registry.yarnpkg.com/level-hooks/-/level-hooks-4.5.0.tgz#1b9ae61922930f3305d1a61fc4d83c8102c0dd93" - dependencies: - string-range "~1.2" - -level-js@^2.1.3: - version "2.2.4" - resolved "https://registry.yarnpkg.com/level-js/-/level-js-2.2.4.tgz#bc055f4180635d4489b561c9486fa370e8c11697" - dependencies: - abstract-leveldown "~0.12.0" - idb-wrapper "^1.5.0" - isbuffer "~0.0.0" - ltgt "^2.1.2" - typedarray-to-buffer "~1.0.0" - xtend "~2.1.2" - -level-peek@1.0.6, level-peek@^1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/level-peek/-/level-peek-1.0.6.tgz#bec51c72a82ee464d336434c7c876c3fcbcce77f" - dependencies: - level-fix-range "~1.0.2" - -level-sublevel@^5.2.0: - version "5.2.3" - resolved "https://registry.yarnpkg.com/level-sublevel/-/level-sublevel-5.2.3.tgz#744c12c72d2e72be78dde3b9b5cd84d62191413a" - dependencies: - level-fix-range "2.0" - level-hooks ">=4.4.0 <5" - string-range "~1.2.1" - xtend "~2.0.4" - -levelup@^0.18.2: - version "0.18.6" - resolved "https://registry.yarnpkg.com/levelup/-/levelup-0.18.6.tgz#e6a01cb089616c8ecc0291c2a9bd3f0c44e3e5eb" - dependencies: - bl "~0.8.1" - deferred-leveldown "~0.2.0" - errno "~0.1.1" - prr "~0.0.0" - readable-stream "~1.0.26" - semver "~2.3.1" - xtend "~3.0.0" - -leven@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/leven/-/leven-2.1.0.tgz#c2e7a9f772094dee9d34202ae8acce4687875580" - -levn@^0.3.0, levn@~0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" - dependencies: - prelude-ls "~1.1.2" - type-check "~0.3.2" - -lint-staged@^8.1.0: - version "8.1.0" - resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-8.1.0.tgz#dbc3ae2565366d8f20efb9f9799d076da64863f2" - dependencies: - "@iamstarkov/listr-update-renderer" "0.4.1" - chalk "^2.3.1" - commander "^2.14.1" - cosmiconfig "5.0.6" - debug "^3.1.0" - dedent "^0.7.0" - del "^3.0.0" - execa "^1.0.0" - find-parent-dir "^0.3.0" - g-status "^2.0.2" - is-glob "^4.0.0" - is-windows "^1.0.2" - jest-validate "^23.5.0" - listr "^0.14.2" - lodash "^4.17.5" - log-symbols "^2.2.0" - micromatch "^3.1.8" - npm-which "^3.0.1" - p-map "^1.1.1" - path-is-inside "^1.0.2" - pify "^3.0.0" - please-upgrade-node "^3.0.2" - staged-git-files "1.1.2" - string-argv "^0.0.2" - stringify-object "^3.2.2" - -listr-silent-renderer@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/listr-silent-renderer/-/listr-silent-renderer-1.1.1.tgz#924b5a3757153770bf1a8e3fbf74b8bbf3f9242e" - -listr-update-renderer@^0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/listr-update-renderer/-/listr-update-renderer-0.5.0.tgz#4ea8368548a7b8aecb7e06d8c95cb45ae2ede6a2" - dependencies: - chalk "^1.1.3" - cli-truncate "^0.2.1" - elegant-spinner "^1.0.1" - figures "^1.7.0" - indent-string "^3.0.0" - log-symbols "^1.0.2" - log-update "^2.3.0" - strip-ansi "^3.0.1" - -listr-verbose-renderer@^0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/listr-verbose-renderer/-/listr-verbose-renderer-0.5.0.tgz#f1132167535ea4c1261102b9f28dac7cba1e03db" - dependencies: - chalk "^2.4.1" - cli-cursor "^2.1.0" - date-fns "^1.27.2" - figures "^2.0.0" - -listr@^0.14.2: - version "0.14.3" - resolved "https://registry.yarnpkg.com/listr/-/listr-0.14.3.tgz#2fea909604e434be464c50bddba0d496928fa586" - dependencies: - "@samverschueren/stream-to-observable" "^0.3.0" - is-observable "^1.1.0" - is-promise "^2.1.0" - is-stream "^1.1.0" - listr-silent-renderer "^1.1.1" - listr-update-renderer "^0.5.0" - listr-verbose-renderer "^0.5.0" - p-map "^2.0.0" - rxjs "^6.3.3" - -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" - 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" - -load-json-file@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-2.0.0.tgz#7947e42149af80d696cbf797bcaabcfe1fe29ca8" - dependencies: - graceful-fs "^4.1.2" - parse-json "^2.2.0" - pify "^2.0.0" - strip-bom "^3.0.0" - -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" - dependencies: - graceful-fs "^4.1.2" - parse-json "^4.0.0" - pify "^3.0.0" - strip-bom "^3.0.0" - -loader-fs-cache@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/loader-fs-cache/-/loader-fs-cache-1.0.1.tgz#56e0bf08bd9708b26a765b68509840c8dec9fdbc" - dependencies: - find-cache-dir "^0.1.1" - mkdirp "0.5.1" - -loader-runner@^2.3.0: - version "2.3.1" - resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-2.3.1.tgz#026f12fe7c3115992896ac02ba022ba92971b979" - -loader-utils@1.1.0, loader-utils@^1.0.1, loader-utils@^1.0.2, loader-utils@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.1.0.tgz#c98aef488bcceda2ffb5e2de646d6a754429f5cd" - dependencies: - big.js "^3.1.3" - emojis-list "^2.0.0" - json5 "^0.5.0" - -loader-utils@^0.2.16: - version "0.2.17" - resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-0.2.17.tgz#f86e6374d43205a6e6c60e9196f17c0299bfb348" - dependencies: - big.js "^3.1.3" - emojis-list "^2.0.0" - json5 "^0.5.0" - object-assign "^4.0.1" - -locate-path@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" - dependencies: - p-locate "^2.0.0" - path-exists "^3.0.0" - -locate-path@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" - dependencies: - p-locate "^3.0.0" - path-exists "^3.0.0" - -lodash._reinterpolate@~3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz#0ccf2d89166af03b3663c796538b75ac6e114d9d" - -lodash.camelcase@^4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6" - -lodash.clonedeep@^4.5.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef" - -lodash.debounce@^4.0.8: - version "4.0.8" - resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" - -lodash.memoize@^4.1.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" - -lodash.sortby@^4.7.0: - version "4.7.0" - resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" - -lodash.tail@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/lodash.tail/-/lodash.tail-4.1.1.tgz#d2333a36d9e7717c8ad2f7cacafec7c32b444664" - -lodash.template@^4.2.4, lodash.template@^4.4.0: - version "4.4.0" - resolved "https://registry.yarnpkg.com/lodash.template/-/lodash.template-4.4.0.tgz#e73a0385c8355591746e020b99679c690e68fba0" - dependencies: - lodash._reinterpolate "~3.0.0" - lodash.templatesettings "^4.0.0" - -lodash.templatesettings@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/lodash.templatesettings/-/lodash.templatesettings-4.1.0.tgz#2b4d4e95ba440d915ff08bc899e4553666713316" - dependencies: - lodash._reinterpolate "~3.0.0" - -lodash.uniq@^4.5.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" - -"lodash@>=3.5 <5", lodash@^4.13.1, lodash@^4.17.10, lodash@^4.17.11, lodash@^4.17.4, lodash@^4.17.5: - version "4.17.11" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.11.tgz#b39ea6229ef607ecd89e2c8df12536891cac9b8d" - -log-symbols@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-1.0.2.tgz#376ff7b58ea3086a0f09facc74617eca501e1a18" - dependencies: - chalk "^1.0.0" - -log-symbols@^2.0.0, log-symbols@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-2.2.0.tgz#5740e1c5d6f0dfda4ad9323b5332107ef6b4c40a" - dependencies: - chalk "^2.0.1" - -log-update@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/log-update/-/log-update-2.3.0.tgz#88328fd7d1ce7938b29283746f0b1bc126b24708" - dependencies: - ansi-escapes "^3.0.0" - cli-cursor "^2.0.0" - wrap-ansi "^3.0.1" - -loglevel@^1.4.1: - version "1.6.1" - resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.6.1.tgz#e0fc95133b6ef276cdc8887cdaf24aa6f156f8fa" - -longest-streak@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/longest-streak/-/longest-streak-2.0.2.tgz#2421b6ba939a443bb9ffebf596585a50b4c38e2e" - -loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.3.1: - version "1.4.0" - resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" - dependencies: - js-tokens "^3.0.0 || ^4.0.0" - -loud-rejection@^1.0.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/loud-rejection/-/loud-rejection-1.6.0.tgz#5b46f80147edee578870f086d04821cf998e551f" - dependencies: - currently-unhandled "^0.4.1" - signal-exit "^3.0.0" - -lower-case@^1.1.1: - version "1.1.4" - resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-1.1.4.tgz#9a2cabd1b9e8e0ae993a4bf7d5875c39c42e8eac" - -lru-cache@^4.0.1, lru-cache@^4.1.1, lru-cache@^4.1.3: - version "4.1.5" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd" - dependencies: - pseudomap "^1.0.2" - yallist "^2.1.2" - -ltgt@^2.1.2: - version "2.2.1" - resolved "https://registry.yarnpkg.com/ltgt/-/ltgt-2.2.1.tgz#f35ca91c493f7b73da0e07495304f17b31f87ee5" - -magic-string@^0.25.1: - version "0.25.1" - resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.25.1.tgz#b1c248b399cd7485da0fe7385c2fc7011843266e" - dependencies: - sourcemap-codec "^1.4.1" - -make-dir@^1.0.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-1.3.0.tgz#79c1033b80515bd6d24ec9933e860ca75ee27f0c" - dependencies: - pify "^3.0.0" - -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" - -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" - 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-obj@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d" - -map-obj@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-2.0.0.tgz#a65cd29087a92598b8791257a523e021222ac1f9" - -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" - -markdown-escapes@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/markdown-escapes/-/markdown-escapes-1.0.2.tgz#e639cbde7b99c841c0bacc8a07982873b46d2122" - -markdown-table@^1.1.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/markdown-table/-/markdown-table-1.1.2.tgz#c78db948fa879903a41bce522e3b96f801c63786" - -matcher@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/matcher/-/matcher-1.1.1.tgz#51d8301e138f840982b338b116bb0c09af62c1c2" - dependencies: - escape-string-regexp "^1.0.4" - -math-expression-evaluator@^1.2.14: - version "1.2.17" - resolved "https://registry.yarnpkg.com/math-expression-evaluator/-/math-expression-evaluator-1.2.17.tgz#de819fdbcd84dccd8fae59c6aeb79615b9d266ac" - -math-random@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/math-random/-/math-random-1.0.1.tgz#8b3aac588b8a66e4975e3cdea67f7bb329601fac" - -mathml-tag-names@^2.0.1: - version "2.1.0" - resolved "https://registry.yarnpkg.com/mathml-tag-names/-/mathml-tag-names-2.1.0.tgz#490b70e062ee24636536e3d9481e333733d00f2c" - -md5.js@^1.3.4: - version "1.3.5" - resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f" - dependencies: - hash-base "^3.0.0" - inherits "^2.0.1" - safe-buffer "^5.1.2" - -mdast-util-compact@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/mdast-util-compact/-/mdast-util-compact-1.0.2.tgz#c12ebe16fffc84573d3e19767726de226e95f649" - dependencies: - unist-util-visit "^1.1.0" - -mdn-data@~1.1.0: - version "1.1.4" - resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-1.1.4.tgz#50b5d4ffc4575276573c4eedb8780812a8419f01" - -media-typer@0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" - -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" - -mem@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/mem/-/mem-4.0.0.tgz#6437690d9471678f6cc83659c00cbafcd6b0cdaf" - dependencies: - map-age-cleaner "^0.1.1" - mimic-fn "^1.0.0" - p-is-promise "^1.1.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" - dependencies: - errno "^0.1.3" - readable-stream "^2.0.1" - -meow@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/meow/-/meow-5.0.0.tgz#dfc73d63a9afc714a5e371760eb5c88b91078aa4" - dependencies: - camelcase-keys "^4.0.0" - decamelize-keys "^1.0.0" - loud-rejection "^1.0.0" - minimist-options "^3.0.1" - normalize-package-data "^2.3.4" - read-pkg-up "^3.0.0" - redent "^2.0.0" - trim-newlines "^2.0.0" - yargs-parser "^10.0.0" - -merge-deep@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/merge-deep/-/merge-deep-3.0.2.tgz#f39fa100a4f1bd34ff29f7d2bf4508fbb8d83ad2" - dependencies: - arr-union "^3.1.0" - clone-deep "^0.2.4" - kind-of "^3.0.2" - -merge-descriptors@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" - -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" - -merge2@^1.2.3: - version "1.2.3" - resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.2.3.tgz#7ee99dbd69bb6481689253f018488a1b902b0ed5" - -merge@^1.2.0: - version "1.2.1" - resolved "https://registry.yarnpkg.com/merge/-/merge-1.2.1.tgz#38bebf80c3220a8a487b6fcfb3941bb11720c145" - -methods@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" - -micromatch@^2.3.11: - version "2.3.11" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-2.3.11.tgz#86677c97d1720b363431d04d0d15293bd38c1565" - dependencies: - arr-diff "^2.0.0" - array-unique "^0.2.1" - braces "^1.8.2" - expand-brackets "^0.1.4" - extglob "^0.3.1" - filename-regex "^2.0.0" - is-extglob "^1.0.0" - is-glob "^2.0.1" - kind-of "^3.0.2" - normalize-path "^2.0.1" - object.omit "^2.0.0" - parse-glob "^3.0.4" - regex-cache "^0.4.2" - -micromatch@^3.1.10, micromatch@^3.1.4, micromatch@^3.1.8, micromatch@^3.1.9: - version "3.1.10" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" - dependencies: - arr-diff "^4.0.0" - array-unique "^0.3.2" - braces "^2.3.1" - define-property "^2.0.2" - extend-shallow "^3.0.2" - extglob "^2.0.4" - fragment-cache "^0.2.1" - kind-of "^6.0.2" - nanomatch "^1.2.9" - object.pick "^1.3.0" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.2" - -miller-rabin@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.1.tgz#f080351c865b0dc562a8462966daa53543c78a4d" - dependencies: - bn.js "^4.0.0" - brorand "^1.0.1" - -"mime-db@>= 1.36.0 < 2", mime-db@~1.37.0: - version "1.37.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.37.0.tgz#0b6a0ce6fdbe9576e25f1f2d2fde8830dc0ad0d8" - -mime-types@^2.1.12, mime-types@~2.1.17, mime-types@~2.1.18, mime-types@~2.1.19: - version "2.1.21" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.21.tgz#28995aa1ecb770742fe6ae7e58f9181c744b3f96" - dependencies: - mime-db "~1.37.0" - -mime@1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/mime/-/mime-1.4.1.tgz#121f9ebc49e3766f311a76e1fa1c8003c4b03aa6" - -mime@^2.0.3, mime@^2.3.1: - version "2.4.0" - resolved "https://registry.yarnpkg.com/mime/-/mime-2.4.0.tgz#e051fd881358585f3279df333fe694da0bcffdd6" - -mimic-fn@^1.0.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" - -mini-css-extract-plugin@0.4.3: - version "0.4.3" - resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-0.4.3.tgz#98d60fcc5d228c3e36a9bd15a1d6816d6580beb8" - dependencies: - loader-utils "^1.1.0" - schema-utils "^1.0.0" - webpack-sources "^1.1.0" - -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" - -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" - -minimatch@3.0.4, minimatch@^3.0.2, 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: - brace-expansion "^1.1.7" - -minimist-options@^3.0.1: - version "3.0.2" - resolved "https://registry.yarnpkg.com/minimist-options/-/minimist-options-3.0.2.tgz#fba4c8191339e13ecf4d61beb03f070103f3d954" - dependencies: - arrify "^1.0.1" - is-plain-obj "^1.1.0" - -minimist@0.0.8: - version "0.0.8" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" - -minimist@1.1.x: - version "1.1.3" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.1.3.tgz#3bedfd91a92d39016fcfaa1c681e8faa1a1efda8" - -minimist@^1.1.1, minimist@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" - -minimist@~0.0.1: - version "0.0.10" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf" - integrity sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8= - -minipass@^2.2.1, minipass@^2.3.4: - version "2.3.5" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.3.5.tgz#cacebe492022497f656b0f0f51e2682a9ed2d848" - 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" - dependencies: - minipass "^2.2.1" - -mississippi@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/mississippi/-/mississippi-2.0.0.tgz#3442a508fafc28500486feea99409676e4ee5a6f" - 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 "^2.0.1" - pumpify "^1.3.3" - stream-each "^1.1.0" - through2 "^2.0.0" - -mississippi@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/mississippi/-/mississippi-3.0.0.tgz#ea0a3291f97e0b5e8776b363d5f0a12d94c67022" - 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" - dependencies: - for-in "^1.0.2" - is-extendable "^1.0.1" - -mixin-object@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/mixin-object/-/mixin-object-2.0.1.tgz#4fb949441dab182540f1fe035ba60e1947a5e57e" - dependencies: - for-in "^0.1.3" - is-extendable "^0.1.1" - -mkdirp@0.5.1, mkdirp@0.5.x, mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.0, mkdirp@~0.5.1: - version "0.5.1" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" - dependencies: - minimist "0.0.8" - -mkpath@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/mkpath/-/mkpath-1.0.0.tgz#ebb3a977e7af1c683ae6fda12b545a6ba6c5853d" - -move-concurrently@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/move-concurrently/-/move-concurrently-1.0.1.tgz#be2c005fda32e0b29af1f05d7c4b33214c701f92" - 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" - -ms@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" - -multicast-dns-service-types@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz#899f11d9686e5e05cb91b35d5f0e63b773cfc901" - -multicast-dns@^6.0.1: - version "6.2.3" - resolved "https://registry.yarnpkg.com/multicast-dns/-/multicast-dns-6.2.3.tgz#a0ec7bd9055c4282f790c3c82f4e28db3b31b229" - dependencies: - dns-packet "^1.3.1" - thunky "^1.0.2" - -mute-stream@0.0.7: - version "0.0.7" - resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" - -nan@^2.9.2: - version "2.11.1" - resolved "https://registry.yarnpkg.com/nan/-/nan-2.11.1.tgz#90e22bccb8ca57ea4cd37cc83d3819b52eea6766" - -nanomatch@^1.2.9: - version "1.2.13" - resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" - dependencies: - arr-diff "^4.0.0" - array-unique "^0.3.2" - define-property "^2.0.2" - extend-shallow "^3.0.2" - fragment-cache "^0.2.1" - is-windows "^1.0.2" - kind-of "^6.0.2" - object.pick "^1.3.0" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.1" - -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.2.4" - resolved "https://registry.yarnpkg.com/needle/-/needle-2.2.4.tgz#51931bff82533b1928b7d1d69e01f1b00ffd2a4e" - dependencies: - debug "^2.1.2" - iconv-lite "^0.4.4" - sax "^1.2.4" - -negotiator@0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.1.tgz#2b327184e8992101177b28563fb5e7102acd0ca9" - -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" - resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" - -no-case@^2.2.0: - version "2.3.2" - resolved "https://registry.yarnpkg.com/no-case/-/no-case-2.3.2.tgz#60b813396be39b3f1288a4c1ed5d1e7d28b464ac" - dependencies: - lower-case "^1.1.1" - -node-forge@0.7.5: - version "0.7.5" - resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.7.5.tgz#6c152c345ce11c52f465c2abd957e8639cd674df" - -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.1.0" - resolved "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-2.1.0.tgz#5f94263d404f6e44767d726901fff05478d600df" - 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 "^1.0.0" - https-browserify "^1.0.0" - os-browserify "^0.3.0" - path-browserify "0.0.0" - 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.10.3" - vm-browserify "0.0.4" - -node-notifier@^5.2.1: - version "5.3.0" - resolved "https://registry.yarnpkg.com/node-notifier/-/node-notifier-5.3.0.tgz#c77a4a7b84038733d5fb351aafd8a268bfe19a01" - dependencies: - growly "^1.3.0" - semver "^5.5.0" - shellwords "^0.1.1" - which "^1.3.0" - -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" - dependencies: - detect-libc "^1.0.2" - mkdirp "^0.5.1" - needle "^2.2.1" - nopt "^4.0.1" - npm-packlist "^1.1.6" - npmlog "^4.0.2" - rc "^1.2.7" - rimraf "^2.6.1" - semver "^5.3.0" - tar "^4" - -node-releases@^1.0.0-alpha.11, node-releases@^1.0.5: - version "1.1.0" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.0.tgz#be7464fa8d877808237520fd49436d5e79191c3d" - dependencies: - semver "^5.3.0" - -node-releases@^1.1.1: - version "1.1.3" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.3.tgz#aad9ce0dcb98129c753f772c0aa01360fb90fbd2" - dependencies: - semver "^5.3.0" - -nopt@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.1.tgz#d0d4685afd5415193c8c7505602d0d17cd64474d" - dependencies: - abbrev "1" - osenv "^0.1.4" - -normalize-package-data@^2.3.2, normalize-package-data@^2.3.4: - version "2.4.0" - resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.4.0.tgz#12f95a307d58352075a04907b84ac8be98ac012f" - dependencies: - hosted-git-info "^2.1.4" - is-builtin-module "^1.0.0" - semver "2 || 3 || 4 || 5" - validate-npm-package-license "^3.0.1" - -normalize-path@^2.0.1, normalize-path@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" - dependencies: - remove-trailing-separator "^1.0.1" - -normalize-range@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942" - -normalize-selector@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/normalize-selector/-/normalize-selector-0.2.0.tgz#d0b145eb691189c63a78d201dc4fdb1293ef0c03" - -normalize-url@^1.0.0, normalize-url@^1.4.0: - version "1.9.1" - resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-1.9.1.tgz#2cc0d66b31ea23036458436e3620d85954c66c3c" - dependencies: - object-assign "^4.0.1" - prepend-http "^1.0.0" - query-string "^4.1.0" - sort-keys "^1.0.0" - -normalize-url@^3.0.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-3.3.0.tgz#b2e1c4dc4f7c6d57743df733a4f5978d18650559" - -npm-bundled@^1.0.1: - version "1.0.5" - resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.0.5.tgz#3c1732b7ba936b3a10325aef616467c0ccbcc979" - -npm-packlist@^1.1.6: - version "1.1.12" - resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.1.12.tgz#22bde2ebc12e72ca482abd67afc51eb49377243a" - 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" - dependencies: - which "^1.2.10" - -npm-run-path@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" - dependencies: - path-key "^2.0.0" - -npm-which@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/npm-which/-/npm-which-3.0.1.tgz#9225f26ec3a285c209cae67c3b11a6b4ab7140aa" - dependencies: - commander "^2.9.0" - npm-path "^2.0.2" - which "^1.2.10" - -npmlog@^4.0.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" - dependencies: - are-we-there-yet "~1.1.2" - console-control-strings "~1.1.0" - gauge "~2.7.3" - set-blocking "~2.0.0" - -nth-check@^1.0.2, nth-check@~1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-1.0.2.tgz#b2bd295c37e3dd58a3bf0700376663ba4d9cf05c" - dependencies: - boolbase "~1.0.0" - -num2fraction@^1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/num2fraction/-/num2fraction-1.2.2.tgz#6f682b6a027a4e9ddfa4564cd2589d1d4e669ede" - -number-is-nan@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" - -nwsapi@^2.0.7, nwsapi@^2.0.9: - version "2.0.9" - resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.0.9.tgz#77ac0cdfdcad52b6a1151a84e73254edc33ed016" - -oauth-sign@~0.9.0: - version "0.9.0" - resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" - -object-assign@4.1.1, 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" - -object-copy@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c" - dependencies: - copy-descriptor "^0.1.0" - define-property "^0.2.5" - kind-of "^3.0.3" - -object-hash@^1.1.4: - version "1.3.1" - resolved "https://registry.yarnpkg.com/object-hash/-/object-hash-1.3.1.tgz#fde452098a951cb145f039bb7d455449ddc126df" - -object-keys@^1.0.11, object-keys@^1.0.12: - version "1.0.12" - resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.0.12.tgz#09c53855377575310cca62f55bb334abff7b3ed2" - -object-keys@~0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-0.2.0.tgz#cddec02998b091be42bf1035ae32e49f1cb6ea67" - dependencies: - foreach "~2.0.1" - indexof "~0.0.1" - is "~0.2.6" - -object-keys@~0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-0.4.0.tgz#28a6aae7428dd2c3a92f3d95f21335dd204e0336" - -object-visit@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" - dependencies: - isobject "^3.0.0" - -object.assign@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.0.tgz#968bf1100d7956bb3ca086f006f846b3bc4008da" - dependencies: - define-properties "^1.1.2" - function-bind "^1.1.1" - has-symbols "^1.0.0" - object-keys "^1.0.11" - -object.getownpropertydescriptors@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz#8758c846f5b407adab0f236e0986f14b051caa16" - dependencies: - define-properties "^1.1.2" - es-abstract "^1.5.1" - -object.omit@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/object.omit/-/object.omit-2.0.1.tgz#1a9c744829f39dbb858c76ca3579ae2a54ebd1fa" - dependencies: - for-own "^0.1.4" - is-extendable "^0.1.1" - -object.pick@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" - dependencies: - isobject "^3.0.1" - -object.values@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.0.4.tgz#e524da09b4f66ff05df457546ec72ac99f13069a" - dependencies: - define-properties "^1.1.2" - es-abstract "^1.6.1" - function-bind "^1.1.0" - has "^1.0.1" - -obuf@^1.0.0, obuf@^1.1.1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/obuf/-/obuf-1.1.2.tgz#09bea3343d41859ebd446292d11c9d4db619084e" - -octal@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/octal/-/octal-1.0.0.tgz#63e7162a68efbeb9e213588d58e989d1e5c4530b" - -on-finished@~2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" - dependencies: - ee-first "1.1.1" - -on-headers@~1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.1.tgz#928f5d0f470d49342651ea6794b0857c100693f7" - -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: - wrappy "1" - -onetime@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4" - dependencies: - mimic-fn "^1.0.0" - -opn@5.4.0, opn@^5.1.0: - version "5.4.0" - resolved "https://registry.yarnpkg.com/opn/-/opn-5.4.0.tgz#cb545e7aab78562beb11aa3bfabc7042e1761035" - dependencies: - is-wsl "^1.1.0" - -optimist@^0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.6.1.tgz#da3ea74686fa21a19a111c326e90eb15a0196686" - integrity sha1-2j6nRob6IaGaERwybpDrFaAZZoY= - dependencies: - minimist "~0.0.1" - wordwrap "~0.0.2" - -optimize-css-assets-webpack-plugin@5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/optimize-css-assets-webpack-plugin/-/optimize-css-assets-webpack-plugin-5.0.1.tgz#9eb500711d35165b45e7fd60ba2df40cb3eb9159" - dependencies: - cssnano "^4.1.0" - last-call-webpack-plugin "^3.0.0" - -optionator@^0.8.1, optionator@^0.8.2: - version "0.8.2" - resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.2.tgz#364c5e409d3f4d6301d6c0b4c05bba50180aeb64" - dependencies: - deep-is "~0.1.3" - fast-levenshtein "~2.0.4" - levn "~0.3.0" - prelude-ls "~1.1.2" - type-check "~0.3.2" - wordwrap "~1.0.0" - -original@>=0.0.5: - version "1.0.2" - resolved "https://registry.yarnpkg.com/original/-/original-1.0.2.tgz#e442a61cffe1c5fd20a65f3261c26663b303f25f" - dependencies: - url-parse "^1.4.3" - -os-browserify@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.3.0.tgz#854373c7f5c2315914fc9bfc6bd8238fdda1ec27" - -os-homedir@^1.0.0, os-homedir@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" - -os-locale@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-2.1.0.tgz#42bc2900a6b5b8bd17376c8e882b65afccf24bf2" - dependencies: - execa "^0.7.0" - lcid "^1.0.0" - mem "^1.1.0" - -os-locale@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-3.0.1.tgz#3b014fbf01d87f60a1e5348d80fe870dc82c4620" - dependencies: - execa "^0.10.0" - lcid "^2.0.0" - mem "^4.0.0" - -os-tmpdir@^1.0.0, os-tmpdir@^1.0.1, os-tmpdir@~1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" - -osenv@^0.1.4: - version "0.1.5" - resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410" - dependencies: - 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" - -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@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/p-is-promise/-/p-is-promise-1.1.0.tgz#9c9456989e9f6588017b0434d56097675c3da05e" - -p-limit@^1.1.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" - dependencies: - p-try "^1.0.0" - -p-limit@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.0.0.tgz#e624ed54ee8c460a778b3c9f3670496ff8a57aec" - 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" - 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-map@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/p-map/-/p-map-2.0.0.tgz#be18c5a5adeb8e156460651421aceca56c213a50" - -p-queue@^2.4.2: - version "2.4.2" - resolved "https://registry.yarnpkg.com/p-queue/-/p-queue-2.4.2.tgz#03609826682b743be9a22dba25051bd46724fc34" - -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.0.0" - resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.0.0.tgz#85080bb87c64688fa47996fe8f7dfbe8211760b1" - -pako@~1.0.5: - version "1.0.7" - resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.7.tgz#2473439021b57f1516c82f58be7275ad8ef1bb27" - -parallel-transform@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/parallel-transform/-/parallel-transform-1.1.0.tgz#d410f065b05da23081fcd10f28854c29bda33b06" - dependencies: - cyclist "~0.2.2" - inherits "^2.0.3" - readable-stream "^2.1.5" - -param-case@2.1.x: - version "2.1.1" - resolved "https://registry.yarnpkg.com/param-case/-/param-case-2.1.1.tgz#df94fd8cf6531ecf75e6bef9a0858fbc72be2247" - dependencies: - no-case "^2.2.0" - -parse-asn1@^5.0.0: - version "5.1.1" - resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.1.tgz#f6bf293818332bd0dab54efb16087724745e6ca8" - 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" - -parse-entities@^1.0.2, parse-entities@^1.1.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/parse-entities/-/parse-entities-1.2.0.tgz#9deac087661b2e36814153cb78d7e54a4c5fd6f4" - dependencies: - character-entities "^1.0.0" - character-entities-legacy "^1.0.0" - character-reference-invalid "^1.0.0" - is-alphanumerical "^1.0.0" - is-decimal "^1.0.0" - is-hexadecimal "^1.0.0" - -parse-glob@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/parse-glob/-/parse-glob-3.0.4.tgz#b2c376cfb11f35513badd173ef0bb6e3a388391c" - dependencies: - glob-base "^0.3.0" - is-dotfile "^1.0.0" - is-extglob "^1.0.0" - is-glob "^2.0.0" - -parse-json@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" - 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" - dependencies: - error-ex "^1.3.1" - json-parse-better-errors "^1.0.1" - -parse-passwd@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/parse-passwd/-/parse-passwd-1.0.0.tgz#6d5b934a456993b23d37f40a382d6f1666a8e5c6" - -parse5@4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/parse5/-/parse5-4.0.0.tgz#6d78656e3da8d78b4ec0b906f7c08ef1dfe3f608" - -parse5@5.1.0, parse5@^5.0.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/parse5/-/parse5-5.1.0.tgz#c59341c9723f414c452975564c7c00a68d58acd2" - -parseurl@~1.3.2: - version "1.3.2" - resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.2.tgz#fc289d4ed8993119460c156253262cdc8de65bf3" - -pascalcase@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" - -path-browserify@0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.0.tgz#a0b870729aae214005b7d5032ec2cbbb0fb4451a" - -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" - -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: - version "1.0.1" - resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" - -path-is-inside@^1.0.1, path-is-inside@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" - -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" - -path-parse@^1.0.5: - version "1.0.6" - resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" - -path-to-regexp@0.1.7: - version "0.1.7" - resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" - -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-type@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-2.0.0.tgz#f012ccb8415b7096fc2daa1054c3d72389594c73" - dependencies: - pify "^2.0.0" - -path-type@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f" - dependencies: - pify "^3.0.0" - -pbkdf2@^3.0.3: - version "3.0.17" - resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.0.17.tgz#976c206530617b14ebb32114239f7b09336e93a6" - 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" - -pify@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" - -pify@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" - -pinkie-promise@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" - dependencies: - pinkie "^2.0.0" - -pinkie@^2.0.0: - version "2.0.4" - resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" - -pkg-dir@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-1.0.0.tgz#7a4b508a8d5bb2d629d447056ff4e9c9314cf3d4" - dependencies: - find-up "^1.0.0" - -pkg-dir@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-2.0.0.tgz#f6d5d1109e19d63edf428e0bd57e12777615334b" - dependencies: - find-up "^2.1.0" - -pkg-dir@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-3.0.0.tgz#2749020f239ed990881b1f71210d51eb6523bea3" - dependencies: - find-up "^3.0.0" - -pkg-up@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/pkg-up/-/pkg-up-2.0.0.tgz#c819ac728059a461cab1c3889a2be3c49a004d7f" - dependencies: - find-up "^2.1.0" - -please-upgrade-node@^3.0.2, please-upgrade-node@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/please-upgrade-node/-/please-upgrade-node-3.1.1.tgz#ed320051dfcc5024fae696712c8288993595e8ac" - dependencies: - semver-compare "^1.0.0" - -pluralize@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-7.0.0.tgz#298b89df8b93b0221dbf421ad2b1b1ea23fc6777" - -pn@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/pn/-/pn-1.1.0.tgz#e2f4cef0e219f463c179ab37463e4e1ecdccbafb" - -pnp-webpack-plugin@1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/pnp-webpack-plugin/-/pnp-webpack-plugin-1.1.0.tgz#947a96d1db94bb5a1fc014d83b581e428699ac8c" - -portfinder@^1.0.9: - version "1.0.20" - resolved "https://registry.yarnpkg.com/portfinder/-/portfinder-1.0.20.tgz#bea68632e54b2e13ab7b0c4775e9b41bf270e44a" - dependencies: - async "^1.5.2" - debug "^2.2.0" - mkdirp "0.5.x" - -posix-character-classes@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" - -postcss-attribute-case-insensitive@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-4.0.0.tgz#807b6a797ad8bf1c821b2d51cf641e9dd3837624" - dependencies: - postcss "^7.0.2" - postcss-selector-parser "^5.0.0-rc.3" - -postcss-calc@^5.2.0: - version "5.3.1" - resolved "https://registry.yarnpkg.com/postcss-calc/-/postcss-calc-5.3.1.tgz#77bae7ca928ad85716e2fda42f261bf7c1d65b5e" - dependencies: - postcss "^5.0.2" - postcss-message-helpers "^2.0.0" - reduce-css-calc "^1.2.6" - -postcss-calc@^7.0.0: - version "7.0.1" - resolved "https://registry.yarnpkg.com/postcss-calc/-/postcss-calc-7.0.1.tgz#36d77bab023b0ecbb9789d84dcb23c4941145436" - dependencies: - css-unit-converter "^1.1.1" - postcss "^7.0.5" - postcss-selector-parser "^5.0.0-rc.4" - postcss-value-parser "^3.3.1" - -postcss-color-functional-notation@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/postcss-color-functional-notation/-/postcss-color-functional-notation-2.0.1.tgz#5efd37a88fbabeb00a2966d1e53d98ced93f74e0" - dependencies: - postcss "^7.0.2" - postcss-values-parser "^2.0.0" - -postcss-color-gray@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/postcss-color-gray/-/postcss-color-gray-5.0.0.tgz#532a31eb909f8da898ceffe296fdc1f864be8547" - dependencies: - "@csstools/convert-colors" "^1.4.0" - postcss "^7.0.5" - postcss-values-parser "^2.0.0" - -postcss-color-hex-alpha@^5.0.2: - version "5.0.2" - resolved "https://registry.yarnpkg.com/postcss-color-hex-alpha/-/postcss-color-hex-alpha-5.0.2.tgz#e9b1886bb038daed33f6394168c210b40bb4fdb6" - dependencies: - postcss "^7.0.2" - postcss-values-parser "^2.0.0" - -postcss-color-mod-function@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/postcss-color-mod-function/-/postcss-color-mod-function-3.0.3.tgz#816ba145ac11cc3cb6baa905a75a49f903e4d31d" - dependencies: - "@csstools/convert-colors" "^1.4.0" - postcss "^7.0.2" - postcss-values-parser "^2.0.0" - -postcss-color-rebeccapurple@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-color-rebeccapurple/-/postcss-color-rebeccapurple-4.0.1.tgz#c7a89be872bb74e45b1e3022bfe5748823e6de77" - dependencies: - postcss "^7.0.2" - postcss-values-parser "^2.0.0" - -postcss-colormin@^2.1.8: - version "2.2.2" - resolved "https://registry.yarnpkg.com/postcss-colormin/-/postcss-colormin-2.2.2.tgz#6631417d5f0e909a3d7ec26b24c8a8d1e4f96e4b" - dependencies: - colormin "^1.0.5" - postcss "^5.0.13" - postcss-value-parser "^3.2.3" - -postcss-colormin@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-colormin/-/postcss-colormin-4.0.2.tgz#93cd1fa11280008696887db1a528048b18e7ed99" - dependencies: - browserslist "^4.0.0" - color "^3.0.0" - has "^1.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - -postcss-convert-values@^2.3.4: - version "2.6.1" - resolved "https://registry.yarnpkg.com/postcss-convert-values/-/postcss-convert-values-2.6.1.tgz#bbd8593c5c1fd2e3d1c322bb925dcae8dae4d62d" - dependencies: - postcss "^5.0.11" - postcss-value-parser "^3.1.2" - -postcss-convert-values@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-convert-values/-/postcss-convert-values-4.0.1.tgz#ca3813ed4da0f812f9d43703584e449ebe189a7f" - dependencies: - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - -postcss-custom-media@^7.0.7: - version "7.0.7" - resolved "https://registry.yarnpkg.com/postcss-custom-media/-/postcss-custom-media-7.0.7.tgz#bbc698ed3089ded61aad0f5bfb1fb48bf6969e73" - dependencies: - postcss "^7.0.5" - -postcss-custom-properties@^8.0.9: - version "8.0.9" - resolved "https://registry.yarnpkg.com/postcss-custom-properties/-/postcss-custom-properties-8.0.9.tgz#8943870528a6eae4c8e8d285b6ccc9fd1f97e69c" - dependencies: - postcss "^7.0.5" - postcss-values-parser "^2.0.0" - -postcss-custom-selectors@^5.1.2: - version "5.1.2" - resolved "https://registry.yarnpkg.com/postcss-custom-selectors/-/postcss-custom-selectors-5.1.2.tgz#64858c6eb2ecff2fb41d0b28c9dd7b3db4de7fba" - dependencies: - postcss "^7.0.2" - postcss-selector-parser "^5.0.0-rc.3" - -postcss-dir-pseudo-class@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/postcss-dir-pseudo-class/-/postcss-dir-pseudo-class-5.0.0.tgz#6e3a4177d0edb3abcc85fdb6fbb1c26dabaeaba2" - dependencies: - postcss "^7.0.2" - postcss-selector-parser "^5.0.0-rc.3" - -postcss-discard-comments@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/postcss-discard-comments/-/postcss-discard-comments-2.0.4.tgz#befe89fafd5b3dace5ccce51b76b81514be00e3d" - dependencies: - postcss "^5.0.14" - -postcss-discard-comments@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-discard-comments/-/postcss-discard-comments-4.0.1.tgz#30697735b0c476852a7a11050eb84387a67ef55d" - dependencies: - postcss "^7.0.0" - -postcss-discard-duplicates@^2.0.1: - version "2.1.0" - resolved "https://registry.yarnpkg.com/postcss-discard-duplicates/-/postcss-discard-duplicates-2.1.0.tgz#b9abf27b88ac188158a5eb12abcae20263b91932" - dependencies: - postcss "^5.0.4" - -postcss-discard-duplicates@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-discard-duplicates/-/postcss-discard-duplicates-4.0.2.tgz#3fe133cd3c82282e550fc9b239176a9207b784eb" - dependencies: - postcss "^7.0.0" - -postcss-discard-empty@^2.0.1: - version "2.1.0" - resolved "https://registry.yarnpkg.com/postcss-discard-empty/-/postcss-discard-empty-2.1.0.tgz#d2b4bd9d5ced5ebd8dcade7640c7d7cd7f4f92b5" - dependencies: - postcss "^5.0.14" - -postcss-discard-empty@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-discard-empty/-/postcss-discard-empty-4.0.1.tgz#c8c951e9f73ed9428019458444a02ad90bb9f765" - dependencies: - postcss "^7.0.0" - -postcss-discard-overridden@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/postcss-discard-overridden/-/postcss-discard-overridden-0.1.1.tgz#8b1eaf554f686fb288cd874c55667b0aa3668d58" - dependencies: - postcss "^5.0.16" - -postcss-discard-overridden@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-discard-overridden/-/postcss-discard-overridden-4.0.1.tgz#652aef8a96726f029f5e3e00146ee7a4e755ff57" - dependencies: - postcss "^7.0.0" - -postcss-discard-unused@^2.2.1: - version "2.2.3" - resolved "https://registry.yarnpkg.com/postcss-discard-unused/-/postcss-discard-unused-2.2.3.tgz#bce30b2cc591ffc634322b5fb3464b6d934f4433" - dependencies: - postcss "^5.0.14" - uniqs "^2.0.0" - -postcss-double-position-gradients@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/postcss-double-position-gradients/-/postcss-double-position-gradients-1.0.0.tgz#fc927d52fddc896cb3a2812ebc5df147e110522e" - dependencies: - postcss "^7.0.5" - postcss-values-parser "^2.0.0" - -postcss-env-function@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/postcss-env-function/-/postcss-env-function-2.0.2.tgz#0f3e3d3c57f094a92c2baf4b6241f0b0da5365d7" - dependencies: - postcss "^7.0.2" - postcss-values-parser "^2.0.0" - -postcss-filter-plugins@^2.0.0: - version "2.0.3" - resolved "https://registry.yarnpkg.com/postcss-filter-plugins/-/postcss-filter-plugins-2.0.3.tgz#82245fdf82337041645e477114d8e593aa18b8ec" - dependencies: - postcss "^5.0.4" - -postcss-flexbugs-fixes@4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/postcss-flexbugs-fixes/-/postcss-flexbugs-fixes-4.1.0.tgz#e094a9df1783e2200b7b19f875dcad3b3aff8b20" - dependencies: - postcss "^7.0.0" - -postcss-focus-visible@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/postcss-focus-visible/-/postcss-focus-visible-4.0.0.tgz#477d107113ade6024b14128317ade2bd1e17046e" - dependencies: - postcss "^7.0.2" - -postcss-focus-within@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/postcss-focus-within/-/postcss-focus-within-3.0.0.tgz#763b8788596cee9b874c999201cdde80659ef680" - dependencies: - postcss "^7.0.2" - -postcss-font-variant@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/postcss-font-variant/-/postcss-font-variant-4.0.0.tgz#71dd3c6c10a0d846c5eda07803439617bbbabacc" - dependencies: - postcss "^7.0.2" - -postcss-gap-properties@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/postcss-gap-properties/-/postcss-gap-properties-2.0.0.tgz#431c192ab3ed96a3c3d09f2ff615960f902c1715" - dependencies: - postcss "^7.0.2" - -postcss-html@^0.34.0: - version "0.34.0" - resolved "https://registry.yarnpkg.com/postcss-html/-/postcss-html-0.34.0.tgz#9bfd637ad8c3d3a43625b5ef844dc804b3370868" - dependencies: - htmlparser2 "^3.9.2" - -postcss-image-set-function@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/postcss-image-set-function/-/postcss-image-set-function-3.0.1.tgz#28920a2f29945bed4c3198d7df6496d410d3f288" - dependencies: - postcss "^7.0.2" - postcss-values-parser "^2.0.0" - -postcss-initial@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/postcss-initial/-/postcss-initial-3.0.0.tgz#1772512faf11421b791fb2ca6879df5f68aa0517" - dependencies: - lodash.template "^4.2.4" - postcss "^7.0.2" - -postcss-jsx@^0.35.0: - version "0.35.0" - resolved "https://registry.yarnpkg.com/postcss-jsx/-/postcss-jsx-0.35.0.tgz#1d6cb82393994cdc7e9aa421648e3f0f3f98209b" - dependencies: - "@babel/core" "^7.1.2" - optionalDependencies: - postcss-styled ">=0.34.0" - -postcss-lab-function@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/postcss-lab-function/-/postcss-lab-function-2.0.1.tgz#bb51a6856cd12289ab4ae20db1e3821ef13d7d2e" - dependencies: - "@csstools/convert-colors" "^1.4.0" - postcss "^7.0.2" - postcss-values-parser "^2.0.0" - -postcss-less@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/postcss-less/-/postcss-less-3.1.0.tgz#0e14a80206b452f44d3a09d082fa72645e8168cc" - dependencies: - postcss "^7.0.3" - -postcss-load-config@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-1.2.0.tgz#539e9afc9ddc8620121ebf9d8c3673e0ce50d28a" - dependencies: - cosmiconfig "^2.1.0" - object-assign "^4.1.0" - postcss-load-options "^1.2.0" - postcss-load-plugins "^2.3.0" - -postcss-load-config@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-2.0.0.tgz#f1312ddbf5912cd747177083c5ef7a19d62ee484" - dependencies: - cosmiconfig "^4.0.0" - import-cwd "^2.0.0" - -postcss-load-options@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/postcss-load-options/-/postcss-load-options-1.2.0.tgz#b098b1559ddac2df04bc0bb375f99a5cfe2b6d8c" - dependencies: - cosmiconfig "^2.1.0" - object-assign "^4.1.0" - -postcss-load-plugins@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/postcss-load-plugins/-/postcss-load-plugins-2.3.0.tgz#745768116599aca2f009fad426b00175049d8d92" - dependencies: - cosmiconfig "^2.1.1" - object-assign "^4.1.0" - -postcss-loader@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/postcss-loader/-/postcss-loader-3.0.0.tgz#6b97943e47c72d845fa9e03f273773d4e8dd6c2d" - dependencies: - loader-utils "^1.1.0" - postcss "^7.0.0" - postcss-load-config "^2.0.0" - schema-utils "^1.0.0" - -postcss-logical@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/postcss-logical/-/postcss-logical-3.0.0.tgz#2495d0f8b82e9f262725f75f9401b34e7b45d5b5" - dependencies: - postcss "^7.0.2" - -postcss-markdown@^0.34.0: - version "0.34.0" - resolved "https://registry.yarnpkg.com/postcss-markdown/-/postcss-markdown-0.34.0.tgz#7a043e6eee3ab846a4cefe3ab43d141038e2da79" - dependencies: - remark "^9.0.0" - unist-util-find-all-after "^1.0.2" - -postcss-media-minmax@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/postcss-media-minmax/-/postcss-media-minmax-4.0.0.tgz#b75bb6cbc217c8ac49433e12f22048814a4f5ed5" - dependencies: - postcss "^7.0.2" - -postcss-media-query-parser@^0.2.3: - version "0.2.3" - resolved "https://registry.yarnpkg.com/postcss-media-query-parser/-/postcss-media-query-parser-0.2.3.tgz#27b39c6f4d94f81b1a73b8f76351c609e5cef244" - -postcss-merge-idents@^2.1.5: - version "2.1.7" - resolved "https://registry.yarnpkg.com/postcss-merge-idents/-/postcss-merge-idents-2.1.7.tgz#4c5530313c08e1d5b3bbf3d2bbc747e278eea270" - dependencies: - has "^1.0.1" - postcss "^5.0.10" - postcss-value-parser "^3.1.1" - -postcss-merge-longhand@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/postcss-merge-longhand/-/postcss-merge-longhand-2.0.2.tgz#23d90cd127b0a77994915332739034a1a4f3d658" - dependencies: - postcss "^5.0.4" - -postcss-merge-longhand@^4.0.9: - version "4.0.9" - resolved "https://registry.yarnpkg.com/postcss-merge-longhand/-/postcss-merge-longhand-4.0.9.tgz#c2428b994833ffb2a072f290ca642e75ceabcd6f" - dependencies: - css-color-names "0.0.4" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - stylehacks "^4.0.0" - -postcss-merge-rules@^2.0.3: - version "2.1.2" - resolved "https://registry.yarnpkg.com/postcss-merge-rules/-/postcss-merge-rules-2.1.2.tgz#d1df5dfaa7b1acc3be553f0e9e10e87c61b5f721" - dependencies: - browserslist "^1.5.2" - caniuse-api "^1.5.2" - postcss "^5.0.4" - postcss-selector-parser "^2.2.2" - vendors "^1.0.0" - -postcss-merge-rules@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-merge-rules/-/postcss-merge-rules-4.0.2.tgz#2be44401bf19856f27f32b8b12c0df5af1b88e74" - dependencies: - browserslist "^4.0.0" - caniuse-api "^3.0.0" - cssnano-util-same-parent "^4.0.0" - postcss "^7.0.0" - postcss-selector-parser "^3.0.0" - vendors "^1.0.0" - -postcss-message-helpers@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/postcss-message-helpers/-/postcss-message-helpers-2.0.0.tgz#a4f2f4fab6e4fe002f0aed000478cdf52f9ba60e" - -postcss-minify-font-values@^1.0.2: - version "1.0.5" - resolved "https://registry.yarnpkg.com/postcss-minify-font-values/-/postcss-minify-font-values-1.0.5.tgz#4b58edb56641eba7c8474ab3526cafd7bbdecb69" - dependencies: - object-assign "^4.0.1" - postcss "^5.0.4" - postcss-value-parser "^3.0.2" - -postcss-minify-font-values@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-minify-font-values/-/postcss-minify-font-values-4.0.2.tgz#cd4c344cce474343fac5d82206ab2cbcb8afd5a6" - dependencies: - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - -postcss-minify-gradients@^1.0.1: - version "1.0.5" - resolved "https://registry.yarnpkg.com/postcss-minify-gradients/-/postcss-minify-gradients-1.0.5.tgz#5dbda11373703f83cfb4a3ea3881d8d75ff5e6e1" - dependencies: - postcss "^5.0.12" - postcss-value-parser "^3.3.0" - -postcss-minify-gradients@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-minify-gradients/-/postcss-minify-gradients-4.0.1.tgz#6da95c6e92a809f956bb76bf0c04494953e1a7dd" - dependencies: - cssnano-util-get-arguments "^4.0.0" - is-color-stop "^1.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - -postcss-minify-params@^1.0.4: - version "1.2.2" - resolved "https://registry.yarnpkg.com/postcss-minify-params/-/postcss-minify-params-1.2.2.tgz#ad2ce071373b943b3d930a3fa59a358c28d6f1f3" - dependencies: - alphanum-sort "^1.0.1" - postcss "^5.0.2" - postcss-value-parser "^3.0.2" - uniqs "^2.0.0" - -postcss-minify-params@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-minify-params/-/postcss-minify-params-4.0.1.tgz#5b2e2d0264dd645ef5d68f8fec0d4c38c1cf93d2" - dependencies: - alphanum-sort "^1.0.0" - browserslist "^4.0.0" - cssnano-util-get-arguments "^4.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - uniqs "^2.0.0" - -postcss-minify-selectors@^2.0.4: - version "2.1.1" - resolved "https://registry.yarnpkg.com/postcss-minify-selectors/-/postcss-minify-selectors-2.1.1.tgz#b2c6a98c0072cf91b932d1a496508114311735bf" - dependencies: - alphanum-sort "^1.0.2" - has "^1.0.1" - postcss "^5.0.14" - postcss-selector-parser "^2.0.0" - -postcss-minify-selectors@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-minify-selectors/-/postcss-minify-selectors-4.0.1.tgz#a891c197977cc37abf60b3ea06b84248b1c1e9cd" - dependencies: - alphanum-sort "^1.0.0" - has "^1.0.0" - postcss "^7.0.0" - postcss-selector-parser "^3.0.0" - -postcss-modules-extract-imports@1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-1.1.0.tgz#b614c9720be6816eaee35fb3a5faa1dba6a05ddb" - dependencies: - postcss "^6.0.1" - -postcss-modules-extract-imports@^1.2.0: - version "1.2.1" - resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-1.2.1.tgz#dc87e34148ec7eab5f791f7cd5849833375b741a" - dependencies: - postcss "^6.0.1" - -postcss-modules-local-by-default@1.2.0, postcss-modules-local-by-default@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-1.2.0.tgz#f7d80c398c5a393fa7964466bd19500a7d61c069" - dependencies: - css-selector-tokenizer "^0.7.0" - postcss "^6.0.1" - -postcss-modules-scope@1.1.0, postcss-modules-scope@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-1.1.0.tgz#d6ea64994c79f97b62a72b426fbe6056a194bb90" - dependencies: - css-selector-tokenizer "^0.7.0" - postcss "^6.0.1" - -postcss-modules-values@1.3.0, postcss-modules-values@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/postcss-modules-values/-/postcss-modules-values-1.3.0.tgz#ecffa9d7e192518389f42ad0e83f72aec456ea20" - dependencies: - icss-replace-symbols "^1.1.0" - postcss "^6.0.1" - -postcss-modules@^1.1.0: - version "1.4.1" - resolved "https://registry.yarnpkg.com/postcss-modules/-/postcss-modules-1.4.1.tgz#8aa35bd3461db67e27377a7ce770d77b654a84ef" - dependencies: - css-modules-loader-core "^1.1.0" - generic-names "^1.0.3" - lodash.camelcase "^4.3.0" - postcss "^7.0.1" - string-hash "^1.1.1" - -postcss-nesting@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/postcss-nesting/-/postcss-nesting-7.0.0.tgz#6e26a770a0c8fcba33782a6b6f350845e1a448f6" - dependencies: - postcss "^7.0.2" - -postcss-normalize-charset@^1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/postcss-normalize-charset/-/postcss-normalize-charset-1.1.1.tgz#ef9ee71212d7fe759c78ed162f61ed62b5cb93f1" - dependencies: - postcss "^5.0.5" - -postcss-normalize-charset@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-normalize-charset/-/postcss-normalize-charset-4.0.1.tgz#8b35add3aee83a136b0471e0d59be58a50285dd4" - dependencies: - postcss "^7.0.0" - -postcss-normalize-display-values@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.1.tgz#d9a83d47c716e8a980f22f632c8b0458cfb48a4c" - dependencies: - cssnano-util-get-match "^4.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - -postcss-normalize-positions@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-normalize-positions/-/postcss-normalize-positions-4.0.1.tgz#ee2d4b67818c961964c6be09d179894b94fd6ba1" - dependencies: - cssnano-util-get-arguments "^4.0.0" - has "^1.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - -postcss-normalize-repeat-style@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-4.0.1.tgz#5293f234b94d7669a9f805495d35b82a581c50e5" - dependencies: - cssnano-util-get-arguments "^4.0.0" - cssnano-util-get-match "^4.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - -postcss-normalize-string@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-normalize-string/-/postcss-normalize-string-4.0.1.tgz#23c5030c2cc24175f66c914fa5199e2e3c10fef3" - dependencies: - has "^1.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - -postcss-normalize-timing-functions@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-4.0.1.tgz#8be83e0b9cb3ff2d1abddee032a49108f05f95d7" - dependencies: - cssnano-util-get-match "^4.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - -postcss-normalize-unicode@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-normalize-unicode/-/postcss-normalize-unicode-4.0.1.tgz#841bd48fdcf3019ad4baa7493a3d363b52ae1cfb" - dependencies: - browserslist "^4.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - -postcss-normalize-url@^3.0.7: - version "3.0.8" - resolved "https://registry.yarnpkg.com/postcss-normalize-url/-/postcss-normalize-url-3.0.8.tgz#108f74b3f2fcdaf891a2ffa3ea4592279fc78222" - dependencies: - is-absolute-url "^2.0.0" - normalize-url "^1.4.0" - postcss "^5.0.14" - postcss-value-parser "^3.2.3" - -postcss-normalize-url@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-normalize-url/-/postcss-normalize-url-4.0.1.tgz#10e437f86bc7c7e58f7b9652ed878daaa95faae1" - dependencies: - is-absolute-url "^2.0.0" - normalize-url "^3.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - -postcss-normalize-whitespace@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-normalize-whitespace/-/postcss-normalize-whitespace-4.0.1.tgz#d14cb639b61238418ac8bc8d3b7bdd65fc86575e" - dependencies: - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - -postcss-ordered-values@^2.1.0: - version "2.2.3" - resolved "https://registry.yarnpkg.com/postcss-ordered-values/-/postcss-ordered-values-2.2.3.tgz#eec6c2a67b6c412a8db2042e77fe8da43f95c11d" - dependencies: - postcss "^5.0.4" - postcss-value-parser "^3.0.1" - -postcss-ordered-values@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/postcss-ordered-values/-/postcss-ordered-values-4.1.1.tgz#2e3b432ef3e489b18333aeca1f1295eb89be9fc2" - dependencies: - cssnano-util-get-arguments "^4.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - -postcss-overflow-shorthand@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/postcss-overflow-shorthand/-/postcss-overflow-shorthand-2.0.0.tgz#31ecf350e9c6f6ddc250a78f0c3e111f32dd4c30" - dependencies: - postcss "^7.0.2" - -postcss-page-break@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/postcss-page-break/-/postcss-page-break-2.0.0.tgz#add52d0e0a528cabe6afee8b46e2abb277df46bf" - dependencies: - postcss "^7.0.2" - -postcss-place@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-place/-/postcss-place-4.0.1.tgz#e9f39d33d2dc584e46ee1db45adb77ca9d1dcc62" - dependencies: - postcss "^7.0.2" - postcss-values-parser "^2.0.0" - -postcss-preset-env@6.3.1: - version "6.3.1" - resolved "https://registry.yarnpkg.com/postcss-preset-env/-/postcss-preset-env-6.3.1.tgz#bd0f6353c44f41d0be61da278af33a6559e0aa6a" - dependencies: - autoprefixer "^9.3.1" - browserslist "^4.3.4" - caniuse-lite "^1.0.30000905" - cssdb "^4.1.0" - postcss "^7.0.5" - postcss-attribute-case-insensitive "^4.0.0" - postcss-color-functional-notation "^2.0.1" - postcss-color-gray "^5.0.0" - postcss-color-hex-alpha "^5.0.2" - postcss-color-mod-function "^3.0.3" - postcss-color-rebeccapurple "^4.0.1" - postcss-custom-media "^7.0.7" - postcss-custom-properties "^8.0.9" - postcss-custom-selectors "^5.1.2" - postcss-dir-pseudo-class "^5.0.0" - postcss-double-position-gradients "^1.0.0" - postcss-env-function "^2.0.2" - postcss-focus-visible "^4.0.0" - postcss-focus-within "^3.0.0" - postcss-font-variant "^4.0.0" - postcss-gap-properties "^2.0.0" - postcss-image-set-function "^3.0.1" - postcss-initial "^3.0.0" - postcss-lab-function "^2.0.1" - postcss-logical "^3.0.0" - postcss-media-minmax "^4.0.0" - postcss-nesting "^7.0.0" - postcss-overflow-shorthand "^2.0.0" - postcss-page-break "^2.0.0" - postcss-place "^4.0.1" - postcss-pseudo-class-any-link "^6.0.0" - postcss-replace-overflow-wrap "^3.0.0" - postcss-selector-matches "^4.0.0" - postcss-selector-not "^4.0.0" - -postcss-pseudo-class-any-link@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/postcss-pseudo-class-any-link/-/postcss-pseudo-class-any-link-6.0.0.tgz#2ed3eed393b3702879dec4a87032b210daeb04d1" - dependencies: - postcss "^7.0.2" - postcss-selector-parser "^5.0.0-rc.3" - -postcss-reduce-idents@^2.2.2: - version "2.4.0" - resolved "https://registry.yarnpkg.com/postcss-reduce-idents/-/postcss-reduce-idents-2.4.0.tgz#c2c6d20cc958284f6abfbe63f7609bf409059ad3" - dependencies: - postcss "^5.0.4" - postcss-value-parser "^3.0.2" - -postcss-reduce-initial@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/postcss-reduce-initial/-/postcss-reduce-initial-1.0.1.tgz#68f80695f045d08263a879ad240df8dd64f644ea" - dependencies: - postcss "^5.0.4" - -postcss-reduce-initial@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-reduce-initial/-/postcss-reduce-initial-4.0.2.tgz#bac8e325d67510ee01fa460676dc8ea9e3b40f15" - dependencies: - browserslist "^4.0.0" - caniuse-api "^3.0.0" - has "^1.0.0" - postcss "^7.0.0" - -postcss-reduce-transforms@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/postcss-reduce-transforms/-/postcss-reduce-transforms-1.0.4.tgz#ff76f4d8212437b31c298a42d2e1444025771ae1" - dependencies: - has "^1.0.1" - postcss "^5.0.8" - postcss-value-parser "^3.0.1" - -postcss-reduce-transforms@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-reduce-transforms/-/postcss-reduce-transforms-4.0.1.tgz#8600d5553bdd3ad640f43bff81eb52f8760d4561" - dependencies: - cssnano-util-get-match "^4.0.0" - has "^1.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - -postcss-replace-overflow-wrap@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/postcss-replace-overflow-wrap/-/postcss-replace-overflow-wrap-3.0.0.tgz#61b360ffdaedca84c7c918d2b0f0d0ea559ab01c" - dependencies: - postcss "^7.0.2" - -postcss-reporter@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/postcss-reporter/-/postcss-reporter-6.0.0.tgz#44c873129d8c029a430b6d2186210d79c8de88b8" - dependencies: - chalk "^2.0.1" - lodash "^4.17.4" - log-symbols "^2.0.0" - postcss "^7.0.2" - -postcss-resolve-nested-selector@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/postcss-resolve-nested-selector/-/postcss-resolve-nested-selector-0.1.1.tgz#29ccbc7c37dedfac304e9fff0bf1596b3f6a0e4e" - -postcss-safe-parser@4.0.1, postcss-safe-parser@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-safe-parser/-/postcss-safe-parser-4.0.1.tgz#8756d9e4c36fdce2c72b091bbc8ca176ab1fcdea" - dependencies: - postcss "^7.0.0" - -postcss-sass@^0.3.5: - version "0.3.5" - resolved "https://registry.yarnpkg.com/postcss-sass/-/postcss-sass-0.3.5.tgz#6d3e39f101a53d2efa091f953493116d32beb68c" - dependencies: - gonzales-pe "^4.2.3" - postcss "^7.0.1" - -postcss-scss@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/postcss-scss/-/postcss-scss-2.0.0.tgz#248b0a28af77ea7b32b1011aba0f738bda27dea1" - dependencies: - postcss "^7.0.0" - -postcss-selector-matches@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/postcss-selector-matches/-/postcss-selector-matches-4.0.0.tgz#71c8248f917ba2cc93037c9637ee09c64436fcff" - dependencies: - balanced-match "^1.0.0" - postcss "^7.0.2" - -postcss-selector-not@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/postcss-selector-not/-/postcss-selector-not-4.0.0.tgz#c68ff7ba96527499e832724a2674d65603b645c0" - dependencies: - balanced-match "^1.0.0" - postcss "^7.0.2" - -postcss-selector-parser@^2.0.0, postcss-selector-parser@^2.2.2: - version "2.2.3" - resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-2.2.3.tgz#f9437788606c3c9acee16ffe8d8b16297f27bb90" - dependencies: - flatten "^1.0.2" - indexes-of "^1.0.1" - uniq "^1.0.1" - -postcss-selector-parser@^3.0.0, postcss-selector-parser@^3.1.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-3.1.1.tgz#4f875f4afb0c96573d5cf4d74011aee250a7e865" - dependencies: - dot-prop "^4.1.1" - indexes-of "^1.0.1" - uniq "^1.0.1" - -postcss-selector-parser@^5.0.0-rc.3, postcss-selector-parser@^5.0.0-rc.4: - version "5.0.0-rc.4" - resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-5.0.0-rc.4.tgz#ca5e77238bf152966378c13e91ad6d611568ea87" - dependencies: - cssesc "^2.0.0" - indexes-of "^1.0.1" - uniq "^1.0.1" - -postcss-styled@>=0.34.0, postcss-styled@^0.34.0: - version "0.34.0" - resolved "https://registry.yarnpkg.com/postcss-styled/-/postcss-styled-0.34.0.tgz#07d47bcb13707289782aa058605fd9feaf84391d" - -postcss-svgo@^2.1.1: - version "2.1.6" - resolved "https://registry.yarnpkg.com/postcss-svgo/-/postcss-svgo-2.1.6.tgz#b6df18aa613b666e133f08adb5219c2684ac108d" - dependencies: - is-svg "^2.0.0" - postcss "^5.0.14" - postcss-value-parser "^3.2.3" - svgo "^0.7.0" - -postcss-svgo@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-svgo/-/postcss-svgo-4.0.1.tgz#5628cdb38f015de6b588ce6d0bf0724b492b581d" - dependencies: - is-svg "^3.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - svgo "^1.0.0" - -postcss-syntax@^0.34.0: - version "0.34.0" - resolved "https://registry.yarnpkg.com/postcss-syntax/-/postcss-syntax-0.34.0.tgz#4a85c022f1cdecea72102775c91af1e7f506d83a" - -postcss-unique-selectors@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/postcss-unique-selectors/-/postcss-unique-selectors-2.0.2.tgz#981d57d29ddcb33e7b1dfe1fd43b8649f933ca1d" - dependencies: - alphanum-sort "^1.0.1" - postcss "^5.0.4" - uniqs "^2.0.0" - -postcss-unique-selectors@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-unique-selectors/-/postcss-unique-selectors-4.0.1.tgz#9446911f3289bfd64c6d680f073c03b1f9ee4bac" - dependencies: - alphanum-sort "^1.0.0" - postcss "^7.0.0" - uniqs "^2.0.0" - -postcss-value-parser@^3.0.0, postcss-value-parser@^3.0.1, postcss-value-parser@^3.0.2, postcss-value-parser@^3.1.1, postcss-value-parser@^3.1.2, postcss-value-parser@^3.2.3, postcss-value-parser@^3.3.0, postcss-value-parser@^3.3.1: - version "3.3.1" - resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz#9ff822547e2893213cf1c30efa51ac5fd1ba8281" - -postcss-values-parser@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/postcss-values-parser/-/postcss-values-parser-2.0.0.tgz#1ba42cae31367c44f96721cb5eb99462bfb39705" - dependencies: - flatten "^1.0.2" - indexes-of "^1.0.1" - uniq "^1.0.1" - -postcss-zindex@^2.0.1: - version "2.2.0" - resolved "https://registry.yarnpkg.com/postcss-zindex/-/postcss-zindex-2.2.0.tgz#d2109ddc055b91af67fc4cb3b025946639d2af22" - dependencies: - has "^1.0.1" - postcss "^5.0.4" - uniqs "^2.0.0" - -postcss@6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-6.0.1.tgz#000dbd1f8eef217aa368b9a212c5fc40b2a8f3f2" - dependencies: - chalk "^1.1.3" - source-map "^0.5.6" - supports-color "^3.2.3" - -postcss@^5.0.10, postcss@^5.0.11, postcss@^5.0.12, postcss@^5.0.13, postcss@^5.0.14, postcss@^5.0.16, postcss@^5.0.2, postcss@^5.0.4, postcss@^5.0.5, postcss@^5.0.8, postcss@^5.2.16: - version "5.2.18" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-5.2.18.tgz#badfa1497d46244f6390f58b319830d9107853c5" - dependencies: - chalk "^1.1.3" - js-base64 "^2.1.9" - source-map "^0.5.6" - supports-color "^3.2.3" - -postcss@^6.0.1, postcss@^6.0.21, postcss@^6.0.23: - version "6.0.23" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-6.0.23.tgz#61c82cc328ac60e677645f979054eb98bc0e3324" - dependencies: - chalk "^2.4.1" - source-map "^0.6.1" - supports-color "^5.4.0" - -postcss@^7.0.0, postcss@^7.0.1, postcss@^7.0.2, postcss@^7.0.3, postcss@^7.0.5, postcss@^7.0.6: - version "7.0.6" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.6.tgz#6dcaa1e999cdd4a255dcd7d4d9547f4ca010cdc2" - dependencies: - chalk "^2.4.1" - source-map "^0.6.1" - supports-color "^5.5.0" - -prelude-ls@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" - -prepend-http@^1.0.0: - version "1.0.4" - resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc" - -preserve@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b" - -prettier@^1.14.2, prettier@^1.15.3: - version "1.15.3" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.15.3.tgz#1feaac5bdd181237b54dbe65d874e02a1472786a" - -pretty-bytes@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-4.0.2.tgz#b2bf82e7350d65c6c33aa95aaa5a4f6327f61cd9" - -pretty-error@^2.0.2: - version "2.1.1" - resolved "https://registry.yarnpkg.com/pretty-error/-/pretty-error-2.1.1.tgz#5f4f87c8f91e5ae3f3ba87ab4cf5e03b1a17f1a3" - dependencies: - renderkid "^2.0.1" - utila "~0.4" - -pretty-format@^23.6.0: - version "23.6.0" - resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-23.6.0.tgz#5eaac8eeb6b33b987b7fe6097ea6a8a146ab5760" - dependencies: - ansi-regex "^3.0.0" - ansi-styles "^3.2.0" - -private@^0.1.6, private@^0.1.8: - version "0.1.8" - resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff" - -process-es6@^0.11.2: - version "0.11.6" - resolved "https://registry.yarnpkg.com/process-es6/-/process-es6-0.11.6.tgz#c6bb389f9a951f82bd4eb169600105bd2ff9c778" - -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" - -process@^0.11.10: - version "0.11.10" - resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" - -progress@^2.0.0: - version "2.0.3" - resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" - -promise-inflight@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" - -promise.series@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/promise.series/-/promise.series-0.2.0.tgz#2cc7ebe959fc3a6619c04ab4dbdc9e452d864bbd" - -promise@8.0.2: - version "8.0.2" - resolved "https://registry.yarnpkg.com/promise/-/promise-8.0.2.tgz#9dcd0672192c589477d56891271bdc27547ae9f0" - dependencies: - asap "~2.0.6" - -prompts@^0.1.9: - version "0.1.14" - resolved "https://registry.yarnpkg.com/prompts/-/prompts-0.1.14.tgz#a8e15c612c5c9ec8f8111847df3337c9cbd443b2" - dependencies: - kleur "^2.0.1" - sisteransi "^0.1.1" - -prop-types@^15.6.2: - version "15.6.2" - resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.6.2.tgz#05d5ca77b4453e985d60fc7ff8c859094a497102" - dependencies: - loose-envify "^1.3.1" - object-assign "^4.1.1" - -property-information@^5.0.0, property-information@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/property-information/-/property-information-5.0.1.tgz#c3b09f4f5750b1634c0b24205adbf78f18bdf94f" - dependencies: - xtend "^4.0.1" - -proxy-addr@~2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.4.tgz#ecfc733bf22ff8c6f407fa275327b9ab67e48b93" - dependencies: - forwarded "~0.1.2" - ipaddr.js "1.8.0" - -prr@~0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/prr/-/prr-0.0.0.tgz#1a84b85908325501411853d0081ee3fa86e2926a" - -prr@~1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" - -pseudomap@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" - -psl@^1.1.24, psl@^1.1.28: - version "1.1.29" - resolved "https://registry.yarnpkg.com/psl/-/psl-1.1.29.tgz#60f580d360170bb722a797cc704411e6da850c67" - -public-encrypt@^4.0.0: - version "4.0.3" - resolved "https://registry.yarnpkg.com/public-encrypt/-/public-encrypt-4.0.3.tgz#4fcc9d77a07e48ba7527e7cbe0de33d0701331e0" - 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, pump@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/pump/-/pump-2.0.1.tgz#12399add6e4cf7526d973cbc8b5ce2e2908b3909" - 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" - 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" - 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" - -punycode@2.x.x, punycode@^2.1.0, punycode@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" - -punycode@^1.2.4, punycode@^1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" - -q@^1.1.2: - version "1.5.1" - resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" - -qs@6.5.2, qs@~6.5.2: - version "6.5.2" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" - -query-string@^4.1.0: - version "4.3.4" - resolved "https://registry.yarnpkg.com/query-string/-/query-string-4.3.4.tgz#bbb693b9ca915c232515b228b1a02b609043dbeb" - dependencies: - object-assign "^4.1.0" - strict-uri-encode "^1.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" - -querystring@0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" - -querystringify@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.1.0.tgz#7ded8dfbf7879dcc60d0a644ac6754b283ad17ef" - -quick-lru@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-1.1.0.tgz#4360b17c61136ad38078397ff11416e186dcfbb8" - -raf@3.4.0: - version "3.4.0" - resolved "https://registry.yarnpkg.com/raf/-/raf-3.4.0.tgz#a28876881b4bc2ca9117d4138163ddb80f781575" - dependencies: - performance-now "^2.1.0" - -randomatic@^3.0.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-3.1.1.tgz#b776efc59375984e36c537b2f51a1f0aff0da1ed" - dependencies: - is-number "^4.0.0" - kind-of "^6.0.0" - math-random "^1.0.1" - -randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5: - version "2.0.6" - resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.0.6.tgz#d302c522948588848a8d300c932b44c24231da80" - 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" - dependencies: - randombytes "^2.0.5" - safe-buffer "^5.1.0" - -range-parser@^1.0.3, range-parser@~1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.0.tgz#f49be6b487894ddc40dcc94a322f611092e00d5e" - -raw-body@2.3.3: - version "2.3.3" - resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.3.3.tgz#1b324ece6b5706e153855bc1148c65bb7f6ea0c3" - dependencies: - bytes "3.0.0" - http-errors "1.6.3" - iconv-lite "0.4.23" - unpipe "1.0.0" - -rc@^1.2.7: - version "1.2.8" - resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" - dependencies: - deep-extend "^0.6.0" - ini "~1.3.0" - minimist "^1.2.0" - strip-json-comments "~2.0.1" - -react-app-polyfill@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/react-app-polyfill/-/react-app-polyfill-0.2.0.tgz#60eaf037223b2f3a5671f45e5ac3b418f0b48ad2" - dependencies: - core-js "2.5.7" - object-assign "4.1.1" - promise "8.0.2" - raf "3.4.0" - whatwg-fetch "3.0.0" - -react-dev-utils@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/react-dev-utils/-/react-dev-utils-7.0.0.tgz#b99d87aea260294bf7ea087cdbd6b099fac3eb27" - dependencies: - "@babel/code-frame" "7.0.0" - address "1.0.3" - browserslist "4.1.1" - chalk "2.4.1" - cross-spawn "6.0.5" - detect-port-alt "1.1.6" - escape-string-regexp "1.0.5" - filesize "3.6.1" - find-up "3.0.0" - global-modules "1.0.0" - globby "8.0.1" - gzip-size "5.0.0" - immer "1.7.2" - inquirer "6.2.0" - is-root "2.0.0" - loader-utils "1.1.0" - opn "5.4.0" - pkg-up "2.0.0" - react-error-overlay "^5.1.1" - recursive-readdir "2.2.2" - shell-quote "1.6.1" - sockjs-client "1.1.5" - strip-ansi "4.0.0" - text-table "0.2.0" - -react-dom@^16.6.3: - version "16.6.3" - resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-16.6.3.tgz#8fa7ba6883c85211b8da2d0efeffc9d3825cccc0" - dependencies: - loose-envify "^1.1.0" - object-assign "^4.1.1" - prop-types "^15.6.2" - scheduler "^0.11.2" - -react-error-overlay@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/react-error-overlay/-/react-error-overlay-5.1.1.tgz#56f0439f001ff3588da0f479a86482ccb1e708cb" - -react-scripts@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/react-scripts/-/react-scripts-2.1.2.tgz#cf1686cd9ca3c6148e1428e97aac12995f01b554" - dependencies: - "@babel/core" "7.1.6" - "@svgr/webpack" "2.4.1" - babel-core "7.0.0-bridge.0" - babel-eslint "9.0.0" - babel-jest "23.6.0" - babel-loader "8.0.4" - babel-plugin-named-asset-import "^0.3.0" - babel-preset-react-app "^7.0.0" - bfj "6.1.1" - case-sensitive-paths-webpack-plugin "2.1.2" - chalk "2.4.1" - css-loader "1.0.0" - dotenv "6.0.0" - dotenv-expand "4.2.0" - eslint "5.6.0" - eslint-config-react-app "^3.0.6" - eslint-loader "2.1.1" - eslint-plugin-flowtype "2.50.1" - eslint-plugin-import "2.14.0" - eslint-plugin-jsx-a11y "6.1.2" - eslint-plugin-react "7.11.1" - file-loader "2.0.0" - fork-ts-checker-webpack-plugin-alt "0.4.14" - fs-extra "7.0.0" - html-webpack-plugin "4.0.0-alpha.2" - identity-obj-proxy "3.0.0" - jest "23.6.0" - jest-pnp-resolver "1.0.1" - jest-resolve "23.6.0" - mini-css-extract-plugin "0.4.3" - optimize-css-assets-webpack-plugin "5.0.1" - pnp-webpack-plugin "1.1.0" - postcss-flexbugs-fixes "4.1.0" - postcss-loader "3.0.0" - postcss-preset-env "6.3.1" - postcss-safe-parser "4.0.1" - react-app-polyfill "^0.2.0" - react-dev-utils "^7.0.0" - resolve "1.8.1" - sass-loader "7.1.0" - style-loader "0.23.0" - terser-webpack-plugin "1.1.0" - url-loader "1.1.1" - webpack "4.19.1" - webpack-dev-server "3.1.9" - webpack-manifest-plugin "2.0.4" - workbox-webpack-plugin "3.6.3" - optionalDependencies: - fsevents "1.2.4" - -react@^16.6.3: - version "16.6.3" - resolved "https://registry.yarnpkg.com/react/-/react-16.6.3.tgz#25d77c91911d6bbdd23db41e70fb094cc1e0871c" - dependencies: - loose-envify "^1.1.0" - object-assign "^4.1.1" - prop-types "^15.6.2" - scheduler "^0.11.2" - -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" - -read-pkg-up@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-2.0.0.tgz#6b72a8048984e0c41e79510fd5e9fa99b3b549be" - dependencies: - find-up "^2.0.0" - read-pkg "^2.0.0" - -read-pkg-up@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-3.0.0.tgz#3ed496685dba0f8fe118d0691dc51f4a1ff96f07" - dependencies: - find-up "^2.0.0" - read-pkg "^3.0.0" - -read-pkg@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28" - dependencies: - load-json-file "^1.0.0" - normalize-package-data "^2.3.2" - path-type "^1.0.0" - -read-pkg@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-2.0.0.tgz#8ef1c0623c6a6db0dc6713c4bfac46332b2368f8" - dependencies: - load-json-file "^2.0.0" - normalize-package-data "^2.3.2" - path-type "^2.0.0" - -read-pkg@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-3.0.0.tgz#9cbc686978fee65d16c00e2b19c237fcf6e38389" - dependencies: - load-json-file "^4.0.0" - normalize-package-data "^2.3.2" - path-type "^3.0.0" - -read-pkg@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-4.0.1.tgz#963625378f3e1c4d48c85872b5a6ec7d5d093237" - dependencies: - normalize-package-data "^2.3.2" - parse-json "^4.0.0" - pify "^3.0.0" - -"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.4, readable-stream@^2.0.6, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.2.9, 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: - core-util-is "~1.0.0" - inherits "~2.0.3" - isarray "~1.0.0" - process-nextick-args "~2.0.0" - safe-buffer "~5.1.1" - string_decoder "~1.1.1" - util-deprecate "~1.0.1" - -readable-stream@1.0, readable-stream@~1.0.26, readable-stream@~1.0.26-4: - version "1.0.34" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.0.34.tgz#125820e34bc842d2f2aaafafe4c2916ee32c157c" - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.1" - isarray "0.0.1" - string_decoder "~0.10.x" - -readable-stream@^1.0.26-4: - version "1.1.14" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.14.tgz#7cf4c54ef648e3813084c636dd2079e166c081d9" - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.1" - isarray "0.0.1" - string_decoder "~0.10.x" - -readable-stream@^3.0.6: - version "3.0.6" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.0.6.tgz#351302e4c68b5abd6a2ed55376a7f9a25be3057a" - dependencies: - inherits "^2.0.3" - string_decoder "^1.1.1" - util-deprecate "^1.0.1" - -readdirp@^2.0.0: - version "2.2.1" - resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.2.1.tgz#0e87622a3325aa33e892285caf8b4e846529a525" - dependencies: - graceful-fs "^4.1.11" - micromatch "^3.1.10" - readable-stream "^2.0.2" - -realpath-native@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/realpath-native/-/realpath-native-1.0.2.tgz#cd51ce089b513b45cf9b1516c82989b51ccc6560" - dependencies: - util.promisify "^1.0.0" - -recursive-readdir@2.2.2: - version "2.2.2" - resolved "https://registry.yarnpkg.com/recursive-readdir/-/recursive-readdir-2.2.2.tgz#9946fb3274e1628de6e36b2f6714953b4845094f" - dependencies: - minimatch "3.0.4" - -redent@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/redent/-/redent-2.0.0.tgz#c1b2007b42d57eb1389079b3c8333639d5e1ccaa" - dependencies: - indent-string "^3.0.0" - strip-indent "^2.0.0" - -reduce-css-calc@^1.2.6: - version "1.3.0" - resolved "https://registry.yarnpkg.com/reduce-css-calc/-/reduce-css-calc-1.3.0.tgz#747c914e049614a4c9cfbba629871ad1d2927716" - dependencies: - balanced-match "^0.4.2" - math-expression-evaluator "^1.2.14" - reduce-function-call "^1.0.1" - -reduce-function-call@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/reduce-function-call/-/reduce-function-call-1.0.2.tgz#5a200bf92e0e37751752fe45b0ab330fd4b6be99" - dependencies: - balanced-match "^0.4.2" - -regenerate-unicode-properties@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-7.0.0.tgz#107405afcc4a190ec5ed450ecaa00ed0cafa7a4c" - dependencies: - regenerate "^1.4.0" - -regenerate@^1.2.1, regenerate@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.0.tgz#4a856ec4b56e4077c557589cae85e7a4c8869a11" - -regenerator-runtime@^0.11.0: - version "0.11.1" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9" - -regenerator-runtime@^0.12.0: - version "0.12.1" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.12.1.tgz#fa1a71544764c036f8c49b13a08b2594c9f8a0de" - -regenerator-transform@^0.13.3: - version "0.13.3" - resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.13.3.tgz#264bd9ff38a8ce24b06e0636496b2c856b57bcbb" - dependencies: - private "^0.1.6" - -regex-cache@^0.4.2: - version "0.4.4" - resolved "https://registry.yarnpkg.com/regex-cache/-/regex-cache-0.4.4.tgz#75bdc58a2a1496cec48a12835bc54c8d562336dd" - dependencies: - is-equal-shallow "^0.1.3" - -regex-not@^1.0.0, regex-not@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" - dependencies: - extend-shallow "^3.0.2" - safe-regex "^1.1.0" - -regexpp@^2.0.0, regexpp@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-2.0.1.tgz#8d19d31cf632482b589049f8281f93dbcba4d07f" - -regexpu-core@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-1.0.0.tgz#86a763f58ee4d7c2f6b102e4764050de7ed90c6b" - dependencies: - regenerate "^1.2.1" - regjsgen "^0.2.0" - regjsparser "^0.1.4" - -regexpu-core@^4.1.3, regexpu-core@^4.2.0: - version "4.4.0" - resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.4.0.tgz#8d43e0d1266883969720345e70c275ee0aec0d32" - dependencies: - regenerate "^1.4.0" - regenerate-unicode-properties "^7.0.0" - regjsgen "^0.5.0" - regjsparser "^0.6.0" - unicode-match-property-ecmascript "^1.0.4" - unicode-match-property-value-ecmascript "^1.0.2" - -regjsgen@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.2.0.tgz#6c016adeac554f75823fe37ac05b92d5a4edb1f7" - -regjsgen@^0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.5.0.tgz#a7634dc08f89209c2049adda3525711fb97265dd" - -regjsparser@^0.1.4: - version "0.1.5" - resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.1.5.tgz#7ee8f84dc6fa792d3fd0ae228d24bd949ead205c" - dependencies: - jsesc "~0.5.0" - -regjsparser@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.6.0.tgz#f1e6ae8b7da2bae96c99399b868cd6c933a2ba9c" - dependencies: - jsesc "~0.5.0" - -rehype-parse@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/rehype-parse/-/rehype-parse-6.0.0.tgz#f681555f2598165bee2c778b39f9073d17b16bca" - dependencies: - hast-util-from-parse5 "^5.0.0" - parse5 "^5.0.0" - xtend "^4.0.1" - -relateurl@0.2.x: - version "0.2.7" - resolved "https://registry.yarnpkg.com/relateurl/-/relateurl-0.2.7.tgz#54dbf377e51440aca90a4cd274600d3ff2d888a9" - -remark-parse@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/remark-parse/-/remark-parse-5.0.0.tgz#4c077f9e499044d1d5c13f80d7a98cf7b9285d95" - dependencies: - collapse-white-space "^1.0.2" - is-alphabetical "^1.0.0" - is-decimal "^1.0.0" - is-whitespace-character "^1.0.0" - is-word-character "^1.0.0" - markdown-escapes "^1.0.0" - parse-entities "^1.1.0" - repeat-string "^1.5.4" - state-toggle "^1.0.0" - trim "0.0.1" - trim-trailing-lines "^1.0.0" - unherit "^1.0.4" - unist-util-remove-position "^1.0.0" - vfile-location "^2.0.0" - xtend "^4.0.1" - -remark-stringify@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/remark-stringify/-/remark-stringify-5.0.0.tgz#336d3a4d4a6a3390d933eeba62e8de4bd280afba" - dependencies: - ccount "^1.0.0" - is-alphanumeric "^1.0.0" - is-decimal "^1.0.0" - is-whitespace-character "^1.0.0" - longest-streak "^2.0.1" - markdown-escapes "^1.0.0" - markdown-table "^1.1.0" - mdast-util-compact "^1.0.0" - parse-entities "^1.0.2" - repeat-string "^1.5.4" - state-toggle "^1.0.0" - stringify-entities "^1.0.1" - unherit "^1.0.4" - xtend "^4.0.1" - -remark@^9.0.0: - version "9.0.0" - resolved "https://registry.yarnpkg.com/remark/-/remark-9.0.0.tgz#c5cfa8ec535c73a67c4b0f12bfdbd3a67d8b2f60" - dependencies: - remark-parse "^5.0.0" - remark-stringify "^5.0.0" - unified "^6.0.0" - -remove-trailing-separator@^1.0.1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" - -renderkid@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/renderkid/-/renderkid-2.0.2.tgz#12d310f255360c07ad8fde253f6c9e9de372d2aa" - dependencies: - css-select "^1.1.0" - dom-converter "~0.2" - htmlparser2 "~3.3.0" - strip-ansi "^3.0.0" - utila "^0.4.0" - -repeat-element@^1.1.2: - version "1.1.3" - resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.3.tgz#782e0d825c0c5a3bb39731f84efee6b742e6b1ce" - -repeat-string@^1.5.2, repeat-string@^1.5.4, repeat-string@^1.6.1: - version "1.6.1" - resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" - -repeating@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda" - dependencies: - is-finite "^1.0.0" - -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" - dependencies: - lodash "^4.13.1" - -request-promise-native@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/request-promise-native/-/request-promise-native-1.0.5.tgz#5281770f68e0c9719e5163fd3fab482215f4fda5" - dependencies: - request-promise-core "1.1.1" - stealthy-require "^1.1.0" - tough-cookie ">=2.3.3" - -request@^2.87.0, request@^2.88.0: - version "2.88.0" - resolved "https://registry.yarnpkg.com/request/-/request-2.88.0.tgz#9c2fca4f7d35b592efe57c7f0a55e81052124fef" - dependencies: - 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.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.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" - resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" - -require-from-string@^1.1.0: - version "1.2.1" - resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-1.2.1.tgz#529c9ccef27380adfec9a2f965b649bbee636418" - -require-from-string@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" - -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" - -require-uncached@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/require-uncached/-/require-uncached-1.0.3.tgz#4e0d56d6c9662fd31e43011c4b95aa49955421d3" - dependencies: - caller-path "^0.1.0" - resolve-from "^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" - -reserved-words@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/reserved-words/-/reserved-words-0.1.2.tgz#00a0940f98cd501aeaaac316411d9adc52b31ab1" - -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-dir@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/resolve-dir/-/resolve-dir-1.0.1.tgz#79a40644c362be82f26effe739c9bb5382046f43" - dependencies: - expand-tilde "^2.0.0" - global-modules "^1.0.0" - -resolve-from@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-1.0.1.tgz#26cbfe935d1aeeeabb29bc3fe5aeb01e93d44226" - -resolve-from@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748" - -resolve-from@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" - -resolve-url@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" - -resolve@1.1.7: - version "1.1.7" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" - -resolve@1.8.1, resolve@^1.3.2, resolve@^1.5.0, resolve@^1.6.0, resolve@^1.8.1: - version "1.8.1" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.8.1.tgz#82f1ec19a423ac1fbd080b0bab06ba36e84a7a26" - dependencies: - path-parse "^1.0.5" - -restore-cursor@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf" - dependencies: - onetime "^2.0.0" - signal-exit "^3.0.2" - -ret@~0.1.10: - version "0.1.15" - resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" - -rgb-regex@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/rgb-regex/-/rgb-regex-1.0.1.tgz#c0e0d6882df0e23be254a475e8edd41915feaeb1" - -rgba-regex@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/rgba-regex/-/rgba-regex-1.0.0.tgz#43374e2e2ca0968b0ef1523460b7d730ff22eeb3" - -rimraf@^2.2.8, rimraf@^2.5.4, rimraf@^2.6.1, rimraf@^2.6.2, 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" - -ripemd160@^2.0.0, ripemd160@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c" - dependencies: - hash-base "^3.0.0" - inherits "^2.0.1" - -rollup-plugin-babel@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/rollup-plugin-babel/-/rollup-plugin-babel-4.2.0.tgz#9a2c119b5c923928842783ec2abd306fa733054f" - dependencies: - "@babel/helper-module-imports" "^7.0.0" - rollup-pluginutils "^2.3.0" - -rollup-plugin-commonjs@^9.2.0: - version "9.2.0" - resolved "https://registry.yarnpkg.com/rollup-plugin-commonjs/-/rollup-plugin-commonjs-9.2.0.tgz#4604e25069e0c78a09e08faa95dc32dec27f7c89" - dependencies: - estree-walker "^0.5.2" - magic-string "^0.25.1" - resolve "^1.8.1" - rollup-pluginutils "^2.3.3" - -rollup-plugin-node-builtins@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/rollup-plugin-node-builtins/-/rollup-plugin-node-builtins-2.1.2.tgz#24a1fed4a43257b6b64371d8abc6ce1ab14597e9" - dependencies: - browserify-fs "^1.0.0" - buffer-es6 "^4.9.2" - crypto-browserify "^3.11.0" - process-es6 "^0.11.2" - -rollup-plugin-node-resolve@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/rollup-plugin-node-resolve/-/rollup-plugin-node-resolve-4.0.0.tgz#9bc6b8205e9936cc0e26bba2415f1ecf1e64d9b2" - dependencies: - builtin-modules "^3.0.0" - is-module "^1.0.0" - resolve "^1.8.1" - -rollup-plugin-peer-deps-external@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/rollup-plugin-peer-deps-external/-/rollup-plugin-peer-deps-external-2.2.0.tgz#99ef9231aa01736f3e9605b7c3084a0d627f665b" - -rollup-plugin-postcss@^1.6.3: - version "1.6.3" - resolved "https://registry.yarnpkg.com/rollup-plugin-postcss/-/rollup-plugin-postcss-1.6.3.tgz#18256ba66f29ecd9d42a68f4ef136b92b939ddb8" - dependencies: - chalk "^2.0.0" - concat-with-sourcemaps "^1.0.5" - cssnano "^3.10.0" - fs-extra "^5.0.0" - import-cwd "^2.1.0" - p-queue "^2.4.2" - pify "^3.0.0" - postcss "^6.0.21" - postcss-load-config "^1.2.0" - postcss-modules "^1.1.0" - promise.series "^0.2.0" - reserved-words "^0.1.2" - resolve "^1.5.0" - rollup-pluginutils "^2.0.1" - style-inject "^0.3.0" - -rollup-plugin-url@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/rollup-plugin-url/-/rollup-plugin-url-2.1.0.tgz#c06be791dfee1b9f5e0854a94cc6bb3dc2743bc0" - dependencies: - mime "^2.3.1" - mkpath "^1.0.0" - rollup-pluginutils "^2.3.3" - -rollup-pluginutils@^2.0.1, rollup-pluginutils@^2.3.0, rollup-pluginutils@^2.3.3: - version "2.3.3" - resolved "https://registry.yarnpkg.com/rollup-pluginutils/-/rollup-pluginutils-2.3.3.tgz#3aad9b1eb3e7fe8262820818840bf091e5ae6794" - dependencies: - estree-walker "^0.5.2" - micromatch "^2.3.11" - -rollup@^0.68.2: - version "0.68.2" - resolved "https://registry.yarnpkg.com/rollup/-/rollup-0.68.2.tgz#c26afb5d981ca7a1a32f76087dbde9dad4fcc653" - dependencies: - "@types/estree" "0.0.39" - "@types/node" "*" - -rsvp@^3.3.3: - version "3.6.2" - resolved "https://registry.yarnpkg.com/rsvp/-/rsvp-3.6.2.tgz#2e96491599a96cde1b515d5674a8f7a91452926a" - -run-async@^2.2.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.3.0.tgz#0371ab4ae0bdd720d4166d7dfda64ff7a445a6c0" - dependencies: - is-promise "^2.1.0" - -run-node@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/run-node/-/run-node-1.0.0.tgz#46b50b946a2aa2d4947ae1d886e9856fd9cabe5e" - -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" - dependencies: - aproba "^1.1.1" - -rxjs@^6.1.0, rxjs@^6.3.3: - version "6.3.3" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.3.3.tgz#3c6a7fa420e844a81390fb1158a9ec614f4bad55" - dependencies: - tslib "^1.9.0" - -safe-buffer@5.1.2, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: - version "5.1.2" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" - -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" - -"safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: - version "2.1.2" - resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" - -sane@^2.0.0: - version "2.5.2" - resolved "https://registry.yarnpkg.com/sane/-/sane-2.5.2.tgz#b4dc1861c21b427e929507a3e751e2a2cb8ab3fa" - dependencies: - anymatch "^2.0.0" - capture-exit "^1.2.0" - exec-sh "^0.2.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.2.3" - -sass-loader@7.1.0: - version "7.1.0" - resolved "https://registry.yarnpkg.com/sass-loader/-/sass-loader-7.1.0.tgz#16fd5138cb8b424bf8a759528a1972d72aad069d" - dependencies: - clone-deep "^2.0.1" - loader-utils "^1.0.1" - lodash.tail "^4.1.1" - neo-async "^2.5.0" - pify "^3.0.0" - semver "^5.5.0" - -sax@0.5.x: - version "0.5.8" - resolved "https://registry.yarnpkg.com/sax/-/sax-0.5.8.tgz#d472db228eb331c2506b0e8c15524adb939d12c1" - -sax@^1.2.4, sax@~1.2.1, sax@~1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" - -saxes@^3.1.3: - version "3.1.4" - resolved "https://registry.yarnpkg.com/saxes/-/saxes-3.1.4.tgz#4ad5c53eb085ac0570ea1071a07aaf22ad29cebd" - dependencies: - xmlchars "^1.3.1" - -scheduler@^0.11.2: - version "0.11.3" - resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.11.3.tgz#b5769b90cf8b1464f3f3cfcafe8e3cd7555a2d6b" - dependencies: - loose-envify "^1.1.0" - object-assign "^4.1.1" - -schema-utils@^0.4.4, schema-utils@^0.4.5: - version "0.4.7" - resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-0.4.7.tgz#ba74f597d2be2ea880131746ee17d0a093c68187" - dependencies: - ajv "^6.1.0" - ajv-keywords "^3.1.0" - -schema-utils@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-1.0.0.tgz#0b79a93204d7b600d4b2850d1f66c2a34951c770" - dependencies: - ajv "^6.1.0" - ajv-errors "^1.0.0" - ajv-keywords "^3.1.0" - -select-hose@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/select-hose/-/select-hose-2.0.0.tgz#625d8658f865af43ec962bfc376a37359a4994ca" - -selfsigned@^1.9.1: - version "1.10.4" - resolved "https://registry.yarnpkg.com/selfsigned/-/selfsigned-1.10.4.tgz#cdd7eccfca4ed7635d47a08bf2d5d3074092e2cd" - dependencies: - node-forge "0.7.5" - -semver-compare@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/semver-compare/-/semver-compare-1.0.0.tgz#0dee216a1c941ab37e9efb1788f6afc5ff5537fc" - -"semver@2 || 3 || 4 || 5", semver@^5.3.0, semver@^5.4.1, semver@^5.5.0, semver@^5.5.1: - version "5.6.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.6.0.tgz#7e74256fbaa49c75aa7c7a205cc22799cac80004" - -semver@~2.3.1: - version "2.3.2" - resolved "https://registry.yarnpkg.com/semver/-/semver-2.3.2.tgz#b9848f25d6cf36333073ec9ef8856d42f1233e52" - -send@0.16.2: - version "0.16.2" - resolved "https://registry.yarnpkg.com/send/-/send-0.16.2.tgz#6ecca1e0f8c156d141597559848df64730a6bbc1" - dependencies: - debug "2.6.9" - depd "~1.1.2" - destroy "~1.0.4" - encodeurl "~1.0.2" - escape-html "~1.0.3" - etag "~1.8.1" - fresh "0.5.2" - http-errors "~1.6.2" - mime "1.4.1" - ms "2.0.0" - on-finished "~2.3.0" - range-parser "~1.2.0" - statuses "~1.4.0" - -serialize-javascript@^1.4.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-1.5.0.tgz#1aa336162c88a890ddad5384baebc93a655161fe" - -serve-index@^1.7.2: - version "1.9.1" - resolved "https://registry.yarnpkg.com/serve-index/-/serve-index-1.9.1.tgz#d3768d69b1e7d82e5ce050fff5b453bea12a9239" - dependencies: - accepts "~1.3.4" - batch "0.6.1" - debug "2.6.9" - escape-html "~1.0.3" - http-errors "~1.6.2" - mime-types "~2.1.17" - parseurl "~1.3.2" - -serve-static@1.13.2: - version "1.13.2" - resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.13.2.tgz#095e8472fd5b46237db50ce486a43f4b86c6cec1" - dependencies: - encodeurl "~1.0.2" - escape-html "~1.0.3" - parseurl "~1.3.2" - send "0.16.2" - -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" - -set-value@^0.4.3: - version "0.4.3" - resolved "https://registry.yarnpkg.com/set-value/-/set-value-0.4.3.tgz#7db08f9d3d22dc7f78e53af3c3bf4666ecdfccf1" - dependencies: - extend-shallow "^2.0.1" - is-extendable "^0.1.1" - is-plain-object "^2.0.1" - to-object-path "^0.3.0" - -set-value@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.0.tgz#71ae4a88f0feefbbf52d1ea604f3fb315ebb6274" - dependencies: - extend-shallow "^2.0.1" - is-extendable "^0.1.1" - 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" - -setprototypeof@1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656" - -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" - dependencies: - inherits "^2.0.1" - safe-buffer "^5.0.1" - -shallow-clone@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/shallow-clone/-/shallow-clone-0.1.2.tgz#5909e874ba77106d73ac414cfec1ffca87d97060" - dependencies: - is-extendable "^0.1.1" - kind-of "^2.0.1" - lazy-cache "^0.2.3" - mixin-object "^2.0.1" - -shallow-clone@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/shallow-clone/-/shallow-clone-1.0.0.tgz#4480cd06e882ef68b2ad88a3ea54832e2c48b571" - dependencies: - is-extendable "^0.1.1" - kind-of "^5.0.0" - mixin-object "^2.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" - dependencies: - shebang-regex "^1.0.0" - -shebang-regex@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" - -shell-quote@1.6.1: - version "1.6.1" - resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.6.1.tgz#f4781949cce402697127430ea3b3c5476f481767" - dependencies: - array-filter "~0.0.0" - array-map "~0.0.0" - array-reduce "~0.0.0" - jsonify "~0.0.0" - -shellwords@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/shellwords/-/shellwords-0.1.1.tgz#d6b9181c1a48d397324c84871efbcfc73fc0654b" - -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" - -simple-git@^1.85.0: - version "1.107.0" - resolved "https://registry.yarnpkg.com/simple-git/-/simple-git-1.107.0.tgz#12cffaf261c14d6f450f7fdb86c21ccee968b383" - dependencies: - debug "^4.0.1" - -simple-swizzle@^0.2.2: - version "0.2.2" - resolved "https://registry.yarnpkg.com/simple-swizzle/-/simple-swizzle-0.2.2.tgz#a4da6b635ffcccca33f70d17cb92592de95e557a" - dependencies: - is-arrayish "^0.3.1" - -sisteransi@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-0.1.1.tgz#5431447d5f7d1675aac667ccd0b865a4994cb3ce" - -slash@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55" - -slash@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/slash/-/slash-2.0.0.tgz#de552851a1759df3a8f206535442f5ec4ddeab44" - -slice-ansi@0.0.4: - version "0.0.4" - resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-0.0.4.tgz#edbf8903f66f7ce2f8eafd6ceed65e264c831b35" - -slice-ansi@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-1.0.0.tgz#044f1a49d8842ff307aad6b505ed178bd950134d" - dependencies: - is-fullwidth-code-point "^2.0.0" - -slice-ansi@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-2.0.0.tgz#5373bdb8559b45676e8541c66916cdd6251612e7" - dependencies: - ansi-styles "^3.2.0" - astral-regex "^1.0.0" - is-fullwidth-code-point "^2.0.0" - -snapdragon-node@^2.0.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" - dependencies: - define-property "^1.0.0" - isobject "^3.0.0" - snapdragon-util "^3.0.1" - -snapdragon-util@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2" - dependencies: - kind-of "^3.2.0" - -snapdragon@^0.8.1: - version "0.8.2" - resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d" - dependencies: - base "^0.11.1" - debug "^2.2.0" - define-property "^0.2.5" - extend-shallow "^2.0.1" - map-cache "^0.2.2" - source-map "^0.5.6" - source-map-resolve "^0.5.0" - use "^3.1.0" - -sockjs-client@1.1.5: - version "1.1.5" - resolved "https://registry.yarnpkg.com/sockjs-client/-/sockjs-client-1.1.5.tgz#1bb7c0f7222c40f42adf14f4442cbd1269771a83" - dependencies: - debug "^2.6.6" - eventsource "0.1.6" - faye-websocket "~0.11.0" - inherits "^2.0.1" - json3 "^3.3.2" - url-parse "^1.1.8" - -sockjs@0.3.19: - version "0.3.19" - resolved "https://registry.yarnpkg.com/sockjs/-/sockjs-0.3.19.tgz#d976bbe800af7bd20ae08598d582393508993c0d" - dependencies: - faye-websocket "^0.10.0" - uuid "^3.0.1" - -sort-keys@^1.0.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/sort-keys/-/sort-keys-1.1.2.tgz#441b6d4d346798f1b4e49e8920adfba0e543f9ad" - dependencies: - is-plain-obj "^1.0.0" - -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" - -source-map-resolve@^0.5.0: - version "0.5.2" - resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.2.tgz#72e2cc34095543e43b2c62b2c4c10d4a9054f259" - dependencies: - atob "^2.1.1" - decode-uri-component "^0.2.0" - resolve-url "^0.2.1" - 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.6, source-map-support@~0.5.6: - version "0.5.9" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.9.tgz#41bc953b2534267ea2d605bccfa7bfa3111ced5f" - 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.1.x: - version "0.1.43" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.1.43.tgz#c24bc146ca517c1471f5dacbe2571b2b7f9e3346" - dependencies: - amdefine ">=0.0.4" - -source-map@^0.5.0, source-map@^0.5.3, source-map@^0.5.6, source-map@^0.5.7: - 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: - version "0.6.1" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" - integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== - -sourcemap-codec@^1.4.1: - version "1.4.4" - resolved "https://registry.yarnpkg.com/sourcemap-codec/-/sourcemap-codec-1.4.4.tgz#c63ea927c029dd6bd9a2b7fa03b3fec02ad56e9f" - -space-separated-tokens@^1.0.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/space-separated-tokens/-/space-separated-tokens-1.1.2.tgz#e95ab9d19ae841e200808cd96bc7bd0adbbb3412" - dependencies: - trim "0.0.1" - -spdx-correct@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.0.tgz#fb83e504445268f154b074e218c87c003cd31df4" - dependencies: - spdx-expression-parse "^3.0.0" - spdx-license-ids "^3.0.0" - -spdx-exceptions@^2.1.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz#2ea450aee74f2a89bfb94519c07fcd6f41322977" - -spdx-expression-parse@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz#99e119b7a5da00e05491c9fa338b7904823b41d0" - dependencies: - spdx-exceptions "^2.1.0" - spdx-license-ids "^3.0.0" - -spdx-license-ids@^3.0.0: - version "3.0.2" - resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.2.tgz#a59efc09784c2a5bada13cfeaf5c75dd214044d2" - -spdy-transport@^2.0.18: - version "2.1.1" - resolved "https://registry.yarnpkg.com/spdy-transport/-/spdy-transport-2.1.1.tgz#c54815d73858aadd06ce63001e7d25fa6441623b" - dependencies: - debug "^2.6.8" - detect-node "^2.0.3" - hpack.js "^2.1.6" - obuf "^1.1.1" - readable-stream "^2.2.9" - safe-buffer "^5.0.1" - wbuf "^1.7.2" - -spdy@^3.4.1: - version "3.4.7" - resolved "https://registry.yarnpkg.com/spdy/-/spdy-3.4.7.tgz#42ff41ece5cc0f99a3a6c28aabb73f5c3b03acbc" - dependencies: - debug "^2.6.8" - handle-thing "^1.2.5" - http-deceiver "^1.2.7" - safe-buffer "^5.0.1" - select-hose "^2.0.0" - spdy-transport "^2.0.18" - -specificity@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/specificity/-/specificity-0.4.1.tgz#aab5e645012db08ba182e151165738d00887b019" - -split-string@^3.0.1, split-string@^3.0.2: - version "3.1.0" - resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" - dependencies: - extend-shallow "^3.0.0" - -sprintf-js@~1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" - -sshpk@^1.7.0: - version "1.15.2" - resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.15.2.tgz#c946d6bd9b1a39d0e8635763f5242d6ed6dcb629" - dependencies: - asn1 "~0.2.3" - assert-plus "^1.0.0" - bcrypt-pbkdf "^1.0.0" - dashdash "^1.12.0" - ecc-jsbn "~0.1.1" - getpass "^0.1.1" - jsbn "~0.1.0" - safer-buffer "^2.0.2" - tweetnacl "~0.14.0" - -ssri@^5.2.4: - version "5.3.0" - resolved "https://registry.yarnpkg.com/ssri/-/ssri-5.3.0.tgz#ba3872c9c6d33a0704a7d71ff045e5ec48999d06" - dependencies: - safe-buffer "^5.1.1" - -ssri@^6.0.0: - version "6.0.1" - resolved "https://registry.yarnpkg.com/ssri/-/ssri-6.0.1.tgz#2a3c41b28dd45b62b63676ecb74001265ae9edd8" - dependencies: - figgy-pudding "^3.5.1" - -stable@~0.1.6: - version "0.1.8" - resolved "https://registry.yarnpkg.com/stable/-/stable-0.1.8.tgz#836eb3c8382fe2936feaf544631017ce7d47a3cf" - -stack-utils@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-1.0.2.tgz#33eba3897788558bebfc2db059dc158ec36cebb8" - -staged-git-files@1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/staged-git-files/-/staged-git-files-1.1.2.tgz#4326d33886dc9ecfa29a6193bf511ba90a46454b" - -state-toggle@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/state-toggle/-/state-toggle-1.0.1.tgz#c3cb0974f40a6a0f8e905b96789eb41afa1cde3a" - -static-extend@^0.1.1: - version "0.1.2" - resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" - dependencies: - define-property "^0.2.5" - object-copy "^0.1.0" - -"statuses@>= 1.4.0 < 2": - version "1.5.0" - resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" - -statuses@~1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.4.0.tgz#bb73d446da2796106efcc1b601a253d6c46bd087" - -stealthy-require@^1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/stealthy-require/-/stealthy-require-1.1.1.tgz#35b09875b4ff49f26a777e509b3090a3226bf24b" - -stream-browserify@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.1.tgz#66266ee5f9bdb9940a4e4514cafb43bb71e5c9db" - 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" - 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" - dependencies: - 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" - -strict-uri-encode@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713" - -string-argv@^0.0.2: - version "0.0.2" - resolved "https://registry.yarnpkg.com/string-argv/-/string-argv-0.0.2.tgz#dac30408690c21f3c3630a3ff3a05877bdcbd736" - -string-hash@^1.1.1: - version "1.1.3" - resolved "https://registry.yarnpkg.com/string-hash/-/string-hash-1.1.3.tgz#e8aafc0ac1855b4666929ed7dd1275df5d6c811b" - -string-length@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/string-length/-/string-length-2.0.0.tgz#d40dbb686a3ace960c1cffca562bf2c45f8363ed" - dependencies: - astral-regex "^1.0.0" - strip-ansi "^4.0.0" - -string-range@~1.2, string-range@~1.2.1: - version "1.2.2" - resolved "https://registry.yarnpkg.com/string-range/-/string-range-1.2.2.tgz#a893ed347e72299bc83befbbf2a692a8d239d5dd" - -string-width@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" - dependencies: - code-point-at "^1.0.0" - is-fullwidth-code-point "^1.0.0" - strip-ansi "^3.0.0" - -"string-width@^1.0.2 || 2", string-width@^2.0.0, string-width@^2.1.0, string-width@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" - dependencies: - is-fullwidth-code-point "^2.0.0" - strip-ansi "^4.0.0" - -string_decoder@^1.0.0, string_decoder@^1.1.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.2.0.tgz#fe86e738b19544afe70469243b2a1ee9240eae8d" - dependencies: - safe-buffer "~5.1.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.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" - dependencies: - safe-buffer "~5.1.0" - -stringify-entities@^1.0.1: - version "1.3.2" - resolved "https://registry.yarnpkg.com/stringify-entities/-/stringify-entities-1.3.2.tgz#a98417e5471fd227b3e45d3db1861c11caf668f7" - dependencies: - character-entities-html4 "^1.0.0" - character-entities-legacy "^1.0.0" - is-alphanumerical "^1.0.0" - is-hexadecimal "^1.0.0" - -stringify-object@^3.2.2: - version "3.3.0" - resolved "https://registry.yarnpkg.com/stringify-object/-/stringify-object-3.3.0.tgz#703065aefca19300d3ce88af4f5b3956d7556629" - dependencies: - get-own-enumerable-property-symbols "^3.0.0" - is-obj "^1.0.1" - is-regexp "^1.0.0" - -strip-ansi@4.0.0, strip-ansi@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" - dependencies: - ansi-regex "^3.0.0" - -strip-ansi@^3.0.0, strip-ansi@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" - dependencies: - ansi-regex "^2.0.0" - -strip-ansi@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.0.0.tgz#f78f68b5d0866c20b2c9b8c61b5298508dc8756f" - dependencies: - ansi-regex "^4.0.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" - -strip-comments@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/strip-comments/-/strip-comments-1.0.2.tgz#82b9c45e7f05873bee53f37168af930aa368679d" - dependencies: - babel-extract-comments "^1.0.0" - babel-plugin-transform-object-rest-spread "^6.26.0" - -strip-eof@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" - -strip-indent@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-2.0.0.tgz#5ef8db295d01e6ed6cbf7aab96998d7822527b68" - -strip-json-comments@^2.0.1, strip-json-comments@~2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" - -strip-outer@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/strip-outer/-/strip-outer-1.0.1.tgz#b2fd2abf6604b9d1e6013057195df836b8a9d631" - dependencies: - escape-string-regexp "^1.0.2" - -strip-url-auth@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/strip-url-auth/-/strip-url-auth-1.0.1.tgz#22b0fa3a41385b33be3f331551bbb837fa0cd7ae" - -style-inject@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/style-inject/-/style-inject-0.3.0.tgz#d21c477affec91811cc82355832a700d22bf8dd3" - -style-loader@0.23.0: - version "0.23.0" - resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-0.23.0.tgz#8377fefab68416a2e05f1cabd8c3a3acfcce74f1" - dependencies: - loader-utils "^1.1.0" - schema-utils "^0.4.5" - -style-search@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/style-search/-/style-search-0.1.0.tgz#7958c793e47e32e07d2b5cafe5c0bf8e12e77902" - -stylehacks@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/stylehacks/-/stylehacks-4.0.1.tgz#3186595d047ab0df813d213e51c8b94e0b9010f2" - dependencies: - browserslist "^4.0.0" - postcss "^7.0.0" - postcss-selector-parser "^3.0.0" - -stylelint-config-recommended@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/stylelint-config-recommended/-/stylelint-config-recommended-2.1.0.tgz#f526d5c771c6811186d9eaedbed02195fee30858" - -stylelint@^9.9.0: - version "9.9.0" - resolved "https://registry.yarnpkg.com/stylelint/-/stylelint-9.9.0.tgz#dde466e9b049e0bd30e912ad280f1a2ecf6efdf8" - dependencies: - autoprefixer "^9.0.0" - balanced-match "^1.0.0" - chalk "^2.4.1" - cosmiconfig "^5.0.0" - debug "^4.0.0" - execall "^1.0.0" - file-entry-cache "^2.0.0" - get-stdin "^6.0.0" - global-modules "^1.0.0" - globby "^8.0.0" - globjoin "^0.1.4" - html-tags "^2.0.0" - ignore "^5.0.4" - import-lazy "^3.1.0" - imurmurhash "^0.1.4" - known-css-properties "^0.10.0" - leven "^2.1.0" - lodash "^4.17.4" - log-symbols "^2.0.0" - mathml-tag-names "^2.0.1" - meow "^5.0.0" - micromatch "^3.1.10" - normalize-selector "^0.2.0" - pify "^4.0.0" - postcss "^7.0.0" - postcss-html "^0.34.0" - postcss-jsx "^0.35.0" - postcss-less "^3.1.0" - postcss-markdown "^0.34.0" - postcss-media-query-parser "^0.2.3" - postcss-reporter "^6.0.0" - postcss-resolve-nested-selector "^0.1.1" - postcss-safe-parser "^4.0.0" - postcss-sass "^0.3.5" - postcss-scss "^2.0.0" - postcss-selector-parser "^3.1.0" - postcss-styled "^0.34.0" - postcss-syntax "^0.34.0" - postcss-value-parser "^3.3.0" - resolve-from "^4.0.0" - signal-exit "^3.0.2" - slash "^2.0.0" - specificity "^0.4.1" - string-width "^2.1.0" - style-search "^0.1.0" - sugarss "^2.0.0" - svg-tags "^1.0.0" - table "^5.0.0" - -stylus@^0.54.5: - version "0.54.5" - resolved "https://registry.yarnpkg.com/stylus/-/stylus-0.54.5.tgz#42b9560931ca7090ce8515a798ba9e6aa3d6dc79" - dependencies: - css-parse "1.7.x" - debug "*" - glob "7.0.x" - mkdirp "0.5.x" - sax "0.5.x" - source-map "0.1.x" - -sugarss@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/sugarss/-/sugarss-2.0.0.tgz#ddd76e0124b297d40bf3cca31c8b22ecb43bc61d" - dependencies: - postcss "^7.0.2" - -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, supports-color@^3.2.3: - 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.1.0, supports-color@^5.3.0, supports-color@^5.4.0, supports-color@^5.5.0: - version "5.5.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" - dependencies: - has-flag "^3.0.0" - -svg-tags@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/svg-tags/-/svg-tags-1.0.0.tgz#58f71cee3bd519b59d4b2a843b6c7de64ac04764" - -svgo@^0.7.0: - version "0.7.2" - resolved "https://registry.yarnpkg.com/svgo/-/svgo-0.7.2.tgz#9f5772413952135c6fefbf40afe6a4faa88b4bb5" - dependencies: - coa "~1.0.1" - colors "~1.1.2" - csso "~2.3.1" - js-yaml "~3.7.0" - mkdirp "~0.5.1" - sax "~1.2.1" - whet.extend "~0.9.9" - -svgo@^1.0.0, svgo@^1.0.5, svgo@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/svgo/-/svgo-1.1.1.tgz#12384b03335bcecd85cfa5f4e3375fed671cb985" - dependencies: - coa "~2.0.1" - colors "~1.1.2" - css-select "^2.0.0" - css-select-base-adapter "~0.1.0" - css-tree "1.0.0-alpha.28" - css-url-regex "^1.1.0" - csso "^3.5.0" - js-yaml "^3.12.0" - mkdirp "~0.5.1" - object.values "^1.0.4" - sax "~1.2.4" - stable "~0.1.6" - unquote "~1.1.1" - util.promisify "~1.0.0" - -symbol-observable@^1.1.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.2.0.tgz#c22688aed4eab3cdc2dfeacbb561660560a00804" - -symbol-tree@^3.2.2: - version "3.2.2" - resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.2.tgz#ae27db38f660a7ae2e1c3b7d1bc290819b8519e6" - -table@^4.0.3: - version "4.0.3" - resolved "https://registry.yarnpkg.com/table/-/table-4.0.3.tgz#00b5e2b602f1794b9acaf9ca908a76386a7813bc" - dependencies: - ajv "^6.0.1" - ajv-keywords "^3.0.0" - chalk "^2.1.0" - lodash "^4.17.4" - slice-ansi "1.0.0" - string-width "^2.1.1" - -table@^5.0.0: - version "5.1.1" - resolved "https://registry.yarnpkg.com/table/-/table-5.1.1.tgz#92030192f1b7b51b6eeab23ed416862e47b70837" - dependencies: - ajv "^6.6.1" - lodash "^4.17.11" - slice-ansi "2.0.0" - string-width "^2.1.1" - -tapable@^1.0.0, tapable@^1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.1.tgz#4d297923c5a72a42360de2ab52dadfaaec00018e" - -tar@^4: - version "4.4.8" - resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.8.tgz#b19eec3fde2a96e64666df9fdb40c5ca1bc3747d" - 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.1.0" - resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-1.1.0.tgz#cf7c25a1eee25bf121f4a587bb9e004e3f80e528" - dependencies: - cacache "^11.0.2" - find-cache-dir "^2.0.0" - schema-utils "^1.0.0" - serialize-javascript "^1.4.0" - source-map "^0.6.1" - terser "^3.8.1" - webpack-sources "^1.1.0" - worker-farm "^1.5.2" - -terser@^3.8.1: - version "3.11.0" - resolved "https://registry.yarnpkg.com/terser/-/terser-3.11.0.tgz#60782893e1f4d6788acc696351f40636d0e37af0" - dependencies: - commander "~2.17.1" - source-map "~0.6.1" - source-map-support "~0.5.6" - -test-exclude@^4.2.1: - version "4.2.3" - resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-4.2.3.tgz#a9a5e64474e4398339245a0a769ad7c2f4a97c20" - dependencies: - arrify "^1.0.1" - micromatch "^2.3.11" - object-assign "^4.1.0" - read-pkg-up "^1.0.1" - require-main-filename "^1.0.1" - -text-table@0.2.0, text-table@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" - -throat@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/throat/-/throat-4.1.0.tgz#89037cbc92c56ab18926e6ba4cbb200e15672a6a" - -through2@^2.0.0: - version "2.0.5" - resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" - dependencies: - readable-stream "~2.3.6" - xtend "~4.0.1" - -through@^2.3.6: - version "2.3.8" - resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" - -thunky@^1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/thunky/-/thunky-1.0.3.tgz#f5df732453407b09191dae73e2a8cc73f381a826" - -timers-browserify@^2.0.4: - version "2.0.10" - resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.10.tgz#1d28e3d2aadf1d5a5996c4e9f95601cd053480ae" - dependencies: - setimmediate "^1.0.4" - -timsort@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/timsort/-/timsort-0.3.0.tgz#405411a8e7e6339fe64db9a234de11dc31e02bd4" - -tmp@^0.0.33: - version "0.0.33" - resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" - dependencies: - os-tmpdir "~1.0.2" - -tmpl@1.0.x: - version "1.0.4" - resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.4.tgz#23640dd7b42d00433911140820e5cf440e521dd1" - -to-arraybuffer@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43" - -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" - -to-object-path@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" - dependencies: - kind-of "^3.0.2" - -to-regex-range@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38" - dependencies: - is-number "^3.0.0" - repeat-string "^1.6.1" - -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" - dependencies: - define-property "^2.0.2" - extend-shallow "^3.0.2" - regex-not "^1.0.2" - safe-regex "^1.1.0" - -topo@2.x.x: - version "2.0.2" - resolved "https://registry.yarnpkg.com/topo/-/topo-2.0.2.tgz#cd5615752539057c0dc0491a621c3bc6fbe1d182" - dependencies: - hoek "4.x.x" - -tough-cookie@>=2.3.3, tough-cookie@^2.3.4, tough-cookie@^2.4.3: - version "2.5.0" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2" - dependencies: - psl "^1.1.28" - punycode "^2.1.1" - -tough-cookie@~2.4.3: - version "2.4.3" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.4.3.tgz#53f36da3f47783b0925afa06ff9f3b165280f781" - dependencies: - psl "^1.1.24" - punycode "^1.4.1" - -tr46@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/tr46/-/tr46-1.0.1.tgz#a8b13fd6bfd2489519674ccde55ba3693b706d09" - dependencies: - punycode "^2.1.0" - -trim-newlines@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-2.0.0.tgz#b403d0b91be50c331dfc4b82eeceb22c3de16d20" - -trim-repeated@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/trim-repeated/-/trim-repeated-1.0.0.tgz#e3646a2ea4e891312bf7eace6cfb05380bc01c21" - dependencies: - escape-string-regexp "^1.0.2" - -trim-right@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003" - -trim-trailing-lines@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/trim-trailing-lines/-/trim-trailing-lines-1.1.1.tgz#e0ec0810fd3c3f1730516b45f49083caaf2774d9" - -trim@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/trim/-/trim-0.0.1.tgz#5858547f6b290757ee95cccc666fb50084c460dd" - -trough@^1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/trough/-/trough-1.0.3.tgz#e29bd1614c6458d44869fc28b255ab7857ef7c24" - -tryer@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/tryer/-/tryer-1.0.1.tgz#f2c85406800b9b0f74c9f7465b81eaad241252f8" - -tslib@^1.9.0: - version "1.9.3" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.9.3.tgz#d7e4dd79245d85428c4d7e4822a79917954ca286" - -tty-browserify@0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6" - -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" - -tweetnacl@^0.14.3, tweetnacl@~0.14.0: - version "0.14.5" - resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" - -type-check@~0.3.2: - version "0.3.2" - resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" - dependencies: - prelude-ls "~1.1.2" - -type-is@~1.6.16: - version "1.6.16" - resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.16.tgz#f89ce341541c672b25ee7ae3c73dee3b2be50194" - dependencies: - media-typer "0.3.0" - mime-types "~2.1.18" - -typedarray-to-buffer@~1.0.0: - version "1.0.4" - resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-1.0.4.tgz#9bb8ba0e841fb3f4cf1fe7c245e9f3fa8a5fe99c" - -typedarray@^0.0.6: - version "0.0.6" - resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" - -uglify-es@^3.3.4: - version "3.3.9" - resolved "https://registry.yarnpkg.com/uglify-es/-/uglify-es-3.3.9.tgz#0c1c4f0700bed8dbc124cdb304d2592ca203e677" - dependencies: - commander "~2.13.0" - source-map "~0.6.1" - -uglify-js@3.4.x: - version "3.4.9" - resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.4.9.tgz#af02f180c1207d76432e473ed24a28f4a782bae3" - dependencies: - 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" - dependencies: - cacache "^10.0.4" - find-cache-dir "^1.0.0" - schema-utils "^0.4.5" - serialize-javascript "^1.4.0" - source-map "^0.6.1" - uglify-es "^3.3.4" - webpack-sources "^1.1.0" - worker-farm "^1.5.2" - -unherit@^1.0.4: - version "1.1.1" - resolved "https://registry.yarnpkg.com/unherit/-/unherit-1.1.1.tgz#132748da3e88eab767e08fabfbb89c5e9d28628c" - dependencies: - inherits "^2.0.1" - xtend "^4.0.1" - -unicode-canonical-property-names-ecmascript@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz#2619800c4c825800efdd8343af7dd9933cbe2818" - -unicode-match-property-ecmascript@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz#8ed2a32569961bce9227d09cd3ffbb8fed5f020c" - dependencies: - unicode-canonical-property-names-ecmascript "^1.0.4" - unicode-property-aliases-ecmascript "^1.0.4" - -unicode-match-property-value-ecmascript@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.0.2.tgz#9f1dc76926d6ccf452310564fd834ace059663d4" - -unicode-property-aliases-ecmascript@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.0.4.tgz#5a533f31b4317ea76f17d807fa0d116546111dd0" - -unified@^6.0.0: - version "6.2.0" - resolved "https://registry.yarnpkg.com/unified/-/unified-6.2.0.tgz#7fbd630f719126d67d40c644b7e3f617035f6dba" - dependencies: - bail "^1.0.0" - extend "^3.0.0" - is-plain-obj "^1.1.0" - trough "^1.0.0" - vfile "^2.0.0" - x-is-string "^0.1.0" - -unified@^7.0.2: - version "7.0.2" - resolved "https://registry.yarnpkg.com/unified/-/unified-7.0.2.tgz#16aa2748a7c936b80846cc69c580cd5ebd844532" - dependencies: - bail "^1.0.0" - extend "^3.0.0" - is-plain-obj "^1.1.0" - trough "^1.0.0" - vfile "^3.0.0" - x-is-string "^0.1.0" - -union-value@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.0.tgz#5c71c34cb5bad5dcebe3ea0cd08207ba5aa1aea4" - dependencies: - arr-union "^3.1.0" - get-value "^2.0.6" - is-extendable "^0.1.1" - set-value "^0.4.3" - -uniq@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/uniq/-/uniq-1.0.1.tgz#b31c5ae8254844a3a8281541ce2b04b865a734ff" - -uniqs@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/uniqs/-/uniqs-2.0.0.tgz#ffede4b36b25290696e6e165d4a59edb998e6b02" - -unique-filename@^1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-1.1.1.tgz#1d69769369ada0583103a1e6ae87681b56573230" - dependencies: - unique-slug "^2.0.0" - -unique-slug@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-2.0.1.tgz#5e9edc6d1ce8fb264db18a507ef9bd8544451ca6" - dependencies: - imurmurhash "^0.1.4" - -unist-util-find-all-after@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/unist-util-find-all-after/-/unist-util-find-all-after-1.0.2.tgz#9be49cfbae5ca1566b27536670a92836bf2f8d6d" - dependencies: - unist-util-is "^2.0.0" - -unist-util-is@^2.0.0, unist-util-is@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/unist-util-is/-/unist-util-is-2.1.2.tgz#1193fa8f2bfbbb82150633f3a8d2eb9a1c1d55db" - -unist-util-remove-position@^1.0.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/unist-util-remove-position/-/unist-util-remove-position-1.1.2.tgz#86b5dad104d0bbfbeb1db5f5c92f3570575c12cb" - dependencies: - unist-util-visit "^1.1.0" - -unist-util-stringify-position@^1.0.0, unist-util-stringify-position@^1.1.1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/unist-util-stringify-position/-/unist-util-stringify-position-1.1.2.tgz#3f37fcf351279dcbca7480ab5889bb8a832ee1c6" - -unist-util-visit-parents@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/unist-util-visit-parents/-/unist-util-visit-parents-2.0.1.tgz#63fffc8929027bee04bfef7d2cce474f71cb6217" - dependencies: - unist-util-is "^2.1.2" - -unist-util-visit@^1.1.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/unist-util-visit/-/unist-util-visit-1.4.0.tgz#1cb763647186dc26f5e1df5db6bd1e48b3cc2fb1" - dependencies: - unist-util-visit-parents "^2.0.0" - -universalify@^0.1.0: - version "0.1.2" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" - -unpipe@1.0.0, unpipe@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" - -unquote@~1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/unquote/-/unquote-1.1.1.tgz#8fded7324ec6e88a0ff8b905e7c098cdc086d544" - -unset-value@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" - dependencies: - has-value "^0.3.1" - isobject "^3.0.0" - -upath@^1.0.5: - version "1.1.0" - resolved "https://registry.yarnpkg.com/upath/-/upath-1.1.0.tgz#35256597e46a581db4793d0ce47fa9aebfc9fabd" - -upper-case@^1.1.1: - version "1.1.3" - resolved "https://registry.yarnpkg.com/upper-case/-/upper-case-1.1.3.tgz#f6b4501c2ec4cdd26ba78be7222961de77621598" - -uri-js@^4.2.2: - version "4.2.2" - resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0" - 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-loader@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/url-loader/-/url-loader-1.1.1.tgz#4d1f3b4f90dde89f02c008e662d604d7511167c1" - dependencies: - loader-utils "^1.1.0" - mime "^2.0.3" - schema-utils "^1.0.0" - -url-parse@^1.1.8, url-parse@^1.4.3: - version "1.4.4" - resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.4.4.tgz#cac1556e95faa0303691fec5cf9d5a1bc34648f8" - dependencies: - querystringify "^2.0.0" - requires-port "^1.0.0" - -url@^0.11.0: - version "0.11.0" - resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1" - dependencies: - punycode "1.3.2" - querystring "0.2.0" - -use@^3.1.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" - -util-deprecate@^1.0.1, util-deprecate@~1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" - -util.promisify@1.0.0, util.promisify@^1.0.0, util.promisify@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.0.0.tgz#440f7165a459c9a16dc145eb8e72f35687097030" - dependencies: - define-properties "^1.1.2" - object.getownpropertydescriptors "^2.0.3" - -util@0.10.3: - version "0.10.3" - resolved "https://registry.yarnpkg.com/util/-/util-0.10.3.tgz#7afb1afe50805246489e3db7fe0ed379336ac0f9" - dependencies: - inherits "2.0.1" - -util@^0.10.3: - version "0.10.4" - resolved "https://registry.yarnpkg.com/util/-/util-0.10.4.tgz#3aa0125bfe668a4672de58857d3ace27ecb76901" - dependencies: - inherits "2.0.3" - -utila@^0.4.0, utila@~0.4: - version "0.4.0" - resolved "https://registry.yarnpkg.com/utila/-/utila-0.4.0.tgz#8a16a05d445657a3aea5eecc5b12a4fa5379772c" - -utils-merge@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" - -uuid@^3.0.1, uuid@^3.3.2: - version "3.3.2" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.2.tgz#1b4af4955eb3077c501c23872fc6513811587131" - -validate-npm-package-license@^3.0.1: - version "3.0.4" - resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" - dependencies: - spdx-correct "^3.0.0" - spdx-expression-parse "^3.0.0" - -vary@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" - -vendors@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/vendors/-/vendors-1.0.2.tgz#7fcb5eef9f5623b156bcea89ec37d63676f21801" - -verror@1.10.0: - version "1.10.0" - resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" - dependencies: - assert-plus "^1.0.0" - core-util-is "1.0.2" - extsprintf "^1.2.0" - -vfile-location@^2.0.0: - version "2.0.4" - resolved "https://registry.yarnpkg.com/vfile-location/-/vfile-location-2.0.4.tgz#2a5e7297dd0d9e2da4381464d04acc6b834d3e55" - -vfile-message@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/vfile-message/-/vfile-message-1.0.2.tgz#0f8a62584c5dff0f81760531b8e34f3cea554ebc" - dependencies: - unist-util-stringify-position "^1.1.1" - -vfile@^2.0.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/vfile/-/vfile-2.3.0.tgz#e62d8e72b20e83c324bc6c67278ee272488bf84a" - dependencies: - is-buffer "^1.1.4" - replace-ext "1.0.0" - unist-util-stringify-position "^1.0.0" - vfile-message "^1.0.0" - -vfile@^3.0.0, vfile@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/vfile/-/vfile-3.0.1.tgz#47331d2abe3282424f4a4bb6acd20a44c4121803" - dependencies: - is-buffer "^2.0.0" - replace-ext "1.0.0" - unist-util-stringify-position "^1.0.0" - vfile-message "^1.0.0" - -vm-browserify@0.0.4: - version "0.0.4" - resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-0.0.4.tgz#5d7ea45bbef9e4a6ff65f95438e0a87c357d5a73" - dependencies: - indexof "0.0.1" - -w3c-hr-time@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/w3c-hr-time/-/w3c-hr-time-1.0.1.tgz#82ac2bff63d950ea9e3189a58a65625fedf19045" - dependencies: - browser-process-hrtime "^0.1.2" - -w3c-xmlserializer@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/w3c-xmlserializer/-/w3c-xmlserializer-1.0.0.tgz#d23e20de595b892056f20a359fc2622908d48695" - dependencies: - domexception "^1.0.1" - webidl-conversions "^4.0.2" - xml-name-validator "^3.0.0" - -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" - dependencies: - exec-sh "^0.2.0" - minimist "^1.2.0" - -watchpack@^1.5.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.6.0.tgz#4bc12c2ebe8aa277a71f1d3f14d685c7b446cd00" - dependencies: - chokidar "^2.0.2" - graceful-fs "^4.1.2" - neo-async "^2.5.0" - -wbuf@^1.1.0, wbuf@^1.7.2: - version "1.7.3" - resolved "https://registry.yarnpkg.com/wbuf/-/wbuf-1.7.3.tgz#c1d8d149316d3ea852848895cb6a0bfe887b87df" - dependencies: - minimalistic-assert "^1.0.0" - -web-namespaces@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/web-namespaces/-/web-namespaces-1.1.2.tgz#c8dc267ab639505276bae19e129dbd6ae72b22b4" - -webidl-conversions@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad" - -webpack-dev-middleware@3.4.0: - version "3.4.0" - resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-3.4.0.tgz#1132fecc9026fd90f0ecedac5cbff75d1fb45890" - dependencies: - memory-fs "~0.4.1" - mime "^2.3.1" - range-parser "^1.0.3" - webpack-log "^2.0.0" - -webpack-dev-server@3.1.9: - version "3.1.9" - resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-3.1.9.tgz#8b32167624d2faff40dcedc2cbce17ed1f34d3e0" - dependencies: - ansi-html "0.0.7" - bonjour "^3.5.0" - chokidar "^2.0.0" - compression "^1.5.2" - connect-history-api-fallback "^1.3.0" - debug "^3.1.0" - del "^3.0.0" - express "^4.16.2" - html-entities "^1.2.0" - http-proxy-middleware "~0.18.0" - import-local "^2.0.0" - internal-ip "^3.0.1" - ip "^1.1.5" - killable "^1.0.0" - loglevel "^1.4.1" - opn "^5.1.0" - portfinder "^1.0.9" - schema-utils "^1.0.0" - selfsigned "^1.9.1" - serve-index "^1.7.2" - sockjs "0.3.19" - sockjs-client "1.1.5" - spdy "^3.4.1" - strip-ansi "^3.0.0" - supports-color "^5.1.0" - webpack-dev-middleware "3.4.0" - webpack-log "^2.0.0" - yargs "12.0.2" - -webpack-log@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/webpack-log/-/webpack-log-2.0.0.tgz#5b7928e0637593f119d32f6227c1e0ac31e1b47f" - dependencies: - ansi-colors "^3.0.0" - uuid "^3.3.2" - -webpack-manifest-plugin@2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/webpack-manifest-plugin/-/webpack-manifest-plugin-2.0.4.tgz#e4ca2999b09557716b8ba4475fb79fab5986f0cd" - dependencies: - fs-extra "^7.0.0" - lodash ">=3.5 <5" - tapable "^1.0.0" - -webpack-sources@^1.1.0, webpack-sources@^1.2.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.3.0.tgz#2a28dcb9f1f45fe960d8f1493252b5ee6530fa85" - dependencies: - source-list-map "^2.0.0" - source-map "~0.6.1" - -webpack@4.19.1: - version "4.19.1" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.19.1.tgz#096674bc3b573f8756c762754366e5b333d6576f" - dependencies: - "@webassemblyjs/ast" "1.7.6" - "@webassemblyjs/helper-module-context" "1.7.6" - "@webassemblyjs/wasm-edit" "1.7.6" - "@webassemblyjs/wasm-parser" "1.7.6" - acorn "^5.6.2" - acorn-dynamic-import "^3.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 "^0.4.4" - tapable "^1.1.0" - uglifyjs-webpack-plugin "^1.2.4" - watchpack "^1.5.0" - webpack-sources "^1.2.0" - -websocket-driver@>=0.5.1: - version "0.7.0" - resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.7.0.tgz#0caf9d2d755d93aee049d4bdd0d3fe2cca2a24eb" - dependencies: - http-parser-js ">=0.4.0" - websocket-extensions ">=0.1.1" - -websocket-extensions@>=0.1.1: - version "0.1.3" - resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.3.tgz#5d2ff22977003ec687a4b87073dfbbac146ccf29" - -whatwg-encoding@^1.0.1, whatwg-encoding@^1.0.3, whatwg-encoding@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz#5abacf777c32166a51d085d6b4f3e7d27113ddb0" - dependencies: - iconv-lite "0.4.24" - -whatwg-fetch@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-3.0.0.tgz#fc804e458cc460009b1a2b966bc8817d2578aefb" - -whatwg-mimetype@^2.1.0, whatwg-mimetype@^2.2.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz#3d4b1e0312d2079879f826aff18dbeeca5960fbf" - -whatwg-url@^6.4.1: - version "6.5.0" - resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-6.5.0.tgz#f2df02bff176fd65070df74ad5ccbb5a199965a8" - dependencies: - lodash.sortby "^4.7.0" - tr46 "^1.0.1" - webidl-conversions "^4.0.2" - -whatwg-url@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-7.0.0.tgz#fde926fa54a599f3adf82dff25a9f7be02dc6edd" - dependencies: - lodash.sortby "^4.7.0" - tr46 "^1.0.1" - webidl-conversions "^4.0.2" - -whet.extend@~0.9.9: - version "0.9.9" - resolved "https://registry.yarnpkg.com/whet.extend/-/whet.extend-0.9.9.tgz#f877d5bf648c97e5aa542fadc16d6a259b9c11a1" - -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.14, which@^1.2.9, which@^1.3.0: - version "1.3.1" - resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" - dependencies: - isexe "^2.0.0" - -wide-align@^1.1.0: - version "1.1.3" - resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457" - dependencies: - string-width "^1.0.2 || 2" - -wordwrap@~0.0.2: - version "0.0.3" - resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107" - integrity sha1-o9XabNXAvAAI03I0u68b7WMFkQc= - -wordwrap@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" - -workbox-background-sync@^3.6.3: - version "3.6.3" - resolved "https://registry.yarnpkg.com/workbox-background-sync/-/workbox-background-sync-3.6.3.tgz#6609a0fac9eda336a7c52e6aa227ba2ae532ad94" - dependencies: - workbox-core "^3.6.3" - -workbox-broadcast-cache-update@^3.6.3: - version "3.6.3" - resolved "https://registry.yarnpkg.com/workbox-broadcast-cache-update/-/workbox-broadcast-cache-update-3.6.3.tgz#3f5dff22ada8c93e397fb38c1dc100606a7b92da" - dependencies: - workbox-core "^3.6.3" - -workbox-build@^3.6.3: - version "3.6.3" - resolved "https://registry.yarnpkg.com/workbox-build/-/workbox-build-3.6.3.tgz#77110f9f52dc5d82fa6c1c384c6f5e2225adcbd8" - dependencies: - babel-runtime "^6.26.0" - common-tags "^1.4.0" - fs-extra "^4.0.2" - glob "^7.1.2" - joi "^11.1.1" - lodash.template "^4.4.0" - pretty-bytes "^4.0.2" - stringify-object "^3.2.2" - strip-comments "^1.0.2" - workbox-background-sync "^3.6.3" - workbox-broadcast-cache-update "^3.6.3" - workbox-cache-expiration "^3.6.3" - workbox-cacheable-response "^3.6.3" - workbox-core "^3.6.3" - workbox-google-analytics "^3.6.3" - workbox-navigation-preload "^3.6.3" - workbox-precaching "^3.6.3" - workbox-range-requests "^3.6.3" - workbox-routing "^3.6.3" - workbox-strategies "^3.6.3" - workbox-streams "^3.6.3" - workbox-sw "^3.6.3" - -workbox-cache-expiration@^3.6.3: - version "3.6.3" - resolved "https://registry.yarnpkg.com/workbox-cache-expiration/-/workbox-cache-expiration-3.6.3.tgz#4819697254a72098a13f94b594325a28a1e90372" - dependencies: - workbox-core "^3.6.3" - -workbox-cacheable-response@^3.6.3: - version "3.6.3" - resolved "https://registry.yarnpkg.com/workbox-cacheable-response/-/workbox-cacheable-response-3.6.3.tgz#869f1a68fce9063f6869ddbf7fa0a2e0a868b3aa" - dependencies: - workbox-core "^3.6.3" - -workbox-core@^3.6.3: - version "3.6.3" - resolved "https://registry.yarnpkg.com/workbox-core/-/workbox-core-3.6.3.tgz#69abba70a4f3f2a5c059295a6f3b7c62bd00e15c" - -workbox-google-analytics@^3.6.3: - version "3.6.3" - resolved "https://registry.yarnpkg.com/workbox-google-analytics/-/workbox-google-analytics-3.6.3.tgz#99df2a3d70d6e91961e18a6752bac12e91fbf727" - dependencies: - workbox-background-sync "^3.6.3" - workbox-core "^3.6.3" - workbox-routing "^3.6.3" - workbox-strategies "^3.6.3" - -workbox-navigation-preload@^3.6.3: - version "3.6.3" - resolved "https://registry.yarnpkg.com/workbox-navigation-preload/-/workbox-navigation-preload-3.6.3.tgz#a2c34eb7c17e7485b795125091215f757b3c4964" - dependencies: - workbox-core "^3.6.3" - -workbox-precaching@^3.6.3: - version "3.6.3" - resolved "https://registry.yarnpkg.com/workbox-precaching/-/workbox-precaching-3.6.3.tgz#5341515e9d5872c58ede026a31e19bafafa4e1c1" - dependencies: - workbox-core "^3.6.3" - -workbox-range-requests@^3.6.3: - version "3.6.3" - resolved "https://registry.yarnpkg.com/workbox-range-requests/-/workbox-range-requests-3.6.3.tgz#3cc21cba31f2dd8c43c52a196bcc8f6cdbcde803" - dependencies: - workbox-core "^3.6.3" - -workbox-routing@^3.6.3: - version "3.6.3" - resolved "https://registry.yarnpkg.com/workbox-routing/-/workbox-routing-3.6.3.tgz#659cd8f9274986cfa98fda0d050de6422075acf7" - dependencies: - workbox-core "^3.6.3" - -workbox-strategies@^3.6.3: - version "3.6.3" - resolved "https://registry.yarnpkg.com/workbox-strategies/-/workbox-strategies-3.6.3.tgz#11a0dc249a7bc23d3465ec1322d28fa6643d64a0" - dependencies: - workbox-core "^3.6.3" - -workbox-streams@^3.6.3: - version "3.6.3" - resolved "https://registry.yarnpkg.com/workbox-streams/-/workbox-streams-3.6.3.tgz#beaea5d5b230239836cc327b07d471aa6101955a" - dependencies: - workbox-core "^3.6.3" - -workbox-sw@^3.6.3: - version "3.6.3" - resolved "https://registry.yarnpkg.com/workbox-sw/-/workbox-sw-3.6.3.tgz#278ea4c1831b92bbe2d420da8399176c4b2789ff" - -workbox-webpack-plugin@3.6.3: - version "3.6.3" - resolved "https://registry.yarnpkg.com/workbox-webpack-plugin/-/workbox-webpack-plugin-3.6.3.tgz#a807bb891b4e4e3c808df07e58f17de2d5ba6182" - dependencies: - babel-runtime "^6.26.0" - json-stable-stringify "^1.0.1" - workbox-build "^3.6.3" - -worker-farm@^1.5.2: - version "1.6.0" - resolved "https://registry.yarnpkg.com/worker-farm/-/worker-farm-1.6.0.tgz#aecc405976fab5a95526180846f0dba288f3a4a0" - 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" - dependencies: - string-width "^1.0.1" - strip-ansi "^3.0.1" - -wrap-ansi@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-3.0.1.tgz#288a04d87eda5c286e060dfe8f135ce8d007f8ba" - dependencies: - string-width "^2.1.1" - strip-ansi "^4.0.0" - -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" - dependencies: - graceful-fs "^4.1.11" - imurmurhash "^0.1.4" - signal-exit "^3.0.2" - -write@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/write/-/write-0.2.1.tgz#5fc03828e264cea3fe91455476f7a3c566cb0757" - dependencies: - mkdirp "^0.5.1" - -ws@^5.2.0: - version "5.2.2" - resolved "https://registry.yarnpkg.com/ws/-/ws-5.2.2.tgz#dffef14866b8e8dc9133582514d1befaf96e980f" - dependencies: - async-limiter "~1.0.0" - -ws@^6.1.0: - version "6.1.2" - resolved "https://registry.yarnpkg.com/ws/-/ws-6.1.2.tgz#3cc7462e98792f0ac679424148903ded3b9c3ad8" - dependencies: - async-limiter "~1.0.0" - -x-is-string@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/x-is-string/-/x-is-string-0.1.0.tgz#474b50865af3a49a9c4657f05acd145458f77d82" - -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" - -xmlchars@^1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/xmlchars/-/xmlchars-1.3.1.tgz#1dda035f833dbb4f86a0c28eaa6ca769214793cf" - -xregexp@4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/xregexp/-/xregexp-4.0.0.tgz#e698189de49dd2a18cc5687b05e17c8e43943020" - -xtend@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/xtend/-/xtend-2.2.0.tgz#eef6b1f198c1c8deafad8b1765a04dad4a01c5a9" - -xtend@^4.0.0, xtend@^4.0.1, xtend@~4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af" - -xtend@~2.0.4: - version "2.0.6" - resolved "https://registry.yarnpkg.com/xtend/-/xtend-2.0.6.tgz#5ea657a6dba447069c2e59c58a1138cb0c5e6cee" - dependencies: - is-object "~0.1.2" - object-keys "~0.2.0" - -xtend@~2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/xtend/-/xtend-2.1.2.tgz#6efecc2a4dad8e6962c4901b337ce7ba87b5d28b" - dependencies: - object-keys "~0.4.0" - -xtend@~3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/xtend/-/xtend-3.0.0.tgz#5cce7407baf642cba7becda568111c493f59665a" - -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" - -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" - -yargs-parser@^10.0.0, yargs-parser@^10.1.0: - version "10.1.0" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-10.1.0.tgz#7202265b89f7e9e9f2e5765e0fe735a905edbaa8" - dependencies: - camelcase "^4.1.0" - -yargs-parser@^9.0.2: - version "9.0.2" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-9.0.2.tgz#9ccf6a43460fe4ed40a9bb68f48d43b8a68cc077" - dependencies: - camelcase "^4.1.0" - -yargs@12.0.2: - version "12.0.2" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-12.0.2.tgz#fe58234369392af33ecbef53819171eff0f5aadc" - dependencies: - cliui "^4.0.0" - decamelize "^2.0.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 "^10.1.0" - -yargs@^11.0.0: - version "11.1.0" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-11.1.0.tgz#90b869934ed6e871115ea2ff58b03f4724ed2d77" - dependencies: - cliui "^4.0.0" - decamelize "^1.1.1" - find-up "^2.1.0" - get-caller-file "^1.0.1" - os-locale "^2.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" - yargs-parser "^9.0.2" diff --git a/extensions/ohif-dicom-microscopy-extension/.babelrc b/extensions/ohif-dicom-microscopy-extension/.babelrc deleted file mode 100644 index 430b9904b69..00000000000 --- a/extensions/ohif-dicom-microscopy-extension/.babelrc +++ /dev/null @@ -1,14 +0,0 @@ -{ - "presets": [ - ["@babel/preset-env", { - "targets": { - "ie": "11" - } - }], - "@babel/preset-react" - ], - "plugins": [ - "@babel/plugin-proposal-class-properties", - "@babel/plugin-transform-runtime" - ] -} diff --git a/extensions/ohif-dicom-microscopy-extension/.editorconfig b/extensions/ohif-dicom-microscopy-extension/.editorconfig deleted file mode 100644 index 9d08a1a828a..00000000000 --- a/extensions/ohif-dicom-microscopy-extension/.editorconfig +++ /dev/null @@ -1,9 +0,0 @@ -root = true - -[*] -charset = utf-8 -indent_style = space -indent_size = 2 -end_of_line = lf -insert_final_newline = true -trim_trailing_whitespace = true diff --git a/extensions/ohif-dicom-microscopy-extension/.eslintrc b/extensions/ohif-dicom-microscopy-extension/.eslintrc deleted file mode 100644 index 77d67cd94b1..00000000000 --- a/extensions/ohif-dicom-microscopy-extension/.eslintrc +++ /dev/null @@ -1,16 +0,0 @@ -{ - "extends": [ - "react-app", - "eslint:recommended", - "plugin:react/recommended" - ], - "parser": "babel-eslint", - "env": { - "jest": true - }, - "settings": { - "react": { - "version": "detect", - }, - }, -} diff --git a/extensions/ohif-dicom-microscopy-extension/.gitignore b/extensions/ohif-dicom-microscopy-extension/.gitignore deleted file mode 100644 index 2ac57034390..00000000000 --- a/extensions/ohif-dicom-microscopy-extension/.gitignore +++ /dev/null @@ -1,23 +0,0 @@ - -# See https://help.github.com/ignore-files/ for more about ignoring files. - -# dependencies -node_modules - -# builds -build -dist -.rpt2_cache - -# misc -.DS_Store -.env -.env.local -.env.development.local -.env.test.local -.env.production.local - -npm-debug.log* -yarn-debug.log* -yarn-error.log* -.idea diff --git a/extensions/ohif-dicom-microscopy-extension/.prettierrc b/extensions/ohif-dicom-microscopy-extension/.prettierrc deleted file mode 100644 index 12348ec6acf..00000000000 --- a/extensions/ohif-dicom-microscopy-extension/.prettierrc +++ /dev/null @@ -1,9 +0,0 @@ -{ - "trailingComma": "es5", - "printWidth": 80, - "proseWrap": "always", - "tabWidth": 2, - "semi": true, - "singleQuote": true, - "endOfLine": "lf" -} diff --git a/extensions/ohif-dicom-microscopy-extension/.travis.yml b/extensions/ohif-dicom-microscopy-extension/.travis.yml deleted file mode 100644 index 984658c939e..00000000000 --- a/extensions/ohif-dicom-microscopy-extension/.travis.yml +++ /dev/null @@ -1,4 +0,0 @@ -language: node_js -node_js: - - 9 - - 8 diff --git a/extensions/ohif-dicom-microscopy-extension/package.json b/extensions/ohif-dicom-microscopy-extension/package.json deleted file mode 100644 index 0106cfa8d0f..00000000000 --- a/extensions/ohif-dicom-microscopy-extension/package.json +++ /dev/null @@ -1,88 +0,0 @@ -{ - "name": "@ohif/extension-dicom-microscopy", - "version": "0.0.12", - "description": "OHIF extension for Dicom Microscopy", - "author": "OHIF", - "license": "MIT", - "repository": "OHIF/Viewers", - "main": "dist/index.js", - "module": "dist/index.es.js", - "jsnext:main": "dist/index.es.js", - "engines": { - "node": ">=8", - "npm": ">=5" - }, - "scripts": { - "build": "rollup -c", - "prepublishOnly": "npm run build", - "start": "rollup -c -w", - "lint": "eslint -c .eslintrc --fix src && prettier --single-quote --write src/**/*.{js,jsx,json,css}" - }, - "peerDependencies": { - "ohif-core": "^0.6.0", - "react": "^15.0.0 || ^16.0.0", - "react-dom": "^15.0.0 || ^16.0.0", - "react-resize-detector": "^4.2.0" - }, - "devDependencies": { - "@babel/core": "^7.2.2", - "@babel/plugin-external-helpers": "^7.2.0", - "@babel/plugin-proposal-class-properties": "^7.2.3", - "@babel/plugin-transform-runtime": "^7.2.0", - "@babel/preset-env": "^7.2.3", - "@babel/preset-react": "^7.0.0", - "babel-eslint": "^9.0.0", - "cross-env": "^5.2.0", - "eslint": "5.6.0", - "eslint-plugin-import": "^2.14.0", - "eslint-plugin-node": "^8.0.0", - "eslint-plugin-promise": "^4.0.1", - "eslint-plugin-react": "^7.11.1", - "gh-pages": "^2.0.1", - "husky": "^1.3.1", - "lint-staged": "^8.1.0", - "prettier": "^1.15.3", - "react": "^16.6.3", - "react-dom": "^16.6.3", - "rollup": "^0.68.2", - "rollup-plugin-babel": "^4.2.0", - "rollup-plugin-commonjs": "^9.2.0", - "rollup-plugin-node-builtins": "^2.1.2", - "rollup-plugin-node-resolve": "^4.0.0", - "rollup-plugin-peer-deps-external": "^2.2.0", - "rollup-plugin-postcss": "^1.6.3", - "rollup-plugin-url": "^2.1.0", - "stylelint": "^9.9.0", - "stylelint-config-recommended": "^2.1.0", - "stylus": "^0.54.5" - }, - "husky": { - "hooks": { - "pre-commit": "lint-staged" - } - }, - "lint-staged": { - "src/**/*.{js,jsx,json,css}": [ - "prettier --single-quote --write", - "git add" - ] - }, - "browserslist": [ - ">0.2%", - "not dead", - "not ie <= 11", - "not op_mini all" - ], - "files": [ - "dist" - ], - "publishConfig": { - "access": "public" - }, - "dependencies": { - "@babel/runtime": "^7.2.0", - "classnames": "^2.2.6", - "dicom-microscopy-viewer": "0.6.1", - "lodash.debounce": "^4.0.8" - } -} diff --git a/extensions/ohif-dicom-microscopy-extension/rollup.config.js b/extensions/ohif-dicom-microscopy-extension/rollup.config.js deleted file mode 100644 index 936db101bbb..00000000000 --- a/extensions/ohif-dicom-microscopy-extension/rollup.config.js +++ /dev/null @@ -1,70 +0,0 @@ -import babel from 'rollup-plugin-babel'; -import commonjs from 'rollup-plugin-commonjs'; -import external from 'rollup-plugin-peer-deps-external'; -import postcss from 'rollup-plugin-postcss'; -import resolve from 'rollup-plugin-node-resolve'; -import url from 'rollup-plugin-url'; -import pkg from './package.json'; -// Deal with https://github.com/rollup/rollup-plugin-commonjs/issues/297 -import builtins from 'rollup-plugin-node-builtins'; - -const globals = { - react: 'React', - 'react-resize-detector': 'ReactResizeDetector', - 'react-dom': 'ReactDOM', - 'ohif-core': 'OHIF' -}; - -export default { - input: 'src/index.js', - output: [ - { - file: pkg.main, - format: 'umd', - name: 'ohif-dicom-microscopy-extension', - sourcemap: true, - globals - }, - { - file: pkg.module, - format: 'es', - sourcemap: true, - globals - } - ], - plugins: [ - builtins(), - external(), - postcss({ - modules: false - }), - url(), - babel({ - exclude: 'node_modules/**', - plugins: ['@babel/external-helpers'], - externalHelpers: true, - runtimeHelpers: true - }), - resolve(), - commonjs({ - namedExports: { - 'node_modules/dicom-microscopy-viewer/build/dicom-microscopy-viewer.js': [ - 'api' - ], - '.yalc/dicom-microscopy-viewer/build/dicom-microscopy-viewer.js': [ - 'api' - ], - 'node_modules/react-resize-detector/node_modules/prop-types/index.js': [ - 'bool', - 'number', - 'string', - 'shape', - 'func', - 'any', - 'node' - ] - } - }) - ], - external: Object.keys(pkg.peerDependencies || {}) -}; diff --git a/extensions/ohif-dicom-microscopy-extension/yarn.lock b/extensions/ohif-dicom-microscopy-extension/yarn.lock deleted file mode 100644 index 5e0230ccdbc..00000000000 --- a/extensions/ohif-dicom-microscopy-extension/yarn.lock +++ /dev/null @@ -1,5546 +0,0 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -"@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" - dependencies: - "@babel/highlight" "^7.0.0" - -"@babel/core@^7.1.2": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.2.0.tgz#a4dd3814901998e93340f0086e9867fefa163ada" - dependencies: - "@babel/code-frame" "^7.0.0" - "@babel/generator" "^7.2.0" - "@babel/helpers" "^7.2.0" - "@babel/parser" "^7.2.0" - "@babel/template" "^7.1.2" - "@babel/traverse" "^7.1.6" - "@babel/types" "^7.2.0" - convert-source-map "^1.1.0" - debug "^4.1.0" - json5 "^2.1.0" - lodash "^4.17.10" - resolve "^1.3.2" - semver "^5.4.1" - source-map "^0.5.0" - -"@babel/core@^7.2.2": - version "7.2.2" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.2.2.tgz#07adba6dde27bb5ad8d8672f15fde3e08184a687" - dependencies: - "@babel/code-frame" "^7.0.0" - "@babel/generator" "^7.2.2" - "@babel/helpers" "^7.2.0" - "@babel/parser" "^7.2.2" - "@babel/template" "^7.2.2" - "@babel/traverse" "^7.2.2" - "@babel/types" "^7.2.2" - convert-source-map "^1.1.0" - debug "^4.1.0" - json5 "^2.1.0" - lodash "^4.17.10" - resolve "^1.3.2" - semver "^5.4.1" - source-map "^0.5.0" - -"@babel/generator@^7.1.6", "@babel/generator@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.2.0.tgz#eaf3821fa0301d9d4aef88e63d4bcc19b73ba16c" - dependencies: - "@babel/types" "^7.2.0" - jsesc "^2.5.1" - lodash "^4.17.10" - source-map "^0.5.0" - trim-right "^1.0.1" - -"@babel/generator@^7.2.2": - version "7.2.2" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.2.2.tgz#18c816c70962640eab42fe8cae5f3947a5c65ccc" - dependencies: - "@babel/types" "^7.2.2" - jsesc "^2.5.1" - lodash "^4.17.10" - source-map "^0.5.0" - trim-right "^1.0.1" - -"@babel/helper-annotate-as-pure@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.0.0.tgz#323d39dd0b50e10c7c06ca7d7638e6864d8c5c32" - dependencies: - "@babel/types" "^7.0.0" - -"@babel/helper-builder-binary-assignment-operator-visitor@^7.1.0": - version "7.1.0" - resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.1.0.tgz#6b69628dfe4087798e0c4ed98e3d4a6b2fbd2f5f" - dependencies: - "@babel/helper-explode-assignable-expression" "^7.1.0" - "@babel/types" "^7.0.0" - -"@babel/helper-builder-react-jsx@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/helper-builder-react-jsx/-/helper-builder-react-jsx-7.0.0.tgz#fa154cb53eb918cf2a9a7ce928e29eb649c5acdb" - dependencies: - "@babel/types" "^7.0.0" - esutils "^2.0.0" - -"@babel/helper-call-delegate@^7.1.0": - version "7.1.0" - resolved "https://registry.yarnpkg.com/@babel/helper-call-delegate/-/helper-call-delegate-7.1.0.tgz#6a957f105f37755e8645343d3038a22e1449cc4a" - dependencies: - "@babel/helper-hoist-variables" "^7.0.0" - "@babel/traverse" "^7.1.0" - "@babel/types" "^7.0.0" - -"@babel/helper-create-class-features-plugin@^7.2.3": - version "7.2.3" - resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.2.3.tgz#f6e719abb90cb7f4a69591e35fd5eb89047c4a7c" - dependencies: - "@babel/helper-function-name" "^7.1.0" - "@babel/helper-member-expression-to-functions" "^7.0.0" - "@babel/helper-optimise-call-expression" "^7.0.0" - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-replace-supers" "^7.2.3" - -"@babel/helper-define-map@^7.1.0": - version "7.1.0" - resolved "https://registry.yarnpkg.com/@babel/helper-define-map/-/helper-define-map-7.1.0.tgz#3b74caec329b3c80c116290887c0dd9ae468c20c" - dependencies: - "@babel/helper-function-name" "^7.1.0" - "@babel/types" "^7.0.0" - lodash "^4.17.10" - -"@babel/helper-explode-assignable-expression@^7.1.0": - version "7.1.0" - resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.1.0.tgz#537fa13f6f1674df745b0c00ec8fe4e99681c8f6" - dependencies: - "@babel/traverse" "^7.1.0" - "@babel/types" "^7.0.0" - -"@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" - dependencies: - "@babel/helper-get-function-arity" "^7.0.0" - "@babel/template" "^7.1.0" - "@babel/types" "^7.0.0" - -"@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" - dependencies: - "@babel/types" "^7.0.0" - -"@babel/helper-hoist-variables@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.0.0.tgz#46adc4c5e758645ae7a45deb92bab0918c23bb88" - dependencies: - "@babel/types" "^7.0.0" - -"@babel/helper-member-expression-to-functions@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.0.0.tgz#8cd14b0a0df7ff00f009e7d7a436945f47c7a16f" - dependencies: - "@babel/types" "^7.0.0" - -"@babel/helper-module-imports@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.0.0.tgz#96081b7111e486da4d2cd971ad1a4fe216cc2e3d" - dependencies: - "@babel/types" "^7.0.0" - -"@babel/helper-module-transforms@^7.1.0": - version "7.1.0" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.1.0.tgz#470d4f9676d9fad50b324cdcce5fbabbc3da5787" - dependencies: - "@babel/helper-module-imports" "^7.0.0" - "@babel/helper-simple-access" "^7.1.0" - "@babel/helper-split-export-declaration" "^7.0.0" - "@babel/template" "^7.1.0" - "@babel/types" "^7.0.0" - lodash "^4.17.10" - -"@babel/helper-optimise-call-expression@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.0.0.tgz#a2920c5702b073c15de51106200aa8cad20497d5" - 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" - -"@babel/helper-regex@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/helper-regex/-/helper-regex-7.0.0.tgz#2c1718923b57f9bbe64705ffe5640ac64d9bdb27" - dependencies: - lodash "^4.17.10" - -"@babel/helper-remap-async-to-generator@^7.1.0": - version "7.1.0" - resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.1.0.tgz#361d80821b6f38da75bd3f0785ece20a88c5fe7f" - dependencies: - "@babel/helper-annotate-as-pure" "^7.0.0" - "@babel/helper-wrap-function" "^7.1.0" - "@babel/template" "^7.1.0" - "@babel/traverse" "^7.1.0" - "@babel/types" "^7.0.0" - -"@babel/helper-replace-supers@^7.1.0": - version "7.1.0" - resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.1.0.tgz#5fc31de522ec0ef0899dc9b3e7cf6a5dd655f362" - dependencies: - "@babel/helper-member-expression-to-functions" "^7.0.0" - "@babel/helper-optimise-call-expression" "^7.0.0" - "@babel/traverse" "^7.1.0" - "@babel/types" "^7.0.0" - -"@babel/helper-replace-supers@^7.2.3": - version "7.2.3" - resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.2.3.tgz#19970020cf22677d62b3a689561dbd9644d8c5e5" - dependencies: - "@babel/helper-member-expression-to-functions" "^7.0.0" - "@babel/helper-optimise-call-expression" "^7.0.0" - "@babel/traverse" "^7.2.3" - "@babel/types" "^7.0.0" - -"@babel/helper-simple-access@^7.1.0": - version "7.1.0" - resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.1.0.tgz#65eeb954c8c245beaa4e859da6188f39d71e585c" - dependencies: - "@babel/template" "^7.1.0" - "@babel/types" "^7.0.0" - -"@babel/helper-split-export-declaration@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.0.0.tgz#3aae285c0311c2ab095d997b8c9a94cad547d813" - dependencies: - "@babel/types" "^7.0.0" - -"@babel/helper-wrap-function@^7.1.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.2.0.tgz#c4e0012445769e2815b55296ead43a958549f6fa" - dependencies: - "@babel/helper-function-name" "^7.1.0" - "@babel/template" "^7.1.0" - "@babel/traverse" "^7.1.0" - "@babel/types" "^7.2.0" - -"@babel/helpers@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.2.0.tgz#8335f3140f3144270dc63c4732a4f8b0a50b7a21" - dependencies: - "@babel/template" "^7.1.2" - "@babel/traverse" "^7.1.5" - "@babel/types" "^7.2.0" - -"@babel/highlight@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.0.0.tgz#f710c38c8d458e6dd9a201afb637fcb781ce99e4" - dependencies: - chalk "^2.0.0" - esutils "^2.0.2" - js-tokens "^4.0.0" - -"@babel/parser@^7.0.0", "@babel/parser@^7.1.2", "@babel/parser@^7.1.6", "@babel/parser@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.2.0.tgz#02d01dbc330b6cbf36b76ac93c50752c69027065" - -"@babel/parser@^7.2.2", "@babel/parser@^7.2.3": - version "7.2.3" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.2.3.tgz#32f5df65744b70888d17872ec106b02434ba1489" - -"@babel/plugin-external-helpers@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-external-helpers/-/plugin-external-helpers-7.2.0.tgz#7f4cb7dee651cd380d2034847d914288467a6be4" - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-proposal-async-generator-functions@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.2.0.tgz#b289b306669dce4ad20b0252889a15768c9d417e" - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-remap-async-to-generator" "^7.1.0" - "@babel/plugin-syntax-async-generators" "^7.2.0" - -"@babel/plugin-proposal-class-properties@^7.2.3": - version "7.2.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.2.3.tgz#c9e1294363b346cff333007a92080f3203698461" - dependencies: - "@babel/helper-create-class-features-plugin" "^7.2.3" - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-proposal-json-strings@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.2.0.tgz#568ecc446c6148ae6b267f02551130891e29f317" - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-syntax-json-strings" "^7.2.0" - -"@babel/plugin-proposal-object-rest-spread@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.2.0.tgz#88f5fec3e7ad019014c97f7ee3c992f0adbf7fb8" - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-syntax-object-rest-spread" "^7.2.0" - -"@babel/plugin-proposal-optional-catch-binding@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.2.0.tgz#135d81edb68a081e55e56ec48541ece8065c38f5" - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-syntax-optional-catch-binding" "^7.2.0" - -"@babel/plugin-proposal-unicode-property-regex@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.2.0.tgz#abe7281fe46c95ddc143a65e5358647792039520" - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-regex" "^7.0.0" - regexpu-core "^4.2.0" - -"@babel/plugin-syntax-async-generators@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.2.0.tgz#69e1f0db34c6f5a0cf7e2b3323bf159a76c8cb7f" - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-syntax-json-strings@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.2.0.tgz#72bd13f6ffe1d25938129d2a186b11fd62951470" - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-syntax-jsx@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.2.0.tgz#0b85a3b4bc7cdf4cc4b8bf236335b907ca22e7c7" - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-syntax-object-rest-spread@^7.2.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" - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-syntax-optional-catch-binding@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.2.0.tgz#a94013d6eda8908dfe6a477e7f9eda85656ecf5c" - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-arrow-functions@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.2.0.tgz#9aeafbe4d6ffc6563bf8f8372091628f00779550" - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-async-to-generator@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.2.0.tgz#68b8a438663e88519e65b776f8938f3445b1a2ff" - dependencies: - "@babel/helper-module-imports" "^7.0.0" - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-remap-async-to-generator" "^7.1.0" - -"@babel/plugin-transform-block-scoped-functions@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.2.0.tgz#5d3cc11e8d5ddd752aa64c9148d0db6cb79fd190" - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-block-scoping@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.2.0.tgz#f17c49d91eedbcdf5dd50597d16f5f2f770132d4" - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - lodash "^4.17.10" - -"@babel/plugin-transform-classes@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.2.0.tgz#374f8876075d7d21fea55aeb5c53561259163f96" - dependencies: - "@babel/helper-annotate-as-pure" "^7.0.0" - "@babel/helper-define-map" "^7.1.0" - "@babel/helper-function-name" "^7.1.0" - "@babel/helper-optimise-call-expression" "^7.0.0" - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-replace-supers" "^7.1.0" - "@babel/helper-split-export-declaration" "^7.0.0" - globals "^11.1.0" - -"@babel/plugin-transform-computed-properties@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.2.0.tgz#83a7df6a658865b1c8f641d510c6f3af220216da" - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-destructuring@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.2.0.tgz#e75269b4b7889ec3a332cd0d0c8cff8fed0dc6f3" - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-dotall-regex@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.2.0.tgz#f0aabb93d120a8ac61e925ea0ba440812dbe0e49" - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-regex" "^7.0.0" - regexpu-core "^4.1.3" - -"@babel/plugin-transform-duplicate-keys@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.2.0.tgz#d952c4930f312a4dbfff18f0b2914e60c35530b3" - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-exponentiation-operator@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.2.0.tgz#a63868289e5b4007f7054d46491af51435766008" - dependencies: - "@babel/helper-builder-binary-assignment-operator-visitor" "^7.1.0" - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-for-of@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.2.0.tgz#ab7468befa80f764bb03d3cb5eef8cc998e1cad9" - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-function-name@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.2.0.tgz#f7930362829ff99a3174c39f0afcc024ef59731a" - dependencies: - "@babel/helper-function-name" "^7.1.0" - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-literals@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.2.0.tgz#690353e81f9267dad4fd8cfd77eafa86aba53ea1" - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-modules-amd@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.2.0.tgz#82a9bce45b95441f617a24011dc89d12da7f4ee6" - dependencies: - "@babel/helper-module-transforms" "^7.1.0" - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-modules-commonjs@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.2.0.tgz#c4f1933f5991d5145e9cfad1dfd848ea1727f404" - dependencies: - "@babel/helper-module-transforms" "^7.1.0" - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-simple-access" "^7.1.0" - -"@babel/plugin-transform-modules-systemjs@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.2.0.tgz#912bfe9e5ff982924c81d0937c92d24994bb9068" - dependencies: - "@babel/helper-hoist-variables" "^7.0.0" - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-modules-umd@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.2.0.tgz#7678ce75169f0877b8eb2235538c074268dd01ae" - dependencies: - "@babel/helper-module-transforms" "^7.1.0" - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-new-target@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.0.0.tgz#ae8fbd89517fa7892d20e6564e641e8770c3aa4a" - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-object-super@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.2.0.tgz#b35d4c10f56bab5d650047dad0f1d8e8814b6598" - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-replace-supers" "^7.1.0" - -"@babel/plugin-transform-parameters@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.2.0.tgz#0d5ad15dc805e2ea866df4dd6682bfe76d1408c2" - dependencies: - "@babel/helper-call-delegate" "^7.1.0" - "@babel/helper-get-function-arity" "^7.0.0" - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-react-display-name@^7.0.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.2.0.tgz#ebfaed87834ce8dc4279609a4f0c324c156e3eb0" - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-react-jsx-self@^7.0.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.2.0.tgz#461e21ad9478f1031dd5e276108d027f1b5240ba" - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-syntax-jsx" "^7.2.0" - -"@babel/plugin-transform-react-jsx-source@^7.0.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.2.0.tgz#20c8c60f0140f5dd3cd63418d452801cf3f7180f" - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-syntax-jsx" "^7.2.0" - -"@babel/plugin-transform-react-jsx@^7.0.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.2.0.tgz#ca36b6561c4d3b45524f8efb6f0fbc9a0d1d622f" - dependencies: - "@babel/helper-builder-react-jsx" "^7.0.0" - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-syntax-jsx" "^7.2.0" - -"@babel/plugin-transform-regenerator@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.0.0.tgz#5b41686b4ed40bef874d7ed6a84bdd849c13e0c1" - dependencies: - regenerator-transform "^0.13.3" - -"@babel/plugin-transform-runtime@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.2.0.tgz#566bc43f7d0aedc880eaddbd29168d0f248966ea" - integrity sha512-jIgkljDdq4RYDnJyQsiWbdvGeei/0MOTtSHKO/rfbd/mXBxNpdlulMx49L0HQ4pug1fXannxoqCI+fYSle9eSw== - dependencies: - "@babel/helper-module-imports" "^7.0.0" - "@babel/helper-plugin-utils" "^7.0.0" - resolve "^1.8.1" - semver "^5.5.1" - -"@babel/plugin-transform-shorthand-properties@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.2.0.tgz#6333aee2f8d6ee7e28615457298934a3b46198f0" - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-spread@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.2.0.tgz#0c76c12a3b5826130078ee8ec84a7a8e4afd79c4" - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-sticky-regex@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.2.0.tgz#a1e454b5995560a9c1e0d537dfc15061fd2687e1" - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-regex" "^7.0.0" - -"@babel/plugin-transform-template-literals@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.2.0.tgz#d87ed01b8eaac7a92473f608c97c089de2ba1e5b" - dependencies: - "@babel/helper-annotate-as-pure" "^7.0.0" - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-typeof-symbol@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.2.0.tgz#117d2bcec2fbf64b4b59d1f9819894682d29f2b2" - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-unicode-regex@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.2.0.tgz#4eb8db16f972f8abb5062c161b8b115546ade08b" - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-regex" "^7.0.0" - regexpu-core "^4.1.3" - -"@babel/preset-env@^7.2.3": - version "7.2.3" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.2.3.tgz#948c8df4d4609c99c7e0130169f052ea6a7a8933" - dependencies: - "@babel/helper-module-imports" "^7.0.0" - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-proposal-async-generator-functions" "^7.2.0" - "@babel/plugin-proposal-json-strings" "^7.2.0" - "@babel/plugin-proposal-object-rest-spread" "^7.2.0" - "@babel/plugin-proposal-optional-catch-binding" "^7.2.0" - "@babel/plugin-proposal-unicode-property-regex" "^7.2.0" - "@babel/plugin-syntax-async-generators" "^7.2.0" - "@babel/plugin-syntax-object-rest-spread" "^7.2.0" - "@babel/plugin-syntax-optional-catch-binding" "^7.2.0" - "@babel/plugin-transform-arrow-functions" "^7.2.0" - "@babel/plugin-transform-async-to-generator" "^7.2.0" - "@babel/plugin-transform-block-scoped-functions" "^7.2.0" - "@babel/plugin-transform-block-scoping" "^7.2.0" - "@babel/plugin-transform-classes" "^7.2.0" - "@babel/plugin-transform-computed-properties" "^7.2.0" - "@babel/plugin-transform-destructuring" "^7.2.0" - "@babel/plugin-transform-dotall-regex" "^7.2.0" - "@babel/plugin-transform-duplicate-keys" "^7.2.0" - "@babel/plugin-transform-exponentiation-operator" "^7.2.0" - "@babel/plugin-transform-for-of" "^7.2.0" - "@babel/plugin-transform-function-name" "^7.2.0" - "@babel/plugin-transform-literals" "^7.2.0" - "@babel/plugin-transform-modules-amd" "^7.2.0" - "@babel/plugin-transform-modules-commonjs" "^7.2.0" - "@babel/plugin-transform-modules-systemjs" "^7.2.0" - "@babel/plugin-transform-modules-umd" "^7.2.0" - "@babel/plugin-transform-new-target" "^7.0.0" - "@babel/plugin-transform-object-super" "^7.2.0" - "@babel/plugin-transform-parameters" "^7.2.0" - "@babel/plugin-transform-regenerator" "^7.0.0" - "@babel/plugin-transform-shorthand-properties" "^7.2.0" - "@babel/plugin-transform-spread" "^7.2.0" - "@babel/plugin-transform-sticky-regex" "^7.2.0" - "@babel/plugin-transform-template-literals" "^7.2.0" - "@babel/plugin-transform-typeof-symbol" "^7.2.0" - "@babel/plugin-transform-unicode-regex" "^7.2.0" - browserslist "^4.3.4" - invariant "^2.2.2" - js-levenshtein "^1.1.3" - semver "^5.3.0" - -"@babel/preset-react@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.0.0.tgz#e86b4b3d99433c7b3e9e91747e2653958bc6b3c0" - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-transform-react-display-name" "^7.0.0" - "@babel/plugin-transform-react-jsx" "^7.0.0" - "@babel/plugin-transform-react-jsx-self" "^7.0.0" - "@babel/plugin-transform-react-jsx-source" "^7.0.0" - -"@babel/runtime@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.2.0.tgz#b03e42eeddf5898e00646e4c840fa07ba8dcad7f" - dependencies: - regenerator-runtime "^0.12.0" - -"@babel/template@^7.1.0", "@babel/template@^7.1.2": - version "7.1.2" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.1.2.tgz#090484a574fef5a2d2d7726a674eceda5c5b5644" - dependencies: - "@babel/code-frame" "^7.0.0" - "@babel/parser" "^7.1.2" - "@babel/types" "^7.1.2" - -"@babel/template@^7.2.2": - version "7.2.2" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.2.2.tgz#005b3fdf0ed96e88041330379e0da9a708eb2907" - dependencies: - "@babel/code-frame" "^7.0.0" - "@babel/parser" "^7.2.2" - "@babel/types" "^7.2.2" - -"@babel/traverse@^7.0.0", "@babel/traverse@^7.1.0", "@babel/traverse@^7.1.5", "@babel/traverse@^7.1.6": - version "7.1.6" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.1.6.tgz#c8db9963ab4ce5b894222435482bd8ea854b7b5c" - dependencies: - "@babel/code-frame" "^7.0.0" - "@babel/generator" "^7.1.6" - "@babel/helper-function-name" "^7.1.0" - "@babel/helper-split-export-declaration" "^7.0.0" - "@babel/parser" "^7.1.6" - "@babel/types" "^7.1.6" - debug "^4.1.0" - globals "^11.1.0" - lodash "^4.17.10" - -"@babel/traverse@^7.2.2", "@babel/traverse@^7.2.3": - version "7.2.3" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.2.3.tgz#7ff50cefa9c7c0bd2d81231fdac122f3957748d8" - dependencies: - "@babel/code-frame" "^7.0.0" - "@babel/generator" "^7.2.2" - "@babel/helper-function-name" "^7.1.0" - "@babel/helper-split-export-declaration" "^7.0.0" - "@babel/parser" "^7.2.3" - "@babel/types" "^7.2.2" - debug "^4.1.0" - globals "^11.1.0" - lodash "^4.17.10" - -"@babel/types@^7.0.0", "@babel/types@^7.1.2", "@babel/types@^7.1.6", "@babel/types@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.2.0.tgz#7941c5b2d8060e06f9601d6be7c223eef906d5d8" - dependencies: - esutils "^2.0.2" - lodash "^4.17.10" - to-fast-properties "^2.0.0" - -"@babel/types@^7.2.2": - version "7.2.2" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.2.2.tgz#44e10fc24e33af524488b716cdaee5360ea8ed1e" - dependencies: - esutils "^2.0.2" - lodash "^4.17.10" - to-fast-properties "^2.0.0" - -"@iamstarkov/listr-update-renderer@0.4.1": - version "0.4.1" - resolved "https://registry.yarnpkg.com/@iamstarkov/listr-update-renderer/-/listr-update-renderer-0.4.1.tgz#d7c48092a2dcf90fd672b6c8b458649cb350c77e" - dependencies: - chalk "^1.1.3" - cli-truncate "^0.2.1" - elegant-spinner "^1.0.1" - figures "^1.7.0" - indent-string "^3.0.0" - log-symbols "^1.0.2" - log-update "^2.3.0" - strip-ansi "^3.0.1" - -"@mrmlnc/readdir-enhanced@^2.2.1": - version "2.2.1" - resolved "https://registry.yarnpkg.com/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz#524af240d1a360527b730475ecfa1344aa540dde" - dependencies: - call-me-maybe "^1.0.1" - glob-to-regexp "^0.3.0" - -"@nodelib/fs.stat@^1.1.2": - version "1.1.3" - resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz#2b5a3ab3f918cca48a8c754c08168e3f03eba61b" - -"@samverschueren/stream-to-observable@^0.3.0": - version "0.3.0" - resolved "https://registry.yarnpkg.com/@samverschueren/stream-to-observable/-/stream-to-observable-0.3.0.tgz#ecdf48d532c58ea477acfcab80348424f8d0662f" - dependencies: - any-observable "^0.3.0" - -"@types/estree@0.0.39": - version "0.0.39" - resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.39.tgz#e177e699ee1b8c22d23174caaa7422644389509f" - -"@types/node@*": - version "10.12.12" - resolved "https://registry.yarnpkg.com/@types/node/-/node-10.12.12.tgz#e15a9d034d9210f00320ef718a50c4a799417c47" - -abstract-leveldown@~0.12.0, abstract-leveldown@~0.12.1: - version "0.12.4" - resolved "https://registry.yarnpkg.com/abstract-leveldown/-/abstract-leveldown-0.12.4.tgz#29e18e632e60e4e221d5810247852a63d7b2e410" - dependencies: - xtend "~3.0.0" - -acorn-jsx@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.0.1.tgz#32a064fd925429216a09b141102bfdd185fae40e" - -acorn@^6.0.2: - version "6.0.4" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.0.4.tgz#77377e7353b72ec5104550aa2d2097a2fd40b754" - -ajv-keywords@^3.0.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.2.0.tgz#e86b819c602cf8821ad637413698f1dec021847a" - -ajv@^6.0.1, ajv@^6.5.3, ajv@^6.6.1: - version "6.6.1" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.6.1.tgz#6360f5ed0d80f232cc2b294c362d5dc2e538dd61" - dependencies: - fast-deep-equal "^2.0.1" - fast-json-stable-stringify "^2.0.0" - json-schema-traverse "^0.4.1" - uri-js "^4.2.2" - -alphanum-sort@^1.0.1, alphanum-sort@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/alphanum-sort/-/alphanum-sort-1.0.2.tgz#97a1119649b211ad33691d9f9f486a8ec9fbe0a3" - -amdefine@>=0.0.4: - version "1.0.1" - resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5" - -ansi-escapes@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.1.0.tgz#f73207bb81207d75fd6c83f125af26eea378ca30" - -ansi-regex@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" - -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: - version "4.0.0" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.0.0.tgz#70de791edf021404c3fd615aa89118ae0432e5a9" - -ansi-styles@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" - -ansi-styles@^3.2.0, ansi-styles@^3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" - dependencies: - color-convert "^1.9.0" - -any-observable@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/any-observable/-/any-observable-0.3.0.tgz#af933475e5806a67d0d7df090dd5e8bef65d119b" - -argparse@^1.0.7: - version "1.0.10" - resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" - dependencies: - sprintf-js "~1.0.2" - -arr-diff@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-2.0.0.tgz#8f3b827f955a8bd669697e4a4256ac3ceae356cf" - dependencies: - arr-flatten "^1.0.1" - -arr-diff@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" - -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@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" - -array-find-index@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1" - -array-includes@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.0.3.tgz#184b48f62d92d7452bb31b323165c7f8bd02266d" - dependencies: - define-properties "^1.1.2" - es-abstract "^1.7.0" - -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: - 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" - -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.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" - dependencies: - bn.js "^4.0.0" - inherits "^2.0.1" - minimalistic-assert "^1.0.0" - -assign-symbols@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" - -astral-regex@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9" - -async@^2.6.1: - version "2.6.1" - resolved "https://registry.yarnpkg.com/async/-/async-2.6.1.tgz#b245a23ca71930044ec53fa46aa00a3e87c6a610" - dependencies: - lodash "^4.17.10" - -atob@^2.1.1: - version "2.1.2" - resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" - -autoprefixer@^6.3.1: - version "6.7.7" - resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-6.7.7.tgz#1dbd1c835658e35ce3f9984099db00585c782014" - dependencies: - browserslist "^1.7.6" - caniuse-db "^1.0.30000634" - normalize-range "^0.1.2" - num2fraction "^1.2.2" - postcss "^5.2.16" - postcss-value-parser "^3.2.3" - -autoprefixer@^9.0.0: - version "9.4.2" - resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-9.4.2.tgz#0234d20900684fc4bfb67926493deb68384067f5" - dependencies: - browserslist "^4.3.5" - caniuse-lite "^1.0.30000914" - normalize-range "^0.1.2" - num2fraction "^1.2.2" - postcss "^7.0.6" - postcss-value-parser "^3.3.1" - -babel-eslint@^9.0.0: - version "9.0.0" - resolved "https://registry.yarnpkg.com/babel-eslint/-/babel-eslint-9.0.0.tgz#7d9445f81ed9f60aff38115f838970df9f2b6220" - dependencies: - "@babel/code-frame" "^7.0.0" - "@babel/parser" "^7.0.0" - "@babel/traverse" "^7.0.0" - "@babel/types" "^7.0.0" - eslint-scope "3.7.1" - eslint-visitor-keys "^1.0.0" - -bail@^1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/bail/-/bail-1.0.3.tgz#63cfb9ddbac829b02a3128cd53224be78e6c21a3" - -balanced-match@^0.4.2: - version "0.4.2" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-0.4.2.tgz#cb3f3e3c732dc0f01ee70b403f302e61d7709838" - -balanced-match@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" - -base@^0.11.1: - version "0.11.2" - resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" - dependencies: - cache-base "^1.0.1" - class-utils "^0.3.5" - component-emitter "^1.2.1" - define-property "^1.0.0" - isobject "^3.0.1" - mixin-deep "^1.2.0" - pascalcase "^0.1.1" - -big.js@^3.1.3: - version "3.2.0" - resolved "https://registry.yarnpkg.com/big.js/-/big.js-3.2.0.tgz#a5fc298b81b9e0dca2e458824784b65c52ba588e" - -bl@~0.8.1: - version "0.8.2" - resolved "https://registry.yarnpkg.com/bl/-/bl-0.8.2.tgz#c9b6bca08d1bc2ea00fc8afb4f1a5fd1e1c66e4e" - dependencies: - readable-stream "~1.0.26" - -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" - -brace-expansion@^1.1.7: - version "1.1.11" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" - dependencies: - balanced-match "^1.0.0" - concat-map "0.0.1" - -braces@^1.8.2: - version "1.8.5" - resolved "https://registry.yarnpkg.com/braces/-/braces-1.8.5.tgz#ba77962e12dff969d6b76711e914b737857bf6a7" - dependencies: - expand-range "^1.8.1" - preserve "^0.2.0" - repeat-element "^1.1.2" - -braces@^2.3.1: - version "2.3.2" - resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" - 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" - -brorand@^1.0.1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" - -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" - 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" - 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" - dependencies: - cipher-base "^1.0.1" - des.js "^1.0.0" - inherits "^2.0.1" - safe-buffer "^5.1.2" - -browserify-fs@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/browserify-fs/-/browserify-fs-1.0.0.tgz#f075aa8a729d4d1716d066620e386fcc1311a96f" - dependencies: - level-filesystem "^1.0.1" - level-js "^2.1.3" - levelup "^0.18.2" - -browserify-rsa@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.0.1.tgz#21e0abfaf6f2029cf2fafb133567a701d4135524" - 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" - 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" - -browserslist@^1.3.6, browserslist@^1.5.2, browserslist@^1.7.6: - version "1.7.7" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-1.7.7.tgz#0bd76704258be829b2398bb50e4b62d1a166b0b9" - dependencies: - caniuse-db "^1.0.30000639" - electron-to-chromium "^1.2.7" - -browserslist@^4.3.4, browserslist@^4.3.5: - version "4.3.5" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.3.5.tgz#1a917678acc07b55606748ea1adf9846ea8920f7" - dependencies: - caniuse-lite "^1.0.30000912" - electron-to-chromium "^1.3.86" - node-releases "^1.0.5" - -buffer-es6@^4.9.2: - version "4.9.3" - resolved "https://registry.yarnpkg.com/buffer-es6/-/buffer-es6-4.9.3.tgz#f26347b82df76fd37e18bcb5288c4970cfd5c404" - -buffer-from@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" - -buffer-xor@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" - -builtin-modules@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" - -builtin-modules@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-3.0.0.tgz#1e587d44b006620d90286cc7a9238bbc6129cab1" - -cache-base@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" - dependencies: - collection-visit "^1.0.0" - component-emitter "^1.2.1" - get-value "^2.0.6" - has-value "^1.0.0" - isobject "^3.0.1" - set-value "^2.0.0" - to-object-path "^0.3.0" - union-value "^1.0.0" - unset-value "^1.0.0" - -call-me-maybe@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/call-me-maybe/-/call-me-maybe-1.0.1.tgz#26d208ea89e37b5cbde60250a15f031c16a4d66b" - -caller-callsite@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/caller-callsite/-/caller-callsite-2.0.0.tgz#847e0fce0a223750a9a027c54b33731ad3154134" - dependencies: - callsites "^2.0.0" - -caller-path@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-0.1.0.tgz#94085ef63581ecd3daa92444a8fe94e82577751f" - dependencies: - callsites "^0.2.0" - -caller-path@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-2.0.0.tgz#468f83044e369ab2010fac5f06ceee15bb2cb1f4" - dependencies: - caller-callsite "^2.0.0" - -callsites@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/callsites/-/callsites-0.2.0.tgz#afab96262910a7f33c19a5775825c69f34e350ca" - -callsites@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/callsites/-/callsites-2.0.0.tgz#06eb84f00eea413da86affefacbffb36093b3c50" - -camelcase-keys@^4.0.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-4.2.0.tgz#a2aa5fb1af688758259c32c141426d78923b9b77" - dependencies: - camelcase "^4.1.0" - map-obj "^2.0.0" - quick-lru "^1.0.0" - -camelcase@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd" - -caniuse-api@^1.5.2: - version "1.6.1" - resolved "https://registry.yarnpkg.com/caniuse-api/-/caniuse-api-1.6.1.tgz#b534e7c734c4f81ec5fbe8aca2ad24354b962c6c" - dependencies: - browserslist "^1.3.6" - caniuse-db "^1.0.30000529" - lodash.memoize "^4.1.2" - lodash.uniq "^4.5.0" - -caniuse-db@^1.0.30000529, caniuse-db@^1.0.30000634, caniuse-db@^1.0.30000639: - version "1.0.30000918" - resolved "https://registry.yarnpkg.com/caniuse-db/-/caniuse-db-1.0.30000918.tgz#650a34372ced440a79fa600644667802c6a4b9c2" - -caniuse-lite@^1.0.30000912, caniuse-lite@^1.0.30000914: - version "1.0.30000918" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000918.tgz#6288f79da3c5c8b45e502f47ad8f3eb91f1379a9" - -ccount@^1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/ccount/-/ccount-1.0.3.tgz#f1cec43f332e2ea5a569fd46f9f5bde4e6102aff" - -chalk@^1.0.0, chalk@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" - dependencies: - ansi-styles "^2.2.1" - escape-string-regexp "^1.0.2" - has-ansi "^2.0.0" - strip-ansi "^3.0.0" - supports-color "^2.0.0" - -chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.3.1, chalk@^2.4.1: - version "2.4.1" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.1.tgz#18c49ab16a037b6eb0152cc83e3471338215b66e" - dependencies: - ansi-styles "^3.2.1" - escape-string-regexp "^1.0.5" - supports-color "^5.3.0" - -character-entities-html4@^1.0.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/character-entities-html4/-/character-entities-html4-1.1.2.tgz#c44fdde3ce66b52e8d321d6c1bf46101f0150610" - -character-entities-legacy@^1.0.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/character-entities-legacy/-/character-entities-legacy-1.1.2.tgz#7c6defb81648498222c9855309953d05f4d63a9c" - -character-entities@^1.0.0: - version "1.2.2" - resolved "https://registry.yarnpkg.com/character-entities/-/character-entities-1.2.2.tgz#58c8f371c0774ef0ba9b2aca5f00d8f100e6e363" - -character-reference-invalid@^1.0.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/character-reference-invalid/-/character-reference-invalid-1.1.2.tgz#21e421ad3d84055952dab4a43a04e73cd425d3ed" - -chardet@^0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" - -ci-info@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" - -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" - dependencies: - inherits "^2.0.1" - safe-buffer "^5.0.1" - -circular-json@^0.3.1: - version "0.3.3" - resolved "https://registry.yarnpkg.com/circular-json/-/circular-json-0.3.3.tgz#815c99ea84f6809529d2f45791bdf82711352d66" - -clap@^1.0.9: - version "1.2.3" - resolved "https://registry.yarnpkg.com/clap/-/clap-1.2.3.tgz#4f36745b32008492557f46412d66d50cb99bce51" - dependencies: - chalk "^1.1.3" - -class-utils@^0.3.5: - version "0.3.6" - resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" - dependencies: - arr-union "^3.1.0" - define-property "^0.2.5" - isobject "^3.0.0" - static-extend "^0.1.1" - -classnames@^2.2.6: - version "2.2.6" - resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.2.6.tgz#43935bffdd291f326dad0a205309b38d00f650ce" - -cli-cursor@^2.0.0, cli-cursor@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5" - dependencies: - restore-cursor "^2.0.0" - -cli-truncate@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-0.2.1.tgz#9f15cfbb0705005369216c626ac7d05ab90dd574" - dependencies: - slice-ansi "0.0.4" - string-width "^1.0.1" - -cli-width@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.0.tgz#ff19ede8a9a5e579324147b0c11f0fbcbabed639" - -clone-regexp@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/clone-regexp/-/clone-regexp-1.0.1.tgz#051805cd33173375d82118fc0918606da39fd60f" - dependencies: - is-regexp "^1.0.0" - is-supported-regexp-flag "^1.0.0" - -clone@^1.0.2: - version "1.0.4" - resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" - -clone@~0.1.9: - version "0.1.19" - resolved "https://registry.yarnpkg.com/clone/-/clone-0.1.19.tgz#613fb68639b26a494ac53253e15b1a6bd88ada85" - -coa@~1.0.1: - version "1.0.4" - resolved "https://registry.yarnpkg.com/coa/-/coa-1.0.4.tgz#a9ef153660d6a86a8bdec0289a5c684d217432fd" - dependencies: - q "^1.1.2" - -code-point-at@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" - -collapse-white-space@^1.0.2: - version "1.0.4" - resolved "https://registry.yarnpkg.com/collapse-white-space/-/collapse-white-space-1.0.4.tgz#ce05cf49e54c3277ae573036a26851ba430a0091" - -collection-visit@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" - dependencies: - map-visit "^1.0.0" - object-visit "^1.0.0" - -color-convert@^1.3.0, color-convert@^1.9.0: - version "1.9.3" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" - dependencies: - color-name "1.1.3" - -color-name@1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" - -color-name@^1.0.0: - version "1.1.4" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" - -color-string@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/color-string/-/color-string-0.3.0.tgz#27d46fb67025c5c2fa25993bfbf579e47841b991" - dependencies: - color-name "^1.0.0" - -color@^0.11.0: - version "0.11.4" - resolved "https://registry.yarnpkg.com/color/-/color-0.11.4.tgz#6d7b5c74fb65e841cd48792ad1ed5e07b904d764" - dependencies: - clone "^1.0.2" - color-convert "^1.3.0" - color-string "^0.3.0" - -colormin@^1.0.5: - version "1.1.2" - resolved "https://registry.yarnpkg.com/colormin/-/colormin-1.1.2.tgz#ea2f7420a72b96881a38aae59ec124a6f7298133" - dependencies: - color "^0.11.0" - css-color-names "0.0.4" - has "^1.0.1" - -colors@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/colors/-/colors-1.1.2.tgz#168a4701756b6a7f51a12ce0c97bfa28c084ed63" - -commander@^2.14.1, commander@^2.18.0, commander@^2.9.0: - version "2.19.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.19.0.tgz#f6198aa84e5b83c46054b94ddedbfed5ee9ff12a" - -component-emitter@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.2.1.tgz#137918d6d78283f7df7a6b7c5a63e140e69425e6" - -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.4.4: - version "1.6.2" - resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" - dependencies: - buffer-from "^1.0.0" - inherits "^2.0.3" - readable-stream "^2.2.2" - typedarray "^0.0.6" - -concat-with-sourcemaps@^1.0.5: - version "1.1.0" - resolved "https://registry.yarnpkg.com/concat-with-sourcemaps/-/concat-with-sourcemaps-1.1.0.tgz#d4ea93f05ae25790951b99e7b3b09e3908a4082e" - dependencies: - source-map "^0.6.1" - -contains-path@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/contains-path/-/contains-path-0.1.0.tgz#fe8cf184ff6670b6baef01a9d4861a5cbec4120a" - -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" - dependencies: - safe-buffer "~5.1.1" - -copy-descriptor@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" - -core-util-is@~1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" - -cosmiconfig@5.0.6: - version "5.0.6" - resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-5.0.6.tgz#dca6cf680a0bd03589aff684700858c81abeeb39" - dependencies: - is-directory "^0.3.1" - js-yaml "^3.9.0" - parse-json "^4.0.0" - -cosmiconfig@^2.1.0, cosmiconfig@^2.1.1: - version "2.2.2" - resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-2.2.2.tgz#6173cebd56fac042c1f4390edf7af6c07c7cb892" - dependencies: - is-directory "^0.3.1" - js-yaml "^3.4.3" - minimist "^1.2.0" - object-assign "^4.1.0" - os-homedir "^1.0.1" - parse-json "^2.2.0" - require-from-string "^1.1.0" - -cosmiconfig@^5.0.0, cosmiconfig@^5.0.7: - version "5.0.7" - resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-5.0.7.tgz#39826b292ee0d78eda137dfa3173bd1c21a43b04" - dependencies: - import-fresh "^2.0.0" - is-directory "^0.3.1" - js-yaml "^3.9.0" - parse-json "^4.0.0" - -create-ecdh@^4.0.0: - version "4.0.3" - resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.3.tgz#c9111b6f33045c4697f144787f9254cdc77c45ff" - 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" - 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" - 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-env@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/cross-env/-/cross-env-5.2.0.tgz#6ecd4c015d5773e614039ee529076669b9d126f2" - dependencies: - cross-spawn "^6.0.5" - is-windows "^1.0.0" - -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" - dependencies: - nice-try "^1.0.4" - path-key "^2.0.1" - semver "^5.5.0" - shebang-command "^1.2.0" - which "^1.2.9" - -crypto-browserify@^3.11.0: - version "3.12.0" - resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec" - 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" - -css-color-names@0.0.4: - version "0.0.4" - resolved "https://registry.yarnpkg.com/css-color-names/-/css-color-names-0.0.4.tgz#808adc2e79cf84738069b646cb20ec27beb629e0" - -css-modules-loader-core@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/css-modules-loader-core/-/css-modules-loader-core-1.1.0.tgz#5908668294a1becd261ae0a4ce21b0b551f21d16" - dependencies: - icss-replace-symbols "1.1.0" - postcss "6.0.1" - postcss-modules-extract-imports "1.1.0" - postcss-modules-local-by-default "1.2.0" - postcss-modules-scope "1.1.0" - postcss-modules-values "1.3.0" - -css-parse@1.7.x: - version "1.7.0" - resolved "https://registry.yarnpkg.com/css-parse/-/css-parse-1.7.0.tgz#321f6cf73782a6ff751111390fc05e2c657d8c9b" - -css-selector-tokenizer@^0.7.0: - version "0.7.1" - resolved "https://registry.yarnpkg.com/css-selector-tokenizer/-/css-selector-tokenizer-0.7.1.tgz#a177271a8bca5019172f4f891fc6eed9cbf68d5d" - dependencies: - cssesc "^0.1.0" - fastparse "^1.1.1" - regexpu-core "^1.0.0" - -cssesc@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-0.1.0.tgz#c814903e45623371a0477b40109aaafbeeaddbb4" - -cssnano@^3.10.0: - version "3.10.0" - resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-3.10.0.tgz#4f38f6cea2b9b17fa01490f23f1dc68ea65c1c38" - dependencies: - autoprefixer "^6.3.1" - decamelize "^1.1.2" - defined "^1.0.0" - has "^1.0.1" - object-assign "^4.0.1" - postcss "^5.0.14" - postcss-calc "^5.2.0" - postcss-colormin "^2.1.8" - postcss-convert-values "^2.3.4" - postcss-discard-comments "^2.0.4" - postcss-discard-duplicates "^2.0.1" - postcss-discard-empty "^2.0.1" - postcss-discard-overridden "^0.1.1" - postcss-discard-unused "^2.2.1" - postcss-filter-plugins "^2.0.0" - postcss-merge-idents "^2.1.5" - postcss-merge-longhand "^2.0.1" - postcss-merge-rules "^2.0.3" - postcss-minify-font-values "^1.0.2" - postcss-minify-gradients "^1.0.1" - postcss-minify-params "^1.0.4" - postcss-minify-selectors "^2.0.4" - postcss-normalize-charset "^1.1.0" - postcss-normalize-url "^3.0.7" - postcss-ordered-values "^2.1.0" - postcss-reduce-idents "^2.2.2" - postcss-reduce-initial "^1.0.0" - postcss-reduce-transforms "^1.0.3" - postcss-svgo "^2.1.1" - postcss-unique-selectors "^2.0.2" - postcss-value-parser "^3.2.3" - postcss-zindex "^2.0.1" - -csso@~2.3.1: - version "2.3.2" - resolved "https://registry.yarnpkg.com/csso/-/csso-2.3.2.tgz#ddd52c587033f49e94b71fc55569f252e8ff5f85" - dependencies: - clap "^1.0.9" - source-map "^0.5.3" - -currently-unhandled@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/currently-unhandled/-/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea" - dependencies: - array-find-index "^1.0.1" - -date-fns@^1.27.2: - version "1.29.0" - resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-1.29.0.tgz#12e609cdcb935127311d04d33334e2960a2a54e6" - -debug@*, debug@^4.0.0, debug@^4.0.1, debug@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.0.tgz#373687bffa678b38b1cd91f861b63850035ddc87" - dependencies: - ms "^2.1.1" - -debug@^2.2.0, debug@^2.3.3, debug@^2.6.8, debug@^2.6.9: - version "2.6.9" - resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" - dependencies: - ms "2.0.0" - -debug@^3.1.0: - version "3.2.6" - resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" - dependencies: - ms "^2.1.1" - -decamelize-keys@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/decamelize-keys/-/decamelize-keys-1.1.0.tgz#d171a87933252807eb3cb61dc1c1445d078df2d9" - dependencies: - decamelize "^1.1.0" - map-obj "^1.0.0" - -decamelize@^1.1.0, decamelize@^1.1.2: - version "1.2.0" - resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" - -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" - -dedent@^0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c" - -deep-is@~0.1.3: - version "0.1.3" - resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" - -deferred-leveldown@~0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/deferred-leveldown/-/deferred-leveldown-0.2.0.tgz#2cef1f111e1c57870d8bbb8af2650e587cd2f5b4" - dependencies: - abstract-leveldown "~0.12.1" - -define-properties@^1.1.2: - version "1.1.3" - resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" - dependencies: - object-keys "^1.0.12" - -define-property@^0.2.5: - version "0.2.5" - resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116" - dependencies: - is-descriptor "^0.1.0" - -define-property@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6" - dependencies: - is-descriptor "^1.0.0" - -define-property@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d" - dependencies: - is-descriptor "^1.0.2" - isobject "^3.0.1" - -defined@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/defined/-/defined-1.0.0.tgz#c98d9bcef75674188e110969151199e39b1fa693" - -del@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/del/-/del-3.0.0.tgz#53ecf699ffcbcb39637691ab13baf160819766e5" - dependencies: - globby "^6.1.0" - is-path-cwd "^1.0.0" - is-path-in-cwd "^1.0.0" - p-map "^1.1.1" - pify "^3.0.0" - rimraf "^2.2.8" - -des.js@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.0.tgz#c074d2e2aa6a8a9a07dbd61f9a15c2cd83ec8ecc" - dependencies: - inherits "^2.0.1" - minimalistic-assert "^1.0.0" - -dicom-microscopy-viewer@0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/dicom-microscopy-viewer/-/dicom-microscopy-viewer-0.6.1.tgz#7b593da241d048154a9c1ebcbccf389742c2af18" - integrity sha512-ZQ1QsQswAh7Yw01ba3LZXCIh7WnEYDjhSxJt9vdfRZ5iHlbgW2ghvUHR7GP80UnWJg335scNmIcqJvwxVjlIsg== - dependencies: - dicomweb-client "^0.5.2" - ol "^5.3.0" - -dicomweb-client@^0.5.2: - version "0.5.2" - resolved "https://registry.yarnpkg.com/dicomweb-client/-/dicomweb-client-0.5.2.tgz#aa5a4a6a5044b0702bb0a8a2662c86cd16901951" - integrity sha512-e11n2+g7HfBuMyopWq76W11eSZJ707g4U1XiO8URA+23aoe0g1kGAtlPB29NKXl7zX7RznTJ7wfRBxFkW6EJDA== - -diffie-hellman@^5.0.0: - version "5.0.3" - resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.3.tgz#40e8ee98f55a2149607146921c63e1ae5f3d2875" - dependencies: - bn.js "^4.1.0" - miller-rabin "^4.0.0" - randombytes "^2.0.0" - -dir-glob@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-2.0.0.tgz#0b205d2b6aef98238ca286598a8204d29d0a0034" - dependencies: - arrify "^1.0.1" - path-type "^3.0.0" - -doctrine@1.5.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-1.5.0.tgz#379dce730f6166f76cefa4e6707a159b02c5a6fa" - dependencies: - esutils "^2.0.2" - isarray "^1.0.0" - -doctrine@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d" - dependencies: - esutils "^2.0.2" - -dom-serializer@0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.1.0.tgz#073c697546ce0780ce23be4a28e293e40bc30c82" - dependencies: - domelementtype "~1.1.1" - entities "~1.1.1" - -domelementtype@1, domelementtype@^1.3.0: - version "1.3.1" - resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.1.tgz#d048c44b37b0d10a7f2a3d5fee3f4333d790481f" - -domelementtype@~1.1.1: - version "1.1.3" - resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.1.3.tgz#bd28773e2642881aec51544924299c5cd822185b" - -domhandler@^2.3.0: - version "2.4.2" - resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.4.2.tgz#8805097e933d65e85546f726d60f5eb88b44f803" - dependencies: - domelementtype "1" - -domutils@^1.5.1: - version "1.7.0" - resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.7.0.tgz#56ea341e834e06e6748af7a1cb25da67ea9f8c2a" - dependencies: - dom-serializer "0" - domelementtype "1" - -dot-prop@^4.1.1: - version "4.2.0" - resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-4.2.0.tgz#1f19e0c2e1aa0e32797c49799f2837ac6af69c57" - dependencies: - is-obj "^1.0.0" - -electron-to-chromium@^1.2.7, electron-to-chromium@^1.3.86: - version "1.3.88" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.88.tgz#f36ab32634f49ef2b0fdc1e82e2d1cc17feb29e7" - -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" - 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" - -email-addresses@^3.0.1: - version "3.0.3" - resolved "https://registry.yarnpkg.com/email-addresses/-/email-addresses-3.0.3.tgz#fc3c6952f68da24239914e982c8a7783bc2ed96d" - -emojis-list@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389" - -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" - dependencies: - once "^1.4.0" - -entities@^1.1.1, entities@~1.1.1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.2.tgz#bdfa735299664dfafd34529ed4f8522a275fea56" - -errno@^0.1.1, errno@~0.1.1: - version "0.1.7" - resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.7.tgz#4684d71779ad39af177e3f007996f7c67c852618" - dependencies: - prr "~1.0.1" - -error-ex@^1.2.0, error-ex@^1.3.1: - version "1.3.2" - resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" - dependencies: - is-arrayish "^0.2.1" - -es-abstract@^1.7.0: - version "1.12.0" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.12.0.tgz#9dbbdd27c6856f0001421ca18782d786bf8a6165" - dependencies: - es-to-primitive "^1.1.1" - function-bind "^1.1.1" - has "^1.0.1" - is-callable "^1.1.3" - is-regex "^1.0.4" - -es-to-primitive@^1.1.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.0.tgz#edf72478033456e8dda8ef09e00ad9650707f377" - dependencies: - is-callable "^1.1.4" - is-date-object "^1.0.1" - is-symbol "^1.0.2" - -escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.4, escape-string-regexp@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" - -eslint-import-resolver-node@^0.3.1: - version "0.3.2" - resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.2.tgz#58f15fb839b8d0576ca980413476aab2472db66a" - dependencies: - debug "^2.6.9" - resolve "^1.5.0" - -eslint-module-utils@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.2.0.tgz#b270362cd88b1a48ad308976ce7fa54e98411746" - dependencies: - debug "^2.6.8" - pkg-dir "^1.0.0" - -eslint-plugin-es@^1.3.1: - version "1.4.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-es/-/eslint-plugin-es-1.4.0.tgz#475f65bb20c993fc10e8c8fe77d1d60068072da6" - dependencies: - eslint-utils "^1.3.0" - regexpp "^2.0.1" - -eslint-plugin-import@^2.14.0: - version "2.14.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.14.0.tgz#6b17626d2e3e6ad52cfce8807a845d15e22111a8" - dependencies: - contains-path "^0.1.0" - debug "^2.6.8" - doctrine "1.5.0" - eslint-import-resolver-node "^0.3.1" - eslint-module-utils "^2.2.0" - has "^1.0.1" - lodash "^4.17.4" - minimatch "^3.0.3" - read-pkg-up "^2.0.0" - resolve "^1.6.0" - -eslint-plugin-node@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-node/-/eslint-plugin-node-8.0.0.tgz#fb9e8911f4543514f154bb6a5924b599aa645568" - dependencies: - eslint-plugin-es "^1.3.1" - eslint-utils "^1.3.1" - ignore "^5.0.2" - minimatch "^3.0.4" - resolve "^1.8.1" - semver "^5.5.0" - -eslint-plugin-promise@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-promise/-/eslint-plugin-promise-4.0.1.tgz#2d074b653f35a23d1ba89d8e976a985117d1c6a2" - -eslint-plugin-react@^7.11.1: - version "7.11.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.11.1.tgz#c01a7af6f17519457d6116aa94fc6d2ccad5443c" - dependencies: - array-includes "^3.0.3" - doctrine "^2.1.0" - has "^1.0.3" - jsx-ast-utils "^2.0.1" - prop-types "^15.6.2" - -eslint-scope@3.7.1: - version "3.7.1" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-3.7.1.tgz#3d63c3edfda02e06e01a452ad88caacc7cdcb6e8" - dependencies: - esrecurse "^4.1.0" - estraverse "^4.1.1" - -eslint-scope@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-4.0.0.tgz#50bf3071e9338bcdc43331794a0cb533f0136172" - dependencies: - esrecurse "^4.1.0" - estraverse "^4.1.1" - -eslint-utils@^1.3.0, eslint-utils@^1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-1.3.1.tgz#9a851ba89ee7c460346f97cf8939c7298827e512" - -eslint-visitor-keys@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz#3f3180fb2e291017716acb4c9d6d5b5c34a6a81d" - -eslint@5.6.0: - version "5.6.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-5.6.0.tgz#b6f7806041af01f71b3f1895cbb20971ea4b6223" - dependencies: - "@babel/code-frame" "^7.0.0" - ajv "^6.5.3" - chalk "^2.1.0" - cross-spawn "^6.0.5" - debug "^3.1.0" - doctrine "^2.1.0" - eslint-scope "^4.0.0" - eslint-utils "^1.3.1" - eslint-visitor-keys "^1.0.0" - espree "^4.0.0" - esquery "^1.0.1" - esutils "^2.0.2" - file-entry-cache "^2.0.0" - functional-red-black-tree "^1.0.1" - glob "^7.1.2" - globals "^11.7.0" - ignore "^4.0.6" - imurmurhash "^0.1.4" - inquirer "^6.1.0" - is-resolvable "^1.1.0" - js-yaml "^3.12.0" - json-stable-stringify-without-jsonify "^1.0.1" - levn "^0.3.0" - lodash "^4.17.5" - minimatch "^3.0.4" - mkdirp "^0.5.1" - natural-compare "^1.4.0" - optionator "^0.8.2" - path-is-inside "^1.0.2" - pluralize "^7.0.0" - progress "^2.0.0" - regexpp "^2.0.0" - require-uncached "^1.0.3" - semver "^5.5.1" - strip-ansi "^4.0.0" - strip-json-comments "^2.0.1" - table "^4.0.3" - text-table "^0.2.0" - -espree@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/espree/-/espree-4.1.0.tgz#728d5451e0fd156c04384a7ad89ed51ff54eb25f" - dependencies: - acorn "^6.0.2" - acorn-jsx "^5.0.0" - eslint-visitor-keys "^1.0.0" - -esprima@^2.6.0: - version "2.7.3" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-2.7.3.tgz#96e3b70d5779f6ad49cd032673d1c312767ba581" - -esprima@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" - -esquery@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.0.1.tgz#406c51658b1f5991a5f9b62b1dc25b00e3e5c708" - dependencies: - estraverse "^4.0.0" - -esrecurse@^4.1.0: - version "4.2.1" - resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.2.1.tgz#007a3b9fdbc2b3bb87e4879ea19c92fdbd3942cf" - dependencies: - estraverse "^4.1.0" - -estraverse@^4.0.0, estraverse@^4.1.0, estraverse@^4.1.1: - version "4.2.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.2.0.tgz#0dee3fed31fcd469618ce7342099fc1afa0bdb13" - -estree-walker@^0.5.2: - version "0.5.2" - resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-0.5.2.tgz#d3850be7529c9580d815600b53126515e146dd39" - -esutils@^2.0.0, esutils@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b" - -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" - dependencies: - md5.js "^1.3.4" - safe-buffer "^5.1.1" - -execa@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8" - 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" - -execall@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/execall/-/execall-1.0.0.tgz#73d0904e395b3cab0658b08d09ec25307f29bb73" - dependencies: - clone-regexp "^1.0.0" - -expand-brackets@^0.1.4: - version "0.1.5" - resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-0.1.5.tgz#df07284e342a807cd733ac5af72411e581d1177b" - dependencies: - is-posix-bracket "^0.1.0" - -expand-brackets@^2.1.4: - version "2.1.4" - resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" - dependencies: - debug "^2.3.3" - define-property "^0.2.5" - extend-shallow "^2.0.1" - posix-character-classes "^0.1.0" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.1" - -expand-range@^1.8.1: - version "1.8.2" - resolved "https://registry.yarnpkg.com/expand-range/-/expand-range-1.8.2.tgz#a299effd335fe2721ebae8e257ec79644fc85337" - dependencies: - fill-range "^2.1.0" - -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" - dependencies: - homedir-polyfill "^1.0.1" - -extend-shallow@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" - dependencies: - is-extendable "^0.1.0" - -extend-shallow@^3.0.0, extend-shallow@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8" - dependencies: - assign-symbols "^1.0.0" - is-extendable "^1.0.1" - -extend@^3.0.0: - version "3.0.2" - resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" - -external-editor@^3.0.0: - version "3.0.3" - resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.0.3.tgz#5866db29a97826dbe4bf3afd24070ead9ea43a27" - dependencies: - chardet "^0.7.0" - iconv-lite "^0.4.24" - tmp "^0.0.33" - -extglob@^0.3.1: - version "0.3.2" - resolved "https://registry.yarnpkg.com/extglob/-/extglob-0.3.2.tgz#2e18ff3d2f49ab2765cec9023f011daa8d8349a1" - dependencies: - is-extglob "^1.0.0" - -extglob@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" - dependencies: - array-unique "^0.3.2" - define-property "^1.0.0" - expand-brackets "^2.1.4" - extend-shallow "^2.0.1" - fragment-cache "^0.2.1" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.1" - -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" - -fast-glob@^2.0.2: - version "2.2.4" - resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-2.2.4.tgz#e54f4b66d378040e0e4d6a68ec36bbc5b04363c0" - dependencies: - "@mrmlnc/readdir-enhanced" "^2.2.1" - "@nodelib/fs.stat" "^1.1.2" - glob-parent "^3.1.0" - is-glob "^4.0.0" - merge2 "^1.2.3" - micromatch "^3.1.10" - -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" - -fast-levenshtein@~2.0.4: - version "2.0.6" - resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" - -fastparse@^1.1.1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/fastparse/-/fastparse-1.1.2.tgz#91728c5a5942eced8531283c79441ee4122c35a9" - -figures@^1.7.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/figures/-/figures-1.7.0.tgz#cbe1e3affcf1cd44b80cadfed28dc793a9701d2e" - dependencies: - escape-string-regexp "^1.0.5" - object-assign "^4.1.0" - -figures@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962" - dependencies: - escape-string-regexp "^1.0.5" - -file-entry-cache@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-2.0.0.tgz#c392990c3e684783d838b8c84a45d8a048458361" - dependencies: - flat-cache "^1.2.1" - object-assign "^4.0.1" - -filename-regex@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/filename-regex/-/filename-regex-2.0.1.tgz#c1c4b9bee3e09725ddb106b75c1e301fe2f18b26" - -filename-reserved-regex@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/filename-reserved-regex/-/filename-reserved-regex-1.0.0.tgz#e61cf805f0de1c984567d0386dc5df50ee5af7e4" - -filenamify-url@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/filenamify-url/-/filenamify-url-1.0.0.tgz#b32bd81319ef5863b73078bed50f46a4f7975f50" - dependencies: - filenamify "^1.0.0" - humanize-url "^1.0.0" - -filenamify@^1.0.0: - version "1.2.1" - resolved "https://registry.yarnpkg.com/filenamify/-/filenamify-1.2.1.tgz#a9f2ffd11c503bed300015029272378f1f1365a5" - dependencies: - filename-reserved-regex "^1.0.0" - strip-outer "^1.0.0" - trim-repeated "^1.0.0" - -fill-range@^2.1.0: - version "2.2.4" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-2.2.4.tgz#eb1e773abb056dcd8df2bfdf6af59b8b3a936565" - dependencies: - is-number "^2.1.0" - isobject "^2.0.0" - randomatic "^3.0.0" - repeat-element "^1.1.2" - repeat-string "^1.5.2" - -fill-range@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" - dependencies: - extend-shallow "^2.0.1" - is-number "^3.0.0" - repeat-string "^1.6.1" - to-regex-range "^2.1.0" - -find-parent-dir@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/find-parent-dir/-/find-parent-dir-0.3.0.tgz#33c44b429ab2b2f0646299c5f9f718f376ff8d54" - -find-up@^1.0.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f" - dependencies: - path-exists "^2.0.0" - pinkie-promise "^2.0.0" - -find-up@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" - dependencies: - locate-path "^2.0.0" - -find-up@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" - dependencies: - locate-path "^3.0.0" - -flat-cache@^1.2.1: - version "1.3.4" - resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-1.3.4.tgz#2c2ef77525cc2929007dfffa1dd314aa9c9dee6f" - dependencies: - circular-json "^0.3.1" - graceful-fs "^4.1.2" - rimraf "~2.6.2" - write "^0.2.1" - -flatten@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/flatten/-/flatten-1.0.2.tgz#dae46a9d78fbe25292258cc1e780a41d95c03782" - -for-in@^1.0.1, for-in@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" - -for-own@^0.1.4: - version "0.1.5" - resolved "https://registry.yarnpkg.com/for-own/-/for-own-0.1.5.tgz#5265c681a4f294dabbf17c9509b6763aa84510ce" - dependencies: - for-in "^1.0.1" - -foreach@~2.0.1: - version "2.0.5" - resolved "https://registry.yarnpkg.com/foreach/-/foreach-2.0.5.tgz#0bee005018aeb260d0a3af3ae658dd0136ec1b99" - -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" - -fs-extra@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-5.0.0.tgz#414d0110cdd06705734d055652c5411260c31abd" - dependencies: - graceful-fs "^4.1.2" - jsonfile "^4.0.0" - universalify "^0.1.0" - -fs-extra@^7.0.0: - version "7.0.1" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-7.0.1.tgz#4f189c44aa123b895f722804f55ea23eadc348e9" - dependencies: - graceful-fs "^4.1.2" - jsonfile "^4.0.0" - universalify "^0.1.0" - -fs.realpath@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" - -function-bind@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" - -functional-red-black-tree@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" - -fwd-stream@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/fwd-stream/-/fwd-stream-1.0.4.tgz#ed281cabed46feecf921ee32dc4c50b372ac7cfa" - dependencies: - readable-stream "~1.0.26-4" - -g-status@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/g-status/-/g-status-2.0.2.tgz#270fd32119e8fc9496f066fe5fe88e0a6bc78b97" - dependencies: - arrify "^1.0.1" - matcher "^1.0.0" - simple-git "^1.85.0" - -generic-names@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/generic-names/-/generic-names-1.0.3.tgz#2d786a121aee508876796939e8e3bff836c20917" - dependencies: - loader-utils "^0.2.16" - -get-own-enumerable-property-symbols@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.0.tgz#b877b49a5c16aefac3655f2ed2ea5b684df8d203" - -get-stdin@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-6.0.0.tgz#9e09bf712b360ab9225e812048f71fde9c89657b" - -get-stream@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" - 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" - -gh-pages@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/gh-pages/-/gh-pages-2.0.1.tgz#aefe47a43b8d9d2aa3130576b33fe95641e29a2f" - dependencies: - async "^2.6.1" - commander "^2.18.0" - email-addresses "^3.0.1" - filenamify-url "^1.0.0" - fs-extra "^7.0.0" - globby "^6.1.0" - graceful-fs "^4.1.11" - rimraf "^2.6.2" - -glob-base@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/glob-base/-/glob-base-0.3.0.tgz#dbb164f6221b1c0b1ccf82aea328b497df0ea3c4" - dependencies: - glob-parent "^2.0.0" - is-glob "^2.0.0" - -glob-parent@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-2.0.0.tgz#81383d72db054fcccf5336daa902f182f6edbb28" - dependencies: - is-glob "^2.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" - dependencies: - is-glob "^3.1.0" - path-dirname "^1.0.0" - -glob-to-regexp@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz#8c5a1494d2066c570cc3bfe4496175acc4d502ab" - -glob@7.0.x: - version "7.0.6" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.0.6.tgz#211bafaf49e525b8cd93260d14ab136152b3f57a" - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.0.2" - once "^1.3.0" - path-is-absolute "^1.0.0" - -glob@^7.0.3, glob@^7.0.5, glob@^7.1.2: - version "7.1.3" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.3.tgz#3960832d3f1574108342dafd3a67b332c0969df1" - dependencies: - 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" - -global-modules@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-1.0.0.tgz#6d770f0eb523ac78164d72b5e71a8877265cc3ea" - dependencies: - global-prefix "^1.0.1" - is-windows "^1.0.1" - resolve-dir "^1.0.0" - -global-prefix@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-1.0.2.tgz#dbf743c6c14992593c655568cb66ed32c0122ebe" - dependencies: - expand-tilde "^2.0.2" - homedir-polyfill "^1.0.1" - ini "^1.3.4" - is-windows "^1.0.1" - which "^1.2.14" - -globals@^11.1.0, globals@^11.7.0: - version "11.9.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-11.9.0.tgz#bde236808e987f290768a93d065060d78e6ab249" - -globby@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/globby/-/globby-6.1.0.tgz#f5a6d70e8395e21c858fb0489d64df02424d506c" - dependencies: - array-union "^1.0.1" - glob "^7.0.3" - object-assign "^4.0.1" - pify "^2.0.0" - pinkie-promise "^2.0.0" - -globby@^8.0.0: - version "8.0.1" - resolved "https://registry.yarnpkg.com/globby/-/globby-8.0.1.tgz#b5ad48b8aa80b35b814fc1281ecc851f1d2b5b50" - dependencies: - array-union "^1.0.1" - dir-glob "^2.0.0" - fast-glob "^2.0.2" - glob "^7.1.2" - ignore "^3.3.5" - pify "^3.0.0" - slash "^1.0.0" - -globjoin@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/globjoin/-/globjoin-0.1.4.tgz#2f4494ac8919e3767c5cbb691e9f463324285d43" - -gonzales-pe@^4.2.3: - version "4.2.3" - resolved "https://registry.yarnpkg.com/gonzales-pe/-/gonzales-pe-4.2.3.tgz#41091703625433285e0aee3aa47829fc1fbeb6f2" - dependencies: - minimist "1.1.x" - -graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.6: - version "4.1.15" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.15.tgz#ffb703e1066e8a0eeaa4c8b80ba9253eeefbfb00" - -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@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" - -has-symbols@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.0.tgz#ba1a8f1af2a0fc39650f5c850367704122063b44" - -has-value@^0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" - dependencies: - get-value "^2.0.3" - has-values "^0.1.4" - isobject "^2.0.0" - -has-value@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177" - dependencies: - get-value "^2.0.6" - has-values "^1.0.0" - isobject "^3.0.0" - -has-values@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771" - -has-values@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f" - dependencies: - is-number "^3.0.0" - kind-of "^4.0.0" - -has@^1.0.1, has@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" - dependencies: - function-bind "^1.1.1" - -hash-base@^3.0.0: - version "3.0.4" - resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.0.4.tgz#5fc8686847ecd73499403319a6b0a3f3f6ae4918" - 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" - dependencies: - inherits "^2.0.3" - minimalistic-assert "^1.0.1" - -hmac-drbg@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" - dependencies: - hash.js "^1.0.3" - minimalistic-assert "^1.0.0" - minimalistic-crypto-utils "^1.0.1" - -homedir-polyfill@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/homedir-polyfill/-/homedir-polyfill-1.0.1.tgz#4c2bbc8a758998feebf5ed68580f76d46768b4bc" - dependencies: - parse-passwd "^1.0.0" - -hosted-git-info@^2.1.4: - version "2.7.1" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.7.1.tgz#97f236977bd6e125408930ff6de3eec6281ec047" - -html-comment-regex@^1.1.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/html-comment-regex/-/html-comment-regex-1.1.2.tgz#97d4688aeb5c81886a364faa0cad1dda14d433a7" - -html-tags@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/html-tags/-/html-tags-2.0.0.tgz#10b30a386085f43cede353cc8fa7cb0deeea668b" - -htmlparser2@^3.9.2: - version "3.10.0" - resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.10.0.tgz#5f5e422dcf6119c0d983ed36260ce9ded0bee464" - dependencies: - domelementtype "^1.3.0" - domhandler "^2.3.0" - domutils "^1.5.1" - entities "^1.1.1" - inherits "^2.0.1" - readable-stream "^3.0.6" - -humanize-url@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/humanize-url/-/humanize-url-1.0.1.tgz#f4ab99e0d288174ca4e1e50407c55fbae464efff" - dependencies: - normalize-url "^1.0.0" - strip-url-auth "^1.0.0" - -husky@^1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/husky/-/husky-1.3.1.tgz#26823e399300388ca2afff11cfa8a86b0033fae0" - dependencies: - cosmiconfig "^5.0.7" - execa "^1.0.0" - find-up "^3.0.0" - get-stdin "^6.0.0" - is-ci "^2.0.0" - pkg-dir "^3.0.0" - please-upgrade-node "^3.1.1" - read-pkg "^4.0.1" - run-node "^1.0.0" - slash "^2.0.0" - -iconv-lite@^0.4.24: - version "0.4.24" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" - dependencies: - safer-buffer ">= 2.1.2 < 3" - -icss-replace-symbols@1.1.0, icss-replace-symbols@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz#06ea6f83679a7749e386cfe1fe812ae5db223ded" - -idb-wrapper@^1.5.0: - version "1.7.2" - resolved "https://registry.yarnpkg.com/idb-wrapper/-/idb-wrapper-1.7.2.tgz#8251afd5e77fe95568b1c16152eb44b396767ea2" - -ieee754@^1.1.6: - version "1.1.12" - resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.12.tgz#50bf24e5b9c8bb98af4964c941cdb0918da7b60b" - -ignore@^3.3.5: - version "3.3.10" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.3.10.tgz#0a97fb876986e8081c631160f8f9f389157f0043" - -ignore@^4.0.6: - version "4.0.6" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" - -ignore@^5.0.2, ignore@^5.0.4: - version "5.0.4" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.0.4.tgz#33168af4a21e99b00c5d41cbadb6a6cb49903a45" - -import-cwd@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/import-cwd/-/import-cwd-2.1.0.tgz#aa6cf36e722761285cb371ec6519f53e2435b0a9" - dependencies: - import-from "^2.1.0" - -import-fresh@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-2.0.0.tgz#d81355c15612d386c61f9ddd3922d4304822a546" - dependencies: - caller-path "^2.0.0" - resolve-from "^3.0.0" - -import-from@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/import-from/-/import-from-2.1.0.tgz#335db7f2a7affd53aaa471d4b8021dee36b7f3b1" - dependencies: - resolve-from "^3.0.0" - -import-lazy@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/import-lazy/-/import-lazy-3.1.0.tgz#891279202c8a2280fdbd6674dbd8da1a1dfc67cc" - -imurmurhash@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" - -indent-string@^3.0.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-3.2.0.tgz#4a5fd6d27cc332f37e5419a504dbb837105c9289" - -indexes-of@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/indexes-of/-/indexes-of-1.0.1.tgz#f30f716c8e2bd346c7b67d3df3915566a7c05607" - -indexof@~0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/indexof/-/indexof-0.0.1.tgz#82dc336d232b9062179d05ab3293a66059fd435d" - -inflight@^1.0.4: - version "1.0.6" - resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" - dependencies: - once "^1.3.0" - wrappy "1" - -inherits@2, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.1, inherits@~2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" - -ini@^1.3.4: - version "1.3.5" - resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" - -inquirer@^6.1.0: - version "6.2.1" - resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-6.2.1.tgz#9943fc4882161bdb0b0c9276769c75b32dbfcd52" - dependencies: - ansi-escapes "^3.0.0" - chalk "^2.0.0" - cli-cursor "^2.1.0" - cli-width "^2.0.0" - external-editor "^3.0.0" - figures "^2.0.0" - lodash "^4.17.10" - mute-stream "0.0.7" - run-async "^2.2.0" - rxjs "^6.1.0" - string-width "^2.1.0" - strip-ansi "^5.0.0" - through "^2.3.6" - -invariant@^2.2.2: - version "2.2.4" - resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" - dependencies: - loose-envify "^1.0.0" - -is-absolute-url@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-absolute-url/-/is-absolute-url-2.1.0.tgz#50530dfb84fcc9aa7dbe7852e83a37b93b9f2aa6" - -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" - dependencies: - kind-of "^3.0.2" - -is-accessor-descriptor@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656" - dependencies: - kind-of "^6.0.0" - -is-alphabetical@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-alphabetical/-/is-alphabetical-1.0.2.tgz#1fa6e49213cb7885b75d15862fb3f3d96c884f41" - -is-alphanumeric@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-alphanumeric/-/is-alphanumeric-1.0.0.tgz#4a9cef71daf4c001c1d81d63d140cf53fd6889f4" - -is-alphanumerical@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-alphanumerical/-/is-alphanumerical-1.0.2.tgz#1138e9ae5040158dc6ff76b820acd6b7a181fd40" - dependencies: - is-alphabetical "^1.0.0" - is-decimal "^1.0.0" - -is-arrayish@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" - -is-buffer@^1.1.4, is-buffer@^1.1.5: - version "1.1.6" - resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" - -is-builtin-module@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-builtin-module/-/is-builtin-module-1.0.0.tgz#540572d34f7ac3119f8f76c30cbc1b1e037affbe" - dependencies: - builtin-modules "^1.0.0" - -is-callable@^1.1.3, is-callable@^1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.4.tgz#1e1adf219e1eeb684d691f9d6a05ff0d30a24d75" - -is-ci@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c" - 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" - dependencies: - kind-of "^3.0.2" - -is-data-descriptor@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7" - dependencies: - kind-of "^6.0.0" - -is-date-object@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.1.tgz#9aa20eb6aeebbff77fbd33e74ca01b33581d3a16" - -is-decimal@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-decimal/-/is-decimal-1.0.2.tgz#894662d6a8709d307f3a276ca4339c8fa5dff0ff" - -is-descriptor@^0.1.0: - version "0.1.6" - resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca" - dependencies: - is-accessor-descriptor "^0.1.6" - is-data-descriptor "^0.1.4" - kind-of "^5.0.0" - -is-descriptor@^1.0.0, is-descriptor@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec" - dependencies: - is-accessor-descriptor "^1.0.0" - is-data-descriptor "^1.0.0" - kind-of "^6.0.2" - -is-directory@^0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/is-directory/-/is-directory-0.3.1.tgz#61339b6f2475fc772fd9c9d83f5c8575dc154ae1" - -is-dotfile@^1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/is-dotfile/-/is-dotfile-1.0.3.tgz#a6a2f32ffd2dfb04f5ca25ecd0f6b83cf798a1e1" - -is-equal-shallow@^0.1.3: - version "0.1.3" - resolved "https://registry.yarnpkg.com/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz#2238098fc221de0bcfa5d9eac4c45d638aa1c534" - dependencies: - is-primitive "^2.0.0" - -is-extendable@^0.1.0, is-extendable@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" - -is-extendable@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4" - dependencies: - is-plain-object "^2.0.4" - -is-extglob@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-1.0.0.tgz#ac468177c4943405a092fc8f29760c6ffc6206c0" - -is-extglob@^2.1.0, is-extglob@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" - -is-fullwidth-code-point@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" - dependencies: - number-is-nan "^1.0.0" - -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-glob@^2.0.0, is-glob@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-2.0.1.tgz#d096f926a3ded5600f3fdfd91198cb0888c2d863" - dependencies: - is-extglob "^1.0.0" - -is-glob@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a" - dependencies: - is-extglob "^2.1.0" - -is-glob@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.0.tgz#9521c76845cc2610a85203ddf080a958c2ffabc0" - dependencies: - is-extglob "^2.1.1" - -is-hexadecimal@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-hexadecimal/-/is-hexadecimal-1.0.2.tgz#b6e710d7d07bb66b98cb8cece5c9b4921deeb835" - -is-module@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-module/-/is-module-1.0.0.tgz#3258fb69f78c14d5b815d664336b4cffb6441591" - -is-number@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-2.1.0.tgz#01fcbbb393463a548f2f466cce16dece49db908f" - dependencies: - kind-of "^3.0.2" - -is-number@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" - dependencies: - kind-of "^3.0.2" - -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: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" - -is-object@~0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/is-object/-/is-object-0.1.2.tgz#00efbc08816c33cfc4ac8251d132e10dc65098d7" - -is-observable@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-observable/-/is-observable-1.1.0.tgz#b3e986c8f44de950867cab5403f5a3465005975e" - dependencies: - symbol-observable "^1.1.0" - -is-path-cwd@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-1.0.0.tgz#d225ec23132e89edd38fda767472e62e65f1106d" - -is-path-in-cwd@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz#5ac48b345ef675339bd6c7a48a912110b241cf52" - dependencies: - is-path-inside "^1.0.0" - -is-path-inside@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-1.0.1.tgz#8ef5b7de50437a3fdca6b4e865ef7aa55cb48036" - dependencies: - path-is-inside "^1.0.1" - -is-plain-obj@^1.0.0, is-plain-obj@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" - -is-plain-object@^2.0.1, is-plain-object@^2.0.3, is-plain-object@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" - dependencies: - isobject "^3.0.1" - -is-posix-bracket@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz#3334dc79774368e92f016e6fbc0a88f5cd6e6bc4" - -is-primitive@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-primitive/-/is-primitive-2.0.0.tgz#207bab91638499c07b2adf240a41a87210034575" - -is-promise@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa" - -is-regex@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.4.tgz#5517489b547091b0930e095654ced25ee97e9491" - dependencies: - has "^1.0.1" - -is-regexp@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-regexp/-/is-regexp-1.0.0.tgz#fd2d883545c46bac5a633e7b9a09e87fa2cb5069" - -is-resolvable@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-resolvable/-/is-resolvable-1.1.0.tgz#fb18f87ce1feb925169c9a407c19318a3206ed88" - -is-stream@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" - -is-supported-regexp-flag@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-supported-regexp-flag/-/is-supported-regexp-flag-1.0.1.tgz#21ee16518d2c1dd3edd3e9a0d57e50207ac364ca" - -is-svg@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-svg/-/is-svg-2.1.0.tgz#cf61090da0d9efbcab8722deba6f032208dbb0e9" - dependencies: - html-comment-regex "^1.1.0" - -is-symbol@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.2.tgz#a055f6ae57192caee329e7a860118b497a950f38" - dependencies: - has-symbols "^1.0.0" - -is-whitespace-character@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-whitespace-character/-/is-whitespace-character-1.0.2.tgz#ede53b4c6f6fb3874533751ec9280d01928d03ed" - -is-windows@^1.0.0, 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-word-character@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-word-character/-/is-word-character-1.0.2.tgz#46a5dac3f2a1840898b91e576cd40d493f3ae553" - -is@~0.2.6: - version "0.2.7" - resolved "https://registry.yarnpkg.com/is/-/is-0.2.7.tgz#3b34a2c48f359972f35042849193ae7264b63562" - -isarray@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" - -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" - -isbuffer@~0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/isbuffer/-/isbuffer-0.0.0.tgz#38c146d9df528b8bf9b0701c3d43cf12df3fc39b" - -isexe@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" - -isobject@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" - dependencies: - isarray "1.0.0" - -isobject@^3.0.0, isobject@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" - -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-validate@^23.5.0: - version "23.6.0" - resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-23.6.0.tgz#36761f99d1ed33fcd425b4e4c5595d62b6597474" - dependencies: - chalk "^2.0.1" - jest-get-type "^22.1.0" - leven "^2.1.0" - pretty-format "^23.6.0" - -js-base64@^2.1.9: - version "2.4.9" - resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.4.9.tgz#748911fb04f48a60c4771b375cac45a80df11c03" - -js-levenshtein@^1.1.3: - version "1.1.4" - resolved "https://registry.yarnpkg.com/js-levenshtein/-/js-levenshtein-1.1.4.tgz#3a56e3cbf589ca0081eb22cd9ba0b1290a16d26e" - -"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" - -js-yaml@^3.12.0, js-yaml@^3.4.3, js-yaml@^3.9.0: - version "3.12.0" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.12.0.tgz#eaed656ec8344f10f527c6bfa1b6e2244de167d1" - dependencies: - argparse "^1.0.7" - esprima "^4.0.0" - -js-yaml@~3.7.0: - version "3.7.0" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.7.0.tgz#5c967ddd837a9bfdca5f2de84253abe8a1c03b80" - dependencies: - argparse "^1.0.7" - esprima "^2.6.0" - -jsesc@^2.5.1: - version "2.5.2" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" - -jsesc@~0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" - -json-parse-better-errors@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" - -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" - -json-stable-stringify-without-jsonify@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" - -json5@^0.5.0: - version "0.5.1" - resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821" - -json5@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/json5/-/json5-2.1.0.tgz#e7a0c62c48285c628d20a10b85c89bb807c32850" - dependencies: - minimist "^1.2.0" - -jsonfile@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" - optionalDependencies: - graceful-fs "^4.1.6" - -jsx-ast-utils@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-2.0.1.tgz#e801b1b39985e20fffc87b40e3748080e2dcac7f" - dependencies: - array-includes "^3.0.3" - -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" - dependencies: - is-buffer "^1.1.5" - -kind-of@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" - dependencies: - is-buffer "^1.1.5" - -kind-of@^5.0.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d" - -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" - -known-css-properties@^0.10.0: - version "0.10.0" - resolved "https://registry.yarnpkg.com/known-css-properties/-/known-css-properties-0.10.0.tgz#8378a8921e6c815ecc47095744a8900af63d577d" - -level-blobs@^0.1.7: - version "0.1.7" - resolved "https://registry.yarnpkg.com/level-blobs/-/level-blobs-0.1.7.tgz#9ab9b97bb99f1edbf9f78a3433e21ed56386bdaf" - dependencies: - level-peek "1.0.6" - once "^1.3.0" - readable-stream "^1.0.26-4" - -level-filesystem@^1.0.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/level-filesystem/-/level-filesystem-1.2.0.tgz#a00aca9919c4a4dfafdca6a8108d225aadff63b3" - dependencies: - concat-stream "^1.4.4" - errno "^0.1.1" - fwd-stream "^1.0.4" - level-blobs "^0.1.7" - level-peek "^1.0.6" - level-sublevel "^5.2.0" - octal "^1.0.0" - once "^1.3.0" - xtend "^2.2.0" - -level-fix-range@2.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/level-fix-range/-/level-fix-range-2.0.0.tgz#c417d62159442151a19d9a2367868f1724c2d548" - dependencies: - clone "~0.1.9" - -level-fix-range@~1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/level-fix-range/-/level-fix-range-1.0.2.tgz#bf15b915ae36d8470c821e883ddf79cd16420828" - -"level-hooks@>=4.4.0 <5": - version "4.5.0" - resolved "https://registry.yarnpkg.com/level-hooks/-/level-hooks-4.5.0.tgz#1b9ae61922930f3305d1a61fc4d83c8102c0dd93" - dependencies: - string-range "~1.2" - -level-js@^2.1.3: - version "2.2.4" - resolved "https://registry.yarnpkg.com/level-js/-/level-js-2.2.4.tgz#bc055f4180635d4489b561c9486fa370e8c11697" - dependencies: - abstract-leveldown "~0.12.0" - idb-wrapper "^1.5.0" - isbuffer "~0.0.0" - ltgt "^2.1.2" - typedarray-to-buffer "~1.0.0" - xtend "~2.1.2" - -level-peek@1.0.6, level-peek@^1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/level-peek/-/level-peek-1.0.6.tgz#bec51c72a82ee464d336434c7c876c3fcbcce77f" - dependencies: - level-fix-range "~1.0.2" - -level-sublevel@^5.2.0: - version "5.2.3" - resolved "https://registry.yarnpkg.com/level-sublevel/-/level-sublevel-5.2.3.tgz#744c12c72d2e72be78dde3b9b5cd84d62191413a" - dependencies: - level-fix-range "2.0" - level-hooks ">=4.4.0 <5" - string-range "~1.2.1" - xtend "~2.0.4" - -levelup@^0.18.2: - version "0.18.6" - resolved "https://registry.yarnpkg.com/levelup/-/levelup-0.18.6.tgz#e6a01cb089616c8ecc0291c2a9bd3f0c44e3e5eb" - dependencies: - bl "~0.8.1" - deferred-leveldown "~0.2.0" - errno "~0.1.1" - prr "~0.0.0" - readable-stream "~1.0.26" - semver "~2.3.1" - xtend "~3.0.0" - -leven@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/leven/-/leven-2.1.0.tgz#c2e7a9f772094dee9d34202ae8acce4687875580" - -levn@^0.3.0, levn@~0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" - dependencies: - prelude-ls "~1.1.2" - type-check "~0.3.2" - -lint-staged@^8.1.0: - version "8.1.0" - resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-8.1.0.tgz#dbc3ae2565366d8f20efb9f9799d076da64863f2" - dependencies: - "@iamstarkov/listr-update-renderer" "0.4.1" - chalk "^2.3.1" - commander "^2.14.1" - cosmiconfig "5.0.6" - debug "^3.1.0" - dedent "^0.7.0" - del "^3.0.0" - execa "^1.0.0" - find-parent-dir "^0.3.0" - g-status "^2.0.2" - is-glob "^4.0.0" - is-windows "^1.0.2" - jest-validate "^23.5.0" - listr "^0.14.2" - lodash "^4.17.5" - log-symbols "^2.2.0" - micromatch "^3.1.8" - npm-which "^3.0.1" - p-map "^1.1.1" - path-is-inside "^1.0.2" - pify "^3.0.0" - please-upgrade-node "^3.0.2" - staged-git-files "1.1.2" - string-argv "^0.0.2" - stringify-object "^3.2.2" - -listr-silent-renderer@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/listr-silent-renderer/-/listr-silent-renderer-1.1.1.tgz#924b5a3757153770bf1a8e3fbf74b8bbf3f9242e" - -listr-update-renderer@^0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/listr-update-renderer/-/listr-update-renderer-0.5.0.tgz#4ea8368548a7b8aecb7e06d8c95cb45ae2ede6a2" - dependencies: - chalk "^1.1.3" - cli-truncate "^0.2.1" - elegant-spinner "^1.0.1" - figures "^1.7.0" - indent-string "^3.0.0" - log-symbols "^1.0.2" - log-update "^2.3.0" - strip-ansi "^3.0.1" - -listr-verbose-renderer@^0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/listr-verbose-renderer/-/listr-verbose-renderer-0.5.0.tgz#f1132167535ea4c1261102b9f28dac7cba1e03db" - dependencies: - chalk "^2.4.1" - cli-cursor "^2.1.0" - date-fns "^1.27.2" - figures "^2.0.0" - -listr@^0.14.2: - version "0.14.3" - resolved "https://registry.yarnpkg.com/listr/-/listr-0.14.3.tgz#2fea909604e434be464c50bddba0d496928fa586" - dependencies: - "@samverschueren/stream-to-observable" "^0.3.0" - is-observable "^1.1.0" - is-promise "^2.1.0" - is-stream "^1.1.0" - listr-silent-renderer "^1.1.1" - listr-update-renderer "^0.5.0" - listr-verbose-renderer "^0.5.0" - p-map "^2.0.0" - rxjs "^6.3.3" - -load-json-file@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-2.0.0.tgz#7947e42149af80d696cbf797bcaabcfe1fe29ca8" - dependencies: - graceful-fs "^4.1.2" - parse-json "^2.2.0" - pify "^2.0.0" - strip-bom "^3.0.0" - -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" - dependencies: - graceful-fs "^4.1.2" - parse-json "^4.0.0" - pify "^3.0.0" - strip-bom "^3.0.0" - -loader-utils@^0.2.16: - version "0.2.17" - resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-0.2.17.tgz#f86e6374d43205a6e6c60e9196f17c0299bfb348" - dependencies: - big.js "^3.1.3" - emojis-list "^2.0.0" - json5 "^0.5.0" - object-assign "^4.0.1" - -locate-path@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" - dependencies: - p-locate "^2.0.0" - path-exists "^3.0.0" - -locate-path@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" - dependencies: - p-locate "^3.0.0" - path-exists "^3.0.0" - -lodash.camelcase@^4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6" - -lodash.debounce@^4.0.8: - version "4.0.8" - resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" - integrity sha1-gteb/zCmfEAF/9XiUVMArZyk168= - -lodash.memoize@^4.1.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" - -lodash.uniq@^4.5.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" - -lodash@^4.17.10, lodash@^4.17.11, lodash@^4.17.4, lodash@^4.17.5: - version "4.17.11" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.11.tgz#b39ea6229ef607ecd89e2c8df12536891cac9b8d" - -log-symbols@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-1.0.2.tgz#376ff7b58ea3086a0f09facc74617eca501e1a18" - dependencies: - chalk "^1.0.0" - -log-symbols@^2.0.0, log-symbols@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-2.2.0.tgz#5740e1c5d6f0dfda4ad9323b5332107ef6b4c40a" - dependencies: - chalk "^2.0.1" - -log-update@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/log-update/-/log-update-2.3.0.tgz#88328fd7d1ce7938b29283746f0b1bc126b24708" - dependencies: - ansi-escapes "^3.0.0" - cli-cursor "^2.0.0" - wrap-ansi "^3.0.1" - -longest-streak@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/longest-streak/-/longest-streak-2.0.2.tgz#2421b6ba939a443bb9ffebf596585a50b4c38e2e" - -loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.3.1: - version "1.4.0" - resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" - integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== - dependencies: - js-tokens "^3.0.0 || ^4.0.0" - -loud-rejection@^1.0.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/loud-rejection/-/loud-rejection-1.6.0.tgz#5b46f80147edee578870f086d04821cf998e551f" - dependencies: - currently-unhandled "^0.4.1" - signal-exit "^3.0.0" - -ltgt@^2.1.2: - version "2.2.1" - resolved "https://registry.yarnpkg.com/ltgt/-/ltgt-2.2.1.tgz#f35ca91c493f7b73da0e07495304f17b31f87ee5" - -magic-string@^0.25.1: - version "0.25.1" - resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.25.1.tgz#b1c248b399cd7485da0fe7385c2fc7011843266e" - dependencies: - sourcemap-codec "^1.4.1" - -map-cache@^0.2.2: - version "0.2.2" - resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" - -map-obj@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d" - -map-obj@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-2.0.0.tgz#a65cd29087a92598b8791257a523e021222ac1f9" - -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" - -markdown-escapes@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/markdown-escapes/-/markdown-escapes-1.0.2.tgz#e639cbde7b99c841c0bacc8a07982873b46d2122" - -markdown-table@^1.1.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/markdown-table/-/markdown-table-1.1.2.tgz#c78db948fa879903a41bce522e3b96f801c63786" - -matcher@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/matcher/-/matcher-1.1.1.tgz#51d8301e138f840982b338b116bb0c09af62c1c2" - dependencies: - escape-string-regexp "^1.0.4" - -math-expression-evaluator@^1.2.14: - version "1.2.17" - resolved "https://registry.yarnpkg.com/math-expression-evaluator/-/math-expression-evaluator-1.2.17.tgz#de819fdbcd84dccd8fae59c6aeb79615b9d266ac" - -math-random@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/math-random/-/math-random-1.0.1.tgz#8b3aac588b8a66e4975e3cdea67f7bb329601fac" - -mathml-tag-names@^2.0.1: - version "2.1.0" - resolved "https://registry.yarnpkg.com/mathml-tag-names/-/mathml-tag-names-2.1.0.tgz#490b70e062ee24636536e3d9481e333733d00f2c" - -md5.js@^1.3.4: - version "1.3.5" - resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f" - dependencies: - hash-base "^3.0.0" - inherits "^2.0.1" - safe-buffer "^5.1.2" - -mdast-util-compact@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/mdast-util-compact/-/mdast-util-compact-1.0.2.tgz#c12ebe16fffc84573d3e19767726de226e95f649" - dependencies: - unist-util-visit "^1.1.0" - -meow@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/meow/-/meow-5.0.0.tgz#dfc73d63a9afc714a5e371760eb5c88b91078aa4" - dependencies: - camelcase-keys "^4.0.0" - decamelize-keys "^1.0.0" - loud-rejection "^1.0.0" - minimist-options "^3.0.1" - normalize-package-data "^2.3.4" - read-pkg-up "^3.0.0" - redent "^2.0.0" - trim-newlines "^2.0.0" - yargs-parser "^10.0.0" - -merge2@^1.2.3: - version "1.2.3" - resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.2.3.tgz#7ee99dbd69bb6481689253f018488a1b902b0ed5" - -micromatch@^2.3.11: - version "2.3.11" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-2.3.11.tgz#86677c97d1720b363431d04d0d15293bd38c1565" - dependencies: - arr-diff "^2.0.0" - array-unique "^0.2.1" - braces "^1.8.2" - expand-brackets "^0.1.4" - extglob "^0.3.1" - filename-regex "^2.0.0" - is-extglob "^1.0.0" - is-glob "^2.0.1" - kind-of "^3.0.2" - normalize-path "^2.0.1" - object.omit "^2.0.0" - parse-glob "^3.0.4" - regex-cache "^0.4.2" - -micromatch@^3.1.10, micromatch@^3.1.8: - version "3.1.10" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" - dependencies: - arr-diff "^4.0.0" - array-unique "^0.3.2" - braces "^2.3.1" - define-property "^2.0.2" - extend-shallow "^3.0.2" - extglob "^2.0.4" - fragment-cache "^0.2.1" - kind-of "^6.0.2" - nanomatch "^1.2.9" - object.pick "^1.3.0" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.2" - -miller-rabin@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.1.tgz#f080351c865b0dc562a8462966daa53543c78a4d" - dependencies: - bn.js "^4.0.0" - brorand "^1.0.1" - -mime@^2.3.1: - version "2.4.0" - resolved "https://registry.yarnpkg.com/mime/-/mime-2.4.0.tgz#e051fd881358585f3279df333fe694da0bcffdd6" - -mimic-fn@^1.0.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" - -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" - -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" - -minimatch@^3.0.2, 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: - brace-expansion "^1.1.7" - -minimist-options@^3.0.1: - version "3.0.2" - resolved "https://registry.yarnpkg.com/minimist-options/-/minimist-options-3.0.2.tgz#fba4c8191339e13ecf4d61beb03f070103f3d954" - dependencies: - arrify "^1.0.1" - is-plain-obj "^1.1.0" - -minimist@0.0.8: - version "0.0.8" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" - -minimist@1.1.x: - version "1.1.3" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.1.3.tgz#3bedfd91a92d39016fcfaa1c681e8faa1a1efda8" - -minimist@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" - -mixin-deep@^1.2.0: - version "1.3.1" - resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.1.tgz#a49e7268dce1a0d9698e45326c5626df3543d0fe" - dependencies: - for-in "^1.0.2" - is-extendable "^1.0.1" - -mkdirp@0.5.x, mkdirp@^0.5.1, mkdirp@~0.5.1: - version "0.5.1" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" - dependencies: - minimist "0.0.8" - -mkpath@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/mkpath/-/mkpath-1.0.0.tgz#ebb3a977e7af1c683ae6fda12b545a6ba6c5853d" - -ms@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" - -ms@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" - -mute-stream@0.0.7: - version "0.0.7" - resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" - -nanomatch@^1.2.9: - version "1.2.13" - resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" - dependencies: - arr-diff "^4.0.0" - array-unique "^0.3.2" - define-property "^2.0.2" - extend-shallow "^3.0.2" - fragment-cache "^0.2.1" - is-windows "^1.0.2" - kind-of "^6.0.2" - object.pick "^1.3.0" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.1" - -natural-compare@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" - -nice-try@^1.0.4: - version "1.0.5" - resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" - -node-releases@^1.0.5: - version "1.1.0" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.0.tgz#be7464fa8d877808237520fd49436d5e79191c3d" - dependencies: - semver "^5.3.0" - -normalize-package-data@^2.3.2, normalize-package-data@^2.3.4: - version "2.4.0" - resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.4.0.tgz#12f95a307d58352075a04907b84ac8be98ac012f" - dependencies: - hosted-git-info "^2.1.4" - is-builtin-module "^1.0.0" - semver "2 || 3 || 4 || 5" - validate-npm-package-license "^3.0.1" - -normalize-path@^2.0.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" - dependencies: - remove-trailing-separator "^1.0.1" - -normalize-range@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942" - -normalize-selector@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/normalize-selector/-/normalize-selector-0.2.0.tgz#d0b145eb691189c63a78d201dc4fdb1293ef0c03" - -normalize-url@^1.0.0, normalize-url@^1.4.0: - version "1.9.1" - resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-1.9.1.tgz#2cc0d66b31ea23036458436e3620d85954c66c3c" - dependencies: - object-assign "^4.0.1" - prepend-http "^1.0.0" - query-string "^4.1.0" - sort-keys "^1.0.0" - -npm-path@^2.0.2: - version "2.0.4" - resolved "https://registry.yarnpkg.com/npm-path/-/npm-path-2.0.4.tgz#c641347a5ff9d6a09e4d9bce5580c4f505278e64" - dependencies: - which "^1.2.10" - -npm-run-path@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" - dependencies: - path-key "^2.0.0" - -npm-which@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/npm-which/-/npm-which-3.0.1.tgz#9225f26ec3a285c209cae67c3b11a6b4ab7140aa" - dependencies: - commander "^2.9.0" - npm-path "^2.0.2" - which "^1.2.10" - -num2fraction@^1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/num2fraction/-/num2fraction-1.2.2.tgz#6f682b6a027a4e9ddfa4564cd2589d1d4e669ede" - -number-is-nan@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" - -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" - -object-copy@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c" - dependencies: - copy-descriptor "^0.1.0" - define-property "^0.2.5" - kind-of "^3.0.3" - -object-keys@^1.0.12: - version "1.0.12" - resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.0.12.tgz#09c53855377575310cca62f55bb334abff7b3ed2" - -object-keys@~0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-0.2.0.tgz#cddec02998b091be42bf1035ae32e49f1cb6ea67" - dependencies: - foreach "~2.0.1" - indexof "~0.0.1" - is "~0.2.6" - -object-keys@~0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-0.4.0.tgz#28a6aae7428dd2c3a92f3d95f21335dd204e0336" - -object-visit@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" - dependencies: - isobject "^3.0.0" - -object.omit@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/object.omit/-/object.omit-2.0.1.tgz#1a9c744829f39dbb858c76ca3579ae2a54ebd1fa" - dependencies: - for-own "^0.1.4" - is-extendable "^0.1.1" - -object.pick@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" - dependencies: - isobject "^3.0.1" - -octal@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/octal/-/octal-1.0.0.tgz#63e7162a68efbeb9e213588d58e989d1e5c4530b" - -ol@^5.3.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/ol/-/ol-5.3.0.tgz#106b870561fabb9b790b5869b3d93025cb03d389" - integrity sha512-UrOJGNI5XdYfE9n43RJdsMq25SjI4nIi5Kf0kxi+q6vEknzeRxM/wgYf8FMs7Ss3URuIbsKmetW9dVMOYB/DkQ== - dependencies: - pbf "3.1.0" - pixelworks "1.1.0" - rbush "2.0.2" - -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: - wrappy "1" - -onetime@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4" - dependencies: - mimic-fn "^1.0.0" - -optionator@^0.8.2: - version "0.8.2" - resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.2.tgz#364c5e409d3f4d6301d6c0b4c05bba50180aeb64" - dependencies: - deep-is "~0.1.3" - fast-levenshtein "~2.0.4" - levn "~0.3.0" - prelude-ls "~1.1.2" - type-check "~0.3.2" - wordwrap "~1.0.0" - -os-homedir@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" - -os-tmpdir@~1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" - -p-finally@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" - -p-limit@^1.1.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" - dependencies: - p-try "^1.0.0" - -p-limit@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.0.0.tgz#e624ed54ee8c460a778b3c9f3670496ff8a57aec" - 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" - 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-map@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/p-map/-/p-map-2.0.0.tgz#be18c5a5adeb8e156460651421aceca56c213a50" - -p-queue@^2.4.2: - version "2.4.2" - resolved "https://registry.yarnpkg.com/p-queue/-/p-queue-2.4.2.tgz#03609826682b743be9a22dba25051bd46724fc34" - -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.0.0" - resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.0.0.tgz#85080bb87c64688fa47996fe8f7dfbe8211760b1" - -parse-asn1@^5.0.0: - version "5.1.1" - resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.1.tgz#f6bf293818332bd0dab54efb16087724745e6ca8" - 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" - -parse-entities@^1.0.2, parse-entities@^1.1.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/parse-entities/-/parse-entities-1.2.0.tgz#9deac087661b2e36814153cb78d7e54a4c5fd6f4" - dependencies: - character-entities "^1.0.0" - character-entities-legacy "^1.0.0" - character-reference-invalid "^1.0.0" - is-alphanumerical "^1.0.0" - is-decimal "^1.0.0" - is-hexadecimal "^1.0.0" - -parse-glob@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/parse-glob/-/parse-glob-3.0.4.tgz#b2c376cfb11f35513badd173ef0bb6e3a388391c" - dependencies: - glob-base "^0.3.0" - is-dotfile "^1.0.0" - is-extglob "^1.0.0" - is-glob "^2.0.0" - -parse-json@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" - 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" - dependencies: - error-ex "^1.3.1" - json-parse-better-errors "^1.0.1" - -parse-passwd@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/parse-passwd/-/parse-passwd-1.0.0.tgz#6d5b934a456993b23d37f40a382d6f1666a8e5c6" - -pascalcase@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" - -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" - -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: - version "1.0.1" - resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" - -path-is-inside@^1.0.1, path-is-inside@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" - -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" - -path-parse@^1.0.5: - version "1.0.6" - resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" - -path-type@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-2.0.0.tgz#f012ccb8415b7096fc2daa1054c3d72389594c73" - dependencies: - pify "^2.0.0" - -path-type@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f" - dependencies: - pify "^3.0.0" - -pbf@3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/pbf/-/pbf-3.1.0.tgz#f70004badcb281761eabb1e76c92f179f08189e9" - integrity sha512-/hYJmIsTmh7fMkHAWWXJ5b8IKLWdjdlAFb3IHkRBn1XUhIYBChVGfVwmHEAV3UfXTxsP/AKfYTXTS/dCPxJd5w== - dependencies: - ieee754 "^1.1.6" - resolve-protobuf-schema "^2.0.0" - -pbkdf2@^3.0.3: - version "3.0.17" - resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.0.17.tgz#976c206530617b14ebb32114239f7b09336e93a6" - 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" - -pify@^2.0.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" - -pify@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" - -pify@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" - -pinkie-promise@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" - dependencies: - pinkie "^2.0.0" - -pinkie@^2.0.0: - version "2.0.4" - resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" - -pixelworks@1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/pixelworks/-/pixelworks-1.1.0.tgz#1f095ad48dca8bf8a1c8258e0092031a44f22ca5" - integrity sha1-Hwla1I3Ki/ihyCWOAJIDGkTyLKU= - -pkg-dir@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-1.0.0.tgz#7a4b508a8d5bb2d629d447056ff4e9c9314cf3d4" - dependencies: - find-up "^1.0.0" - -pkg-dir@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-3.0.0.tgz#2749020f239ed990881b1f71210d51eb6523bea3" - dependencies: - find-up "^3.0.0" - -please-upgrade-node@^3.0.2, please-upgrade-node@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/please-upgrade-node/-/please-upgrade-node-3.1.1.tgz#ed320051dfcc5024fae696712c8288993595e8ac" - dependencies: - semver-compare "^1.0.0" - -pluralize@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-7.0.0.tgz#298b89df8b93b0221dbf421ad2b1b1ea23fc6777" - -posix-character-classes@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" - -postcss-calc@^5.2.0: - version "5.3.1" - resolved "https://registry.yarnpkg.com/postcss-calc/-/postcss-calc-5.3.1.tgz#77bae7ca928ad85716e2fda42f261bf7c1d65b5e" - dependencies: - postcss "^5.0.2" - postcss-message-helpers "^2.0.0" - reduce-css-calc "^1.2.6" - -postcss-colormin@^2.1.8: - version "2.2.2" - resolved "https://registry.yarnpkg.com/postcss-colormin/-/postcss-colormin-2.2.2.tgz#6631417d5f0e909a3d7ec26b24c8a8d1e4f96e4b" - dependencies: - colormin "^1.0.5" - postcss "^5.0.13" - postcss-value-parser "^3.2.3" - -postcss-convert-values@^2.3.4: - version "2.6.1" - resolved "https://registry.yarnpkg.com/postcss-convert-values/-/postcss-convert-values-2.6.1.tgz#bbd8593c5c1fd2e3d1c322bb925dcae8dae4d62d" - dependencies: - postcss "^5.0.11" - postcss-value-parser "^3.1.2" - -postcss-discard-comments@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/postcss-discard-comments/-/postcss-discard-comments-2.0.4.tgz#befe89fafd5b3dace5ccce51b76b81514be00e3d" - dependencies: - postcss "^5.0.14" - -postcss-discard-duplicates@^2.0.1: - version "2.1.0" - resolved "https://registry.yarnpkg.com/postcss-discard-duplicates/-/postcss-discard-duplicates-2.1.0.tgz#b9abf27b88ac188158a5eb12abcae20263b91932" - dependencies: - postcss "^5.0.4" - -postcss-discard-empty@^2.0.1: - version "2.1.0" - resolved "https://registry.yarnpkg.com/postcss-discard-empty/-/postcss-discard-empty-2.1.0.tgz#d2b4bd9d5ced5ebd8dcade7640c7d7cd7f4f92b5" - dependencies: - postcss "^5.0.14" - -postcss-discard-overridden@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/postcss-discard-overridden/-/postcss-discard-overridden-0.1.1.tgz#8b1eaf554f686fb288cd874c55667b0aa3668d58" - dependencies: - postcss "^5.0.16" - -postcss-discard-unused@^2.2.1: - version "2.2.3" - resolved "https://registry.yarnpkg.com/postcss-discard-unused/-/postcss-discard-unused-2.2.3.tgz#bce30b2cc591ffc634322b5fb3464b6d934f4433" - dependencies: - postcss "^5.0.14" - uniqs "^2.0.0" - -postcss-filter-plugins@^2.0.0: - version "2.0.3" - resolved "https://registry.yarnpkg.com/postcss-filter-plugins/-/postcss-filter-plugins-2.0.3.tgz#82245fdf82337041645e477114d8e593aa18b8ec" - dependencies: - postcss "^5.0.4" - -postcss-html@^0.34.0: - version "0.34.0" - resolved "https://registry.yarnpkg.com/postcss-html/-/postcss-html-0.34.0.tgz#9bfd637ad8c3d3a43625b5ef844dc804b3370868" - dependencies: - htmlparser2 "^3.9.2" - -postcss-jsx@^0.35.0: - version "0.35.0" - resolved "https://registry.yarnpkg.com/postcss-jsx/-/postcss-jsx-0.35.0.tgz#1d6cb82393994cdc7e9aa421648e3f0f3f98209b" - dependencies: - "@babel/core" "^7.1.2" - optionalDependencies: - postcss-styled ">=0.34.0" - -postcss-less@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/postcss-less/-/postcss-less-3.1.0.tgz#0e14a80206b452f44d3a09d082fa72645e8168cc" - dependencies: - postcss "^7.0.3" - -postcss-load-config@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-1.2.0.tgz#539e9afc9ddc8620121ebf9d8c3673e0ce50d28a" - dependencies: - cosmiconfig "^2.1.0" - object-assign "^4.1.0" - postcss-load-options "^1.2.0" - postcss-load-plugins "^2.3.0" - -postcss-load-options@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/postcss-load-options/-/postcss-load-options-1.2.0.tgz#b098b1559ddac2df04bc0bb375f99a5cfe2b6d8c" - dependencies: - cosmiconfig "^2.1.0" - object-assign "^4.1.0" - -postcss-load-plugins@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/postcss-load-plugins/-/postcss-load-plugins-2.3.0.tgz#745768116599aca2f009fad426b00175049d8d92" - dependencies: - cosmiconfig "^2.1.1" - object-assign "^4.1.0" - -postcss-markdown@^0.34.0: - version "0.34.0" - resolved "https://registry.yarnpkg.com/postcss-markdown/-/postcss-markdown-0.34.0.tgz#7a043e6eee3ab846a4cefe3ab43d141038e2da79" - dependencies: - remark "^9.0.0" - unist-util-find-all-after "^1.0.2" - -postcss-media-query-parser@^0.2.3: - version "0.2.3" - resolved "https://registry.yarnpkg.com/postcss-media-query-parser/-/postcss-media-query-parser-0.2.3.tgz#27b39c6f4d94f81b1a73b8f76351c609e5cef244" - -postcss-merge-idents@^2.1.5: - version "2.1.7" - resolved "https://registry.yarnpkg.com/postcss-merge-idents/-/postcss-merge-idents-2.1.7.tgz#4c5530313c08e1d5b3bbf3d2bbc747e278eea270" - dependencies: - has "^1.0.1" - postcss "^5.0.10" - postcss-value-parser "^3.1.1" - -postcss-merge-longhand@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/postcss-merge-longhand/-/postcss-merge-longhand-2.0.2.tgz#23d90cd127b0a77994915332739034a1a4f3d658" - dependencies: - postcss "^5.0.4" - -postcss-merge-rules@^2.0.3: - version "2.1.2" - resolved "https://registry.yarnpkg.com/postcss-merge-rules/-/postcss-merge-rules-2.1.2.tgz#d1df5dfaa7b1acc3be553f0e9e10e87c61b5f721" - dependencies: - browserslist "^1.5.2" - caniuse-api "^1.5.2" - postcss "^5.0.4" - postcss-selector-parser "^2.2.2" - vendors "^1.0.0" - -postcss-message-helpers@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/postcss-message-helpers/-/postcss-message-helpers-2.0.0.tgz#a4f2f4fab6e4fe002f0aed000478cdf52f9ba60e" - -postcss-minify-font-values@^1.0.2: - version "1.0.5" - resolved "https://registry.yarnpkg.com/postcss-minify-font-values/-/postcss-minify-font-values-1.0.5.tgz#4b58edb56641eba7c8474ab3526cafd7bbdecb69" - dependencies: - object-assign "^4.0.1" - postcss "^5.0.4" - postcss-value-parser "^3.0.2" - -postcss-minify-gradients@^1.0.1: - version "1.0.5" - resolved "https://registry.yarnpkg.com/postcss-minify-gradients/-/postcss-minify-gradients-1.0.5.tgz#5dbda11373703f83cfb4a3ea3881d8d75ff5e6e1" - dependencies: - postcss "^5.0.12" - postcss-value-parser "^3.3.0" - -postcss-minify-params@^1.0.4: - version "1.2.2" - resolved "https://registry.yarnpkg.com/postcss-minify-params/-/postcss-minify-params-1.2.2.tgz#ad2ce071373b943b3d930a3fa59a358c28d6f1f3" - dependencies: - alphanum-sort "^1.0.1" - postcss "^5.0.2" - postcss-value-parser "^3.0.2" - uniqs "^2.0.0" - -postcss-minify-selectors@^2.0.4: - version "2.1.1" - resolved "https://registry.yarnpkg.com/postcss-minify-selectors/-/postcss-minify-selectors-2.1.1.tgz#b2c6a98c0072cf91b932d1a496508114311735bf" - dependencies: - alphanum-sort "^1.0.2" - has "^1.0.1" - postcss "^5.0.14" - postcss-selector-parser "^2.0.0" - -postcss-modules-extract-imports@1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-1.1.0.tgz#b614c9720be6816eaee35fb3a5faa1dba6a05ddb" - dependencies: - postcss "^6.0.1" - -postcss-modules-local-by-default@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-1.2.0.tgz#f7d80c398c5a393fa7964466bd19500a7d61c069" - dependencies: - css-selector-tokenizer "^0.7.0" - postcss "^6.0.1" - -postcss-modules-scope@1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-1.1.0.tgz#d6ea64994c79f97b62a72b426fbe6056a194bb90" - dependencies: - css-selector-tokenizer "^0.7.0" - postcss "^6.0.1" - -postcss-modules-values@1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/postcss-modules-values/-/postcss-modules-values-1.3.0.tgz#ecffa9d7e192518389f42ad0e83f72aec456ea20" - dependencies: - icss-replace-symbols "^1.1.0" - postcss "^6.0.1" - -postcss-modules@^1.1.0: - version "1.4.1" - resolved "https://registry.yarnpkg.com/postcss-modules/-/postcss-modules-1.4.1.tgz#8aa35bd3461db67e27377a7ce770d77b654a84ef" - dependencies: - css-modules-loader-core "^1.1.0" - generic-names "^1.0.3" - lodash.camelcase "^4.3.0" - postcss "^7.0.1" - string-hash "^1.1.1" - -postcss-normalize-charset@^1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/postcss-normalize-charset/-/postcss-normalize-charset-1.1.1.tgz#ef9ee71212d7fe759c78ed162f61ed62b5cb93f1" - dependencies: - postcss "^5.0.5" - -postcss-normalize-url@^3.0.7: - version "3.0.8" - resolved "https://registry.yarnpkg.com/postcss-normalize-url/-/postcss-normalize-url-3.0.8.tgz#108f74b3f2fcdaf891a2ffa3ea4592279fc78222" - dependencies: - is-absolute-url "^2.0.0" - normalize-url "^1.4.0" - postcss "^5.0.14" - postcss-value-parser "^3.2.3" - -postcss-ordered-values@^2.1.0: - version "2.2.3" - resolved "https://registry.yarnpkg.com/postcss-ordered-values/-/postcss-ordered-values-2.2.3.tgz#eec6c2a67b6c412a8db2042e77fe8da43f95c11d" - dependencies: - postcss "^5.0.4" - postcss-value-parser "^3.0.1" - -postcss-reduce-idents@^2.2.2: - version "2.4.0" - resolved "https://registry.yarnpkg.com/postcss-reduce-idents/-/postcss-reduce-idents-2.4.0.tgz#c2c6d20cc958284f6abfbe63f7609bf409059ad3" - dependencies: - postcss "^5.0.4" - postcss-value-parser "^3.0.2" - -postcss-reduce-initial@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/postcss-reduce-initial/-/postcss-reduce-initial-1.0.1.tgz#68f80695f045d08263a879ad240df8dd64f644ea" - dependencies: - postcss "^5.0.4" - -postcss-reduce-transforms@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/postcss-reduce-transforms/-/postcss-reduce-transforms-1.0.4.tgz#ff76f4d8212437b31c298a42d2e1444025771ae1" - dependencies: - has "^1.0.1" - postcss "^5.0.8" - postcss-value-parser "^3.0.1" - -postcss-reporter@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/postcss-reporter/-/postcss-reporter-6.0.0.tgz#44c873129d8c029a430b6d2186210d79c8de88b8" - dependencies: - chalk "^2.0.1" - lodash "^4.17.4" - log-symbols "^2.0.0" - postcss "^7.0.2" - -postcss-resolve-nested-selector@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/postcss-resolve-nested-selector/-/postcss-resolve-nested-selector-0.1.1.tgz#29ccbc7c37dedfac304e9fff0bf1596b3f6a0e4e" - -postcss-safe-parser@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-safe-parser/-/postcss-safe-parser-4.0.1.tgz#8756d9e4c36fdce2c72b091bbc8ca176ab1fcdea" - dependencies: - postcss "^7.0.0" - -postcss-sass@^0.3.5: - version "0.3.5" - resolved "https://registry.yarnpkg.com/postcss-sass/-/postcss-sass-0.3.5.tgz#6d3e39f101a53d2efa091f953493116d32beb68c" - dependencies: - gonzales-pe "^4.2.3" - postcss "^7.0.1" - -postcss-scss@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/postcss-scss/-/postcss-scss-2.0.0.tgz#248b0a28af77ea7b32b1011aba0f738bda27dea1" - dependencies: - postcss "^7.0.0" - -postcss-selector-parser@^2.0.0, postcss-selector-parser@^2.2.2: - version "2.2.3" - resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-2.2.3.tgz#f9437788606c3c9acee16ffe8d8b16297f27bb90" - dependencies: - flatten "^1.0.2" - indexes-of "^1.0.1" - uniq "^1.0.1" - -postcss-selector-parser@^3.1.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-3.1.1.tgz#4f875f4afb0c96573d5cf4d74011aee250a7e865" - dependencies: - dot-prop "^4.1.1" - indexes-of "^1.0.1" - uniq "^1.0.1" - -postcss-styled@>=0.34.0, postcss-styled@^0.34.0: - version "0.34.0" - resolved "https://registry.yarnpkg.com/postcss-styled/-/postcss-styled-0.34.0.tgz#07d47bcb13707289782aa058605fd9feaf84391d" - -postcss-svgo@^2.1.1: - version "2.1.6" - resolved "https://registry.yarnpkg.com/postcss-svgo/-/postcss-svgo-2.1.6.tgz#b6df18aa613b666e133f08adb5219c2684ac108d" - dependencies: - is-svg "^2.0.0" - postcss "^5.0.14" - postcss-value-parser "^3.2.3" - svgo "^0.7.0" - -postcss-syntax@^0.34.0: - version "0.34.0" - resolved "https://registry.yarnpkg.com/postcss-syntax/-/postcss-syntax-0.34.0.tgz#4a85c022f1cdecea72102775c91af1e7f506d83a" - -postcss-unique-selectors@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/postcss-unique-selectors/-/postcss-unique-selectors-2.0.2.tgz#981d57d29ddcb33e7b1dfe1fd43b8649f933ca1d" - dependencies: - alphanum-sort "^1.0.1" - postcss "^5.0.4" - uniqs "^2.0.0" - -postcss-value-parser@^3.0.1, postcss-value-parser@^3.0.2, postcss-value-parser@^3.1.1, postcss-value-parser@^3.1.2, postcss-value-parser@^3.2.3, postcss-value-parser@^3.3.0, postcss-value-parser@^3.3.1: - version "3.3.1" - resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz#9ff822547e2893213cf1c30efa51ac5fd1ba8281" - -postcss-zindex@^2.0.1: - version "2.2.0" - resolved "https://registry.yarnpkg.com/postcss-zindex/-/postcss-zindex-2.2.0.tgz#d2109ddc055b91af67fc4cb3b025946639d2af22" - dependencies: - has "^1.0.1" - postcss "^5.0.4" - uniqs "^2.0.0" - -postcss@6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-6.0.1.tgz#000dbd1f8eef217aa368b9a212c5fc40b2a8f3f2" - dependencies: - chalk "^1.1.3" - source-map "^0.5.6" - supports-color "^3.2.3" - -postcss@^5.0.10, postcss@^5.0.11, postcss@^5.0.12, postcss@^5.0.13, postcss@^5.0.14, postcss@^5.0.16, postcss@^5.0.2, postcss@^5.0.4, postcss@^5.0.5, postcss@^5.0.8, postcss@^5.2.16: - version "5.2.18" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-5.2.18.tgz#badfa1497d46244f6390f58b319830d9107853c5" - dependencies: - chalk "^1.1.3" - js-base64 "^2.1.9" - source-map "^0.5.6" - supports-color "^3.2.3" - -postcss@^6.0.1, postcss@^6.0.21: - version "6.0.23" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-6.0.23.tgz#61c82cc328ac60e677645f979054eb98bc0e3324" - dependencies: - chalk "^2.4.1" - source-map "^0.6.1" - supports-color "^5.4.0" - -postcss@^7.0.0, postcss@^7.0.1, postcss@^7.0.2, postcss@^7.0.3, postcss@^7.0.6: - version "7.0.6" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.6.tgz#6dcaa1e999cdd4a255dcd7d4d9547f4ca010cdc2" - dependencies: - chalk "^2.4.1" - source-map "^0.6.1" - supports-color "^5.5.0" - -prelude-ls@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" - -prepend-http@^1.0.0: - version "1.0.4" - resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc" - -preserve@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b" - -prettier@^1.15.3: - version "1.15.3" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.15.3.tgz#1feaac5bdd181237b54dbe65d874e02a1472786a" - -pretty-format@^23.6.0: - version "23.6.0" - resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-23.6.0.tgz#5eaac8eeb6b33b987b7fe6097ea6a8a146ab5760" - dependencies: - ansi-regex "^3.0.0" - ansi-styles "^3.2.0" - -private@^0.1.6: - version "0.1.8" - resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff" - -process-es6@^0.11.2: - version "0.11.6" - resolved "https://registry.yarnpkg.com/process-es6/-/process-es6-0.11.6.tgz#c6bb389f9a951f82bd4eb169600105bd2ff9c778" - -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" - -progress@^2.0.0: - version "2.0.3" - resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" - -promise.series@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/promise.series/-/promise.series-0.2.0.tgz#2cc7ebe959fc3a6619c04ab4dbdc9e452d864bbd" - -prop-types@^15.6.2: - version "15.6.2" - resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.6.2.tgz#05d5ca77b4453e985d60fc7ff8c859094a497102" - dependencies: - loose-envify "^1.3.1" - object-assign "^4.1.1" - -protocol-buffers-schema@^3.3.1: - version "3.3.2" - resolved "https://registry.yarnpkg.com/protocol-buffers-schema/-/protocol-buffers-schema-3.3.2.tgz#00434f608b4e8df54c59e070efeefc37fb4bb859" - integrity sha512-Xdayp8sB/mU+sUV4G7ws8xtYMGdQnxbeIfLjyO9TZZRJdztBGhlmbI5x1qcY4TG5hBkIKGnc28i7nXxaugu88w== - -prr@~0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/prr/-/prr-0.0.0.tgz#1a84b85908325501411853d0081ee3fa86e2926a" - -prr@~1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" - -public-encrypt@^4.0.0: - version "4.0.3" - resolved "https://registry.yarnpkg.com/public-encrypt/-/public-encrypt-4.0.3.tgz#4fcc9d77a07e48ba7527e7cbe0de33d0701331e0" - 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@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" - dependencies: - end-of-stream "^1.1.0" - once "^1.3.1" - -punycode@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" - -q@^1.1.2: - version "1.5.1" - resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" - -query-string@^4.1.0: - version "4.3.4" - resolved "https://registry.yarnpkg.com/query-string/-/query-string-4.3.4.tgz#bbb693b9ca915c232515b228b1a02b609043dbeb" - dependencies: - object-assign "^4.1.0" - strict-uri-encode "^1.0.0" - -quick-lru@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-1.1.0.tgz#4360b17c61136ad38078397ff11416e186dcfbb8" - -quickselect@^1.0.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/quickselect/-/quickselect-1.1.1.tgz#852e412ce418f237ad5b660d70cffac647ae94c2" - integrity sha512-qN0Gqdw4c4KGPsBOQafj6yj/PA6c/L63f6CaZ/DCF/xF4Esu3jVmKLUDYxghFx8Kb/O7y9tI7x2RjTSXwdK1iQ== - -randomatic@^3.0.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-3.1.1.tgz#b776efc59375984e36c537b2f51a1f0aff0da1ed" - dependencies: - is-number "^4.0.0" - kind-of "^6.0.0" - math-random "^1.0.1" - -randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5: - version "2.0.6" - resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.0.6.tgz#d302c522948588848a8d300c932b44c24231da80" - 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" - dependencies: - randombytes "^2.0.5" - safe-buffer "^5.1.0" - -rbush@2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/rbush/-/rbush-2.0.2.tgz#bb6005c2731b7ba1d5a9a035772927d16a614605" - integrity sha512-XBOuALcTm+O/H8G90b6pzu6nX6v2zCKiFG4BJho8a+bY6AER6t8uQUZdi5bomQc0AprCWhEGa7ncAbbRap0bRA== - dependencies: - quickselect "^1.0.1" - -react-dom@^16.6.3: - version "16.6.3" - resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-16.6.3.tgz#8fa7ba6883c85211b8da2d0efeffc9d3825cccc0" - dependencies: - loose-envify "^1.1.0" - object-assign "^4.1.1" - prop-types "^15.6.2" - scheduler "^0.11.2" - -react@^16.6.3: - version "16.6.3" - resolved "https://registry.yarnpkg.com/react/-/react-16.6.3.tgz#25d77c91911d6bbdd23db41e70fb094cc1e0871c" - dependencies: - loose-envify "^1.1.0" - object-assign "^4.1.1" - prop-types "^15.6.2" - scheduler "^0.11.2" - -read-pkg-up@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-2.0.0.tgz#6b72a8048984e0c41e79510fd5e9fa99b3b549be" - dependencies: - find-up "^2.0.0" - read-pkg "^2.0.0" - -read-pkg-up@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-3.0.0.tgz#3ed496685dba0f8fe118d0691dc51f4a1ff96f07" - dependencies: - find-up "^2.0.0" - read-pkg "^3.0.0" - -read-pkg@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-2.0.0.tgz#8ef1c0623c6a6db0dc6713c4bfac46332b2368f8" - dependencies: - load-json-file "^2.0.0" - normalize-package-data "^2.3.2" - path-type "^2.0.0" - -read-pkg@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-3.0.0.tgz#9cbc686978fee65d16c00e2b19c237fcf6e38389" - dependencies: - load-json-file "^4.0.0" - normalize-package-data "^2.3.2" - path-type "^3.0.0" - -read-pkg@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-4.0.1.tgz#963625378f3e1c4d48c85872b5a6ec7d5d093237" - dependencies: - normalize-package-data "^2.3.2" - parse-json "^4.0.0" - pify "^3.0.0" - -readable-stream@^1.0.26-4: - version "1.1.14" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.14.tgz#7cf4c54ef648e3813084c636dd2079e166c081d9" - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.1" - isarray "0.0.1" - string_decoder "~0.10.x" - -readable-stream@^2.2.2: - version "2.3.6" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf" - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.3" - isarray "~1.0.0" - process-nextick-args "~2.0.0" - safe-buffer "~5.1.1" - string_decoder "~1.1.1" - util-deprecate "~1.0.1" - -readable-stream@^3.0.6: - version "3.0.6" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.0.6.tgz#351302e4c68b5abd6a2ed55376a7f9a25be3057a" - dependencies: - inherits "^2.0.3" - string_decoder "^1.1.1" - util-deprecate "^1.0.1" - -readable-stream@~1.0.26, readable-stream@~1.0.26-4: - version "1.0.34" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.0.34.tgz#125820e34bc842d2f2aaafafe4c2916ee32c157c" - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.1" - isarray "0.0.1" - string_decoder "~0.10.x" - -redent@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/redent/-/redent-2.0.0.tgz#c1b2007b42d57eb1389079b3c8333639d5e1ccaa" - dependencies: - indent-string "^3.0.0" - strip-indent "^2.0.0" - -reduce-css-calc@^1.2.6: - version "1.3.0" - resolved "https://registry.yarnpkg.com/reduce-css-calc/-/reduce-css-calc-1.3.0.tgz#747c914e049614a4c9cfbba629871ad1d2927716" - dependencies: - balanced-match "^0.4.2" - math-expression-evaluator "^1.2.14" - reduce-function-call "^1.0.1" - -reduce-function-call@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/reduce-function-call/-/reduce-function-call-1.0.2.tgz#5a200bf92e0e37751752fe45b0ab330fd4b6be99" - dependencies: - balanced-match "^0.4.2" - -regenerate-unicode-properties@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-7.0.0.tgz#107405afcc4a190ec5ed450ecaa00ed0cafa7a4c" - dependencies: - regenerate "^1.4.0" - -regenerate@^1.2.1, regenerate@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.0.tgz#4a856ec4b56e4077c557589cae85e7a4c8869a11" - -regenerator-runtime@^0.12.0: - version "0.12.1" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.12.1.tgz#fa1a71544764c036f8c49b13a08b2594c9f8a0de" - -regenerator-transform@^0.13.3: - version "0.13.3" - resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.13.3.tgz#264bd9ff38a8ce24b06e0636496b2c856b57bcbb" - dependencies: - private "^0.1.6" - -regex-cache@^0.4.2: - version "0.4.4" - resolved "https://registry.yarnpkg.com/regex-cache/-/regex-cache-0.4.4.tgz#75bdc58a2a1496cec48a12835bc54c8d562336dd" - dependencies: - is-equal-shallow "^0.1.3" - -regex-not@^1.0.0, regex-not@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" - dependencies: - extend-shallow "^3.0.2" - safe-regex "^1.1.0" - -regexpp@^2.0.0, regexpp@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-2.0.1.tgz#8d19d31cf632482b589049f8281f93dbcba4d07f" - -regexpu-core@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-1.0.0.tgz#86a763f58ee4d7c2f6b102e4764050de7ed90c6b" - dependencies: - regenerate "^1.2.1" - regjsgen "^0.2.0" - regjsparser "^0.1.4" - -regexpu-core@^4.1.3, regexpu-core@^4.2.0: - version "4.4.0" - resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.4.0.tgz#8d43e0d1266883969720345e70c275ee0aec0d32" - dependencies: - regenerate "^1.4.0" - regenerate-unicode-properties "^7.0.0" - regjsgen "^0.5.0" - regjsparser "^0.6.0" - unicode-match-property-ecmascript "^1.0.4" - unicode-match-property-value-ecmascript "^1.0.2" - -regjsgen@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.2.0.tgz#6c016adeac554f75823fe37ac05b92d5a4edb1f7" - -regjsgen@^0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.5.0.tgz#a7634dc08f89209c2049adda3525711fb97265dd" - -regjsparser@^0.1.4: - version "0.1.5" - resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.1.5.tgz#7ee8f84dc6fa792d3fd0ae228d24bd949ead205c" - dependencies: - jsesc "~0.5.0" - -regjsparser@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.6.0.tgz#f1e6ae8b7da2bae96c99399b868cd6c933a2ba9c" - dependencies: - jsesc "~0.5.0" - -remark-parse@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/remark-parse/-/remark-parse-5.0.0.tgz#4c077f9e499044d1d5c13f80d7a98cf7b9285d95" - dependencies: - collapse-white-space "^1.0.2" - is-alphabetical "^1.0.0" - is-decimal "^1.0.0" - is-whitespace-character "^1.0.0" - is-word-character "^1.0.0" - markdown-escapes "^1.0.0" - parse-entities "^1.1.0" - repeat-string "^1.5.4" - state-toggle "^1.0.0" - trim "0.0.1" - trim-trailing-lines "^1.0.0" - unherit "^1.0.4" - unist-util-remove-position "^1.0.0" - vfile-location "^2.0.0" - xtend "^4.0.1" - -remark-stringify@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/remark-stringify/-/remark-stringify-5.0.0.tgz#336d3a4d4a6a3390d933eeba62e8de4bd280afba" - dependencies: - ccount "^1.0.0" - is-alphanumeric "^1.0.0" - is-decimal "^1.0.0" - is-whitespace-character "^1.0.0" - longest-streak "^2.0.1" - markdown-escapes "^1.0.0" - markdown-table "^1.1.0" - mdast-util-compact "^1.0.0" - parse-entities "^1.0.2" - repeat-string "^1.5.4" - state-toggle "^1.0.0" - stringify-entities "^1.0.1" - unherit "^1.0.4" - xtend "^4.0.1" - -remark@^9.0.0: - version "9.0.0" - resolved "https://registry.yarnpkg.com/remark/-/remark-9.0.0.tgz#c5cfa8ec535c73a67c4b0f12bfdbd3a67d8b2f60" - dependencies: - remark-parse "^5.0.0" - remark-stringify "^5.0.0" - unified "^6.0.0" - -remove-trailing-separator@^1.0.1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" - -repeat-element@^1.1.2: - version "1.1.3" - resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.3.tgz#782e0d825c0c5a3bb39731f84efee6b742e6b1ce" - -repeat-string@^1.5.2, repeat-string@^1.5.4, repeat-string@^1.6.1: - version "1.6.1" - resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" - -replace-ext@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/replace-ext/-/replace-ext-1.0.0.tgz#de63128373fcbf7c3ccfa4de5a480c45a67958eb" - -require-from-string@^1.1.0: - version "1.2.1" - resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-1.2.1.tgz#529c9ccef27380adfec9a2f965b649bbee636418" - -require-uncached@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/require-uncached/-/require-uncached-1.0.3.tgz#4e0d56d6c9662fd31e43011c4b95aa49955421d3" - dependencies: - caller-path "^0.1.0" - resolve-from "^1.0.0" - -reserved-words@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/reserved-words/-/reserved-words-0.1.2.tgz#00a0940f98cd501aeaaac316411d9adc52b31ab1" - -resolve-dir@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/resolve-dir/-/resolve-dir-1.0.1.tgz#79a40644c362be82f26effe739c9bb5382046f43" - dependencies: - expand-tilde "^2.0.0" - global-modules "^1.0.0" - -resolve-from@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-1.0.1.tgz#26cbfe935d1aeeeabb29bc3fe5aeb01e93d44226" - -resolve-from@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748" - -resolve-from@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" - -resolve-protobuf-schema@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/resolve-protobuf-schema/-/resolve-protobuf-schema-2.1.0.tgz#9ca9a9e69cf192bbdaf1006ec1973948aa4a3758" - integrity sha512-kI5ffTiZWmJaS/huM8wZfEMer1eRd7oJQhDuxeCLe3t7N7mX3z94CN0xPxBQxFYQTSNz9T0i+v6inKqSdK8xrQ== - dependencies: - protocol-buffers-schema "^3.3.1" - -resolve-url@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" - -resolve@^1.3.2, resolve@^1.5.0, resolve@^1.6.0, resolve@^1.8.1: - version "1.8.1" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.8.1.tgz#82f1ec19a423ac1fbd080b0bab06ba36e84a7a26" - dependencies: - path-parse "^1.0.5" - -restore-cursor@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf" - dependencies: - onetime "^2.0.0" - signal-exit "^3.0.2" - -ret@~0.1.10: - version "0.1.15" - resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" - -rimraf@^2.2.8, rimraf@^2.6.2, 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" - -ripemd160@^2.0.0, ripemd160@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c" - dependencies: - hash-base "^3.0.0" - inherits "^2.0.1" - -rollup-plugin-babel@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/rollup-plugin-babel/-/rollup-plugin-babel-4.2.0.tgz#9a2c119b5c923928842783ec2abd306fa733054f" - dependencies: - "@babel/helper-module-imports" "^7.0.0" - rollup-pluginutils "^2.3.0" - -rollup-plugin-commonjs@^9.2.0: - version "9.2.0" - resolved "https://registry.yarnpkg.com/rollup-plugin-commonjs/-/rollup-plugin-commonjs-9.2.0.tgz#4604e25069e0c78a09e08faa95dc32dec27f7c89" - dependencies: - estree-walker "^0.5.2" - magic-string "^0.25.1" - resolve "^1.8.1" - rollup-pluginutils "^2.3.3" - -rollup-plugin-node-builtins@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/rollup-plugin-node-builtins/-/rollup-plugin-node-builtins-2.1.2.tgz#24a1fed4a43257b6b64371d8abc6ce1ab14597e9" - dependencies: - browserify-fs "^1.0.0" - buffer-es6 "^4.9.2" - crypto-browserify "^3.11.0" - process-es6 "^0.11.2" - -rollup-plugin-node-resolve@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/rollup-plugin-node-resolve/-/rollup-plugin-node-resolve-4.0.0.tgz#9bc6b8205e9936cc0e26bba2415f1ecf1e64d9b2" - dependencies: - builtin-modules "^3.0.0" - is-module "^1.0.0" - resolve "^1.8.1" - -rollup-plugin-peer-deps-external@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/rollup-plugin-peer-deps-external/-/rollup-plugin-peer-deps-external-2.2.0.tgz#99ef9231aa01736f3e9605b7c3084a0d627f665b" - -rollup-plugin-postcss@^1.6.3: - version "1.6.3" - resolved "https://registry.yarnpkg.com/rollup-plugin-postcss/-/rollup-plugin-postcss-1.6.3.tgz#18256ba66f29ecd9d42a68f4ef136b92b939ddb8" - dependencies: - chalk "^2.0.0" - concat-with-sourcemaps "^1.0.5" - cssnano "^3.10.0" - fs-extra "^5.0.0" - import-cwd "^2.1.0" - p-queue "^2.4.2" - pify "^3.0.0" - postcss "^6.0.21" - postcss-load-config "^1.2.0" - postcss-modules "^1.1.0" - promise.series "^0.2.0" - reserved-words "^0.1.2" - resolve "^1.5.0" - rollup-pluginutils "^2.0.1" - style-inject "^0.3.0" - -rollup-plugin-url@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/rollup-plugin-url/-/rollup-plugin-url-2.1.0.tgz#c06be791dfee1b9f5e0854a94cc6bb3dc2743bc0" - dependencies: - mime "^2.3.1" - mkpath "^1.0.0" - rollup-pluginutils "^2.3.3" - -rollup-pluginutils@^2.0.1, rollup-pluginutils@^2.3.0, rollup-pluginutils@^2.3.3: - version "2.3.3" - resolved "https://registry.yarnpkg.com/rollup-pluginutils/-/rollup-pluginutils-2.3.3.tgz#3aad9b1eb3e7fe8262820818840bf091e5ae6794" - dependencies: - estree-walker "^0.5.2" - micromatch "^2.3.11" - -rollup@^0.68.2: - version "0.68.2" - resolved "https://registry.yarnpkg.com/rollup/-/rollup-0.68.2.tgz#c26afb5d981ca7a1a32f76087dbde9dad4fcc653" - dependencies: - "@types/estree" "0.0.39" - "@types/node" "*" - -run-async@^2.2.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.3.0.tgz#0371ab4ae0bdd720d4166d7dfda64ff7a445a6c0" - dependencies: - is-promise "^2.1.0" - -run-node@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/run-node/-/run-node-1.0.0.tgz#46b50b946a2aa2d4947ae1d886e9856fd9cabe5e" - -rxjs@^6.1.0, rxjs@^6.3.3: - version "6.3.3" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.3.3.tgz#3c6a7fa420e844a81390fb1158a9ec614f4bad55" - dependencies: - tslib "^1.9.0" - -safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: - version "5.1.2" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" - -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" - -"safer-buffer@>= 2.1.2 < 3": - version "2.1.2" - resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" - -sax@0.5.x: - version "0.5.8" - resolved "https://registry.yarnpkg.com/sax/-/sax-0.5.8.tgz#d472db228eb331c2506b0e8c15524adb939d12c1" - -sax@~1.2.1: - version "1.2.4" - resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" - -scheduler@^0.11.2: - version "0.11.3" - resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.11.3.tgz#b5769b90cf8b1464f3f3cfcafe8e3cd7555a2d6b" - dependencies: - loose-envify "^1.1.0" - object-assign "^4.1.1" - -semver-compare@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/semver-compare/-/semver-compare-1.0.0.tgz#0dee216a1c941ab37e9efb1788f6afc5ff5537fc" - -"semver@2 || 3 || 4 || 5", semver@^5.3.0, semver@^5.4.1, semver@^5.5.0, semver@^5.5.1: - version "5.6.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.6.0.tgz#7e74256fbaa49c75aa7c7a205cc22799cac80004" - -semver@~2.3.1: - version "2.3.2" - resolved "https://registry.yarnpkg.com/semver/-/semver-2.3.2.tgz#b9848f25d6cf36333073ec9ef8856d42f1233e52" - -set-value@^0.4.3: - version "0.4.3" - resolved "https://registry.yarnpkg.com/set-value/-/set-value-0.4.3.tgz#7db08f9d3d22dc7f78e53af3c3bf4666ecdfccf1" - dependencies: - extend-shallow "^2.0.1" - is-extendable "^0.1.1" - is-plain-object "^2.0.1" - to-object-path "^0.3.0" - -set-value@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.0.tgz#71ae4a88f0feefbbf52d1ea604f3fb315ebb6274" - dependencies: - extend-shallow "^2.0.1" - is-extendable "^0.1.1" - is-plain-object "^2.0.3" - split-string "^3.0.1" - -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" - 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" - dependencies: - shebang-regex "^1.0.0" - -shebang-regex@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" - -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" - -simple-git@^1.85.0: - version "1.107.0" - resolved "https://registry.yarnpkg.com/simple-git/-/simple-git-1.107.0.tgz#12cffaf261c14d6f450f7fdb86c21ccee968b383" - dependencies: - debug "^4.0.1" - -slash@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55" - -slash@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/slash/-/slash-2.0.0.tgz#de552851a1759df3a8f206535442f5ec4ddeab44" - -slice-ansi@0.0.4: - version "0.0.4" - resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-0.0.4.tgz#edbf8903f66f7ce2f8eafd6ceed65e264c831b35" - -slice-ansi@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-1.0.0.tgz#044f1a49d8842ff307aad6b505ed178bd950134d" - dependencies: - is-fullwidth-code-point "^2.0.0" - -slice-ansi@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-2.0.0.tgz#5373bdb8559b45676e8541c66916cdd6251612e7" - dependencies: - ansi-styles "^3.2.0" - astral-regex "^1.0.0" - is-fullwidth-code-point "^2.0.0" - -snapdragon-node@^2.0.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" - dependencies: - define-property "^1.0.0" - isobject "^3.0.0" - snapdragon-util "^3.0.1" - -snapdragon-util@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2" - dependencies: - kind-of "^3.2.0" - -snapdragon@^0.8.1: - version "0.8.2" - resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d" - dependencies: - base "^0.11.1" - debug "^2.2.0" - define-property "^0.2.5" - extend-shallow "^2.0.1" - map-cache "^0.2.2" - source-map "^0.5.6" - source-map-resolve "^0.5.0" - use "^3.1.0" - -sort-keys@^1.0.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/sort-keys/-/sort-keys-1.1.2.tgz#441b6d4d346798f1b4e49e8920adfba0e543f9ad" - dependencies: - is-plain-obj "^1.0.0" - -source-map-resolve@^0.5.0: - version "0.5.2" - resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.2.tgz#72e2cc34095543e43b2c62b2c4c10d4a9054f259" - dependencies: - atob "^2.1.1" - decode-uri-component "^0.2.0" - resolve-url "^0.2.1" - source-map-url "^0.4.0" - urix "^0.1.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.1.x: - version "0.1.43" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.1.43.tgz#c24bc146ca517c1471f5dacbe2571b2b7f9e3346" - dependencies: - amdefine ">=0.0.4" - -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.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" - -sourcemap-codec@^1.4.1: - version "1.4.4" - resolved "https://registry.yarnpkg.com/sourcemap-codec/-/sourcemap-codec-1.4.4.tgz#c63ea927c029dd6bd9a2b7fa03b3fec02ad56e9f" - -spdx-correct@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.0.tgz#fb83e504445268f154b074e218c87c003cd31df4" - dependencies: - spdx-expression-parse "^3.0.0" - spdx-license-ids "^3.0.0" - -spdx-exceptions@^2.1.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz#2ea450aee74f2a89bfb94519c07fcd6f41322977" - -spdx-expression-parse@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz#99e119b7a5da00e05491c9fa338b7904823b41d0" - dependencies: - spdx-exceptions "^2.1.0" - spdx-license-ids "^3.0.0" - -spdx-license-ids@^3.0.0: - version "3.0.2" - resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.2.tgz#a59efc09784c2a5bada13cfeaf5c75dd214044d2" - -specificity@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/specificity/-/specificity-0.4.1.tgz#aab5e645012db08ba182e151165738d00887b019" - -split-string@^3.0.1, split-string@^3.0.2: - version "3.1.0" - resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" - dependencies: - extend-shallow "^3.0.0" - -sprintf-js@~1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" - -staged-git-files@1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/staged-git-files/-/staged-git-files-1.1.2.tgz#4326d33886dc9ecfa29a6193bf511ba90a46454b" - -state-toggle@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/state-toggle/-/state-toggle-1.0.1.tgz#c3cb0974f40a6a0f8e905b96789eb41afa1cde3a" - -static-extend@^0.1.1: - version "0.1.2" - resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" - dependencies: - define-property "^0.2.5" - object-copy "^0.1.0" - -strict-uri-encode@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713" - -string-argv@^0.0.2: - version "0.0.2" - resolved "https://registry.yarnpkg.com/string-argv/-/string-argv-0.0.2.tgz#dac30408690c21f3c3630a3ff3a05877bdcbd736" - -string-hash@^1.1.1: - version "1.1.3" - resolved "https://registry.yarnpkg.com/string-hash/-/string-hash-1.1.3.tgz#e8aafc0ac1855b4666929ed7dd1275df5d6c811b" - -string-range@~1.2, string-range@~1.2.1: - version "1.2.2" - resolved "https://registry.yarnpkg.com/string-range/-/string-range-1.2.2.tgz#a893ed347e72299bc83befbbf2a692a8d239d5dd" - -string-width@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" - dependencies: - code-point-at "^1.0.0" - is-fullwidth-code-point "^1.0.0" - strip-ansi "^3.0.0" - -string-width@^2.1.0, string-width@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" - dependencies: - is-fullwidth-code-point "^2.0.0" - strip-ansi "^4.0.0" - -string_decoder@^1.1.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.2.0.tgz#fe86e738b19544afe70469243b2a1ee9240eae8d" - dependencies: - safe-buffer "~5.1.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.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" - dependencies: - safe-buffer "~5.1.0" - -stringify-entities@^1.0.1: - version "1.3.2" - resolved "https://registry.yarnpkg.com/stringify-entities/-/stringify-entities-1.3.2.tgz#a98417e5471fd227b3e45d3db1861c11caf668f7" - dependencies: - character-entities-html4 "^1.0.0" - character-entities-legacy "^1.0.0" - is-alphanumerical "^1.0.0" - is-hexadecimal "^1.0.0" - -stringify-object@^3.2.2: - version "3.3.0" - resolved "https://registry.yarnpkg.com/stringify-object/-/stringify-object-3.3.0.tgz#703065aefca19300d3ce88af4f5b3956d7556629" - dependencies: - get-own-enumerable-property-symbols "^3.0.0" - is-obj "^1.0.1" - is-regexp "^1.0.0" - -strip-ansi@^3.0.0, strip-ansi@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" - dependencies: - ansi-regex "^2.0.0" - -strip-ansi@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" - dependencies: - ansi-regex "^3.0.0" - -strip-ansi@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.0.0.tgz#f78f68b5d0866c20b2c9b8c61b5298508dc8756f" - dependencies: - ansi-regex "^4.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-eof@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" - -strip-indent@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-2.0.0.tgz#5ef8db295d01e6ed6cbf7aab96998d7822527b68" - -strip-json-comments@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" - -strip-outer@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/strip-outer/-/strip-outer-1.0.1.tgz#b2fd2abf6604b9d1e6013057195df836b8a9d631" - dependencies: - escape-string-regexp "^1.0.2" - -strip-url-auth@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/strip-url-auth/-/strip-url-auth-1.0.1.tgz#22b0fa3a41385b33be3f331551bbb837fa0cd7ae" - -style-inject@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/style-inject/-/style-inject-0.3.0.tgz#d21c477affec91811cc82355832a700d22bf8dd3" - -style-search@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/style-search/-/style-search-0.1.0.tgz#7958c793e47e32e07d2b5cafe5c0bf8e12e77902" - -stylelint-config-recommended@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/stylelint-config-recommended/-/stylelint-config-recommended-2.1.0.tgz#f526d5c771c6811186d9eaedbed02195fee30858" - -stylelint@^9.9.0: - version "9.9.0" - resolved "https://registry.yarnpkg.com/stylelint/-/stylelint-9.9.0.tgz#dde466e9b049e0bd30e912ad280f1a2ecf6efdf8" - dependencies: - autoprefixer "^9.0.0" - balanced-match "^1.0.0" - chalk "^2.4.1" - cosmiconfig "^5.0.0" - debug "^4.0.0" - execall "^1.0.0" - file-entry-cache "^2.0.0" - get-stdin "^6.0.0" - global-modules "^1.0.0" - globby "^8.0.0" - globjoin "^0.1.4" - html-tags "^2.0.0" - ignore "^5.0.4" - import-lazy "^3.1.0" - imurmurhash "^0.1.4" - known-css-properties "^0.10.0" - leven "^2.1.0" - lodash "^4.17.4" - log-symbols "^2.0.0" - mathml-tag-names "^2.0.1" - meow "^5.0.0" - micromatch "^3.1.10" - normalize-selector "^0.2.0" - pify "^4.0.0" - postcss "^7.0.0" - postcss-html "^0.34.0" - postcss-jsx "^0.35.0" - postcss-less "^3.1.0" - postcss-markdown "^0.34.0" - postcss-media-query-parser "^0.2.3" - postcss-reporter "^6.0.0" - postcss-resolve-nested-selector "^0.1.1" - postcss-safe-parser "^4.0.0" - postcss-sass "^0.3.5" - postcss-scss "^2.0.0" - postcss-selector-parser "^3.1.0" - postcss-styled "^0.34.0" - postcss-syntax "^0.34.0" - postcss-value-parser "^3.3.0" - resolve-from "^4.0.0" - signal-exit "^3.0.2" - slash "^2.0.0" - specificity "^0.4.1" - string-width "^2.1.0" - style-search "^0.1.0" - sugarss "^2.0.0" - svg-tags "^1.0.0" - table "^5.0.0" - -stylus@^0.54.5: - version "0.54.5" - resolved "https://registry.yarnpkg.com/stylus/-/stylus-0.54.5.tgz#42b9560931ca7090ce8515a798ba9e6aa3d6dc79" - dependencies: - css-parse "1.7.x" - debug "*" - glob "7.0.x" - mkdirp "0.5.x" - sax "0.5.x" - source-map "0.1.x" - -sugarss@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/sugarss/-/sugarss-2.0.0.tgz#ddd76e0124b297d40bf3cca31c8b22ecb43bc61d" - dependencies: - postcss "^7.0.2" - -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.2.3: - 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.3.0, supports-color@^5.4.0, supports-color@^5.5.0: - version "5.5.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" - dependencies: - has-flag "^3.0.0" - -svg-tags@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/svg-tags/-/svg-tags-1.0.0.tgz#58f71cee3bd519b59d4b2a843b6c7de64ac04764" - -svgo@^0.7.0: - version "0.7.2" - resolved "https://registry.yarnpkg.com/svgo/-/svgo-0.7.2.tgz#9f5772413952135c6fefbf40afe6a4faa88b4bb5" - dependencies: - coa "~1.0.1" - colors "~1.1.2" - csso "~2.3.1" - js-yaml "~3.7.0" - mkdirp "~0.5.1" - sax "~1.2.1" - whet.extend "~0.9.9" - -symbol-observable@^1.1.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.2.0.tgz#c22688aed4eab3cdc2dfeacbb561660560a00804" - -table@^4.0.3: - version "4.0.3" - resolved "https://registry.yarnpkg.com/table/-/table-4.0.3.tgz#00b5e2b602f1794b9acaf9ca908a76386a7813bc" - dependencies: - ajv "^6.0.1" - ajv-keywords "^3.0.0" - chalk "^2.1.0" - lodash "^4.17.4" - slice-ansi "1.0.0" - string-width "^2.1.1" - -table@^5.0.0: - version "5.1.1" - resolved "https://registry.yarnpkg.com/table/-/table-5.1.1.tgz#92030192f1b7b51b6eeab23ed416862e47b70837" - dependencies: - ajv "^6.6.1" - lodash "^4.17.11" - slice-ansi "2.0.0" - string-width "^2.1.1" - -text-table@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" - -through@^2.3.6: - version "2.3.8" - resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" - -tmp@^0.0.33: - version "0.0.33" - resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" - dependencies: - os-tmpdir "~1.0.2" - -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" - -to-object-path@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" - dependencies: - kind-of "^3.0.2" - -to-regex-range@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38" - dependencies: - is-number "^3.0.0" - repeat-string "^1.6.1" - -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" - dependencies: - define-property "^2.0.2" - extend-shallow "^3.0.2" - regex-not "^1.0.2" - safe-regex "^1.1.0" - -trim-newlines@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-2.0.0.tgz#b403d0b91be50c331dfc4b82eeceb22c3de16d20" - -trim-repeated@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/trim-repeated/-/trim-repeated-1.0.0.tgz#e3646a2ea4e891312bf7eace6cfb05380bc01c21" - dependencies: - escape-string-regexp "^1.0.2" - -trim-right@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003" - -trim-trailing-lines@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/trim-trailing-lines/-/trim-trailing-lines-1.1.1.tgz#e0ec0810fd3c3f1730516b45f49083caaf2774d9" - -trim@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/trim/-/trim-0.0.1.tgz#5858547f6b290757ee95cccc666fb50084c460dd" - -trough@^1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/trough/-/trough-1.0.3.tgz#e29bd1614c6458d44869fc28b255ab7857ef7c24" - -tslib@^1.9.0: - version "1.9.3" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.9.3.tgz#d7e4dd79245d85428c4d7e4822a79917954ca286" - -type-check@~0.3.2: - version "0.3.2" - resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" - dependencies: - prelude-ls "~1.1.2" - -typedarray-to-buffer@~1.0.0: - version "1.0.4" - resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-1.0.4.tgz#9bb8ba0e841fb3f4cf1fe7c245e9f3fa8a5fe99c" - -typedarray@^0.0.6: - version "0.0.6" - resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" - -unherit@^1.0.4: - version "1.1.1" - resolved "https://registry.yarnpkg.com/unherit/-/unherit-1.1.1.tgz#132748da3e88eab767e08fabfbb89c5e9d28628c" - dependencies: - inherits "^2.0.1" - xtend "^4.0.1" - -unicode-canonical-property-names-ecmascript@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz#2619800c4c825800efdd8343af7dd9933cbe2818" - -unicode-match-property-ecmascript@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz#8ed2a32569961bce9227d09cd3ffbb8fed5f020c" - dependencies: - unicode-canonical-property-names-ecmascript "^1.0.4" - unicode-property-aliases-ecmascript "^1.0.4" - -unicode-match-property-value-ecmascript@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.0.2.tgz#9f1dc76926d6ccf452310564fd834ace059663d4" - -unicode-property-aliases-ecmascript@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.0.4.tgz#5a533f31b4317ea76f17d807fa0d116546111dd0" - -unified@^6.0.0: - version "6.2.0" - resolved "https://registry.yarnpkg.com/unified/-/unified-6.2.0.tgz#7fbd630f719126d67d40c644b7e3f617035f6dba" - dependencies: - bail "^1.0.0" - extend "^3.0.0" - is-plain-obj "^1.1.0" - trough "^1.0.0" - vfile "^2.0.0" - x-is-string "^0.1.0" - -union-value@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.0.tgz#5c71c34cb5bad5dcebe3ea0cd08207ba5aa1aea4" - dependencies: - arr-union "^3.1.0" - get-value "^2.0.6" - is-extendable "^0.1.1" - set-value "^0.4.3" - -uniq@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/uniq/-/uniq-1.0.1.tgz#b31c5ae8254844a3a8281541ce2b04b865a734ff" - -uniqs@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/uniqs/-/uniqs-2.0.0.tgz#ffede4b36b25290696e6e165d4a59edb998e6b02" - -unist-util-find-all-after@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/unist-util-find-all-after/-/unist-util-find-all-after-1.0.2.tgz#9be49cfbae5ca1566b27536670a92836bf2f8d6d" - dependencies: - unist-util-is "^2.0.0" - -unist-util-is@^2.0.0, unist-util-is@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/unist-util-is/-/unist-util-is-2.1.2.tgz#1193fa8f2bfbbb82150633f3a8d2eb9a1c1d55db" - -unist-util-remove-position@^1.0.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/unist-util-remove-position/-/unist-util-remove-position-1.1.2.tgz#86b5dad104d0bbfbeb1db5f5c92f3570575c12cb" - dependencies: - unist-util-visit "^1.1.0" - -unist-util-stringify-position@^1.0.0, unist-util-stringify-position@^1.1.1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/unist-util-stringify-position/-/unist-util-stringify-position-1.1.2.tgz#3f37fcf351279dcbca7480ab5889bb8a832ee1c6" - -unist-util-visit-parents@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/unist-util-visit-parents/-/unist-util-visit-parents-2.0.1.tgz#63fffc8929027bee04bfef7d2cce474f71cb6217" - dependencies: - unist-util-is "^2.1.2" - -unist-util-visit@^1.1.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/unist-util-visit/-/unist-util-visit-1.4.0.tgz#1cb763647186dc26f5e1df5db6bd1e48b3cc2fb1" - dependencies: - unist-util-visit-parents "^2.0.0" - -universalify@^0.1.0: - version "0.1.2" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" - -unset-value@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" - dependencies: - has-value "^0.3.1" - isobject "^3.0.0" - -uri-js@^4.2.2: - version "4.2.2" - resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0" - 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" - -use@^3.1.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" - -util-deprecate@^1.0.1, util-deprecate@~1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" - -validate-npm-package-license@^3.0.1: - version "3.0.4" - resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" - dependencies: - spdx-correct "^3.0.0" - spdx-expression-parse "^3.0.0" - -vendors@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/vendors/-/vendors-1.0.2.tgz#7fcb5eef9f5623b156bcea89ec37d63676f21801" - -vfile-location@^2.0.0: - version "2.0.4" - resolved "https://registry.yarnpkg.com/vfile-location/-/vfile-location-2.0.4.tgz#2a5e7297dd0d9e2da4381464d04acc6b834d3e55" - -vfile-message@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/vfile-message/-/vfile-message-1.0.2.tgz#0f8a62584c5dff0f81760531b8e34f3cea554ebc" - dependencies: - unist-util-stringify-position "^1.1.1" - -vfile@^2.0.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/vfile/-/vfile-2.3.0.tgz#e62d8e72b20e83c324bc6c67278ee272488bf84a" - dependencies: - is-buffer "^1.1.4" - replace-ext "1.0.0" - unist-util-stringify-position "^1.0.0" - vfile-message "^1.0.0" - -whet.extend@~0.9.9: - version "0.9.9" - resolved "https://registry.yarnpkg.com/whet.extend/-/whet.extend-0.9.9.tgz#f877d5bf648c97e5aa542fadc16d6a259b9c11a1" - -which@^1.2.10, which@^1.2.14, which@^1.2.9: - version "1.3.1" - resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" - dependencies: - isexe "^2.0.0" - -wordwrap@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" - -wrap-ansi@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-3.0.1.tgz#288a04d87eda5c286e060dfe8f135ce8d007f8ba" - dependencies: - string-width "^2.1.1" - strip-ansi "^4.0.0" - -wrappy@1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" - -write@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/write/-/write-0.2.1.tgz#5fc03828e264cea3fe91455476f7a3c566cb0757" - dependencies: - mkdirp "^0.5.1" - -x-is-string@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/x-is-string/-/x-is-string-0.1.0.tgz#474b50865af3a49a9c4657f05acd145458f77d82" - -xtend@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/xtend/-/xtend-2.2.0.tgz#eef6b1f198c1c8deafad8b1765a04dad4a01c5a9" - -xtend@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af" - -xtend@~2.0.4: - version "2.0.6" - resolved "https://registry.yarnpkg.com/xtend/-/xtend-2.0.6.tgz#5ea657a6dba447069c2e59c58a1138cb0c5e6cee" - dependencies: - is-object "~0.1.2" - object-keys "~0.2.0" - -xtend@~2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/xtend/-/xtend-2.1.2.tgz#6efecc2a4dad8e6962c4901b337ce7ba87b5d28b" - dependencies: - object-keys "~0.4.0" - -xtend@~3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/xtend/-/xtend-3.0.0.tgz#5cce7407baf642cba7becda568111c493f59665a" - -yargs-parser@^10.0.0: - version "10.1.0" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-10.1.0.tgz#7202265b89f7e9e9f2e5765e0fe735a905edbaa8" - dependencies: - camelcase "^4.1.0" diff --git a/extensions/ohif-dicom-pdf-extension/.babelrc b/extensions/ohif-dicom-pdf-extension/.babelrc deleted file mode 100644 index 430b9904b69..00000000000 --- a/extensions/ohif-dicom-pdf-extension/.babelrc +++ /dev/null @@ -1,14 +0,0 @@ -{ - "presets": [ - ["@babel/preset-env", { - "targets": { - "ie": "11" - } - }], - "@babel/preset-react" - ], - "plugins": [ - "@babel/plugin-proposal-class-properties", - "@babel/plugin-transform-runtime" - ] -} diff --git a/extensions/ohif-dicom-pdf-extension/.editorconfig b/extensions/ohif-dicom-pdf-extension/.editorconfig deleted file mode 100644 index 9d08a1a828a..00000000000 --- a/extensions/ohif-dicom-pdf-extension/.editorconfig +++ /dev/null @@ -1,9 +0,0 @@ -root = true - -[*] -charset = utf-8 -indent_style = space -indent_size = 2 -end_of_line = lf -insert_final_newline = true -trim_trailing_whitespace = true diff --git a/extensions/ohif-dicom-pdf-extension/.eslintrc b/extensions/ohif-dicom-pdf-extension/.eslintrc deleted file mode 100644 index 77d67cd94b1..00000000000 --- a/extensions/ohif-dicom-pdf-extension/.eslintrc +++ /dev/null @@ -1,16 +0,0 @@ -{ - "extends": [ - "react-app", - "eslint:recommended", - "plugin:react/recommended" - ], - "parser": "babel-eslint", - "env": { - "jest": true - }, - "settings": { - "react": { - "version": "detect", - }, - }, -} diff --git a/extensions/ohif-dicom-pdf-extension/.gitignore b/extensions/ohif-dicom-pdf-extension/.gitignore deleted file mode 100644 index 2ac57034390..00000000000 --- a/extensions/ohif-dicom-pdf-extension/.gitignore +++ /dev/null @@ -1,23 +0,0 @@ - -# See https://help.github.com/ignore-files/ for more about ignoring files. - -# dependencies -node_modules - -# builds -build -dist -.rpt2_cache - -# misc -.DS_Store -.env -.env.local -.env.development.local -.env.test.local -.env.production.local - -npm-debug.log* -yarn-debug.log* -yarn-error.log* -.idea diff --git a/extensions/ohif-dicom-pdf-extension/.prettierrc b/extensions/ohif-dicom-pdf-extension/.prettierrc deleted file mode 100644 index 12348ec6acf..00000000000 --- a/extensions/ohif-dicom-pdf-extension/.prettierrc +++ /dev/null @@ -1,9 +0,0 @@ -{ - "trailingComma": "es5", - "printWidth": 80, - "proseWrap": "always", - "tabWidth": 2, - "semi": true, - "singleQuote": true, - "endOfLine": "lf" -} diff --git a/extensions/ohif-dicom-pdf-extension/.travis.yml b/extensions/ohif-dicom-pdf-extension/.travis.yml deleted file mode 100644 index 984658c939e..00000000000 --- a/extensions/ohif-dicom-pdf-extension/.travis.yml +++ /dev/null @@ -1,4 +0,0 @@ -language: node_js -node_js: - - 9 - - 8 diff --git a/extensions/ohif-dicom-pdf-extension/package.json b/extensions/ohif-dicom-pdf-extension/package.json deleted file mode 100644 index c752ffbf375..00000000000 --- a/extensions/ohif-dicom-pdf-extension/package.json +++ /dev/null @@ -1,91 +0,0 @@ -{ - "name": "@ohif/extension-dicom-pdf", - "version": "0.0.8", - "description": "OHIF extension for Dicom PDF", - "author": "OHIF", - "license": "MIT", - "repository": "OHIF/Viewers", - "main": "dist/index.umd.js", - "module": "dist/index.es.js", - "jsnext:main": "dist/index.es.js", - "engines": { - "node": ">=8", - "npm": ">=5" - }, - "scripts": { - "build": "rollup -c", - "prepublishOnly": "npm run build", - "start": "rollup -c -w", - "lint": "eslint -c .eslintrc --fix src && prettier --single-quote --write src/**/*.{js,jsx,json,css}" - }, - "peerDependencies": { - "dicom-parser": "^1.8.3", - "ohif-core": "^0.6.0", - "prop-types": "^15.6.2", - "react": "^15.0.0 || ^16.0.0", - "react-dom": "^15.0.0 || ^16.0.0" - }, - "dependencies": { - "@babel/runtime": "^7.2.0", - "classnames": "^2.2.6", - "lodash.isequal": "^4.5.0" - }, - "devDependencies": { - "@babel/core": "^7.2.2", - "@babel/plugin-external-helpers": "^7.2.0", - "@babel/plugin-proposal-class-properties": "^7.2.3", - "@babel/plugin-transform-runtime": "^7.2.0", - "@babel/preset-env": "^7.2.3", - "@babel/preset-react": "^7.0.0", - "@svgr/rollup": "^4.1.0", - "babel-eslint": "^9.0.0", - "cross-env": "^5.2.0", - "eslint": "5.6.0", - "eslint-plugin-import": "^2.14.0", - "eslint-plugin-node": "^8.0.0", - "eslint-plugin-promise": "^4.0.1", - "eslint-plugin-react": "^7.11.1", - "gh-pages": "^2.0.1", - "husky": "^1.3.1", - "lint-staged": "^8.1.0", - "lodash.clonedeep": "^4.5.0", - "prettier": "^1.15.3", - "react": "^16.6.3", - "react-dom": "^16.6.3", - "react-scripts": "^2.1.2", - "rollup": "^0.68.2", - "rollup-plugin-babel": "^4.2.0", - "rollup-plugin-commonjs": "^9.2.0", - "rollup-plugin-node-builtins": "^2.1.2", - "rollup-plugin-node-resolve": "^4.0.0", - "rollup-plugin-peer-deps-external": "^2.2.0", - "rollup-plugin-postcss": "^1.6.3", - "rollup-plugin-url": "^2.1.0", - "stylelint": "^9.9.0", - "stylelint-config-recommended": "^2.1.0", - "stylus": "^0.54.5" - }, - "husky": { - "hooks": { - "pre-commit": "lint-staged" - } - }, - "lint-staged": { - "src/**/*.{js,jsx,json,css}": [ - "prettier --single-quote --write", - "git add" - ] - }, - "browserslist": [ - ">0.2%", - "not dead", - "not ie <= 11", - "not op_mini all" - ], - "files": [ - "dist" - ], - "publishConfig": { - "access": "public" - } -} diff --git a/extensions/ohif-dicom-pdf-extension/rollup.config.js b/extensions/ohif-dicom-pdf-extension/rollup.config.js deleted file mode 100644 index f3f4a7312fa..00000000000 --- a/extensions/ohif-dicom-pdf-extension/rollup.config.js +++ /dev/null @@ -1,55 +0,0 @@ -import babel from 'rollup-plugin-babel' -import commonjs from 'rollup-plugin-commonjs' -import external from 'rollup-plugin-peer-deps-external' -import postcss from 'rollup-plugin-postcss' -import resolve from 'rollup-plugin-node-resolve' -import url from 'rollup-plugin-url' -import svgr from '@svgr/rollup' -import pkg from './package.json' -// Deal with https://github.com/rollup/rollup-plugin-commonjs/issues/297 -import builtins from 'rollup-plugin-node-builtins'; - -const globals = { - 'react': 'React', - 'react-dom': 'ReactDOM', - 'prop-types': 'PropTypes', - 'ohif-core': 'OHIF', - 'dicom-parser': 'dicomParser' -}; - -export default { - input: 'src/index.js', - output: [ - { - file: pkg.main, - format: 'umd', - name: 'ohif-dicom-pdf-extension', - sourcemap: true, - globals - }, - { - file: pkg.module, - format: 'es', - sourcemap: true, - globals - } - ], - plugins: [ - builtins(), - external(), - postcss({ - modules: false - }), - url(), - svgr(), - babel({ - exclude: 'node_modules/**', - plugins: [ '@babel/external-helpers' ], - externalHelpers: true, - runtimeHelpers: true - }), - resolve(), - commonjs() - ], - external: Object.keys(pkg.peerDependencies || {}), -} diff --git a/extensions/ohif-dicom-pdf-extension/yarn.lock b/extensions/ohif-dicom-pdf-extension/yarn.lock deleted file mode 100644 index dc40e77f6ae..00000000000 --- a/extensions/ohif-dicom-pdf-extension/yarn.lock +++ /dev/null @@ -1,10920 +0,0 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -"@babel/code-frame@7.0.0", "@babel/code-frame@^7.0.0", "@babel/code-frame@^7.0.0-beta.35": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.0.0.tgz#06e2ab19bdb535385559aabb5ba59729482800f8" - dependencies: - "@babel/highlight" "^7.0.0" - -"@babel/core@7.1.6": - version "7.1.6" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.1.6.tgz#3733cbee4317429bc87c62b29cf8587dba7baeb3" - dependencies: - "@babel/code-frame" "^7.0.0" - "@babel/generator" "^7.1.6" - "@babel/helpers" "^7.1.5" - "@babel/parser" "^7.1.6" - "@babel/template" "^7.1.2" - "@babel/traverse" "^7.1.6" - "@babel/types" "^7.1.6" - convert-source-map "^1.1.0" - debug "^4.1.0" - json5 "^2.1.0" - lodash "^4.17.10" - resolve "^1.3.2" - semver "^5.4.1" - source-map "^0.5.0" - -"@babel/core@^7.0.1", "@babel/core@^7.1.2", "@babel/core@^7.1.6": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.2.0.tgz#a4dd3814901998e93340f0086e9867fefa163ada" - dependencies: - "@babel/code-frame" "^7.0.0" - "@babel/generator" "^7.2.0" - "@babel/helpers" "^7.2.0" - "@babel/parser" "^7.2.0" - "@babel/template" "^7.1.2" - "@babel/traverse" "^7.1.6" - "@babel/types" "^7.2.0" - convert-source-map "^1.1.0" - debug "^4.1.0" - json5 "^2.1.0" - lodash "^4.17.10" - resolve "^1.3.2" - semver "^5.4.1" - source-map "^0.5.0" - -"@babel/core@^7.2.2": - version "7.2.2" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.2.2.tgz#07adba6dde27bb5ad8d8672f15fde3e08184a687" - dependencies: - "@babel/code-frame" "^7.0.0" - "@babel/generator" "^7.2.2" - "@babel/helpers" "^7.2.0" - "@babel/parser" "^7.2.2" - "@babel/template" "^7.2.2" - "@babel/traverse" "^7.2.2" - "@babel/types" "^7.2.2" - convert-source-map "^1.1.0" - debug "^4.1.0" - json5 "^2.1.0" - lodash "^4.17.10" - resolve "^1.3.2" - semver "^5.4.1" - source-map "^0.5.0" - -"@babel/generator@^7.1.6", "@babel/generator@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.2.0.tgz#eaf3821fa0301d9d4aef88e63d4bcc19b73ba16c" - dependencies: - "@babel/types" "^7.2.0" - jsesc "^2.5.1" - lodash "^4.17.10" - source-map "^0.5.0" - trim-right "^1.0.1" - -"@babel/generator@^7.2.2": - version "7.2.2" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.2.2.tgz#18c816c70962640eab42fe8cae5f3947a5c65ccc" - dependencies: - "@babel/types" "^7.2.2" - jsesc "^2.5.1" - lodash "^4.17.10" - source-map "^0.5.0" - trim-right "^1.0.1" - -"@babel/helper-annotate-as-pure@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.0.0.tgz#323d39dd0b50e10c7c06ca7d7638e6864d8c5c32" - dependencies: - "@babel/types" "^7.0.0" - -"@babel/helper-builder-binary-assignment-operator-visitor@^7.1.0": - version "7.1.0" - resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.1.0.tgz#6b69628dfe4087798e0c4ed98e3d4a6b2fbd2f5f" - dependencies: - "@babel/helper-explode-assignable-expression" "^7.1.0" - "@babel/types" "^7.0.0" - -"@babel/helper-builder-react-jsx@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/helper-builder-react-jsx/-/helper-builder-react-jsx-7.0.0.tgz#fa154cb53eb918cf2a9a7ce928e29eb649c5acdb" - dependencies: - "@babel/types" "^7.0.0" - esutils "^2.0.0" - -"@babel/helper-call-delegate@^7.1.0": - version "7.1.0" - resolved "https://registry.yarnpkg.com/@babel/helper-call-delegate/-/helper-call-delegate-7.1.0.tgz#6a957f105f37755e8645343d3038a22e1449cc4a" - dependencies: - "@babel/helper-hoist-variables" "^7.0.0" - "@babel/traverse" "^7.1.0" - "@babel/types" "^7.0.0" - -"@babel/helper-create-class-features-plugin@^7.2.3": - version "7.2.3" - resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.2.3.tgz#f6e719abb90cb7f4a69591e35fd5eb89047c4a7c" - dependencies: - "@babel/helper-function-name" "^7.1.0" - "@babel/helper-member-expression-to-functions" "^7.0.0" - "@babel/helper-optimise-call-expression" "^7.0.0" - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-replace-supers" "^7.2.3" - -"@babel/helper-define-map@^7.1.0": - version "7.1.0" - resolved "https://registry.yarnpkg.com/@babel/helper-define-map/-/helper-define-map-7.1.0.tgz#3b74caec329b3c80c116290887c0dd9ae468c20c" - dependencies: - "@babel/helper-function-name" "^7.1.0" - "@babel/types" "^7.0.0" - lodash "^4.17.10" - -"@babel/helper-explode-assignable-expression@^7.1.0": - version "7.1.0" - resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.1.0.tgz#537fa13f6f1674df745b0c00ec8fe4e99681c8f6" - dependencies: - "@babel/traverse" "^7.1.0" - "@babel/types" "^7.0.0" - -"@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" - dependencies: - "@babel/helper-get-function-arity" "^7.0.0" - "@babel/template" "^7.1.0" - "@babel/types" "^7.0.0" - -"@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" - dependencies: - "@babel/types" "^7.0.0" - -"@babel/helper-hoist-variables@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.0.0.tgz#46adc4c5e758645ae7a45deb92bab0918c23bb88" - dependencies: - "@babel/types" "^7.0.0" - -"@babel/helper-member-expression-to-functions@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.0.0.tgz#8cd14b0a0df7ff00f009e7d7a436945f47c7a16f" - dependencies: - "@babel/types" "^7.0.0" - -"@babel/helper-module-imports@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.0.0.tgz#96081b7111e486da4d2cd971ad1a4fe216cc2e3d" - dependencies: - "@babel/types" "^7.0.0" - -"@babel/helper-module-transforms@^7.1.0": - version "7.1.0" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.1.0.tgz#470d4f9676d9fad50b324cdcce5fbabbc3da5787" - dependencies: - "@babel/helper-module-imports" "^7.0.0" - "@babel/helper-simple-access" "^7.1.0" - "@babel/helper-split-export-declaration" "^7.0.0" - "@babel/template" "^7.1.0" - "@babel/types" "^7.0.0" - lodash "^4.17.10" - -"@babel/helper-optimise-call-expression@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.0.0.tgz#a2920c5702b073c15de51106200aa8cad20497d5" - 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" - -"@babel/helper-regex@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/helper-regex/-/helper-regex-7.0.0.tgz#2c1718923b57f9bbe64705ffe5640ac64d9bdb27" - dependencies: - lodash "^4.17.10" - -"@babel/helper-remap-async-to-generator@^7.1.0": - version "7.1.0" - resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.1.0.tgz#361d80821b6f38da75bd3f0785ece20a88c5fe7f" - dependencies: - "@babel/helper-annotate-as-pure" "^7.0.0" - "@babel/helper-wrap-function" "^7.1.0" - "@babel/template" "^7.1.0" - "@babel/traverse" "^7.1.0" - "@babel/types" "^7.0.0" - -"@babel/helper-replace-supers@^7.1.0": - version "7.1.0" - resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.1.0.tgz#5fc31de522ec0ef0899dc9b3e7cf6a5dd655f362" - dependencies: - "@babel/helper-member-expression-to-functions" "^7.0.0" - "@babel/helper-optimise-call-expression" "^7.0.0" - "@babel/traverse" "^7.1.0" - "@babel/types" "^7.0.0" - -"@babel/helper-replace-supers@^7.2.3": - version "7.2.3" - resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.2.3.tgz#19970020cf22677d62b3a689561dbd9644d8c5e5" - dependencies: - "@babel/helper-member-expression-to-functions" "^7.0.0" - "@babel/helper-optimise-call-expression" "^7.0.0" - "@babel/traverse" "^7.2.3" - "@babel/types" "^7.0.0" - -"@babel/helper-simple-access@^7.1.0": - version "7.1.0" - resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.1.0.tgz#65eeb954c8c245beaa4e859da6188f39d71e585c" - dependencies: - "@babel/template" "^7.1.0" - "@babel/types" "^7.0.0" - -"@babel/helper-split-export-declaration@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.0.0.tgz#3aae285c0311c2ab095d997b8c9a94cad547d813" - dependencies: - "@babel/types" "^7.0.0" - -"@babel/helper-wrap-function@^7.1.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.2.0.tgz#c4e0012445769e2815b55296ead43a958549f6fa" - dependencies: - "@babel/helper-function-name" "^7.1.0" - "@babel/template" "^7.1.0" - "@babel/traverse" "^7.1.0" - "@babel/types" "^7.2.0" - -"@babel/helpers@^7.1.5", "@babel/helpers@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.2.0.tgz#8335f3140f3144270dc63c4732a4f8b0a50b7a21" - dependencies: - "@babel/template" "^7.1.2" - "@babel/traverse" "^7.1.5" - "@babel/types" "^7.2.0" - -"@babel/highlight@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.0.0.tgz#f710c38c8d458e6dd9a201afb637fcb781ce99e4" - dependencies: - chalk "^2.0.0" - esutils "^2.0.2" - js-tokens "^4.0.0" - -"@babel/parser@^7.0.0", "@babel/parser@^7.1.2", "@babel/parser@^7.1.6", "@babel/parser@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.2.0.tgz#02d01dbc330b6cbf36b76ac93c50752c69027065" - -"@babel/parser@^7.2.2", "@babel/parser@^7.2.3": - version "7.2.3" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.2.3.tgz#32f5df65744b70888d17872ec106b02434ba1489" - -"@babel/plugin-external-helpers@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-external-helpers/-/plugin-external-helpers-7.2.0.tgz#7f4cb7dee651cd380d2034847d914288467a6be4" - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-proposal-async-generator-functions@^7.1.0", "@babel/plugin-proposal-async-generator-functions@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.2.0.tgz#b289b306669dce4ad20b0252889a15768c9d417e" - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-remap-async-to-generator" "^7.1.0" - "@babel/plugin-syntax-async-generators" "^7.2.0" - -"@babel/plugin-proposal-class-properties@7.1.0": - version "7.1.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.1.0.tgz#9af01856b1241db60ec8838d84691aa0bd1e8df4" - dependencies: - "@babel/helper-function-name" "^7.1.0" - "@babel/helper-member-expression-to-functions" "^7.0.0" - "@babel/helper-optimise-call-expression" "^7.0.0" - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-replace-supers" "^7.1.0" - "@babel/plugin-syntax-class-properties" "^7.0.0" - -"@babel/plugin-proposal-class-properties@^7.2.3": - version "7.2.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.2.3.tgz#c9e1294363b346cff333007a92080f3203698461" - dependencies: - "@babel/helper-create-class-features-plugin" "^7.2.3" - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-proposal-decorators@7.1.6": - version "7.1.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.1.6.tgz#460c31edbd01953efe45d491583b3ec31661d689" - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-replace-supers" "^7.1.0" - "@babel/helper-split-export-declaration" "^7.0.0" - "@babel/plugin-syntax-decorators" "^7.1.0" - -"@babel/plugin-proposal-json-strings@^7.0.0", "@babel/plugin-proposal-json-strings@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.2.0.tgz#568ecc446c6148ae6b267f02551130891e29f317" - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-syntax-json-strings" "^7.2.0" - -"@babel/plugin-proposal-object-rest-spread@7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.0.0.tgz#9a17b547f64d0676b6c9cecd4edf74a82ab85e7e" - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-syntax-object-rest-spread" "^7.0.0" - -"@babel/plugin-proposal-object-rest-spread@^7.0.0", "@babel/plugin-proposal-object-rest-spread@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.2.0.tgz#88f5fec3e7ad019014c97f7ee3c992f0adbf7fb8" - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-syntax-object-rest-spread" "^7.2.0" - -"@babel/plugin-proposal-optional-catch-binding@^7.0.0", "@babel/plugin-proposal-optional-catch-binding@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.2.0.tgz#135d81edb68a081e55e56ec48541ece8065c38f5" - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-syntax-optional-catch-binding" "^7.2.0" - -"@babel/plugin-proposal-unicode-property-regex@^7.0.0", "@babel/plugin-proposal-unicode-property-regex@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.2.0.tgz#abe7281fe46c95ddc143a65e5358647792039520" - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-regex" "^7.0.0" - regexpu-core "^4.2.0" - -"@babel/plugin-syntax-async-generators@^7.0.0", "@babel/plugin-syntax-async-generators@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.2.0.tgz#69e1f0db34c6f5a0cf7e2b3323bf159a76c8cb7f" - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-syntax-class-properties@^7.0.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.2.0.tgz#23b3b7b9bcdabd73672a9149f728cd3be6214812" - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-syntax-decorators@^7.1.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.2.0.tgz#c50b1b957dcc69e4b1127b65e1c33eef61570c1b" - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-syntax-dynamic-import@7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.0.0.tgz#6dfb7d8b6c3be14ce952962f658f3b7eb54c33ee" - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-syntax-flow@^7.0.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.2.0.tgz#a765f061f803bc48f240c26f8747faf97c26bf7c" - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-syntax-json-strings@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.2.0.tgz#72bd13f6ffe1d25938129d2a186b11fd62951470" - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-syntax-jsx@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.2.0.tgz#0b85a3b4bc7cdf4cc4b8bf236335b907ca22e7c7" - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-syntax-object-rest-spread@^7.0.0", "@babel/plugin-syntax-object-rest-spread@^7.2.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" - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-syntax-optional-catch-binding@^7.0.0", "@babel/plugin-syntax-optional-catch-binding@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.2.0.tgz#a94013d6eda8908dfe6a477e7f9eda85656ecf5c" - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-syntax-typescript@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.2.0.tgz#55d240536bd314dcbbec70fd949c5cabaed1de29" - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-arrow-functions@^7.0.0", "@babel/plugin-transform-arrow-functions@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.2.0.tgz#9aeafbe4d6ffc6563bf8f8372091628f00779550" - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-async-to-generator@^7.1.0", "@babel/plugin-transform-async-to-generator@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.2.0.tgz#68b8a438663e88519e65b776f8938f3445b1a2ff" - dependencies: - "@babel/helper-module-imports" "^7.0.0" - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-remap-async-to-generator" "^7.1.0" - -"@babel/plugin-transform-block-scoped-functions@^7.0.0", "@babel/plugin-transform-block-scoped-functions@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.2.0.tgz#5d3cc11e8d5ddd752aa64c9148d0db6cb79fd190" - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-block-scoping@^7.1.5", "@babel/plugin-transform-block-scoping@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.2.0.tgz#f17c49d91eedbcdf5dd50597d16f5f2f770132d4" - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - lodash "^4.17.10" - -"@babel/plugin-transform-classes@7.1.0": - version "7.1.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.1.0.tgz#ab3f8a564361800cbc8ab1ca6f21108038432249" - dependencies: - "@babel/helper-annotate-as-pure" "^7.0.0" - "@babel/helper-define-map" "^7.1.0" - "@babel/helper-function-name" "^7.1.0" - "@babel/helper-optimise-call-expression" "^7.0.0" - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-replace-supers" "^7.1.0" - "@babel/helper-split-export-declaration" "^7.0.0" - globals "^11.1.0" - -"@babel/plugin-transform-classes@^7.1.0", "@babel/plugin-transform-classes@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.2.0.tgz#374f8876075d7d21fea55aeb5c53561259163f96" - dependencies: - "@babel/helper-annotate-as-pure" "^7.0.0" - "@babel/helper-define-map" "^7.1.0" - "@babel/helper-function-name" "^7.1.0" - "@babel/helper-optimise-call-expression" "^7.0.0" - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-replace-supers" "^7.1.0" - "@babel/helper-split-export-declaration" "^7.0.0" - globals "^11.1.0" - -"@babel/plugin-transform-computed-properties@^7.0.0", "@babel/plugin-transform-computed-properties@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.2.0.tgz#83a7df6a658865b1c8f641d510c6f3af220216da" - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-destructuring@7.1.3": - version "7.1.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.1.3.tgz#e69ff50ca01fac6cb72863c544e516c2b193012f" - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-destructuring@^7.0.0", "@babel/plugin-transform-destructuring@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.2.0.tgz#e75269b4b7889ec3a332cd0d0c8cff8fed0dc6f3" - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-dotall-regex@^7.0.0", "@babel/plugin-transform-dotall-regex@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.2.0.tgz#f0aabb93d120a8ac61e925ea0ba440812dbe0e49" - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-regex" "^7.0.0" - regexpu-core "^4.1.3" - -"@babel/plugin-transform-duplicate-keys@^7.0.0", "@babel/plugin-transform-duplicate-keys@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.2.0.tgz#d952c4930f312a4dbfff18f0b2914e60c35530b3" - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-exponentiation-operator@^7.1.0", "@babel/plugin-transform-exponentiation-operator@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.2.0.tgz#a63868289e5b4007f7054d46491af51435766008" - dependencies: - "@babel/helper-builder-binary-assignment-operator-visitor" "^7.1.0" - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-flow-strip-types@7.1.6": - version "7.1.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.1.6.tgz#4b7be62604d39e63cfe23b1d00d63e9fb7e763ba" - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-syntax-flow" "^7.0.0" - -"@babel/plugin-transform-for-of@^7.0.0", "@babel/plugin-transform-for-of@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.2.0.tgz#ab7468befa80f764bb03d3cb5eef8cc998e1cad9" - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-function-name@^7.1.0", "@babel/plugin-transform-function-name@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.2.0.tgz#f7930362829ff99a3174c39f0afcc024ef59731a" - dependencies: - "@babel/helper-function-name" "^7.1.0" - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-literals@^7.0.0", "@babel/plugin-transform-literals@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.2.0.tgz#690353e81f9267dad4fd8cfd77eafa86aba53ea1" - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-modules-amd@^7.1.0", "@babel/plugin-transform-modules-amd@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.2.0.tgz#82a9bce45b95441f617a24011dc89d12da7f4ee6" - dependencies: - "@babel/helper-module-transforms" "^7.1.0" - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-modules-commonjs@^7.1.0", "@babel/plugin-transform-modules-commonjs@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.2.0.tgz#c4f1933f5991d5145e9cfad1dfd848ea1727f404" - dependencies: - "@babel/helper-module-transforms" "^7.1.0" - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-simple-access" "^7.1.0" - -"@babel/plugin-transform-modules-systemjs@^7.0.0", "@babel/plugin-transform-modules-systemjs@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.2.0.tgz#912bfe9e5ff982924c81d0937c92d24994bb9068" - dependencies: - "@babel/helper-hoist-variables" "^7.0.0" - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-modules-umd@^7.1.0", "@babel/plugin-transform-modules-umd@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.2.0.tgz#7678ce75169f0877b8eb2235538c074268dd01ae" - dependencies: - "@babel/helper-module-transforms" "^7.1.0" - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-new-target@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.0.0.tgz#ae8fbd89517fa7892d20e6564e641e8770c3aa4a" - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-object-super@^7.1.0", "@babel/plugin-transform-object-super@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.2.0.tgz#b35d4c10f56bab5d650047dad0f1d8e8814b6598" - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-replace-supers" "^7.1.0" - -"@babel/plugin-transform-parameters@^7.1.0", "@babel/plugin-transform-parameters@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.2.0.tgz#0d5ad15dc805e2ea866df4dd6682bfe76d1408c2" - dependencies: - "@babel/helper-call-delegate" "^7.1.0" - "@babel/helper-get-function-arity" "^7.0.0" - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-react-constant-elements@7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.0.0.tgz#ab413e33e9c46a766f5326014bcbf9e2b34ef7a4" - dependencies: - "@babel/helper-annotate-as-pure" "^7.0.0" - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-react-constant-elements@^7.0.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.2.0.tgz#ed602dc2d8bff2f0cb1a5ce29263dbdec40779f7" - dependencies: - "@babel/helper-annotate-as-pure" "^7.0.0" - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-react-display-name@7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.0.0.tgz#93759e6c023782e52c2da3b75eca60d4f10533ee" - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-react-display-name@^7.0.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.2.0.tgz#ebfaed87834ce8dc4279609a4f0c324c156e3eb0" - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-react-jsx-self@^7.0.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.2.0.tgz#461e21ad9478f1031dd5e276108d027f1b5240ba" - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-syntax-jsx" "^7.2.0" - -"@babel/plugin-transform-react-jsx-source@^7.0.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.2.0.tgz#20c8c60f0140f5dd3cd63418d452801cf3f7180f" - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-syntax-jsx" "^7.2.0" - -"@babel/plugin-transform-react-jsx@^7.0.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.2.0.tgz#ca36b6561c4d3b45524f8efb6f0fbc9a0d1d622f" - dependencies: - "@babel/helper-builder-react-jsx" "^7.0.0" - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-syntax-jsx" "^7.2.0" - -"@babel/plugin-transform-regenerator@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.0.0.tgz#5b41686b4ed40bef874d7ed6a84bdd849c13e0c1" - dependencies: - regenerator-transform "^0.13.3" - -"@babel/plugin-transform-runtime@7.1.0": - version "7.1.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.1.0.tgz#9f76920d42551bb577e2dc594df229b5f7624b63" - dependencies: - "@babel/helper-module-imports" "^7.0.0" - "@babel/helper-plugin-utils" "^7.0.0" - resolve "^1.8.1" - semver "^5.5.1" - -"@babel/plugin-transform-runtime@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.2.0.tgz#566bc43f7d0aedc880eaddbd29168d0f248966ea" - integrity sha512-jIgkljDdq4RYDnJyQsiWbdvGeei/0MOTtSHKO/rfbd/mXBxNpdlulMx49L0HQ4pug1fXannxoqCI+fYSle9eSw== - dependencies: - "@babel/helper-module-imports" "^7.0.0" - "@babel/helper-plugin-utils" "^7.0.0" - resolve "^1.8.1" - semver "^5.5.1" - -"@babel/plugin-transform-shorthand-properties@^7.0.0", "@babel/plugin-transform-shorthand-properties@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.2.0.tgz#6333aee2f8d6ee7e28615457298934a3b46198f0" - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-spread@^7.0.0", "@babel/plugin-transform-spread@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.2.0.tgz#0c76c12a3b5826130078ee8ec84a7a8e4afd79c4" - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-sticky-regex@^7.0.0", "@babel/plugin-transform-sticky-regex@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.2.0.tgz#a1e454b5995560a9c1e0d537dfc15061fd2687e1" - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-regex" "^7.0.0" - -"@babel/plugin-transform-template-literals@^7.0.0", "@babel/plugin-transform-template-literals@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.2.0.tgz#d87ed01b8eaac7a92473f608c97c089de2ba1e5b" - dependencies: - "@babel/helper-annotate-as-pure" "^7.0.0" - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-typeof-symbol@^7.0.0", "@babel/plugin-transform-typeof-symbol@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.2.0.tgz#117d2bcec2fbf64b4b59d1f9819894682d29f2b2" - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-typescript@^7.1.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.2.0.tgz#bce7c06300434de6a860ae8acf6a442ef74a99d1" - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-syntax-typescript" "^7.2.0" - -"@babel/plugin-transform-unicode-regex@^7.0.0", "@babel/plugin-transform-unicode-regex@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.2.0.tgz#4eb8db16f972f8abb5062c161b8b115546ade08b" - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-regex" "^7.0.0" - regexpu-core "^4.1.3" - -"@babel/preset-env@7.1.6": - version "7.1.6" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.1.6.tgz#a0bf4b96b6bfcf6e000afc5b72b4abe7cc13ae97" - dependencies: - "@babel/helper-module-imports" "^7.0.0" - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-proposal-async-generator-functions" "^7.1.0" - "@babel/plugin-proposal-json-strings" "^7.0.0" - "@babel/plugin-proposal-object-rest-spread" "^7.0.0" - "@babel/plugin-proposal-optional-catch-binding" "^7.0.0" - "@babel/plugin-proposal-unicode-property-regex" "^7.0.0" - "@babel/plugin-syntax-async-generators" "^7.0.0" - "@babel/plugin-syntax-object-rest-spread" "^7.0.0" - "@babel/plugin-syntax-optional-catch-binding" "^7.0.0" - "@babel/plugin-transform-arrow-functions" "^7.0.0" - "@babel/plugin-transform-async-to-generator" "^7.1.0" - "@babel/plugin-transform-block-scoped-functions" "^7.0.0" - "@babel/plugin-transform-block-scoping" "^7.1.5" - "@babel/plugin-transform-classes" "^7.1.0" - "@babel/plugin-transform-computed-properties" "^7.0.0" - "@babel/plugin-transform-destructuring" "^7.0.0" - "@babel/plugin-transform-dotall-regex" "^7.0.0" - "@babel/plugin-transform-duplicate-keys" "^7.0.0" - "@babel/plugin-transform-exponentiation-operator" "^7.1.0" - "@babel/plugin-transform-for-of" "^7.0.0" - "@babel/plugin-transform-function-name" "^7.1.0" - "@babel/plugin-transform-literals" "^7.0.0" - "@babel/plugin-transform-modules-amd" "^7.1.0" - "@babel/plugin-transform-modules-commonjs" "^7.1.0" - "@babel/plugin-transform-modules-systemjs" "^7.0.0" - "@babel/plugin-transform-modules-umd" "^7.1.0" - "@babel/plugin-transform-new-target" "^7.0.0" - "@babel/plugin-transform-object-super" "^7.1.0" - "@babel/plugin-transform-parameters" "^7.1.0" - "@babel/plugin-transform-regenerator" "^7.0.0" - "@babel/plugin-transform-shorthand-properties" "^7.0.0" - "@babel/plugin-transform-spread" "^7.0.0" - "@babel/plugin-transform-sticky-regex" "^7.0.0" - "@babel/plugin-transform-template-literals" "^7.0.0" - "@babel/plugin-transform-typeof-symbol" "^7.0.0" - "@babel/plugin-transform-unicode-regex" "^7.0.0" - browserslist "^4.1.0" - invariant "^2.2.2" - js-levenshtein "^1.1.3" - semver "^5.3.0" - -"@babel/preset-env@^7.0.0", "@babel/preset-env@^7.1.6": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.2.0.tgz#a5030e7e4306af5a295dd5d7c78dc5464af3fee2" - dependencies: - "@babel/helper-module-imports" "^7.0.0" - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-proposal-async-generator-functions" "^7.2.0" - "@babel/plugin-proposal-json-strings" "^7.2.0" - "@babel/plugin-proposal-object-rest-spread" "^7.2.0" - "@babel/plugin-proposal-optional-catch-binding" "^7.2.0" - "@babel/plugin-proposal-unicode-property-regex" "^7.2.0" - "@babel/plugin-syntax-async-generators" "^7.2.0" - "@babel/plugin-syntax-object-rest-spread" "^7.2.0" - "@babel/plugin-syntax-optional-catch-binding" "^7.2.0" - "@babel/plugin-transform-arrow-functions" "^7.2.0" - "@babel/plugin-transform-async-to-generator" "^7.2.0" - "@babel/plugin-transform-block-scoped-functions" "^7.2.0" - "@babel/plugin-transform-block-scoping" "^7.2.0" - "@babel/plugin-transform-classes" "^7.2.0" - "@babel/plugin-transform-computed-properties" "^7.2.0" - "@babel/plugin-transform-destructuring" "^7.2.0" - "@babel/plugin-transform-dotall-regex" "^7.2.0" - "@babel/plugin-transform-duplicate-keys" "^7.2.0" - "@babel/plugin-transform-exponentiation-operator" "^7.2.0" - "@babel/plugin-transform-for-of" "^7.2.0" - "@babel/plugin-transform-function-name" "^7.2.0" - "@babel/plugin-transform-literals" "^7.2.0" - "@babel/plugin-transform-modules-amd" "^7.2.0" - "@babel/plugin-transform-modules-commonjs" "^7.2.0" - "@babel/plugin-transform-modules-systemjs" "^7.2.0" - "@babel/plugin-transform-modules-umd" "^7.2.0" - "@babel/plugin-transform-new-target" "^7.0.0" - "@babel/plugin-transform-object-super" "^7.2.0" - "@babel/plugin-transform-parameters" "^7.2.0" - "@babel/plugin-transform-regenerator" "^7.0.0" - "@babel/plugin-transform-shorthand-properties" "^7.2.0" - "@babel/plugin-transform-spread" "^7.2.0" - "@babel/plugin-transform-sticky-regex" "^7.2.0" - "@babel/plugin-transform-template-literals" "^7.2.0" - "@babel/plugin-transform-typeof-symbol" "^7.2.0" - "@babel/plugin-transform-unicode-regex" "^7.2.0" - browserslist "^4.3.4" - invariant "^2.2.2" - js-levenshtein "^1.1.3" - semver "^5.3.0" - -"@babel/preset-env@^7.2.3": - version "7.2.3" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.2.3.tgz#948c8df4d4609c99c7e0130169f052ea6a7a8933" - dependencies: - "@babel/helper-module-imports" "^7.0.0" - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-proposal-async-generator-functions" "^7.2.0" - "@babel/plugin-proposal-json-strings" "^7.2.0" - "@babel/plugin-proposal-object-rest-spread" "^7.2.0" - "@babel/plugin-proposal-optional-catch-binding" "^7.2.0" - "@babel/plugin-proposal-unicode-property-regex" "^7.2.0" - "@babel/plugin-syntax-async-generators" "^7.2.0" - "@babel/plugin-syntax-object-rest-spread" "^7.2.0" - "@babel/plugin-syntax-optional-catch-binding" "^7.2.0" - "@babel/plugin-transform-arrow-functions" "^7.2.0" - "@babel/plugin-transform-async-to-generator" "^7.2.0" - "@babel/plugin-transform-block-scoped-functions" "^7.2.0" - "@babel/plugin-transform-block-scoping" "^7.2.0" - "@babel/plugin-transform-classes" "^7.2.0" - "@babel/plugin-transform-computed-properties" "^7.2.0" - "@babel/plugin-transform-destructuring" "^7.2.0" - "@babel/plugin-transform-dotall-regex" "^7.2.0" - "@babel/plugin-transform-duplicate-keys" "^7.2.0" - "@babel/plugin-transform-exponentiation-operator" "^7.2.0" - "@babel/plugin-transform-for-of" "^7.2.0" - "@babel/plugin-transform-function-name" "^7.2.0" - "@babel/plugin-transform-literals" "^7.2.0" - "@babel/plugin-transform-modules-amd" "^7.2.0" - "@babel/plugin-transform-modules-commonjs" "^7.2.0" - "@babel/plugin-transform-modules-systemjs" "^7.2.0" - "@babel/plugin-transform-modules-umd" "^7.2.0" - "@babel/plugin-transform-new-target" "^7.0.0" - "@babel/plugin-transform-object-super" "^7.2.0" - "@babel/plugin-transform-parameters" "^7.2.0" - "@babel/plugin-transform-regenerator" "^7.0.0" - "@babel/plugin-transform-shorthand-properties" "^7.2.0" - "@babel/plugin-transform-spread" "^7.2.0" - "@babel/plugin-transform-sticky-regex" "^7.2.0" - "@babel/plugin-transform-template-literals" "^7.2.0" - "@babel/plugin-transform-typeof-symbol" "^7.2.0" - "@babel/plugin-transform-unicode-regex" "^7.2.0" - browserslist "^4.3.4" - invariant "^2.2.2" - js-levenshtein "^1.1.3" - semver "^5.3.0" - -"@babel/preset-react@7.0.0", "@babel/preset-react@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.0.0.tgz#e86b4b3d99433c7b3e9e91747e2653958bc6b3c0" - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-transform-react-display-name" "^7.0.0" - "@babel/plugin-transform-react-jsx" "^7.0.0" - "@babel/plugin-transform-react-jsx-self" "^7.0.0" - "@babel/plugin-transform-react-jsx-source" "^7.0.0" - -"@babel/preset-typescript@7.1.0": - version "7.1.0" - resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.1.0.tgz#49ad6e2084ff0bfb5f1f7fb3b5e76c434d442c7f" - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-transform-typescript" "^7.1.0" - -"@babel/runtime@7.1.5": - version "7.1.5" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.1.5.tgz#4170907641cf1f61508f563ece3725150cc6fe39" - dependencies: - regenerator-runtime "^0.12.0" - -"@babel/runtime@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.2.0.tgz#b03e42eeddf5898e00646e4c840fa07ba8dcad7f" - dependencies: - regenerator-runtime "^0.12.0" - -"@babel/template@^7.1.0", "@babel/template@^7.1.2": - version "7.1.2" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.1.2.tgz#090484a574fef5a2d2d7726a674eceda5c5b5644" - dependencies: - "@babel/code-frame" "^7.0.0" - "@babel/parser" "^7.1.2" - "@babel/types" "^7.1.2" - -"@babel/template@^7.2.2": - version "7.2.2" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.2.2.tgz#005b3fdf0ed96e88041330379e0da9a708eb2907" - dependencies: - "@babel/code-frame" "^7.0.0" - "@babel/parser" "^7.2.2" - "@babel/types" "^7.2.2" - -"@babel/traverse@^7.0.0", "@babel/traverse@^7.1.0", "@babel/traverse@^7.1.5", "@babel/traverse@^7.1.6": - version "7.1.6" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.1.6.tgz#c8db9963ab4ce5b894222435482bd8ea854b7b5c" - dependencies: - "@babel/code-frame" "^7.0.0" - "@babel/generator" "^7.1.6" - "@babel/helper-function-name" "^7.1.0" - "@babel/helper-split-export-declaration" "^7.0.0" - "@babel/parser" "^7.1.6" - "@babel/types" "^7.1.6" - debug "^4.1.0" - globals "^11.1.0" - lodash "^4.17.10" - -"@babel/traverse@^7.2.2", "@babel/traverse@^7.2.3": - version "7.2.3" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.2.3.tgz#7ff50cefa9c7c0bd2d81231fdac122f3957748d8" - dependencies: - "@babel/code-frame" "^7.0.0" - "@babel/generator" "^7.2.2" - "@babel/helper-function-name" "^7.1.0" - "@babel/helper-split-export-declaration" "^7.0.0" - "@babel/parser" "^7.2.3" - "@babel/types" "^7.2.2" - debug "^4.1.0" - globals "^11.1.0" - lodash "^4.17.10" - -"@babel/types@^7.0.0", "@babel/types@^7.1.2", "@babel/types@^7.1.6", "@babel/types@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.2.0.tgz#7941c5b2d8060e06f9601d6be7c223eef906d5d8" - dependencies: - esutils "^2.0.2" - lodash "^4.17.10" - to-fast-properties "^2.0.0" - -"@babel/types@^7.2.2": - version "7.2.2" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.2.2.tgz#44e10fc24e33af524488b716cdaee5360ea8ed1e" - dependencies: - esutils "^2.0.2" - lodash "^4.17.10" - to-fast-properties "^2.0.0" - -"@csstools/convert-colors@^1.4.0": - version "1.4.0" - resolved "https://registry.yarnpkg.com/@csstools/convert-colors/-/convert-colors-1.4.0.tgz#ad495dc41b12e75d588c6db8b9834f08fa131eb7" - -"@iamstarkov/listr-update-renderer@0.4.1": - version "0.4.1" - resolved "https://registry.yarnpkg.com/@iamstarkov/listr-update-renderer/-/listr-update-renderer-0.4.1.tgz#d7c48092a2dcf90fd672b6c8b458649cb350c77e" - dependencies: - chalk "^1.1.3" - cli-truncate "^0.2.1" - elegant-spinner "^1.0.1" - figures "^1.7.0" - indent-string "^3.0.0" - log-symbols "^1.0.2" - log-update "^2.3.0" - strip-ansi "^3.0.1" - -"@mrmlnc/readdir-enhanced@^2.2.1": - version "2.2.1" - resolved "https://registry.yarnpkg.com/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz#524af240d1a360527b730475ecfa1344aa540dde" - dependencies: - call-me-maybe "^1.0.1" - glob-to-regexp "^0.3.0" - -"@nodelib/fs.stat@^1.1.2": - version "1.1.3" - resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz#2b5a3ab3f918cca48a8c754c08168e3f03eba61b" - -"@samverschueren/stream-to-observable@^0.3.0": - version "0.3.0" - resolved "https://registry.yarnpkg.com/@samverschueren/stream-to-observable/-/stream-to-observable-0.3.0.tgz#ecdf48d532c58ea477acfcab80348424f8d0662f" - dependencies: - any-observable "^0.3.0" - -"@svgr/babel-plugin-add-jsx-attribute@^4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-4.0.0.tgz#5acf239cd2747b1a36ec7e708de05d914cb9b948" - -"@svgr/babel-plugin-remove-jsx-attribute@^4.0.3": - version "4.0.3" - resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-4.0.3.tgz#32564b5c4d761b51e34492b6a4894196c0f75803" - -"@svgr/babel-plugin-remove-jsx-empty-expression@^4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-4.0.0.tgz#0b59338c00671cf8137eb823bd84a3efac686502" - -"@svgr/babel-plugin-replace-jsx-attribute-value@^4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-4.0.0.tgz#91785643540c2300f3d89e515b37af9b5ce4e695" - -"@svgr/babel-plugin-svg-dynamic-title@^4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-4.0.0.tgz#eb8d50b80ba0a26f9b27c7268e2a803d90f1bc9e" - -"@svgr/babel-plugin-svg-em-dimensions@^4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-4.0.0.tgz#0de3972c46ff1960bed765646037a3a7f9e1da3d" - -"@svgr/babel-plugin-transform-react-native-svg@^4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-4.0.0.tgz#5e8ecc2a9870ae05fb1e553b1fe9c6b5853a1c66" - -"@svgr/babel-plugin-transform-svg-component@^4.1.0": - version "4.1.0" - resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-4.1.0.tgz#257159e28a21ac20988b1eaa5f59d4724f37fdaa" - -"@svgr/babel-preset@^4.1.0": - version "4.1.0" - resolved "https://registry.yarnpkg.com/@svgr/babel-preset/-/babel-preset-4.1.0.tgz#f6fa8ad90064b85dd7a3566a70b7006e789e8385" - dependencies: - "@svgr/babel-plugin-add-jsx-attribute" "^4.0.0" - "@svgr/babel-plugin-remove-jsx-attribute" "^4.0.3" - "@svgr/babel-plugin-remove-jsx-empty-expression" "^4.0.0" - "@svgr/babel-plugin-replace-jsx-attribute-value" "^4.0.0" - "@svgr/babel-plugin-svg-dynamic-title" "^4.0.0" - "@svgr/babel-plugin-svg-em-dimensions" "^4.0.0" - "@svgr/babel-plugin-transform-react-native-svg" "^4.0.0" - "@svgr/babel-plugin-transform-svg-component" "^4.1.0" - -"@svgr/core@^2.4.1": - version "2.4.1" - resolved "https://registry.yarnpkg.com/@svgr/core/-/core-2.4.1.tgz#03a407c28c4a1d84305ae95021e8eabfda8fa731" - dependencies: - camelcase "^5.0.0" - cosmiconfig "^5.0.6" - h2x-core "^1.1.0" - h2x-plugin-jsx "^1.1.0" - merge-deep "^3.0.2" - prettier "^1.14.2" - svgo "^1.0.5" - -"@svgr/core@^4.1.0": - version "4.1.0" - resolved "https://registry.yarnpkg.com/@svgr/core/-/core-4.1.0.tgz#4f8ad24fb4ab25c787c12a6bbb511c6430558f83" - dependencies: - "@svgr/plugin-jsx" "^4.1.0" - camelcase "^5.0.0" - cosmiconfig "^5.0.7" - -"@svgr/hast-util-to-babel-ast@^4.1.0": - version "4.1.0" - resolved "https://registry.yarnpkg.com/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-4.1.0.tgz#a1eb0f47059769896f759f47995b636fce5d9fa4" - dependencies: - "@babel/types" "^7.1.6" - -"@svgr/plugin-jsx@^4.1.0": - version "4.1.0" - resolved "https://registry.yarnpkg.com/@svgr/plugin-jsx/-/plugin-jsx-4.1.0.tgz#4045e9cc0589374a6c182a1217c80e6734b5cbec" - dependencies: - "@babel/core" "^7.1.6" - "@svgr/babel-preset" "^4.1.0" - "@svgr/hast-util-to-babel-ast" "^4.1.0" - rehype-parse "^6.0.0" - unified "^7.0.2" - vfile "^3.0.1" - -"@svgr/plugin-svgo@^4.0.3": - version "4.0.3" - resolved "https://registry.yarnpkg.com/@svgr/plugin-svgo/-/plugin-svgo-4.0.3.tgz#a07ea0a736c26fa3a5440fe8e222e2e887764cab" - dependencies: - cosmiconfig "^5.0.7" - merge-deep "^3.0.2" - svgo "^1.1.1" - -"@svgr/rollup@^4.1.0": - version "4.1.0" - resolved "https://registry.yarnpkg.com/@svgr/rollup/-/rollup-4.1.0.tgz#fd1be5eef562c31983a58101bf4528084d5094d0" - dependencies: - "@babel/core" "^7.1.6" - "@babel/plugin-transform-react-constant-elements" "^7.0.0" - "@babel/preset-env" "^7.1.6" - "@babel/preset-react" "^7.0.0" - "@svgr/core" "^4.1.0" - "@svgr/plugin-jsx" "^4.1.0" - "@svgr/plugin-svgo" "^4.0.3" - rollup-pluginutils "^2.3.3" - -"@svgr/webpack@2.4.1": - version "2.4.1" - resolved "https://registry.yarnpkg.com/@svgr/webpack/-/webpack-2.4.1.tgz#68bc581ecb4c09fadeb7936bd1afaceb9da960d2" - dependencies: - "@babel/core" "^7.0.1" - "@babel/plugin-transform-react-constant-elements" "^7.0.0" - "@babel/preset-env" "^7.0.0" - "@babel/preset-react" "^7.0.0" - "@svgr/core" "^2.4.1" - loader-utils "^1.1.0" - -"@types/estree@0.0.39": - version "0.0.39" - resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.39.tgz#e177e699ee1b8c22d23174caaa7422644389509f" - -"@types/node@*": - version "10.12.12" - resolved "https://registry.yarnpkg.com/@types/node/-/node-10.12.12.tgz#e15a9d034d9210f00320ef718a50c4a799417c47" - -"@types/tapable@1.0.2": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@types/tapable/-/tapable-1.0.2.tgz#e13182e1b69871a422d7863e11a4a6f5b814a4bd" - -"@webassemblyjs/ast@1.7.6": - version "1.7.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.7.6.tgz#3ef8c45b3e5e943a153a05281317474fef63e21e" - dependencies: - "@webassemblyjs/helper-module-context" "1.7.6" - "@webassemblyjs/helper-wasm-bytecode" "1.7.6" - "@webassemblyjs/wast-parser" "1.7.6" - mamacro "^0.0.3" - -"@webassemblyjs/floating-point-hex-parser@1.7.6": - version "1.7.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.7.6.tgz#7cb37d51a05c3fe09b464ae7e711d1ab3837801f" - -"@webassemblyjs/helper-api-error@1.7.6": - version "1.7.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.7.6.tgz#99b7e30e66f550a2638299a109dda84a622070ef" - -"@webassemblyjs/helper-buffer@1.7.6": - version "1.7.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.7.6.tgz#ba0648be12bbe560c25c997e175c2018df39ca3e" - -"@webassemblyjs/helper-code-frame@1.7.6": - version "1.7.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.7.6.tgz#5a94d21b0057b69a7403fca0c253c3aaca95b1a5" - dependencies: - "@webassemblyjs/wast-printer" "1.7.6" - -"@webassemblyjs/helper-fsm@1.7.6": - version "1.7.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-fsm/-/helper-fsm-1.7.6.tgz#ae1741c6f6121213c7a0b587fb964fac492d3e49" - -"@webassemblyjs/helper-module-context@1.7.6": - version "1.7.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-module-context/-/helper-module-context-1.7.6.tgz#116d19a51a6cebc8900ad53ca34ff8269c668c23" - dependencies: - mamacro "^0.0.3" - -"@webassemblyjs/helper-wasm-bytecode@1.7.6": - version "1.7.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.7.6.tgz#98e515eaee611aa6834eb5f6a7f8f5b29fefb6f1" - -"@webassemblyjs/helper-wasm-section@1.7.6": - version "1.7.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.7.6.tgz#783835867bdd686df7a95377ab64f51a275e8333" - dependencies: - "@webassemblyjs/ast" "1.7.6" - "@webassemblyjs/helper-buffer" "1.7.6" - "@webassemblyjs/helper-wasm-bytecode" "1.7.6" - "@webassemblyjs/wasm-gen" "1.7.6" - -"@webassemblyjs/ieee754@1.7.6": - version "1.7.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.7.6.tgz#c34fc058f2f831fae0632a8bb9803cf2d3462eb1" - dependencies: - "@xtuc/ieee754" "^1.2.0" - -"@webassemblyjs/leb128@1.7.6": - version "1.7.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.7.6.tgz#197f75376a29f6ed6ace15898a310d871d92f03b" - dependencies: - "@xtuc/long" "4.2.1" - -"@webassemblyjs/utf8@1.7.6": - version "1.7.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.7.6.tgz#eb62c66f906af2be70de0302e29055d25188797d" - -"@webassemblyjs/wasm-edit@1.7.6": - version "1.7.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.7.6.tgz#fa41929160cd7d676d4c28ecef420eed5b3733c5" - dependencies: - "@webassemblyjs/ast" "1.7.6" - "@webassemblyjs/helper-buffer" "1.7.6" - "@webassemblyjs/helper-wasm-bytecode" "1.7.6" - "@webassemblyjs/helper-wasm-section" "1.7.6" - "@webassemblyjs/wasm-gen" "1.7.6" - "@webassemblyjs/wasm-opt" "1.7.6" - "@webassemblyjs/wasm-parser" "1.7.6" - "@webassemblyjs/wast-printer" "1.7.6" - -"@webassemblyjs/wasm-gen@1.7.6": - version "1.7.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.7.6.tgz#695ac38861ab3d72bf763c8c75e5f087ffabc322" - dependencies: - "@webassemblyjs/ast" "1.7.6" - "@webassemblyjs/helper-wasm-bytecode" "1.7.6" - "@webassemblyjs/ieee754" "1.7.6" - "@webassemblyjs/leb128" "1.7.6" - "@webassemblyjs/utf8" "1.7.6" - -"@webassemblyjs/wasm-opt@1.7.6": - version "1.7.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.7.6.tgz#fbafa78e27e1a75ab759a4b658ff3d50b4636c21" - dependencies: - "@webassemblyjs/ast" "1.7.6" - "@webassemblyjs/helper-buffer" "1.7.6" - "@webassemblyjs/wasm-gen" "1.7.6" - "@webassemblyjs/wasm-parser" "1.7.6" - -"@webassemblyjs/wasm-parser@1.7.6": - version "1.7.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.7.6.tgz#84eafeeff405ad6f4c4b5777d6a28ae54eed51fe" - dependencies: - "@webassemblyjs/ast" "1.7.6" - "@webassemblyjs/helper-api-error" "1.7.6" - "@webassemblyjs/helper-wasm-bytecode" "1.7.6" - "@webassemblyjs/ieee754" "1.7.6" - "@webassemblyjs/leb128" "1.7.6" - "@webassemblyjs/utf8" "1.7.6" - -"@webassemblyjs/wast-parser@1.7.6": - version "1.7.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-parser/-/wast-parser-1.7.6.tgz#ca4d20b1516e017c91981773bd7e819d6bd9c6a7" - dependencies: - "@webassemblyjs/ast" "1.7.6" - "@webassemblyjs/floating-point-hex-parser" "1.7.6" - "@webassemblyjs/helper-api-error" "1.7.6" - "@webassemblyjs/helper-code-frame" "1.7.6" - "@webassemblyjs/helper-fsm" "1.7.6" - "@xtuc/long" "4.2.1" - mamacro "^0.0.3" - -"@webassemblyjs/wast-printer@1.7.6": - version "1.7.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.7.6.tgz#a6002c526ac5fa230fe2c6d2f1bdbf4aead43a5e" - dependencies: - "@webassemblyjs/ast" "1.7.6" - "@webassemblyjs/wast-parser" "1.7.6" - "@xtuc/long" "4.2.1" - -"@xtuc/ieee754@^1.2.0": - version "1.2.0" - resolved "https://registry.yarnpkg.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz#eef014a3145ae477a1cbc00cd1e552336dceb790" - -"@xtuc/long@4.2.1": - version "4.2.1" - resolved "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.1.tgz#5c85d662f76fa1d34575766c5dcd6615abcd30d8" - -abab@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.0.tgz#aba0ab4c5eee2d4c79d3487d85450fb2376ebb0f" - -abbrev@1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" - -abstract-leveldown@~0.12.0, abstract-leveldown@~0.12.1: - version "0.12.4" - resolved "https://registry.yarnpkg.com/abstract-leveldown/-/abstract-leveldown-0.12.4.tgz#29e18e632e60e4e221d5810247852a63d7b2e410" - dependencies: - xtend "~3.0.0" - -accepts@~1.3.4, accepts@~1.3.5: - version "1.3.5" - resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.5.tgz#eb777df6011723a3b14e8a72c0805c8e86746bd2" - dependencies: - mime-types "~2.1.18" - negotiator "0.6.1" - -acorn-dynamic-import@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/acorn-dynamic-import/-/acorn-dynamic-import-3.0.0.tgz#901ceee4c7faaef7e07ad2a47e890675da50a278" - dependencies: - acorn "^5.0.0" - -acorn-globals@^4.1.0, acorn-globals@^4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-4.3.0.tgz#e3b6f8da3c1552a95ae627571f7dd6923bb54103" - dependencies: - acorn "^6.0.1" - acorn-walk "^6.0.1" - -acorn-jsx@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.0.1.tgz#32a064fd925429216a09b141102bfdd185fae40e" - -acorn-walk@^6.0.1: - version "6.1.1" - resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-6.1.1.tgz#d363b66f5fac5f018ff9c3a1e7b6f8e310cc3913" - -acorn@^5.0.0, acorn@^5.5.3, acorn@^5.6.2: - version "5.7.3" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.7.3.tgz#67aa231bf8812974b85235a96771eb6bd07ea279" - -acorn@^6.0.1, acorn@^6.0.2: - version "6.0.4" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.0.4.tgz#77377e7353b72ec5104550aa2d2097a2fd40b754" - -address@1.0.3, address@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/address/-/address-1.0.3.tgz#b5f50631f8d6cec8bd20c963963afb55e06cbce9" - -ajv-errors@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/ajv-errors/-/ajv-errors-1.0.1.tgz#f35986aceb91afadec4102fbd85014950cefa64d" - -ajv-keywords@^3.0.0, ajv-keywords@^3.1.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.2.0.tgz#e86b819c602cf8821ad637413698f1dec021847a" - -ajv@^6.0.1, ajv@^6.1.0, ajv@^6.5.3, ajv@^6.5.5, ajv@^6.6.1: - version "6.6.1" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.6.1.tgz#6360f5ed0d80f232cc2b294c362d5dc2e538dd61" - dependencies: - fast-deep-equal "^2.0.1" - fast-json-stable-stringify "^2.0.0" - json-schema-traverse "^0.4.1" - uri-js "^4.2.2" - -alphanum-sort@^1.0.0, alphanum-sort@^1.0.1, alphanum-sort@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/alphanum-sort/-/alphanum-sort-1.0.2.tgz#97a1119649b211ad33691d9f9f486a8ec9fbe0a3" - -amdefine@>=0.0.4: - version "1.0.1" - resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5" - -ansi-colors@^3.0.0: - version "3.2.3" - resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-3.2.3.tgz#57d35b8686e851e2cc04c403f1c00203976a1813" - -ansi-escapes@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.1.0.tgz#f73207bb81207d75fd6c83f125af26eea378ca30" - -ansi-html@0.0.7: - version "0.0.7" - resolved "https://registry.yarnpkg.com/ansi-html/-/ansi-html-0.0.7.tgz#813584021962a9e9e6fd039f940d12f56ca7859e" - -ansi-regex@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" - -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: - version "4.0.0" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.0.0.tgz#70de791edf021404c3fd615aa89118ae0432e5a9" - -ansi-styles@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" - -ansi-styles@^3.2.0, ansi-styles@^3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" - dependencies: - color-convert "^1.9.0" - -any-observable@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/any-observable/-/any-observable-0.3.0.tgz#af933475e5806a67d0d7df090dd5e8bef65d119b" - -anymatch@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" - dependencies: - micromatch "^3.1.4" - normalize-path "^2.1.1" - -append-transform@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/append-transform/-/append-transform-0.4.0.tgz#d76ebf8ca94d276e247a36bad44a4b74ab611991" - dependencies: - default-require-extensions "^1.0.0" - -aproba@^1.0.3, aproba@^1.1.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" - -are-we-there-yet@~1.1.2: - version "1.1.5" - resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz#4b35c2944f062a8bfcda66410760350fe9ddfc21" - dependencies: - delegates "^1.0.0" - readable-stream "^2.0.6" - -argparse@^1.0.7: - version "1.0.10" - resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" - dependencies: - sprintf-js "~1.0.2" - -aria-query@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-3.0.0.tgz#65b3fcc1ca1155a8c9ae64d6eee297f15d5133cc" - dependencies: - ast-types-flow "0.0.7" - commander "^2.11.0" - -arr-diff@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-2.0.0.tgz#8f3b827f955a8bd669697e4a4256ac3ceae356cf" - dependencies: - arr-flatten "^1.0.1" - -arr-diff@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" - -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@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" - -array-equal@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/array-equal/-/array-equal-1.0.0.tgz#8c2a5ef2472fd9ea742b04c77a75093ba2757c93" - -array-filter@~0.0.0: - version "0.0.1" - resolved "https://registry.yarnpkg.com/array-filter/-/array-filter-0.0.1.tgz#7da8cf2e26628ed732803581fd21f67cacd2eeec" - -array-find-index@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1" - -array-flatten@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" - -array-flatten@^2.1.0: - version "2.1.2" - resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-2.1.2.tgz#24ef80a28c1a893617e2149b0c6d0d788293b099" - -array-includes@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.0.3.tgz#184b48f62d92d7452bb31b323165c7f8bd02266d" - dependencies: - define-properties "^1.1.2" - es-abstract "^1.7.0" - -array-map@~0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/array-map/-/array-map-0.0.0.tgz#88a2bab73d1cf7bcd5c1b118a003f66f665fa662" - -array-reduce@~0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/array-reduce/-/array-reduce-0.0.0.tgz#173899d3ffd1c7d9383e4479525dbe278cab5f2b" - -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: - 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" - -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.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" - -asap@~2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" - -asn1.js@^4.0.0: - version "4.10.1" - resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-4.10.1.tgz#b9c2bf5805f1e64aadeed6df3a2bfafb5a73f5a0" - dependencies: - bn.js "^4.0.0" - inherits "^2.0.1" - minimalistic-assert "^1.0.0" - -asn1@~0.2.3: - version "0.2.4" - resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136" - dependencies: - safer-buffer "~2.1.0" - -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@^1.1.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/assert/-/assert-1.4.1.tgz#99912d591836b5a6f5b345c0f07eefc08fc65d91" - dependencies: - util "0.10.3" - -assign-symbols@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" - -ast-types-flow@0.0.7, ast-types-flow@^0.0.7: - version "0.0.7" - resolved "https://registry.yarnpkg.com/ast-types-flow/-/ast-types-flow-0.0.7.tgz#f70b735c6bca1a5c9c22d982c3e39e7feba3bdad" - -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.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.1.tgz#19d386a1d9edc6e7c1c85d388aedbcc56d33602d" - -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.5.2: - version "1.5.2" - resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" - -async@^2.1.4, async@^2.6.1: - version "2.6.1" - resolved "https://registry.yarnpkg.com/async/-/async-2.6.1.tgz#b245a23ca71930044ec53fa46aa00a3e87c6a610" - dependencies: - lodash "^4.17.10" - -asynckit@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" - -atob@^2.1.1: - version "2.1.2" - resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" - -autoprefixer@^6.3.1: - version "6.7.7" - resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-6.7.7.tgz#1dbd1c835658e35ce3f9984099db00585c782014" - dependencies: - browserslist "^1.7.6" - caniuse-db "^1.0.30000634" - normalize-range "^0.1.2" - num2fraction "^1.2.2" - postcss "^5.2.16" - postcss-value-parser "^3.2.3" - -autoprefixer@^9.0.0: - version "9.4.2" - resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-9.4.2.tgz#0234d20900684fc4bfb67926493deb68384067f5" - dependencies: - browserslist "^4.3.5" - caniuse-lite "^1.0.30000914" - normalize-range "^0.1.2" - num2fraction "^1.2.2" - postcss "^7.0.6" - postcss-value-parser "^3.3.1" - -autoprefixer@^9.3.1: - version "9.4.3" - resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-9.4.3.tgz#c97384a8fd80477b78049163a91bbc725d9c41d9" - dependencies: - browserslist "^4.3.6" - caniuse-lite "^1.0.30000921" - normalize-range "^0.1.2" - num2fraction "^1.2.2" - postcss "^7.0.6" - postcss-value-parser "^3.3.1" - -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.8.0: - version "1.8.0" - resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.8.0.tgz#f0e003d9ca9e7f59c7a508945d7b2ef9a04a542f" - -axobject-query@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-2.0.2.tgz#ea187abe5b9002b377f925d8bf7d1c561adf38f9" - dependencies: - ast-types-flow "0.0.7" - -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@7.0.0-bridge.0: - version "7.0.0-bridge.0" - resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-7.0.0-bridge.0.tgz#95a492ddd90f9b4e9a4a1da14eb335b87b634ece" - -babel-core@^6.0.0, babel-core@^6.26.0: - version "6.26.3" - resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.26.3.tgz#b2e2f09e342d0f0c88e2f02e067794125e75c207" - 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.1" - debug "^2.6.9" - json5 "^0.5.1" - lodash "^4.17.4" - minimatch "^3.0.4" - path-is-absolute "^1.0.1" - private "^0.1.8" - slash "^1.0.0" - source-map "^0.5.7" - -babel-eslint@9.0.0, babel-eslint@^9.0.0: - version "9.0.0" - resolved "https://registry.yarnpkg.com/babel-eslint/-/babel-eslint-9.0.0.tgz#7d9445f81ed9f60aff38115f838970df9f2b6220" - dependencies: - "@babel/code-frame" "^7.0.0" - "@babel/parser" "^7.0.0" - "@babel/traverse" "^7.0.0" - "@babel/types" "^7.0.0" - eslint-scope "3.7.1" - eslint-visitor-keys "^1.0.0" - -babel-extract-comments@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/babel-extract-comments/-/babel-extract-comments-1.0.0.tgz#0a2aedf81417ed391b85e18b4614e693a0351a21" - dependencies: - babylon "^6.18.0" - -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.6.0, babel-jest@^23.6.0: - version "23.6.0" - resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-23.6.0.tgz#a644232366557a2240a0c083da6b25786185a2f1" - dependencies: - babel-plugin-istanbul "^4.1.6" - babel-preset-jest "^23.2.0" - -babel-loader@8.0.4: - version "8.0.4" - resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-8.0.4.tgz#7bbf20cbe4560629e2e41534147692d3fecbdce6" - dependencies: - find-cache-dir "^1.0.0" - loader-utils "^1.0.2" - mkdirp "^0.5.1" - util.promisify "^1.0.0" - -babel-messages@^6.23.0: - version "6.23.0" - resolved "https://registry.yarnpkg.com/babel-messages/-/babel-messages-6.23.0.tgz#f3cdf4703858035b2a2951c6ec5edf6c62f2630e" - dependencies: - babel-runtime "^6.22.0" - -babel-plugin-dynamic-import-node@2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.2.0.tgz#c0adfb07d95f4a4495e9aaac6ec386c4d7c2524e" - dependencies: - object.assign "^4.1.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" - 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-macros@2.4.2: - version "2.4.2" - resolved "https://registry.yarnpkg.com/babel-plugin-macros/-/babel-plugin-macros-2.4.2.tgz#21b1a2e82e2130403c5ff785cba6548e9b644b28" - dependencies: - cosmiconfig "^5.0.5" - resolve "^1.8.1" - -babel-plugin-named-asset-import@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/babel-plugin-named-asset-import/-/babel-plugin-named-asset-import-0.3.0.tgz#3289ec622d19cd1cc84df8d784b41f1b048bd524" - -babel-plugin-syntax-object-rest-spread@^6.13.0, babel-plugin-syntax-object-rest-spread@^6.8.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" - -babel-plugin-transform-object-rest-spread@^6.26.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-object-rest-spread/-/babel-plugin-transform-object-rest-spread-6.26.0.tgz#0f36692d50fef6b7e2d4b3ac1478137a963b7b06" - dependencies: - babel-plugin-syntax-object-rest-spread "^6.8.0" - babel-runtime "^6.26.0" - -babel-plugin-transform-react-remove-prop-types@0.4.20: - version "0.4.20" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-remove-prop-types/-/babel-plugin-transform-react-remove-prop-types-0.4.20.tgz#688bdea1e27ea0023775dea817fa2d3f8df8802b" - -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-preset-react-app@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/babel-preset-react-app/-/babel-preset-react-app-7.0.0.tgz#86bf71e43cb8d36e40da69f8b4ad5d6f945dec93" - dependencies: - "@babel/core" "7.1.6" - "@babel/plugin-proposal-class-properties" "7.1.0" - "@babel/plugin-proposal-decorators" "7.1.6" - "@babel/plugin-proposal-object-rest-spread" "7.0.0" - "@babel/plugin-syntax-dynamic-import" "7.0.0" - "@babel/plugin-transform-classes" "7.1.0" - "@babel/plugin-transform-destructuring" "7.1.3" - "@babel/plugin-transform-flow-strip-types" "7.1.6" - "@babel/plugin-transform-react-constant-elements" "7.0.0" - "@babel/plugin-transform-react-display-name" "7.0.0" - "@babel/plugin-transform-runtime" "7.1.0" - "@babel/preset-env" "7.1.6" - "@babel/preset-react" "7.0.0" - "@babel/preset-typescript" "7.1.0" - "@babel/runtime" "7.1.5" - babel-loader "8.0.4" - babel-plugin-dynamic-import-node "2.2.0" - babel-plugin-macros "2.4.2" - babel-plugin-transform-react-remove-prop-types "0.4.20" - -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.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" - dependencies: - babel-runtime "^6.26.0" - esutils "^2.0.2" - lodash "^4.17.4" - to-fast-properties "^1.0.3" - -babylon@^6.18.0: - version "6.18.0" - resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.18.0.tgz#af2f3b88fa6f5c1e4c634d1a0f8eac4f55b395e3" - -bail@^1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/bail/-/bail-1.0.3.tgz#63cfb9ddbac829b02a3128cd53224be78e6c21a3" - -balanced-match@^0.4.2: - version "0.4.2" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-0.4.2.tgz#cb3f3e3c732dc0f01ee70b403f302e61d7709838" - -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" - -base@^0.11.1: - version "0.11.2" - resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" - dependencies: - cache-base "^1.0.1" - class-utils "^0.3.5" - component-emitter "^1.2.1" - define-property "^1.0.0" - isobject "^3.0.1" - mixin-deep "^1.2.0" - pascalcase "^0.1.1" - -batch@0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/batch/-/batch-0.6.1.tgz#dc34314f4e679318093fc760272525f94bf25c16" - -bcrypt-pbkdf@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" - dependencies: - tweetnacl "^0.14.3" - -bfj@6.1.1: - version "6.1.1" - resolved "https://registry.yarnpkg.com/bfj/-/bfj-6.1.1.tgz#05a3b7784fbd72cfa3c22e56002ef99336516c48" - dependencies: - bluebird "^3.5.1" - check-types "^7.3.0" - hoopy "^0.1.2" - tryer "^1.0.0" - -big.js@^3.1.3: - version "3.2.0" - resolved "https://registry.yarnpkg.com/big.js/-/big.js-3.2.0.tgz#a5fc298b81b9e0dca2e458824784b65c52ba588e" - -binary-extensions@^1.0.0: - version "1.12.0" - resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.12.0.tgz#c2d780f53d45bba8317a8902d4ceeaf3a6385b14" - -bl@~0.8.1: - version "0.8.2" - resolved "https://registry.yarnpkg.com/bl/-/bl-0.8.2.tgz#c9b6bca08d1bc2ea00fc8afb4f1a5fd1e1c66e4e" - dependencies: - readable-stream "~1.0.26" - -bluebird@^3.5.1: - version "3.5.3" - resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.3.tgz#7d01c6f9616c9a51ab0f8c549a79dfe6ec33efa7" - -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" - -body-parser@1.18.3: - version "1.18.3" - resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.18.3.tgz#5b292198ffdd553b3a0f20ded0592b956955c8b4" - dependencies: - bytes "3.0.0" - content-type "~1.0.4" - debug "2.6.9" - depd "~1.1.2" - http-errors "~1.6.3" - iconv-lite "0.4.23" - on-finished "~2.3.0" - qs "6.5.2" - raw-body "2.3.3" - type-is "~1.6.16" - -bonjour@^3.5.0: - version "3.5.0" - resolved "https://registry.yarnpkg.com/bonjour/-/bonjour-3.5.0.tgz#8e890a183d8ee9a2393b3844c691a42bcf7bc9f5" - dependencies: - array-flatten "^2.1.0" - deep-equal "^1.0.1" - dns-equal "^1.0.0" - dns-txt "^2.0.2" - multicast-dns "^6.0.1" - multicast-dns-service-types "^1.1.0" - -boolbase@^1.0.0, boolbase@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" - -brace-expansion@^1.1.7: - version "1.1.11" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" - dependencies: - balanced-match "^1.0.0" - concat-map "0.0.1" - -braces@^1.8.2: - version "1.8.5" - resolved "https://registry.yarnpkg.com/braces/-/braces-1.8.5.tgz#ba77962e12dff969d6b76711e914b737857bf6a7" - dependencies: - expand-range "^1.8.1" - preserve "^0.2.0" - repeat-element "^1.1.2" - -braces@^2.3.0, braces@^2.3.1: - version "2.3.2" - resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" - 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" - -brorand@^1.0.1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" - -browser-process-hrtime@^0.1.2: - version "0.1.3" - resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-0.1.3.tgz#616f00faef1df7ec1b5bf9cfe2bdc3170f26c7b4" - -browser-resolve@^1.11.3: - version "1.11.3" - resolved "https://registry.yarnpkg.com/browser-resolve/-/browser-resolve-1.11.3.tgz#9b7cbb3d0f510e4cb86bdbd796124d28b5890af6" - dependencies: - resolve "1.1.7" - -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" - 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" - 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" - dependencies: - cipher-base "^1.0.1" - des.js "^1.0.0" - inherits "^2.0.1" - safe-buffer "^5.1.2" - -browserify-fs@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/browserify-fs/-/browserify-fs-1.0.0.tgz#f075aa8a729d4d1716d066620e386fcc1311a96f" - dependencies: - level-filesystem "^1.0.1" - level-js "^2.1.3" - levelup "^0.18.2" - -browserify-rsa@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.0.1.tgz#21e0abfaf6f2029cf2fafb133567a701d4135524" - 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" - 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" - dependencies: - pako "~1.0.5" - -browserslist@4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.1.1.tgz#328eb4ff1215b12df6589e9ab82f8adaa4fc8cd6" - dependencies: - caniuse-lite "^1.0.30000884" - electron-to-chromium "^1.3.62" - node-releases "^1.0.0-alpha.11" - -browserslist@^1.3.6, browserslist@^1.5.2, browserslist@^1.7.6: - version "1.7.7" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-1.7.7.tgz#0bd76704258be829b2398bb50e4b62d1a166b0b9" - dependencies: - caniuse-db "^1.0.30000639" - electron-to-chromium "^1.2.7" - -browserslist@^4.0.0, browserslist@^4.1.0, browserslist@^4.3.4, browserslist@^4.3.5: - version "4.3.5" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.3.5.tgz#1a917678acc07b55606748ea1adf9846ea8920f7" - dependencies: - caniuse-lite "^1.0.30000912" - electron-to-chromium "^1.3.86" - node-releases "^1.0.5" - -browserslist@^4.3.6: - version "4.3.6" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.3.6.tgz#0f9d9081afc66b36f477c6bdf3813f784f42396a" - dependencies: - caniuse-lite "^1.0.30000921" - electron-to-chromium "^1.3.92" - node-releases "^1.1.1" - -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-es6@^4.9.2: - version "4.9.3" - resolved "https://registry.yarnpkg.com/buffer-es6/-/buffer-es6-4.9.3.tgz#f26347b82df76fd37e18bcb5288c4970cfd5c404" - -buffer-from@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" - -buffer-indexof@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/buffer-indexof/-/buffer-indexof-1.1.1.tgz#52fabcc6a606d1a00302802648ef68f639da268c" - -buffer-xor@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" - -buffer@^4.3.0: - version "4.9.1" - resolved "https://registry.yarnpkg.com/buffer/-/buffer-4.9.1.tgz#6d1bb601b07a4efced97094132093027c95bc298" - dependencies: - base64-js "^1.0.2" - ieee754 "^1.1.4" - isarray "^1.0.0" - -builtin-modules@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" - -builtin-modules@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-3.0.0.tgz#1e587d44b006620d90286cc7a9238bbc6129cab1" - -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" - -bytes@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" - -cacache@^10.0.4: - version "10.0.4" - resolved "https://registry.yarnpkg.com/cacache/-/cacache-10.0.4.tgz#6452367999eff9d4188aefd9a14e9d7c6a263460" - dependencies: - bluebird "^3.5.1" - chownr "^1.0.1" - glob "^7.1.2" - graceful-fs "^4.1.11" - lru-cache "^4.1.1" - mississippi "^2.0.0" - mkdirp "^0.5.1" - move-concurrently "^1.0.1" - promise-inflight "^1.0.1" - rimraf "^2.6.2" - ssri "^5.2.4" - unique-filename "^1.1.0" - y18n "^4.0.0" - -cacache@^11.0.2: - version "11.3.1" - resolved "https://registry.yarnpkg.com/cacache/-/cacache-11.3.1.tgz#d09d25f6c4aca7a6d305d141ae332613aa1d515f" - dependencies: - bluebird "^3.5.1" - chownr "^1.0.1" - figgy-pudding "^3.1.0" - glob "^7.1.2" - graceful-fs "^4.1.11" - lru-cache "^4.1.3" - mississippi "^3.0.0" - mkdirp "^0.5.1" - move-concurrently "^1.0.1" - promise-inflight "^1.0.1" - rimraf "^2.6.2" - ssri "^6.0.0" - unique-filename "^1.1.0" - 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" - dependencies: - collection-visit "^1.0.0" - component-emitter "^1.2.1" - get-value "^2.0.6" - has-value "^1.0.0" - isobject "^3.0.1" - set-value "^2.0.0" - to-object-path "^0.3.0" - union-value "^1.0.0" - unset-value "^1.0.0" - -call-me-maybe@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/call-me-maybe/-/call-me-maybe-1.0.1.tgz#26d208ea89e37b5cbde60250a15f031c16a4d66b" - -caller-callsite@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/caller-callsite/-/caller-callsite-2.0.0.tgz#847e0fce0a223750a9a027c54b33731ad3154134" - dependencies: - callsites "^2.0.0" - -caller-path@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-0.1.0.tgz#94085ef63581ecd3daa92444a8fe94e82577751f" - dependencies: - callsites "^0.2.0" - -caller-path@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-2.0.0.tgz#468f83044e369ab2010fac5f06ceee15bb2cb1f4" - dependencies: - caller-callsite "^2.0.0" - -callsites@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/callsites/-/callsites-0.2.0.tgz#afab96262910a7f33c19a5775825c69f34e350ca" - -callsites@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/callsites/-/callsites-2.0.0.tgz#06eb84f00eea413da86affefacbffb36093b3c50" - -camel-case@3.0.x: - version "3.0.0" - resolved "https://registry.yarnpkg.com/camel-case/-/camel-case-3.0.0.tgz#ca3c3688a4e9cf3a4cda777dc4dcbc713249cf73" - dependencies: - no-case "^2.2.0" - upper-case "^1.1.1" - -camelcase-keys@^4.0.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-4.2.0.tgz#a2aa5fb1af688758259c32c141426d78923b9b77" - dependencies: - camelcase "^4.1.0" - map-obj "^2.0.0" - quick-lru "^1.0.0" - -camelcase@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd" - -camelcase@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.0.0.tgz#03295527d58bd3cd4aa75363f35b2e8d97be2f42" - -caniuse-api@^1.5.2: - version "1.6.1" - resolved "https://registry.yarnpkg.com/caniuse-api/-/caniuse-api-1.6.1.tgz#b534e7c734c4f81ec5fbe8aca2ad24354b962c6c" - dependencies: - browserslist "^1.3.6" - caniuse-db "^1.0.30000529" - lodash.memoize "^4.1.2" - lodash.uniq "^4.5.0" - -caniuse-api@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/caniuse-api/-/caniuse-api-3.0.0.tgz#5e4d90e2274961d46291997df599e3ed008ee4c0" - dependencies: - browserslist "^4.0.0" - caniuse-lite "^1.0.0" - lodash.memoize "^4.1.2" - lodash.uniq "^4.5.0" - -caniuse-db@^1.0.30000529, caniuse-db@^1.0.30000634, caniuse-db@^1.0.30000639: - version "1.0.30000918" - resolved "https://registry.yarnpkg.com/caniuse-db/-/caniuse-db-1.0.30000918.tgz#650a34372ced440a79fa600644667802c6a4b9c2" - -caniuse-lite@^1.0.0, caniuse-lite@^1.0.30000884, caniuse-lite@^1.0.30000912, caniuse-lite@^1.0.30000914: - version "1.0.30000918" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000918.tgz#6288f79da3c5c8b45e502f47ad8f3eb91f1379a9" - -caniuse-lite@^1.0.30000905, caniuse-lite@^1.0.30000921: - version "1.0.30000925" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000925.tgz#f1a3b9aae2a83071b1eccfa39959d72440409b08" - -capture-exit@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/capture-exit/-/capture-exit-1.2.0.tgz#1c5fcc489fd0ab00d4f1ac7ae1072e3173fbab6f" - dependencies: - rsvp "^3.3.3" - -case-sensitive-paths-webpack-plugin@2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.1.2.tgz#c899b52175763689224571dad778742e133f0192" - -caseless@~0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" - -ccount@^1.0.0, ccount@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/ccount/-/ccount-1.0.3.tgz#f1cec43f332e2ea5a569fd46f9f5bde4e6102aff" - -chalk@2.4.1, chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.3.1, chalk@^2.4.1: - version "2.4.1" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.1.tgz#18c49ab16a037b6eb0152cc83e3471338215b66e" - dependencies: - ansi-styles "^3.2.1" - escape-string-regexp "^1.0.5" - supports-color "^5.3.0" - -chalk@^1.0.0, chalk@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" - dependencies: - ansi-styles "^2.2.1" - escape-string-regexp "^1.0.2" - has-ansi "^2.0.0" - strip-ansi "^3.0.0" - supports-color "^2.0.0" - -character-entities-html4@^1.0.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/character-entities-html4/-/character-entities-html4-1.1.2.tgz#c44fdde3ce66b52e8d321d6c1bf46101f0150610" - -character-entities-legacy@^1.0.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/character-entities-legacy/-/character-entities-legacy-1.1.2.tgz#7c6defb81648498222c9855309953d05f4d63a9c" - -character-entities@^1.0.0: - version "1.2.2" - resolved "https://registry.yarnpkg.com/character-entities/-/character-entities-1.2.2.tgz#58c8f371c0774ef0ba9b2aca5f00d8f100e6e363" - -character-reference-invalid@^1.0.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/character-reference-invalid/-/character-reference-invalid-1.1.2.tgz#21e421ad3d84055952dab4a43a04e73cd425d3ed" - -chardet@^0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" - -check-types@^7.3.0: - version "7.4.0" - resolved "https://registry.yarnpkg.com/check-types/-/check-types-7.4.0.tgz#0378ec1b9616ec71f774931a3c6516fad8c152f4" - -chokidar@^2.0.0, chokidar@^2.0.2, chokidar@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.0.4.tgz#356ff4e2b0e8e43e322d18a372460bbcf3accd26" - dependencies: - anymatch "^2.0.0" - async-each "^1.0.0" - braces "^2.3.0" - glob-parent "^3.1.0" - inherits "^2.0.1" - is-binary-path "^1.0.0" - is-glob "^4.0.0" - lodash.debounce "^4.0.8" - normalize-path "^2.1.1" - path-is-absolute "^1.0.0" - readdirp "^2.0.0" - upath "^1.0.5" - optionalDependencies: - fsevents "^1.2.2" - -chownr@^1.0.1, chownr@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.1.tgz#54726b8b8fff4df053c42187e801fb4412df1494" - -chrome-trace-event@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.0.tgz#45a91bd2c20c9411f0963b5aaeb9a1b95e09cc48" - dependencies: - tslib "^1.9.0" - -ci-info@^1.5.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-1.6.0.tgz#2ca20dbb9ceb32d4524a683303313f0304b1e497" - -ci-info@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" - -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" - dependencies: - inherits "^2.0.1" - safe-buffer "^5.0.1" - -circular-json@^0.3.1: - version "0.3.3" - resolved "https://registry.yarnpkg.com/circular-json/-/circular-json-0.3.3.tgz#815c99ea84f6809529d2f45791bdf82711352d66" - -clap@^1.0.9: - version "1.2.3" - resolved "https://registry.yarnpkg.com/clap/-/clap-1.2.3.tgz#4f36745b32008492557f46412d66d50cb99bce51" - dependencies: - chalk "^1.1.3" - -class-utils@^0.3.5: - version "0.3.6" - resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" - dependencies: - arr-union "^3.1.0" - define-property "^0.2.5" - isobject "^3.0.0" - static-extend "^0.1.1" - -classnames@^2.2.6: - version "2.2.6" - resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.2.6.tgz#43935bffdd291f326dad0a205309b38d00f650ce" - -clean-css@4.2.x: - version "4.2.1" - resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-4.2.1.tgz#2d411ef76b8569b6d0c84068dabe85b0aa5e5c17" - dependencies: - source-map "~0.6.0" - -cli-cursor@^2.0.0, cli-cursor@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5" - dependencies: - restore-cursor "^2.0.0" - -cli-truncate@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-0.2.1.tgz#9f15cfbb0705005369216c626ac7d05ab90dd574" - dependencies: - slice-ansi "0.0.4" - string-width "^1.0.1" - -cli-width@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.0.tgz#ff19ede8a9a5e579324147b0c11f0fbcbabed639" - -cliui@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-4.1.0.tgz#348422dbe82d800b3022eef4f6ac10bf2e4d1b49" - dependencies: - string-width "^2.1.1" - strip-ansi "^4.0.0" - wrap-ansi "^2.0.0" - -clone-deep@^0.2.4: - version "0.2.4" - resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-0.2.4.tgz#4e73dd09e9fb971cc38670c5dced9c1896481cc6" - dependencies: - for-own "^0.1.3" - is-plain-object "^2.0.1" - kind-of "^3.0.2" - lazy-cache "^1.0.3" - shallow-clone "^0.1.2" - -clone-deep@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-2.0.2.tgz#00db3a1e173656730d1188c3d6aced6d7ea97713" - dependencies: - for-own "^1.0.0" - is-plain-object "^2.0.4" - kind-of "^6.0.0" - shallow-clone "^1.0.0" - -clone-regexp@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/clone-regexp/-/clone-regexp-1.0.1.tgz#051805cd33173375d82118fc0918606da39fd60f" - dependencies: - is-regexp "^1.0.0" - is-supported-regexp-flag "^1.0.0" - -clone@^1.0.2: - version "1.0.4" - resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" - -clone@~0.1.9: - version "0.1.19" - resolved "https://registry.yarnpkg.com/clone/-/clone-0.1.19.tgz#613fb68639b26a494ac53253e15b1a6bd88ada85" - -co@^4.6.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" - -coa@~1.0.1: - version "1.0.4" - resolved "https://registry.yarnpkg.com/coa/-/coa-1.0.4.tgz#a9ef153660d6a86a8bdec0289a5c684d217432fd" - dependencies: - q "^1.1.2" - -coa@~2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/coa/-/coa-2.0.1.tgz#f3f8b0b15073e35d70263fb1042cb2c023db38af" - dependencies: - q "^1.1.2" - -code-point-at@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" - -collapse-white-space@^1.0.2: - version "1.0.4" - resolved "https://registry.yarnpkg.com/collapse-white-space/-/collapse-white-space-1.0.4.tgz#ce05cf49e54c3277ae573036a26851ba430a0091" - -collection-visit@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" - dependencies: - map-visit "^1.0.0" - object-visit "^1.0.0" - -color-convert@^1.3.0, color-convert@^1.9.0, color-convert@^1.9.1: - version "1.9.3" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" - dependencies: - color-name "1.1.3" - -color-name@1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" - -color-name@^1.0.0: - version "1.1.4" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" - -color-string@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/color-string/-/color-string-0.3.0.tgz#27d46fb67025c5c2fa25993bfbf579e47841b991" - dependencies: - color-name "^1.0.0" - -color-string@^1.5.2: - version "1.5.3" - resolved "https://registry.yarnpkg.com/color-string/-/color-string-1.5.3.tgz#c9bbc5f01b58b5492f3d6857459cb6590ce204cc" - dependencies: - color-name "^1.0.0" - simple-swizzle "^0.2.2" - -color@^0.11.0: - version "0.11.4" - resolved "https://registry.yarnpkg.com/color/-/color-0.11.4.tgz#6d7b5c74fb65e841cd48792ad1ed5e07b904d764" - dependencies: - clone "^1.0.2" - color-convert "^1.3.0" - color-string "^0.3.0" - -color@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/color/-/color-3.1.0.tgz#d8e9fb096732875774c84bf922815df0308d0ffc" - dependencies: - color-convert "^1.9.1" - color-string "^1.5.2" - -colormin@^1.0.5: - version "1.1.2" - resolved "https://registry.yarnpkg.com/colormin/-/colormin-1.1.2.tgz#ea2f7420a72b96881a38aae59ec124a6f7298133" - dependencies: - color "^0.11.0" - css-color-names "0.0.4" - has "^1.0.1" - -colors@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/colors/-/colors-1.1.2.tgz#168a4701756b6a7f51a12ce0c97bfa28c084ed63" - -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" - dependencies: - delayed-stream "~1.0.0" - -comma-separated-tokens@^1.0.0: - version "1.0.5" - resolved "https://registry.yarnpkg.com/comma-separated-tokens/-/comma-separated-tokens-1.0.5.tgz#b13793131d9ea2d2431cf5b507ddec258f0ce0db" - dependencies: - trim "0.0.1" - -commander@2.17.x, commander@~2.17.1: - version "2.17.1" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.17.1.tgz#bd77ab7de6de94205ceacc72f1716d29f20a77bf" - -commander@^2.11.0, commander@^2.14.1, commander@^2.18.0, commander@^2.9.0: - version "2.19.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.19.0.tgz#f6198aa84e5b83c46054b94ddedbfed5ee9ff12a" - -commander@~2.13.0: - version "2.13.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.13.0.tgz#6964bca67685df7c1f1430c584f07d7597885b9c" - -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" - -commondir@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" - -component-emitter@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.2.1.tgz#137918d6d78283f7df7a6b7c5a63e140e69425e6" - -compressible@~2.0.14: - version "2.0.15" - resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.15.tgz#857a9ab0a7e5a07d8d837ed43fe2defff64fe212" - dependencies: - mime-db ">= 1.36.0 < 2" - -compression@^1.5.2: - version "1.7.3" - resolved "https://registry.yarnpkg.com/compression/-/compression-1.7.3.tgz#27e0e176aaf260f7f2c2813c3e440adb9f1993db" - dependencies: - accepts "~1.3.5" - bytes "3.0.0" - compressible "~2.0.14" - debug "2.6.9" - on-headers "~1.0.1" - safe-buffer "5.1.2" - vary "~1.1.2" - -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.4.4, concat-stream@^1.5.0: - version "1.6.2" - resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" - dependencies: - buffer-from "^1.0.0" - inherits "^2.0.3" - readable-stream "^2.2.2" - typedarray "^0.0.6" - -concat-with-sourcemaps@^1.0.5: - version "1.1.0" - resolved "https://registry.yarnpkg.com/concat-with-sourcemaps/-/concat-with-sourcemaps-1.1.0.tgz#d4ea93f05ae25790951b99e7b3b09e3908a4082e" - dependencies: - source-map "^0.6.1" - -confusing-browser-globals@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/confusing-browser-globals/-/confusing-browser-globals-1.0.5.tgz#0171050cfdd4261e278978078bc00c4d88e135f4" - -connect-history-api-fallback@^1.3.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/connect-history-api-fallback/-/connect-history-api-fallback-1.5.0.tgz#b06873934bc5e344fef611a196a6faae0aee015a" - -console-browserify@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.1.0.tgz#f0241c45730a9fc6323b206dbf38edc741d0bb10" - 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" - -constants-browserify@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75" - -contains-path@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/contains-path/-/contains-path-0.1.0.tgz#fe8cf184ff6670b6baef01a9d4861a5cbec4120a" - -content-disposition@0.5.2: - version "0.5.2" - resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.2.tgz#0cf68bb9ddf5f2be7961c3a85178cb85dba78cb4" - -content-type@~1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" - -convert-source-map@^1.1.0, convert-source-map@^1.4.0, convert-source-map@^1.5.1: - version "1.6.0" - resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.6.0.tgz#51b537a8c43e0f04dec1993bffcdd504e758ac20" - dependencies: - safe-buffer "~5.1.1" - -cookie-signature@1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" - -cookie@0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.3.1.tgz#e7e0a1f9ef43b4c8ba925c5c5a96e806d16873bb" - -copy-concurrently@^1.0.0: - version "1.0.5" - resolved "https://registry.yarnpkg.com/copy-concurrently/-/copy-concurrently-1.0.5.tgz#92297398cae34937fcafd6ec8139c18051f0b5e0" - 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.5.7: - version "2.5.7" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.5.7.tgz#f972608ff0cead68b841a16a932d0b183791814e" - -core-js@^2.4.0, core-js@^2.5.0: - version "2.6.0" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.0.tgz#1e30793e9ee5782b307e37ffa22da0eacddd84d4" - -core-util-is@1.0.2, core-util-is@~1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" - -cosmiconfig@5.0.6: - version "5.0.6" - resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-5.0.6.tgz#dca6cf680a0bd03589aff684700858c81abeeb39" - dependencies: - is-directory "^0.3.1" - js-yaml "^3.9.0" - parse-json "^4.0.0" - -cosmiconfig@^2.1.0, cosmiconfig@^2.1.1: - version "2.2.2" - resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-2.2.2.tgz#6173cebd56fac042c1f4390edf7af6c07c7cb892" - dependencies: - is-directory "^0.3.1" - js-yaml "^3.4.3" - minimist "^1.2.0" - object-assign "^4.1.0" - os-homedir "^1.0.1" - parse-json "^2.2.0" - require-from-string "^1.1.0" - -cosmiconfig@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-4.0.0.tgz#760391549580bbd2df1e562bc177b13c290972dc" - dependencies: - is-directory "^0.3.1" - js-yaml "^3.9.0" - parse-json "^4.0.0" - require-from-string "^2.0.1" - -cosmiconfig@^5.0.0, cosmiconfig@^5.0.5, cosmiconfig@^5.0.6, cosmiconfig@^5.0.7: - version "5.0.7" - resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-5.0.7.tgz#39826b292ee0d78eda137dfa3173bd1c21a43b04" - dependencies: - import-fresh "^2.0.0" - is-directory "^0.3.1" - js-yaml "^3.9.0" - parse-json "^4.0.0" - -create-ecdh@^4.0.0: - version "4.0.3" - resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.3.tgz#c9111b6f33045c4697f144787f9254cdc77c45ff" - 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" - 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" - 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-env@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/cross-env/-/cross-env-5.2.0.tgz#6ecd4c015d5773e614039ee529076669b9d126f2" - dependencies: - cross-spawn "^6.0.5" - is-windows "^1.0.0" - -cross-spawn@6.0.5, 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" - dependencies: - nice-try "^1.0.4" - path-key "^2.0.1" - semver "^5.5.0" - shebang-command "^1.2.0" - which "^1.2.9" - -cross-spawn@^5.0.1: - version "5.1.0" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" - dependencies: - lru-cache "^4.0.1" - shebang-command "^1.2.0" - which "^1.2.9" - -crypto-browserify@^3.11.0: - version "3.12.0" - resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec" - 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" - -css-color-names@0.0.4, css-color-names@^0.0.4: - version "0.0.4" - resolved "https://registry.yarnpkg.com/css-color-names/-/css-color-names-0.0.4.tgz#808adc2e79cf84738069b646cb20ec27beb629e0" - -css-declaration-sorter@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/css-declaration-sorter/-/css-declaration-sorter-4.0.1.tgz#c198940f63a76d7e36c1e71018b001721054cb22" - dependencies: - postcss "^7.0.1" - timsort "^0.3.0" - -css-loader@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-1.0.0.tgz#9f46aaa5ca41dbe31860e3b62b8e23c42916bf56" - dependencies: - babel-code-frame "^6.26.0" - css-selector-tokenizer "^0.7.0" - icss-utils "^2.1.0" - loader-utils "^1.0.2" - lodash.camelcase "^4.3.0" - postcss "^6.0.23" - postcss-modules-extract-imports "^1.2.0" - postcss-modules-local-by-default "^1.2.0" - postcss-modules-scope "^1.1.0" - postcss-modules-values "^1.3.0" - postcss-value-parser "^3.3.0" - source-list-map "^2.0.0" - -css-modules-loader-core@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/css-modules-loader-core/-/css-modules-loader-core-1.1.0.tgz#5908668294a1becd261ae0a4ce21b0b551f21d16" - dependencies: - icss-replace-symbols "1.1.0" - postcss "6.0.1" - postcss-modules-extract-imports "1.1.0" - postcss-modules-local-by-default "1.2.0" - postcss-modules-scope "1.1.0" - postcss-modules-values "1.3.0" - -css-parse@1.7.x: - version "1.7.0" - resolved "https://registry.yarnpkg.com/css-parse/-/css-parse-1.7.0.tgz#321f6cf73782a6ff751111390fc05e2c657d8c9b" - -css-select-base-adapter@~0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz#3b2ff4972cc362ab88561507a95408a1432135d7" - -css-select@^1.1.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/css-select/-/css-select-1.2.0.tgz#2b3a110539c5355f1cd8d314623e870b121ec858" - dependencies: - boolbase "~1.0.0" - css-what "2.1" - domutils "1.5.1" - nth-check "~1.0.1" - -css-select@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/css-select/-/css-select-2.0.2.tgz#ab4386cec9e1f668855564b17c3733b43b2a5ede" - dependencies: - boolbase "^1.0.0" - css-what "^2.1.2" - domutils "^1.7.0" - nth-check "^1.0.2" - -css-selector-tokenizer@^0.7.0: - version "0.7.1" - resolved "https://registry.yarnpkg.com/css-selector-tokenizer/-/css-selector-tokenizer-0.7.1.tgz#a177271a8bca5019172f4f891fc6eed9cbf68d5d" - dependencies: - cssesc "^0.1.0" - fastparse "^1.1.1" - regexpu-core "^1.0.0" - -css-tree@1.0.0-alpha.28: - version "1.0.0-alpha.28" - resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.0.0-alpha.28.tgz#8e8968190d886c9477bc8d61e96f61af3f7ffa7f" - dependencies: - mdn-data "~1.1.0" - source-map "^0.5.3" - -css-tree@1.0.0-alpha.29: - version "1.0.0-alpha.29" - resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.0.0-alpha.29.tgz#3fa9d4ef3142cbd1c301e7664c1f352bd82f5a39" - dependencies: - mdn-data "~1.1.0" - source-map "^0.5.3" - -css-unit-converter@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/css-unit-converter/-/css-unit-converter-1.1.1.tgz#d9b9281adcfd8ced935bdbaba83786897f64e996" - -css-url-regex@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/css-url-regex/-/css-url-regex-1.1.0.tgz#83834230cc9f74c457de59eebd1543feeb83b7ec" - -css-what@2.1, css-what@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/css-what/-/css-what-2.1.2.tgz#c0876d9d0480927d7d4920dcd72af3595649554d" - -cssdb@^4.1.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/cssdb/-/cssdb-4.3.0.tgz#2e1229900616f80c66ff2d568ea2b4f92db1c78c" - -cssesc@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-0.1.0.tgz#c814903e45623371a0477b40109aaafbeeaddbb4" - -cssesc@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-2.0.0.tgz#3b13bd1bb1cb36e1bcb5a4dcd27f54c5dcb35703" - -cssnano-preset-default@^4.0.5: - version "4.0.5" - resolved "https://registry.yarnpkg.com/cssnano-preset-default/-/cssnano-preset-default-4.0.5.tgz#d1756c0259d98ad311e601ba76e95c60f6771ac1" - dependencies: - css-declaration-sorter "^4.0.1" - cssnano-util-raw-cache "^4.0.1" - postcss "^7.0.0" - postcss-calc "^7.0.0" - postcss-colormin "^4.0.2" - postcss-convert-values "^4.0.1" - postcss-discard-comments "^4.0.1" - postcss-discard-duplicates "^4.0.2" - postcss-discard-empty "^4.0.1" - postcss-discard-overridden "^4.0.1" - postcss-merge-longhand "^4.0.9" - postcss-merge-rules "^4.0.2" - postcss-minify-font-values "^4.0.2" - postcss-minify-gradients "^4.0.1" - postcss-minify-params "^4.0.1" - postcss-minify-selectors "^4.0.1" - postcss-normalize-charset "^4.0.1" - postcss-normalize-display-values "^4.0.1" - postcss-normalize-positions "^4.0.1" - postcss-normalize-repeat-style "^4.0.1" - postcss-normalize-string "^4.0.1" - postcss-normalize-timing-functions "^4.0.1" - postcss-normalize-unicode "^4.0.1" - postcss-normalize-url "^4.0.1" - postcss-normalize-whitespace "^4.0.1" - postcss-ordered-values "^4.1.1" - postcss-reduce-initial "^4.0.2" - postcss-reduce-transforms "^4.0.1" - postcss-svgo "^4.0.1" - postcss-unique-selectors "^4.0.1" - -cssnano-util-get-arguments@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/cssnano-util-get-arguments/-/cssnano-util-get-arguments-4.0.0.tgz#ed3a08299f21d75741b20f3b81f194ed49cc150f" - -cssnano-util-get-match@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/cssnano-util-get-match/-/cssnano-util-get-match-4.0.0.tgz#c0e4ca07f5386bb17ec5e52250b4f5961365156d" - -cssnano-util-raw-cache@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/cssnano-util-raw-cache/-/cssnano-util-raw-cache-4.0.1.tgz#b26d5fd5f72a11dfe7a7846fb4c67260f96bf282" - dependencies: - postcss "^7.0.0" - -cssnano-util-same-parent@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/cssnano-util-same-parent/-/cssnano-util-same-parent-4.0.1.tgz#574082fb2859d2db433855835d9a8456ea18bbf3" - -cssnano@^3.10.0: - version "3.10.0" - resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-3.10.0.tgz#4f38f6cea2b9b17fa01490f23f1dc68ea65c1c38" - dependencies: - autoprefixer "^6.3.1" - decamelize "^1.1.2" - defined "^1.0.0" - has "^1.0.1" - object-assign "^4.0.1" - postcss "^5.0.14" - postcss-calc "^5.2.0" - postcss-colormin "^2.1.8" - postcss-convert-values "^2.3.4" - postcss-discard-comments "^2.0.4" - postcss-discard-duplicates "^2.0.1" - postcss-discard-empty "^2.0.1" - postcss-discard-overridden "^0.1.1" - postcss-discard-unused "^2.2.1" - postcss-filter-plugins "^2.0.0" - postcss-merge-idents "^2.1.5" - postcss-merge-longhand "^2.0.1" - postcss-merge-rules "^2.0.3" - postcss-minify-font-values "^1.0.2" - postcss-minify-gradients "^1.0.1" - postcss-minify-params "^1.0.4" - postcss-minify-selectors "^2.0.4" - postcss-normalize-charset "^1.1.0" - postcss-normalize-url "^3.0.7" - postcss-ordered-values "^2.1.0" - postcss-reduce-idents "^2.2.2" - postcss-reduce-initial "^1.0.0" - postcss-reduce-transforms "^1.0.3" - postcss-svgo "^2.1.1" - postcss-unique-selectors "^2.0.2" - postcss-value-parser "^3.2.3" - postcss-zindex "^2.0.1" - -cssnano@^4.1.0: - version "4.1.7" - resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-4.1.7.tgz#0bf112294bec103ab5f68d3f805732c8325a0b1b" - dependencies: - cosmiconfig "^5.0.0" - cssnano-preset-default "^4.0.5" - is-resolvable "^1.0.0" - postcss "^7.0.0" - -csso@^3.5.0: - version "3.5.1" - resolved "https://registry.yarnpkg.com/csso/-/csso-3.5.1.tgz#7b9eb8be61628973c1b261e169d2f024008e758b" - dependencies: - css-tree "1.0.0-alpha.29" - -csso@~2.3.1: - version "2.3.2" - resolved "https://registry.yarnpkg.com/csso/-/csso-2.3.2.tgz#ddd52c587033f49e94b71fc55569f252e8ff5f85" - dependencies: - clap "^1.0.9" - source-map "^0.5.3" - -cssom@0.3.x, "cssom@>= 0.3.2 < 0.4.0", cssom@^0.3.4: - version "0.3.4" - resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.4.tgz#8cd52e8a3acfd68d3aed38ee0a640177d2f9d797" - -cssstyle@^1.0.0, cssstyle@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-1.1.1.tgz#18b038a9c44d65f7a8e428a653b9f6fe42faf5fb" - dependencies: - cssom "0.3.x" - -currently-unhandled@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/currently-unhandled/-/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea" - dependencies: - array-find-index "^1.0.1" - -cyclist@~0.2.2: - version "0.2.2" - resolved "https://registry.yarnpkg.com/cyclist/-/cyclist-0.2.2.tgz#1b33792e11e914a2fd6d6ed6447464444e5fa640" - -damerau-levenshtein@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/damerau-levenshtein/-/damerau-levenshtein-1.0.4.tgz#03191c432cb6eea168bb77f3a55ffdccb8978514" - -dashdash@^1.12.0: - version "1.14.1" - resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" - dependencies: - assert-plus "^1.0.0" - -data-urls@^1.0.0, data-urls@^1.0.1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-1.1.0.tgz#15ee0582baa5e22bb59c77140da8f9c76963bbfe" - dependencies: - abab "^2.0.0" - whatwg-mimetype "^2.2.0" - whatwg-url "^7.0.0" - -date-fns@^1.27.2: - version "1.29.0" - resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-1.29.0.tgz#12e609cdcb935127311d04d33334e2960a2a54e6" - -date-now@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/date-now/-/date-now-0.1.4.tgz#eaf439fd4d4848ad74e5cc7dbef200672b9e345b" - -debug@*, debug@^4.0.0, debug@^4.0.1, debug@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.0.tgz#373687bffa678b38b1cd91f861b63850035ddc87" - dependencies: - ms "^2.1.1" - -debug@2.6.9, debug@^2.1.2, debug@^2.2.0, debug@^2.3.3, debug@^2.6.0, debug@^2.6.6, debug@^2.6.8, debug@^2.6.9: - version "2.6.9" - resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" - dependencies: - ms "2.0.0" - -debug@=3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" - dependencies: - ms "2.0.0" - -debug@^3.1.0: - version "3.2.6" - resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" - dependencies: - ms "^2.1.1" - -decamelize-keys@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/decamelize-keys/-/decamelize-keys-1.1.0.tgz#d171a87933252807eb3cb61dc1c1445d078df2d9" - dependencies: - decamelize "^1.1.0" - map-obj "^1.0.0" - -decamelize@^1.1.0, decamelize@^1.1.1, decamelize@^1.1.2: - version "1.2.0" - resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" - -decamelize@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-2.0.0.tgz#656d7bbc8094c4c788ea53c5840908c9c7d063c7" - dependencies: - xregexp "4.0.0" - -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" - -dedent@^0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c" - -deep-equal@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.0.1.tgz#f5d260292b660e084eff4cdbc9f08ad3247448b5" - -deep-extend@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" - -deep-is@~0.1.3: - version "0.1.3" - resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" - -default-gateway@^2.6.0: - version "2.7.2" - resolved "https://registry.yarnpkg.com/default-gateway/-/default-gateway-2.7.2.tgz#b7ef339e5e024b045467af403d50348db4642d0f" - dependencies: - execa "^0.10.0" - ip-regex "^2.1.0" - -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" - dependencies: - strip-bom "^2.0.0" - -deferred-leveldown@~0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/deferred-leveldown/-/deferred-leveldown-0.2.0.tgz#2cef1f111e1c57870d8bbb8af2650e587cd2f5b4" - dependencies: - abstract-leveldown "~0.12.1" - -define-properties@^1.1.2: - version "1.1.3" - resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" - dependencies: - object-keys "^1.0.12" - -define-property@^0.2.5: - version "0.2.5" - resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116" - dependencies: - is-descriptor "^0.1.0" - -define-property@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6" - dependencies: - is-descriptor "^1.0.0" - -define-property@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d" - dependencies: - is-descriptor "^1.0.2" - isobject "^3.0.1" - -defined@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/defined/-/defined-1.0.0.tgz#c98d9bcef75674188e110969151199e39b1fa693" - -del@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/del/-/del-3.0.0.tgz#53ecf699ffcbcb39637691ab13baf160819766e5" - dependencies: - globby "^6.1.0" - is-path-cwd "^1.0.0" - is-path-in-cwd "^1.0.0" - p-map "^1.1.1" - pify "^3.0.0" - rimraf "^2.2.8" - -delayed-stream@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" - -delegates@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" - -depd@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" - -des.js@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.0.tgz#c074d2e2aa6a8a9a07dbd61f9a15c2cd83ec8ecc" - dependencies: - inherits "^2.0.1" - minimalistic-assert "^1.0.0" - -destroy@~1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" - -detect-indent@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-4.0.0.tgz#f76d064352cdf43a1cb6ce619c4ee3a9475de208" - dependencies: - repeating "^2.0.0" - -detect-libc@^1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" - -detect-newline@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-2.1.0.tgz#f41f1c10be4b00e87b5f13da680759f2c5bfd3e2" - -detect-node@^2.0.3: - version "2.0.4" - resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.0.4.tgz#014ee8f8f669c5c58023da64b8179c083a28c46c" - -detect-port-alt@1.1.6: - version "1.1.6" - resolved "https://registry.yarnpkg.com/detect-port-alt/-/detect-port-alt-1.1.6.tgz#24707deabe932d4a3cf621302027c2b266568275" - dependencies: - address "^1.0.1" - debug "^2.6.0" - -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" - dependencies: - bn.js "^4.1.0" - miller-rabin "^4.0.0" - randombytes "^2.0.0" - -dir-glob@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-2.0.0.tgz#0b205d2b6aef98238ca286598a8204d29d0a0034" - dependencies: - arrify "^1.0.1" - path-type "^3.0.0" - -dns-equal@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/dns-equal/-/dns-equal-1.0.0.tgz#b39e7f1da6eb0a75ba9c17324b34753c47e0654d" - -dns-packet@^1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/dns-packet/-/dns-packet-1.3.1.tgz#12aa426981075be500b910eedcd0b47dd7deda5a" - dependencies: - ip "^1.1.0" - safe-buffer "^5.0.1" - -dns-txt@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/dns-txt/-/dns-txt-2.0.2.tgz#b91d806f5d27188e4ab3e7d107d881a1cc4642b6" - dependencies: - buffer-indexof "^1.0.0" - -doctrine@1.5.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-1.5.0.tgz#379dce730f6166f76cefa4e6707a159b02c5a6fa" - dependencies: - esutils "^2.0.2" - isarray "^1.0.0" - -doctrine@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d" - dependencies: - esutils "^2.0.2" - -dom-converter@~0.2: - version "0.2.0" - resolved "https://registry.yarnpkg.com/dom-converter/-/dom-converter-0.2.0.tgz#6721a9daee2e293682955b6afe416771627bb768" - dependencies: - utila "~0.4" - -dom-serializer@0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.1.0.tgz#073c697546ce0780ce23be4a28e293e40bc30c82" - dependencies: - domelementtype "~1.1.1" - entities "~1.1.1" - -domain-browser@^1.1.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.2.0.tgz#3d31f50191a6749dd1375a7f522e823d42e54eda" - -domelementtype@1, domelementtype@^1.3.0: - version "1.3.1" - resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.1.tgz#d048c44b37b0d10a7f2a3d5fee3f4333d790481f" - -domelementtype@~1.1.1: - version "1.1.3" - resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.1.3.tgz#bd28773e2642881aec51544924299c5cd822185b" - -domexception@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/domexception/-/domexception-1.0.1.tgz#937442644ca6a31261ef36e3ec677fe805582c90" - dependencies: - webidl-conversions "^4.0.2" - -domhandler@2.1: - version "2.1.0" - resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.1.0.tgz#d2646f5e57f6c3bab11cf6cb05d3c0acf7412594" - dependencies: - domelementtype "1" - -domhandler@^2.3.0: - version "2.4.2" - resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.4.2.tgz#8805097e933d65e85546f726d60f5eb88b44f803" - dependencies: - domelementtype "1" - -domutils@1.1: - version "1.1.6" - resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.1.6.tgz#bddc3de099b9a2efacc51c623f28f416ecc57485" - dependencies: - domelementtype "1" - -domutils@1.5.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.5.1.tgz#dcd8488a26f563d61079e48c9f7b7e32373682cf" - dependencies: - dom-serializer "0" - domelementtype "1" - -domutils@^1.5.1, domutils@^1.7.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.7.0.tgz#56ea341e834e06e6748af7a1cb25da67ea9f8c2a" - dependencies: - dom-serializer "0" - domelementtype "1" - -dot-prop@^4.1.1: - version "4.2.0" - resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-4.2.0.tgz#1f19e0c2e1aa0e32797c49799f2837ac6af69c57" - dependencies: - is-obj "^1.0.0" - -dotenv-expand@4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/dotenv-expand/-/dotenv-expand-4.2.0.tgz#def1f1ca5d6059d24a766e587942c21106ce1275" - -dotenv@6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-6.0.0.tgz#24e37c041741c5f4b25324958ebbc34bca965935" - -duplexer@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.1.tgz#ace6ff808c1ce66b57d1ebf97977acb02334cfc1" - -duplexify@^3.4.2, duplexify@^3.6.0: - version "3.6.1" - resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.6.1.tgz#b1a7a29c4abfd639585efaecce80d666b1e34125" - dependencies: - end-of-stream "^1.0.0" - inherits "^2.0.1" - readable-stream "^2.0.0" - stream-shift "^1.0.0" - -ecc-jsbn@~0.1.1: - version "0.1.2" - resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" - dependencies: - jsbn "~0.1.0" - safer-buffer "^2.1.0" - -ee-first@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" - -electron-to-chromium@^1.2.7, electron-to-chromium@^1.3.62, electron-to-chromium@^1.3.86: - version "1.3.88" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.88.tgz#f36ab32634f49ef2b0fdc1e82e2d1cc17feb29e7" - -electron-to-chromium@^1.3.92: - version "1.3.96" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.96.tgz#25770ec99b8b07706dedf3a5f43fa50cb54c4f9a" - -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" - 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" - -email-addresses@^3.0.1: - version "3.0.3" - resolved "https://registry.yarnpkg.com/email-addresses/-/email-addresses-3.0.3.tgz#fc3c6952f68da24239914e982c8a7783bc2ed96d" - -emoji-regex@^6.5.1: - version "6.5.1" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-6.5.1.tgz#9baea929b155565c11ea41c6626eaa65cef992c2" - -emojis-list@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389" - -encodeurl@~1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" - -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" - dependencies: - once "^1.4.0" - -enhanced-resolve@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-4.1.0.tgz#41c7e0bfdfe74ac1ffe1e57ad6a5c6c9f3742a7f" - dependencies: - graceful-fs "^4.1.2" - memory-fs "^0.4.0" - tapable "^1.0.0" - -entities@^1.1.1, entities@~1.1.1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.2.tgz#bdfa735299664dfafd34529ed4f8522a275fea56" - -errno@^0.1.1, errno@^0.1.3, errno@~0.1.1, errno@~0.1.7: - version "0.1.7" - resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.7.tgz#4684d71779ad39af177e3f007996f7c67c852618" - dependencies: - prr "~1.0.1" - -error-ex@^1.2.0, error-ex@^1.3.1: - version "1.3.2" - resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" - dependencies: - is-arrayish "^0.2.1" - -es-abstract@^1.5.1, es-abstract@^1.6.1, es-abstract@^1.7.0: - version "1.12.0" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.12.0.tgz#9dbbdd27c6856f0001421ca18782d786bf8a6165" - dependencies: - es-to-primitive "^1.1.1" - function-bind "^1.1.1" - has "^1.0.1" - is-callable "^1.1.3" - is-regex "^1.0.4" - -es-to-primitive@^1.1.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.0.tgz#edf72478033456e8dda8ef09e00ad9650707f377" - dependencies: - is-callable "^1.1.4" - is-date-object "^1.0.1" - is-symbol "^1.0.2" - -escape-html@~1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" - -escape-string-regexp@1.0.5, escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.4, escape-string-regexp@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" - -escodegen@^1.11.0, escodegen@^1.9.1: - version "1.11.0" - resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.11.0.tgz#b27a9389481d5bfd5bec76f7bb1eb3f8f4556589" - dependencies: - esprima "^3.1.3" - estraverse "^4.2.0" - esutils "^2.0.2" - optionator "^0.8.1" - optionalDependencies: - source-map "~0.6.1" - -eslint-config-react-app@^3.0.6: - version "3.0.6" - resolved "https://registry.yarnpkg.com/eslint-config-react-app/-/eslint-config-react-app-3.0.6.tgz#addcae1359235941e95f3c96970b7ac8552e1130" - dependencies: - confusing-browser-globals "^1.0.5" - -eslint-import-resolver-node@^0.3.1: - version "0.3.2" - resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.2.tgz#58f15fb839b8d0576ca980413476aab2472db66a" - dependencies: - debug "^2.6.9" - resolve "^1.5.0" - -eslint-loader@2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/eslint-loader/-/eslint-loader-2.1.1.tgz#2a9251523652430bfdd643efdb0afc1a2a89546a" - dependencies: - loader-fs-cache "^1.0.0" - loader-utils "^1.0.2" - object-assign "^4.0.1" - object-hash "^1.1.4" - rimraf "^2.6.1" - -eslint-module-utils@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.2.0.tgz#b270362cd88b1a48ad308976ce7fa54e98411746" - dependencies: - debug "^2.6.8" - pkg-dir "^1.0.0" - -eslint-plugin-es@^1.3.1: - version "1.4.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-es/-/eslint-plugin-es-1.4.0.tgz#475f65bb20c993fc10e8c8fe77d1d60068072da6" - dependencies: - eslint-utils "^1.3.0" - regexpp "^2.0.1" - -eslint-plugin-flowtype@2.50.1: - version "2.50.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-flowtype/-/eslint-plugin-flowtype-2.50.1.tgz#36d4c961ac8b9e9e1dc091d3fba0537dad34ae8a" - dependencies: - lodash "^4.17.10" - -eslint-plugin-import@2.14.0, eslint-plugin-import@^2.14.0: - version "2.14.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.14.0.tgz#6b17626d2e3e6ad52cfce8807a845d15e22111a8" - dependencies: - contains-path "^0.1.0" - debug "^2.6.8" - doctrine "1.5.0" - eslint-import-resolver-node "^0.3.1" - eslint-module-utils "^2.2.0" - has "^1.0.1" - lodash "^4.17.4" - minimatch "^3.0.3" - read-pkg-up "^2.0.0" - resolve "^1.6.0" - -eslint-plugin-jsx-a11y@6.1.2: - version "6.1.2" - resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.1.2.tgz#69bca4890b36dcf0fe16dd2129d2d88b98f33f88" - dependencies: - aria-query "^3.0.0" - array-includes "^3.0.3" - ast-types-flow "^0.0.7" - axobject-query "^2.0.1" - damerau-levenshtein "^1.0.4" - emoji-regex "^6.5.1" - has "^1.0.3" - jsx-ast-utils "^2.0.1" - -eslint-plugin-node@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-node/-/eslint-plugin-node-8.0.0.tgz#fb9e8911f4543514f154bb6a5924b599aa645568" - dependencies: - eslint-plugin-es "^1.3.1" - eslint-utils "^1.3.1" - ignore "^5.0.2" - minimatch "^3.0.4" - resolve "^1.8.1" - semver "^5.5.0" - -eslint-plugin-promise@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-promise/-/eslint-plugin-promise-4.0.1.tgz#2d074b653f35a23d1ba89d8e976a985117d1c6a2" - -eslint-plugin-react@7.11.1, eslint-plugin-react@^7.11.1: - version "7.11.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.11.1.tgz#c01a7af6f17519457d6116aa94fc6d2ccad5443c" - dependencies: - array-includes "^3.0.3" - doctrine "^2.1.0" - has "^1.0.3" - jsx-ast-utils "^2.0.1" - prop-types "^15.6.2" - -eslint-scope@3.7.1: - version "3.7.1" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-3.7.1.tgz#3d63c3edfda02e06e01a452ad88caacc7cdcb6e8" - dependencies: - esrecurse "^4.1.0" - estraverse "^4.1.1" - -eslint-scope@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-4.0.0.tgz#50bf3071e9338bcdc43331794a0cb533f0136172" - dependencies: - esrecurse "^4.1.0" - estraverse "^4.1.1" - -eslint-utils@^1.3.0, eslint-utils@^1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-1.3.1.tgz#9a851ba89ee7c460346f97cf8939c7298827e512" - -eslint-visitor-keys@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz#3f3180fb2e291017716acb4c9d6d5b5c34a6a81d" - -eslint@5.6.0: - version "5.6.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-5.6.0.tgz#b6f7806041af01f71b3f1895cbb20971ea4b6223" - dependencies: - "@babel/code-frame" "^7.0.0" - ajv "^6.5.3" - chalk "^2.1.0" - cross-spawn "^6.0.5" - debug "^3.1.0" - doctrine "^2.1.0" - eslint-scope "^4.0.0" - eslint-utils "^1.3.1" - eslint-visitor-keys "^1.0.0" - espree "^4.0.0" - esquery "^1.0.1" - esutils "^2.0.2" - file-entry-cache "^2.0.0" - functional-red-black-tree "^1.0.1" - glob "^7.1.2" - globals "^11.7.0" - ignore "^4.0.6" - imurmurhash "^0.1.4" - inquirer "^6.1.0" - is-resolvable "^1.1.0" - js-yaml "^3.12.0" - json-stable-stringify-without-jsonify "^1.0.1" - levn "^0.3.0" - lodash "^4.17.5" - minimatch "^3.0.4" - mkdirp "^0.5.1" - natural-compare "^1.4.0" - optionator "^0.8.2" - path-is-inside "^1.0.2" - pluralize "^7.0.0" - progress "^2.0.0" - regexpp "^2.0.0" - require-uncached "^1.0.3" - semver "^5.5.1" - strip-ansi "^4.0.0" - strip-json-comments "^2.0.1" - table "^4.0.3" - text-table "^0.2.0" - -espree@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/espree/-/espree-4.1.0.tgz#728d5451e0fd156c04384a7ad89ed51ff54eb25f" - dependencies: - acorn "^6.0.2" - acorn-jsx "^5.0.0" - eslint-visitor-keys "^1.0.0" - -esprima@^2.6.0: - version "2.7.3" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-2.7.3.tgz#96e3b70d5779f6ad49cd032673d1c312767ba581" - -esprima@^3.1.3: - version "3.1.3" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633" - -esprima@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" - -esquery@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.0.1.tgz#406c51658b1f5991a5f9b62b1dc25b00e3e5c708" - dependencies: - estraverse "^4.0.0" - -esrecurse@^4.1.0: - version "4.2.1" - resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.2.1.tgz#007a3b9fdbc2b3bb87e4879ea19c92fdbd3942cf" - dependencies: - estraverse "^4.1.0" - -estraverse@^4.0.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" - -estree-walker@^0.5.2: - version "0.5.2" - resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-0.5.2.tgz#d3850be7529c9580d815600b53126515e146dd39" - -esutils@^2.0.0, esutils@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b" - -etag@~1.8.1: - version "1.8.1" - resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" - -eventemitter3@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-3.1.0.tgz#090b4d6cdbd645ed10bf750d4b5407942d7ba163" - -events@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/events/-/events-1.1.1.tgz#9ebdb7635ad099c70dcc4c2a1f5004288e8bd924" - -eventsource@0.1.6: - version "0.1.6" - resolved "https://registry.yarnpkg.com/eventsource/-/eventsource-0.1.6.tgz#0acede849ed7dd1ccc32c811bb11b944d4f29232" - dependencies: - original ">=0.0.5" - -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" - dependencies: - md5.js "^1.3.4" - safe-buffer "^5.1.1" - -exec-sh@^0.2.0: - version "0.2.2" - resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.2.2.tgz#2a5e7ffcbd7d0ba2755bdecb16e5a427dfbdec36" - dependencies: - merge "^1.2.0" - -execa@^0.10.0: - version "0.10.0" - resolved "https://registry.yarnpkg.com/execa/-/execa-0.10.0.tgz#ff456a8f53f90f8eccc71a96d11bdfc7f082cb50" - dependencies: - cross-spawn "^6.0.0" - get-stream "^3.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" - -execa@^0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/execa/-/execa-0.7.0.tgz#944becd34cc41ee32a63a9faf27ad5a65fc59777" - dependencies: - cross-spawn "^5.0.1" - get-stream "^3.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" - -execa@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8" - 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" - -execall@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/execall/-/execall-1.0.0.tgz#73d0904e395b3cab0658b08d09ec25307f29bb73" - dependencies: - clone-regexp "^1.0.0" - -exit@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" - -expand-brackets@^0.1.4: - version "0.1.5" - resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-0.1.5.tgz#df07284e342a807cd733ac5af72411e581d1177b" - dependencies: - is-posix-bracket "^0.1.0" - -expand-brackets@^2.1.4: - version "2.1.4" - resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" - dependencies: - debug "^2.3.3" - define-property "^0.2.5" - extend-shallow "^2.0.1" - posix-character-classes "^0.1.0" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.1" - -expand-range@^1.8.1: - version "1.8.2" - resolved "https://registry.yarnpkg.com/expand-range/-/expand-range-1.8.2.tgz#a299effd335fe2721ebae8e257ec79644fc85337" - dependencies: - fill-range "^2.1.0" - -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" - dependencies: - homedir-polyfill "^1.0.1" - -expect@^23.6.0: - version "23.6.0" - resolved "https://registry.yarnpkg.com/expect/-/expect-23.6.0.tgz#1e0c8d3ba9a581c87bd71fb9bc8862d443425f98" - dependencies: - ansi-styles "^3.2.0" - jest-diff "^23.6.0" - jest-get-type "^22.1.0" - jest-matcher-utils "^23.6.0" - jest-message-util "^23.4.0" - jest-regex-util "^23.3.0" - -express@^4.16.2: - version "4.16.4" - resolved "https://registry.yarnpkg.com/express/-/express-4.16.4.tgz#fddef61926109e24c515ea97fd2f1bdbf62df12e" - dependencies: - accepts "~1.3.5" - array-flatten "1.1.1" - body-parser "1.18.3" - content-disposition "0.5.2" - content-type "~1.0.4" - cookie "0.3.1" - cookie-signature "1.0.6" - debug "2.6.9" - depd "~1.1.2" - encodeurl "~1.0.2" - escape-html "~1.0.3" - etag "~1.8.1" - finalhandler "1.1.1" - fresh "0.5.2" - merge-descriptors "1.0.1" - methods "~1.1.2" - on-finished "~2.3.0" - parseurl "~1.3.2" - path-to-regexp "0.1.7" - proxy-addr "~2.0.4" - qs "6.5.2" - range-parser "~1.2.0" - safe-buffer "5.1.2" - send "0.16.2" - serve-static "1.13.2" - setprototypeof "1.1.0" - statuses "~1.4.0" - type-is "~1.6.16" - utils-merge "1.0.1" - vary "~1.1.2" - -extend-shallow@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" - dependencies: - is-extendable "^0.1.0" - -extend-shallow@^3.0.0, extend-shallow@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8" - dependencies: - assign-symbols "^1.0.0" - is-extendable "^1.0.1" - -extend@^3.0.0, extend@~3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" - -external-editor@^3.0.0: - version "3.0.3" - resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.0.3.tgz#5866db29a97826dbe4bf3afd24070ead9ea43a27" - dependencies: - chardet "^0.7.0" - iconv-lite "^0.4.24" - tmp "^0.0.33" - -extglob@^0.3.1: - version "0.3.2" - resolved "https://registry.yarnpkg.com/extglob/-/extglob-0.3.2.tgz#2e18ff3d2f49ab2765cec9023f011daa8d8349a1" - dependencies: - is-extglob "^1.0.0" - -extglob@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" - dependencies: - array-unique "^0.3.2" - define-property "^1.0.0" - expand-brackets "^2.1.4" - extend-shallow "^2.0.1" - fragment-cache "^0.2.1" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.1" - -extsprintf@1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" - -extsprintf@^1.2.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f" - -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" - -fast-glob@^2.0.2: - version "2.2.4" - resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-2.2.4.tgz#e54f4b66d378040e0e4d6a68ec36bbc5b04363c0" - dependencies: - "@mrmlnc/readdir-enhanced" "^2.2.1" - "@nodelib/fs.stat" "^1.1.2" - glob-parent "^3.1.0" - is-glob "^4.0.0" - merge2 "^1.2.3" - micromatch "^3.1.10" - -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" - -fast-levenshtein@~2.0.4: - version "2.0.6" - resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" - -fastparse@^1.1.1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/fastparse/-/fastparse-1.1.2.tgz#91728c5a5942eced8531283c79441ee4122c35a9" - -faye-websocket@^0.10.0: - version "0.10.0" - resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.10.0.tgz#4e492f8d04dfb6f89003507f6edbf2d501e7c6f4" - dependencies: - websocket-driver ">=0.5.1" - -faye-websocket@~0.11.0: - version "0.11.1" - resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.11.1.tgz#f0efe18c4f56e4f40afc7e06c719fd5ee6188f38" - dependencies: - websocket-driver ">=0.5.1" - -fb-watchman@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.0.tgz#54e9abf7dfa2f26cd9b1636c588c1afc05de5d58" - dependencies: - bser "^2.0.0" - -figgy-pudding@^3.1.0, figgy-pudding@^3.5.1: - version "3.5.1" - resolved "https://registry.yarnpkg.com/figgy-pudding/-/figgy-pudding-3.5.1.tgz#862470112901c727a0e495a80744bd5baa1d6790" - -figures@^1.7.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/figures/-/figures-1.7.0.tgz#cbe1e3affcf1cd44b80cadfed28dc793a9701d2e" - dependencies: - escape-string-regexp "^1.0.5" - object-assign "^4.1.0" - -figures@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962" - dependencies: - escape-string-regexp "^1.0.5" - -file-entry-cache@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-2.0.0.tgz#c392990c3e684783d838b8c84a45d8a048458361" - dependencies: - flat-cache "^1.2.1" - object-assign "^4.0.1" - -file-loader@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-2.0.0.tgz#39749c82f020b9e85901dcff98e8004e6401cfde" - dependencies: - loader-utils "^1.0.2" - schema-utils "^1.0.0" - -filename-regex@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/filename-regex/-/filename-regex-2.0.1.tgz#c1c4b9bee3e09725ddb106b75c1e301fe2f18b26" - -filename-reserved-regex@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/filename-reserved-regex/-/filename-reserved-regex-1.0.0.tgz#e61cf805f0de1c984567d0386dc5df50ee5af7e4" - -filenamify-url@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/filenamify-url/-/filenamify-url-1.0.0.tgz#b32bd81319ef5863b73078bed50f46a4f7975f50" - dependencies: - filenamify "^1.0.0" - humanize-url "^1.0.0" - -filenamify@^1.0.0: - version "1.2.1" - resolved "https://registry.yarnpkg.com/filenamify/-/filenamify-1.2.1.tgz#a9f2ffd11c503bed300015029272378f1f1365a5" - dependencies: - filename-reserved-regex "^1.0.0" - strip-outer "^1.0.0" - trim-repeated "^1.0.0" - -fileset@^2.0.2: - version "2.0.3" - resolved "https://registry.yarnpkg.com/fileset/-/fileset-2.0.3.tgz#8e7548a96d3cc2327ee5e674168723a333bba2a0" - dependencies: - glob "^7.0.3" - minimatch "^3.0.3" - -filesize@3.6.1: - version "3.6.1" - resolved "https://registry.yarnpkg.com/filesize/-/filesize-3.6.1.tgz#090bb3ee01b6f801a8a8be99d31710b3422bb317" - -fill-range@^2.1.0: - version "2.2.4" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-2.2.4.tgz#eb1e773abb056dcd8df2bfdf6af59b8b3a936565" - dependencies: - is-number "^2.1.0" - isobject "^2.0.0" - randomatic "^3.0.0" - repeat-element "^1.1.2" - repeat-string "^1.5.2" - -fill-range@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" - dependencies: - extend-shallow "^2.0.1" - is-number "^3.0.0" - repeat-string "^1.6.1" - to-regex-range "^2.1.0" - -finalhandler@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.1.tgz#eebf4ed840079c83f4249038c9d703008301b105" - dependencies: - debug "2.6.9" - encodeurl "~1.0.2" - escape-html "~1.0.3" - on-finished "~2.3.0" - parseurl "~1.3.2" - statuses "~1.4.0" - unpipe "~1.0.0" - -find-cache-dir@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-0.1.1.tgz#c8defae57c8a52a8a784f9e31c57c742e993a0b9" - dependencies: - commondir "^1.0.1" - mkdirp "^0.5.1" - pkg-dir "^1.0.0" - -find-cache-dir@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-1.0.0.tgz#9288e3e9e3cc3748717d39eade17cf71fc30ee6f" - dependencies: - commondir "^1.0.1" - make-dir "^1.0.0" - pkg-dir "^2.0.0" - -find-cache-dir@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-2.0.0.tgz#4c1faed59f45184530fb9d7fa123a4d04a98472d" - dependencies: - commondir "^1.0.1" - make-dir "^1.0.0" - pkg-dir "^3.0.0" - -find-parent-dir@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/find-parent-dir/-/find-parent-dir-0.3.0.tgz#33c44b429ab2b2f0646299c5f9f718f376ff8d54" - -find-up@3.0.0, find-up@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" - dependencies: - locate-path "^3.0.0" - -find-up@^1.0.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f" - dependencies: - path-exists "^2.0.0" - pinkie-promise "^2.0.0" - -find-up@^2.0.0, find-up@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" - dependencies: - locate-path "^2.0.0" - -flat-cache@^1.2.1: - version "1.3.4" - resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-1.3.4.tgz#2c2ef77525cc2929007dfffa1dd314aa9c9dee6f" - dependencies: - circular-json "^0.3.1" - graceful-fs "^4.1.2" - rimraf "~2.6.2" - write "^0.2.1" - -flatten@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/flatten/-/flatten-1.0.2.tgz#dae46a9d78fbe25292258cc1e780a41d95c03782" - -flush-write-stream@^1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/flush-write-stream/-/flush-write-stream-1.0.3.tgz#c5d586ef38af6097650b49bc41b55fabb19f35bd" - dependencies: - inherits "^2.0.1" - readable-stream "^2.0.4" - -follow-redirects@^1.0.0: - version "1.5.10" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.5.10.tgz#7b7a9f9aea2fdff36786a94ff643ed07f4ff5e2a" - dependencies: - debug "=3.1.0" - -for-in@^0.1.3: - version "0.1.8" - resolved "https://registry.yarnpkg.com/for-in/-/for-in-0.1.8.tgz#d8773908e31256109952b1fdb9b3fa867d2775e1" - -for-in@^1.0.1, for-in@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" - -for-own@^0.1.3, for-own@^0.1.4: - version "0.1.5" - resolved "https://registry.yarnpkg.com/for-own/-/for-own-0.1.5.tgz#5265c681a4f294dabbf17c9509b6763aa84510ce" - dependencies: - for-in "^1.0.1" - -for-own@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/for-own/-/for-own-1.0.0.tgz#c63332f415cedc4b04dbfe70cf836494c53cb44b" - dependencies: - for-in "^1.0.1" - -foreach@~2.0.1: - version "2.0.5" - resolved "https://registry.yarnpkg.com/foreach/-/foreach-2.0.5.tgz#0bee005018aeb260d0a3af3ae658dd0136ec1b99" - -forever-agent@~0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" - -fork-ts-checker-webpack-plugin-alt@0.4.14: - version "0.4.14" - resolved "https://registry.yarnpkg.com/fork-ts-checker-webpack-plugin-alt/-/fork-ts-checker-webpack-plugin-alt-0.4.14.tgz#1bd6c0d97b7d4682dde61255fcbd78b72f7473a0" - dependencies: - babel-code-frame "^6.22.0" - chalk "^2.4.1" - chokidar "^2.0.4" - lodash "^4.17.11" - micromatch "^3.1.10" - minimatch "^3.0.4" - resolve "^1.5.0" - tapable "^1.0.0" - -form-data@~2.3.2: - version "2.3.3" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" - dependencies: - asynckit "^0.4.0" - combined-stream "^1.0.6" - mime-types "^2.1.12" - -forwarded@~0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.2.tgz#98c23dab1175657b8c0573e8ceccd91b0ff18c84" - -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" - -fresh@0.5.2: - version "0.5.2" - resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" - -from2@^2.1.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/from2/-/from2-2.3.0.tgz#8bfb5502bde4a4d36cfdeea007fcca21d7e382af" - dependencies: - inherits "^2.0.1" - readable-stream "^2.0.0" - -fs-extra@7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-7.0.0.tgz#8cc3f47ce07ef7b3593a11b9fb245f7e34c041d6" - dependencies: - graceful-fs "^4.1.2" - jsonfile "^4.0.0" - universalify "^0.1.0" - -fs-extra@^4.0.2: - version "4.0.3" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-4.0.3.tgz#0d852122e5bc5beb453fb028e9c0c9bf36340c94" - dependencies: - graceful-fs "^4.1.2" - jsonfile "^4.0.0" - universalify "^0.1.0" - -fs-extra@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-5.0.0.tgz#414d0110cdd06705734d055652c5411260c31abd" - dependencies: - graceful-fs "^4.1.2" - jsonfile "^4.0.0" - universalify "^0.1.0" - -fs-extra@^7.0.0: - version "7.0.1" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-7.0.1.tgz#4f189c44aa123b895f722804f55ea23eadc348e9" - dependencies: - graceful-fs "^4.1.2" - jsonfile "^4.0.0" - universalify "^0.1.0" - -fs-minipass@^1.2.5: - version "1.2.5" - resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.5.tgz#06c277218454ec288df77ada54a03b8702aacb9d" - dependencies: - minipass "^2.2.1" - -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" - dependencies: - graceful-fs "^4.1.2" - iferr "^0.1.5" - imurmurhash "^0.1.4" - readable-stream "1 || 2" - -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.4, fsevents@^1.2.2, fsevents@^1.2.3: - version "1.2.4" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.4.tgz#f41dcb1af2582af3692da36fc55cbd8e1041c426" - dependencies: - nan "^2.9.2" - node-pre-gyp "^0.10.0" - -function-bind@^1.1.0, function-bind@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" - -functional-red-black-tree@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" - -fwd-stream@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/fwd-stream/-/fwd-stream-1.0.4.tgz#ed281cabed46feecf921ee32dc4c50b372ac7cfa" - dependencies: - readable-stream "~1.0.26-4" - -g-status@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/g-status/-/g-status-2.0.2.tgz#270fd32119e8fc9496f066fe5fe88e0a6bc78b97" - dependencies: - arrify "^1.0.1" - matcher "^1.0.0" - simple-git "^1.85.0" - -gauge@~2.7.3: - version "2.7.4" - resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" - dependencies: - aproba "^1.0.3" - console-control-strings "^1.0.0" - has-unicode "^2.0.0" - object-assign "^4.1.0" - signal-exit "^3.0.0" - string-width "^1.0.1" - strip-ansi "^3.0.1" - wide-align "^1.1.0" - -generic-names@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/generic-names/-/generic-names-1.0.3.tgz#2d786a121aee508876796939e8e3bff836c20917" - dependencies: - loader-utils "^0.2.16" - -get-caller-file@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.3.tgz#f978fa4c90d1dfe7ff2d6beda2a515e713bdcf4a" - -get-own-enumerable-property-symbols@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.0.tgz#b877b49a5c16aefac3655f2ed2ea5b684df8d203" - -get-stdin@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-6.0.0.tgz#9e09bf712b360ab9225e812048f71fde9c89657b" - -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" - 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" - -getpass@^0.1.1: - version "0.1.7" - resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" - dependencies: - assert-plus "^1.0.0" - -gh-pages@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/gh-pages/-/gh-pages-2.0.1.tgz#aefe47a43b8d9d2aa3130576b33fe95641e29a2f" - dependencies: - async "^2.6.1" - commander "^2.18.0" - email-addresses "^3.0.1" - filenamify-url "^1.0.0" - fs-extra "^7.0.0" - globby "^6.1.0" - graceful-fs "^4.1.11" - rimraf "^2.6.2" - -glob-base@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/glob-base/-/glob-base-0.3.0.tgz#dbb164f6221b1c0b1ccf82aea328b497df0ea3c4" - dependencies: - glob-parent "^2.0.0" - is-glob "^2.0.0" - -glob-parent@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-2.0.0.tgz#81383d72db054fcccf5336daa902f182f6edbb28" - dependencies: - is-glob "^2.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" - dependencies: - is-glob "^3.1.0" - path-dirname "^1.0.0" - -glob-to-regexp@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz#8c5a1494d2066c570cc3bfe4496175acc4d502ab" - -glob@7.0.x: - version "7.0.6" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.0.6.tgz#211bafaf49e525b8cd93260d14ab136152b3f57a" - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.0.2" - once "^1.3.0" - path-is-absolute "^1.0.0" - -glob@^7.0.3, glob@^7.0.5, glob@^7.1.1, glob@^7.1.2: - version "7.1.3" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.3.tgz#3960832d3f1574108342dafd3a67b332c0969df1" - dependencies: - 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" - -global-modules@1.0.0, global-modules@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-1.0.0.tgz#6d770f0eb523ac78164d72b5e71a8877265cc3ea" - dependencies: - global-prefix "^1.0.1" - is-windows "^1.0.1" - resolve-dir "^1.0.0" - -global-prefix@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-1.0.2.tgz#dbf743c6c14992593c655568cb66ed32c0122ebe" - dependencies: - expand-tilde "^2.0.2" - homedir-polyfill "^1.0.1" - ini "^1.3.4" - is-windows "^1.0.1" - which "^1.2.14" - -globals@^11.1.0, globals@^11.7.0: - version "11.9.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-11.9.0.tgz#bde236808e987f290768a93d065060d78e6ab249" - -globals@^9.18.0: - version "9.18.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a" - -globby@8.0.1, globby@^8.0.0: - version "8.0.1" - resolved "https://registry.yarnpkg.com/globby/-/globby-8.0.1.tgz#b5ad48b8aa80b35b814fc1281ecc851f1d2b5b50" - dependencies: - array-union "^1.0.1" - dir-glob "^2.0.0" - fast-glob "^2.0.2" - glob "^7.1.2" - ignore "^3.3.5" - pify "^3.0.0" - slash "^1.0.0" - -globby@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/globby/-/globby-6.1.0.tgz#f5a6d70e8395e21c858fb0489d64df02424d506c" - dependencies: - array-union "^1.0.1" - glob "^7.0.3" - object-assign "^4.0.1" - pify "^2.0.0" - pinkie-promise "^2.0.0" - -globjoin@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/globjoin/-/globjoin-0.1.4.tgz#2f4494ac8919e3767c5cbb691e9f463324285d43" - -gonzales-pe@^4.2.3: - version "4.2.3" - resolved "https://registry.yarnpkg.com/gonzales-pe/-/gonzales-pe-4.2.3.tgz#41091703625433285e0aee3aa47829fc1fbeb6f2" - dependencies: - minimist "1.1.x" - -graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.6: - version "4.1.15" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.15.tgz#ffb703e1066e8a0eeaa4c8b80ba9253eeefbfb00" - -growly@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081" - -gzip-size@5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/gzip-size/-/gzip-size-5.0.0.tgz#a55ecd99222f4c48fd8c01c625ce3b349d0a0e80" - dependencies: - duplexer "^0.1.1" - pify "^3.0.0" - -h2x-core@^1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/h2x-core/-/h2x-core-1.1.1.tgz#7fb31ab28e30ebf11818e3c7d183487ecf489f9f" - dependencies: - h2x-generate "^1.1.0" - h2x-parse "^1.1.1" - h2x-traverse "^1.1.0" - -h2x-generate@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/h2x-generate/-/h2x-generate-1.1.0.tgz#c2c98c60070e1eed231e482d5826c3c5dab2a9ba" - dependencies: - h2x-traverse "^1.1.0" - -h2x-parse@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/h2x-parse/-/h2x-parse-1.1.1.tgz#875712cd3be75cf736c610d279b8653b24f58385" - dependencies: - h2x-types "^1.1.0" - jsdom ">=11.0.0" - -h2x-plugin-jsx@^1.1.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/h2x-plugin-jsx/-/h2x-plugin-jsx-1.2.0.tgz#211fa02e5c4e0a07307b0005629923910e631c01" - dependencies: - h2x-types "^1.1.0" - -h2x-traverse@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/h2x-traverse/-/h2x-traverse-1.1.0.tgz#194b36c593f4e20a754dee47fa6b2288647b2271" - dependencies: - h2x-types "^1.1.0" - -h2x-types@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/h2x-types/-/h2x-types-1.1.0.tgz#ec0d5e3674e2207269f32976ac9c82aaff4818e6" - -handle-thing@^1.2.5: - version "1.2.5" - resolved "https://registry.yarnpkg.com/handle-thing/-/handle-thing-1.2.5.tgz#fd7aad726bf1a5fd16dfc29b2f7a6601d27139c4" - -handlebars@^4.0.3: - version "4.1.2" - resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.1.2.tgz#b6b37c1ced0306b221e094fc7aca3ec23b131b67" - integrity sha512-nvfrjqvt9xQ8Z/w0ijewdD/vvWDTOweBUm96NTr66Wfvo1mJenBLwcYmPs3TIBP5ruzYGD7Hx/DaM9RmhroGPw== - dependencies: - neo-async "^2.6.0" - optimist "^0.6.1" - source-map "^0.6.1" - optionalDependencies: - 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@~5.1.0: - version "5.1.3" - resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.3.tgz#1ef89ebd3e4996557675eed9893110dc350fa080" - dependencies: - ajv "^6.5.5" - har-schema "^2.0.0" - -harmony-reflect@^1.4.6: - version "1.6.1" - resolved "https://registry.yarnpkg.com/harmony-reflect/-/harmony-reflect-1.6.1.tgz#c108d4f2bb451efef7a37861fdbdae72c9bdefa9" - -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@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" - -has-symbols@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.0.tgz#ba1a8f1af2a0fc39650f5c850367704122063b44" - -has-unicode@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" - -has-value@^0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" - dependencies: - get-value "^2.0.3" - has-values "^0.1.4" - isobject "^2.0.0" - -has-value@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177" - dependencies: - get-value "^2.0.6" - has-values "^1.0.0" - isobject "^3.0.0" - -has-values@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771" - -has-values@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f" - dependencies: - is-number "^3.0.0" - kind-of "^4.0.0" - -has@^1.0.0, has@^1.0.1, has@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" - dependencies: - function-bind "^1.1.1" - -hash-base@^3.0.0: - version "3.0.4" - resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.0.4.tgz#5fc8686847ecd73499403319a6b0a3f3f6ae4918" - 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" - dependencies: - inherits "^2.0.3" - minimalistic-assert "^1.0.1" - -hast-util-from-parse5@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/hast-util-from-parse5/-/hast-util-from-parse5-5.0.0.tgz#a505a05766e0f96e389bfb0b1dd809eeefcef47b" - dependencies: - ccount "^1.0.3" - hastscript "^5.0.0" - property-information "^5.0.0" - web-namespaces "^1.1.2" - xtend "^4.0.1" - -hast-util-parse-selector@^2.2.0: - version "2.2.1" - resolved "https://registry.yarnpkg.com/hast-util-parse-selector/-/hast-util-parse-selector-2.2.1.tgz#4ddbae1ae12c124e3eb91b581d2556441766f0ab" - -hastscript@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/hastscript/-/hastscript-5.0.0.tgz#fee10382c1bc4ba3f1be311521d368c047d2c43a" - dependencies: - comma-separated-tokens "^1.0.0" - hast-util-parse-selector "^2.2.0" - property-information "^5.0.1" - space-separated-tokens "^1.0.0" - -he@1.2.x: - version "1.2.0" - resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" - -hex-color-regex@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/hex-color-regex/-/hex-color-regex-1.1.0.tgz#4c06fccb4602fe2602b3c93df82d7e7dbf1a8a8e" - -hmac-drbg@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" - 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.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/homedir-polyfill/-/homedir-polyfill-1.0.1.tgz#4c2bbc8a758998feebf5ed68580f76d46768b4bc" - dependencies: - parse-passwd "^1.0.0" - -hoopy@^0.1.2: - version "0.1.4" - resolved "https://registry.yarnpkg.com/hoopy/-/hoopy-0.1.4.tgz#609207d661100033a9a9402ad3dea677381c1b1d" - -hosted-git-info@^2.1.4: - version "2.7.1" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.7.1.tgz#97f236977bd6e125408930ff6de3eec6281ec047" - -hpack.js@^2.1.6: - version "2.1.6" - resolved "https://registry.yarnpkg.com/hpack.js/-/hpack.js-2.1.6.tgz#87774c0949e513f42e84575b3c45681fade2a0b2" - dependencies: - inherits "^2.0.1" - obuf "^1.0.0" - readable-stream "^2.0.1" - wbuf "^1.1.0" - -hsl-regex@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/hsl-regex/-/hsl-regex-1.0.0.tgz#d49330c789ed819e276a4c0d272dffa30b18fe6e" - -hsla-regex@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/hsla-regex/-/hsla-regex-1.0.0.tgz#c1ce7a3168c8c6614033a4b5f7877f3b225f9c38" - -html-comment-regex@^1.1.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/html-comment-regex/-/html-comment-regex-1.1.2.tgz#97d4688aeb5c81886a364faa0cad1dda14d433a7" - -html-encoding-sniffer@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz#e70d84b94da53aa375e11fe3a351be6642ca46f8" - dependencies: - whatwg-encoding "^1.0.1" - -html-entities@^1.2.0: - version "1.2.1" - resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-1.2.1.tgz#0df29351f0721163515dfb9e5543e5f6eed5162f" - -html-minifier@^3.2.3: - version "3.5.21" - resolved "https://registry.yarnpkg.com/html-minifier/-/html-minifier-3.5.21.tgz#d0040e054730e354db008463593194015212d20c" - dependencies: - camel-case "3.0.x" - clean-css "4.2.x" - commander "2.17.x" - he "1.2.x" - param-case "2.1.x" - relateurl "0.2.x" - uglify-js "3.4.x" - -html-tags@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/html-tags/-/html-tags-2.0.0.tgz#10b30a386085f43cede353cc8fa7cb0deeea668b" - -html-webpack-plugin@4.0.0-alpha.2: - version "4.0.0-alpha.2" - resolved "https://registry.yarnpkg.com/html-webpack-plugin/-/html-webpack-plugin-4.0.0-alpha.2.tgz#7745967e389a57a098e26963f328ebe4c19b598d" - dependencies: - "@types/tapable" "1.0.2" - html-minifier "^3.2.3" - loader-utils "^1.1.0" - lodash "^4.17.10" - pretty-error "^2.0.2" - tapable "^1.0.0" - util.promisify "1.0.0" - -htmlparser2@^3.9.2: - version "3.10.0" - resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.10.0.tgz#5f5e422dcf6119c0d983ed36260ce9ded0bee464" - dependencies: - domelementtype "^1.3.0" - domhandler "^2.3.0" - domutils "^1.5.1" - entities "^1.1.1" - inherits "^2.0.1" - readable-stream "^3.0.6" - -htmlparser2@~3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.3.0.tgz#cc70d05a59f6542e43f0e685c982e14c924a9efe" - dependencies: - domelementtype "1" - domhandler "2.1" - domutils "1.1" - readable-stream "1.0" - -http-deceiver@^1.2.7: - version "1.2.7" - resolved "https://registry.yarnpkg.com/http-deceiver/-/http-deceiver-1.2.7.tgz#fa7168944ab9a519d337cb0bec7284dc3e723d87" - -http-errors@1.6.3, http-errors@~1.6.2, http-errors@~1.6.3: - version "1.6.3" - resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.3.tgz#8b55680bb4be283a0b5bf4ea2e38580be1d9320d" - dependencies: - depd "~1.1.2" - inherits "2.0.3" - setprototypeof "1.1.0" - statuses ">= 1.4.0 < 2" - -http-parser-js@>=0.4.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.5.0.tgz#d65edbede84349d0dc30320815a15d39cc3cbbd8" - -http-proxy-middleware@~0.18.0: - version "0.18.0" - resolved "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-0.18.0.tgz#0987e6bb5a5606e5a69168d8f967a87f15dd8aab" - dependencies: - http-proxy "^1.16.2" - is-glob "^4.0.0" - lodash "^4.17.5" - micromatch "^3.1.9" - -http-proxy@^1.16.2: - version "1.17.0" - resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.17.0.tgz#7ad38494658f84605e2f6db4436df410f4e5be9a" - dependencies: - eventemitter3 "^3.0.0" - follow-redirects "^1.0.0" - requires-port "^1.0.0" - -http-signature@~1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" - dependencies: - assert-plus "^1.0.0" - jsprim "^1.2.2" - sshpk "^1.7.0" - -https-browserify@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73" - -humanize-url@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/humanize-url/-/humanize-url-1.0.1.tgz#f4ab99e0d288174ca4e1e50407c55fbae464efff" - dependencies: - normalize-url "^1.0.0" - strip-url-auth "^1.0.0" - -husky@^1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/husky/-/husky-1.3.1.tgz#26823e399300388ca2afff11cfa8a86b0033fae0" - dependencies: - cosmiconfig "^5.0.7" - execa "^1.0.0" - find-up "^3.0.0" - get-stdin "^6.0.0" - is-ci "^2.0.0" - pkg-dir "^3.0.0" - please-upgrade-node "^3.1.1" - read-pkg "^4.0.1" - run-node "^1.0.0" - slash "^2.0.0" - -iconv-lite@0.4.23: - version "0.4.23" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.23.tgz#297871f63be507adcfbfca715d0cd0eed84e9a63" - dependencies: - safer-buffer ">= 2.1.2 < 3" - -iconv-lite@0.4.24, iconv-lite@^0.4.24, iconv-lite@^0.4.4: - version "0.4.24" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" - dependencies: - safer-buffer ">= 2.1.2 < 3" - -icss-replace-symbols@1.1.0, icss-replace-symbols@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz#06ea6f83679a7749e386cfe1fe812ae5db223ded" - -icss-utils@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/icss-utils/-/icss-utils-2.1.0.tgz#83f0a0ec378bf3246178b6c2ad9136f135b1c962" - dependencies: - postcss "^6.0.1" - -idb-wrapper@^1.5.0: - version "1.7.2" - resolved "https://registry.yarnpkg.com/idb-wrapper/-/idb-wrapper-1.7.2.tgz#8251afd5e77fe95568b1c16152eb44b396767ea2" - -identity-obj-proxy@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/identity-obj-proxy/-/identity-obj-proxy-3.0.0.tgz#94d2bda96084453ef36fbc5aaec37e0f79f1fc14" - dependencies: - harmony-reflect "^1.4.6" - -ieee754@^1.1.4: - version "1.1.12" - resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.12.tgz#50bf24e5b9c8bb98af4964c941cdb0918da7b60b" - -iferr@^0.1.5: - version "0.1.5" - resolved "https://registry.yarnpkg.com/iferr/-/iferr-0.1.5.tgz#c60eed69e6d8fdb6b3104a1fcbca1c192dc5b501" - -ignore-walk@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.1.tgz#a83e62e7d272ac0e3b551aaa82831a19b69f82f8" - dependencies: - minimatch "^3.0.4" - -ignore@^3.3.5: - version "3.3.10" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.3.10.tgz#0a97fb876986e8081c631160f8f9f389157f0043" - -ignore@^4.0.6: - version "4.0.6" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" - -ignore@^5.0.2, ignore@^5.0.4: - version "5.0.4" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.0.4.tgz#33168af4a21e99b00c5d41cbadb6a6cb49903a45" - -immer@1.7.2: - version "1.7.2" - resolved "https://registry.yarnpkg.com/immer/-/immer-1.7.2.tgz#a51e9723c50b27e132f6566facbec1c85fc69547" - -import-cwd@^2.0.0, import-cwd@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/import-cwd/-/import-cwd-2.1.0.tgz#aa6cf36e722761285cb371ec6519f53e2435b0a9" - dependencies: - import-from "^2.1.0" - -import-fresh@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-2.0.0.tgz#d81355c15612d386c61f9ddd3922d4304822a546" - dependencies: - caller-path "^2.0.0" - resolve-from "^3.0.0" - -import-from@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/import-from/-/import-from-2.1.0.tgz#335db7f2a7affd53aaa471d4b8021dee36b7f3b1" - dependencies: - resolve-from "^3.0.0" - -import-lazy@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/import-lazy/-/import-lazy-3.1.0.tgz#891279202c8a2280fdbd6674dbd8da1a1dfc67cc" - -import-local@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/import-local/-/import-local-1.0.0.tgz#5e4ffdc03f4fe6c009c6729beb29631c2f8227bc" - dependencies: - pkg-dir "^2.0.0" - resolve-cwd "^2.0.0" - -import-local@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/import-local/-/import-local-2.0.0.tgz#55070be38a5993cf18ef6db7e961f5bee5c5a09d" - dependencies: - pkg-dir "^3.0.0" - resolve-cwd "^2.0.0" - -imurmurhash@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" - -indent-string@^3.0.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-3.2.0.tgz#4a5fd6d27cc332f37e5419a504dbb837105c9289" - -indexes-of@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/indexes-of/-/indexes-of-1.0.1.tgz#f30f716c8e2bd346c7b67d3df3915566a7c05607" - -indexof@0.0.1, indexof@~0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/indexof/-/indexof-0.0.1.tgz#82dc336d232b9062179d05ab3293a66059fd435d" - -inflight@^1.0.4: - version "1.0.6" - resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" - dependencies: - once "^1.3.0" - wrappy "1" - -inherits@2, inherits@2.0.3, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.1, 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" - -ini@^1.3.4, ini@~1.3.0: - version "1.3.5" - resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" - -inquirer@6.2.0: - version "6.2.0" - resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-6.2.0.tgz#51adcd776f661369dc1e894859c2560a224abdd8" - dependencies: - ansi-escapes "^3.0.0" - chalk "^2.0.0" - cli-cursor "^2.1.0" - cli-width "^2.0.0" - external-editor "^3.0.0" - figures "^2.0.0" - lodash "^4.17.10" - mute-stream "0.0.7" - run-async "^2.2.0" - rxjs "^6.1.0" - string-width "^2.1.0" - strip-ansi "^4.0.0" - through "^2.3.6" - -inquirer@^6.1.0: - version "6.2.1" - resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-6.2.1.tgz#9943fc4882161bdb0b0c9276769c75b32dbfcd52" - dependencies: - ansi-escapes "^3.0.0" - chalk "^2.0.0" - cli-cursor "^2.1.0" - cli-width "^2.0.0" - external-editor "^3.0.0" - figures "^2.0.0" - lodash "^4.17.10" - mute-stream "0.0.7" - run-async "^2.2.0" - rxjs "^6.1.0" - string-width "^2.1.0" - strip-ansi "^5.0.0" - through "^2.3.6" - -internal-ip@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/internal-ip/-/internal-ip-3.0.1.tgz#df5c99876e1d2eb2ea2d74f520e3f669a00ece27" - dependencies: - default-gateway "^2.6.0" - ipaddr.js "^1.5.2" - -invariant@^2.2.2, invariant@^2.2.4: - version "2.2.4" - resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" - dependencies: - loose-envify "^1.0.0" - -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" - -ip-regex@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-2.1.0.tgz#fa78bf5d2e6913c911ce9f819ee5146bb6d844e9" - -ip@^1.1.0, ip@^1.1.5: - version "1.1.5" - resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a" - -ipaddr.js@1.8.0: - version "1.8.0" - resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.8.0.tgz#eaa33d6ddd7ace8f7f6fe0c9ca0440e706738b1e" - -ipaddr.js@^1.5.2: - version "1.8.1" - resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.8.1.tgz#fa4b79fa47fd3def5e3b159825161c0a519c9427" - -is-absolute-url@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-absolute-url/-/is-absolute-url-2.1.0.tgz#50530dfb84fcc9aa7dbe7852e83a37b93b9f2aa6" - -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" - dependencies: - kind-of "^3.0.2" - -is-accessor-descriptor@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656" - dependencies: - kind-of "^6.0.0" - -is-alphabetical@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-alphabetical/-/is-alphabetical-1.0.2.tgz#1fa6e49213cb7885b75d15862fb3f3d96c884f41" - -is-alphanumeric@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-alphanumeric/-/is-alphanumeric-1.0.0.tgz#4a9cef71daf4c001c1d81d63d140cf53fd6889f4" - -is-alphanumerical@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-alphanumerical/-/is-alphanumerical-1.0.2.tgz#1138e9ae5040158dc6ff76b820acd6b7a181fd40" - dependencies: - is-alphabetical "^1.0.0" - is-decimal "^1.0.0" - -is-arrayish@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" - -is-arrayish@^0.3.1: - version "0.3.2" - resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.3.2.tgz#4574a2ae56f7ab206896fb431eaeed066fdf8f03" - -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" - dependencies: - binary-extensions "^1.0.0" - -is-buffer@^1.0.2, is-buffer@^1.1.4, is-buffer@^1.1.5: - version "1.1.6" - resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" - -is-buffer@^2.0.0: - version "2.0.3" - resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-2.0.3.tgz#4ecf3fcf749cbd1e472689e109ac66261a25e725" - -is-builtin-module@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-builtin-module/-/is-builtin-module-1.0.0.tgz#540572d34f7ac3119f8f76c30cbc1b1e037affbe" - dependencies: - builtin-modules "^1.0.0" - -is-callable@^1.1.3, is-callable@^1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.4.tgz#1e1adf219e1eeb684d691f9d6a05ff0d30a24d75" - -is-ci@^1.0.10: - version "1.2.1" - resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-1.2.1.tgz#e3779c8ee17fccf428488f6e281187f2e632841c" - dependencies: - ci-info "^1.5.0" - -is-ci@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c" - dependencies: - ci-info "^2.0.0" - -is-color-stop@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-color-stop/-/is-color-stop-1.1.0.tgz#cfff471aee4dd5c9e158598fbe12967b5cdad345" - dependencies: - css-color-names "^0.0.4" - hex-color-regex "^1.1.0" - hsl-regex "^1.0.0" - hsla-regex "^1.0.0" - rgb-regex "^1.0.1" - rgba-regex "^1.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" - dependencies: - kind-of "^3.0.2" - -is-data-descriptor@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7" - dependencies: - kind-of "^6.0.0" - -is-date-object@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.1.tgz#9aa20eb6aeebbff77fbd33e74ca01b33581d3a16" - -is-decimal@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-decimal/-/is-decimal-1.0.2.tgz#894662d6a8709d307f3a276ca4339c8fa5dff0ff" - -is-descriptor@^0.1.0: - version "0.1.6" - resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca" - dependencies: - is-accessor-descriptor "^0.1.6" - is-data-descriptor "^0.1.4" - kind-of "^5.0.0" - -is-descriptor@^1.0.0, is-descriptor@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec" - dependencies: - is-accessor-descriptor "^1.0.0" - is-data-descriptor "^1.0.0" - kind-of "^6.0.2" - -is-directory@^0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/is-directory/-/is-directory-0.3.1.tgz#61339b6f2475fc772fd9c9d83f5c8575dc154ae1" - -is-dotfile@^1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/is-dotfile/-/is-dotfile-1.0.3.tgz#a6a2f32ffd2dfb04f5ca25ecd0f6b83cf798a1e1" - -is-equal-shallow@^0.1.3: - version "0.1.3" - resolved "https://registry.yarnpkg.com/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz#2238098fc221de0bcfa5d9eac4c45d638aa1c534" - dependencies: - is-primitive "^2.0.0" - -is-extendable@^0.1.0, is-extendable@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" - -is-extendable@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4" - dependencies: - is-plain-object "^2.0.4" - -is-extglob@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-1.0.0.tgz#ac468177c4943405a092fc8f29760c6ffc6206c0" - -is-extglob@^2.1.0, is-extglob@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" - -is-finite@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.0.2.tgz#cc6677695602be550ef11e8b4aa6305342b6d0aa" - dependencies: - number-is-nan "^1.0.0" - -is-fullwidth-code-point@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" - dependencies: - number-is-nan "^1.0.0" - -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-glob@^2.0.0, is-glob@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-2.0.1.tgz#d096f926a3ded5600f3fdfd91198cb0888c2d863" - dependencies: - is-extglob "^1.0.0" - -is-glob@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a" - dependencies: - is-extglob "^2.1.0" - -is-glob@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.0.tgz#9521c76845cc2610a85203ddf080a958c2ffabc0" - dependencies: - is-extglob "^2.1.1" - -is-hexadecimal@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-hexadecimal/-/is-hexadecimal-1.0.2.tgz#b6e710d7d07bb66b98cb8cece5c9b4921deeb835" - -is-module@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-module/-/is-module-1.0.0.tgz#3258fb69f78c14d5b815d664336b4cffb6441591" - -is-number@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-2.1.0.tgz#01fcbbb393463a548f2f466cce16dece49db908f" - dependencies: - kind-of "^3.0.2" - -is-number@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" - dependencies: - kind-of "^3.0.2" - -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: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" - -is-object@~0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/is-object/-/is-object-0.1.2.tgz#00efbc08816c33cfc4ac8251d132e10dc65098d7" - -is-observable@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-observable/-/is-observable-1.1.0.tgz#b3e986c8f44de950867cab5403f5a3465005975e" - dependencies: - symbol-observable "^1.1.0" - -is-path-cwd@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-1.0.0.tgz#d225ec23132e89edd38fda767472e62e65f1106d" - -is-path-in-cwd@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz#5ac48b345ef675339bd6c7a48a912110b241cf52" - dependencies: - is-path-inside "^1.0.0" - -is-path-inside@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-1.0.1.tgz#8ef5b7de50437a3fdca6b4e865ef7aa55cb48036" - dependencies: - path-is-inside "^1.0.1" - -is-plain-obj@^1.0.0, is-plain-obj@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" - -is-plain-object@^2.0.1, is-plain-object@^2.0.3, is-plain-object@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" - dependencies: - isobject "^3.0.1" - -is-posix-bracket@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz#3334dc79774368e92f016e6fbc0a88f5cd6e6bc4" - -is-primitive@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-primitive/-/is-primitive-2.0.0.tgz#207bab91638499c07b2adf240a41a87210034575" - -is-promise@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa" - -is-regex@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.4.tgz#5517489b547091b0930e095654ced25ee97e9491" - dependencies: - has "^1.0.1" - -is-regexp@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-regexp/-/is-regexp-1.0.0.tgz#fd2d883545c46bac5a633e7b9a09e87fa2cb5069" - -is-resolvable@^1.0.0, is-resolvable@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-resolvable/-/is-resolvable-1.1.0.tgz#fb18f87ce1feb925169c9a407c19318a3206ed88" - -is-root@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-root/-/is-root-2.0.0.tgz#838d1e82318144e5a6f77819d90207645acc7019" - -is-stream@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" - -is-supported-regexp-flag@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-supported-regexp-flag/-/is-supported-regexp-flag-1.0.1.tgz#21ee16518d2c1dd3edd3e9a0d57e50207ac364ca" - -is-svg@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-svg/-/is-svg-2.1.0.tgz#cf61090da0d9efbcab8722deba6f032208dbb0e9" - dependencies: - html-comment-regex "^1.1.0" - -is-svg@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-svg/-/is-svg-3.0.0.tgz#9321dbd29c212e5ca99c4fa9794c714bcafa2f75" - dependencies: - html-comment-regex "^1.1.0" - -is-symbol@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.2.tgz#a055f6ae57192caee329e7a860118b497a950f38" - dependencies: - has-symbols "^1.0.0" - -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-whitespace-character@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-whitespace-character/-/is-whitespace-character-1.0.2.tgz#ede53b4c6f6fb3874533751ec9280d01928d03ed" - -is-windows@^1.0.0, 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-word-character@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-word-character/-/is-word-character-1.0.2.tgz#46a5dac3f2a1840898b91e576cd40d493f3ae553" - -is-wsl@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d" - -is@~0.2.6: - version "0.2.7" - resolved "https://registry.yarnpkg.com/is/-/is-0.2.7.tgz#3b34a2c48f359972f35042849193ae7264b63562" - -isarray@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" - -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" - -isbuffer@~0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/isbuffer/-/isbuffer-0.0.0.tgz#38c146d9df528b8bf9b0701c3d43cf12df3fc39b" - -isemail@3.x.x: - version "3.2.0" - resolved "https://registry.yarnpkg.com/isemail/-/isemail-3.2.0.tgz#59310a021931a9fb06bbb51e155ce0b3f236832c" - dependencies: - punycode "2.x.x" - -isexe@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" - -isobject@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" - dependencies: - isarray "1.0.0" - -isobject@^3.0.0, isobject@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" - -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.7" - resolved "https://registry.yarnpkg.com/istanbul-api/-/istanbul-api-1.3.7.tgz#a86c770d2b03e11e3f778cd7aedd82d2722092aa" - dependencies: - async "^2.1.4" - fileset "^2.0.2" - istanbul-lib-coverage "^1.2.1" - istanbul-lib-hook "^1.2.2" - istanbul-lib-instrument "^1.10.2" - istanbul-lib-report "^1.1.5" - istanbul-lib-source-maps "^1.2.6" - istanbul-reports "^1.5.1" - js-yaml "^3.7.0" - mkdirp "^0.5.1" - once "^1.4.0" - -istanbul-lib-coverage@^1.2.0, istanbul-lib-coverage@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-1.2.1.tgz#ccf7edcd0a0bb9b8f729feeb0930470f9af664f0" - -istanbul-lib-hook@^1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/istanbul-lib-hook/-/istanbul-lib-hook-1.2.2.tgz#bc6bf07f12a641fbf1c85391d0daa8f0aea6bf86" - dependencies: - append-transform "^0.4.0" - -istanbul-lib-instrument@^1.10.1, istanbul-lib-instrument@^1.10.2: - version "1.10.2" - resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-1.10.2.tgz#1f55ed10ac3c47f2bdddd5307935126754d0a9ca" - 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.1" - semver "^5.3.0" - -istanbul-lib-report@^1.1.5: - version "1.1.5" - resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-1.1.5.tgz#f2a657fc6282f96170aaf281eb30a458f7f4170c" - dependencies: - istanbul-lib-coverage "^1.2.1" - mkdirp "^0.5.1" - path-parse "^1.0.5" - supports-color "^3.1.2" - -istanbul-lib-source-maps@^1.2.4, istanbul-lib-source-maps@^1.2.6: - version "1.2.6" - resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-1.2.6.tgz#37b9ff661580f8fca11232752ee42e08c6675d8f" - dependencies: - debug "^3.1.0" - istanbul-lib-coverage "^1.2.1" - mkdirp "^0.5.1" - rimraf "^2.6.1" - source-map "^0.5.3" - -istanbul-reports@^1.5.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-1.5.1.tgz#97e4dbf3b515e8c484caea15d6524eebd3ff4e1a" - dependencies: - handlebars "^4.0.3" - -jest-changed-files@^23.4.2: - version "23.4.2" - resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-23.4.2.tgz#1eed688370cd5eebafe4ae93d34bb3b64968fe83" - dependencies: - throat "^4.0.0" - -jest-cli@^23.6.0: - version "23.6.0" - resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-23.6.0.tgz#61ab917744338f443ef2baa282ddffdd658a5da4" - dependencies: - ansi-escapes "^3.0.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.4.2" - jest-config "^23.6.0" - jest-environment-jsdom "^23.4.0" - jest-get-type "^22.1.0" - jest-haste-map "^23.6.0" - jest-message-util "^23.4.0" - jest-regex-util "^23.3.0" - jest-resolve-dependencies "^23.6.0" - jest-runner "^23.6.0" - jest-runtime "^23.6.0" - jest-snapshot "^23.6.0" - jest-util "^23.4.0" - jest-validate "^23.6.0" - jest-watcher "^23.4.0" - jest-worker "^23.2.0" - micromatch "^2.3.11" - 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" - -jest-config@^23.6.0: - version "23.6.0" - resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-23.6.0.tgz#f82546a90ade2d8c7026fbf6ac5207fc22f8eb1d" - dependencies: - babel-core "^6.0.0" - babel-jest "^23.6.0" - chalk "^2.0.1" - glob "^7.1.1" - jest-environment-jsdom "^23.4.0" - jest-environment-node "^23.4.0" - jest-get-type "^22.1.0" - jest-jasmine2 "^23.6.0" - jest-regex-util "^23.3.0" - jest-resolve "^23.6.0" - jest-util "^23.4.0" - jest-validate "^23.6.0" - micromatch "^2.3.11" - pretty-format "^23.6.0" - -jest-diff@^23.6.0: - version "23.6.0" - resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-23.6.0.tgz#1500f3f16e850bb3d71233408089be099f610c7d" - dependencies: - chalk "^2.0.1" - diff "^3.2.0" - jest-get-type "^22.1.0" - pretty-format "^23.6.0" - -jest-docblock@^23.2.0: - version "23.2.0" - resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-23.2.0.tgz#f085e1f18548d99fdd69b20207e6fd55d91383a7" - dependencies: - detect-newline "^2.1.0" - -jest-each@^23.6.0: - version "23.6.0" - resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-23.6.0.tgz#ba0c3a82a8054387016139c733a05242d3d71575" - dependencies: - chalk "^2.0.1" - pretty-format "^23.6.0" - -jest-environment-jsdom@^23.4.0: - version "23.4.0" - resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-23.4.0.tgz#056a7952b3fea513ac62a140a2c368c79d9e6023" - dependencies: - jest-mock "^23.2.0" - jest-util "^23.4.0" - jsdom "^11.5.1" - -jest-environment-node@^23.4.0: - version "23.4.0" - resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-23.4.0.tgz#57e80ed0841dea303167cce8cd79521debafde10" - dependencies: - jest-mock "^23.2.0" - jest-util "^23.4.0" - -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-haste-map@^23.6.0: - version "23.6.0" - resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-23.6.0.tgz#2e3eb997814ca696d62afdb3f2529f5bbc935e16" - dependencies: - fb-watchman "^2.0.0" - graceful-fs "^4.1.11" - invariant "^2.2.4" - jest-docblock "^23.2.0" - jest-serializer "^23.0.1" - jest-worker "^23.2.0" - micromatch "^2.3.11" - sane "^2.0.0" - -jest-jasmine2@^23.6.0: - version "23.6.0" - resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-23.6.0.tgz#840e937f848a6c8638df24360ab869cc718592e0" - dependencies: - babel-traverse "^6.0.0" - chalk "^2.0.1" - co "^4.6.0" - expect "^23.6.0" - is-generator-fn "^1.0.0" - jest-diff "^23.6.0" - jest-each "^23.6.0" - jest-matcher-utils "^23.6.0" - jest-message-util "^23.4.0" - jest-snapshot "^23.6.0" - jest-util "^23.4.0" - pretty-format "^23.6.0" - -jest-leak-detector@^23.6.0: - version "23.6.0" - resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-23.6.0.tgz#e4230fd42cf381a1a1971237ad56897de7e171de" - dependencies: - pretty-format "^23.6.0" - -jest-matcher-utils@^23.6.0: - version "23.6.0" - resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-23.6.0.tgz#726bcea0c5294261a7417afb6da3186b4b8cac80" - dependencies: - chalk "^2.0.1" - jest-get-type "^22.1.0" - pretty-format "^23.6.0" - -jest-message-util@^23.4.0: - version "23.4.0" - resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-23.4.0.tgz#17610c50942349508d01a3d1e0bda2c079086a9f" - dependencies: - "@babel/code-frame" "^7.0.0-beta.35" - chalk "^2.0.1" - micromatch "^2.3.11" - slash "^1.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-pnp-resolver@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/jest-pnp-resolver/-/jest-pnp-resolver-1.0.1.tgz#f397cd71dbcd4a1947b2e435f6da8e9a347308fa" - -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-resolve-dependencies@^23.6.0: - version "23.6.0" - resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-23.6.0.tgz#b4526af24c8540d9a3fab102c15081cf509b723d" - dependencies: - jest-regex-util "^23.3.0" - jest-snapshot "^23.6.0" - -jest-resolve@23.6.0, jest-resolve@^23.6.0: - version "23.6.0" - resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-23.6.0.tgz#cf1d1a24ce7ee7b23d661c33ba2150f3aebfa0ae" - dependencies: - browser-resolve "^1.11.3" - chalk "^2.0.1" - realpath-native "^1.0.0" - -jest-runner@^23.6.0: - version "23.6.0" - resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-23.6.0.tgz#3894bd219ffc3f3cb94dc48a4170a2e6f23a5a38" - dependencies: - exit "^0.1.2" - graceful-fs "^4.1.11" - jest-config "^23.6.0" - jest-docblock "^23.2.0" - jest-haste-map "^23.6.0" - jest-jasmine2 "^23.6.0" - jest-leak-detector "^23.6.0" - jest-message-util "^23.4.0" - jest-runtime "^23.6.0" - jest-util "^23.4.0" - jest-worker "^23.2.0" - source-map-support "^0.5.6" - throat "^4.0.0" - -jest-runtime@^23.6.0: - version "23.6.0" - resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-23.6.0.tgz#059e58c8ab445917cd0e0d84ac2ba68de8f23082" - dependencies: - babel-core "^6.0.0" - babel-plugin-istanbul "^4.1.6" - chalk "^2.0.1" - convert-source-map "^1.4.0" - exit "^0.1.2" - fast-json-stable-stringify "^2.0.0" - graceful-fs "^4.1.11" - jest-config "^23.6.0" - jest-haste-map "^23.6.0" - jest-message-util "^23.4.0" - jest-regex-util "^23.3.0" - jest-resolve "^23.6.0" - jest-snapshot "^23.6.0" - jest-util "^23.4.0" - jest-validate "^23.6.0" - micromatch "^2.3.11" - 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" - -jest-snapshot@^23.6.0: - version "23.6.0" - resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-23.6.0.tgz#f9c2625d1b18acda01ec2d2b826c0ce58a5aa17a" - dependencies: - babel-types "^6.0.0" - chalk "^2.0.1" - jest-diff "^23.6.0" - jest-matcher-utils "^23.6.0" - jest-message-util "^23.4.0" - jest-resolve "^23.6.0" - mkdirp "^0.5.1" - natural-compare "^1.4.0" - pretty-format "^23.6.0" - semver "^5.5.0" - -jest-util@^23.4.0: - version "23.4.0" - resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-23.4.0.tgz#4d063cb927baf0a23831ff61bec2cbbf49793561" - dependencies: - callsites "^2.0.0" - chalk "^2.0.1" - graceful-fs "^4.1.11" - is-ci "^1.0.10" - jest-message-util "^23.4.0" - mkdirp "^0.5.1" - slash "^1.0.0" - source-map "^0.6.0" - -jest-validate@^23.5.0, jest-validate@^23.6.0: - version "23.6.0" - resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-23.6.0.tgz#36761f99d1ed33fcd425b4e4c5595d62b6597474" - dependencies: - chalk "^2.0.1" - jest-get-type "^22.1.0" - leven "^2.1.0" - pretty-format "^23.6.0" - -jest-watcher@^23.4.0: - version "23.4.0" - resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-23.4.0.tgz#d2e28ce74f8dad6c6afc922b92cabef6ed05c91c" - dependencies: - ansi-escapes "^3.0.0" - chalk "^2.0.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" - dependencies: - merge-stream "^1.0.1" - -jest@23.6.0: - version "23.6.0" - resolved "https://registry.yarnpkg.com/jest/-/jest-23.6.0.tgz#ad5835e923ebf6e19e7a1d7529a432edfee7813d" - dependencies: - import-local "^1.0.0" - jest-cli "^23.6.0" - -joi@^11.1.1: - version "11.4.0" - resolved "https://registry.yarnpkg.com/joi/-/joi-11.4.0.tgz#f674897537b625e9ac3d0b7e1604c828ad913ccb" - dependencies: - hoek "4.x.x" - isemail "3.x.x" - topo "2.x.x" - -js-base64@^2.1.9: - version "2.4.9" - resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.4.9.tgz#748911fb04f48a60c4771b375cac45a80df11c03" - -js-levenshtein@^1.1.3: - version "1.1.4" - resolved "https://registry.yarnpkg.com/js-levenshtein/-/js-levenshtein-1.1.4.tgz#3a56e3cbf589ca0081eb22cd9ba0b1290a16d26e" - -"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" - -js-tokens@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" - -js-yaml@^3.12.0, js-yaml@^3.4.3, 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" - dependencies: - argparse "^1.0.7" - esprima "^4.0.0" - -js-yaml@~3.7.0: - version "3.7.0" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.7.0.tgz#5c967ddd837a9bfdca5f2de84253abe8a1c03b80" - dependencies: - argparse "^1.0.7" - esprima "^2.6.0" - -jsbn@~0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" - -jsdom@>=11.0.0: - version "13.0.0" - resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-13.0.0.tgz#f1df2411b714a4e08d1bdc343c0a0889c688210f" - dependencies: - abab "^2.0.0" - acorn "^6.0.2" - acorn-globals "^4.3.0" - array-equal "^1.0.0" - cssom "^0.3.4" - cssstyle "^1.1.1" - data-urls "^1.0.1" - domexception "^1.0.1" - escodegen "^1.11.0" - html-encoding-sniffer "^1.0.2" - nwsapi "^2.0.9" - parse5 "5.1.0" - pn "^1.1.0" - request "^2.88.0" - request-promise-native "^1.0.5" - saxes "^3.1.3" - symbol-tree "^3.2.2" - tough-cookie "^2.4.3" - w3c-hr-time "^1.0.1" - w3c-xmlserializer "^1.0.0" - webidl-conversions "^4.0.2" - whatwg-encoding "^1.0.5" - whatwg-mimetype "^2.2.0" - whatwg-url "^7.0.0" - ws "^6.1.0" - xml-name-validator "^3.0.0" - -jsdom@^11.5.1: - version "11.12.0" - resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-11.12.0.tgz#1a80d40ddd378a1de59656e9e6dc5a3ba8657bc8" - dependencies: - abab "^2.0.0" - acorn "^5.5.3" - acorn-globals "^4.1.0" - array-equal "^1.0.0" - cssom ">= 0.3.2 < 0.4.0" - cssstyle "^1.0.0" - data-urls "^1.0.0" - domexception "^1.0.1" - escodegen "^1.9.1" - html-encoding-sniffer "^1.0.2" - left-pad "^1.3.0" - nwsapi "^2.0.7" - parse5 "4.0.0" - pn "^1.1.0" - request "^2.87.0" - request-promise-native "^1.0.5" - sax "^1.2.4" - symbol-tree "^3.2.2" - tough-cookie "^2.3.4" - w3c-hr-time "^1.0.1" - webidl-conversions "^4.0.2" - whatwg-encoding "^1.0.3" - whatwg-mimetype "^2.1.0" - whatwg-url "^6.4.1" - ws "^5.2.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" - -jsesc@~0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" - -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" - -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" - -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-without-jsonify@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" - -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: - version "5.0.1" - resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" - -json3@^3.3.2: - version "3.3.2" - resolved "https://registry.yarnpkg.com/json3/-/json3-3.3.2.tgz#3c0434743df93e2f5c42aee7b19bcb483575f4e1" - -json5@^0.5.0, json5@^0.5.1: - version "0.5.1" - resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821" - -json5@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/json5/-/json5-2.1.0.tgz#e7a0c62c48285c628d20a10b85c89bb807c32850" - dependencies: - minimist "^1.2.0" - -jsonfile@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" - optionalDependencies: - graceful-fs "^4.1.6" - -jsonify@~0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73" - -jsprim@^1.2.2: - version "1.4.1" - resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" - dependencies: - assert-plus "1.0.0" - extsprintf "1.3.0" - json-schema "0.2.3" - verror "1.10.0" - -jsx-ast-utils@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-2.0.1.tgz#e801b1b39985e20fffc87b40e3748080e2dcac7f" - dependencies: - array-includes "^3.0.3" - -killable@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/killable/-/killable-1.0.1.tgz#4c8ce441187a061c7474fb87ca08e2a638194892" - -kind-of@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-2.0.1.tgz#018ec7a4ce7e3a86cb9141be519d24c8faa981b5" - dependencies: - is-buffer "^1.0.2" - -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" - dependencies: - is-buffer "^1.1.5" - -kind-of@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" - dependencies: - is-buffer "^1.1.5" - -kind-of@^5.0.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d" - -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" - -kleur@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/kleur/-/kleur-2.0.2.tgz#b704f4944d95e255d038f0cb05fb8a602c55a300" - -known-css-properties@^0.10.0: - version "0.10.0" - resolved "https://registry.yarnpkg.com/known-css-properties/-/known-css-properties-0.10.0.tgz#8378a8921e6c815ecc47095744a8900af63d577d" - -last-call-webpack-plugin@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/last-call-webpack-plugin/-/last-call-webpack-plugin-3.0.0.tgz#9742df0e10e3cf46e5c0381c2de90d3a7a2d7555" - dependencies: - lodash "^4.17.5" - webpack-sources "^1.1.0" - -lazy-cache@^0.2.3: - version "0.2.7" - resolved "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-0.2.7.tgz#7feddf2dcb6edb77d11ef1d117ab5ffdf0ab1b65" - -lazy-cache@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-1.0.4.tgz#a1d78fc3a50474cb80845d3b3b6e1da49a446e8e" - -lcid@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835" - 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" - dependencies: - invert-kv "^2.0.0" - -left-pad@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/left-pad/-/left-pad-1.3.0.tgz#5b8a3a7765dfe001261dde915589e782f8c94d1e" - -level-blobs@^0.1.7: - version "0.1.7" - resolved "https://registry.yarnpkg.com/level-blobs/-/level-blobs-0.1.7.tgz#9ab9b97bb99f1edbf9f78a3433e21ed56386bdaf" - dependencies: - level-peek "1.0.6" - once "^1.3.0" - readable-stream "^1.0.26-4" - -level-filesystem@^1.0.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/level-filesystem/-/level-filesystem-1.2.0.tgz#a00aca9919c4a4dfafdca6a8108d225aadff63b3" - dependencies: - concat-stream "^1.4.4" - errno "^0.1.1" - fwd-stream "^1.0.4" - level-blobs "^0.1.7" - level-peek "^1.0.6" - level-sublevel "^5.2.0" - octal "^1.0.0" - once "^1.3.0" - xtend "^2.2.0" - -level-fix-range@2.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/level-fix-range/-/level-fix-range-2.0.0.tgz#c417d62159442151a19d9a2367868f1724c2d548" - dependencies: - clone "~0.1.9" - -level-fix-range@~1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/level-fix-range/-/level-fix-range-1.0.2.tgz#bf15b915ae36d8470c821e883ddf79cd16420828" - -"level-hooks@>=4.4.0 <5": - version "4.5.0" - resolved "https://registry.yarnpkg.com/level-hooks/-/level-hooks-4.5.0.tgz#1b9ae61922930f3305d1a61fc4d83c8102c0dd93" - dependencies: - string-range "~1.2" - -level-js@^2.1.3: - version "2.2.4" - resolved "https://registry.yarnpkg.com/level-js/-/level-js-2.2.4.tgz#bc055f4180635d4489b561c9486fa370e8c11697" - dependencies: - abstract-leveldown "~0.12.0" - idb-wrapper "^1.5.0" - isbuffer "~0.0.0" - ltgt "^2.1.2" - typedarray-to-buffer "~1.0.0" - xtend "~2.1.2" - -level-peek@1.0.6, level-peek@^1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/level-peek/-/level-peek-1.0.6.tgz#bec51c72a82ee464d336434c7c876c3fcbcce77f" - dependencies: - level-fix-range "~1.0.2" - -level-sublevel@^5.2.0: - version "5.2.3" - resolved "https://registry.yarnpkg.com/level-sublevel/-/level-sublevel-5.2.3.tgz#744c12c72d2e72be78dde3b9b5cd84d62191413a" - dependencies: - level-fix-range "2.0" - level-hooks ">=4.4.0 <5" - string-range "~1.2.1" - xtend "~2.0.4" - -levelup@^0.18.2: - version "0.18.6" - resolved "https://registry.yarnpkg.com/levelup/-/levelup-0.18.6.tgz#e6a01cb089616c8ecc0291c2a9bd3f0c44e3e5eb" - dependencies: - bl "~0.8.1" - deferred-leveldown "~0.2.0" - errno "~0.1.1" - prr "~0.0.0" - readable-stream "~1.0.26" - semver "~2.3.1" - xtend "~3.0.0" - -leven@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/leven/-/leven-2.1.0.tgz#c2e7a9f772094dee9d34202ae8acce4687875580" - -levn@^0.3.0, levn@~0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" - dependencies: - prelude-ls "~1.1.2" - type-check "~0.3.2" - -lint-staged@^8.1.0: - version "8.1.0" - resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-8.1.0.tgz#dbc3ae2565366d8f20efb9f9799d076da64863f2" - dependencies: - "@iamstarkov/listr-update-renderer" "0.4.1" - chalk "^2.3.1" - commander "^2.14.1" - cosmiconfig "5.0.6" - debug "^3.1.0" - dedent "^0.7.0" - del "^3.0.0" - execa "^1.0.0" - find-parent-dir "^0.3.0" - g-status "^2.0.2" - is-glob "^4.0.0" - is-windows "^1.0.2" - jest-validate "^23.5.0" - listr "^0.14.2" - lodash "^4.17.5" - log-symbols "^2.2.0" - micromatch "^3.1.8" - npm-which "^3.0.1" - p-map "^1.1.1" - path-is-inside "^1.0.2" - pify "^3.0.0" - please-upgrade-node "^3.0.2" - staged-git-files "1.1.2" - string-argv "^0.0.2" - stringify-object "^3.2.2" - -listr-silent-renderer@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/listr-silent-renderer/-/listr-silent-renderer-1.1.1.tgz#924b5a3757153770bf1a8e3fbf74b8bbf3f9242e" - -listr-update-renderer@^0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/listr-update-renderer/-/listr-update-renderer-0.5.0.tgz#4ea8368548a7b8aecb7e06d8c95cb45ae2ede6a2" - dependencies: - chalk "^1.1.3" - cli-truncate "^0.2.1" - elegant-spinner "^1.0.1" - figures "^1.7.0" - indent-string "^3.0.0" - log-symbols "^1.0.2" - log-update "^2.3.0" - strip-ansi "^3.0.1" - -listr-verbose-renderer@^0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/listr-verbose-renderer/-/listr-verbose-renderer-0.5.0.tgz#f1132167535ea4c1261102b9f28dac7cba1e03db" - dependencies: - chalk "^2.4.1" - cli-cursor "^2.1.0" - date-fns "^1.27.2" - figures "^2.0.0" - -listr@^0.14.2: - version "0.14.3" - resolved "https://registry.yarnpkg.com/listr/-/listr-0.14.3.tgz#2fea909604e434be464c50bddba0d496928fa586" - dependencies: - "@samverschueren/stream-to-observable" "^0.3.0" - is-observable "^1.1.0" - is-promise "^2.1.0" - is-stream "^1.1.0" - listr-silent-renderer "^1.1.1" - listr-update-renderer "^0.5.0" - listr-verbose-renderer "^0.5.0" - p-map "^2.0.0" - rxjs "^6.3.3" - -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" - 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" - -load-json-file@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-2.0.0.tgz#7947e42149af80d696cbf797bcaabcfe1fe29ca8" - dependencies: - graceful-fs "^4.1.2" - parse-json "^2.2.0" - pify "^2.0.0" - strip-bom "^3.0.0" - -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" - dependencies: - graceful-fs "^4.1.2" - parse-json "^4.0.0" - pify "^3.0.0" - strip-bom "^3.0.0" - -loader-fs-cache@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/loader-fs-cache/-/loader-fs-cache-1.0.1.tgz#56e0bf08bd9708b26a765b68509840c8dec9fdbc" - dependencies: - find-cache-dir "^0.1.1" - mkdirp "0.5.1" - -loader-runner@^2.3.0: - version "2.3.1" - resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-2.3.1.tgz#026f12fe7c3115992896ac02ba022ba92971b979" - -loader-utils@1.1.0, loader-utils@^1.0.1, loader-utils@^1.0.2, loader-utils@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.1.0.tgz#c98aef488bcceda2ffb5e2de646d6a754429f5cd" - dependencies: - big.js "^3.1.3" - emojis-list "^2.0.0" - json5 "^0.5.0" - -loader-utils@^0.2.16: - version "0.2.17" - resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-0.2.17.tgz#f86e6374d43205a6e6c60e9196f17c0299bfb348" - dependencies: - big.js "^3.1.3" - emojis-list "^2.0.0" - json5 "^0.5.0" - object-assign "^4.0.1" - -locate-path@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" - dependencies: - p-locate "^2.0.0" - path-exists "^3.0.0" - -locate-path@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" - dependencies: - p-locate "^3.0.0" - path-exists "^3.0.0" - -lodash._reinterpolate@~3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz#0ccf2d89166af03b3663c796538b75ac6e114d9d" - -lodash.camelcase@^4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6" - -lodash.clonedeep@^4.5.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef" - -lodash.debounce@^4.0.8: - version "4.0.8" - resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" - -lodash.isequal@^4.5.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/lodash.isequal/-/lodash.isequal-4.5.0.tgz#415c4478f2bcc30120c22ce10ed3226f7d3e18e0" - integrity sha1-QVxEePK8wwEgwizhDtMib30+GOA= - -lodash.memoize@^4.1.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" - -lodash.sortby@^4.7.0: - version "4.7.0" - resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" - -lodash.tail@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/lodash.tail/-/lodash.tail-4.1.1.tgz#d2333a36d9e7717c8ad2f7cacafec7c32b444664" - -lodash.template@^4.2.4, lodash.template@^4.4.0: - version "4.4.0" - resolved "https://registry.yarnpkg.com/lodash.template/-/lodash.template-4.4.0.tgz#e73a0385c8355591746e020b99679c690e68fba0" - dependencies: - lodash._reinterpolate "~3.0.0" - lodash.templatesettings "^4.0.0" - -lodash.templatesettings@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/lodash.templatesettings/-/lodash.templatesettings-4.1.0.tgz#2b4d4e95ba440d915ff08bc899e4553666713316" - dependencies: - lodash._reinterpolate "~3.0.0" - -lodash.uniq@^4.5.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" - -"lodash@>=3.5 <5", lodash@^4.13.1, lodash@^4.17.10, lodash@^4.17.11, lodash@^4.17.4, lodash@^4.17.5: - version "4.17.11" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.11.tgz#b39ea6229ef607ecd89e2c8df12536891cac9b8d" - -log-symbols@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-1.0.2.tgz#376ff7b58ea3086a0f09facc74617eca501e1a18" - dependencies: - chalk "^1.0.0" - -log-symbols@^2.0.0, log-symbols@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-2.2.0.tgz#5740e1c5d6f0dfda4ad9323b5332107ef6b4c40a" - dependencies: - chalk "^2.0.1" - -log-update@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/log-update/-/log-update-2.3.0.tgz#88328fd7d1ce7938b29283746f0b1bc126b24708" - dependencies: - ansi-escapes "^3.0.0" - cli-cursor "^2.0.0" - wrap-ansi "^3.0.1" - -loglevel@^1.4.1: - version "1.6.1" - resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.6.1.tgz#e0fc95133b6ef276cdc8887cdaf24aa6f156f8fa" - -longest-streak@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/longest-streak/-/longest-streak-2.0.2.tgz#2421b6ba939a443bb9ffebf596585a50b4c38e2e" - -loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.3.1: - version "1.4.0" - resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" - dependencies: - js-tokens "^3.0.0 || ^4.0.0" - -loud-rejection@^1.0.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/loud-rejection/-/loud-rejection-1.6.0.tgz#5b46f80147edee578870f086d04821cf998e551f" - dependencies: - currently-unhandled "^0.4.1" - signal-exit "^3.0.0" - -lower-case@^1.1.1: - version "1.1.4" - resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-1.1.4.tgz#9a2cabd1b9e8e0ae993a4bf7d5875c39c42e8eac" - -lru-cache@^4.0.1, lru-cache@^4.1.1, lru-cache@^4.1.3: - version "4.1.5" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd" - dependencies: - pseudomap "^1.0.2" - yallist "^2.1.2" - -ltgt@^2.1.2: - version "2.2.1" - resolved "https://registry.yarnpkg.com/ltgt/-/ltgt-2.2.1.tgz#f35ca91c493f7b73da0e07495304f17b31f87ee5" - -magic-string@^0.25.1: - version "0.25.1" - resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.25.1.tgz#b1c248b399cd7485da0fe7385c2fc7011843266e" - dependencies: - sourcemap-codec "^1.4.1" - -make-dir@^1.0.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-1.3.0.tgz#79c1033b80515bd6d24ec9933e860ca75ee27f0c" - dependencies: - pify "^3.0.0" - -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" - -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" - 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-obj@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d" - -map-obj@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-2.0.0.tgz#a65cd29087a92598b8791257a523e021222ac1f9" - -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" - -markdown-escapes@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/markdown-escapes/-/markdown-escapes-1.0.2.tgz#e639cbde7b99c841c0bacc8a07982873b46d2122" - -markdown-table@^1.1.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/markdown-table/-/markdown-table-1.1.2.tgz#c78db948fa879903a41bce522e3b96f801c63786" - -matcher@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/matcher/-/matcher-1.1.1.tgz#51d8301e138f840982b338b116bb0c09af62c1c2" - dependencies: - escape-string-regexp "^1.0.4" - -math-expression-evaluator@^1.2.14: - version "1.2.17" - resolved "https://registry.yarnpkg.com/math-expression-evaluator/-/math-expression-evaluator-1.2.17.tgz#de819fdbcd84dccd8fae59c6aeb79615b9d266ac" - -math-random@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/math-random/-/math-random-1.0.1.tgz#8b3aac588b8a66e4975e3cdea67f7bb329601fac" - -mathml-tag-names@^2.0.1: - version "2.1.0" - resolved "https://registry.yarnpkg.com/mathml-tag-names/-/mathml-tag-names-2.1.0.tgz#490b70e062ee24636536e3d9481e333733d00f2c" - -md5.js@^1.3.4: - version "1.3.5" - resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f" - dependencies: - hash-base "^3.0.0" - inherits "^2.0.1" - safe-buffer "^5.1.2" - -mdast-util-compact@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/mdast-util-compact/-/mdast-util-compact-1.0.2.tgz#c12ebe16fffc84573d3e19767726de226e95f649" - dependencies: - unist-util-visit "^1.1.0" - -mdn-data@~1.1.0: - version "1.1.4" - resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-1.1.4.tgz#50b5d4ffc4575276573c4eedb8780812a8419f01" - -media-typer@0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" - -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" - -mem@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/mem/-/mem-4.0.0.tgz#6437690d9471678f6cc83659c00cbafcd6b0cdaf" - dependencies: - map-age-cleaner "^0.1.1" - mimic-fn "^1.0.0" - p-is-promise "^1.1.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" - dependencies: - errno "^0.1.3" - readable-stream "^2.0.1" - -meow@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/meow/-/meow-5.0.0.tgz#dfc73d63a9afc714a5e371760eb5c88b91078aa4" - dependencies: - camelcase-keys "^4.0.0" - decamelize-keys "^1.0.0" - loud-rejection "^1.0.0" - minimist-options "^3.0.1" - normalize-package-data "^2.3.4" - read-pkg-up "^3.0.0" - redent "^2.0.0" - trim-newlines "^2.0.0" - yargs-parser "^10.0.0" - -merge-deep@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/merge-deep/-/merge-deep-3.0.2.tgz#f39fa100a4f1bd34ff29f7d2bf4508fbb8d83ad2" - dependencies: - arr-union "^3.1.0" - clone-deep "^0.2.4" - kind-of "^3.0.2" - -merge-descriptors@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" - -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" - -merge2@^1.2.3: - version "1.2.3" - resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.2.3.tgz#7ee99dbd69bb6481689253f018488a1b902b0ed5" - -merge@^1.2.0: - version "1.2.1" - resolved "https://registry.yarnpkg.com/merge/-/merge-1.2.1.tgz#38bebf80c3220a8a487b6fcfb3941bb11720c145" - -methods@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" - -micromatch@^2.3.11: - version "2.3.11" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-2.3.11.tgz#86677c97d1720b363431d04d0d15293bd38c1565" - dependencies: - arr-diff "^2.0.0" - array-unique "^0.2.1" - braces "^1.8.2" - expand-brackets "^0.1.4" - extglob "^0.3.1" - filename-regex "^2.0.0" - is-extglob "^1.0.0" - is-glob "^2.0.1" - kind-of "^3.0.2" - normalize-path "^2.0.1" - object.omit "^2.0.0" - parse-glob "^3.0.4" - regex-cache "^0.4.2" - -micromatch@^3.1.10, micromatch@^3.1.4, micromatch@^3.1.8, micromatch@^3.1.9: - version "3.1.10" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" - dependencies: - arr-diff "^4.0.0" - array-unique "^0.3.2" - braces "^2.3.1" - define-property "^2.0.2" - extend-shallow "^3.0.2" - extglob "^2.0.4" - fragment-cache "^0.2.1" - kind-of "^6.0.2" - nanomatch "^1.2.9" - object.pick "^1.3.0" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.2" - -miller-rabin@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.1.tgz#f080351c865b0dc562a8462966daa53543c78a4d" - dependencies: - bn.js "^4.0.0" - brorand "^1.0.1" - -"mime-db@>= 1.36.0 < 2", mime-db@~1.37.0: - version "1.37.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.37.0.tgz#0b6a0ce6fdbe9576e25f1f2d2fde8830dc0ad0d8" - -mime-types@^2.1.12, mime-types@~2.1.17, mime-types@~2.1.18, mime-types@~2.1.19: - version "2.1.21" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.21.tgz#28995aa1ecb770742fe6ae7e58f9181c744b3f96" - dependencies: - mime-db "~1.37.0" - -mime@1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/mime/-/mime-1.4.1.tgz#121f9ebc49e3766f311a76e1fa1c8003c4b03aa6" - -mime@^2.0.3, mime@^2.3.1: - version "2.4.0" - resolved "https://registry.yarnpkg.com/mime/-/mime-2.4.0.tgz#e051fd881358585f3279df333fe694da0bcffdd6" - -mimic-fn@^1.0.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" - -mini-css-extract-plugin@0.4.3: - version "0.4.3" - resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-0.4.3.tgz#98d60fcc5d228c3e36a9bd15a1d6816d6580beb8" - dependencies: - loader-utils "^1.1.0" - schema-utils "^1.0.0" - webpack-sources "^1.1.0" - -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" - -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" - -minimatch@3.0.4, minimatch@^3.0.2, 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: - brace-expansion "^1.1.7" - -minimist-options@^3.0.1: - version "3.0.2" - resolved "https://registry.yarnpkg.com/minimist-options/-/minimist-options-3.0.2.tgz#fba4c8191339e13ecf4d61beb03f070103f3d954" - dependencies: - arrify "^1.0.1" - is-plain-obj "^1.1.0" - -minimist@0.0.8: - version "0.0.8" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" - -minimist@1.1.x: - version "1.1.3" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.1.3.tgz#3bedfd91a92d39016fcfaa1c681e8faa1a1efda8" - -minimist@^1.1.1, minimist@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" - -minimist@~0.0.1: - version "0.0.10" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf" - integrity sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8= - -minipass@^2.2.1, minipass@^2.3.4: - version "2.3.5" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.3.5.tgz#cacebe492022497f656b0f0f51e2682a9ed2d848" - 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" - dependencies: - minipass "^2.2.1" - -mississippi@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/mississippi/-/mississippi-2.0.0.tgz#3442a508fafc28500486feea99409676e4ee5a6f" - 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 "^2.0.1" - pumpify "^1.3.3" - stream-each "^1.1.0" - through2 "^2.0.0" - -mississippi@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/mississippi/-/mississippi-3.0.0.tgz#ea0a3291f97e0b5e8776b363d5f0a12d94c67022" - 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" - dependencies: - for-in "^1.0.2" - is-extendable "^1.0.1" - -mixin-object@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/mixin-object/-/mixin-object-2.0.1.tgz#4fb949441dab182540f1fe035ba60e1947a5e57e" - dependencies: - for-in "^0.1.3" - is-extendable "^0.1.1" - -mkdirp@0.5.1, mkdirp@0.5.x, mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.0, mkdirp@~0.5.1: - version "0.5.1" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" - dependencies: - minimist "0.0.8" - -mkpath@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/mkpath/-/mkpath-1.0.0.tgz#ebb3a977e7af1c683ae6fda12b545a6ba6c5853d" - -move-concurrently@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/move-concurrently/-/move-concurrently-1.0.1.tgz#be2c005fda32e0b29af1f05d7c4b33214c701f92" - 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" - -ms@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" - -multicast-dns-service-types@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz#899f11d9686e5e05cb91b35d5f0e63b773cfc901" - -multicast-dns@^6.0.1: - version "6.2.3" - resolved "https://registry.yarnpkg.com/multicast-dns/-/multicast-dns-6.2.3.tgz#a0ec7bd9055c4282f790c3c82f4e28db3b31b229" - dependencies: - dns-packet "^1.3.1" - thunky "^1.0.2" - -mute-stream@0.0.7: - version "0.0.7" - resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" - -nan@^2.9.2: - version "2.11.1" - resolved "https://registry.yarnpkg.com/nan/-/nan-2.11.1.tgz#90e22bccb8ca57ea4cd37cc83d3819b52eea6766" - -nanomatch@^1.2.9: - version "1.2.13" - resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" - dependencies: - arr-diff "^4.0.0" - array-unique "^0.3.2" - define-property "^2.0.2" - extend-shallow "^3.0.2" - fragment-cache "^0.2.1" - is-windows "^1.0.2" - kind-of "^6.0.2" - object.pick "^1.3.0" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.1" - -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.2.4" - resolved "https://registry.yarnpkg.com/needle/-/needle-2.2.4.tgz#51931bff82533b1928b7d1d69e01f1b00ffd2a4e" - dependencies: - debug "^2.1.2" - iconv-lite "^0.4.4" - sax "^1.2.4" - -negotiator@0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.1.tgz#2b327184e8992101177b28563fb5e7102acd0ca9" - -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" - resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" - -no-case@^2.2.0: - version "2.3.2" - resolved "https://registry.yarnpkg.com/no-case/-/no-case-2.3.2.tgz#60b813396be39b3f1288a4c1ed5d1e7d28b464ac" - dependencies: - lower-case "^1.1.1" - -node-forge@0.7.5: - version "0.7.5" - resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.7.5.tgz#6c152c345ce11c52f465c2abd957e8639cd674df" - -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.1.0" - resolved "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-2.1.0.tgz#5f94263d404f6e44767d726901fff05478d600df" - 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 "^1.0.0" - https-browserify "^1.0.0" - os-browserify "^0.3.0" - path-browserify "0.0.0" - 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.10.3" - vm-browserify "0.0.4" - -node-notifier@^5.2.1: - version "5.3.0" - resolved "https://registry.yarnpkg.com/node-notifier/-/node-notifier-5.3.0.tgz#c77a4a7b84038733d5fb351aafd8a268bfe19a01" - dependencies: - growly "^1.3.0" - semver "^5.5.0" - shellwords "^0.1.1" - which "^1.3.0" - -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" - dependencies: - detect-libc "^1.0.2" - mkdirp "^0.5.1" - needle "^2.2.1" - nopt "^4.0.1" - npm-packlist "^1.1.6" - npmlog "^4.0.2" - rc "^1.2.7" - rimraf "^2.6.1" - semver "^5.3.0" - tar "^4" - -node-releases@^1.0.0-alpha.11, node-releases@^1.0.5: - version "1.1.0" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.0.tgz#be7464fa8d877808237520fd49436d5e79191c3d" - dependencies: - semver "^5.3.0" - -node-releases@^1.1.1: - version "1.1.3" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.3.tgz#aad9ce0dcb98129c753f772c0aa01360fb90fbd2" - dependencies: - semver "^5.3.0" - -nopt@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.1.tgz#d0d4685afd5415193c8c7505602d0d17cd64474d" - dependencies: - abbrev "1" - osenv "^0.1.4" - -normalize-package-data@^2.3.2, normalize-package-data@^2.3.4: - version "2.4.0" - resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.4.0.tgz#12f95a307d58352075a04907b84ac8be98ac012f" - dependencies: - hosted-git-info "^2.1.4" - is-builtin-module "^1.0.0" - semver "2 || 3 || 4 || 5" - validate-npm-package-license "^3.0.1" - -normalize-path@^2.0.1, normalize-path@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" - dependencies: - remove-trailing-separator "^1.0.1" - -normalize-range@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942" - -normalize-selector@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/normalize-selector/-/normalize-selector-0.2.0.tgz#d0b145eb691189c63a78d201dc4fdb1293ef0c03" - -normalize-url@^1.0.0, normalize-url@^1.4.0: - version "1.9.1" - resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-1.9.1.tgz#2cc0d66b31ea23036458436e3620d85954c66c3c" - dependencies: - object-assign "^4.0.1" - prepend-http "^1.0.0" - query-string "^4.1.0" - sort-keys "^1.0.0" - -normalize-url@^3.0.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-3.3.0.tgz#b2e1c4dc4f7c6d57743df733a4f5978d18650559" - -npm-bundled@^1.0.1: - version "1.0.5" - resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.0.5.tgz#3c1732b7ba936b3a10325aef616467c0ccbcc979" - -npm-packlist@^1.1.6: - version "1.1.12" - resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.1.12.tgz#22bde2ebc12e72ca482abd67afc51eb49377243a" - 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" - dependencies: - which "^1.2.10" - -npm-run-path@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" - dependencies: - path-key "^2.0.0" - -npm-which@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/npm-which/-/npm-which-3.0.1.tgz#9225f26ec3a285c209cae67c3b11a6b4ab7140aa" - dependencies: - commander "^2.9.0" - npm-path "^2.0.2" - which "^1.2.10" - -npmlog@^4.0.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" - dependencies: - are-we-there-yet "~1.1.2" - console-control-strings "~1.1.0" - gauge "~2.7.3" - set-blocking "~2.0.0" - -nth-check@^1.0.2, nth-check@~1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-1.0.2.tgz#b2bd295c37e3dd58a3bf0700376663ba4d9cf05c" - dependencies: - boolbase "~1.0.0" - -num2fraction@^1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/num2fraction/-/num2fraction-1.2.2.tgz#6f682b6a027a4e9ddfa4564cd2589d1d4e669ede" - -number-is-nan@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" - -nwsapi@^2.0.7, nwsapi@^2.0.9: - version "2.0.9" - resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.0.9.tgz#77ac0cdfdcad52b6a1151a84e73254edc33ed016" - -oauth-sign@~0.9.0: - version "0.9.0" - resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" - -object-assign@4.1.1, 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" - -object-copy@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c" - dependencies: - copy-descriptor "^0.1.0" - define-property "^0.2.5" - kind-of "^3.0.3" - -object-hash@^1.1.4: - version "1.3.1" - resolved "https://registry.yarnpkg.com/object-hash/-/object-hash-1.3.1.tgz#fde452098a951cb145f039bb7d455449ddc126df" - -object-keys@^1.0.11, object-keys@^1.0.12: - version "1.0.12" - resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.0.12.tgz#09c53855377575310cca62f55bb334abff7b3ed2" - -object-keys@~0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-0.2.0.tgz#cddec02998b091be42bf1035ae32e49f1cb6ea67" - dependencies: - foreach "~2.0.1" - indexof "~0.0.1" - is "~0.2.6" - -object-keys@~0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-0.4.0.tgz#28a6aae7428dd2c3a92f3d95f21335dd204e0336" - -object-visit@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" - dependencies: - isobject "^3.0.0" - -object.assign@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.0.tgz#968bf1100d7956bb3ca086f006f846b3bc4008da" - dependencies: - define-properties "^1.1.2" - function-bind "^1.1.1" - has-symbols "^1.0.0" - object-keys "^1.0.11" - -object.getownpropertydescriptors@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz#8758c846f5b407adab0f236e0986f14b051caa16" - dependencies: - define-properties "^1.1.2" - es-abstract "^1.5.1" - -object.omit@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/object.omit/-/object.omit-2.0.1.tgz#1a9c744829f39dbb858c76ca3579ae2a54ebd1fa" - dependencies: - for-own "^0.1.4" - is-extendable "^0.1.1" - -object.pick@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" - dependencies: - isobject "^3.0.1" - -object.values@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.0.4.tgz#e524da09b4f66ff05df457546ec72ac99f13069a" - dependencies: - define-properties "^1.1.2" - es-abstract "^1.6.1" - function-bind "^1.1.0" - has "^1.0.1" - -obuf@^1.0.0, obuf@^1.1.1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/obuf/-/obuf-1.1.2.tgz#09bea3343d41859ebd446292d11c9d4db619084e" - -octal@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/octal/-/octal-1.0.0.tgz#63e7162a68efbeb9e213588d58e989d1e5c4530b" - -on-finished@~2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" - dependencies: - ee-first "1.1.1" - -on-headers@~1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.1.tgz#928f5d0f470d49342651ea6794b0857c100693f7" - -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: - wrappy "1" - -onetime@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4" - dependencies: - mimic-fn "^1.0.0" - -opn@5.4.0, opn@^5.1.0: - version "5.4.0" - resolved "https://registry.yarnpkg.com/opn/-/opn-5.4.0.tgz#cb545e7aab78562beb11aa3bfabc7042e1761035" - dependencies: - is-wsl "^1.1.0" - -optimist@^0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.6.1.tgz#da3ea74686fa21a19a111c326e90eb15a0196686" - integrity sha1-2j6nRob6IaGaERwybpDrFaAZZoY= - dependencies: - minimist "~0.0.1" - wordwrap "~0.0.2" - -optimize-css-assets-webpack-plugin@5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/optimize-css-assets-webpack-plugin/-/optimize-css-assets-webpack-plugin-5.0.1.tgz#9eb500711d35165b45e7fd60ba2df40cb3eb9159" - dependencies: - cssnano "^4.1.0" - last-call-webpack-plugin "^3.0.0" - -optionator@^0.8.1, optionator@^0.8.2: - version "0.8.2" - resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.2.tgz#364c5e409d3f4d6301d6c0b4c05bba50180aeb64" - dependencies: - deep-is "~0.1.3" - fast-levenshtein "~2.0.4" - levn "~0.3.0" - prelude-ls "~1.1.2" - type-check "~0.3.2" - wordwrap "~1.0.0" - -original@>=0.0.5: - version "1.0.2" - resolved "https://registry.yarnpkg.com/original/-/original-1.0.2.tgz#e442a61cffe1c5fd20a65f3261c26663b303f25f" - dependencies: - url-parse "^1.4.3" - -os-browserify@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.3.0.tgz#854373c7f5c2315914fc9bfc6bd8238fdda1ec27" - -os-homedir@^1.0.0, os-homedir@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" - -os-locale@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-2.1.0.tgz#42bc2900a6b5b8bd17376c8e882b65afccf24bf2" - dependencies: - execa "^0.7.0" - lcid "^1.0.0" - mem "^1.1.0" - -os-locale@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-3.0.1.tgz#3b014fbf01d87f60a1e5348d80fe870dc82c4620" - dependencies: - execa "^0.10.0" - lcid "^2.0.0" - mem "^4.0.0" - -os-tmpdir@^1.0.0, os-tmpdir@^1.0.1, os-tmpdir@~1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" - -osenv@^0.1.4: - version "0.1.5" - resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410" - dependencies: - 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" - -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@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/p-is-promise/-/p-is-promise-1.1.0.tgz#9c9456989e9f6588017b0434d56097675c3da05e" - -p-limit@^1.1.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" - dependencies: - p-try "^1.0.0" - -p-limit@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.0.0.tgz#e624ed54ee8c460a778b3c9f3670496ff8a57aec" - 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" - 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-map@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/p-map/-/p-map-2.0.0.tgz#be18c5a5adeb8e156460651421aceca56c213a50" - -p-queue@^2.4.2: - version "2.4.2" - resolved "https://registry.yarnpkg.com/p-queue/-/p-queue-2.4.2.tgz#03609826682b743be9a22dba25051bd46724fc34" - -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.0.0" - resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.0.0.tgz#85080bb87c64688fa47996fe8f7dfbe8211760b1" - -pako@~1.0.5: - version "1.0.7" - resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.7.tgz#2473439021b57f1516c82f58be7275ad8ef1bb27" - -parallel-transform@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/parallel-transform/-/parallel-transform-1.1.0.tgz#d410f065b05da23081fcd10f28854c29bda33b06" - dependencies: - cyclist "~0.2.2" - inherits "^2.0.3" - readable-stream "^2.1.5" - -param-case@2.1.x: - version "2.1.1" - resolved "https://registry.yarnpkg.com/param-case/-/param-case-2.1.1.tgz#df94fd8cf6531ecf75e6bef9a0858fbc72be2247" - dependencies: - no-case "^2.2.0" - -parse-asn1@^5.0.0: - version "5.1.1" - resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.1.tgz#f6bf293818332bd0dab54efb16087724745e6ca8" - 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" - -parse-entities@^1.0.2, parse-entities@^1.1.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/parse-entities/-/parse-entities-1.2.0.tgz#9deac087661b2e36814153cb78d7e54a4c5fd6f4" - dependencies: - character-entities "^1.0.0" - character-entities-legacy "^1.0.0" - character-reference-invalid "^1.0.0" - is-alphanumerical "^1.0.0" - is-decimal "^1.0.0" - is-hexadecimal "^1.0.0" - -parse-glob@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/parse-glob/-/parse-glob-3.0.4.tgz#b2c376cfb11f35513badd173ef0bb6e3a388391c" - dependencies: - glob-base "^0.3.0" - is-dotfile "^1.0.0" - is-extglob "^1.0.0" - is-glob "^2.0.0" - -parse-json@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" - 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" - dependencies: - error-ex "^1.3.1" - json-parse-better-errors "^1.0.1" - -parse-passwd@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/parse-passwd/-/parse-passwd-1.0.0.tgz#6d5b934a456993b23d37f40a382d6f1666a8e5c6" - -parse5@4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/parse5/-/parse5-4.0.0.tgz#6d78656e3da8d78b4ec0b906f7c08ef1dfe3f608" - -parse5@5.1.0, parse5@^5.0.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/parse5/-/parse5-5.1.0.tgz#c59341c9723f414c452975564c7c00a68d58acd2" - -parseurl@~1.3.2: - version "1.3.2" - resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.2.tgz#fc289d4ed8993119460c156253262cdc8de65bf3" - -pascalcase@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" - -path-browserify@0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.0.tgz#a0b870729aae214005b7d5032ec2cbbb0fb4451a" - -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" - -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: - version "1.0.1" - resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" - -path-is-inside@^1.0.1, path-is-inside@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" - -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" - -path-parse@^1.0.5: - version "1.0.6" - resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" - -path-to-regexp@0.1.7: - version "0.1.7" - resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" - -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-type@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-2.0.0.tgz#f012ccb8415b7096fc2daa1054c3d72389594c73" - dependencies: - pify "^2.0.0" - -path-type@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f" - dependencies: - pify "^3.0.0" - -pbkdf2@^3.0.3: - version "3.0.17" - resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.0.17.tgz#976c206530617b14ebb32114239f7b09336e93a6" - 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" - -pify@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" - -pify@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" - -pinkie-promise@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" - dependencies: - pinkie "^2.0.0" - -pinkie@^2.0.0: - version "2.0.4" - resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" - -pkg-dir@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-1.0.0.tgz#7a4b508a8d5bb2d629d447056ff4e9c9314cf3d4" - dependencies: - find-up "^1.0.0" - -pkg-dir@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-2.0.0.tgz#f6d5d1109e19d63edf428e0bd57e12777615334b" - dependencies: - find-up "^2.1.0" - -pkg-dir@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-3.0.0.tgz#2749020f239ed990881b1f71210d51eb6523bea3" - dependencies: - find-up "^3.0.0" - -pkg-up@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/pkg-up/-/pkg-up-2.0.0.tgz#c819ac728059a461cab1c3889a2be3c49a004d7f" - dependencies: - find-up "^2.1.0" - -please-upgrade-node@^3.0.2, please-upgrade-node@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/please-upgrade-node/-/please-upgrade-node-3.1.1.tgz#ed320051dfcc5024fae696712c8288993595e8ac" - dependencies: - semver-compare "^1.0.0" - -pluralize@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-7.0.0.tgz#298b89df8b93b0221dbf421ad2b1b1ea23fc6777" - -pn@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/pn/-/pn-1.1.0.tgz#e2f4cef0e219f463c179ab37463e4e1ecdccbafb" - -pnp-webpack-plugin@1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/pnp-webpack-plugin/-/pnp-webpack-plugin-1.1.0.tgz#947a96d1db94bb5a1fc014d83b581e428699ac8c" - -portfinder@^1.0.9: - version "1.0.20" - resolved "https://registry.yarnpkg.com/portfinder/-/portfinder-1.0.20.tgz#bea68632e54b2e13ab7b0c4775e9b41bf270e44a" - dependencies: - async "^1.5.2" - debug "^2.2.0" - mkdirp "0.5.x" - -posix-character-classes@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" - -postcss-attribute-case-insensitive@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-4.0.0.tgz#807b6a797ad8bf1c821b2d51cf641e9dd3837624" - dependencies: - postcss "^7.0.2" - postcss-selector-parser "^5.0.0-rc.3" - -postcss-calc@^5.2.0: - version "5.3.1" - resolved "https://registry.yarnpkg.com/postcss-calc/-/postcss-calc-5.3.1.tgz#77bae7ca928ad85716e2fda42f261bf7c1d65b5e" - dependencies: - postcss "^5.0.2" - postcss-message-helpers "^2.0.0" - reduce-css-calc "^1.2.6" - -postcss-calc@^7.0.0: - version "7.0.1" - resolved "https://registry.yarnpkg.com/postcss-calc/-/postcss-calc-7.0.1.tgz#36d77bab023b0ecbb9789d84dcb23c4941145436" - dependencies: - css-unit-converter "^1.1.1" - postcss "^7.0.5" - postcss-selector-parser "^5.0.0-rc.4" - postcss-value-parser "^3.3.1" - -postcss-color-functional-notation@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/postcss-color-functional-notation/-/postcss-color-functional-notation-2.0.1.tgz#5efd37a88fbabeb00a2966d1e53d98ced93f74e0" - dependencies: - postcss "^7.0.2" - postcss-values-parser "^2.0.0" - -postcss-color-gray@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/postcss-color-gray/-/postcss-color-gray-5.0.0.tgz#532a31eb909f8da898ceffe296fdc1f864be8547" - dependencies: - "@csstools/convert-colors" "^1.4.0" - postcss "^7.0.5" - postcss-values-parser "^2.0.0" - -postcss-color-hex-alpha@^5.0.2: - version "5.0.2" - resolved "https://registry.yarnpkg.com/postcss-color-hex-alpha/-/postcss-color-hex-alpha-5.0.2.tgz#e9b1886bb038daed33f6394168c210b40bb4fdb6" - dependencies: - postcss "^7.0.2" - postcss-values-parser "^2.0.0" - -postcss-color-mod-function@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/postcss-color-mod-function/-/postcss-color-mod-function-3.0.3.tgz#816ba145ac11cc3cb6baa905a75a49f903e4d31d" - dependencies: - "@csstools/convert-colors" "^1.4.0" - postcss "^7.0.2" - postcss-values-parser "^2.0.0" - -postcss-color-rebeccapurple@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-color-rebeccapurple/-/postcss-color-rebeccapurple-4.0.1.tgz#c7a89be872bb74e45b1e3022bfe5748823e6de77" - dependencies: - postcss "^7.0.2" - postcss-values-parser "^2.0.0" - -postcss-colormin@^2.1.8: - version "2.2.2" - resolved "https://registry.yarnpkg.com/postcss-colormin/-/postcss-colormin-2.2.2.tgz#6631417d5f0e909a3d7ec26b24c8a8d1e4f96e4b" - dependencies: - colormin "^1.0.5" - postcss "^5.0.13" - postcss-value-parser "^3.2.3" - -postcss-colormin@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-colormin/-/postcss-colormin-4.0.2.tgz#93cd1fa11280008696887db1a528048b18e7ed99" - dependencies: - browserslist "^4.0.0" - color "^3.0.0" - has "^1.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - -postcss-convert-values@^2.3.4: - version "2.6.1" - resolved "https://registry.yarnpkg.com/postcss-convert-values/-/postcss-convert-values-2.6.1.tgz#bbd8593c5c1fd2e3d1c322bb925dcae8dae4d62d" - dependencies: - postcss "^5.0.11" - postcss-value-parser "^3.1.2" - -postcss-convert-values@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-convert-values/-/postcss-convert-values-4.0.1.tgz#ca3813ed4da0f812f9d43703584e449ebe189a7f" - dependencies: - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - -postcss-custom-media@^7.0.7: - version "7.0.7" - resolved "https://registry.yarnpkg.com/postcss-custom-media/-/postcss-custom-media-7.0.7.tgz#bbc698ed3089ded61aad0f5bfb1fb48bf6969e73" - dependencies: - postcss "^7.0.5" - -postcss-custom-properties@^8.0.9: - version "8.0.9" - resolved "https://registry.yarnpkg.com/postcss-custom-properties/-/postcss-custom-properties-8.0.9.tgz#8943870528a6eae4c8e8d285b6ccc9fd1f97e69c" - dependencies: - postcss "^7.0.5" - postcss-values-parser "^2.0.0" - -postcss-custom-selectors@^5.1.2: - version "5.1.2" - resolved "https://registry.yarnpkg.com/postcss-custom-selectors/-/postcss-custom-selectors-5.1.2.tgz#64858c6eb2ecff2fb41d0b28c9dd7b3db4de7fba" - dependencies: - postcss "^7.0.2" - postcss-selector-parser "^5.0.0-rc.3" - -postcss-dir-pseudo-class@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/postcss-dir-pseudo-class/-/postcss-dir-pseudo-class-5.0.0.tgz#6e3a4177d0edb3abcc85fdb6fbb1c26dabaeaba2" - dependencies: - postcss "^7.0.2" - postcss-selector-parser "^5.0.0-rc.3" - -postcss-discard-comments@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/postcss-discard-comments/-/postcss-discard-comments-2.0.4.tgz#befe89fafd5b3dace5ccce51b76b81514be00e3d" - dependencies: - postcss "^5.0.14" - -postcss-discard-comments@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-discard-comments/-/postcss-discard-comments-4.0.1.tgz#30697735b0c476852a7a11050eb84387a67ef55d" - dependencies: - postcss "^7.0.0" - -postcss-discard-duplicates@^2.0.1: - version "2.1.0" - resolved "https://registry.yarnpkg.com/postcss-discard-duplicates/-/postcss-discard-duplicates-2.1.0.tgz#b9abf27b88ac188158a5eb12abcae20263b91932" - dependencies: - postcss "^5.0.4" - -postcss-discard-duplicates@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-discard-duplicates/-/postcss-discard-duplicates-4.0.2.tgz#3fe133cd3c82282e550fc9b239176a9207b784eb" - dependencies: - postcss "^7.0.0" - -postcss-discard-empty@^2.0.1: - version "2.1.0" - resolved "https://registry.yarnpkg.com/postcss-discard-empty/-/postcss-discard-empty-2.1.0.tgz#d2b4bd9d5ced5ebd8dcade7640c7d7cd7f4f92b5" - dependencies: - postcss "^5.0.14" - -postcss-discard-empty@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-discard-empty/-/postcss-discard-empty-4.0.1.tgz#c8c951e9f73ed9428019458444a02ad90bb9f765" - dependencies: - postcss "^7.0.0" - -postcss-discard-overridden@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/postcss-discard-overridden/-/postcss-discard-overridden-0.1.1.tgz#8b1eaf554f686fb288cd874c55667b0aa3668d58" - dependencies: - postcss "^5.0.16" - -postcss-discard-overridden@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-discard-overridden/-/postcss-discard-overridden-4.0.1.tgz#652aef8a96726f029f5e3e00146ee7a4e755ff57" - dependencies: - postcss "^7.0.0" - -postcss-discard-unused@^2.2.1: - version "2.2.3" - resolved "https://registry.yarnpkg.com/postcss-discard-unused/-/postcss-discard-unused-2.2.3.tgz#bce30b2cc591ffc634322b5fb3464b6d934f4433" - dependencies: - postcss "^5.0.14" - uniqs "^2.0.0" - -postcss-double-position-gradients@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/postcss-double-position-gradients/-/postcss-double-position-gradients-1.0.0.tgz#fc927d52fddc896cb3a2812ebc5df147e110522e" - dependencies: - postcss "^7.0.5" - postcss-values-parser "^2.0.0" - -postcss-env-function@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/postcss-env-function/-/postcss-env-function-2.0.2.tgz#0f3e3d3c57f094a92c2baf4b6241f0b0da5365d7" - dependencies: - postcss "^7.0.2" - postcss-values-parser "^2.0.0" - -postcss-filter-plugins@^2.0.0: - version "2.0.3" - resolved "https://registry.yarnpkg.com/postcss-filter-plugins/-/postcss-filter-plugins-2.0.3.tgz#82245fdf82337041645e477114d8e593aa18b8ec" - dependencies: - postcss "^5.0.4" - -postcss-flexbugs-fixes@4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/postcss-flexbugs-fixes/-/postcss-flexbugs-fixes-4.1.0.tgz#e094a9df1783e2200b7b19f875dcad3b3aff8b20" - dependencies: - postcss "^7.0.0" - -postcss-focus-visible@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/postcss-focus-visible/-/postcss-focus-visible-4.0.0.tgz#477d107113ade6024b14128317ade2bd1e17046e" - dependencies: - postcss "^7.0.2" - -postcss-focus-within@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/postcss-focus-within/-/postcss-focus-within-3.0.0.tgz#763b8788596cee9b874c999201cdde80659ef680" - dependencies: - postcss "^7.0.2" - -postcss-font-variant@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/postcss-font-variant/-/postcss-font-variant-4.0.0.tgz#71dd3c6c10a0d846c5eda07803439617bbbabacc" - dependencies: - postcss "^7.0.2" - -postcss-gap-properties@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/postcss-gap-properties/-/postcss-gap-properties-2.0.0.tgz#431c192ab3ed96a3c3d09f2ff615960f902c1715" - dependencies: - postcss "^7.0.2" - -postcss-html@^0.34.0: - version "0.34.0" - resolved "https://registry.yarnpkg.com/postcss-html/-/postcss-html-0.34.0.tgz#9bfd637ad8c3d3a43625b5ef844dc804b3370868" - dependencies: - htmlparser2 "^3.9.2" - -postcss-image-set-function@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/postcss-image-set-function/-/postcss-image-set-function-3.0.1.tgz#28920a2f29945bed4c3198d7df6496d410d3f288" - dependencies: - postcss "^7.0.2" - postcss-values-parser "^2.0.0" - -postcss-initial@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/postcss-initial/-/postcss-initial-3.0.0.tgz#1772512faf11421b791fb2ca6879df5f68aa0517" - dependencies: - lodash.template "^4.2.4" - postcss "^7.0.2" - -postcss-jsx@^0.35.0: - version "0.35.0" - resolved "https://registry.yarnpkg.com/postcss-jsx/-/postcss-jsx-0.35.0.tgz#1d6cb82393994cdc7e9aa421648e3f0f3f98209b" - dependencies: - "@babel/core" "^7.1.2" - optionalDependencies: - postcss-styled ">=0.34.0" - -postcss-lab-function@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/postcss-lab-function/-/postcss-lab-function-2.0.1.tgz#bb51a6856cd12289ab4ae20db1e3821ef13d7d2e" - dependencies: - "@csstools/convert-colors" "^1.4.0" - postcss "^7.0.2" - postcss-values-parser "^2.0.0" - -postcss-less@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/postcss-less/-/postcss-less-3.1.0.tgz#0e14a80206b452f44d3a09d082fa72645e8168cc" - dependencies: - postcss "^7.0.3" - -postcss-load-config@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-1.2.0.tgz#539e9afc9ddc8620121ebf9d8c3673e0ce50d28a" - dependencies: - cosmiconfig "^2.1.0" - object-assign "^4.1.0" - postcss-load-options "^1.2.0" - postcss-load-plugins "^2.3.0" - -postcss-load-config@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-2.0.0.tgz#f1312ddbf5912cd747177083c5ef7a19d62ee484" - dependencies: - cosmiconfig "^4.0.0" - import-cwd "^2.0.0" - -postcss-load-options@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/postcss-load-options/-/postcss-load-options-1.2.0.tgz#b098b1559ddac2df04bc0bb375f99a5cfe2b6d8c" - dependencies: - cosmiconfig "^2.1.0" - object-assign "^4.1.0" - -postcss-load-plugins@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/postcss-load-plugins/-/postcss-load-plugins-2.3.0.tgz#745768116599aca2f009fad426b00175049d8d92" - dependencies: - cosmiconfig "^2.1.1" - object-assign "^4.1.0" - -postcss-loader@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/postcss-loader/-/postcss-loader-3.0.0.tgz#6b97943e47c72d845fa9e03f273773d4e8dd6c2d" - dependencies: - loader-utils "^1.1.0" - postcss "^7.0.0" - postcss-load-config "^2.0.0" - schema-utils "^1.0.0" - -postcss-logical@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/postcss-logical/-/postcss-logical-3.0.0.tgz#2495d0f8b82e9f262725f75f9401b34e7b45d5b5" - dependencies: - postcss "^7.0.2" - -postcss-markdown@^0.34.0: - version "0.34.0" - resolved "https://registry.yarnpkg.com/postcss-markdown/-/postcss-markdown-0.34.0.tgz#7a043e6eee3ab846a4cefe3ab43d141038e2da79" - dependencies: - remark "^9.0.0" - unist-util-find-all-after "^1.0.2" - -postcss-media-minmax@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/postcss-media-minmax/-/postcss-media-minmax-4.0.0.tgz#b75bb6cbc217c8ac49433e12f22048814a4f5ed5" - dependencies: - postcss "^7.0.2" - -postcss-media-query-parser@^0.2.3: - version "0.2.3" - resolved "https://registry.yarnpkg.com/postcss-media-query-parser/-/postcss-media-query-parser-0.2.3.tgz#27b39c6f4d94f81b1a73b8f76351c609e5cef244" - -postcss-merge-idents@^2.1.5: - version "2.1.7" - resolved "https://registry.yarnpkg.com/postcss-merge-idents/-/postcss-merge-idents-2.1.7.tgz#4c5530313c08e1d5b3bbf3d2bbc747e278eea270" - dependencies: - has "^1.0.1" - postcss "^5.0.10" - postcss-value-parser "^3.1.1" - -postcss-merge-longhand@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/postcss-merge-longhand/-/postcss-merge-longhand-2.0.2.tgz#23d90cd127b0a77994915332739034a1a4f3d658" - dependencies: - postcss "^5.0.4" - -postcss-merge-longhand@^4.0.9: - version "4.0.9" - resolved "https://registry.yarnpkg.com/postcss-merge-longhand/-/postcss-merge-longhand-4.0.9.tgz#c2428b994833ffb2a072f290ca642e75ceabcd6f" - dependencies: - css-color-names "0.0.4" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - stylehacks "^4.0.0" - -postcss-merge-rules@^2.0.3: - version "2.1.2" - resolved "https://registry.yarnpkg.com/postcss-merge-rules/-/postcss-merge-rules-2.1.2.tgz#d1df5dfaa7b1acc3be553f0e9e10e87c61b5f721" - dependencies: - browserslist "^1.5.2" - caniuse-api "^1.5.2" - postcss "^5.0.4" - postcss-selector-parser "^2.2.2" - vendors "^1.0.0" - -postcss-merge-rules@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-merge-rules/-/postcss-merge-rules-4.0.2.tgz#2be44401bf19856f27f32b8b12c0df5af1b88e74" - dependencies: - browserslist "^4.0.0" - caniuse-api "^3.0.0" - cssnano-util-same-parent "^4.0.0" - postcss "^7.0.0" - postcss-selector-parser "^3.0.0" - vendors "^1.0.0" - -postcss-message-helpers@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/postcss-message-helpers/-/postcss-message-helpers-2.0.0.tgz#a4f2f4fab6e4fe002f0aed000478cdf52f9ba60e" - -postcss-minify-font-values@^1.0.2: - version "1.0.5" - resolved "https://registry.yarnpkg.com/postcss-minify-font-values/-/postcss-minify-font-values-1.0.5.tgz#4b58edb56641eba7c8474ab3526cafd7bbdecb69" - dependencies: - object-assign "^4.0.1" - postcss "^5.0.4" - postcss-value-parser "^3.0.2" - -postcss-minify-font-values@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-minify-font-values/-/postcss-minify-font-values-4.0.2.tgz#cd4c344cce474343fac5d82206ab2cbcb8afd5a6" - dependencies: - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - -postcss-minify-gradients@^1.0.1: - version "1.0.5" - resolved "https://registry.yarnpkg.com/postcss-minify-gradients/-/postcss-minify-gradients-1.0.5.tgz#5dbda11373703f83cfb4a3ea3881d8d75ff5e6e1" - dependencies: - postcss "^5.0.12" - postcss-value-parser "^3.3.0" - -postcss-minify-gradients@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-minify-gradients/-/postcss-minify-gradients-4.0.1.tgz#6da95c6e92a809f956bb76bf0c04494953e1a7dd" - dependencies: - cssnano-util-get-arguments "^4.0.0" - is-color-stop "^1.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - -postcss-minify-params@^1.0.4: - version "1.2.2" - resolved "https://registry.yarnpkg.com/postcss-minify-params/-/postcss-minify-params-1.2.2.tgz#ad2ce071373b943b3d930a3fa59a358c28d6f1f3" - dependencies: - alphanum-sort "^1.0.1" - postcss "^5.0.2" - postcss-value-parser "^3.0.2" - uniqs "^2.0.0" - -postcss-minify-params@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-minify-params/-/postcss-minify-params-4.0.1.tgz#5b2e2d0264dd645ef5d68f8fec0d4c38c1cf93d2" - dependencies: - alphanum-sort "^1.0.0" - browserslist "^4.0.0" - cssnano-util-get-arguments "^4.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - uniqs "^2.0.0" - -postcss-minify-selectors@^2.0.4: - version "2.1.1" - resolved "https://registry.yarnpkg.com/postcss-minify-selectors/-/postcss-minify-selectors-2.1.1.tgz#b2c6a98c0072cf91b932d1a496508114311735bf" - dependencies: - alphanum-sort "^1.0.2" - has "^1.0.1" - postcss "^5.0.14" - postcss-selector-parser "^2.0.0" - -postcss-minify-selectors@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-minify-selectors/-/postcss-minify-selectors-4.0.1.tgz#a891c197977cc37abf60b3ea06b84248b1c1e9cd" - dependencies: - alphanum-sort "^1.0.0" - has "^1.0.0" - postcss "^7.0.0" - postcss-selector-parser "^3.0.0" - -postcss-modules-extract-imports@1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-1.1.0.tgz#b614c9720be6816eaee35fb3a5faa1dba6a05ddb" - dependencies: - postcss "^6.0.1" - -postcss-modules-extract-imports@^1.2.0: - version "1.2.1" - resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-1.2.1.tgz#dc87e34148ec7eab5f791f7cd5849833375b741a" - dependencies: - postcss "^6.0.1" - -postcss-modules-local-by-default@1.2.0, postcss-modules-local-by-default@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-1.2.0.tgz#f7d80c398c5a393fa7964466bd19500a7d61c069" - dependencies: - css-selector-tokenizer "^0.7.0" - postcss "^6.0.1" - -postcss-modules-scope@1.1.0, postcss-modules-scope@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-1.1.0.tgz#d6ea64994c79f97b62a72b426fbe6056a194bb90" - dependencies: - css-selector-tokenizer "^0.7.0" - postcss "^6.0.1" - -postcss-modules-values@1.3.0, postcss-modules-values@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/postcss-modules-values/-/postcss-modules-values-1.3.0.tgz#ecffa9d7e192518389f42ad0e83f72aec456ea20" - dependencies: - icss-replace-symbols "^1.1.0" - postcss "^6.0.1" - -postcss-modules@^1.1.0: - version "1.4.1" - resolved "https://registry.yarnpkg.com/postcss-modules/-/postcss-modules-1.4.1.tgz#8aa35bd3461db67e27377a7ce770d77b654a84ef" - dependencies: - css-modules-loader-core "^1.1.0" - generic-names "^1.0.3" - lodash.camelcase "^4.3.0" - postcss "^7.0.1" - string-hash "^1.1.1" - -postcss-nesting@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/postcss-nesting/-/postcss-nesting-7.0.0.tgz#6e26a770a0c8fcba33782a6b6f350845e1a448f6" - dependencies: - postcss "^7.0.2" - -postcss-normalize-charset@^1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/postcss-normalize-charset/-/postcss-normalize-charset-1.1.1.tgz#ef9ee71212d7fe759c78ed162f61ed62b5cb93f1" - dependencies: - postcss "^5.0.5" - -postcss-normalize-charset@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-normalize-charset/-/postcss-normalize-charset-4.0.1.tgz#8b35add3aee83a136b0471e0d59be58a50285dd4" - dependencies: - postcss "^7.0.0" - -postcss-normalize-display-values@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.1.tgz#d9a83d47c716e8a980f22f632c8b0458cfb48a4c" - dependencies: - cssnano-util-get-match "^4.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - -postcss-normalize-positions@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-normalize-positions/-/postcss-normalize-positions-4.0.1.tgz#ee2d4b67818c961964c6be09d179894b94fd6ba1" - dependencies: - cssnano-util-get-arguments "^4.0.0" - has "^1.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - -postcss-normalize-repeat-style@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-4.0.1.tgz#5293f234b94d7669a9f805495d35b82a581c50e5" - dependencies: - cssnano-util-get-arguments "^4.0.0" - cssnano-util-get-match "^4.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - -postcss-normalize-string@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-normalize-string/-/postcss-normalize-string-4.0.1.tgz#23c5030c2cc24175f66c914fa5199e2e3c10fef3" - dependencies: - has "^1.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - -postcss-normalize-timing-functions@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-4.0.1.tgz#8be83e0b9cb3ff2d1abddee032a49108f05f95d7" - dependencies: - cssnano-util-get-match "^4.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - -postcss-normalize-unicode@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-normalize-unicode/-/postcss-normalize-unicode-4.0.1.tgz#841bd48fdcf3019ad4baa7493a3d363b52ae1cfb" - dependencies: - browserslist "^4.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - -postcss-normalize-url@^3.0.7: - version "3.0.8" - resolved "https://registry.yarnpkg.com/postcss-normalize-url/-/postcss-normalize-url-3.0.8.tgz#108f74b3f2fcdaf891a2ffa3ea4592279fc78222" - dependencies: - is-absolute-url "^2.0.0" - normalize-url "^1.4.0" - postcss "^5.0.14" - postcss-value-parser "^3.2.3" - -postcss-normalize-url@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-normalize-url/-/postcss-normalize-url-4.0.1.tgz#10e437f86bc7c7e58f7b9652ed878daaa95faae1" - dependencies: - is-absolute-url "^2.0.0" - normalize-url "^3.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - -postcss-normalize-whitespace@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-normalize-whitespace/-/postcss-normalize-whitespace-4.0.1.tgz#d14cb639b61238418ac8bc8d3b7bdd65fc86575e" - dependencies: - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - -postcss-ordered-values@^2.1.0: - version "2.2.3" - resolved "https://registry.yarnpkg.com/postcss-ordered-values/-/postcss-ordered-values-2.2.3.tgz#eec6c2a67b6c412a8db2042e77fe8da43f95c11d" - dependencies: - postcss "^5.0.4" - postcss-value-parser "^3.0.1" - -postcss-ordered-values@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/postcss-ordered-values/-/postcss-ordered-values-4.1.1.tgz#2e3b432ef3e489b18333aeca1f1295eb89be9fc2" - dependencies: - cssnano-util-get-arguments "^4.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - -postcss-overflow-shorthand@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/postcss-overflow-shorthand/-/postcss-overflow-shorthand-2.0.0.tgz#31ecf350e9c6f6ddc250a78f0c3e111f32dd4c30" - dependencies: - postcss "^7.0.2" - -postcss-page-break@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/postcss-page-break/-/postcss-page-break-2.0.0.tgz#add52d0e0a528cabe6afee8b46e2abb277df46bf" - dependencies: - postcss "^7.0.2" - -postcss-place@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-place/-/postcss-place-4.0.1.tgz#e9f39d33d2dc584e46ee1db45adb77ca9d1dcc62" - dependencies: - postcss "^7.0.2" - postcss-values-parser "^2.0.0" - -postcss-preset-env@6.3.1: - version "6.3.1" - resolved "https://registry.yarnpkg.com/postcss-preset-env/-/postcss-preset-env-6.3.1.tgz#bd0f6353c44f41d0be61da278af33a6559e0aa6a" - dependencies: - autoprefixer "^9.3.1" - browserslist "^4.3.4" - caniuse-lite "^1.0.30000905" - cssdb "^4.1.0" - postcss "^7.0.5" - postcss-attribute-case-insensitive "^4.0.0" - postcss-color-functional-notation "^2.0.1" - postcss-color-gray "^5.0.0" - postcss-color-hex-alpha "^5.0.2" - postcss-color-mod-function "^3.0.3" - postcss-color-rebeccapurple "^4.0.1" - postcss-custom-media "^7.0.7" - postcss-custom-properties "^8.0.9" - postcss-custom-selectors "^5.1.2" - postcss-dir-pseudo-class "^5.0.0" - postcss-double-position-gradients "^1.0.0" - postcss-env-function "^2.0.2" - postcss-focus-visible "^4.0.0" - postcss-focus-within "^3.0.0" - postcss-font-variant "^4.0.0" - postcss-gap-properties "^2.0.0" - postcss-image-set-function "^3.0.1" - postcss-initial "^3.0.0" - postcss-lab-function "^2.0.1" - postcss-logical "^3.0.0" - postcss-media-minmax "^4.0.0" - postcss-nesting "^7.0.0" - postcss-overflow-shorthand "^2.0.0" - postcss-page-break "^2.0.0" - postcss-place "^4.0.1" - postcss-pseudo-class-any-link "^6.0.0" - postcss-replace-overflow-wrap "^3.0.0" - postcss-selector-matches "^4.0.0" - postcss-selector-not "^4.0.0" - -postcss-pseudo-class-any-link@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/postcss-pseudo-class-any-link/-/postcss-pseudo-class-any-link-6.0.0.tgz#2ed3eed393b3702879dec4a87032b210daeb04d1" - dependencies: - postcss "^7.0.2" - postcss-selector-parser "^5.0.0-rc.3" - -postcss-reduce-idents@^2.2.2: - version "2.4.0" - resolved "https://registry.yarnpkg.com/postcss-reduce-idents/-/postcss-reduce-idents-2.4.0.tgz#c2c6d20cc958284f6abfbe63f7609bf409059ad3" - dependencies: - postcss "^5.0.4" - postcss-value-parser "^3.0.2" - -postcss-reduce-initial@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/postcss-reduce-initial/-/postcss-reduce-initial-1.0.1.tgz#68f80695f045d08263a879ad240df8dd64f644ea" - dependencies: - postcss "^5.0.4" - -postcss-reduce-initial@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-reduce-initial/-/postcss-reduce-initial-4.0.2.tgz#bac8e325d67510ee01fa460676dc8ea9e3b40f15" - dependencies: - browserslist "^4.0.0" - caniuse-api "^3.0.0" - has "^1.0.0" - postcss "^7.0.0" - -postcss-reduce-transforms@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/postcss-reduce-transforms/-/postcss-reduce-transforms-1.0.4.tgz#ff76f4d8212437b31c298a42d2e1444025771ae1" - dependencies: - has "^1.0.1" - postcss "^5.0.8" - postcss-value-parser "^3.0.1" - -postcss-reduce-transforms@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-reduce-transforms/-/postcss-reduce-transforms-4.0.1.tgz#8600d5553bdd3ad640f43bff81eb52f8760d4561" - dependencies: - cssnano-util-get-match "^4.0.0" - has "^1.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - -postcss-replace-overflow-wrap@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/postcss-replace-overflow-wrap/-/postcss-replace-overflow-wrap-3.0.0.tgz#61b360ffdaedca84c7c918d2b0f0d0ea559ab01c" - dependencies: - postcss "^7.0.2" - -postcss-reporter@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/postcss-reporter/-/postcss-reporter-6.0.0.tgz#44c873129d8c029a430b6d2186210d79c8de88b8" - dependencies: - chalk "^2.0.1" - lodash "^4.17.4" - log-symbols "^2.0.0" - postcss "^7.0.2" - -postcss-resolve-nested-selector@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/postcss-resolve-nested-selector/-/postcss-resolve-nested-selector-0.1.1.tgz#29ccbc7c37dedfac304e9fff0bf1596b3f6a0e4e" - -postcss-safe-parser@4.0.1, postcss-safe-parser@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-safe-parser/-/postcss-safe-parser-4.0.1.tgz#8756d9e4c36fdce2c72b091bbc8ca176ab1fcdea" - dependencies: - postcss "^7.0.0" - -postcss-sass@^0.3.5: - version "0.3.5" - resolved "https://registry.yarnpkg.com/postcss-sass/-/postcss-sass-0.3.5.tgz#6d3e39f101a53d2efa091f953493116d32beb68c" - dependencies: - gonzales-pe "^4.2.3" - postcss "^7.0.1" - -postcss-scss@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/postcss-scss/-/postcss-scss-2.0.0.tgz#248b0a28af77ea7b32b1011aba0f738bda27dea1" - dependencies: - postcss "^7.0.0" - -postcss-selector-matches@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/postcss-selector-matches/-/postcss-selector-matches-4.0.0.tgz#71c8248f917ba2cc93037c9637ee09c64436fcff" - dependencies: - balanced-match "^1.0.0" - postcss "^7.0.2" - -postcss-selector-not@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/postcss-selector-not/-/postcss-selector-not-4.0.0.tgz#c68ff7ba96527499e832724a2674d65603b645c0" - dependencies: - balanced-match "^1.0.0" - postcss "^7.0.2" - -postcss-selector-parser@^2.0.0, postcss-selector-parser@^2.2.2: - version "2.2.3" - resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-2.2.3.tgz#f9437788606c3c9acee16ffe8d8b16297f27bb90" - dependencies: - flatten "^1.0.2" - indexes-of "^1.0.1" - uniq "^1.0.1" - -postcss-selector-parser@^3.0.0, postcss-selector-parser@^3.1.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-3.1.1.tgz#4f875f4afb0c96573d5cf4d74011aee250a7e865" - dependencies: - dot-prop "^4.1.1" - indexes-of "^1.0.1" - uniq "^1.0.1" - -postcss-selector-parser@^5.0.0-rc.3, postcss-selector-parser@^5.0.0-rc.4: - version "5.0.0-rc.4" - resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-5.0.0-rc.4.tgz#ca5e77238bf152966378c13e91ad6d611568ea87" - dependencies: - cssesc "^2.0.0" - indexes-of "^1.0.1" - uniq "^1.0.1" - -postcss-styled@>=0.34.0, postcss-styled@^0.34.0: - version "0.34.0" - resolved "https://registry.yarnpkg.com/postcss-styled/-/postcss-styled-0.34.0.tgz#07d47bcb13707289782aa058605fd9feaf84391d" - -postcss-svgo@^2.1.1: - version "2.1.6" - resolved "https://registry.yarnpkg.com/postcss-svgo/-/postcss-svgo-2.1.6.tgz#b6df18aa613b666e133f08adb5219c2684ac108d" - dependencies: - is-svg "^2.0.0" - postcss "^5.0.14" - postcss-value-parser "^3.2.3" - svgo "^0.7.0" - -postcss-svgo@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-svgo/-/postcss-svgo-4.0.1.tgz#5628cdb38f015de6b588ce6d0bf0724b492b581d" - dependencies: - is-svg "^3.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - svgo "^1.0.0" - -postcss-syntax@^0.34.0: - version "0.34.0" - resolved "https://registry.yarnpkg.com/postcss-syntax/-/postcss-syntax-0.34.0.tgz#4a85c022f1cdecea72102775c91af1e7f506d83a" - -postcss-unique-selectors@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/postcss-unique-selectors/-/postcss-unique-selectors-2.0.2.tgz#981d57d29ddcb33e7b1dfe1fd43b8649f933ca1d" - dependencies: - alphanum-sort "^1.0.1" - postcss "^5.0.4" - uniqs "^2.0.0" - -postcss-unique-selectors@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-unique-selectors/-/postcss-unique-selectors-4.0.1.tgz#9446911f3289bfd64c6d680f073c03b1f9ee4bac" - dependencies: - alphanum-sort "^1.0.0" - postcss "^7.0.0" - uniqs "^2.0.0" - -postcss-value-parser@^3.0.0, postcss-value-parser@^3.0.1, postcss-value-parser@^3.0.2, postcss-value-parser@^3.1.1, postcss-value-parser@^3.1.2, postcss-value-parser@^3.2.3, postcss-value-parser@^3.3.0, postcss-value-parser@^3.3.1: - version "3.3.1" - resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz#9ff822547e2893213cf1c30efa51ac5fd1ba8281" - -postcss-values-parser@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/postcss-values-parser/-/postcss-values-parser-2.0.0.tgz#1ba42cae31367c44f96721cb5eb99462bfb39705" - dependencies: - flatten "^1.0.2" - indexes-of "^1.0.1" - uniq "^1.0.1" - -postcss-zindex@^2.0.1: - version "2.2.0" - resolved "https://registry.yarnpkg.com/postcss-zindex/-/postcss-zindex-2.2.0.tgz#d2109ddc055b91af67fc4cb3b025946639d2af22" - dependencies: - has "^1.0.1" - postcss "^5.0.4" - uniqs "^2.0.0" - -postcss@6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-6.0.1.tgz#000dbd1f8eef217aa368b9a212c5fc40b2a8f3f2" - dependencies: - chalk "^1.1.3" - source-map "^0.5.6" - supports-color "^3.2.3" - -postcss@^5.0.10, postcss@^5.0.11, postcss@^5.0.12, postcss@^5.0.13, postcss@^5.0.14, postcss@^5.0.16, postcss@^5.0.2, postcss@^5.0.4, postcss@^5.0.5, postcss@^5.0.8, postcss@^5.2.16: - version "5.2.18" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-5.2.18.tgz#badfa1497d46244f6390f58b319830d9107853c5" - dependencies: - chalk "^1.1.3" - js-base64 "^2.1.9" - source-map "^0.5.6" - supports-color "^3.2.3" - -postcss@^6.0.1, postcss@^6.0.21, postcss@^6.0.23: - version "6.0.23" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-6.0.23.tgz#61c82cc328ac60e677645f979054eb98bc0e3324" - dependencies: - chalk "^2.4.1" - source-map "^0.6.1" - supports-color "^5.4.0" - -postcss@^7.0.0, postcss@^7.0.1, postcss@^7.0.2, postcss@^7.0.3, postcss@^7.0.5, postcss@^7.0.6: - version "7.0.6" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.6.tgz#6dcaa1e999cdd4a255dcd7d4d9547f4ca010cdc2" - dependencies: - chalk "^2.4.1" - source-map "^0.6.1" - supports-color "^5.5.0" - -prelude-ls@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" - -prepend-http@^1.0.0: - version "1.0.4" - resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc" - -preserve@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b" - -prettier@^1.14.2, prettier@^1.15.3: - version "1.15.3" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.15.3.tgz#1feaac5bdd181237b54dbe65d874e02a1472786a" - -pretty-bytes@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-4.0.2.tgz#b2bf82e7350d65c6c33aa95aaa5a4f6327f61cd9" - -pretty-error@^2.0.2: - version "2.1.1" - resolved "https://registry.yarnpkg.com/pretty-error/-/pretty-error-2.1.1.tgz#5f4f87c8f91e5ae3f3ba87ab4cf5e03b1a17f1a3" - dependencies: - renderkid "^2.0.1" - utila "~0.4" - -pretty-format@^23.6.0: - version "23.6.0" - resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-23.6.0.tgz#5eaac8eeb6b33b987b7fe6097ea6a8a146ab5760" - dependencies: - ansi-regex "^3.0.0" - ansi-styles "^3.2.0" - -private@^0.1.6, private@^0.1.8: - version "0.1.8" - resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff" - -process-es6@^0.11.2: - version "0.11.6" - resolved "https://registry.yarnpkg.com/process-es6/-/process-es6-0.11.6.tgz#c6bb389f9a951f82bd4eb169600105bd2ff9c778" - -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" - -process@^0.11.10: - version "0.11.10" - resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" - -progress@^2.0.0: - version "2.0.3" - resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" - -promise-inflight@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" - -promise.series@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/promise.series/-/promise.series-0.2.0.tgz#2cc7ebe959fc3a6619c04ab4dbdc9e452d864bbd" - -promise@8.0.2: - version "8.0.2" - resolved "https://registry.yarnpkg.com/promise/-/promise-8.0.2.tgz#9dcd0672192c589477d56891271bdc27547ae9f0" - dependencies: - asap "~2.0.6" - -prompts@^0.1.9: - version "0.1.14" - resolved "https://registry.yarnpkg.com/prompts/-/prompts-0.1.14.tgz#a8e15c612c5c9ec8f8111847df3337c9cbd443b2" - dependencies: - kleur "^2.0.1" - sisteransi "^0.1.1" - -prop-types@^15.6.2: - version "15.6.2" - resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.6.2.tgz#05d5ca77b4453e985d60fc7ff8c859094a497102" - dependencies: - loose-envify "^1.3.1" - object-assign "^4.1.1" - -property-information@^5.0.0, property-information@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/property-information/-/property-information-5.0.1.tgz#c3b09f4f5750b1634c0b24205adbf78f18bdf94f" - dependencies: - xtend "^4.0.1" - -proxy-addr@~2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.4.tgz#ecfc733bf22ff8c6f407fa275327b9ab67e48b93" - dependencies: - forwarded "~0.1.2" - ipaddr.js "1.8.0" - -prr@~0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/prr/-/prr-0.0.0.tgz#1a84b85908325501411853d0081ee3fa86e2926a" - -prr@~1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" - -pseudomap@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" - -psl@^1.1.24, psl@^1.1.28: - version "1.1.29" - resolved "https://registry.yarnpkg.com/psl/-/psl-1.1.29.tgz#60f580d360170bb722a797cc704411e6da850c67" - -public-encrypt@^4.0.0: - version "4.0.3" - resolved "https://registry.yarnpkg.com/public-encrypt/-/public-encrypt-4.0.3.tgz#4fcc9d77a07e48ba7527e7cbe0de33d0701331e0" - 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, pump@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/pump/-/pump-2.0.1.tgz#12399add6e4cf7526d973cbc8b5ce2e2908b3909" - 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" - 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" - 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" - -punycode@2.x.x, punycode@^2.1.0, punycode@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" - -punycode@^1.2.4, punycode@^1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" - -q@^1.1.2: - version "1.5.1" - resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" - -qs@6.5.2, qs@~6.5.2: - version "6.5.2" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" - -query-string@^4.1.0: - version "4.3.4" - resolved "https://registry.yarnpkg.com/query-string/-/query-string-4.3.4.tgz#bbb693b9ca915c232515b228b1a02b609043dbeb" - dependencies: - object-assign "^4.1.0" - strict-uri-encode "^1.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" - -querystring@0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" - -querystringify@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.1.0.tgz#7ded8dfbf7879dcc60d0a644ac6754b283ad17ef" - -quick-lru@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-1.1.0.tgz#4360b17c61136ad38078397ff11416e186dcfbb8" - -raf@3.4.0: - version "3.4.0" - resolved "https://registry.yarnpkg.com/raf/-/raf-3.4.0.tgz#a28876881b4bc2ca9117d4138163ddb80f781575" - dependencies: - performance-now "^2.1.0" - -randomatic@^3.0.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-3.1.1.tgz#b776efc59375984e36c537b2f51a1f0aff0da1ed" - dependencies: - is-number "^4.0.0" - kind-of "^6.0.0" - math-random "^1.0.1" - -randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5: - version "2.0.6" - resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.0.6.tgz#d302c522948588848a8d300c932b44c24231da80" - 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" - dependencies: - randombytes "^2.0.5" - safe-buffer "^5.1.0" - -range-parser@^1.0.3, range-parser@~1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.0.tgz#f49be6b487894ddc40dcc94a322f611092e00d5e" - -raw-body@2.3.3: - version "2.3.3" - resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.3.3.tgz#1b324ece6b5706e153855bc1148c65bb7f6ea0c3" - dependencies: - bytes "3.0.0" - http-errors "1.6.3" - iconv-lite "0.4.23" - unpipe "1.0.0" - -rc@^1.2.7: - version "1.2.8" - resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" - dependencies: - deep-extend "^0.6.0" - ini "~1.3.0" - minimist "^1.2.0" - strip-json-comments "~2.0.1" - -react-app-polyfill@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/react-app-polyfill/-/react-app-polyfill-0.2.0.tgz#60eaf037223b2f3a5671f45e5ac3b418f0b48ad2" - dependencies: - core-js "2.5.7" - object-assign "4.1.1" - promise "8.0.2" - raf "3.4.0" - whatwg-fetch "3.0.0" - -react-dev-utils@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/react-dev-utils/-/react-dev-utils-7.0.0.tgz#b99d87aea260294bf7ea087cdbd6b099fac3eb27" - dependencies: - "@babel/code-frame" "7.0.0" - address "1.0.3" - browserslist "4.1.1" - chalk "2.4.1" - cross-spawn "6.0.5" - detect-port-alt "1.1.6" - escape-string-regexp "1.0.5" - filesize "3.6.1" - find-up "3.0.0" - global-modules "1.0.0" - globby "8.0.1" - gzip-size "5.0.0" - immer "1.7.2" - inquirer "6.2.0" - is-root "2.0.0" - loader-utils "1.1.0" - opn "5.4.0" - pkg-up "2.0.0" - react-error-overlay "^5.1.1" - recursive-readdir "2.2.2" - shell-quote "1.6.1" - sockjs-client "1.1.5" - strip-ansi "4.0.0" - text-table "0.2.0" - -react-dom@^16.6.3: - version "16.6.3" - resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-16.6.3.tgz#8fa7ba6883c85211b8da2d0efeffc9d3825cccc0" - dependencies: - loose-envify "^1.1.0" - object-assign "^4.1.1" - prop-types "^15.6.2" - scheduler "^0.11.2" - -react-error-overlay@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/react-error-overlay/-/react-error-overlay-5.1.1.tgz#56f0439f001ff3588da0f479a86482ccb1e708cb" - -react-scripts@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/react-scripts/-/react-scripts-2.1.2.tgz#cf1686cd9ca3c6148e1428e97aac12995f01b554" - dependencies: - "@babel/core" "7.1.6" - "@svgr/webpack" "2.4.1" - babel-core "7.0.0-bridge.0" - babel-eslint "9.0.0" - babel-jest "23.6.0" - babel-loader "8.0.4" - babel-plugin-named-asset-import "^0.3.0" - babel-preset-react-app "^7.0.0" - bfj "6.1.1" - case-sensitive-paths-webpack-plugin "2.1.2" - chalk "2.4.1" - css-loader "1.0.0" - dotenv "6.0.0" - dotenv-expand "4.2.0" - eslint "5.6.0" - eslint-config-react-app "^3.0.6" - eslint-loader "2.1.1" - eslint-plugin-flowtype "2.50.1" - eslint-plugin-import "2.14.0" - eslint-plugin-jsx-a11y "6.1.2" - eslint-plugin-react "7.11.1" - file-loader "2.0.0" - fork-ts-checker-webpack-plugin-alt "0.4.14" - fs-extra "7.0.0" - html-webpack-plugin "4.0.0-alpha.2" - identity-obj-proxy "3.0.0" - jest "23.6.0" - jest-pnp-resolver "1.0.1" - jest-resolve "23.6.0" - mini-css-extract-plugin "0.4.3" - optimize-css-assets-webpack-plugin "5.0.1" - pnp-webpack-plugin "1.1.0" - postcss-flexbugs-fixes "4.1.0" - postcss-loader "3.0.0" - postcss-preset-env "6.3.1" - postcss-safe-parser "4.0.1" - react-app-polyfill "^0.2.0" - react-dev-utils "^7.0.0" - resolve "1.8.1" - sass-loader "7.1.0" - style-loader "0.23.0" - terser-webpack-plugin "1.1.0" - url-loader "1.1.1" - webpack "4.19.1" - webpack-dev-server "3.1.9" - webpack-manifest-plugin "2.0.4" - workbox-webpack-plugin "3.6.3" - optionalDependencies: - fsevents "1.2.4" - -react@^16.6.3: - version "16.6.3" - resolved "https://registry.yarnpkg.com/react/-/react-16.6.3.tgz#25d77c91911d6bbdd23db41e70fb094cc1e0871c" - dependencies: - loose-envify "^1.1.0" - object-assign "^4.1.1" - prop-types "^15.6.2" - scheduler "^0.11.2" - -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" - -read-pkg-up@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-2.0.0.tgz#6b72a8048984e0c41e79510fd5e9fa99b3b549be" - dependencies: - find-up "^2.0.0" - read-pkg "^2.0.0" - -read-pkg-up@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-3.0.0.tgz#3ed496685dba0f8fe118d0691dc51f4a1ff96f07" - dependencies: - find-up "^2.0.0" - read-pkg "^3.0.0" - -read-pkg@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28" - dependencies: - load-json-file "^1.0.0" - normalize-package-data "^2.3.2" - path-type "^1.0.0" - -read-pkg@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-2.0.0.tgz#8ef1c0623c6a6db0dc6713c4bfac46332b2368f8" - dependencies: - load-json-file "^2.0.0" - normalize-package-data "^2.3.2" - path-type "^2.0.0" - -read-pkg@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-3.0.0.tgz#9cbc686978fee65d16c00e2b19c237fcf6e38389" - dependencies: - load-json-file "^4.0.0" - normalize-package-data "^2.3.2" - path-type "^3.0.0" - -read-pkg@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-4.0.1.tgz#963625378f3e1c4d48c85872b5a6ec7d5d093237" - dependencies: - normalize-package-data "^2.3.2" - parse-json "^4.0.0" - pify "^3.0.0" - -"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.4, readable-stream@^2.0.6, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.2.9, 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: - core-util-is "~1.0.0" - inherits "~2.0.3" - isarray "~1.0.0" - process-nextick-args "~2.0.0" - safe-buffer "~5.1.1" - string_decoder "~1.1.1" - util-deprecate "~1.0.1" - -readable-stream@1.0, readable-stream@~1.0.26, readable-stream@~1.0.26-4: - version "1.0.34" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.0.34.tgz#125820e34bc842d2f2aaafafe4c2916ee32c157c" - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.1" - isarray "0.0.1" - string_decoder "~0.10.x" - -readable-stream@^1.0.26-4: - version "1.1.14" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.14.tgz#7cf4c54ef648e3813084c636dd2079e166c081d9" - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.1" - isarray "0.0.1" - string_decoder "~0.10.x" - -readable-stream@^3.0.6: - version "3.0.6" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.0.6.tgz#351302e4c68b5abd6a2ed55376a7f9a25be3057a" - dependencies: - inherits "^2.0.3" - string_decoder "^1.1.1" - util-deprecate "^1.0.1" - -readdirp@^2.0.0: - version "2.2.1" - resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.2.1.tgz#0e87622a3325aa33e892285caf8b4e846529a525" - dependencies: - graceful-fs "^4.1.11" - micromatch "^3.1.10" - readable-stream "^2.0.2" - -realpath-native@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/realpath-native/-/realpath-native-1.0.2.tgz#cd51ce089b513b45cf9b1516c82989b51ccc6560" - dependencies: - util.promisify "^1.0.0" - -recursive-readdir@2.2.2: - version "2.2.2" - resolved "https://registry.yarnpkg.com/recursive-readdir/-/recursive-readdir-2.2.2.tgz#9946fb3274e1628de6e36b2f6714953b4845094f" - dependencies: - minimatch "3.0.4" - -redent@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/redent/-/redent-2.0.0.tgz#c1b2007b42d57eb1389079b3c8333639d5e1ccaa" - dependencies: - indent-string "^3.0.0" - strip-indent "^2.0.0" - -reduce-css-calc@^1.2.6: - version "1.3.0" - resolved "https://registry.yarnpkg.com/reduce-css-calc/-/reduce-css-calc-1.3.0.tgz#747c914e049614a4c9cfbba629871ad1d2927716" - dependencies: - balanced-match "^0.4.2" - math-expression-evaluator "^1.2.14" - reduce-function-call "^1.0.1" - -reduce-function-call@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/reduce-function-call/-/reduce-function-call-1.0.2.tgz#5a200bf92e0e37751752fe45b0ab330fd4b6be99" - dependencies: - balanced-match "^0.4.2" - -regenerate-unicode-properties@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-7.0.0.tgz#107405afcc4a190ec5ed450ecaa00ed0cafa7a4c" - dependencies: - regenerate "^1.4.0" - -regenerate@^1.2.1, regenerate@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.0.tgz#4a856ec4b56e4077c557589cae85e7a4c8869a11" - -regenerator-runtime@^0.11.0: - version "0.11.1" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9" - -regenerator-runtime@^0.12.0: - version "0.12.1" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.12.1.tgz#fa1a71544764c036f8c49b13a08b2594c9f8a0de" - -regenerator-transform@^0.13.3: - version "0.13.3" - resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.13.3.tgz#264bd9ff38a8ce24b06e0636496b2c856b57bcbb" - dependencies: - private "^0.1.6" - -regex-cache@^0.4.2: - version "0.4.4" - resolved "https://registry.yarnpkg.com/regex-cache/-/regex-cache-0.4.4.tgz#75bdc58a2a1496cec48a12835bc54c8d562336dd" - dependencies: - is-equal-shallow "^0.1.3" - -regex-not@^1.0.0, regex-not@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" - dependencies: - extend-shallow "^3.0.2" - safe-regex "^1.1.0" - -regexpp@^2.0.0, regexpp@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-2.0.1.tgz#8d19d31cf632482b589049f8281f93dbcba4d07f" - -regexpu-core@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-1.0.0.tgz#86a763f58ee4d7c2f6b102e4764050de7ed90c6b" - dependencies: - regenerate "^1.2.1" - regjsgen "^0.2.0" - regjsparser "^0.1.4" - -regexpu-core@^4.1.3, regexpu-core@^4.2.0: - version "4.4.0" - resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.4.0.tgz#8d43e0d1266883969720345e70c275ee0aec0d32" - dependencies: - regenerate "^1.4.0" - regenerate-unicode-properties "^7.0.0" - regjsgen "^0.5.0" - regjsparser "^0.6.0" - unicode-match-property-ecmascript "^1.0.4" - unicode-match-property-value-ecmascript "^1.0.2" - -regjsgen@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.2.0.tgz#6c016adeac554f75823fe37ac05b92d5a4edb1f7" - -regjsgen@^0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.5.0.tgz#a7634dc08f89209c2049adda3525711fb97265dd" - -regjsparser@^0.1.4: - version "0.1.5" - resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.1.5.tgz#7ee8f84dc6fa792d3fd0ae228d24bd949ead205c" - dependencies: - jsesc "~0.5.0" - -regjsparser@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.6.0.tgz#f1e6ae8b7da2bae96c99399b868cd6c933a2ba9c" - dependencies: - jsesc "~0.5.0" - -rehype-parse@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/rehype-parse/-/rehype-parse-6.0.0.tgz#f681555f2598165bee2c778b39f9073d17b16bca" - dependencies: - hast-util-from-parse5 "^5.0.0" - parse5 "^5.0.0" - xtend "^4.0.1" - -relateurl@0.2.x: - version "0.2.7" - resolved "https://registry.yarnpkg.com/relateurl/-/relateurl-0.2.7.tgz#54dbf377e51440aca90a4cd274600d3ff2d888a9" - -remark-parse@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/remark-parse/-/remark-parse-5.0.0.tgz#4c077f9e499044d1d5c13f80d7a98cf7b9285d95" - dependencies: - collapse-white-space "^1.0.2" - is-alphabetical "^1.0.0" - is-decimal "^1.0.0" - is-whitespace-character "^1.0.0" - is-word-character "^1.0.0" - markdown-escapes "^1.0.0" - parse-entities "^1.1.0" - repeat-string "^1.5.4" - state-toggle "^1.0.0" - trim "0.0.1" - trim-trailing-lines "^1.0.0" - unherit "^1.0.4" - unist-util-remove-position "^1.0.0" - vfile-location "^2.0.0" - xtend "^4.0.1" - -remark-stringify@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/remark-stringify/-/remark-stringify-5.0.0.tgz#336d3a4d4a6a3390d933eeba62e8de4bd280afba" - dependencies: - ccount "^1.0.0" - is-alphanumeric "^1.0.0" - is-decimal "^1.0.0" - is-whitespace-character "^1.0.0" - longest-streak "^2.0.1" - markdown-escapes "^1.0.0" - markdown-table "^1.1.0" - mdast-util-compact "^1.0.0" - parse-entities "^1.0.2" - repeat-string "^1.5.4" - state-toggle "^1.0.0" - stringify-entities "^1.0.1" - unherit "^1.0.4" - xtend "^4.0.1" - -remark@^9.0.0: - version "9.0.0" - resolved "https://registry.yarnpkg.com/remark/-/remark-9.0.0.tgz#c5cfa8ec535c73a67c4b0f12bfdbd3a67d8b2f60" - dependencies: - remark-parse "^5.0.0" - remark-stringify "^5.0.0" - unified "^6.0.0" - -remove-trailing-separator@^1.0.1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" - -renderkid@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/renderkid/-/renderkid-2.0.2.tgz#12d310f255360c07ad8fde253f6c9e9de372d2aa" - dependencies: - css-select "^1.1.0" - dom-converter "~0.2" - htmlparser2 "~3.3.0" - strip-ansi "^3.0.0" - utila "^0.4.0" - -repeat-element@^1.1.2: - version "1.1.3" - resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.3.tgz#782e0d825c0c5a3bb39731f84efee6b742e6b1ce" - -repeat-string@^1.5.2, repeat-string@^1.5.4, repeat-string@^1.6.1: - version "1.6.1" - resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" - -repeating@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda" - dependencies: - is-finite "^1.0.0" - -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" - dependencies: - lodash "^4.13.1" - -request-promise-native@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/request-promise-native/-/request-promise-native-1.0.5.tgz#5281770f68e0c9719e5163fd3fab482215f4fda5" - dependencies: - request-promise-core "1.1.1" - stealthy-require "^1.1.0" - tough-cookie ">=2.3.3" - -request@^2.87.0, request@^2.88.0: - version "2.88.0" - resolved "https://registry.yarnpkg.com/request/-/request-2.88.0.tgz#9c2fca4f7d35b592efe57c7f0a55e81052124fef" - dependencies: - 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.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.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" - resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" - -require-from-string@^1.1.0: - version "1.2.1" - resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-1.2.1.tgz#529c9ccef27380adfec9a2f965b649bbee636418" - -require-from-string@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" - -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" - -require-uncached@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/require-uncached/-/require-uncached-1.0.3.tgz#4e0d56d6c9662fd31e43011c4b95aa49955421d3" - dependencies: - caller-path "^0.1.0" - resolve-from "^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" - -reserved-words@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/reserved-words/-/reserved-words-0.1.2.tgz#00a0940f98cd501aeaaac316411d9adc52b31ab1" - -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-dir@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/resolve-dir/-/resolve-dir-1.0.1.tgz#79a40644c362be82f26effe739c9bb5382046f43" - dependencies: - expand-tilde "^2.0.0" - global-modules "^1.0.0" - -resolve-from@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-1.0.1.tgz#26cbfe935d1aeeeabb29bc3fe5aeb01e93d44226" - -resolve-from@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748" - -resolve-from@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" - -resolve-url@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" - -resolve@1.1.7: - version "1.1.7" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" - -resolve@1.8.1, resolve@^1.3.2, resolve@^1.5.0, resolve@^1.6.0, resolve@^1.8.1: - version "1.8.1" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.8.1.tgz#82f1ec19a423ac1fbd080b0bab06ba36e84a7a26" - dependencies: - path-parse "^1.0.5" - -restore-cursor@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf" - dependencies: - onetime "^2.0.0" - signal-exit "^3.0.2" - -ret@~0.1.10: - version "0.1.15" - resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" - -rgb-regex@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/rgb-regex/-/rgb-regex-1.0.1.tgz#c0e0d6882df0e23be254a475e8edd41915feaeb1" - -rgba-regex@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/rgba-regex/-/rgba-regex-1.0.0.tgz#43374e2e2ca0968b0ef1523460b7d730ff22eeb3" - -rimraf@^2.2.8, rimraf@^2.5.4, rimraf@^2.6.1, rimraf@^2.6.2, 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" - -ripemd160@^2.0.0, ripemd160@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c" - dependencies: - hash-base "^3.0.0" - inherits "^2.0.1" - -rollup-plugin-babel@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/rollup-plugin-babel/-/rollup-plugin-babel-4.2.0.tgz#9a2c119b5c923928842783ec2abd306fa733054f" - dependencies: - "@babel/helper-module-imports" "^7.0.0" - rollup-pluginutils "^2.3.0" - -rollup-plugin-commonjs@^9.2.0: - version "9.2.0" - resolved "https://registry.yarnpkg.com/rollup-plugin-commonjs/-/rollup-plugin-commonjs-9.2.0.tgz#4604e25069e0c78a09e08faa95dc32dec27f7c89" - dependencies: - estree-walker "^0.5.2" - magic-string "^0.25.1" - resolve "^1.8.1" - rollup-pluginutils "^2.3.3" - -rollup-plugin-node-builtins@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/rollup-plugin-node-builtins/-/rollup-plugin-node-builtins-2.1.2.tgz#24a1fed4a43257b6b64371d8abc6ce1ab14597e9" - dependencies: - browserify-fs "^1.0.0" - buffer-es6 "^4.9.2" - crypto-browserify "^3.11.0" - process-es6 "^0.11.2" - -rollup-plugin-node-resolve@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/rollup-plugin-node-resolve/-/rollup-plugin-node-resolve-4.0.0.tgz#9bc6b8205e9936cc0e26bba2415f1ecf1e64d9b2" - dependencies: - builtin-modules "^3.0.0" - is-module "^1.0.0" - resolve "^1.8.1" - -rollup-plugin-peer-deps-external@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/rollup-plugin-peer-deps-external/-/rollup-plugin-peer-deps-external-2.2.0.tgz#99ef9231aa01736f3e9605b7c3084a0d627f665b" - -rollup-plugin-postcss@^1.6.3: - version "1.6.3" - resolved "https://registry.yarnpkg.com/rollup-plugin-postcss/-/rollup-plugin-postcss-1.6.3.tgz#18256ba66f29ecd9d42a68f4ef136b92b939ddb8" - dependencies: - chalk "^2.0.0" - concat-with-sourcemaps "^1.0.5" - cssnano "^3.10.0" - fs-extra "^5.0.0" - import-cwd "^2.1.0" - p-queue "^2.4.2" - pify "^3.0.0" - postcss "^6.0.21" - postcss-load-config "^1.2.0" - postcss-modules "^1.1.0" - promise.series "^0.2.0" - reserved-words "^0.1.2" - resolve "^1.5.0" - rollup-pluginutils "^2.0.1" - style-inject "^0.3.0" - -rollup-plugin-url@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/rollup-plugin-url/-/rollup-plugin-url-2.1.0.tgz#c06be791dfee1b9f5e0854a94cc6bb3dc2743bc0" - dependencies: - mime "^2.3.1" - mkpath "^1.0.0" - rollup-pluginutils "^2.3.3" - -rollup-pluginutils@^2.0.1, rollup-pluginutils@^2.3.0, rollup-pluginutils@^2.3.3: - version "2.3.3" - resolved "https://registry.yarnpkg.com/rollup-pluginutils/-/rollup-pluginutils-2.3.3.tgz#3aad9b1eb3e7fe8262820818840bf091e5ae6794" - dependencies: - estree-walker "^0.5.2" - micromatch "^2.3.11" - -rollup@^0.68.2: - version "0.68.2" - resolved "https://registry.yarnpkg.com/rollup/-/rollup-0.68.2.tgz#c26afb5d981ca7a1a32f76087dbde9dad4fcc653" - dependencies: - "@types/estree" "0.0.39" - "@types/node" "*" - -rsvp@^3.3.3: - version "3.6.2" - resolved "https://registry.yarnpkg.com/rsvp/-/rsvp-3.6.2.tgz#2e96491599a96cde1b515d5674a8f7a91452926a" - -run-async@^2.2.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.3.0.tgz#0371ab4ae0bdd720d4166d7dfda64ff7a445a6c0" - dependencies: - is-promise "^2.1.0" - -run-node@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/run-node/-/run-node-1.0.0.tgz#46b50b946a2aa2d4947ae1d886e9856fd9cabe5e" - -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" - dependencies: - aproba "^1.1.1" - -rxjs@^6.1.0, rxjs@^6.3.3: - version "6.3.3" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.3.3.tgz#3c6a7fa420e844a81390fb1158a9ec614f4bad55" - dependencies: - tslib "^1.9.0" - -safe-buffer@5.1.2, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: - version "5.1.2" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" - -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" - -"safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: - version "2.1.2" - resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" - -sane@^2.0.0: - version "2.5.2" - resolved "https://registry.yarnpkg.com/sane/-/sane-2.5.2.tgz#b4dc1861c21b427e929507a3e751e2a2cb8ab3fa" - dependencies: - anymatch "^2.0.0" - capture-exit "^1.2.0" - exec-sh "^0.2.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.2.3" - -sass-loader@7.1.0: - version "7.1.0" - resolved "https://registry.yarnpkg.com/sass-loader/-/sass-loader-7.1.0.tgz#16fd5138cb8b424bf8a759528a1972d72aad069d" - dependencies: - clone-deep "^2.0.1" - loader-utils "^1.0.1" - lodash.tail "^4.1.1" - neo-async "^2.5.0" - pify "^3.0.0" - semver "^5.5.0" - -sax@0.5.x: - version "0.5.8" - resolved "https://registry.yarnpkg.com/sax/-/sax-0.5.8.tgz#d472db228eb331c2506b0e8c15524adb939d12c1" - -sax@^1.2.4, sax@~1.2.1, sax@~1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" - -saxes@^3.1.3: - version "3.1.4" - resolved "https://registry.yarnpkg.com/saxes/-/saxes-3.1.4.tgz#4ad5c53eb085ac0570ea1071a07aaf22ad29cebd" - dependencies: - xmlchars "^1.3.1" - -scheduler@^0.11.2: - version "0.11.3" - resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.11.3.tgz#b5769b90cf8b1464f3f3cfcafe8e3cd7555a2d6b" - dependencies: - loose-envify "^1.1.0" - object-assign "^4.1.1" - -schema-utils@^0.4.4, schema-utils@^0.4.5: - version "0.4.7" - resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-0.4.7.tgz#ba74f597d2be2ea880131746ee17d0a093c68187" - dependencies: - ajv "^6.1.0" - ajv-keywords "^3.1.0" - -schema-utils@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-1.0.0.tgz#0b79a93204d7b600d4b2850d1f66c2a34951c770" - dependencies: - ajv "^6.1.0" - ajv-errors "^1.0.0" - ajv-keywords "^3.1.0" - -select-hose@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/select-hose/-/select-hose-2.0.0.tgz#625d8658f865af43ec962bfc376a37359a4994ca" - -selfsigned@^1.9.1: - version "1.10.4" - resolved "https://registry.yarnpkg.com/selfsigned/-/selfsigned-1.10.4.tgz#cdd7eccfca4ed7635d47a08bf2d5d3074092e2cd" - dependencies: - node-forge "0.7.5" - -semver-compare@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/semver-compare/-/semver-compare-1.0.0.tgz#0dee216a1c941ab37e9efb1788f6afc5ff5537fc" - -"semver@2 || 3 || 4 || 5", semver@^5.3.0, semver@^5.4.1, semver@^5.5.0, semver@^5.5.1: - version "5.6.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.6.0.tgz#7e74256fbaa49c75aa7c7a205cc22799cac80004" - -semver@~2.3.1: - version "2.3.2" - resolved "https://registry.yarnpkg.com/semver/-/semver-2.3.2.tgz#b9848f25d6cf36333073ec9ef8856d42f1233e52" - -send@0.16.2: - version "0.16.2" - resolved "https://registry.yarnpkg.com/send/-/send-0.16.2.tgz#6ecca1e0f8c156d141597559848df64730a6bbc1" - dependencies: - debug "2.6.9" - depd "~1.1.2" - destroy "~1.0.4" - encodeurl "~1.0.2" - escape-html "~1.0.3" - etag "~1.8.1" - fresh "0.5.2" - http-errors "~1.6.2" - mime "1.4.1" - ms "2.0.0" - on-finished "~2.3.0" - range-parser "~1.2.0" - statuses "~1.4.0" - -serialize-javascript@^1.4.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-1.5.0.tgz#1aa336162c88a890ddad5384baebc93a655161fe" - -serve-index@^1.7.2: - version "1.9.1" - resolved "https://registry.yarnpkg.com/serve-index/-/serve-index-1.9.1.tgz#d3768d69b1e7d82e5ce050fff5b453bea12a9239" - dependencies: - accepts "~1.3.4" - batch "0.6.1" - debug "2.6.9" - escape-html "~1.0.3" - http-errors "~1.6.2" - mime-types "~2.1.17" - parseurl "~1.3.2" - -serve-static@1.13.2: - version "1.13.2" - resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.13.2.tgz#095e8472fd5b46237db50ce486a43f4b86c6cec1" - dependencies: - encodeurl "~1.0.2" - escape-html "~1.0.3" - parseurl "~1.3.2" - send "0.16.2" - -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" - -set-value@^0.4.3: - version "0.4.3" - resolved "https://registry.yarnpkg.com/set-value/-/set-value-0.4.3.tgz#7db08f9d3d22dc7f78e53af3c3bf4666ecdfccf1" - dependencies: - extend-shallow "^2.0.1" - is-extendable "^0.1.1" - is-plain-object "^2.0.1" - to-object-path "^0.3.0" - -set-value@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.0.tgz#71ae4a88f0feefbbf52d1ea604f3fb315ebb6274" - dependencies: - extend-shallow "^2.0.1" - is-extendable "^0.1.1" - 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" - -setprototypeof@1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656" - -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" - dependencies: - inherits "^2.0.1" - safe-buffer "^5.0.1" - -shallow-clone@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/shallow-clone/-/shallow-clone-0.1.2.tgz#5909e874ba77106d73ac414cfec1ffca87d97060" - dependencies: - is-extendable "^0.1.1" - kind-of "^2.0.1" - lazy-cache "^0.2.3" - mixin-object "^2.0.1" - -shallow-clone@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/shallow-clone/-/shallow-clone-1.0.0.tgz#4480cd06e882ef68b2ad88a3ea54832e2c48b571" - dependencies: - is-extendable "^0.1.1" - kind-of "^5.0.0" - mixin-object "^2.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" - dependencies: - shebang-regex "^1.0.0" - -shebang-regex@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" - -shell-quote@1.6.1: - version "1.6.1" - resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.6.1.tgz#f4781949cce402697127430ea3b3c5476f481767" - dependencies: - array-filter "~0.0.0" - array-map "~0.0.0" - array-reduce "~0.0.0" - jsonify "~0.0.0" - -shellwords@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/shellwords/-/shellwords-0.1.1.tgz#d6b9181c1a48d397324c84871efbcfc73fc0654b" - -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" - -simple-git@^1.85.0: - version "1.107.0" - resolved "https://registry.yarnpkg.com/simple-git/-/simple-git-1.107.0.tgz#12cffaf261c14d6f450f7fdb86c21ccee968b383" - dependencies: - debug "^4.0.1" - -simple-swizzle@^0.2.2: - version "0.2.2" - resolved "https://registry.yarnpkg.com/simple-swizzle/-/simple-swizzle-0.2.2.tgz#a4da6b635ffcccca33f70d17cb92592de95e557a" - dependencies: - is-arrayish "^0.3.1" - -sisteransi@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-0.1.1.tgz#5431447d5f7d1675aac667ccd0b865a4994cb3ce" - -slash@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55" - -slash@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/slash/-/slash-2.0.0.tgz#de552851a1759df3a8f206535442f5ec4ddeab44" - -slice-ansi@0.0.4: - version "0.0.4" - resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-0.0.4.tgz#edbf8903f66f7ce2f8eafd6ceed65e264c831b35" - -slice-ansi@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-1.0.0.tgz#044f1a49d8842ff307aad6b505ed178bd950134d" - dependencies: - is-fullwidth-code-point "^2.0.0" - -slice-ansi@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-2.0.0.tgz#5373bdb8559b45676e8541c66916cdd6251612e7" - dependencies: - ansi-styles "^3.2.0" - astral-regex "^1.0.0" - is-fullwidth-code-point "^2.0.0" - -snapdragon-node@^2.0.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" - dependencies: - define-property "^1.0.0" - isobject "^3.0.0" - snapdragon-util "^3.0.1" - -snapdragon-util@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2" - dependencies: - kind-of "^3.2.0" - -snapdragon@^0.8.1: - version "0.8.2" - resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d" - dependencies: - base "^0.11.1" - debug "^2.2.0" - define-property "^0.2.5" - extend-shallow "^2.0.1" - map-cache "^0.2.2" - source-map "^0.5.6" - source-map-resolve "^0.5.0" - use "^3.1.0" - -sockjs-client@1.1.5: - version "1.1.5" - resolved "https://registry.yarnpkg.com/sockjs-client/-/sockjs-client-1.1.5.tgz#1bb7c0f7222c40f42adf14f4442cbd1269771a83" - dependencies: - debug "^2.6.6" - eventsource "0.1.6" - faye-websocket "~0.11.0" - inherits "^2.0.1" - json3 "^3.3.2" - url-parse "^1.1.8" - -sockjs@0.3.19: - version "0.3.19" - resolved "https://registry.yarnpkg.com/sockjs/-/sockjs-0.3.19.tgz#d976bbe800af7bd20ae08598d582393508993c0d" - dependencies: - faye-websocket "^0.10.0" - uuid "^3.0.1" - -sort-keys@^1.0.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/sort-keys/-/sort-keys-1.1.2.tgz#441b6d4d346798f1b4e49e8920adfba0e543f9ad" - dependencies: - is-plain-obj "^1.0.0" - -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" - -source-map-resolve@^0.5.0: - version "0.5.2" - resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.2.tgz#72e2cc34095543e43b2c62b2c4c10d4a9054f259" - dependencies: - atob "^2.1.1" - decode-uri-component "^0.2.0" - resolve-url "^0.2.1" - 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.6, source-map-support@~0.5.6: - version "0.5.9" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.9.tgz#41bc953b2534267ea2d605bccfa7bfa3111ced5f" - 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.1.x: - version "0.1.43" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.1.43.tgz#c24bc146ca517c1471f5dacbe2571b2b7f9e3346" - dependencies: - amdefine ">=0.0.4" - -source-map@^0.5.0, source-map@^0.5.3, source-map@^0.5.6, source-map@^0.5.7: - 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: - version "0.6.1" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" - integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== - -sourcemap-codec@^1.4.1: - version "1.4.4" - resolved "https://registry.yarnpkg.com/sourcemap-codec/-/sourcemap-codec-1.4.4.tgz#c63ea927c029dd6bd9a2b7fa03b3fec02ad56e9f" - -space-separated-tokens@^1.0.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/space-separated-tokens/-/space-separated-tokens-1.1.2.tgz#e95ab9d19ae841e200808cd96bc7bd0adbbb3412" - dependencies: - trim "0.0.1" - -spdx-correct@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.0.tgz#fb83e504445268f154b074e218c87c003cd31df4" - dependencies: - spdx-expression-parse "^3.0.0" - spdx-license-ids "^3.0.0" - -spdx-exceptions@^2.1.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz#2ea450aee74f2a89bfb94519c07fcd6f41322977" - -spdx-expression-parse@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz#99e119b7a5da00e05491c9fa338b7904823b41d0" - dependencies: - spdx-exceptions "^2.1.0" - spdx-license-ids "^3.0.0" - -spdx-license-ids@^3.0.0: - version "3.0.2" - resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.2.tgz#a59efc09784c2a5bada13cfeaf5c75dd214044d2" - -spdy-transport@^2.0.18: - version "2.1.1" - resolved "https://registry.yarnpkg.com/spdy-transport/-/spdy-transport-2.1.1.tgz#c54815d73858aadd06ce63001e7d25fa6441623b" - dependencies: - debug "^2.6.8" - detect-node "^2.0.3" - hpack.js "^2.1.6" - obuf "^1.1.1" - readable-stream "^2.2.9" - safe-buffer "^5.0.1" - wbuf "^1.7.2" - -spdy@^3.4.1: - version "3.4.7" - resolved "https://registry.yarnpkg.com/spdy/-/spdy-3.4.7.tgz#42ff41ece5cc0f99a3a6c28aabb73f5c3b03acbc" - dependencies: - debug "^2.6.8" - handle-thing "^1.2.5" - http-deceiver "^1.2.7" - safe-buffer "^5.0.1" - select-hose "^2.0.0" - spdy-transport "^2.0.18" - -specificity@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/specificity/-/specificity-0.4.1.tgz#aab5e645012db08ba182e151165738d00887b019" - -split-string@^3.0.1, split-string@^3.0.2: - version "3.1.0" - resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" - dependencies: - extend-shallow "^3.0.0" - -sprintf-js@~1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" - -sshpk@^1.7.0: - version "1.15.2" - resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.15.2.tgz#c946d6bd9b1a39d0e8635763f5242d6ed6dcb629" - dependencies: - asn1 "~0.2.3" - assert-plus "^1.0.0" - bcrypt-pbkdf "^1.0.0" - dashdash "^1.12.0" - ecc-jsbn "~0.1.1" - getpass "^0.1.1" - jsbn "~0.1.0" - safer-buffer "^2.0.2" - tweetnacl "~0.14.0" - -ssri@^5.2.4: - version "5.3.0" - resolved "https://registry.yarnpkg.com/ssri/-/ssri-5.3.0.tgz#ba3872c9c6d33a0704a7d71ff045e5ec48999d06" - dependencies: - safe-buffer "^5.1.1" - -ssri@^6.0.0: - version "6.0.1" - resolved "https://registry.yarnpkg.com/ssri/-/ssri-6.0.1.tgz#2a3c41b28dd45b62b63676ecb74001265ae9edd8" - dependencies: - figgy-pudding "^3.5.1" - -stable@~0.1.6: - version "0.1.8" - resolved "https://registry.yarnpkg.com/stable/-/stable-0.1.8.tgz#836eb3c8382fe2936feaf544631017ce7d47a3cf" - -stack-utils@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-1.0.2.tgz#33eba3897788558bebfc2db059dc158ec36cebb8" - -staged-git-files@1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/staged-git-files/-/staged-git-files-1.1.2.tgz#4326d33886dc9ecfa29a6193bf511ba90a46454b" - -state-toggle@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/state-toggle/-/state-toggle-1.0.1.tgz#c3cb0974f40a6a0f8e905b96789eb41afa1cde3a" - -static-extend@^0.1.1: - version "0.1.2" - resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" - dependencies: - define-property "^0.2.5" - object-copy "^0.1.0" - -"statuses@>= 1.4.0 < 2": - version "1.5.0" - resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" - -statuses@~1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.4.0.tgz#bb73d446da2796106efcc1b601a253d6c46bd087" - -stealthy-require@^1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/stealthy-require/-/stealthy-require-1.1.1.tgz#35b09875b4ff49f26a777e509b3090a3226bf24b" - -stream-browserify@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.1.tgz#66266ee5f9bdb9940a4e4514cafb43bb71e5c9db" - 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" - 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" - dependencies: - 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" - -strict-uri-encode@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713" - -string-argv@^0.0.2: - version "0.0.2" - resolved "https://registry.yarnpkg.com/string-argv/-/string-argv-0.0.2.tgz#dac30408690c21f3c3630a3ff3a05877bdcbd736" - -string-hash@^1.1.1: - version "1.1.3" - resolved "https://registry.yarnpkg.com/string-hash/-/string-hash-1.1.3.tgz#e8aafc0ac1855b4666929ed7dd1275df5d6c811b" - -string-length@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/string-length/-/string-length-2.0.0.tgz#d40dbb686a3ace960c1cffca562bf2c45f8363ed" - dependencies: - astral-regex "^1.0.0" - strip-ansi "^4.0.0" - -string-range@~1.2, string-range@~1.2.1: - version "1.2.2" - resolved "https://registry.yarnpkg.com/string-range/-/string-range-1.2.2.tgz#a893ed347e72299bc83befbbf2a692a8d239d5dd" - -string-width@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" - dependencies: - code-point-at "^1.0.0" - is-fullwidth-code-point "^1.0.0" - strip-ansi "^3.0.0" - -"string-width@^1.0.2 || 2", string-width@^2.0.0, string-width@^2.1.0, string-width@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" - dependencies: - is-fullwidth-code-point "^2.0.0" - strip-ansi "^4.0.0" - -string_decoder@^1.0.0, string_decoder@^1.1.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.2.0.tgz#fe86e738b19544afe70469243b2a1ee9240eae8d" - dependencies: - safe-buffer "~5.1.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.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" - dependencies: - safe-buffer "~5.1.0" - -stringify-entities@^1.0.1: - version "1.3.2" - resolved "https://registry.yarnpkg.com/stringify-entities/-/stringify-entities-1.3.2.tgz#a98417e5471fd227b3e45d3db1861c11caf668f7" - dependencies: - character-entities-html4 "^1.0.0" - character-entities-legacy "^1.0.0" - is-alphanumerical "^1.0.0" - is-hexadecimal "^1.0.0" - -stringify-object@^3.2.2: - version "3.3.0" - resolved "https://registry.yarnpkg.com/stringify-object/-/stringify-object-3.3.0.tgz#703065aefca19300d3ce88af4f5b3956d7556629" - dependencies: - get-own-enumerable-property-symbols "^3.0.0" - is-obj "^1.0.1" - is-regexp "^1.0.0" - -strip-ansi@4.0.0, strip-ansi@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" - dependencies: - ansi-regex "^3.0.0" - -strip-ansi@^3.0.0, strip-ansi@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" - dependencies: - ansi-regex "^2.0.0" - -strip-ansi@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.0.0.tgz#f78f68b5d0866c20b2c9b8c61b5298508dc8756f" - dependencies: - ansi-regex "^4.0.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" - -strip-comments@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/strip-comments/-/strip-comments-1.0.2.tgz#82b9c45e7f05873bee53f37168af930aa368679d" - dependencies: - babel-extract-comments "^1.0.0" - babel-plugin-transform-object-rest-spread "^6.26.0" - -strip-eof@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" - -strip-indent@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-2.0.0.tgz#5ef8db295d01e6ed6cbf7aab96998d7822527b68" - -strip-json-comments@^2.0.1, strip-json-comments@~2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" - -strip-outer@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/strip-outer/-/strip-outer-1.0.1.tgz#b2fd2abf6604b9d1e6013057195df836b8a9d631" - dependencies: - escape-string-regexp "^1.0.2" - -strip-url-auth@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/strip-url-auth/-/strip-url-auth-1.0.1.tgz#22b0fa3a41385b33be3f331551bbb837fa0cd7ae" - -style-inject@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/style-inject/-/style-inject-0.3.0.tgz#d21c477affec91811cc82355832a700d22bf8dd3" - -style-loader@0.23.0: - version "0.23.0" - resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-0.23.0.tgz#8377fefab68416a2e05f1cabd8c3a3acfcce74f1" - dependencies: - loader-utils "^1.1.0" - schema-utils "^0.4.5" - -style-search@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/style-search/-/style-search-0.1.0.tgz#7958c793e47e32e07d2b5cafe5c0bf8e12e77902" - -stylehacks@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/stylehacks/-/stylehacks-4.0.1.tgz#3186595d047ab0df813d213e51c8b94e0b9010f2" - dependencies: - browserslist "^4.0.0" - postcss "^7.0.0" - postcss-selector-parser "^3.0.0" - -stylelint-config-recommended@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/stylelint-config-recommended/-/stylelint-config-recommended-2.1.0.tgz#f526d5c771c6811186d9eaedbed02195fee30858" - -stylelint@^9.9.0: - version "9.9.0" - resolved "https://registry.yarnpkg.com/stylelint/-/stylelint-9.9.0.tgz#dde466e9b049e0bd30e912ad280f1a2ecf6efdf8" - dependencies: - autoprefixer "^9.0.0" - balanced-match "^1.0.0" - chalk "^2.4.1" - cosmiconfig "^5.0.0" - debug "^4.0.0" - execall "^1.0.0" - file-entry-cache "^2.0.0" - get-stdin "^6.0.0" - global-modules "^1.0.0" - globby "^8.0.0" - globjoin "^0.1.4" - html-tags "^2.0.0" - ignore "^5.0.4" - import-lazy "^3.1.0" - imurmurhash "^0.1.4" - known-css-properties "^0.10.0" - leven "^2.1.0" - lodash "^4.17.4" - log-symbols "^2.0.0" - mathml-tag-names "^2.0.1" - meow "^5.0.0" - micromatch "^3.1.10" - normalize-selector "^0.2.0" - pify "^4.0.0" - postcss "^7.0.0" - postcss-html "^0.34.0" - postcss-jsx "^0.35.0" - postcss-less "^3.1.0" - postcss-markdown "^0.34.0" - postcss-media-query-parser "^0.2.3" - postcss-reporter "^6.0.0" - postcss-resolve-nested-selector "^0.1.1" - postcss-safe-parser "^4.0.0" - postcss-sass "^0.3.5" - postcss-scss "^2.0.0" - postcss-selector-parser "^3.1.0" - postcss-styled "^0.34.0" - postcss-syntax "^0.34.0" - postcss-value-parser "^3.3.0" - resolve-from "^4.0.0" - signal-exit "^3.0.2" - slash "^2.0.0" - specificity "^0.4.1" - string-width "^2.1.0" - style-search "^0.1.0" - sugarss "^2.0.0" - svg-tags "^1.0.0" - table "^5.0.0" - -stylus@^0.54.5: - version "0.54.5" - resolved "https://registry.yarnpkg.com/stylus/-/stylus-0.54.5.tgz#42b9560931ca7090ce8515a798ba9e6aa3d6dc79" - dependencies: - css-parse "1.7.x" - debug "*" - glob "7.0.x" - mkdirp "0.5.x" - sax "0.5.x" - source-map "0.1.x" - -sugarss@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/sugarss/-/sugarss-2.0.0.tgz#ddd76e0124b297d40bf3cca31c8b22ecb43bc61d" - dependencies: - postcss "^7.0.2" - -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, supports-color@^3.2.3: - 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.1.0, supports-color@^5.3.0, supports-color@^5.4.0, supports-color@^5.5.0: - version "5.5.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" - dependencies: - has-flag "^3.0.0" - -svg-tags@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/svg-tags/-/svg-tags-1.0.0.tgz#58f71cee3bd519b59d4b2a843b6c7de64ac04764" - -svgo@^0.7.0: - version "0.7.2" - resolved "https://registry.yarnpkg.com/svgo/-/svgo-0.7.2.tgz#9f5772413952135c6fefbf40afe6a4faa88b4bb5" - dependencies: - coa "~1.0.1" - colors "~1.1.2" - csso "~2.3.1" - js-yaml "~3.7.0" - mkdirp "~0.5.1" - sax "~1.2.1" - whet.extend "~0.9.9" - -svgo@^1.0.0, svgo@^1.0.5, svgo@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/svgo/-/svgo-1.1.1.tgz#12384b03335bcecd85cfa5f4e3375fed671cb985" - dependencies: - coa "~2.0.1" - colors "~1.1.2" - css-select "^2.0.0" - css-select-base-adapter "~0.1.0" - css-tree "1.0.0-alpha.28" - css-url-regex "^1.1.0" - csso "^3.5.0" - js-yaml "^3.12.0" - mkdirp "~0.5.1" - object.values "^1.0.4" - sax "~1.2.4" - stable "~0.1.6" - unquote "~1.1.1" - util.promisify "~1.0.0" - -symbol-observable@^1.1.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.2.0.tgz#c22688aed4eab3cdc2dfeacbb561660560a00804" - -symbol-tree@^3.2.2: - version "3.2.2" - resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.2.tgz#ae27db38f660a7ae2e1c3b7d1bc290819b8519e6" - -table@^4.0.3: - version "4.0.3" - resolved "https://registry.yarnpkg.com/table/-/table-4.0.3.tgz#00b5e2b602f1794b9acaf9ca908a76386a7813bc" - dependencies: - ajv "^6.0.1" - ajv-keywords "^3.0.0" - chalk "^2.1.0" - lodash "^4.17.4" - slice-ansi "1.0.0" - string-width "^2.1.1" - -table@^5.0.0: - version "5.1.1" - resolved "https://registry.yarnpkg.com/table/-/table-5.1.1.tgz#92030192f1b7b51b6eeab23ed416862e47b70837" - dependencies: - ajv "^6.6.1" - lodash "^4.17.11" - slice-ansi "2.0.0" - string-width "^2.1.1" - -tapable@^1.0.0, tapable@^1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.1.tgz#4d297923c5a72a42360de2ab52dadfaaec00018e" - -tar@^4: - version "4.4.8" - resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.8.tgz#b19eec3fde2a96e64666df9fdb40c5ca1bc3747d" - 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.1.0" - resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-1.1.0.tgz#cf7c25a1eee25bf121f4a587bb9e004e3f80e528" - dependencies: - cacache "^11.0.2" - find-cache-dir "^2.0.0" - schema-utils "^1.0.0" - serialize-javascript "^1.4.0" - source-map "^0.6.1" - terser "^3.8.1" - webpack-sources "^1.1.0" - worker-farm "^1.5.2" - -terser@^3.8.1: - version "3.11.0" - resolved "https://registry.yarnpkg.com/terser/-/terser-3.11.0.tgz#60782893e1f4d6788acc696351f40636d0e37af0" - dependencies: - commander "~2.17.1" - source-map "~0.6.1" - source-map-support "~0.5.6" - -test-exclude@^4.2.1: - version "4.2.3" - resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-4.2.3.tgz#a9a5e64474e4398339245a0a769ad7c2f4a97c20" - dependencies: - arrify "^1.0.1" - micromatch "^2.3.11" - object-assign "^4.1.0" - read-pkg-up "^1.0.1" - require-main-filename "^1.0.1" - -text-table@0.2.0, text-table@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" - -throat@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/throat/-/throat-4.1.0.tgz#89037cbc92c56ab18926e6ba4cbb200e15672a6a" - -through2@^2.0.0: - version "2.0.5" - resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" - dependencies: - readable-stream "~2.3.6" - xtend "~4.0.1" - -through@^2.3.6: - version "2.3.8" - resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" - -thunky@^1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/thunky/-/thunky-1.0.3.tgz#f5df732453407b09191dae73e2a8cc73f381a826" - -timers-browserify@^2.0.4: - version "2.0.10" - resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.10.tgz#1d28e3d2aadf1d5a5996c4e9f95601cd053480ae" - dependencies: - setimmediate "^1.0.4" - -timsort@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/timsort/-/timsort-0.3.0.tgz#405411a8e7e6339fe64db9a234de11dc31e02bd4" - -tmp@^0.0.33: - version "0.0.33" - resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" - dependencies: - os-tmpdir "~1.0.2" - -tmpl@1.0.x: - version "1.0.4" - resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.4.tgz#23640dd7b42d00433911140820e5cf440e521dd1" - -to-arraybuffer@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43" - -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" - -to-object-path@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" - dependencies: - kind-of "^3.0.2" - -to-regex-range@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38" - dependencies: - is-number "^3.0.0" - repeat-string "^1.6.1" - -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" - dependencies: - define-property "^2.0.2" - extend-shallow "^3.0.2" - regex-not "^1.0.2" - safe-regex "^1.1.0" - -topo@2.x.x: - version "2.0.2" - resolved "https://registry.yarnpkg.com/topo/-/topo-2.0.2.tgz#cd5615752539057c0dc0491a621c3bc6fbe1d182" - dependencies: - hoek "4.x.x" - -tough-cookie@>=2.3.3, tough-cookie@^2.3.4, tough-cookie@^2.4.3: - version "2.5.0" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2" - dependencies: - psl "^1.1.28" - punycode "^2.1.1" - -tough-cookie@~2.4.3: - version "2.4.3" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.4.3.tgz#53f36da3f47783b0925afa06ff9f3b165280f781" - dependencies: - psl "^1.1.24" - punycode "^1.4.1" - -tr46@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/tr46/-/tr46-1.0.1.tgz#a8b13fd6bfd2489519674ccde55ba3693b706d09" - dependencies: - punycode "^2.1.0" - -trim-newlines@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-2.0.0.tgz#b403d0b91be50c331dfc4b82eeceb22c3de16d20" - -trim-repeated@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/trim-repeated/-/trim-repeated-1.0.0.tgz#e3646a2ea4e891312bf7eace6cfb05380bc01c21" - dependencies: - escape-string-regexp "^1.0.2" - -trim-right@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003" - -trim-trailing-lines@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/trim-trailing-lines/-/trim-trailing-lines-1.1.1.tgz#e0ec0810fd3c3f1730516b45f49083caaf2774d9" - -trim@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/trim/-/trim-0.0.1.tgz#5858547f6b290757ee95cccc666fb50084c460dd" - -trough@^1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/trough/-/trough-1.0.3.tgz#e29bd1614c6458d44869fc28b255ab7857ef7c24" - -tryer@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/tryer/-/tryer-1.0.1.tgz#f2c85406800b9b0f74c9f7465b81eaad241252f8" - -tslib@^1.9.0: - version "1.9.3" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.9.3.tgz#d7e4dd79245d85428c4d7e4822a79917954ca286" - -tty-browserify@0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6" - -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" - -tweetnacl@^0.14.3, tweetnacl@~0.14.0: - version "0.14.5" - resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" - -type-check@~0.3.2: - version "0.3.2" - resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" - dependencies: - prelude-ls "~1.1.2" - -type-is@~1.6.16: - version "1.6.16" - resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.16.tgz#f89ce341541c672b25ee7ae3c73dee3b2be50194" - dependencies: - media-typer "0.3.0" - mime-types "~2.1.18" - -typedarray-to-buffer@~1.0.0: - version "1.0.4" - resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-1.0.4.tgz#9bb8ba0e841fb3f4cf1fe7c245e9f3fa8a5fe99c" - -typedarray@^0.0.6: - version "0.0.6" - resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" - -uglify-es@^3.3.4: - version "3.3.9" - resolved "https://registry.yarnpkg.com/uglify-es/-/uglify-es-3.3.9.tgz#0c1c4f0700bed8dbc124cdb304d2592ca203e677" - dependencies: - commander "~2.13.0" - source-map "~0.6.1" - -uglify-js@3.4.x: - version "3.4.9" - resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.4.9.tgz#af02f180c1207d76432e473ed24a28f4a782bae3" - dependencies: - 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" - dependencies: - cacache "^10.0.4" - find-cache-dir "^1.0.0" - schema-utils "^0.4.5" - serialize-javascript "^1.4.0" - source-map "^0.6.1" - uglify-es "^3.3.4" - webpack-sources "^1.1.0" - worker-farm "^1.5.2" - -unherit@^1.0.4: - version "1.1.1" - resolved "https://registry.yarnpkg.com/unherit/-/unherit-1.1.1.tgz#132748da3e88eab767e08fabfbb89c5e9d28628c" - dependencies: - inherits "^2.0.1" - xtend "^4.0.1" - -unicode-canonical-property-names-ecmascript@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz#2619800c4c825800efdd8343af7dd9933cbe2818" - -unicode-match-property-ecmascript@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz#8ed2a32569961bce9227d09cd3ffbb8fed5f020c" - dependencies: - unicode-canonical-property-names-ecmascript "^1.0.4" - unicode-property-aliases-ecmascript "^1.0.4" - -unicode-match-property-value-ecmascript@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.0.2.tgz#9f1dc76926d6ccf452310564fd834ace059663d4" - -unicode-property-aliases-ecmascript@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.0.4.tgz#5a533f31b4317ea76f17d807fa0d116546111dd0" - -unified@^6.0.0: - version "6.2.0" - resolved "https://registry.yarnpkg.com/unified/-/unified-6.2.0.tgz#7fbd630f719126d67d40c644b7e3f617035f6dba" - dependencies: - bail "^1.0.0" - extend "^3.0.0" - is-plain-obj "^1.1.0" - trough "^1.0.0" - vfile "^2.0.0" - x-is-string "^0.1.0" - -unified@^7.0.2: - version "7.0.2" - resolved "https://registry.yarnpkg.com/unified/-/unified-7.0.2.tgz#16aa2748a7c936b80846cc69c580cd5ebd844532" - dependencies: - bail "^1.0.0" - extend "^3.0.0" - is-plain-obj "^1.1.0" - trough "^1.0.0" - vfile "^3.0.0" - x-is-string "^0.1.0" - -union-value@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.0.tgz#5c71c34cb5bad5dcebe3ea0cd08207ba5aa1aea4" - dependencies: - arr-union "^3.1.0" - get-value "^2.0.6" - is-extendable "^0.1.1" - set-value "^0.4.3" - -uniq@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/uniq/-/uniq-1.0.1.tgz#b31c5ae8254844a3a8281541ce2b04b865a734ff" - -uniqs@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/uniqs/-/uniqs-2.0.0.tgz#ffede4b36b25290696e6e165d4a59edb998e6b02" - -unique-filename@^1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-1.1.1.tgz#1d69769369ada0583103a1e6ae87681b56573230" - dependencies: - unique-slug "^2.0.0" - -unique-slug@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-2.0.1.tgz#5e9edc6d1ce8fb264db18a507ef9bd8544451ca6" - dependencies: - imurmurhash "^0.1.4" - -unist-util-find-all-after@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/unist-util-find-all-after/-/unist-util-find-all-after-1.0.2.tgz#9be49cfbae5ca1566b27536670a92836bf2f8d6d" - dependencies: - unist-util-is "^2.0.0" - -unist-util-is@^2.0.0, unist-util-is@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/unist-util-is/-/unist-util-is-2.1.2.tgz#1193fa8f2bfbbb82150633f3a8d2eb9a1c1d55db" - -unist-util-remove-position@^1.0.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/unist-util-remove-position/-/unist-util-remove-position-1.1.2.tgz#86b5dad104d0bbfbeb1db5f5c92f3570575c12cb" - dependencies: - unist-util-visit "^1.1.0" - -unist-util-stringify-position@^1.0.0, unist-util-stringify-position@^1.1.1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/unist-util-stringify-position/-/unist-util-stringify-position-1.1.2.tgz#3f37fcf351279dcbca7480ab5889bb8a832ee1c6" - -unist-util-visit-parents@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/unist-util-visit-parents/-/unist-util-visit-parents-2.0.1.tgz#63fffc8929027bee04bfef7d2cce474f71cb6217" - dependencies: - unist-util-is "^2.1.2" - -unist-util-visit@^1.1.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/unist-util-visit/-/unist-util-visit-1.4.0.tgz#1cb763647186dc26f5e1df5db6bd1e48b3cc2fb1" - dependencies: - unist-util-visit-parents "^2.0.0" - -universalify@^0.1.0: - version "0.1.2" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" - -unpipe@1.0.0, unpipe@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" - -unquote@~1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/unquote/-/unquote-1.1.1.tgz#8fded7324ec6e88a0ff8b905e7c098cdc086d544" - -unset-value@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" - dependencies: - has-value "^0.3.1" - isobject "^3.0.0" - -upath@^1.0.5: - version "1.1.0" - resolved "https://registry.yarnpkg.com/upath/-/upath-1.1.0.tgz#35256597e46a581db4793d0ce47fa9aebfc9fabd" - -upper-case@^1.1.1: - version "1.1.3" - resolved "https://registry.yarnpkg.com/upper-case/-/upper-case-1.1.3.tgz#f6b4501c2ec4cdd26ba78be7222961de77621598" - -uri-js@^4.2.2: - version "4.2.2" - resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0" - 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-loader@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/url-loader/-/url-loader-1.1.1.tgz#4d1f3b4f90dde89f02c008e662d604d7511167c1" - dependencies: - loader-utils "^1.1.0" - mime "^2.0.3" - schema-utils "^1.0.0" - -url-parse@^1.1.8, url-parse@^1.4.3: - version "1.4.4" - resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.4.4.tgz#cac1556e95faa0303691fec5cf9d5a1bc34648f8" - dependencies: - querystringify "^2.0.0" - requires-port "^1.0.0" - -url@^0.11.0: - version "0.11.0" - resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1" - dependencies: - punycode "1.3.2" - querystring "0.2.0" - -use@^3.1.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" - -util-deprecate@^1.0.1, util-deprecate@~1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" - -util.promisify@1.0.0, util.promisify@^1.0.0, util.promisify@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.0.0.tgz#440f7165a459c9a16dc145eb8e72f35687097030" - dependencies: - define-properties "^1.1.2" - object.getownpropertydescriptors "^2.0.3" - -util@0.10.3: - version "0.10.3" - resolved "https://registry.yarnpkg.com/util/-/util-0.10.3.tgz#7afb1afe50805246489e3db7fe0ed379336ac0f9" - dependencies: - inherits "2.0.1" - -util@^0.10.3: - version "0.10.4" - resolved "https://registry.yarnpkg.com/util/-/util-0.10.4.tgz#3aa0125bfe668a4672de58857d3ace27ecb76901" - dependencies: - inherits "2.0.3" - -utila@^0.4.0, utila@~0.4: - version "0.4.0" - resolved "https://registry.yarnpkg.com/utila/-/utila-0.4.0.tgz#8a16a05d445657a3aea5eecc5b12a4fa5379772c" - -utils-merge@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" - -uuid@^3.0.1, uuid@^3.3.2: - version "3.3.2" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.2.tgz#1b4af4955eb3077c501c23872fc6513811587131" - -validate-npm-package-license@^3.0.1: - version "3.0.4" - resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" - dependencies: - spdx-correct "^3.0.0" - spdx-expression-parse "^3.0.0" - -vary@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" - -vendors@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/vendors/-/vendors-1.0.2.tgz#7fcb5eef9f5623b156bcea89ec37d63676f21801" - -verror@1.10.0: - version "1.10.0" - resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" - dependencies: - assert-plus "^1.0.0" - core-util-is "1.0.2" - extsprintf "^1.2.0" - -vfile-location@^2.0.0: - version "2.0.4" - resolved "https://registry.yarnpkg.com/vfile-location/-/vfile-location-2.0.4.tgz#2a5e7297dd0d9e2da4381464d04acc6b834d3e55" - -vfile-message@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/vfile-message/-/vfile-message-1.0.2.tgz#0f8a62584c5dff0f81760531b8e34f3cea554ebc" - dependencies: - unist-util-stringify-position "^1.1.1" - -vfile@^2.0.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/vfile/-/vfile-2.3.0.tgz#e62d8e72b20e83c324bc6c67278ee272488bf84a" - dependencies: - is-buffer "^1.1.4" - replace-ext "1.0.0" - unist-util-stringify-position "^1.0.0" - vfile-message "^1.0.0" - -vfile@^3.0.0, vfile@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/vfile/-/vfile-3.0.1.tgz#47331d2abe3282424f4a4bb6acd20a44c4121803" - dependencies: - is-buffer "^2.0.0" - replace-ext "1.0.0" - unist-util-stringify-position "^1.0.0" - vfile-message "^1.0.0" - -vm-browserify@0.0.4: - version "0.0.4" - resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-0.0.4.tgz#5d7ea45bbef9e4a6ff65f95438e0a87c357d5a73" - dependencies: - indexof "0.0.1" - -w3c-hr-time@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/w3c-hr-time/-/w3c-hr-time-1.0.1.tgz#82ac2bff63d950ea9e3189a58a65625fedf19045" - dependencies: - browser-process-hrtime "^0.1.2" - -w3c-xmlserializer@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/w3c-xmlserializer/-/w3c-xmlserializer-1.0.0.tgz#d23e20de595b892056f20a359fc2622908d48695" - dependencies: - domexception "^1.0.1" - webidl-conversions "^4.0.2" - xml-name-validator "^3.0.0" - -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" - dependencies: - exec-sh "^0.2.0" - minimist "^1.2.0" - -watchpack@^1.5.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.6.0.tgz#4bc12c2ebe8aa277a71f1d3f14d685c7b446cd00" - dependencies: - chokidar "^2.0.2" - graceful-fs "^4.1.2" - neo-async "^2.5.0" - -wbuf@^1.1.0, wbuf@^1.7.2: - version "1.7.3" - resolved "https://registry.yarnpkg.com/wbuf/-/wbuf-1.7.3.tgz#c1d8d149316d3ea852848895cb6a0bfe887b87df" - dependencies: - minimalistic-assert "^1.0.0" - -web-namespaces@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/web-namespaces/-/web-namespaces-1.1.2.tgz#c8dc267ab639505276bae19e129dbd6ae72b22b4" - -webidl-conversions@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad" - -webpack-dev-middleware@3.4.0: - version "3.4.0" - resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-3.4.0.tgz#1132fecc9026fd90f0ecedac5cbff75d1fb45890" - dependencies: - memory-fs "~0.4.1" - mime "^2.3.1" - range-parser "^1.0.3" - webpack-log "^2.0.0" - -webpack-dev-server@3.1.9: - version "3.1.9" - resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-3.1.9.tgz#8b32167624d2faff40dcedc2cbce17ed1f34d3e0" - dependencies: - ansi-html "0.0.7" - bonjour "^3.5.0" - chokidar "^2.0.0" - compression "^1.5.2" - connect-history-api-fallback "^1.3.0" - debug "^3.1.0" - del "^3.0.0" - express "^4.16.2" - html-entities "^1.2.0" - http-proxy-middleware "~0.18.0" - import-local "^2.0.0" - internal-ip "^3.0.1" - ip "^1.1.5" - killable "^1.0.0" - loglevel "^1.4.1" - opn "^5.1.0" - portfinder "^1.0.9" - schema-utils "^1.0.0" - selfsigned "^1.9.1" - serve-index "^1.7.2" - sockjs "0.3.19" - sockjs-client "1.1.5" - spdy "^3.4.1" - strip-ansi "^3.0.0" - supports-color "^5.1.0" - webpack-dev-middleware "3.4.0" - webpack-log "^2.0.0" - yargs "12.0.2" - -webpack-log@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/webpack-log/-/webpack-log-2.0.0.tgz#5b7928e0637593f119d32f6227c1e0ac31e1b47f" - dependencies: - ansi-colors "^3.0.0" - uuid "^3.3.2" - -webpack-manifest-plugin@2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/webpack-manifest-plugin/-/webpack-manifest-plugin-2.0.4.tgz#e4ca2999b09557716b8ba4475fb79fab5986f0cd" - dependencies: - fs-extra "^7.0.0" - lodash ">=3.5 <5" - tapable "^1.0.0" - -webpack-sources@^1.1.0, webpack-sources@^1.2.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.3.0.tgz#2a28dcb9f1f45fe960d8f1493252b5ee6530fa85" - dependencies: - source-list-map "^2.0.0" - source-map "~0.6.1" - -webpack@4.19.1: - version "4.19.1" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.19.1.tgz#096674bc3b573f8756c762754366e5b333d6576f" - dependencies: - "@webassemblyjs/ast" "1.7.6" - "@webassemblyjs/helper-module-context" "1.7.6" - "@webassemblyjs/wasm-edit" "1.7.6" - "@webassemblyjs/wasm-parser" "1.7.6" - acorn "^5.6.2" - acorn-dynamic-import "^3.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 "^0.4.4" - tapable "^1.1.0" - uglifyjs-webpack-plugin "^1.2.4" - watchpack "^1.5.0" - webpack-sources "^1.2.0" - -websocket-driver@>=0.5.1: - version "0.7.0" - resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.7.0.tgz#0caf9d2d755d93aee049d4bdd0d3fe2cca2a24eb" - dependencies: - http-parser-js ">=0.4.0" - websocket-extensions ">=0.1.1" - -websocket-extensions@>=0.1.1: - version "0.1.3" - resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.3.tgz#5d2ff22977003ec687a4b87073dfbbac146ccf29" - -whatwg-encoding@^1.0.1, whatwg-encoding@^1.0.3, whatwg-encoding@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz#5abacf777c32166a51d085d6b4f3e7d27113ddb0" - dependencies: - iconv-lite "0.4.24" - -whatwg-fetch@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-3.0.0.tgz#fc804e458cc460009b1a2b966bc8817d2578aefb" - -whatwg-mimetype@^2.1.0, whatwg-mimetype@^2.2.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz#3d4b1e0312d2079879f826aff18dbeeca5960fbf" - -whatwg-url@^6.4.1: - version "6.5.0" - resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-6.5.0.tgz#f2df02bff176fd65070df74ad5ccbb5a199965a8" - dependencies: - lodash.sortby "^4.7.0" - tr46 "^1.0.1" - webidl-conversions "^4.0.2" - -whatwg-url@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-7.0.0.tgz#fde926fa54a599f3adf82dff25a9f7be02dc6edd" - dependencies: - lodash.sortby "^4.7.0" - tr46 "^1.0.1" - webidl-conversions "^4.0.2" - -whet.extend@~0.9.9: - version "0.9.9" - resolved "https://registry.yarnpkg.com/whet.extend/-/whet.extend-0.9.9.tgz#f877d5bf648c97e5aa542fadc16d6a259b9c11a1" - -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.14, which@^1.2.9, which@^1.3.0: - version "1.3.1" - resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" - dependencies: - isexe "^2.0.0" - -wide-align@^1.1.0: - version "1.1.3" - resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457" - dependencies: - string-width "^1.0.2 || 2" - -wordwrap@~0.0.2: - version "0.0.3" - resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107" - integrity sha1-o9XabNXAvAAI03I0u68b7WMFkQc= - -wordwrap@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" - -workbox-background-sync@^3.6.3: - version "3.6.3" - resolved "https://registry.yarnpkg.com/workbox-background-sync/-/workbox-background-sync-3.6.3.tgz#6609a0fac9eda336a7c52e6aa227ba2ae532ad94" - dependencies: - workbox-core "^3.6.3" - -workbox-broadcast-cache-update@^3.6.3: - version "3.6.3" - resolved "https://registry.yarnpkg.com/workbox-broadcast-cache-update/-/workbox-broadcast-cache-update-3.6.3.tgz#3f5dff22ada8c93e397fb38c1dc100606a7b92da" - dependencies: - workbox-core "^3.6.3" - -workbox-build@^3.6.3: - version "3.6.3" - resolved "https://registry.yarnpkg.com/workbox-build/-/workbox-build-3.6.3.tgz#77110f9f52dc5d82fa6c1c384c6f5e2225adcbd8" - dependencies: - babel-runtime "^6.26.0" - common-tags "^1.4.0" - fs-extra "^4.0.2" - glob "^7.1.2" - joi "^11.1.1" - lodash.template "^4.4.0" - pretty-bytes "^4.0.2" - stringify-object "^3.2.2" - strip-comments "^1.0.2" - workbox-background-sync "^3.6.3" - workbox-broadcast-cache-update "^3.6.3" - workbox-cache-expiration "^3.6.3" - workbox-cacheable-response "^3.6.3" - workbox-core "^3.6.3" - workbox-google-analytics "^3.6.3" - workbox-navigation-preload "^3.6.3" - workbox-precaching "^3.6.3" - workbox-range-requests "^3.6.3" - workbox-routing "^3.6.3" - workbox-strategies "^3.6.3" - workbox-streams "^3.6.3" - workbox-sw "^3.6.3" - -workbox-cache-expiration@^3.6.3: - version "3.6.3" - resolved "https://registry.yarnpkg.com/workbox-cache-expiration/-/workbox-cache-expiration-3.6.3.tgz#4819697254a72098a13f94b594325a28a1e90372" - dependencies: - workbox-core "^3.6.3" - -workbox-cacheable-response@^3.6.3: - version "3.6.3" - resolved "https://registry.yarnpkg.com/workbox-cacheable-response/-/workbox-cacheable-response-3.6.3.tgz#869f1a68fce9063f6869ddbf7fa0a2e0a868b3aa" - dependencies: - workbox-core "^3.6.3" - -workbox-core@^3.6.3: - version "3.6.3" - resolved "https://registry.yarnpkg.com/workbox-core/-/workbox-core-3.6.3.tgz#69abba70a4f3f2a5c059295a6f3b7c62bd00e15c" - -workbox-google-analytics@^3.6.3: - version "3.6.3" - resolved "https://registry.yarnpkg.com/workbox-google-analytics/-/workbox-google-analytics-3.6.3.tgz#99df2a3d70d6e91961e18a6752bac12e91fbf727" - dependencies: - workbox-background-sync "^3.6.3" - workbox-core "^3.6.3" - workbox-routing "^3.6.3" - workbox-strategies "^3.6.3" - -workbox-navigation-preload@^3.6.3: - version "3.6.3" - resolved "https://registry.yarnpkg.com/workbox-navigation-preload/-/workbox-navigation-preload-3.6.3.tgz#a2c34eb7c17e7485b795125091215f757b3c4964" - dependencies: - workbox-core "^3.6.3" - -workbox-precaching@^3.6.3: - version "3.6.3" - resolved "https://registry.yarnpkg.com/workbox-precaching/-/workbox-precaching-3.6.3.tgz#5341515e9d5872c58ede026a31e19bafafa4e1c1" - dependencies: - workbox-core "^3.6.3" - -workbox-range-requests@^3.6.3: - version "3.6.3" - resolved "https://registry.yarnpkg.com/workbox-range-requests/-/workbox-range-requests-3.6.3.tgz#3cc21cba31f2dd8c43c52a196bcc8f6cdbcde803" - dependencies: - workbox-core "^3.6.3" - -workbox-routing@^3.6.3: - version "3.6.3" - resolved "https://registry.yarnpkg.com/workbox-routing/-/workbox-routing-3.6.3.tgz#659cd8f9274986cfa98fda0d050de6422075acf7" - dependencies: - workbox-core "^3.6.3" - -workbox-strategies@^3.6.3: - version "3.6.3" - resolved "https://registry.yarnpkg.com/workbox-strategies/-/workbox-strategies-3.6.3.tgz#11a0dc249a7bc23d3465ec1322d28fa6643d64a0" - dependencies: - workbox-core "^3.6.3" - -workbox-streams@^3.6.3: - version "3.6.3" - resolved "https://registry.yarnpkg.com/workbox-streams/-/workbox-streams-3.6.3.tgz#beaea5d5b230239836cc327b07d471aa6101955a" - dependencies: - workbox-core "^3.6.3" - -workbox-sw@^3.6.3: - version "3.6.3" - resolved "https://registry.yarnpkg.com/workbox-sw/-/workbox-sw-3.6.3.tgz#278ea4c1831b92bbe2d420da8399176c4b2789ff" - -workbox-webpack-plugin@3.6.3: - version "3.6.3" - resolved "https://registry.yarnpkg.com/workbox-webpack-plugin/-/workbox-webpack-plugin-3.6.3.tgz#a807bb891b4e4e3c808df07e58f17de2d5ba6182" - dependencies: - babel-runtime "^6.26.0" - json-stable-stringify "^1.0.1" - workbox-build "^3.6.3" - -worker-farm@^1.5.2: - version "1.6.0" - resolved "https://registry.yarnpkg.com/worker-farm/-/worker-farm-1.6.0.tgz#aecc405976fab5a95526180846f0dba288f3a4a0" - 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" - dependencies: - string-width "^1.0.1" - strip-ansi "^3.0.1" - -wrap-ansi@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-3.0.1.tgz#288a04d87eda5c286e060dfe8f135ce8d007f8ba" - dependencies: - string-width "^2.1.1" - strip-ansi "^4.0.0" - -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" - dependencies: - graceful-fs "^4.1.11" - imurmurhash "^0.1.4" - signal-exit "^3.0.2" - -write@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/write/-/write-0.2.1.tgz#5fc03828e264cea3fe91455476f7a3c566cb0757" - dependencies: - mkdirp "^0.5.1" - -ws@^5.2.0: - version "5.2.2" - resolved "https://registry.yarnpkg.com/ws/-/ws-5.2.2.tgz#dffef14866b8e8dc9133582514d1befaf96e980f" - dependencies: - async-limiter "~1.0.0" - -ws@^6.1.0: - version "6.1.2" - resolved "https://registry.yarnpkg.com/ws/-/ws-6.1.2.tgz#3cc7462e98792f0ac679424148903ded3b9c3ad8" - dependencies: - async-limiter "~1.0.0" - -x-is-string@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/x-is-string/-/x-is-string-0.1.0.tgz#474b50865af3a49a9c4657f05acd145458f77d82" - -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" - -xmlchars@^1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/xmlchars/-/xmlchars-1.3.1.tgz#1dda035f833dbb4f86a0c28eaa6ca769214793cf" - -xregexp@4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/xregexp/-/xregexp-4.0.0.tgz#e698189de49dd2a18cc5687b05e17c8e43943020" - -xtend@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/xtend/-/xtend-2.2.0.tgz#eef6b1f198c1c8deafad8b1765a04dad4a01c5a9" - -xtend@^4.0.0, xtend@^4.0.1, xtend@~4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af" - -xtend@~2.0.4: - version "2.0.6" - resolved "https://registry.yarnpkg.com/xtend/-/xtend-2.0.6.tgz#5ea657a6dba447069c2e59c58a1138cb0c5e6cee" - dependencies: - is-object "~0.1.2" - object-keys "~0.2.0" - -xtend@~2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/xtend/-/xtend-2.1.2.tgz#6efecc2a4dad8e6962c4901b337ce7ba87b5d28b" - dependencies: - object-keys "~0.4.0" - -xtend@~3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/xtend/-/xtend-3.0.0.tgz#5cce7407baf642cba7becda568111c493f59665a" - -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" - -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" - -yargs-parser@^10.0.0, yargs-parser@^10.1.0: - version "10.1.0" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-10.1.0.tgz#7202265b89f7e9e9f2e5765e0fe735a905edbaa8" - dependencies: - camelcase "^4.1.0" - -yargs-parser@^9.0.2: - version "9.0.2" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-9.0.2.tgz#9ccf6a43460fe4ed40a9bb68f48d43b8a68cc077" - dependencies: - camelcase "^4.1.0" - -yargs@12.0.2: - version "12.0.2" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-12.0.2.tgz#fe58234369392af33ecbef53819171eff0f5aadc" - dependencies: - cliui "^4.0.0" - decamelize "^2.0.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 "^10.1.0" - -yargs@^11.0.0: - version "11.1.0" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-11.1.0.tgz#90b869934ed6e871115ea2ff58b03f4724ed2d77" - dependencies: - cliui "^4.0.0" - decamelize "^1.1.1" - find-up "^2.1.0" - get-caller-file "^1.0.1" - os-locale "^2.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" - yargs-parser "^9.0.2" diff --git a/extensions/ohif-i18n/.babelrc b/extensions/ohif-i18n/.babelrc deleted file mode 100644 index 430b9904b69..00000000000 --- a/extensions/ohif-i18n/.babelrc +++ /dev/null @@ -1,14 +0,0 @@ -{ - "presets": [ - ["@babel/preset-env", { - "targets": { - "ie": "11" - } - }], - "@babel/preset-react" - ], - "plugins": [ - "@babel/plugin-proposal-class-properties", - "@babel/plugin-transform-runtime" - ] -} diff --git a/extensions/ohif-i18n/.editorconfig b/extensions/ohif-i18n/.editorconfig deleted file mode 100644 index 9d08a1a828a..00000000000 --- a/extensions/ohif-i18n/.editorconfig +++ /dev/null @@ -1,9 +0,0 @@ -root = true - -[*] -charset = utf-8 -indent_style = space -indent_size = 2 -end_of_line = lf -insert_final_newline = true -trim_trailing_whitespace = true diff --git a/extensions/ohif-i18n/.gitignore b/extensions/ohif-i18n/.gitignore deleted file mode 100644 index 287b0df5718..00000000000 --- a/extensions/ohif-i18n/.gitignore +++ /dev/null @@ -1,29 +0,0 @@ - -# See https://help.github.com/ignore-files/ for more about ignoring files. - -# dependencies -node_modules - -# builds -build -dist -.rpt2_cache - -# misc -.DS_Store -.env -.env.local -.env.development.local -.env.test.local -.env.production.local - -npm-debug.log* -yarn-debug.log* -yarn-error.log* -.idea - -yalc.lock -.yalc - -# Note: DO NOT include this file because it includes our API key -.locize \ No newline at end of file diff --git a/extensions/ohif-i18n/package.json b/extensions/ohif-i18n/package.json deleted file mode 100644 index 05775be271a..00000000000 --- a/extensions/ohif-i18n/package.json +++ /dev/null @@ -1,90 +0,0 @@ -{ - "name": "@ohif/i18n", - "version": "0.2.5", - "description": "OHIF extension for internationalization", - "author": "OHIF", - "license": "MIT", - "repository": "OHIF/Viewers", - "main": "dist/index.umd.js", - "module": "dist/index.es.js", - "jsnext:main": "dist/index.es.js", - "engines": { - "node": ">=8", - "npm": ">=5" - }, - "scripts": { - "build": "rollup -c", - "prepublishOnly": "npm run build", - "pullTranslations": "./pullTranslations.sh" - }, - "peerDependencies": { - "i18next": "^17.0.3", - "i18next-browser-languagedetector": "^3.0.1", - "react": "^16.0.0", - "react-dom": "^16.0.0", - "react-i18next": "^10.11.0" - }, - "devDependencies": { - "@babel/core": "^7.2.2", - "@babel/plugin-external-helpers": "^7.2.0", - "@babel/plugin-proposal-class-properties": "^7.2.3", - "@babel/plugin-transform-runtime": "^7.2.0", - "@babel/preset-env": "^7.2.3", - "@babel/preset-react": "^7.0.0", - "babel-eslint": "^10.0.1", - "cross-env": "^5.2.0", - "eslint": "5.13.0", - "eslint-plugin-import": "^2.14.0", - "eslint-plugin-node": "^8.0.0", - "eslint-plugin-promise": "^4.0.1", - "eslint-plugin-react": "^7.11.1", - "husky": "^1.3.1", - "i18next": "^15.1.3", - "i18next-browser-languagedetector": "^3.0.1", - "lint-staged": "^8.1.0", - "locize-cli": "^4.8.0", - "prettier": "^1.15.3", - "react": "^16.0.0", - "react-dom": "^16.0.0", - "react-i18next": "^10.11.0", - "rollup": "^1.1.2", - "rollup-plugin-babel": "^4.2.0", - "rollup-plugin-commonjs": "^9.2.0", - "rollup-plugin-node-builtins": "^2.1.2", - "rollup-plugin-node-resolve": "^4.0.0", - "rollup-plugin-peer-deps-external": "^2.2.0", - "rollup-plugin-postcss": "^2.0.3", - "rollup-plugin-url": "^2.1.0" - }, - "husky": { - "hooks": { - "pre-commit": "lint-staged" - } - }, - "lint-staged": { - "src/**/*.{js,jsx,json,css}": [ - "prettier --single-quote --write", - "git add" - ] - }, - "browserslist": [ - ">0.2%", - "not dead", - "not ie <= 11", - "not op_mini all" - ], - "files": [ - "dist" - ], - "publishConfig": { - "access": "public" - }, - "dependencies": { - "@babel/runtime": "^7.2.0", - "classnames": "^2.2.6", - "i18next-locize-backend": "^2.0.0", - "locize-editor": "^2.0.0", - "locize-lastused": "^1.1.0", - "rollup-plugin-json": "^4.0.0" - } -} diff --git a/extensions/ohif-i18n/rollup.config.js b/extensions/ohif-i18n/rollup.config.js deleted file mode 100644 index dbbbe1ad49c..00000000000 --- a/extensions/ohif-i18n/rollup.config.js +++ /dev/null @@ -1,67 +0,0 @@ -import babel from 'rollup-plugin-babel'; -import commonjs from 'rollup-plugin-commonjs'; -import external from 'rollup-plugin-peer-deps-external'; -import postcss from 'rollup-plugin-postcss'; -import resolve from 'rollup-plugin-node-resolve'; -import url from 'rollup-plugin-url'; -import pkg from './package.json'; -// Deal with https://github.com/rollup/rollup-plugin-commonjs/issues/297 -import builtins from 'rollup-plugin-node-builtins'; -import json from 'rollup-plugin-json'; - -const globals = { - react: 'React', - 'react-dom': 'ReactDOM', - 'react-redux': 'ReactRedux', - 'react-resize-detector': 'ReactResizeDetector', - 'prop-types': 'PropTypes', - i18next: 'i18next', - 'react-i18next': 'react-i18next', - 'i18next-browser-languagedetector': 'LngDetector', -}; - -export default { - input: 'src/index.js', - output: [ - { - file: pkg.main, - format: 'umd', - name: 'ohif-i18n', - sourcemap: true, - globals, - exports: 'named', - }, - { - file: pkg.module, - format: 'es', - sourcemap: true, - globals, - exports: 'named', - }, - ], - plugins: [ - builtins(), - external(), - postcss({ - modules: false, - }), - json({ - // ignores indent and generates the smallest code - compact: true, // Default: false - - // generate a named export for every property of the JSON object - namedExports: true, // Default: true - }), - url(), - babel({ - exclude: 'node_modules/**', - externalHelpers: true, - runtimeHelpers: true, - }), - resolve(), - commonjs({ - include: ['node_modules/**', '.yalc/**'], - }), - ], - external: Object.keys(pkg.peerDependencies || {}), -}; diff --git a/extensions/ohif-i18n/yarn.lock b/extensions/ohif-i18n/yarn.lock deleted file mode 100644 index 8ac0265eba0..00000000000 --- a/extensions/ohif-i18n/yarn.lock +++ /dev/null @@ -1,5909 +0,0 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -"@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.2.2": - version "7.4.5" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.4.5.tgz#081f97e8ffca65a9b4b0fdc7e274e703f000c06a" - integrity sha512-OvjIh6aqXtlsA8ujtGKfC7LYWksYSX8yQcM8Ay3LuvVeQ63lcOKgoZWVqcpFwkd29aYU9rVx7jxhfhiEDV9MZA== - dependencies: - "@babel/code-frame" "^7.0.0" - "@babel/generator" "^7.4.4" - "@babel/helpers" "^7.4.4" - "@babel/parser" "^7.4.5" - "@babel/template" "^7.4.4" - "@babel/traverse" "^7.4.5" - "@babel/types" "^7.4.4" - 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.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.4.4.tgz#174a215eb843fc392c7edcaabeaa873de6e8f041" - integrity sha512-53UOLK6TVNqKxf7RUh8NE851EHRxOOeVXKbK2bivdb+iziMyk03Sr4eaE9OELCbyZAAafAKPDwF2TPUES5QbxQ== - dependencies: - "@babel/types" "^7.4.4" - jsesc "^2.5.1" - lodash "^4.17.11" - source-map "^0.5.0" - trim-right "^1.0.1" - -"@babel/helper-annotate-as-pure@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.0.0.tgz#323d39dd0b50e10c7c06ca7d7638e6864d8c5c32" - integrity sha512-3UYcJUj9kvSLbLbUIfQTqzcy5VX7GRZ/CCDrnOaZorFFM01aXp1+GJwuFGV4NDDoAS+mOUyHcO6UD/RfqOks3Q== - dependencies: - "@babel/types" "^7.0.0" - -"@babel/helper-builder-binary-assignment-operator-visitor@^7.1.0": - version "7.1.0" - resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.1.0.tgz#6b69628dfe4087798e0c4ed98e3d4a6b2fbd2f5f" - integrity sha512-qNSR4jrmJ8M1VMM9tibvyRAHXQs2PmaksQF7c1CGJNipfe3D8p+wgNwgso/P2A2r2mdgBWAXljNWR0QRZAMW8w== - dependencies: - "@babel/helper-explode-assignable-expression" "^7.1.0" - "@babel/types" "^7.0.0" - -"@babel/helper-builder-react-jsx@^7.3.0": - version "7.3.0" - resolved "https://registry.yarnpkg.com/@babel/helper-builder-react-jsx/-/helper-builder-react-jsx-7.3.0.tgz#a1ac95a5d2b3e88ae5e54846bf462eeb81b318a4" - integrity sha512-MjA9KgwCuPEkQd9ncSXvSyJ5y+j2sICHyrI0M3L+6fnS4wMSNDc1ARXsbTfbb2cXHn17VisSnU/sHFTCxVxSMw== - dependencies: - "@babel/types" "^7.3.0" - esutils "^2.0.0" - -"@babel/helper-call-delegate@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/helper-call-delegate/-/helper-call-delegate-7.4.4.tgz#87c1f8ca19ad552a736a7a27b1c1fcf8b1ff1f43" - integrity sha512-l79boDFJ8S1c5hvQvG+rc+wHw6IuH7YldmRKsYtpbawsxURu/paVy57FZMomGK22/JckepaikOkY0MoAmdyOlQ== - dependencies: - "@babel/helper-hoist-variables" "^7.4.4" - "@babel/traverse" "^7.4.4" - "@babel/types" "^7.4.4" - -"@babel/helper-create-class-features-plugin@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.4.4.tgz#fc3d690af6554cc9efc607364a82d48f58736dba" - integrity sha512-UbBHIa2qeAGgyiNR9RszVF7bUHEdgS4JAUNT8SiqrAN6YJVxlOxeLr5pBzb5kan302dejJ9nla4RyKcR1XT6XA== - dependencies: - "@babel/helper-function-name" "^7.1.0" - "@babel/helper-member-expression-to-functions" "^7.0.0" - "@babel/helper-optimise-call-expression" "^7.0.0" - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-replace-supers" "^7.4.4" - "@babel/helper-split-export-declaration" "^7.4.4" - -"@babel/helper-define-map@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/helper-define-map/-/helper-define-map-7.4.4.tgz#6969d1f570b46bdc900d1eba8e5d59c48ba2c12a" - integrity sha512-IX3Ln8gLhZpSuqHJSnTNBWGDE9kdkTEWl21A/K7PQ00tseBwbqCHTvNLHSBd9M0R5rER4h5Rsvj9vw0R5SieBg== - dependencies: - "@babel/helper-function-name" "^7.1.0" - "@babel/types" "^7.4.4" - lodash "^4.17.11" - -"@babel/helper-explode-assignable-expression@^7.1.0": - version "7.1.0" - resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.1.0.tgz#537fa13f6f1674df745b0c00ec8fe4e99681c8f6" - integrity sha512-NRQpfHrJ1msCHtKjbzs9YcMmJZOg6mQMmGRB+hbamEdG5PNpaSm95275VD92DvJKuyl0s2sFiDmMZ+EnnvufqA== - dependencies: - "@babel/traverse" "^7.1.0" - "@babel/types" "^7.0.0" - -"@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/helper-get-function-arity" "^7.0.0" - "@babel/template" "^7.1.0" - "@babel/types" "^7.0.0" - -"@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-hoist-variables@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.4.4.tgz#0298b5f25c8c09c53102d52ac4a98f773eb2850a" - integrity sha512-VYk2/H/BnYbZDDg39hr3t2kKyifAm1W6zHRfhx8jGjIHpQEBv9dry7oQ2f3+J703TLu69nYdxsovl0XYfcnK4w== - dependencies: - "@babel/types" "^7.4.4" - -"@babel/helper-member-expression-to-functions@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.0.0.tgz#8cd14b0a0df7ff00f009e7d7a436945f47c7a16f" - integrity sha512-avo+lm/QmZlv27Zsi0xEor2fKcqWG56D5ae9dzklpIaY7cQMK5N8VSpaNVPPagiqmy7LrEjK1IWdGMOqPu5csg== - dependencies: - "@babel/types" "^7.0.0" - -"@babel/helper-module-imports@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.0.0.tgz#96081b7111e486da4d2cd971ad1a4fe216cc2e3d" - integrity sha512-aP/hlLq01DWNEiDg4Jn23i+CXxW/owM4WpDLFUbpjxe4NS3BhLVZQ5i7E0ZrxuQ/vwekIeciyamgB1UIYxxM6A== - dependencies: - "@babel/types" "^7.0.0" - -"@babel/helper-module-transforms@^7.1.0", "@babel/helper-module-transforms@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.4.4.tgz#96115ea42a2f139e619e98ed46df6019b94414b8" - integrity sha512-3Z1yp8TVQf+B4ynN7WoHPKS8EkdTbgAEy0nU0rs/1Kw4pDgmvYH3rz3aI11KgxKCba2cn7N+tqzV1mY2HMN96w== - dependencies: - "@babel/helper-module-imports" "^7.0.0" - "@babel/helper-simple-access" "^7.1.0" - "@babel/helper-split-export-declaration" "^7.4.4" - "@babel/template" "^7.4.4" - "@babel/types" "^7.4.4" - lodash "^4.17.11" - -"@babel/helper-optimise-call-expression@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.0.0.tgz#a2920c5702b073c15de51106200aa8cad20497d5" - integrity sha512-u8nd9NQePYNQV8iPWu/pLLYBqZBa4ZaY1YWRFMuxrid94wKI1QNt67NEZ7GAe5Kc/0LLScbim05xZFWkAdrj9g== - 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-regex@^7.0.0", "@babel/helper-regex@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/helper-regex/-/helper-regex-7.4.4.tgz#a47e02bc91fb259d2e6727c2a30013e3ac13c4a2" - integrity sha512-Y5nuB/kESmR3tKjU8Nkn1wMGEx1tjJX076HBMeL3XLQCu6vA/YRzuTW0bbb+qRnXvQGn+d6Rx953yffl8vEy7Q== - dependencies: - lodash "^4.17.11" - -"@babel/helper-remap-async-to-generator@^7.1.0": - version "7.1.0" - resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.1.0.tgz#361d80821b6f38da75bd3f0785ece20a88c5fe7f" - integrity sha512-3fOK0L+Fdlg8S5al8u/hWE6vhufGSn0bN09xm2LXMy//REAF8kDCrYoOBKYmA8m5Nom+sV9LyLCwrFynA8/slg== - dependencies: - "@babel/helper-annotate-as-pure" "^7.0.0" - "@babel/helper-wrap-function" "^7.1.0" - "@babel/template" "^7.1.0" - "@babel/traverse" "^7.1.0" - "@babel/types" "^7.0.0" - -"@babel/helper-replace-supers@^7.1.0", "@babel/helper-replace-supers@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.4.4.tgz#aee41783ebe4f2d3ab3ae775e1cc6f1a90cefa27" - integrity sha512-04xGEnd+s01nY1l15EuMS1rfKktNF+1CkKmHoErDppjAAZL+IUBZpzT748x262HF7fibaQPhbvWUl5HeSt1EXg== - dependencies: - "@babel/helper-member-expression-to-functions" "^7.0.0" - "@babel/helper-optimise-call-expression" "^7.0.0" - "@babel/traverse" "^7.4.4" - "@babel/types" "^7.4.4" - -"@babel/helper-simple-access@^7.1.0": - version "7.1.0" - resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.1.0.tgz#65eeb954c8c245beaa4e859da6188f39d71e585c" - integrity sha512-Vk+78hNjRbsiu49zAPALxTb+JUQCz1aolpd8osOF16BGnLtseD21nbHgLPGUwrXEurZgiCOUmvs3ExTu4F5x6w== - dependencies: - "@babel/template" "^7.1.0" - "@babel/types" "^7.0.0" - -"@babel/helper-split-export-declaration@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.4.4.tgz#ff94894a340be78f53f06af038b205c49d993677" - integrity sha512-Ro/XkzLf3JFITkW6b+hNxzZ1n5OQ80NvIUdmHspih1XAhtN3vPTuUFT4eQnela+2MaZ5ulH+iyP513KJrxbN7Q== - dependencies: - "@babel/types" "^7.4.4" - -"@babel/helper-wrap-function@^7.1.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.2.0.tgz#c4e0012445769e2815b55296ead43a958549f6fa" - integrity sha512-o9fP1BZLLSrYlxYEYyl2aS+Flun5gtjTIG8iln+XuEzQTs0PLagAGSXUcqruJwD5fM48jzIEggCKpIfWTcR7pQ== - dependencies: - "@babel/helper-function-name" "^7.1.0" - "@babel/template" "^7.1.0" - "@babel/traverse" "^7.1.0" - "@babel/types" "^7.2.0" - -"@babel/helpers@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.4.4.tgz#868b0ef59c1dd4e78744562d5ce1b59c89f2f2a5" - integrity sha512-igczbR/0SeuPR8RFfC7tGrbdTbFL3QTvH6D+Z6zNxnTe//GyqmtHmDkzrqDmyZ3eSwPqB/LhyKoU5DXsp+Vp2A== - dependencies: - "@babel/template" "^7.4.4" - "@babel/traverse" "^7.4.4" - "@babel/types" "^7.4.4" - -"@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 "^4.0.0" - -"@babel/parser@^7.0.0", "@babel/parser@^7.4.4", "@babel/parser@^7.4.5": - version "7.4.5" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.4.5.tgz#04af8d5d5a2b044a2a1bffacc1e5e6673544e872" - integrity sha512-9mUqkL1FF5T7f0WDFfAoDdiMVPWsdD1gZYzSnaXsxUCUqzuch/8of9G3VUSNiZmMBoRxT3neyVsqeiL/ZPcjew== - -"@babel/plugin-external-helpers@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-external-helpers/-/plugin-external-helpers-7.2.0.tgz#7f4cb7dee651cd380d2034847d914288467a6be4" - integrity sha512-QFmtcCShFkyAsNtdCM3lJPmRe1iB+vPZymlB4LnDIKEBj2yKQLQKtoxXxJ8ePT5fwMl4QGg303p4mB0UsSI2/g== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-proposal-async-generator-functions@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.2.0.tgz#b289b306669dce4ad20b0252889a15768c9d417e" - integrity sha512-+Dfo/SCQqrwx48ptLVGLdE39YtWRuKc/Y9I5Fy0P1DDBB9lsAHpjcEJQt+4IifuSOSTLBKJObJqMvaO1pIE8LQ== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-remap-async-to-generator" "^7.1.0" - "@babel/plugin-syntax-async-generators" "^7.2.0" - -"@babel/plugin-proposal-class-properties@^7.2.3": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.4.4.tgz#93a6486eed86d53452ab9bab35e368e9461198ce" - integrity sha512-WjKTI8g8d5w1Bc9zgwSz2nfrsNQsXcCf9J9cdCvrJV6RF56yztwm4TmJC0MgJ9tvwO9gUA/mcYe89bLdGfiXFg== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.4.4" - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-proposal-json-strings@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.2.0.tgz#568ecc446c6148ae6b267f02551130891e29f317" - integrity sha512-MAFV1CA/YVmYwZG0fBQyXhmj0BHCB5egZHCKWIFVv/XCxAeVGIHfos3SwDck4LvCllENIAg7xMKOG5kH0dzyUg== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-syntax-json-strings" "^7.2.0" - -"@babel/plugin-proposal-object-rest-spread@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.4.4.tgz#1ef173fcf24b3e2df92a678f027673b55e7e3005" - integrity sha512-dMBG6cSPBbHeEBdFXeQ2QLc5gUpg4Vkaz8octD4aoW/ISO+jBOcsuxYL7bsb5WSu8RLP6boxrBIALEHgoHtO9g== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-syntax-object-rest-spread" "^7.2.0" - -"@babel/plugin-proposal-optional-catch-binding@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.2.0.tgz#135d81edb68a081e55e56ec48541ece8065c38f5" - integrity sha512-mgYj3jCcxug6KUcX4OBoOJz3CMrwRfQELPQ5560F70YQUBZB7uac9fqaWamKR1iWUzGiK2t0ygzjTScZnVz75g== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-syntax-optional-catch-binding" "^7.2.0" - -"@babel/plugin-proposal-unicode-property-regex@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.4.4.tgz#501ffd9826c0b91da22690720722ac7cb1ca9c78" - integrity sha512-j1NwnOqMG9mFUOH58JTFsA/+ZYzQLUZ/drqWUqxCYLGeu2JFZL8YrNC9hBxKmWtAuOCHPcRpgv7fhap09Fb4kA== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-regex" "^7.4.4" - regexpu-core "^4.5.4" - -"@babel/plugin-syntax-async-generators@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.2.0.tgz#69e1f0db34c6f5a0cf7e2b3323bf159a76c8cb7f" - integrity sha512-1ZrIRBv2t0GSlcwVoQ6VgSLpLgiN/FVQUzt9znxo7v2Ov4jJrs8RY8tv0wvDmFN3qIdMKWrmMMW6yZ0G19MfGg== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-syntax-json-strings@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.2.0.tgz#72bd13f6ffe1d25938129d2a186b11fd62951470" - integrity sha512-5UGYnMSLRE1dqqZwug+1LISpA403HzlSfsg6P9VXU6TBjcSHeNlw4DxDx7LgpF+iKZoOG/+uzqoRHTdcUpiZNg== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-syntax-jsx@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.2.0.tgz#0b85a3b4bc7cdf4cc4b8bf236335b907ca22e7c7" - integrity sha512-VyN4QANJkRW6lDBmENzRszvZf3/4AXaj9YR7GwrWeeN9tEBPuXbmDYVU9bYBN0D70zCWVwUy0HWq2553VCb6Hw== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-syntax-object-rest-spread@^7.2.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/plugin-syntax-optional-catch-binding@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.2.0.tgz#a94013d6eda8908dfe6a477e7f9eda85656ecf5c" - integrity sha512-bDe4xKNhb0LI7IvZHiA13kff0KEfaGX/Hv4lMA9+7TEc63hMNvfKo6ZFpXhKuEp+II/q35Gc4NoMeDZyaUbj9w== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-arrow-functions@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.2.0.tgz#9aeafbe4d6ffc6563bf8f8372091628f00779550" - integrity sha512-ER77Cax1+8/8jCB9fo4Ud161OZzWN5qawi4GusDuRLcDbDG+bIGYY20zb2dfAFdTRGzrfq2xZPvF0R64EHnimg== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-async-to-generator@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.4.4.tgz#a3f1d01f2f21cadab20b33a82133116f14fb5894" - integrity sha512-YiqW2Li8TXmzgbXw+STsSqPBPFnGviiaSp6CYOq55X8GQ2SGVLrXB6pNid8HkqkZAzOH6knbai3snhP7v0fNwA== - dependencies: - "@babel/helper-module-imports" "^7.0.0" - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-remap-async-to-generator" "^7.1.0" - -"@babel/plugin-transform-block-scoped-functions@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.2.0.tgz#5d3cc11e8d5ddd752aa64c9148d0db6cb79fd190" - integrity sha512-ntQPR6q1/NKuphly49+QiQiTN0O63uOwjdD6dhIjSWBI5xlrbUFh720TIpzBhpnrLfv2tNH/BXvLIab1+BAI0w== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-block-scoping@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.4.4.tgz#c13279fabf6b916661531841a23c4b7dae29646d" - integrity sha512-jkTUyWZcTrwxu5DD4rWz6rDB5Cjdmgz6z7M7RLXOJyCUkFBawssDGcGh8M/0FTSB87avyJI1HsTwUXp9nKA1PA== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - lodash "^4.17.11" - -"@babel/plugin-transform-classes@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.4.4.tgz#0ce4094cdafd709721076d3b9c38ad31ca715eb6" - integrity sha512-/e44eFLImEGIpL9qPxSRat13I5QNRgBLu2hOQJCF7VLy/otSM/sypV1+XaIw5+502RX/+6YaSAPmldk+nhHDPw== - dependencies: - "@babel/helper-annotate-as-pure" "^7.0.0" - "@babel/helper-define-map" "^7.4.4" - "@babel/helper-function-name" "^7.1.0" - "@babel/helper-optimise-call-expression" "^7.0.0" - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-replace-supers" "^7.4.4" - "@babel/helper-split-export-declaration" "^7.4.4" - globals "^11.1.0" - -"@babel/plugin-transform-computed-properties@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.2.0.tgz#83a7df6a658865b1c8f641d510c6f3af220216da" - integrity sha512-kP/drqTxY6Xt3NNpKiMomfgkNn4o7+vKxK2DDKcBG9sHj51vHqMBGy8wbDS/J4lMxnqs153/T3+DmCEAkC5cpA== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-destructuring@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.4.4.tgz#9d964717829cc9e4b601fc82a26a71a4d8faf20f" - integrity sha512-/aOx+nW0w8eHiEHm+BTERB2oJn5D127iye/SUQl7NjHy0lf+j7h4MKMMSOwdazGq9OxgiNADncE+SRJkCxjZpQ== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-dotall-regex@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.4.4.tgz#361a148bc951444312c69446d76ed1ea8e4450c3" - integrity sha512-P05YEhRc2h53lZDjRPk/OektxCVevFzZs2Gfjd545Wde3k+yFDbXORgl2e0xpbq8mLcKJ7Idss4fAg0zORN/zg== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-regex" "^7.4.4" - regexpu-core "^4.5.4" - -"@babel/plugin-transform-duplicate-keys@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.2.0.tgz#d952c4930f312a4dbfff18f0b2914e60c35530b3" - integrity sha512-q+yuxW4DsTjNceUiTzK0L+AfQ0zD9rWaTLiUqHA8p0gxx7lu1EylenfzjeIWNkPy6e/0VG/Wjw9uf9LueQwLOw== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-exponentiation-operator@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.2.0.tgz#a63868289e5b4007f7054d46491af51435766008" - integrity sha512-umh4hR6N7mu4Elq9GG8TOu9M0bakvlsREEC+ialrQN6ABS4oDQ69qJv1VtR3uxlKMCQMCvzk7vr17RHKcjx68A== - dependencies: - "@babel/helper-builder-binary-assignment-operator-visitor" "^7.1.0" - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-for-of@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.4.4.tgz#0267fc735e24c808ba173866c6c4d1440fc3c556" - integrity sha512-9T/5Dlr14Z9TIEXLXkt8T1DU7F24cbhwhMNUziN3hB1AXoZcdzPcTiKGRn/6iOymDqtTKWnr/BtRKN9JwbKtdQ== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-function-name@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.4.4.tgz#e1436116abb0610c2259094848754ac5230922ad" - integrity sha512-iU9pv7U+2jC9ANQkKeNF6DrPy4GBa4NWQtl6dHB4Pb3izX2JOEvDTFarlNsBj/63ZEzNNIAMs3Qw4fNCcSOXJA== - dependencies: - "@babel/helper-function-name" "^7.1.0" - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-literals@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.2.0.tgz#690353e81f9267dad4fd8cfd77eafa86aba53ea1" - integrity sha512-2ThDhm4lI4oV7fVQ6pNNK+sx+c/GM5/SaML0w/r4ZB7sAneD/piDJtwdKlNckXeyGK7wlwg2E2w33C/Hh+VFCg== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-member-expression-literals@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.2.0.tgz#fa10aa5c58a2cb6afcf2c9ffa8cb4d8b3d489a2d" - integrity sha512-HiU3zKkSU6scTidmnFJ0bMX8hz5ixC93b4MHMiYebmk2lUVNGOboPsqQvx5LzooihijUoLR/v7Nc1rbBtnc7FA== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-modules-amd@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.2.0.tgz#82a9bce45b95441f617a24011dc89d12da7f4ee6" - integrity sha512-mK2A8ucqz1qhrdqjS9VMIDfIvvT2thrEsIQzbaTdc5QFzhDjQv2CkJJ5f6BXIkgbmaoax3zBr2RyvV/8zeoUZw== - dependencies: - "@babel/helper-module-transforms" "^7.1.0" - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-modules-commonjs@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.4.4.tgz#0bef4713d30f1d78c2e59b3d6db40e60192cac1e" - integrity sha512-4sfBOJt58sEo9a2BQXnZq+Q3ZTSAUXyK3E30o36BOGnJ+tvJ6YSxF0PG6kERvbeISgProodWuI9UVG3/FMY6iw== - dependencies: - "@babel/helper-module-transforms" "^7.4.4" - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-simple-access" "^7.1.0" - -"@babel/plugin-transform-modules-systemjs@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.4.4.tgz#dc83c5665b07d6c2a7b224c00ac63659ea36a405" - integrity sha512-MSiModfILQc3/oqnG7NrP1jHaSPryO6tA2kOMmAQApz5dayPxWiHqmq4sWH2xF5LcQK56LlbKByCd8Aah/OIkQ== - dependencies: - "@babel/helper-hoist-variables" "^7.4.4" - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-modules-umd@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.2.0.tgz#7678ce75169f0877b8eb2235538c074268dd01ae" - integrity sha512-BV3bw6MyUH1iIsGhXlOK6sXhmSarZjtJ/vMiD9dNmpY8QXFFQTj+6v92pcfy1iqa8DeAfJFwoxcrS/TUZda6sw== - dependencies: - "@babel/helper-module-transforms" "^7.1.0" - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-named-capturing-groups-regex@^7.4.5": - version "7.4.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.4.5.tgz#9d269fd28a370258199b4294736813a60bbdd106" - integrity sha512-z7+2IsWafTBbjNsOxU/Iv5CvTJlr5w4+HGu1HovKYTtgJ362f7kBcQglkfmlspKKZ3bgrbSGvLfNx++ZJgCWsg== - dependencies: - regexp-tree "^0.1.6" - -"@babel/plugin-transform-new-target@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.4.4.tgz#18d120438b0cc9ee95a47f2c72bc9768fbed60a5" - integrity sha512-r1z3T2DNGQwwe2vPGZMBNjioT2scgWzK9BCnDEh+46z8EEwXBq24uRzd65I7pjtugzPSj921aM15RpESgzsSuA== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-object-super@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.2.0.tgz#b35d4c10f56bab5d650047dad0f1d8e8814b6598" - integrity sha512-VMyhPYZISFZAqAPVkiYb7dUe2AsVi2/wCT5+wZdsNO31FojQJa9ns40hzZ6U9f50Jlq4w6qwzdBB2uwqZ00ebg== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-replace-supers" "^7.1.0" - -"@babel/plugin-transform-parameters@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.4.4.tgz#7556cf03f318bd2719fe4c922d2d808be5571e16" - integrity sha512-oMh5DUO1V63nZcu/ZVLQFqiihBGo4OpxJxR1otF50GMeCLiRx5nUdtokd+u9SuVJrvvuIh9OosRFPP4pIPnwmw== - dependencies: - "@babel/helper-call-delegate" "^7.4.4" - "@babel/helper-get-function-arity" "^7.0.0" - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-property-literals@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.2.0.tgz#03e33f653f5b25c4eb572c98b9485055b389e905" - integrity sha512-9q7Dbk4RhgcLp8ebduOpCbtjh7C0itoLYHXd9ueASKAG/is5PQtMR5VJGka9NKqGhYEGn5ITahd4h9QeBMylWQ== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-react-display-name@^7.0.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.2.0.tgz#ebfaed87834ce8dc4279609a4f0c324c156e3eb0" - integrity sha512-Htf/tPa5haZvRMiNSQSFifK12gtr/8vwfr+A9y69uF0QcU77AVu4K7MiHEkTxF7lQoHOL0F9ErqgfNEAKgXj7A== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-react-jsx-self@^7.0.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.2.0.tgz#461e21ad9478f1031dd5e276108d027f1b5240ba" - integrity sha512-v6S5L/myicZEy+jr6ielB0OR8h+EH/1QFx/YJ7c7Ua+7lqsjj/vW6fD5FR9hB/6y7mGbfT4vAURn3xqBxsUcdg== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-syntax-jsx" "^7.2.0" - -"@babel/plugin-transform-react-jsx-source@^7.0.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.2.0.tgz#20c8c60f0140f5dd3cd63418d452801cf3f7180f" - integrity sha512-A32OkKTp4i5U6aE88GwwcuV4HAprUgHcTq0sSafLxjr6AW0QahrCRCjxogkbbcdtpbXkuTOlgpjophCxb6sh5g== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-syntax-jsx" "^7.2.0" - -"@babel/plugin-transform-react-jsx@^7.0.0": - version "7.3.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.3.0.tgz#f2cab99026631c767e2745a5368b331cfe8f5290" - integrity sha512-a/+aRb7R06WcKvQLOu4/TpjKOdvVEKRLWFpKcNuHhiREPgGRB4TQJxq07+EZLS8LFVYpfq1a5lDUnuMdcCpBKg== - dependencies: - "@babel/helper-builder-react-jsx" "^7.3.0" - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-syntax-jsx" "^7.2.0" - -"@babel/plugin-transform-regenerator@^7.4.5": - version "7.4.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.4.5.tgz#629dc82512c55cee01341fb27bdfcb210354680f" - integrity sha512-gBKRh5qAaCWntnd09S8QC7r3auLCqq5DI6O0DlfoyDjslSBVqBibrMdsqO+Uhmx3+BlOmE/Kw1HFxmGbv0N9dA== - dependencies: - regenerator-transform "^0.14.0" - -"@babel/plugin-transform-reserved-words@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.2.0.tgz#4792af87c998a49367597d07fedf02636d2e1634" - integrity sha512-fz43fqW8E1tAB3DKF19/vxbpib1fuyCwSPE418ge5ZxILnBhWyhtPgz8eh1RCGGJlwvksHkyxMxh0eenFi+kFw== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-runtime@^7.2.0": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.4.4.tgz#a50f5d16e9c3a4ac18a1a9f9803c107c380bce08" - integrity sha512-aMVojEjPszvau3NRg+TIH14ynZLvPewH4xhlCW1w6A3rkxTS1m4uwzRclYR9oS+rl/dr+kT+pzbfHuAWP/lc7Q== - dependencies: - "@babel/helper-module-imports" "^7.0.0" - "@babel/helper-plugin-utils" "^7.0.0" - resolve "^1.8.1" - semver "^5.5.1" - -"@babel/plugin-transform-shorthand-properties@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.2.0.tgz#6333aee2f8d6ee7e28615457298934a3b46198f0" - integrity sha512-QP4eUM83ha9zmYtpbnyjTLAGKQritA5XW/iG9cjtuOI8s1RuL/3V6a3DeSHfKutJQ+ayUfeZJPcnCYEQzaPQqg== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-spread@^7.2.0": - version "7.2.2" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.2.2.tgz#3103a9abe22f742b6d406ecd3cd49b774919b406" - integrity sha512-KWfky/58vubwtS0hLqEnrWJjsMGaOeSBn90Ezn5Jeg9Z8KKHmELbP1yGylMlm5N6TPKeY9A2+UaSYLdxahg01w== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-sticky-regex@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.2.0.tgz#a1e454b5995560a9c1e0d537dfc15061fd2687e1" - integrity sha512-KKYCoGaRAf+ckH8gEL3JHUaFVyNHKe3ASNsZ+AlktgHevvxGigoIttrEJb8iKN03Q7Eazlv1s6cx2B2cQ3Jabw== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-regex" "^7.0.0" - -"@babel/plugin-transform-template-literals@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.4.4.tgz#9d28fea7bbce637fb7612a0750989d8321d4bcb0" - integrity sha512-mQrEC4TWkhLN0z8ygIvEL9ZEToPhG5K7KDW3pzGqOfIGZ28Jb0POUkeWcoz8HnHvhFy6dwAT1j8OzqN8s804+g== - dependencies: - "@babel/helper-annotate-as-pure" "^7.0.0" - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-typeof-symbol@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.2.0.tgz#117d2bcec2fbf64b4b59d1f9819894682d29f2b2" - integrity sha512-2LNhETWYxiYysBtrBTqL8+La0jIoQQnIScUJc74OYvUGRmkskNY4EzLCnjHBzdmb38wqtTaixpo1NctEcvMDZw== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-unicode-regex@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.4.4.tgz#ab4634bb4f14d36728bf5978322b35587787970f" - integrity sha512-il+/XdNw01i93+M9J9u4T7/e/Ue/vWfNZE4IRUQjplu2Mqb/AFTDimkw2tdEdSH50wuQXZAbXSql0UphQke+vA== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-regex" "^7.4.4" - regexpu-core "^4.5.4" - -"@babel/preset-env@^7.2.3": - version "7.4.5" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.4.5.tgz#2fad7f62983d5af563b5f3139242755884998a58" - integrity sha512-f2yNVXM+FsR5V8UwcFeIHzHWgnhXg3NpRmy0ADvALpnhB0SLbCvrCRr4BLOUYbQNLS+Z0Yer46x9dJXpXewI7w== - dependencies: - "@babel/helper-module-imports" "^7.0.0" - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-proposal-async-generator-functions" "^7.2.0" - "@babel/plugin-proposal-json-strings" "^7.2.0" - "@babel/plugin-proposal-object-rest-spread" "^7.4.4" - "@babel/plugin-proposal-optional-catch-binding" "^7.2.0" - "@babel/plugin-proposal-unicode-property-regex" "^7.4.4" - "@babel/plugin-syntax-async-generators" "^7.2.0" - "@babel/plugin-syntax-json-strings" "^7.2.0" - "@babel/plugin-syntax-object-rest-spread" "^7.2.0" - "@babel/plugin-syntax-optional-catch-binding" "^7.2.0" - "@babel/plugin-transform-arrow-functions" "^7.2.0" - "@babel/plugin-transform-async-to-generator" "^7.4.4" - "@babel/plugin-transform-block-scoped-functions" "^7.2.0" - "@babel/plugin-transform-block-scoping" "^7.4.4" - "@babel/plugin-transform-classes" "^7.4.4" - "@babel/plugin-transform-computed-properties" "^7.2.0" - "@babel/plugin-transform-destructuring" "^7.4.4" - "@babel/plugin-transform-dotall-regex" "^7.4.4" - "@babel/plugin-transform-duplicate-keys" "^7.2.0" - "@babel/plugin-transform-exponentiation-operator" "^7.2.0" - "@babel/plugin-transform-for-of" "^7.4.4" - "@babel/plugin-transform-function-name" "^7.4.4" - "@babel/plugin-transform-literals" "^7.2.0" - "@babel/plugin-transform-member-expression-literals" "^7.2.0" - "@babel/plugin-transform-modules-amd" "^7.2.0" - "@babel/plugin-transform-modules-commonjs" "^7.4.4" - "@babel/plugin-transform-modules-systemjs" "^7.4.4" - "@babel/plugin-transform-modules-umd" "^7.2.0" - "@babel/plugin-transform-named-capturing-groups-regex" "^7.4.5" - "@babel/plugin-transform-new-target" "^7.4.4" - "@babel/plugin-transform-object-super" "^7.2.0" - "@babel/plugin-transform-parameters" "^7.4.4" - "@babel/plugin-transform-property-literals" "^7.2.0" - "@babel/plugin-transform-regenerator" "^7.4.5" - "@babel/plugin-transform-reserved-words" "^7.2.0" - "@babel/plugin-transform-shorthand-properties" "^7.2.0" - "@babel/plugin-transform-spread" "^7.2.0" - "@babel/plugin-transform-sticky-regex" "^7.2.0" - "@babel/plugin-transform-template-literals" "^7.4.4" - "@babel/plugin-transform-typeof-symbol" "^7.2.0" - "@babel/plugin-transform-unicode-regex" "^7.4.4" - "@babel/types" "^7.4.4" - browserslist "^4.6.0" - core-js-compat "^3.1.1" - invariant "^2.2.2" - js-levenshtein "^1.1.3" - semver "^5.5.0" - -"@babel/preset-react@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.0.0.tgz#e86b4b3d99433c7b3e9e91747e2653958bc6b3c0" - integrity sha512-oayxyPS4Zj+hF6Et11BwuBkmpgT/zMxyuZgFrMeZID6Hdh3dGlk4sHCAhdBCpuCKW2ppBfl2uCCetlrUIJRY3w== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-transform-react-display-name" "^7.0.0" - "@babel/plugin-transform-react-jsx" "^7.0.0" - "@babel/plugin-transform-react-jsx-self" "^7.0.0" - "@babel/plugin-transform-react-jsx-source" "^7.0.0" - -"@babel/runtime@^7.0.0", "@babel/runtime@^7.2.0", "@babel/runtime@^7.3.1", "@babel/runtime@^7.4.5": - version "7.4.5" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.4.5.tgz#582bb531f5f9dc67d2fcb682979894f75e253f12" - integrity sha512-TuI4qpWZP6lGOGIuGWtp9sPluqYICmbk8T/1vpSysqJxRPkudh/ofFWyqdcMsDf2s7KvDL4/YHgKyvcS3g9CJQ== - dependencies: - regenerator-runtime "^0.13.2" - -"@babel/template@^7.1.0", "@babel/template@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.4.4.tgz#f4b88d1225689a08f5bc3a17483545be9e4ed237" - integrity sha512-CiGzLN9KgAvgZsnivND7rkA+AeJ9JB0ciPOD4U59GKbQP2iQl+olF1l76kJOupqidozfZ32ghwBEJDhnk9MEcw== - dependencies: - "@babel/code-frame" "^7.0.0" - "@babel/parser" "^7.4.4" - "@babel/types" "^7.4.4" - -"@babel/traverse@^7.0.0", "@babel/traverse@^7.1.0", "@babel/traverse@^7.4.4", "@babel/traverse@^7.4.5": - version "7.4.5" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.4.5.tgz#4e92d1728fd2f1897dafdd321efbff92156c3216" - integrity sha512-Vc+qjynwkjRmIFGxy0KYoPj4FdVDxLej89kMHFsWScq999uX+pwcX4v9mWRjW0KcAYTPAuVQl2LKP1wEVLsp+A== - dependencies: - "@babel/code-frame" "^7.0.0" - "@babel/generator" "^7.4.4" - "@babel/helper-function-name" "^7.1.0" - "@babel/helper-split-export-declaration" "^7.4.4" - "@babel/parser" "^7.4.5" - "@babel/types" "^7.4.4" - debug "^4.1.0" - globals "^11.1.0" - lodash "^4.17.11" - -"@babel/types@^7.0.0", "@babel/types@^7.2.0", "@babel/types@^7.3.0", "@babel/types@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.4.4.tgz#8db9e9a629bb7c29370009b4b779ed93fe57d5f0" - integrity sha512-dOllgYdnEFOebhkKCjzSVFqw/PmmB8pH6RGOWkY4GsboQNd47b1fBThBSwlHAq9alF9vc1M3+6oqR47R50L0tQ== - dependencies: - esutils "^2.0.2" - lodash "^4.17.11" - to-fast-properties "^2.0.0" - -"@js.properties/properties@0.4.0": - version "0.4.0" - resolved "https://registry.yarnpkg.com/@js.properties/properties/-/properties-0.4.0.tgz#3f98b784ab6fe9b31fd3c1637fedbfa2ff320185" - integrity sha512-c24GP6HAx4hP/h7OVom037hi1LBQXH2SmOwOLpAc9u4C1Ofph1W4npWMZTmEfFM+hMB0ExSkG3MF2DONx9ystA== - -"@samverschueren/stream-to-observable@^0.3.0": - version "0.3.0" - resolved "https://registry.yarnpkg.com/@samverschueren/stream-to-observable/-/stream-to-observable-0.3.0.tgz#ecdf48d532c58ea477acfcab80348424f8d0662f" - integrity sha512-MI4Xx6LHs4Webyvi6EbspgyAb4D2Q2VtnCQ1blOJcoLS6mVa8lNN2rkIy1CVxfTUpoyIbCTkXES1rLXztFD1lg== - dependencies: - any-observable "^0.3.0" - -"@types/estree@0.0.39": - version "0.0.39" - resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.39.tgz#e177e699ee1b8c22d23174caaa7422644389509f" - integrity sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw== - -"@types/node@*", "@types/node@^12.0.3": - version "12.0.4" - resolved "https://registry.yarnpkg.com/@types/node/-/node-12.0.4.tgz#46832183115c904410c275e34cf9403992999c32" - integrity sha512-j8YL2C0fXq7IONwl/Ud5Kt0PeXw22zGERt+HSSnwbKOJVsAGkEz3sFCYwaF9IOuoG1HOtE0vKCj6sXF7Q0+Vaw== - -"@types/q@^1.5.1": - version "1.5.2" - resolved "https://registry.yarnpkg.com/@types/q/-/q-1.5.2.tgz#690a1475b84f2a884fd07cd797c00f5f31356ea8" - integrity sha512-ce5d3q03Ex0sy4R14722Rmt6MT07Ua+k4FwDfdcToYJcMKNtRVQvJ6JCAPdAmAnbRb6CsX6aYb9m96NGod9uTw== - -"@types/resolve@0.0.8": - version "0.0.8" - resolved "https://registry.yarnpkg.com/@types/resolve/-/resolve-0.0.8.tgz#f26074d238e02659e323ce1a13d041eee280e194" - integrity sha512-auApPaJf3NPfe18hSoJkp8EbZzer2ISk7o8mCC3M9he/a04+gbMF97NkpD2S8riMGvm4BMRI59/SZQSaLTKpsQ== - dependencies: - "@types/node" "*" - -abstract-leveldown@~0.12.0, abstract-leveldown@~0.12.1: - version "0.12.4" - resolved "https://registry.yarnpkg.com/abstract-leveldown/-/abstract-leveldown-0.12.4.tgz#29e18e632e60e4e221d5810247852a63d7b2e410" - integrity sha1-KeGOYy5g5OIh1YECR4UqY9ey5BA= - dependencies: - xtend "~3.0.0" - -acorn-jsx@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.0.1.tgz#32a064fd925429216a09b141102bfdd185fae40e" - integrity sha512-HJ7CfNHrfJLlNTzIEUTj43LNWGkqpRLxm3YjAlcD0ACydk9XynzYsCBHxut+iqt+1aBXkx9UP/w/ZqMr13XIzg== - -acorn@^6.0.7, acorn@^6.1.1: - version "6.1.1" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.1.1.tgz#7d25ae05bb8ad1f9b699108e1094ecd7884adc1f" - integrity sha512-jPTiwtOxaHNaAPg/dmrJ/beuzLRnXtB0kQPQ8JpotKJgTB6rX6c8mlf315941pyjBSaPg8NHXS9fhP4u17DpGA== - -adler-32@~1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/adler-32/-/adler-32-1.2.0.tgz#6a3e6bf0a63900ba15652808cb15c6813d1a5f25" - integrity sha1-aj5r8KY5ALoVZSgIyxXGgT0aXyU= - dependencies: - exit-on-epipe "~1.0.1" - printj "~1.1.0" - -ajv@^6.5.3, ajv@^6.5.5, ajv@^6.9.1: - version "6.10.0" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.10.0.tgz#90d0d54439da587cd7e843bfb7045f50bd22bdf1" - integrity sha512-nffhOpkymDECQyR0mnsUtoCE8RlX38G0rYP+wgLWFyZuUyuuojSSvi/+euOiQBIn63whYwYVIIH1TvE3tu4OEg== - dependencies: - fast-deep-equal "^2.0.1" - fast-json-stable-stringify "^2.0.0" - json-schema-traverse "^0.4.1" - uri-js "^4.2.2" - -alphanum-sort@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/alphanum-sort/-/alphanum-sort-1.0.2.tgz#97a1119649b211ad33691d9f9f486a8ec9fbe0a3" - integrity sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM= - -android-string-resource@1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/android-string-resource/-/android-string-resource-1.2.1.tgz#0ffd98ada664b39e283a1964a27817b4b630c933" - integrity sha512-5ScubR/D7QQWMIuf4mnMglir6JhDvmS7KM//N+17KfHOe9ycKHg34RirIntNMQHgOuwy65Jhv9JlMY9hzMhzqA== - dependencies: - rdotjson "1.0.1" - xml2js "0.4.19" - -ansi-escapes@^3.0.0, ansi-escapes@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.2.0.tgz#8780b98ff9dbf5638152d1f1fe5c1d7b4442976b" - integrity sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ== - -ansi-regex@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" - integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8= - -ansi-regex@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" - integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg= - -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" - integrity sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4= - -ansi-styles@^3.2.0, ansi-styles@^3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" - integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== - dependencies: - color-convert "^1.9.0" - -any-observable@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/any-observable/-/any-observable-0.3.0.tgz#af933475e5806a67d0d7df090dd5e8bef65d119b" - integrity sha512-/FQM1EDkTsf63Ub2C6O7GuYFDsSXUwsaZDurV0np41ocwq0jthUAYCmhBX9f+KwlaCgIuWyr/4WlUQUBfKfZog== - -argparse@^1.0.7: - version "1.0.10" - resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" - integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== - dependencies: - sprintf-js "~1.0.2" - -arr-diff@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" - integrity sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA= - -arr-flatten@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" - integrity sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg== - -arr-union@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" - integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ= - -array-includes@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.0.3.tgz#184b48f62d92d7452bb31b323165c7f8bd02266d" - integrity sha1-GEtI9i2S10UrsxsyMWXH+L0CJm0= - dependencies: - define-properties "^1.1.2" - es-abstract "^1.7.0" - -array-union@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" - integrity sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk= - dependencies: - array-uniq "^1.0.1" - -array-uniq@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" - integrity sha1-r2rId6Jcx/dOBYiUdThY39sk/bY= - -array-unique@^0.3.2: - version "0.3.2" - resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" - integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg= - -arrify@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" - integrity sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0= - -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.4" - resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136" - integrity sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg== - dependencies: - safer-buffer "~2.1.0" - -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" - integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU= - -assign-symbols@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" - integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c= - -astral-regex@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9" - integrity sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg== - -async@2.6.2: - 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.17.11" - -asynckit@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" - integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= - -atob@^2.1.1: - version "2.1.2" - resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" - integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== - -aws-sign2@~0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" - integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg= - -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-eslint@^10.0.1: - version "10.0.1" - resolved "https://registry.yarnpkg.com/babel-eslint/-/babel-eslint-10.0.1.tgz#919681dc099614cd7d31d45c8908695092a1faed" - integrity sha512-z7OT1iNV+TjOwHNLLyJk+HN+YVWX+CLE6fPD2SymJZOZQBs+QIexFjhm4keGTm8MW9xr4EC9Q0PbaLB24V5GoQ== - dependencies: - "@babel/code-frame" "^7.0.0" - "@babel/parser" "^7.0.0" - "@babel/traverse" "^7.0.0" - "@babel/types" "^7.0.0" - eslint-scope "3.7.1" - eslint-visitor-keys "^1.0.0" - -balanced-match@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" - integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= - -base@^0.11.1: - version "0.11.2" - resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" - integrity sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg== - dependencies: - cache-base "^1.0.1" - class-utils "^0.3.5" - component-emitter "^1.2.1" - define-property "^1.0.0" - isobject "^3.0.1" - mixin-deep "^1.2.0" - pascalcase "^0.1.1" - -bcrypt-pbkdf@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" - integrity sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4= - dependencies: - tweetnacl "^0.14.3" - -big.js@^3.1.3: - version "3.2.0" - resolved "https://registry.yarnpkg.com/big.js/-/big.js-3.2.0.tgz#a5fc298b81b9e0dca2e458824784b65c52ba588e" - integrity sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q== - -bl@~0.8.1: - version "0.8.2" - resolved "https://registry.yarnpkg.com/bl/-/bl-0.8.2.tgz#c9b6bca08d1bc2ea00fc8afb4f1a5fd1e1c66e4e" - integrity sha1-yba8oI0bwuoA/Ir7Txpf0eHGbk4= - dependencies: - readable-stream "~1.0.26" - -bluebird@^3.5.3: - 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== - -boolbase@^1.0.0, boolbase@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" - integrity sha1-aN/1++YMUes3cl6p4+0xDcwed24= - -brace-expansion@^1.1.7: - version "1.1.11" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" - integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== - dependencies: - balanced-match "^1.0.0" - concat-map "0.0.1" - -braces@^2.3.1: - 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" - -brorand@^1.0.1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" - integrity sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8= - -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-fs@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/browserify-fs/-/browserify-fs-1.0.0.tgz#f075aa8a729d4d1716d066620e386fcc1311a96f" - integrity sha1-8HWqinKdTRcW0GZiDjhvzBMRqW8= - dependencies: - level-filesystem "^1.0.1" - level-js "^2.1.3" - levelup "^0.18.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" - -browserslist@^4.0.0, browserslist@^4.6.0: - version "4.6.1" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.6.1.tgz#ee5059b1aec18cbec9d055d6cb5e24ae50343a9b" - integrity sha512-1MC18ooMPRG2UuVFJTHFIAkk6mpByJfxCrnUyvSlu/hyQSFHMrlhM02SzNuCV+quTP4CKmqtOMAIjrifrpBJXQ== - dependencies: - caniuse-lite "^1.0.30000971" - electron-to-chromium "^1.3.137" - node-releases "^1.1.21" - -buffer-es6@^4.9.2: - version "4.9.3" - resolved "https://registry.yarnpkg.com/buffer-es6/-/buffer-es6-4.9.3.tgz#f26347b82df76fd37e18bcb5288c4970cfd5c404" - integrity sha1-8mNHuC33b9N+GLy1KIxJcM/VxAQ= - -buffer-from@^1.0.0: - 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-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= - -builtin-modules@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-3.1.0.tgz#aad97c15131eb76b65b50ef208e7584cd76a7484" - integrity sha512-k0KL0aWZuBt2lrxrcASWDfwOLMnodeQjodT/1SxEQAXsHANgo6ZC/VEaSEHCXt7aSTZ4/4H5LKa+tBXmW7Vtvw== - -cache-base@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" - integrity sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ== - dependencies: - collection-visit "^1.0.0" - component-emitter "^1.2.1" - get-value "^2.0.6" - has-value "^1.0.0" - isobject "^3.0.1" - set-value "^2.0.0" - to-object-path "^0.3.0" - union-value "^1.0.0" - unset-value "^1.0.0" - -caller-callsite@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/caller-callsite/-/caller-callsite-2.0.0.tgz#847e0fce0a223750a9a027c54b33731ad3154134" - integrity sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ= - dependencies: - callsites "^2.0.0" - -caller-path@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-2.0.0.tgz#468f83044e369ab2010fac5f06ceee15bb2cb1f4" - integrity sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ= - dependencies: - caller-callsite "^2.0.0" - -callsites@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/callsites/-/callsites-2.0.0.tgz#06eb84f00eea413da86affefacbffb36093b3c50" - integrity sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA= - -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== - -caniuse-api@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/caniuse-api/-/caniuse-api-3.0.0.tgz#5e4d90e2274961d46291997df599e3ed008ee4c0" - integrity sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw== - dependencies: - browserslist "^4.0.0" - caniuse-lite "^1.0.0" - lodash.memoize "^4.1.2" - lodash.uniq "^4.5.0" - -caniuse-lite@^1.0.0, caniuse-lite@^1.0.30000971: - version "1.0.30000971" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000971.tgz#d1000e4546486a6977756547352bc96a4cfd2b13" - integrity sha512-TQFYFhRS0O5rdsmSbF1Wn+16latXYsQJat66f7S7lizXW1PVpWJeZw9wqqVLIjuxDRz7s7xRUj13QCfd8hKn6g== - -caseless@~0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" - integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= - -cfb@^1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/cfb/-/cfb-1.1.1.tgz#7f399f4c541954715d0ced9b1cdecc52b554290a" - integrity sha512-eov9L63s9/uMiiDvWCiTYbK3AcM5x5AYo4NL1q75G0AZBrD2X0+Lm9hubk94qy1MJP7pYFuM6/xn0h3grAvBXQ== - dependencies: - adler-32 "~1.2.0" - commander "^2.16.0" - crc-32 "~1.2.0" - printj "~1.1.2" - -chalk@^1.0.0, chalk@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" - integrity sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg= - dependencies: - ansi-styles "^2.2.1" - escape-string-regexp "^1.0.2" - has-ansi "^2.0.0" - strip-ansi "^3.0.0" - supports-color "^2.0.0" - -chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.3.1, 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" - -chardet@^0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" - integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== - -cheerio@^0.22.0: - version "0.22.0" - resolved "https://registry.yarnpkg.com/cheerio/-/cheerio-0.22.0.tgz#a9baa860a3f9b595a6b81b1a86873121ed3a269e" - integrity sha1-qbqoYKP5tZWmuBsahocxIe06Jp4= - dependencies: - css-select "~1.2.0" - dom-serializer "~0.1.0" - entities "~1.1.1" - htmlparser2 "^3.9.1" - lodash.assignin "^4.0.9" - lodash.bind "^4.1.4" - lodash.defaults "^4.0.1" - lodash.filter "^4.4.0" - lodash.flatten "^4.2.0" - lodash.foreach "^4.3.0" - lodash.map "^4.4.0" - lodash.merge "^4.4.0" - lodash.pick "^4.2.1" - lodash.reduce "^4.4.0" - lodash.reject "^4.4.0" - lodash.some "^4.4.0" - -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" - -circular-json@^0.3.1: - version "0.3.3" - resolved "https://registry.yarnpkg.com/circular-json/-/circular-json-0.3.3.tgz#815c99ea84f6809529d2f45791bdf82711352d66" - integrity sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A== - -class-utils@^0.3.5: - version "0.3.6" - resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" - integrity sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg== - dependencies: - arr-union "^3.1.0" - define-property "^0.2.5" - isobject "^3.0.0" - static-extend "^0.1.1" - -classnames@^2.2.6: - version "2.2.6" - resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.2.6.tgz#43935bffdd291f326dad0a205309b38d00f650ce" - integrity sha512-JR/iSQOSt+LQIWwrwEzJ9uk0xfN3mTVYMwt1Ir5mUcSN6pU+V4zQFFaJsclJbPuAUQH+yfWef6tm7l1quW3C8Q== - -cli-cursor@^2.0.0, cli-cursor@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5" - integrity sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU= - dependencies: - restore-cursor "^2.0.0" - -cli-truncate@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-0.2.1.tgz#9f15cfbb0705005369216c626ac7d05ab90dd574" - integrity sha1-nxXPuwcFAFNpIWxiasfQWrkN1XQ= - dependencies: - slice-ansi "0.0.4" - string-width "^1.0.1" - -cli-width@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.0.tgz#ff19ede8a9a5e579324147b0c11f0fbcbabed639" - integrity sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk= - -clone@~0.1.9: - version "0.1.19" - resolved "https://registry.yarnpkg.com/clone/-/clone-0.1.19.tgz#613fb68639b26a494ac53253e15b1a6bd88ada85" - integrity sha1-YT+2hjmyaklKxTJT4Vsaa9iK2oU= - -coa@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/coa/-/coa-2.0.2.tgz#43f6c21151b4ef2bf57187db0d73de229e3e7ec3" - integrity sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA== - dependencies: - "@types/q" "^1.5.1" - chalk "^2.4.1" - q "^1.1.2" - -code-point-at@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" - integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c= - -codepage@~1.14.0: - version "1.14.0" - resolved "https://registry.yarnpkg.com/codepage/-/codepage-1.14.0.tgz#8cbe25481323559d7d307571b0fff91e7a1d2f99" - integrity sha1-jL4lSBMjVZ19MHVxsP/5HnodL5k= - dependencies: - commander "~2.14.1" - exit-on-epipe "~1.0.1" - -collection-visit@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" - integrity sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA= - dependencies: - map-visit "^1.0.0" - object-visit "^1.0.0" - -color-convert@^1.9.0, color-convert@^1.9.1: - version "1.9.3" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" - integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== - dependencies: - color-name "1.1.3" - -color-name@1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" - integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= - -color-name@^1.0.0: - version "1.1.4" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" - integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== - -color-string@^1.5.2: - version "1.5.3" - resolved "https://registry.yarnpkg.com/color-string/-/color-string-1.5.3.tgz#c9bbc5f01b58b5492f3d6857459cb6590ce204cc" - integrity sha512-dC2C5qeWoYkxki5UAXapdjqO672AM4vZuPGRQfO8b5HKuKGBbKWpITyDYN7TOFKvRW7kOgAn3746clDBMDJyQw== - dependencies: - color-name "^1.0.0" - simple-swizzle "^0.2.2" - -color@^3.0.0: - version "3.1.2" - resolved "https://registry.yarnpkg.com/color/-/color-3.1.2.tgz#68148e7f85d41ad7649c5fa8c8106f098d229e10" - integrity sha512-vXTJhHebByxZn3lDvDJYw4lR5+uB3vuoHsuYA5AKuxRVn5wzzIfQKGLBmgdVRHKTJYeK5rvJcHnrd0Li49CFpg== - dependencies: - color-convert "^1.9.1" - color-string "^1.5.2" - -colors@1.3.3: - version "1.3.3" - resolved "https://registry.yarnpkg.com/colors/-/colors-1.3.3.tgz#39e005d546afe01e01f9c4ca8fa50f686a01205d" - integrity sha512-mmGt/1pZqYRjMxB1axhTo16/snVZ5krrKkcmMeVKxzECMMXoCgnvTPp10QgHfcbQZw8Dq2jMNG6je4JlWU0gWg== - -combined-stream@^1.0.6, combined-stream@~1.0.6: - version "1.0.8" - resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" - integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== - dependencies: - delayed-stream "~1.0.0" - -commander@2.20.0, commander@^2.14.1, commander@^2.16.0, commander@^2.19.0, commander@^2.9.0: - version "2.20.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.0.tgz#d58bb2b5c1ee8f87b0d340027e9e94e222c5a422" - integrity sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ== - -commander@~2.14.1: - version "2.14.1" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.14.1.tgz#2235123e37af8ca3c65df45b026dbd357b01b9aa" - integrity sha512-+YR16o3rK53SmWHU3rEM3tPAh2rwb1yPcQX5irVn7mb0gXbwuCCrnkbV5+PBfETdfg1vui07nM6PCG1zndcjQw== - -commander@~2.17.1: - version "2.17.1" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.17.1.tgz#bd77ab7de6de94205ceacc72f1716d29f20a77bf" - integrity sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg== - -component-emitter@^1.2.1: - version "1.3.0" - resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0" - integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg== - -concat-map@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" - integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= - -concat-stream@^1.4.4: - 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" - -concat-with-sourcemaps@^1.0.5: - version "1.1.0" - resolved "https://registry.yarnpkg.com/concat-with-sourcemaps/-/concat-with-sourcemaps-1.1.0.tgz#d4ea93f05ae25790951b99e7b3b09e3908a4082e" - integrity sha512-4gEjHJFT9e+2W/77h/DS5SGUgwDaOwprX8L/gl5+3ixnzkVJJsZWDSelmN3Oilw3LNDZjZV0yqH1hLG3k6nghg== - dependencies: - source-map "^0.6.1" - -contains-path@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/contains-path/-/contains-path-0.1.0.tgz#fe8cf184ff6670b6baef01a9d4861a5cbec4120a" - integrity sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo= - -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" - -copy-descriptor@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" - integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= - -core-js-compat@^3.1.1: - version "3.1.3" - resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.1.3.tgz#0cc3ba4c7f62928c2837e1cffbe8dc78b4f1ae14" - integrity sha512-EP018pVhgwsKHz3YoN1hTq49aRe+h017Kjz0NQz3nXV0cCRMvH3fLQl+vEPGr4r4J5sk4sU3tUC7U1aqTCeJeA== - dependencies: - browserslist "^4.6.0" - core-js-pure "3.1.3" - semver "^6.1.0" - -core-js-pure@3.1.3: - version "3.1.3" - resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.1.3.tgz#4c90752d5b9471f641514f3728f51c1e0783d0b5" - integrity sha512-k3JWTrcQBKqjkjI0bkfXS0lbpWPxYuHWfMMjC1VDmzU4Q58IwSbuXSo99YO/hUHlw/EB4AlfA2PVxOGkrIq6dA== - -core-util-is@1.0.2, core-util-is@~1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" - integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= - -cosmiconfig@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-4.0.0.tgz#760391549580bbd2df1e562bc177b13c290972dc" - integrity sha512-6e5vDdrXZD+t5v0L8CrurPeybg4Fmf+FCSYxXKYVAqLUtyCSbuyqE059d0kDthTNRzKVjL7QMgNpEUlsoYH3iQ== - dependencies: - is-directory "^0.3.1" - js-yaml "^3.9.0" - parse-json "^4.0.0" - require-from-string "^2.0.1" - -cosmiconfig@^5.0.0, cosmiconfig@^5.0.7, cosmiconfig@^5.2.0: - version "5.2.1" - resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-5.2.1.tgz#040f726809c591e77a17c0a3626ca45b4f168b1a" - integrity sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA== - dependencies: - import-fresh "^2.0.0" - is-directory "^0.3.1" - js-yaml "^3.13.1" - parse-json "^4.0.0" - -crc-32@~1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/crc-32/-/crc-32-1.2.0.tgz#cb2db6e29b88508e32d9dd0ec1693e7b41a18208" - integrity sha512-1uBwHxF+Y/4yF5G48fwnKq6QsIXheor3ZLPT80yGBV1oEUwpPojlEhQbWKVw1VwcTQyMGHK1/XMmTjmlsmTTGA== - dependencies: - exit-on-epipe "~1.0.1" - printj "~1.1.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-env@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/cross-env/-/cross-env-5.2.0.tgz#6ecd4c015d5773e614039ee529076669b9d126f2" - integrity sha512-jtdNFfFW1hB7sMhr/H6rW1Z45LFqyI431m3qU6bFXcQ3Eh7LtBuG3h74o7ohHZ3crrRkkqHlo4jYHFPcjroANg== - dependencies: - cross-spawn "^6.0.5" - is-windows "^1.0.0" - -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: - nice-try "^1.0.4" - path-key "^2.0.1" - semver "^5.5.0" - shebang-command "^1.2.0" - which "^1.2.9" - -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" - -css-color-names@0.0.4, css-color-names@^0.0.4: - version "0.0.4" - resolved "https://registry.yarnpkg.com/css-color-names/-/css-color-names-0.0.4.tgz#808adc2e79cf84738069b646cb20ec27beb629e0" - integrity sha1-gIrcLnnPhHOAabZGyyDsJ762KeA= - -css-declaration-sorter@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/css-declaration-sorter/-/css-declaration-sorter-4.0.1.tgz#c198940f63a76d7e36c1e71018b001721054cb22" - integrity sha512-BcxQSKTSEEQUftYpBVnsH4SF05NTuBokb19/sBt6asXGKZ/6VP7PLG1CBCkFDYOnhXhPh0jMhO6xZ71oYHXHBA== - dependencies: - postcss "^7.0.1" - timsort "^0.3.0" - -css-modules-loader-core@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/css-modules-loader-core/-/css-modules-loader-core-1.1.0.tgz#5908668294a1becd261ae0a4ce21b0b551f21d16" - integrity sha1-WQhmgpShvs0mGuCkziGwtVHyHRY= - dependencies: - icss-replace-symbols "1.1.0" - postcss "6.0.1" - postcss-modules-extract-imports "1.1.0" - postcss-modules-local-by-default "1.2.0" - postcss-modules-scope "1.1.0" - postcss-modules-values "1.3.0" - -css-select-base-adapter@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz#3b2ff4972cc362ab88561507a95408a1432135d7" - integrity sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w== - -css-select@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/css-select/-/css-select-2.0.2.tgz#ab4386cec9e1f668855564b17c3733b43b2a5ede" - integrity sha512-dSpYaDVoWaELjvZ3mS6IKZM/y2PMPa/XYoEfYNZePL4U/XgyxZNroHEHReDx/d+VgXh9VbCTtFqLkFbmeqeaRQ== - dependencies: - boolbase "^1.0.0" - css-what "^2.1.2" - domutils "^1.7.0" - nth-check "^1.0.2" - -css-select@~1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/css-select/-/css-select-1.2.0.tgz#2b3a110539c5355f1cd8d314623e870b121ec858" - integrity sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg= - dependencies: - boolbase "~1.0.0" - css-what "2.1" - domutils "1.5.1" - nth-check "~1.0.1" - -css-selector-tokenizer@^0.7.0: - version "0.7.1" - resolved "https://registry.yarnpkg.com/css-selector-tokenizer/-/css-selector-tokenizer-0.7.1.tgz#a177271a8bca5019172f4f891fc6eed9cbf68d5d" - integrity sha512-xYL0AMZJ4gFzJQsHUKa5jiWWi2vH77WVNg7JYRyewwj6oPh4yb/y6Y9ZCw9dsj/9UauMhtuxR+ogQd//EdEVNA== - dependencies: - cssesc "^0.1.0" - fastparse "^1.1.1" - regexpu-core "^1.0.0" - -css-tree@1.0.0-alpha.28: - version "1.0.0-alpha.28" - resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.0.0-alpha.28.tgz#8e8968190d886c9477bc8d61e96f61af3f7ffa7f" - integrity sha512-joNNW1gCp3qFFzj4St6zk+Wh/NBv0vM5YbEreZk0SD4S23S+1xBKb6cLDg2uj4P4k/GUMlIm6cKIDqIG+vdt0w== - dependencies: - mdn-data "~1.1.0" - source-map "^0.5.3" - -css-tree@1.0.0-alpha.29: - version "1.0.0-alpha.29" - resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.0.0-alpha.29.tgz#3fa9d4ef3142cbd1c301e7664c1f352bd82f5a39" - integrity sha512-sRNb1XydwkW9IOci6iB2xmy8IGCj6r/fr+JWitvJ2JxQRPzN3T4AGGVWCMlVmVwM1gtgALJRmGIlWv5ppnGGkg== - dependencies: - mdn-data "~1.1.0" - source-map "^0.5.3" - -css-unit-converter@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/css-unit-converter/-/css-unit-converter-1.1.1.tgz#d9b9281adcfd8ced935bdbaba83786897f64e996" - integrity sha1-2bkoGtz9jO2TW9urqDeGiX9k6ZY= - -css-url-regex@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/css-url-regex/-/css-url-regex-1.1.0.tgz#83834230cc9f74c457de59eebd1543feeb83b7ec" - integrity sha1-g4NCMMyfdMRX3lnuvRVD/uuDt+w= - -css-what@2.1, css-what@^2.1.2: - version "2.1.3" - resolved "https://registry.yarnpkg.com/css-what/-/css-what-2.1.3.tgz#a6d7604573365fe74686c3f311c56513d88285f2" - integrity sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg== - -cssesc@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-0.1.0.tgz#c814903e45623371a0477b40109aaafbeeaddbb4" - integrity sha1-yBSQPkViM3GgR3tAEJqq++6t27Q= - -cssesc@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-2.0.0.tgz#3b13bd1bb1cb36e1bcb5a4dcd27f54c5dcb35703" - integrity sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg== - -cssnano-preset-default@^4.0.7: - version "4.0.7" - resolved "https://registry.yarnpkg.com/cssnano-preset-default/-/cssnano-preset-default-4.0.7.tgz#51ec662ccfca0f88b396dcd9679cdb931be17f76" - integrity sha512-x0YHHx2h6p0fCl1zY9L9roD7rnlltugGu7zXSKQx6k2rYw0Hi3IqxcoAGF7u9Q5w1nt7vK0ulxV8Lo+EvllGsA== - dependencies: - css-declaration-sorter "^4.0.1" - cssnano-util-raw-cache "^4.0.1" - postcss "^7.0.0" - postcss-calc "^7.0.1" - postcss-colormin "^4.0.3" - postcss-convert-values "^4.0.1" - postcss-discard-comments "^4.0.2" - postcss-discard-duplicates "^4.0.2" - postcss-discard-empty "^4.0.1" - postcss-discard-overridden "^4.0.1" - postcss-merge-longhand "^4.0.11" - postcss-merge-rules "^4.0.3" - postcss-minify-font-values "^4.0.2" - postcss-minify-gradients "^4.0.2" - postcss-minify-params "^4.0.2" - postcss-minify-selectors "^4.0.2" - postcss-normalize-charset "^4.0.1" - postcss-normalize-display-values "^4.0.2" - postcss-normalize-positions "^4.0.2" - postcss-normalize-repeat-style "^4.0.2" - postcss-normalize-string "^4.0.2" - postcss-normalize-timing-functions "^4.0.2" - postcss-normalize-unicode "^4.0.1" - postcss-normalize-url "^4.0.1" - postcss-normalize-whitespace "^4.0.2" - postcss-ordered-values "^4.1.2" - postcss-reduce-initial "^4.0.3" - postcss-reduce-transforms "^4.0.2" - postcss-svgo "^4.0.2" - postcss-unique-selectors "^4.0.1" - -cssnano-util-get-arguments@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/cssnano-util-get-arguments/-/cssnano-util-get-arguments-4.0.0.tgz#ed3a08299f21d75741b20f3b81f194ed49cc150f" - integrity sha1-7ToIKZ8h11dBsg87gfGU7UnMFQ8= - -cssnano-util-get-match@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/cssnano-util-get-match/-/cssnano-util-get-match-4.0.0.tgz#c0e4ca07f5386bb17ec5e52250b4f5961365156d" - integrity sha1-wOTKB/U4a7F+xeUiULT1lhNlFW0= - -cssnano-util-raw-cache@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/cssnano-util-raw-cache/-/cssnano-util-raw-cache-4.0.1.tgz#b26d5fd5f72a11dfe7a7846fb4c67260f96bf282" - integrity sha512-qLuYtWK2b2Dy55I8ZX3ky1Z16WYsx544Q0UWViebptpwn/xDBmog2TLg4f+DBMg1rJ6JDWtn96WHbOKDWt1WQA== - dependencies: - postcss "^7.0.0" - -cssnano-util-same-parent@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/cssnano-util-same-parent/-/cssnano-util-same-parent-4.0.1.tgz#574082fb2859d2db433855835d9a8456ea18bbf3" - integrity sha512-WcKx5OY+KoSIAxBW6UBBRay1U6vkYheCdjyVNDm85zt5K9mHoGOfsOsqIszfAqrQQFIIKgjh2+FDgIj/zsl21Q== - -cssnano@^4.1.8: - version "4.1.10" - resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-4.1.10.tgz#0ac41f0b13d13d465487e111b778d42da631b8b2" - integrity sha512-5wny+F6H4/8RgNlaqab4ktc3e0/blKutmq8yNlBFXA//nSFFAqAngjNVRzUvCgYROULmZZUoosL/KSoZo5aUaQ== - dependencies: - cosmiconfig "^5.0.0" - cssnano-preset-default "^4.0.7" - is-resolvable "^1.0.0" - postcss "^7.0.0" - -csso@^3.5.1: - version "3.5.1" - resolved "https://registry.yarnpkg.com/csso/-/csso-3.5.1.tgz#7b9eb8be61628973c1b261e169d2f024008e758b" - integrity sha512-vrqULLffYU1Q2tLdJvaCYbONStnfkfimRxXNaGjxMldI0C7JPBC4rB1RyjhfdZ4m1frm8pM9uRPKH3d2knZ8gg== - dependencies: - css-tree "1.0.0-alpha.29" - -csvjson@5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/csvjson/-/csvjson-5.1.0.tgz#f055660824ebfb44dc089d901267fdc5d9e8414a" - integrity sha512-OqALQHA0k2rEGluOWikwFq5qtkRUDyoWP2u0UJy8uFjFx5FPMjPzx7D2Hn2KjBLpc8jkGrT9HDNgTUfopDlqVg== - -dashdash@^1.12.0: - version "1.14.1" - resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" - integrity sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA= - dependencies: - assert-plus "^1.0.0" - -date-fns@^1.27.2: - version "1.30.1" - resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-1.30.1.tgz#2e71bf0b119153dbb4cc4e88d9ea5acfb50dc05c" - integrity sha512-hBSVCvSmWC+QypYObzwGOd9wqdDpOt+0wl0KbU+R+uuZBS1jN8VsD1ss3irQDknRj5NvxiTF6oj/nDRnN/UQNw== - -debug@^2.2.0, debug@^2.3.3, debug@^2.6.8, debug@^2.6.9: - version "2.6.9" - resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" - integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== - dependencies: - ms "2.0.0" - -debug@^3.1.0: - version "3.2.6" - resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" - integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ== - dependencies: - ms "^2.1.1" - -debug@^4.0.1, debug@^4.1.0: - 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" - -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" - integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU= - -dedent@^0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c" - integrity sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw= - -deep-is@~0.1.3: - version "0.1.3" - resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" - integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= - -deferred-leveldown@~0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/deferred-leveldown/-/deferred-leveldown-0.2.0.tgz#2cef1f111e1c57870d8bbb8af2650e587cd2f5b4" - integrity sha1-LO8fER4cV4cNi7uK8mUOWHzS9bQ= - dependencies: - abstract-leveldown "~0.12.1" - -define-properties@^1.1.2, define-properties@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" - integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== - dependencies: - object-keys "^1.0.12" - -define-property@^0.2.5: - version "0.2.5" - resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116" - integrity sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY= - dependencies: - is-descriptor "^0.1.0" - -define-property@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6" - integrity sha1-dp66rz9KY6rTr56NMEybvnm/sOY= - dependencies: - is-descriptor "^1.0.0" - -define-property@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d" - integrity sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ== - dependencies: - is-descriptor "^1.0.2" - isobject "^3.0.1" - -del@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/del/-/del-3.0.0.tgz#53ecf699ffcbcb39637691ab13baf160819766e5" - integrity sha1-U+z2mf/LyzljdpGrE7rxYIGXZuU= - dependencies: - globby "^6.1.0" - is-path-cwd "^1.0.0" - is-path-in-cwd "^1.0.0" - p-map "^1.1.1" - pify "^3.0.0" - rimraf "^2.2.8" - -delayed-stream@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" - integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= - -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: - inherits "^2.0.1" - minimalistic-assert "^1.0.0" - -diff@4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.1.tgz#0c667cb467ebbb5cea7f14f135cc2dba7780a8ff" - integrity sha512-s2+XdvhPCOF01LRQBC8hf4vhbVmI2CGS5aZnxLJlT5FtdhPCDFq80q++zK2KlrVorVDdL5BOGZ/VfLrVtYNF+Q== - -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" - -doctrine@1.5.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-1.5.0.tgz#379dce730f6166f76cefa4e6707a159b02c5a6fa" - integrity sha1-N53Ocw9hZvds76TmcHoVmwLFpvo= - dependencies: - esutils "^2.0.2" - isarray "^1.0.0" - -doctrine@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d" - integrity sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw== - dependencies: - esutils "^2.0.2" - -dom-serializer@0, dom-serializer@~0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.1.1.tgz#1ec4059e284babed36eec2941d4a970a189ce7c0" - integrity sha512-l0IU0pPzLWSHBcieZbpOKgkIn3ts3vAh7ZuFyXNwJxJXk/c4Gwj9xaTJwIDVQCXawWD0qb3IzMGH5rglQaO0XA== - dependencies: - domelementtype "^1.3.0" - entities "^1.1.1" - -domelementtype@1, domelementtype@^1.3.0, domelementtype@^1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.1.tgz#d048c44b37b0d10a7f2a3d5fee3f4333d790481f" - integrity sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w== - -domhandler@^2.3.0: - version "2.4.2" - resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.4.2.tgz#8805097e933d65e85546f726d60f5eb88b44f803" - integrity sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA== - dependencies: - domelementtype "1" - -domutils@1.5.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.5.1.tgz#dcd8488a26f563d61079e48c9f7b7e32373682cf" - integrity sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8= - dependencies: - dom-serializer "0" - domelementtype "1" - -domutils@^1.5.1, domutils@^1.7.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.7.0.tgz#56ea341e834e06e6748af7a1cb25da67ea9f8c2a" - integrity sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg== - dependencies: - dom-serializer "0" - domelementtype "1" - -dot-prop@^4.1.1: - version "4.2.0" - resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-4.2.0.tgz#1f19e0c2e1aa0e32797c49799f2837ac6af69c57" - integrity sha512-tUMXrxlExSW6U2EXiiKGSBVdYgtV8qlHL+C10TsW4PURY/ic+eaysnSkwB4kA/mBlCyy/IKDJ+Lc3wbWeaXtuQ== - dependencies: - is-obj "^1.0.0" - -ecc-jsbn@~0.1.1: - version "0.1.2" - resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" - integrity sha1-OoOpBOVDUyh4dMVkt1SThoSamMk= - dependencies: - jsbn "~0.1.0" - safer-buffer "^2.1.0" - -electron-to-chromium@^1.3.137: - version "1.3.143" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.143.tgz#8b2a631ab75157aa53d0c2933275643b99ef580b" - integrity sha512-J9jOpxIljQZlV6GIP2fwAWq0T69syawU0sH3EW3O2Bgxquiy+veeIT5mBDRz+i3oHUSL1tvVgRKH3/4QiQh9Pg== - -elegant-spinner@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/elegant-spinner/-/elegant-spinner-1.0.1.tgz#db043521c95d7e303fd8f345bedc3349cfb0729e" - integrity sha1-2wQ1IcldfjA/2PNFvtwzSc+wcp4= - -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" - -emoji-regex@^7.0.1: - version "7.0.3" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" - integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== - -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.12: - version "0.1.12" - resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.12.tgz#538b66f3ee62cd1ab51ec323829d1f9480c74beb" - integrity sha1-U4tm8+5izRq1HsMjgp0flIDHS+s= - dependencies: - iconv-lite "~0.4.13" - -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" - -entities@^1.1.1, entities@~1.1.1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.2.tgz#bdfa735299664dfafd34529ed4f8522a275fea56" - integrity sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w== - -errno@^0.1.1, errno@~0.1.1: - 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, 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.11.0, es-abstract@^1.12.0, es-abstract@^1.5.1, es-abstract@^1.7.0: - version "1.13.0" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.13.0.tgz#ac86145fdd5099d8dd49558ccba2eaf9b88e24e9" - integrity sha512-vDZfg/ykNxQVwup/8E1BZhVzFfBxs9NqMzGcvIJrqg5k2/5Za2bWo40dK2J1pgLngZ7c+Shh8lwYtLGyrwPutg== - dependencies: - es-to-primitive "^1.2.0" - function-bind "^1.1.1" - has "^1.0.3" - is-callable "^1.1.4" - is-regex "^1.0.4" - object-keys "^1.0.12" - -es-to-primitive@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.0.tgz#edf72478033456e8dda8ef09e00ad9650707f377" - integrity sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg== - dependencies: - is-callable "^1.1.4" - is-date-object "^1.0.1" - is-symbol "^1.0.2" - -escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.4, escape-string-regexp@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" - integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= - -eslint-import-resolver-node@^0.3.2: - version "0.3.2" - resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.2.tgz#58f15fb839b8d0576ca980413476aab2472db66a" - integrity sha512-sfmTqJfPSizWu4aymbPr4Iidp5yKm8yDkHp+Ir3YiTHiiDfxh69mOUsmiqW6RZ9zRXFaF64GtYmN7e+8GHBv6Q== - dependencies: - debug "^2.6.9" - resolve "^1.5.0" - -eslint-module-utils@^2.4.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.4.0.tgz#8b93499e9b00eab80ccb6614e69f03678e84e09a" - integrity sha512-14tltLm38Eu3zS+mt0KvILC3q8jyIAH518MlG+HO0p+yK885Lb1UHTY/UgR91eOyGdmxAPb+OLoW4znqIT6Ndw== - dependencies: - debug "^2.6.8" - pkg-dir "^2.0.0" - -eslint-plugin-es@^1.3.1: - version "1.4.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-es/-/eslint-plugin-es-1.4.0.tgz#475f65bb20c993fc10e8c8fe77d1d60068072da6" - integrity sha512-XfFmgFdIUDgvaRAlaXUkxrRg5JSADoRC8IkKLc/cISeR3yHVMefFHQZpcyXXEUUPHfy5DwviBcrfqlyqEwlQVw== - dependencies: - eslint-utils "^1.3.0" - regexpp "^2.0.1" - -eslint-plugin-import@^2.14.0: - version "2.17.3" - resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.17.3.tgz#00548b4434c18faebaba04b24ae6198f280de189" - integrity sha512-qeVf/UwXFJbeyLbxuY8RgqDyEKCkqV7YC+E5S5uOjAp4tOc8zj01JP3ucoBM8JcEqd1qRasJSg6LLlisirfy0Q== - dependencies: - array-includes "^3.0.3" - contains-path "^0.1.0" - debug "^2.6.9" - doctrine "1.5.0" - eslint-import-resolver-node "^0.3.2" - eslint-module-utils "^2.4.0" - has "^1.0.3" - lodash "^4.17.11" - minimatch "^3.0.4" - read-pkg-up "^2.0.0" - resolve "^1.11.0" - -eslint-plugin-node@^8.0.0: - version "8.0.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-node/-/eslint-plugin-node-8.0.1.tgz#55ae3560022863d141fa7a11799532340a685964" - integrity sha512-ZjOjbjEi6jd82rIpFSgagv4CHWzG9xsQAVp1ZPlhRnnYxcTgENUVBvhYmkQ7GvT1QFijUSo69RaiOJKhMu6i8w== - dependencies: - eslint-plugin-es "^1.3.1" - eslint-utils "^1.3.1" - ignore "^5.0.2" - minimatch "^3.0.4" - resolve "^1.8.1" - semver "^5.5.0" - -eslint-plugin-promise@^4.0.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-promise/-/eslint-plugin-promise-4.1.1.tgz#1e08cb68b5b2cd8839f8d5864c796f56d82746db" - integrity sha512-faAHw7uzlNPy7b45J1guyjazw28M+7gJokKUjC5JSFoYfUEyy6Gw/i7YQvmv2Yk00sUjWcmzXQLpU1Ki/C2IZQ== - -eslint-plugin-react@^7.11.1: - version "7.13.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.13.0.tgz#bc13fd7101de67996ea51b33873cd9dc2b7e5758" - integrity sha512-uA5LrHylu8lW/eAH3bEQe9YdzpPaFd9yAJTwTi/i/BKTD7j6aQMKVAdGM/ML72zD6womuSK7EiGtMKuK06lWjQ== - dependencies: - array-includes "^3.0.3" - doctrine "^2.1.0" - has "^1.0.3" - jsx-ast-utils "^2.1.0" - object.fromentries "^2.0.0" - prop-types "^15.7.2" - resolve "^1.10.1" - -eslint-scope@3.7.1: - version "3.7.1" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-3.7.1.tgz#3d63c3edfda02e06e01a452ad88caacc7cdcb6e8" - integrity sha1-PWPD7f2gLgbgGkUq2IyqzHzctug= - dependencies: - esrecurse "^4.1.0" - estraverse "^4.1.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" - -eslint-utils@^1.3.0, eslint-utils@^1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-1.3.1.tgz#9a851ba89ee7c460346f97cf8939c7298827e512" - integrity sha512-Z7YjnIldX+2XMcjr7ZkgEsOj/bREONV60qYeB/bjMAqqqZ4zxKyWX+BOUkdmRmA9riiIPVvo5x86m5elviOk0Q== - -eslint-visitor-keys@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz#3f3180fb2e291017716acb4c9d6d5b5c34a6a81d" - integrity sha512-qzm/XxIbxm/FHyH341ZrbnMUpe+5Bocte9xkmFMzPMjRaZMcXww+MpBptFvtU+79L362nqiLhekCxCxDPaUMBQ== - -eslint@5.13.0: - version "5.13.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-5.13.0.tgz#ce71cc529c450eed9504530939aa97527861ede9" - integrity sha512-nqD5WQMisciZC5EHZowejLKQjWGuFS5c70fxqSKlnDME+oz9zmE8KTlX+lHSg+/5wsC/kf9Q9eMkC8qS3oM2fg== - dependencies: - "@babel/code-frame" "^7.0.0" - ajv "^6.5.3" - chalk "^2.1.0" - cross-spawn "^6.0.5" - debug "^4.0.1" - doctrine "^2.1.0" - eslint-scope "^4.0.0" - eslint-utils "^1.3.1" - eslint-visitor-keys "^1.0.0" - espree "^5.0.0" - esquery "^1.0.1" - esutils "^2.0.2" - file-entry-cache "^2.0.0" - functional-red-black-tree "^1.0.1" - glob "^7.1.2" - globals "^11.7.0" - ignore "^4.0.6" - import-fresh "^3.0.0" - imurmurhash "^0.1.4" - inquirer "^6.1.0" - js-yaml "^3.12.0" - json-stable-stringify-without-jsonify "^1.0.1" - levn "^0.3.0" - lodash "^4.17.5" - minimatch "^3.0.4" - mkdirp "^0.5.1" - natural-compare "^1.4.0" - optionator "^0.8.2" - path-is-inside "^1.0.2" - progress "^2.0.0" - regexpp "^2.0.1" - semver "^5.5.1" - strip-ansi "^4.0.0" - strip-json-comments "^2.0.1" - table "^5.0.2" - text-table "^0.2.0" - -espree@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/espree/-/espree-5.0.1.tgz#5d6526fa4fc7f0788a5cf75b15f30323e2f81f7a" - integrity sha512-qWAZcWh4XE/RwzLJejfcofscgMc9CamR6Tn1+XRXNzrvUSSbiAjGOI/fggztjIi7y9VLPqnICMIPiGyr8JaZ0A== - dependencies: - acorn "^6.0.7" - acorn-jsx "^5.0.0" - eslint-visitor-keys "^1.0.0" - -esprima@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" - integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== - -esquery@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.0.1.tgz#406c51658b1f5991a5f9b62b1dc25b00e3e5c708" - integrity sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA== - dependencies: - estraverse "^4.0.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.0.0, estraverse@^4.1.0, estraverse@^4.1.1: - version "4.2.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.2.0.tgz#0dee3fed31fcd469618ce7342099fc1afa0bdb13" - integrity sha1-De4/7TH81GlhjOc0IJn8GvoL2xM= - -estree-walker@^0.6.0, estree-walker@^0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-0.6.1.tgz#53049143f40c6eb918b23671d1fe3219f3a1b362" - integrity sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w== - -esutils@^2.0.0, esutils@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b" - integrity sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs= - -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: - md5.js "^1.3.4" - safe-buffer "^5.1.1" - -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-on-epipe@~1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/exit-on-epipe/-/exit-on-epipe-1.0.1.tgz#0bdd92e87d5285d267daa8171d0eb06159689692" - integrity sha512-h2z5mrROTxce56S+pnvAV890uu7ls7f1kEvVGJbw1OlFH3/mlJ5bkXu0KRyW94v37zzHPiUd55iLn3DA7TjWpw== - -expand-brackets@^2.1.4: - version "2.1.4" - resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" - integrity sha1-t3c14xXOMPa27/D4OwQVGiJEliI= - dependencies: - debug "^2.3.3" - define-property "^0.2.5" - extend-shallow "^2.0.1" - posix-character-classes "^0.1.0" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.1" - -extend-shallow@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" - integrity sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8= - dependencies: - is-extendable "^0.1.0" - -extend-shallow@^3.0.0, extend-shallow@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8" - integrity sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg= - dependencies: - assign-symbols "^1.0.0" - is-extendable "^1.0.1" - -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== - -external-editor@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.0.3.tgz#5866db29a97826dbe4bf3afd24070ead9ea43a27" - integrity sha512-bn71H9+qWoOQKyZDo25mOMVpSmXROAsTJVVVYzrrtol3d4y+AsKjf4Iwl2Q+IuT0kFSQ1qo166UuIwqYq7mGnA== - dependencies: - chardet "^0.7.0" - iconv-lite "^0.4.24" - tmp "^0.0.33" - -extglob@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" - integrity sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw== - dependencies: - array-unique "^0.3.2" - define-property "^1.0.0" - expand-brackets "^2.1.4" - extend-shallow "^2.0.1" - fragment-cache "^0.2.1" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.1" - -extsprintf@1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" - integrity sha1-lpGEQOMEGnpBT4xS48V06zw+HgU= - -extsprintf@^1.2.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f" - integrity sha1-4mifjzVvrWLMplo6kcXfX5VRaS8= - -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.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2" - integrity sha1-1RQsDK7msRifh9OnYREGT4bIu/I= - -fast-levenshtein@~2.0.4: - version "2.0.6" - resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" - integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= - -fastparse@^1.1.1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/fastparse/-/fastparse-1.1.2.tgz#91728c5a5942eced8531283c79441ee4122c35a9" - integrity sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ== - -figures@^1.7.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/figures/-/figures-1.7.0.tgz#cbe1e3affcf1cd44b80cadfed28dc793a9701d2e" - integrity sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4= - dependencies: - escape-string-regexp "^1.0.5" - object-assign "^4.1.0" - -figures@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962" - integrity sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI= - dependencies: - escape-string-regexp "^1.0.5" - -file-entry-cache@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-2.0.0.tgz#c392990c3e684783d838b8c84a45d8a048458361" - integrity sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E= - dependencies: - flat-cache "^1.2.1" - object-assign "^4.0.1" - -fill-range@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" - integrity sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc= - dependencies: - extend-shallow "^2.0.1" - is-number "^3.0.0" - repeat-string "^1.6.1" - to-regex-range "^2.1.0" - -find-parent-dir@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/find-parent-dir/-/find-parent-dir-0.3.0.tgz#33c44b429ab2b2f0646299c5f9f718f376ff8d54" - integrity sha1-M8RLQpqysvBkYpnF+fcY83b/jVQ= - -find-up@^2.0.0, find-up@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" - integrity sha1-RdG35QbHF93UgndaK3eSCjwMV6c= - dependencies: - locate-path "^2.0.0" - -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" - -flat-cache@^1.2.1: - version "1.3.4" - resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-1.3.4.tgz#2c2ef77525cc2929007dfffa1dd314aa9c9dee6f" - integrity sha512-VwyB3Lkgacfik2vhqR4uv2rvebqmDvFu4jlN/C1RzWoJEo8I7z4Q404oiqYCkq41mni8EzQnm95emU9seckwtg== - dependencies: - circular-json "^0.3.1" - graceful-fs "^4.1.2" - rimraf "~2.6.2" - write "^0.2.1" - -flat@4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/flat/-/flat-4.1.0.tgz#090bec8b05e39cba309747f1d588f04dbaf98db2" - integrity sha512-Px/TiLIznH7gEDlPXcUD4KnBusa6kR6ayRUVcnEAbreRIuhkqow/mun59BuRXwoYk7ZQOLW1ZM05ilIvK38hFw== - dependencies: - is-buffer "~2.0.3" - -fluent-syntax@0.8.1: - version "0.8.1" - resolved "https://registry.yarnpkg.com/fluent-syntax/-/fluent-syntax-0.8.1.tgz#02eddd4861b453e614e071016dea3d4395b27f6e" - integrity sha512-Y1VoEAOO0kcLXVpfUcmuYeOY8X6OPdABZm3m9/rpXuDmemOceWKpnh9aQyHLkM8VRlrSk66/87AFNXccWu4VOg== - -fluent_conv@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/fluent_conv/-/fluent_conv-1.1.1.tgz#5190aefc33bbd54d346a0d7caf9165d57d25af7d" - integrity sha512-wLKA0QxmEV2DlZqA6YhYXBxEPlLRsv7QkUhrRGf3oV2ez4l5TiylUgJeniMPhdr3S3CyLi0ejuBLK4b6tSpHKw== - dependencies: - fluent-syntax "0.8.1" - -fn-name@~2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/fn-name/-/fn-name-2.0.1.tgz#5214d7537a4d06a4a301c0cc262feb84188002e7" - integrity sha1-UhTXU3pNBqSjAcDMJi/rhBiAAuc= - -for-in@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" - integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA= - -foreach@~2.0.1: - version "2.0.5" - resolved "https://registry.yarnpkg.com/foreach/-/foreach-2.0.5.tgz#0bee005018aeb260d0a3af3ae658dd0136ec1b99" - integrity sha1-C+4AUBiusmDQo6865ljdATbsG5k= - -forever-agent@~0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" - integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE= - -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" - -frac@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/frac/-/frac-1.1.2.tgz#3d74f7f6478c88a1b5020306d747dc6313c74d0b" - integrity sha512-w/XBfkibaTl3YDqASwfDUqkna4Z2p9cFSr1aHDt0WoMTECnRfBOv2WArlZILlqgWlmdIlALXGpM2AOhEk5W3IA== - -fragment-cache@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" - integrity sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk= - dependencies: - map-cache "^0.2.2" - -fs.realpath@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" - integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= - -function-bind@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" - integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== - -functional-red-black-tree@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" - integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= - -fwd-stream@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/fwd-stream/-/fwd-stream-1.0.4.tgz#ed281cabed46feecf921ee32dc4c50b372ac7cfa" - integrity sha1-7Sgcq+1G/uz5Ie4y3ExQs3KsfPo= - dependencies: - readable-stream "~1.0.26-4" - -g-status@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/g-status/-/g-status-2.0.2.tgz#270fd32119e8fc9496f066fe5fe88e0a6bc78b97" - integrity sha512-kQoE9qH+T1AHKgSSD0Hkv98bobE90ILQcXAF4wvGgsr7uFqNvwmh8j+Lq3l0RVt3E3HjSbv2B9biEGcEtpHLCA== - dependencies: - arrify "^1.0.1" - matcher "^1.0.0" - simple-git "^1.85.0" - -generic-names@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/generic-names/-/generic-names-1.0.3.tgz#2d786a121aee508876796939e8e3bff836c20917" - integrity sha1-LXhqEhruUIh2eWk56OO/+DbCCRc= - dependencies: - loader-utils "^0.2.16" - -get-own-enumerable-property-symbols@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.0.tgz#b877b49a5c16aefac3655f2ed2ea5b684df8d203" - integrity sha512-CIJYJC4GGF06TakLg8z4GQKvDsx9EMspVxOYih7LerEL/WosUnFIww45CGfxfeKHqlg3twgUrYRT1O3WQqjGCg== - -get-stdin@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-6.0.0.tgz#9e09bf712b360ab9225e812048f71fde9c89657b" - integrity sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g== - -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" - integrity sha1-3BXKHGcjh8p2vTesCjlbogQqLCg= - -getpass@^0.1.1: - version "0.1.7" - resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" - integrity sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo= - dependencies: - assert-plus "^1.0.0" - -gettext-parser@^3.1.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/gettext-parser/-/gettext-parser-3.1.1.tgz#f2455f7cc402087a0ee5289fcca204702b7fe240" - integrity sha512-vNhWcqXEtZPs5Ft1ReA34g7ByWotpcOIeJvXVy2jF3/G2U9v6W0wG4Z4hXzcU8R//jArqkgHcVCGgGqa4vxVlQ== - dependencies: - encoding "^0.1.12" - readable-stream "^3.2.0" - safe-buffer "^5.1.2" - -glob@^7.0.3, glob@^7.1.2, glob@^7.1.3: - version "7.1.4" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.4.tgz#aa608a2f6c577ad357e1ae5a5c26d9a8d1969255" - integrity sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A== - dependencies: - 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" - -globals@^11.1.0, globals@^11.7.0: - version "11.12.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" - integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== - -globby@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/globby/-/globby-6.1.0.tgz#f5a6d70e8395e21c858fb0489d64df02424d506c" - integrity sha1-9abXDoOV4hyFj7BInWTfAkJNUGw= - dependencies: - array-union "^1.0.1" - glob "^7.0.3" - object-assign "^4.0.1" - pify "^2.0.0" - pinkie-promise "^2.0.0" - -graceful-fs@^4.1.2: - 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== - -har-schema@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" - integrity sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI= - -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" - integrity sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE= - 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" - integrity sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo= - -has-flag@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" - integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= - -has-symbols@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.0.tgz#ba1a8f1af2a0fc39650f5c850367704122063b44" - integrity sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q= - -has-value@^0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" - integrity sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8= - dependencies: - get-value "^2.0.3" - has-values "^0.1.4" - isobject "^2.0.0" - -has-value@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177" - integrity sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc= - dependencies: - get-value "^2.0.6" - has-values "^1.0.0" - isobject "^3.0.0" - -has-values@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771" - integrity sha1-bWHeldkd/Km5oCCJrThL/49it3E= - -has-values@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f" - integrity sha1-lbC2P+whRmGab+V/51Yo1aOe/k8= - dependencies: - is-number "^3.0.0" - kind-of "^4.0.0" - -has@^1.0.0, has@^1.0.1, has@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" - integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== - dependencies: - function-bind "^1.1.1" - -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: - inherits "^2.0.3" - minimalistic-assert "^1.0.1" - -hex-color-regex@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/hex-color-regex/-/hex-color-regex-1.1.0.tgz#4c06fccb4602fe2602b3c93df82d7e7dbf1a8a8e" - integrity sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ== - -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" - -hosted-git-info@^2.1.4: - version "2.7.1" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.7.1.tgz#97f236977bd6e125408930ff6de3eec6281ec047" - integrity sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w== - -hsl-regex@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/hsl-regex/-/hsl-regex-1.0.0.tgz#d49330c789ed819e276a4c0d272dffa30b18fe6e" - integrity sha1-1JMwx4ntgZ4nakwNJy3/owsY/m4= - -hsla-regex@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/hsla-regex/-/hsla-regex-1.0.0.tgz#c1ce7a3168c8c6614033a4b5f7877f3b225f9c38" - integrity sha1-wc56MWjIxmFAM6S194d/OyJfnDg= - -html-comment-regex@^1.1.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/html-comment-regex/-/html-comment-regex-1.1.2.tgz#97d4688aeb5c81886a364faa0cad1dda14d433a7" - integrity sha512-P+M65QY2JQ5Y0G9KKdlDpo0zK+/OHptU5AaBwUfAIDJZk1MYf32Frm84EcOytfJE0t5JvkAnKlmjsXDnWzCJmQ== - -html-parse-stringify2@2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/html-parse-stringify2/-/html-parse-stringify2-2.0.1.tgz#dc5670b7292ca158b7bc916c9a6735ac8872834a" - integrity sha1-3FZwtyksoVi3vJFsmmc1rIhyg0o= - dependencies: - void-elements "^2.0.1" - -htmlparser2@^3.9.1: - version "3.10.1" - resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.10.1.tgz#bd679dc3f59897b6a34bb10749c855bb53a9392f" - integrity sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ== - dependencies: - domelementtype "^1.3.1" - domhandler "^2.3.0" - domutils "^1.5.1" - entities "^1.1.1" - inherits "^2.0.1" - readable-stream "^3.1.1" - -http-signature@~1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" - integrity sha1-muzZJRFHcvPZW2WmCruPfBj7rOE= - dependencies: - assert-plus "^1.0.0" - jsprim "^1.2.2" - sshpk "^1.7.0" - -husky@^1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/husky/-/husky-1.3.1.tgz#26823e399300388ca2afff11cfa8a86b0033fae0" - integrity sha512-86U6sVVVf4b5NYSZ0yvv88dRgBSSXXmHaiq5pP4KDj5JVzdwKgBjEtUPOm8hcoytezFwbU+7gotXNhpHdystlg== - dependencies: - cosmiconfig "^5.0.7" - execa "^1.0.0" - find-up "^3.0.0" - get-stdin "^6.0.0" - is-ci "^2.0.0" - pkg-dir "^3.0.0" - please-upgrade-node "^3.1.1" - read-pkg "^4.0.1" - run-node "^1.0.0" - slash "^2.0.0" - -i18next-browser-languagedetector@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/i18next-browser-languagedetector/-/i18next-browser-languagedetector-3.0.1.tgz#a47c43176e8412c91e808afb7c6eb5367649aa8e" - integrity sha512-WFjPLNPWl62uu07AHY2g+KsC9qz0tyMq+OZEB/H7N58YKL/JLiCz9U709gaR20Mule/Ppn+uyfVx5REJJjn1HA== - -i18next-conv@9.0.0: - version "9.0.0" - resolved "https://registry.yarnpkg.com/i18next-conv/-/i18next-conv-9.0.0.tgz#af10bc11676eaafc1e8087c1f49208aada6fb8d0" - integrity sha512-PMc4M6N6os2RXFVCmbEsWBFzt7K3UTMGnv3pRbOT3wymPpaO6sOGEaCQU2longLNvC1r3O7kVP4dtjI0zWW3Gg== - dependencies: - bluebird "^3.5.3" - chalk "^2.4.2" - commander "^2.19.0" - gettext-parser "^3.1.0" - mkdirp "^0.5.1" - node-gettext "^2.0.0" - -i18next-locize-backend@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/i18next-locize-backend/-/i18next-locize-backend-2.0.0.tgz#972e3568d84048e4e4da8287b996d46cb121288d" - integrity sha512-Ach/RPYC40qsCBA9wscw25qN46sNqQZXDVqtiX0p+GwrswQw7fkzXdT6K70i9Lg46wRUixblFnbLWQ7xegGYrw== - dependencies: - "@babel/runtime" "^7.4.5" - -i18next@^15.1.3: - version "15.1.3" - resolved "https://registry.yarnpkg.com/i18next/-/i18next-15.1.3.tgz#f1984cbee0e3cb00cff9008b037264289ce8840a" - integrity sha512-hN2DZLoRSY2h/RYeNqth5XxV4N1ekKGSJDCGhFmmuXkOCAfK5CkUG4VBv9OBXrvf93xApv0KKBVrb0zJP31EKg== - dependencies: - "@babel/runtime" "^7.3.1" - -iconv-lite@^0.4.13, iconv-lite@^0.4.24, iconv-lite@~0.4.13: - 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" - -icss-replace-symbols@1.1.0, icss-replace-symbols@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz#06ea6f83679a7749e386cfe1fe812ae5db223ded" - integrity sha1-Bupvg2ead0njhs/h/oEq5dsiPe0= - -idb-wrapper@^1.5.0: - version "1.7.2" - resolved "https://registry.yarnpkg.com/idb-wrapper/-/idb-wrapper-1.7.2.tgz#8251afd5e77fe95568b1c16152eb44b396767ea2" - integrity sha512-zfNREywMuf0NzDo9mVsL0yegjsirJxHpKHvWcyRozIqQy89g0a3U+oBPOCN4cc0oCiOuYgZHimzaW/R46G1Mpg== - -ignore@^4.0.6: - version "4.0.6" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" - integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== - -ignore@^5.0.2: - version "5.1.2" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.2.tgz#e28e584d43ad7e92f96995019cc43b9e1ac49558" - integrity sha512-vdqWBp7MyzdmHkkRWV5nY+PfGRbYbahfuvsBCh277tq+w9zyNi7h5CYJCK0kmzti9kU+O/cB7sE8HvKv6aXAKQ== - -import-cwd@^2.0.0, import-cwd@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/import-cwd/-/import-cwd-2.1.0.tgz#aa6cf36e722761285cb371ec6519f53e2435b0a9" - integrity sha1-qmzzbnInYShcs3HsZRn1PiQ1sKk= - dependencies: - import-from "^2.1.0" - -import-fresh@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-2.0.0.tgz#d81355c15612d386c61f9ddd3922d4304822a546" - integrity sha1-2BNVwVYS04bGH53dOSLUMEgipUY= - dependencies: - caller-path "^2.0.0" - resolve-from "^3.0.0" - -import-fresh@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.0.0.tgz#a3d897f420cab0e671236897f75bc14b4885c390" - integrity sha512-pOnA9tfM3Uwics+SaBLCNyZZZbK+4PTu0OPZtLlMIrv17EdBoC15S9Kn8ckJ9TZTyKb3ywNE5y1yeDxxGA7nTQ== - dependencies: - parent-module "^1.0.0" - resolve-from "^4.0.0" - -import-from@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/import-from/-/import-from-2.1.0.tgz#335db7f2a7affd53aaa471d4b8021dee36b7f3b1" - integrity sha1-M1238qev/VOqpHHUuAId7ja387E= - dependencies: - resolve-from "^3.0.0" - -imurmurhash@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" - integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= - -indent-string@^3.0.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-3.2.0.tgz#4a5fd6d27cc332f37e5419a504dbb837105c9289" - integrity sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok= - -indexes-of@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/indexes-of/-/indexes-of-1.0.1.tgz#f30f716c8e2bd346c7b67d3df3915566a7c05607" - integrity sha1-8w9xbI4r00bHtn0985FVZqfAVgc= - -indexof@~0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/indexof/-/indexof-0.0.1.tgz#82dc336d232b9062179d05ab3293a66059fd435d" - integrity sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10= - -inflight@^1.0.4: - version "1.0.6" - resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" - integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= - dependencies: - once "^1.3.0" - wrappy "1" - -inherits@2, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.1, inherits@~2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" - integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= - -ini@1.3.5: - version "1.3.5" - resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" - integrity sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw== - -inquirer@^6.1.0: - version "6.3.1" - resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-6.3.1.tgz#7a413b5e7950811013a3db491c61d1f3b776e8e7" - integrity sha512-MmL624rfkFt4TG9y/Jvmt8vdmOo836U7Y0Hxr2aFk3RelZEGX4Igk0KabWrcaaZaTv9uzglOqWh1Vly+FAWAXA== - dependencies: - ansi-escapes "^3.2.0" - chalk "^2.4.2" - cli-cursor "^2.1.0" - cli-width "^2.0.0" - external-editor "^3.0.3" - figures "^2.0.0" - lodash "^4.17.11" - mute-stream "0.0.7" - run-async "^2.2.0" - rxjs "^6.4.0" - string-width "^2.1.0" - strip-ansi "^5.1.0" - through "^2.3.6" - -invariant@^2.2.2: - version "2.2.4" - resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" - integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA== - dependencies: - loose-envify "^1.0.0" - -is-absolute-url@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-absolute-url/-/is-absolute-url-2.1.0.tgz#50530dfb84fcc9aa7dbe7852e83a37b93b9f2aa6" - integrity sha1-UFMN+4T8yap9vnhS6Do3uTufKqY= - -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" - integrity sha1-qeEss66Nh2cn7u84Q/igiXtcmNY= - dependencies: - kind-of "^3.0.2" - -is-accessor-descriptor@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656" - integrity sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ== - dependencies: - kind-of "^6.0.0" - -is-arrayish@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" - integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= - -is-arrayish@^0.3.1: - version "0.3.2" - resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.3.2.tgz#4574a2ae56f7ab206896fb431eaeed066fdf8f03" - integrity sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ== - -is-buffer@^1.1.5: - version "1.1.6" - resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" - integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== - -is-buffer@~2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-2.0.3.tgz#4ecf3fcf749cbd1e472689e109ac66261a25e725" - integrity sha512-U15Q7MXTuZlrbymiz95PJpZxu8IlipAp4dtS3wOdgPXx3mqBnslrWU14kxfHB+Py/+2PVKSr37dMAgM2A4uArw== - -is-callable@^1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.4.tgz#1e1adf219e1eeb684d691f9d6a05ff0d30a24d75" - integrity sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA== - -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-color-stop@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-color-stop/-/is-color-stop-1.1.0.tgz#cfff471aee4dd5c9e158598fbe12967b5cdad345" - integrity sha1-z/9HGu5N1cnhWFmPvhKWe1za00U= - dependencies: - css-color-names "^0.0.4" - hex-color-regex "^1.1.0" - hsl-regex "^1.0.0" - hsla-regex "^1.0.0" - rgb-regex "^1.0.1" - rgba-regex "^1.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" - integrity sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y= - dependencies: - kind-of "^3.0.2" - -is-data-descriptor@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7" - integrity sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ== - dependencies: - kind-of "^6.0.0" - -is-date-object@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.1.tgz#9aa20eb6aeebbff77fbd33e74ca01b33581d3a16" - integrity sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY= - -is-descriptor@^0.1.0: - version "0.1.6" - resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca" - integrity sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg== - dependencies: - is-accessor-descriptor "^0.1.6" - is-data-descriptor "^0.1.4" - kind-of "^5.0.0" - -is-descriptor@^1.0.0, is-descriptor@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec" - integrity sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg== - dependencies: - is-accessor-descriptor "^1.0.0" - is-data-descriptor "^1.0.0" - kind-of "^6.0.2" - -is-directory@^0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/is-directory/-/is-directory-0.3.1.tgz#61339b6f2475fc772fd9c9d83f5c8575dc154ae1" - integrity sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE= - -is-extendable@^0.1.0, is-extendable@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" - integrity sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik= - -is-extendable@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4" - integrity sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA== - dependencies: - is-plain-object "^2.0.4" - -is-extglob@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" - integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= - -is-fullwidth-code-point@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" - integrity sha1-754xOG8DGn8NZDr4L95QxFfvAMs= - dependencies: - number-is-nan "^1.0.0" - -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" - integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= - -is-glob@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" - integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== - dependencies: - is-extglob "^2.1.1" - -is-module@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-module/-/is-module-1.0.0.tgz#3258fb69f78c14d5b815d664336b4cffb6441591" - integrity sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE= - -is-number@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" - integrity sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU= - dependencies: - kind-of "^3.0.2" - -is-obj@^1.0.0, is-obj@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" - integrity sha1-PkcprB9f3gJc19g6iW2rn09n2w8= - -is-object@~0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/is-object/-/is-object-0.1.2.tgz#00efbc08816c33cfc4ac8251d132e10dc65098d7" - integrity sha1-AO+8CIFsM8/ErIJR0TLhDcZQmNc= - -is-observable@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-observable/-/is-observable-1.1.0.tgz#b3e986c8f44de950867cab5403f5a3465005975e" - integrity sha512-NqCa4Sa2d+u7BWc6CukaObG3Fh+CU9bvixbpcXYhy2VvYS7vVGIdAgnIS5Ks3A/cqk4rebLJ9s8zBstT2aKnIA== - dependencies: - symbol-observable "^1.1.0" - -is-path-cwd@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-1.0.0.tgz#d225ec23132e89edd38fda767472e62e65f1106d" - integrity sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0= - -is-path-in-cwd@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz#5ac48b345ef675339bd6c7a48a912110b241cf52" - integrity sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ== - dependencies: - is-path-inside "^1.0.0" - -is-path-inside@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-1.0.1.tgz#8ef5b7de50437a3fdca6b4e865ef7aa55cb48036" - integrity sha1-jvW33lBDej/cprToZe96pVy0gDY= - dependencies: - path-is-inside "^1.0.1" - -is-plain-object@^2.0.1, is-plain-object@^2.0.3, is-plain-object@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" - integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== - dependencies: - isobject "^3.0.1" - -is-promise@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa" - integrity sha1-eaKp7OfwlugPNtKy87wWwf9L8/o= - -is-regex@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.4.tgz#5517489b547091b0930e095654ced25ee97e9491" - integrity sha1-VRdIm1RwkbCTDglWVM7SXul+lJE= - dependencies: - has "^1.0.1" - -is-regexp@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-regexp/-/is-regexp-1.0.0.tgz#fd2d883545c46bac5a633e7b9a09e87fa2cb5069" - integrity sha1-/S2INUXEa6xaYz57mgnof6LLUGk= - -is-resolvable@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-resolvable/-/is-resolvable-1.1.0.tgz#fb18f87ce1feb925169c9a407c19318a3206ed88" - integrity sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg== - -is-stream@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" - integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= - -is-stream@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.0.tgz#bde9c32680d6fae04129d6ac9d921ce7815f78e3" - integrity sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw== - -is-svg@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-svg/-/is-svg-3.0.0.tgz#9321dbd29c212e5ca99c4fa9794c714bcafa2f75" - integrity sha512-gi4iHK53LR2ujhLVVj+37Ykh9GLqYHX6JOVXbLAucaG/Cqw9xwdFOjDM2qeifLs1sF1npXXFvDu0r5HNgCMrzQ== - dependencies: - html-comment-regex "^1.1.0" - -is-symbol@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.2.tgz#a055f6ae57192caee329e7a860118b497a950f38" - integrity sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw== - dependencies: - has-symbols "^1.0.0" - -is-typedarray@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" - integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= - -is-windows@^1.0.0, is-windows@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" - integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== - -is@~0.2.6: - version "0.2.7" - resolved "https://registry.yarnpkg.com/is/-/is-0.2.7.tgz#3b34a2c48f359972f35042849193ae7264b63562" - integrity sha1-OzSixI81mXLzUEKEkZOucmS2NWI= - -isarray@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" - integrity sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8= - -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" - integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= - -isbuffer@~0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/isbuffer/-/isbuffer-0.0.0.tgz#38c146d9df528b8bf9b0701c3d43cf12df3fc39b" - integrity sha1-OMFG2d9Si4v5sHAcPUPPEt8/w5s= - -isexe@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" - integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= - -isobject@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" - integrity sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk= - dependencies: - isarray "1.0.0" - -isobject@^3.0.0, isobject@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" - integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8= - -isstream@~0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" - integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo= - -js-levenshtein@^1.1.3: - version "1.1.6" - resolved "https://registry.yarnpkg.com/js-levenshtein/-/js-levenshtein-1.1.6.tgz#c6cee58eb3550372df8deb85fad5ce66ce01d59d" - integrity sha512-X2BB11YZtrRqY4EnQcLX5Rh373zbK4alC1FW7D7MBhL2gtcC17cTnr6DmfHZeS0s2rTHjUTMMHfG7gO8SSdw+g== - -"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" - integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== - -js-yaml@3.13.1, js-yaml@^3.12.0, js-yaml@^3.13.1, js-yaml@^3.9.0: - 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" - -jsbn@~0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" - integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM= - -jsesc@^2.5.1: - version "2.5.2" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" - integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== - -jsesc@~0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" - integrity sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0= - -json-parse-better-errors@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" - integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== - -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" - integrity sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM= - -json-stable-stringify-without-jsonify@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" - integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= - -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" - integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= - -json5@^0.5.0: - version "0.5.1" - resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821" - integrity sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE= - -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" - -jsprim@^1.2.2: - version "1.4.1" - resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" - integrity sha1-MT5mvB5cwG5Di8G3SZwuXFastqI= - dependencies: - assert-plus "1.0.0" - extsprintf "1.3.0" - json-schema "0.2.3" - verror "1.10.0" - -jsx-ast-utils@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-2.1.0.tgz#0ee4e2c971fb9601c67b5641b71be80faecf0b36" - integrity sha512-yDGDG2DS4JcqhA6blsuYbtsT09xL8AoLuUR2Gb5exrw7UEM19sBcOTq+YBBhrNbl0PUC4R4LnFu+dHg2HKeVvA== - dependencies: - array-includes "^3.0.3" - -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" - integrity sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ= - dependencies: - is-buffer "^1.1.5" - -kind-of@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" - integrity sha1-IIE989cSkosgc3hpGkUGb65y3Vc= - dependencies: - is-buffer "^1.1.5" - -kind-of@^5.0.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d" - integrity sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw== - -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" - integrity sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA== - -laravelphp@1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/laravelphp/-/laravelphp-1.1.0.tgz#2664ed3640680f7ce14434a4ec0630435ffbe1df" - integrity sha512-nnQtmPrqfvfaXsrfZ4mKX/uFDtaeK8ZInyjVuJekp7vloeHpvAXw/Q7cLN4QMa+SB6KMT91dfq2q2BG0Xc8SMQ== - dependencies: - php-parser "3.0.0-prerelease.7" - -level-blobs@^0.1.7: - version "0.1.7" - resolved "https://registry.yarnpkg.com/level-blobs/-/level-blobs-0.1.7.tgz#9ab9b97bb99f1edbf9f78a3433e21ed56386bdaf" - integrity sha1-mrm5e7mfHtv594o0M+Ie1WOGva8= - dependencies: - level-peek "1.0.6" - once "^1.3.0" - readable-stream "^1.0.26-4" - -level-filesystem@^1.0.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/level-filesystem/-/level-filesystem-1.2.0.tgz#a00aca9919c4a4dfafdca6a8108d225aadff63b3" - integrity sha1-oArKmRnEpN+v3KaoEI0iWq3/Y7M= - dependencies: - concat-stream "^1.4.4" - errno "^0.1.1" - fwd-stream "^1.0.4" - level-blobs "^0.1.7" - level-peek "^1.0.6" - level-sublevel "^5.2.0" - octal "^1.0.0" - once "^1.3.0" - xtend "^2.2.0" - -level-fix-range@2.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/level-fix-range/-/level-fix-range-2.0.0.tgz#c417d62159442151a19d9a2367868f1724c2d548" - integrity sha1-xBfWIVlEIVGhnZojZ4aPFyTC1Ug= - dependencies: - clone "~0.1.9" - -level-fix-range@~1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/level-fix-range/-/level-fix-range-1.0.2.tgz#bf15b915ae36d8470c821e883ddf79cd16420828" - integrity sha1-vxW5Fa422EcMgh6IPd95zRZCCCg= - -"level-hooks@>=4.4.0 <5": - version "4.5.0" - resolved "https://registry.yarnpkg.com/level-hooks/-/level-hooks-4.5.0.tgz#1b9ae61922930f3305d1a61fc4d83c8102c0dd93" - integrity sha1-G5rmGSKTDzMF0aYfxNg8gQLA3ZM= - dependencies: - string-range "~1.2" - -level-js@^2.1.3: - version "2.2.4" - resolved "https://registry.yarnpkg.com/level-js/-/level-js-2.2.4.tgz#bc055f4180635d4489b561c9486fa370e8c11697" - integrity sha1-vAVfQYBjXUSJtWHJSG+jcOjBFpc= - dependencies: - abstract-leveldown "~0.12.0" - idb-wrapper "^1.5.0" - isbuffer "~0.0.0" - ltgt "^2.1.2" - typedarray-to-buffer "~1.0.0" - xtend "~2.1.2" - -level-peek@1.0.6, level-peek@^1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/level-peek/-/level-peek-1.0.6.tgz#bec51c72a82ee464d336434c7c876c3fcbcce77f" - integrity sha1-vsUccqgu5GTTNkNMfIdsP8vM538= - dependencies: - level-fix-range "~1.0.2" - -level-sublevel@^5.2.0: - version "5.2.3" - resolved "https://registry.yarnpkg.com/level-sublevel/-/level-sublevel-5.2.3.tgz#744c12c72d2e72be78dde3b9b5cd84d62191413a" - integrity sha1-dEwSxy0ucr543eO5tc2E1iGRQTo= - dependencies: - level-fix-range "2.0" - level-hooks ">=4.4.0 <5" - string-range "~1.2.1" - xtend "~2.0.4" - -levelup@^0.18.2: - version "0.18.6" - resolved "https://registry.yarnpkg.com/levelup/-/levelup-0.18.6.tgz#e6a01cb089616c8ecc0291c2a9bd3f0c44e3e5eb" - integrity sha1-5qAcsIlhbI7MApHCqb0/DETj5es= - dependencies: - bl "~0.8.1" - deferred-leveldown "~0.2.0" - errno "~0.1.1" - prr "~0.0.0" - readable-stream "~1.0.26" - semver "~2.3.1" - xtend "~3.0.0" - -levn@^0.3.0, levn@~0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" - integrity sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4= - dependencies: - prelude-ls "~1.1.2" - type-check "~0.3.2" - -lint-staged@^8.1.0: - version "8.1.7" - resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-8.1.7.tgz#a8988bc83bdffa97d04adb09dbc0b1f3a58fa6fc" - integrity sha512-egT0goFhIFoOGk6rasPngTFh2qDqxZddM0PwI58oi66RxCDcn5uDwxmiasWIF0qGnchHSYVJ8HPRD5LrFo7TKA== - dependencies: - chalk "^2.3.1" - commander "^2.14.1" - cosmiconfig "^5.2.0" - debug "^3.1.0" - dedent "^0.7.0" - del "^3.0.0" - execa "^1.0.0" - find-parent-dir "^0.3.0" - g-status "^2.0.2" - is-glob "^4.0.0" - is-windows "^1.0.2" - listr "^0.14.2" - listr-update-renderer "^0.5.0" - lodash "^4.17.11" - log-symbols "^2.2.0" - micromatch "^3.1.8" - npm-which "^3.0.1" - p-map "^1.1.1" - path-is-inside "^1.0.2" - pify "^3.0.0" - please-upgrade-node "^3.0.2" - staged-git-files "1.1.2" - string-argv "^0.0.2" - stringify-object "^3.2.2" - yup "^0.27.0" - -listr-silent-renderer@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/listr-silent-renderer/-/listr-silent-renderer-1.1.1.tgz#924b5a3757153770bf1a8e3fbf74b8bbf3f9242e" - integrity sha1-kktaN1cVN3C/Go4/v3S4u/P5JC4= - -listr-update-renderer@^0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/listr-update-renderer/-/listr-update-renderer-0.5.0.tgz#4ea8368548a7b8aecb7e06d8c95cb45ae2ede6a2" - integrity sha512-tKRsZpKz8GSGqoI/+caPmfrypiaq+OQCbd+CovEC24uk1h952lVj5sC7SqyFUm+OaJ5HN/a1YLt5cit2FMNsFA== - dependencies: - chalk "^1.1.3" - cli-truncate "^0.2.1" - elegant-spinner "^1.0.1" - figures "^1.7.0" - indent-string "^3.0.0" - log-symbols "^1.0.2" - log-update "^2.3.0" - strip-ansi "^3.0.1" - -listr-verbose-renderer@^0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/listr-verbose-renderer/-/listr-verbose-renderer-0.5.0.tgz#f1132167535ea4c1261102b9f28dac7cba1e03db" - integrity sha512-04PDPqSlsqIOaaaGZ+41vq5FejI9auqTInicFRndCBgE3bXG8D6W1I+mWhk+1nqbHmyhla/6BUrd5OSiHwKRXw== - dependencies: - chalk "^2.4.1" - cli-cursor "^2.1.0" - date-fns "^1.27.2" - figures "^2.0.0" - -listr@^0.14.2: - version "0.14.3" - resolved "https://registry.yarnpkg.com/listr/-/listr-0.14.3.tgz#2fea909604e434be464c50bddba0d496928fa586" - integrity sha512-RmAl7su35BFd/xoMamRjpIE4j3v+L28o8CT5YhAXQJm1fD+1l9ngXY8JAQRJ+tFK2i5njvi0iRUKV09vPwA0iA== - dependencies: - "@samverschueren/stream-to-observable" "^0.3.0" - is-observable "^1.1.0" - is-promise "^2.1.0" - is-stream "^1.1.0" - listr-silent-renderer "^1.1.1" - listr-update-renderer "^0.5.0" - listr-verbose-renderer "^0.5.0" - p-map "^2.0.0" - rxjs "^6.3.3" - -load-json-file@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-2.0.0.tgz#7947e42149af80d696cbf797bcaabcfe1fe29ca8" - integrity sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg= - dependencies: - graceful-fs "^4.1.2" - parse-json "^2.2.0" - pify "^2.0.0" - strip-bom "^3.0.0" - -loader-utils@^0.2.16: - version "0.2.17" - resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-0.2.17.tgz#f86e6374d43205a6e6c60e9196f17c0299bfb348" - integrity sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g= - dependencies: - big.js "^3.1.3" - emojis-list "^2.0.0" - json5 "^0.5.0" - object-assign "^4.0.1" - -locate-path@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" - integrity sha1-K1aLJl7slExtnA3pw9u7ygNUzY4= - dependencies: - p-locate "^2.0.0" - path-exists "^3.0.0" - -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: - p-locate "^3.0.0" - path-exists "^3.0.0" - -locize-cli@^4.8.0: - version "4.8.0" - resolved "https://registry.yarnpkg.com/locize-cli/-/locize-cli-4.8.0.tgz#60d156760239c561f55bfb0932ba93c9393107eb" - integrity sha512-8O29AgRTan7pl2hZAxLsfv+cNLfZqFxHyILkve+/UC+ahqh4vgmmdl/uXmKXYseVcsMNOHxsQ4KuW4VKJ6N7uw== - dependencies: - "@js.properties/properties" "0.4.0" - android-string-resource "1.2.1" - async "2.6.2" - colors "1.3.3" - commander "2.20.0" - csvjson "5.1.0" - diff "4.0.1" - flat "4.1.0" - fluent_conv "1.1.1" - i18next-conv "9.0.0" - ini "1.3.5" - js-yaml "3.13.1" - laravelphp "1.1.0" - lodash.clonedeep "4.5.0" - mkdirp "0.5.1" - request "2.88.0" - resx "1.2.0" - rimraf "2.6.3" - strings-file "0.0.5" - tmexchange "1.2.0" - xliff "4.3.1" - xlsx "0.14.3" - -locize-editor@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/locize-editor/-/locize-editor-2.0.0.tgz#3295e3a29950810bb273ca2c8eab2159a9ac30b9" - integrity sha512-EiYnuTV4p++nhCuriIcwngG0/09HDD7w9AZQCVdFvx5uTtjMidbdsH7ftrvmuyng/fqGdZWtMB9S7Lo6ix9BeQ== - dependencies: - "@babel/runtime" "^7.4.5" - -locize-lastused@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/locize-lastused/-/locize-lastused-1.1.0.tgz#f8fdb146faff2340ec8704115760cfb59e6dd8e3" - integrity sha512-5vaBRMPRzmrS28JLDLUjozgws173OFaWgQKpPFtjVF9dp3AXD7SrVOyPaIVPhsd6F1fPlZAlL0TBLqz/hm6ClQ== - -lodash.assignin@^4.0.9: - version "4.2.0" - resolved "https://registry.yarnpkg.com/lodash.assignin/-/lodash.assignin-4.2.0.tgz#ba8df5fb841eb0a3e8044232b0e263a8dc6a28a2" - integrity sha1-uo31+4QesKPoBEIysOJjqNxqKKI= - -lodash.bind@^4.1.4: - version "4.2.1" - resolved "https://registry.yarnpkg.com/lodash.bind/-/lodash.bind-4.2.1.tgz#7ae3017e939622ac31b7d7d7dcb1b34db1690d35" - integrity sha1-euMBfpOWIqwxt9fX3LGzTbFpDTU= - -lodash.camelcase@^4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6" - integrity sha1-soqmKIorn8ZRA1x3EfZathkDMaY= - -lodash.clonedeep@4.5.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef" - integrity sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8= - -lodash.defaults@^4.0.1: - version "4.2.0" - resolved "https://registry.yarnpkg.com/lodash.defaults/-/lodash.defaults-4.2.0.tgz#d09178716ffea4dde9e5fb7b37f6f0802274580c" - integrity sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw= - -lodash.filter@^4.4.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/lodash.filter/-/lodash.filter-4.6.0.tgz#668b1d4981603ae1cc5a6fa760143e480b4c4ace" - integrity sha1-ZosdSYFgOuHMWm+nYBQ+SAtMSs4= - -lodash.flatten@^4.2.0: - version "4.4.0" - resolved "https://registry.yarnpkg.com/lodash.flatten/-/lodash.flatten-4.4.0.tgz#f31c22225a9632d2bbf8e4addbef240aa765a61f" - integrity sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8= - -lodash.foreach@^4.3.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/lodash.foreach/-/lodash.foreach-4.5.0.tgz#1a6a35eace401280c7f06dddec35165ab27e3e53" - integrity sha1-Gmo16s5AEoDH8G3d7DUWWrJ+PlM= - -lodash.get@^4.4.2: - version "4.4.2" - resolved "https://registry.yarnpkg.com/lodash.get/-/lodash.get-4.4.2.tgz#2d177f652fa31e939b4438d5341499dfa3825e99" - integrity sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk= - -lodash.map@^4.4.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/lodash.map/-/lodash.map-4.6.0.tgz#771ec7839e3473d9c4cde28b19394c3562f4f6d3" - integrity sha1-dx7Hg540c9nEzeKLGTlMNWL09tM= - -lodash.memoize@^4.1.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" - integrity sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4= - -lodash.merge@^4.4.0: - version "4.6.2" - resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" - integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== - -lodash.pick@^4.2.1: - version "4.4.0" - resolved "https://registry.yarnpkg.com/lodash.pick/-/lodash.pick-4.4.0.tgz#52f05610fff9ded422611441ed1fc123a03001b3" - integrity sha1-UvBWEP/53tQiYRRB7R/BI6AwAbM= - -lodash.reduce@^4.4.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/lodash.reduce/-/lodash.reduce-4.6.0.tgz#f1ab6b839299ad48f784abbf476596f03b914d3b" - integrity sha1-8atrg5KZrUj3hKu/R2WW8DuRTTs= - -lodash.reject@^4.4.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/lodash.reject/-/lodash.reject-4.6.0.tgz#80d6492dc1470864bbf583533b651f42a9f52415" - integrity sha1-gNZJLcFHCGS79YNTO2UfQqn1JBU= - -lodash.some@^4.4.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/lodash.some/-/lodash.some-4.6.0.tgz#1bb9f314ef6b8baded13b549169b2a945eb68e4d" - integrity sha1-G7nzFO9ri63tE7VJFpsqlF62jk0= - -lodash.uniq@^4.5.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" - integrity sha1-0CJTc662Uq3BvILklFM5qEJ1R3M= - -lodash@^4.17.11, lodash@^4.17.5: - version "4.17.11" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.11.tgz#b39ea6229ef607ecd89e2c8df12536891cac9b8d" - integrity sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg== - -log-symbols@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-1.0.2.tgz#376ff7b58ea3086a0f09facc74617eca501e1a18" - integrity sha1-N2/3tY6jCGoPCfrMdGF+ylAeGhg= - dependencies: - chalk "^1.0.0" - -log-symbols@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-2.2.0.tgz#5740e1c5d6f0dfda4ad9323b5332107ef6b4c40a" - integrity sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg== - dependencies: - chalk "^2.0.1" - -log-update@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/log-update/-/log-update-2.3.0.tgz#88328fd7d1ce7938b29283746f0b1bc126b24708" - integrity sha1-iDKP19HOeTiykoN0bwsbwSayRwg= - dependencies: - ansi-escapes "^3.0.0" - cli-cursor "^2.0.0" - wrap-ansi "^3.0.1" - -loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" - integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== - dependencies: - js-tokens "^3.0.0 || ^4.0.0" - -ltgt@^2.1.2: - version "2.2.1" - resolved "https://registry.yarnpkg.com/ltgt/-/ltgt-2.2.1.tgz#f35ca91c493f7b73da0e07495304f17b31f87ee5" - integrity sha1-81ypHEk/e3PaDgdJUwTxezH4fuU= - -magic-string@^0.25.2: - version "0.25.2" - resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.25.2.tgz#139c3a729515ec55e96e69e82a11fe890a293ad9" - integrity sha512-iLs9mPjh9IuTtRsqqhNGYcZXGei0Nh/A4xirrsqW7c+QhKVFL2vm7U09ru6cHRD22azaP/wMDgI+HCqbETMTtg== - dependencies: - sourcemap-codec "^1.4.4" - -map-cache@^0.2.2: - version "0.2.2" - resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" - integrity sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8= - -map-visit@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" - integrity sha1-7Nyo8TFE5mDxtb1B8S80edmN+48= - dependencies: - object-visit "^1.0.0" - -matcher@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/matcher/-/matcher-1.1.1.tgz#51d8301e138f840982b338b116bb0c09af62c1c2" - integrity sha512-+BmqxWIubKTRKNWx/ahnCkk3mG8m7OturVlqq6HiojGJTd5hVYbgZm6WzcYPCoB+KBT4Vd6R7WSRG2OADNaCjg== - dependencies: - escape-string-regexp "^1.0.4" - -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" - -mdn-data@~1.1.0: - version "1.1.4" - resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-1.1.4.tgz#50b5d4ffc4575276573c4eedb8780812a8419f01" - integrity sha512-FSYbp3lyKjyj3E7fMl6rYvUdX0FBXaluGqlFoYESWQlyUTq8R+wp0rkFxoYFqZlHCvsUXGjyJmLQSnXToYhOSA== - -micromatch@^3.1.8: - version "3.1.10" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" - integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg== - dependencies: - arr-diff "^4.0.0" - array-unique "^0.3.2" - braces "^2.3.1" - define-property "^2.0.2" - extend-shallow "^3.0.2" - extglob "^2.0.4" - fragment-cache "^0.2.1" - kind-of "^6.0.2" - nanomatch "^1.2.9" - object.pick "^1.3.0" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.2" - -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.40.0: - version "1.40.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.40.0.tgz#a65057e998db090f732a68f6c276d387d4126c32" - integrity sha512-jYdeOMPy9vnxEqFRRo6ZvTZ8d9oPb+k18PKoYNYUe2stVEBPPwsln/qWzdbmaIvnhZ9v2P+CuecK+fpUfsV2mA== - -mime-types@^2.1.12, mime-types@~2.1.19: - version "2.1.24" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.24.tgz#b6f8d0b3e951efb77dedeca194cff6d16f676f81" - integrity sha512-WaFHS3MCl5fapm3oLxU4eYDw77IQM2ACcxQ9RIxfaC3ooc6PFuBMGZZsYpvoXS5D5QTWPieo1jjLdAm3TBP3cQ== - dependencies: - mime-db "1.40.0" - -mime@^2.3.1: - version "2.4.3" - resolved "https://registry.yarnpkg.com/mime/-/mime-2.4.3.tgz#229687331e86f68924e6cb59e1cdd937f18275fe" - integrity sha512-QgrPRJfE+riq5TPZMcHZOtm8c6K/yYrMbKIoRfapfiGLxS8OTeIfRhUGW5LU7MlRa52KOAGCfUNruqLrIBvWZw== - -mimic-fn@^1.0.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" - integrity sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ== - -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.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" - integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== - dependencies: - brace-expansion "^1.1.7" - -minimist@0.0.8: - version "0.0.8" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" - integrity sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0= - -minimist@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" - integrity sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ= - -mixin-deep@^1.2.0: - version "1.3.1" - resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.1.tgz#a49e7268dce1a0d9698e45326c5626df3543d0fe" - integrity sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ== - dependencies: - for-in "^1.0.2" - is-extendable "^1.0.1" - -mkdirp@0.5.1, mkdirp@^0.5.1, mkdirp@~0.5.1: - version "0.5.1" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" - integrity sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM= - dependencies: - minimist "0.0.8" - -mkpath@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/mkpath/-/mkpath-1.0.0.tgz#ebb3a977e7af1c683ae6fda12b545a6ba6c5853d" - integrity sha1-67Opd+evHGg65v2hK1Raa6bFhT0= - -ms@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" - integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= - -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== - -mute-stream@0.0.7: - version "0.0.7" - resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" - integrity sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s= - -nanomatch@^1.2.9: - version "1.2.13" - resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" - integrity sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA== - dependencies: - arr-diff "^4.0.0" - array-unique "^0.3.2" - define-property "^2.0.2" - extend-shallow "^3.0.2" - fragment-cache "^0.2.1" - is-windows "^1.0.2" - kind-of "^6.0.2" - object.pick "^1.3.0" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.1" - -natural-compare@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" - integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= - -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-gettext@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/node-gettext/-/node-gettext-2.0.0.tgz#f1dc1237cdc546f51593da340304b8beba5b8525" - integrity sha1-8dwSN83FRvUVk9o0AwS4vrpbhSU= - dependencies: - lodash.get "^4.4.2" - -node-releases@^1.1.21: - version "1.1.22" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.22.tgz#d90cd5adc59ab9b0f377d4f532b09656399c88bf" - integrity sha512-O6XpteBuntW1j86mw6LlovBIwTe+sO2+7vi9avQffNeIW4upgnaCVm6xrBWH+KATz7mNNRNNeEpuWB7dT6Cr3w== - dependencies: - semver "^5.3.0" - -normalize-package-data@^2.3.2: - version "2.5.0" - resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" - integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== - dependencies: - hosted-git-info "^2.1.4" - resolve "^1.10.0" - semver "2 || 3 || 4 || 5" - validate-npm-package-license "^3.0.1" - -normalize-url@^3.0.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-3.3.0.tgz#b2e1c4dc4f7c6d57743df733a4f5978d18650559" - integrity sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg== - -npm-path@^2.0.2: - version "2.0.4" - resolved "https://registry.yarnpkg.com/npm-path/-/npm-path-2.0.4.tgz#c641347a5ff9d6a09e4d9bce5580c4f505278e64" - integrity sha512-IFsj0R9C7ZdR5cP+ET342q77uSRdtWOlWpih5eC+lu29tIDbNEgDbzgVJ5UFvYHWhxDZ5TFkJafFioO0pPQjCw== - dependencies: - which "^1.2.10" - -npm-run-path@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" - integrity sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8= - dependencies: - path-key "^2.0.0" - -npm-which@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/npm-which/-/npm-which-3.0.1.tgz#9225f26ec3a285c209cae67c3b11a6b4ab7140aa" - integrity sha1-kiXybsOihcIJyuZ8OxGmtKtxQKo= - dependencies: - commander "^2.9.0" - npm-path "^2.0.2" - which "^1.2.10" - -nth-check@^1.0.2, nth-check@~1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-1.0.2.tgz#b2bd295c37e3dd58a3bf0700376663ba4d9cf05c" - integrity sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg== - dependencies: - boolbase "~1.0.0" - -number-is-nan@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" - integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0= - -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.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" - integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= - -object-copy@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c" - integrity sha1-fn2Fi3gb18mRpBupde04EnVOmYw= - dependencies: - copy-descriptor "^0.1.0" - define-property "^0.2.5" - kind-of "^3.0.3" - -object-keys@^1.0.12: - version "1.1.1" - resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" - integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== - -object-keys@~0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-0.2.0.tgz#cddec02998b091be42bf1035ae32e49f1cb6ea67" - integrity sha1-zd7AKZiwkb5CvxA1rjLknxy26mc= - dependencies: - foreach "~2.0.1" - indexof "~0.0.1" - is "~0.2.6" - -object-keys@~0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-0.4.0.tgz#28a6aae7428dd2c3a92f3d95f21335dd204e0336" - integrity sha1-KKaq50KN0sOpLz2V8hM13SBOAzY= - -object-visit@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" - integrity sha1-95xEk68MU3e1n+OdOV5BBC3QRbs= - dependencies: - isobject "^3.0.0" - -object.fromentries@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.0.tgz#49a543d92151f8277b3ac9600f1e930b189d30ab" - integrity sha512-9iLiI6H083uiqUuvzyY6qrlmc/Gz8hLQFOcb/Ri/0xXFkSNS3ctV+CbE6yM2+AnkYfOB3dGjdzC0wrMLIhQICA== - dependencies: - define-properties "^1.1.2" - es-abstract "^1.11.0" - function-bind "^1.1.1" - has "^1.0.1" - -object.getownpropertydescriptors@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz#8758c846f5b407adab0f236e0986f14b051caa16" - integrity sha1-h1jIRvW0B62rDyNuCYbxSwUcqhY= - dependencies: - define-properties "^1.1.2" - es-abstract "^1.5.1" - -object.pick@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" - integrity sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c= - dependencies: - isobject "^3.0.1" - -object.values@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.0.tgz#bf6810ef5da3e5325790eaaa2be213ea84624da9" - integrity sha512-8mf0nKLAoFX6VlNVdhGj31SVYpaNFtUnuoOXWyFEstsWRgU837AK+JYM0iAxwkSzGRbwn8cbFmgbyxj1j4VbXg== - dependencies: - define-properties "^1.1.3" - es-abstract "^1.12.0" - function-bind "^1.1.1" - has "^1.0.3" - -obop@^0.0.12: - version "0.0.12" - resolved "https://registry.yarnpkg.com/obop/-/obop-0.0.12.tgz#b0ec659f05a499a3f6e625287bb7817420f0f539" - integrity sha1-sOxlnwWkmaP25iUoe7eBdCDw9Tk= - -octal@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/octal/-/octal-1.0.0.tgz#63e7162a68efbeb9e213588d58e989d1e5c4530b" - integrity sha1-Y+cWKmjvvrniE1iNWOmJ0eXEUws= - -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" - integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= - dependencies: - wrappy "1" - -onetime@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4" - integrity sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ= - dependencies: - mimic-fn "^1.0.0" - -optionator@^0.8.2: - version "0.8.2" - resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.2.tgz#364c5e409d3f4d6301d6c0b4c05bba50180aeb64" - integrity sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q= - dependencies: - deep-is "~0.1.3" - fast-levenshtein "~2.0.4" - levn "~0.3.0" - prelude-ls "~1.1.2" - type-check "~0.3.2" - wordwrap "~1.0.0" - -os-tmpdir@~1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" - integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= - -p-finally@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" - integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4= - -p-limit@^1.1.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" - integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q== - 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" - integrity sha1-IKAQOyIqcMj9OcwuWAaA893l7EM= - 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" - integrity sha512-r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA== - -p-map@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/p-map/-/p-map-2.1.0.tgz#310928feef9c9ecc65b68b17693018a665cea175" - integrity sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw== - -p-queue@^2.4.2: - version "2.4.2" - resolved "https://registry.yarnpkg.com/p-queue/-/p-queue-2.4.2.tgz#03609826682b743be9a22dba25051bd46724fc34" - integrity sha512-n8/y+yDJwBjoLQe1GSJbbaYQLTI7QHNZI2+rpmCDbe++WLf9HC3gf6iqj5yfPAV71W4UF3ql5W1+UBPXoXTxng== - -p-try@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" - integrity sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M= - -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== - -parent-module@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" - integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== - dependencies: - callsites "^3.0.0" - -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-json@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" - integrity sha1-9ID0BDTvgHQfhGkJn43qGPVaTck= - 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" - -pascalcase@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" - integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ= - -path-exists@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" - integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU= - -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" - integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= - -path-is-inside@^1.0.1, path-is-inside@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" - integrity sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM= - -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" - integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= - -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== - -path-type@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-2.0.0.tgz#f012ccb8415b7096fc2daa1054c3d72389594c73" - integrity sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM= - dependencies: - pify "^2.0.0" - -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" - integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= - -php-parser@3.0.0-prerelease.7: - version "3.0.0-prerelease.7" - resolved "https://registry.yarnpkg.com/php-parser/-/php-parser-3.0.0-prerelease.7.tgz#1a90d55e43af69588042f6d5169d5d335af739e1" - integrity sha512-ePXNo4QDDL5SNF2d7r4mpZGWTfH38vLApdoqmPiIfbgBZE49s/oHO6hZyvQCWdRWSZ4qarFWrOD5G0EXolL20Q== - -pify@^2.0.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" - integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw= - -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= - -pinkie-promise@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" - integrity sha1-ITXW36ejWMBprJsXh3YogihFD/o= - dependencies: - pinkie "^2.0.0" - -pinkie@^2.0.0: - version "2.0.4" - resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" - integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA= - -pkg-dir@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-2.0.0.tgz#f6d5d1109e19d63edf428e0bd57e12777615334b" - integrity sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s= - dependencies: - find-up "^2.1.0" - -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: - find-up "^3.0.0" - -please-upgrade-node@^3.0.2, please-upgrade-node@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/please-upgrade-node/-/please-upgrade-node-3.1.1.tgz#ed320051dfcc5024fae696712c8288993595e8ac" - integrity sha512-KY1uHnQ2NlQHqIJQpnh/i54rKkuxCEBx+voJIS/Mvb+L2iYd2NMotwduhKTMjfC1uKoX3VXOxLjIYG66dfJTVQ== - dependencies: - semver-compare "^1.0.0" - -posix-character-classes@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" - integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs= - -postcss-calc@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/postcss-calc/-/postcss-calc-7.0.1.tgz#36d77bab023b0ecbb9789d84dcb23c4941145436" - integrity sha512-oXqx0m6tb4N3JGdmeMSc/i91KppbYsFZKdH0xMOqK8V1rJlzrKlTdokz8ozUXLVejydRN6u2IddxpcijRj2FqQ== - dependencies: - css-unit-converter "^1.1.1" - postcss "^7.0.5" - postcss-selector-parser "^5.0.0-rc.4" - postcss-value-parser "^3.3.1" - -postcss-colormin@^4.0.3: - version "4.0.3" - resolved "https://registry.yarnpkg.com/postcss-colormin/-/postcss-colormin-4.0.3.tgz#ae060bce93ed794ac71264f08132d550956bd381" - integrity sha512-WyQFAdDZpExQh32j0U0feWisZ0dmOtPl44qYmJKkq9xFWY3p+4qnRzCHeNrkeRhwPHz9bQ3mo0/yVkaply0MNw== - dependencies: - browserslist "^4.0.0" - color "^3.0.0" - has "^1.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - -postcss-convert-values@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-convert-values/-/postcss-convert-values-4.0.1.tgz#ca3813ed4da0f812f9d43703584e449ebe189a7f" - integrity sha512-Kisdo1y77KUC0Jmn0OXU/COOJbzM8cImvw1ZFsBgBgMgb1iL23Zs/LXRe3r+EZqM3vGYKdQ2YJVQ5VkJI+zEJQ== - dependencies: - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - -postcss-discard-comments@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-discard-comments/-/postcss-discard-comments-4.0.2.tgz#1fbabd2c246bff6aaad7997b2b0918f4d7af4033" - integrity sha512-RJutN259iuRf3IW7GZyLM5Sw4GLTOH8FmsXBnv8Ab/Tc2k4SR4qbV4DNbyyY4+Sjo362SyDmW2DQ7lBSChrpkg== - dependencies: - postcss "^7.0.0" - -postcss-discard-duplicates@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-discard-duplicates/-/postcss-discard-duplicates-4.0.2.tgz#3fe133cd3c82282e550fc9b239176a9207b784eb" - integrity sha512-ZNQfR1gPNAiXZhgENFfEglF93pciw0WxMkJeVmw8eF+JZBbMD7jp6C67GqJAXVZP2BWbOztKfbsdmMp/k8c6oQ== - dependencies: - postcss "^7.0.0" - -postcss-discard-empty@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-discard-empty/-/postcss-discard-empty-4.0.1.tgz#c8c951e9f73ed9428019458444a02ad90bb9f765" - integrity sha512-B9miTzbznhDjTfjvipfHoqbWKwd0Mj+/fL5s1QOz06wufguil+Xheo4XpOnc4NqKYBCNqqEzgPv2aPBIJLox0w== - dependencies: - postcss "^7.0.0" - -postcss-discard-overridden@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-discard-overridden/-/postcss-discard-overridden-4.0.1.tgz#652aef8a96726f029f5e3e00146ee7a4e755ff57" - integrity sha512-IYY2bEDD7g1XM1IDEsUT4//iEYCxAmP5oDSFMVU/JVvT7gh+l4fmjciLqGgwjdWpQIdb0Che2VX00QObS5+cTg== - dependencies: - postcss "^7.0.0" - -postcss-load-config@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-2.0.0.tgz#f1312ddbf5912cd747177083c5ef7a19d62ee484" - integrity sha512-V5JBLzw406BB8UIfsAWSK2KSwIJ5yoEIVFb4gVkXci0QdKgA24jLmHZ/ghe/GgX0lJ0/D1uUK1ejhzEY94MChQ== - dependencies: - cosmiconfig "^4.0.0" - import-cwd "^2.0.0" - -postcss-merge-longhand@^4.0.11: - version "4.0.11" - resolved "https://registry.yarnpkg.com/postcss-merge-longhand/-/postcss-merge-longhand-4.0.11.tgz#62f49a13e4a0ee04e7b98f42bb16062ca2549e24" - integrity sha512-alx/zmoeXvJjp7L4mxEMjh8lxVlDFX1gqWHzaaQewwMZiVhLo42TEClKaeHbRf6J7j82ZOdTJ808RtN0ZOZwvw== - dependencies: - css-color-names "0.0.4" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - stylehacks "^4.0.0" - -postcss-merge-rules@^4.0.3: - version "4.0.3" - resolved "https://registry.yarnpkg.com/postcss-merge-rules/-/postcss-merge-rules-4.0.3.tgz#362bea4ff5a1f98e4075a713c6cb25aefef9a650" - integrity sha512-U7e3r1SbvYzO0Jr3UT/zKBVgYYyhAz0aitvGIYOYK5CPmkNih+WDSsS5tvPrJ8YMQYlEMvsZIiqmn7HdFUaeEQ== - dependencies: - browserslist "^4.0.0" - caniuse-api "^3.0.0" - cssnano-util-same-parent "^4.0.0" - postcss "^7.0.0" - postcss-selector-parser "^3.0.0" - vendors "^1.0.0" - -postcss-minify-font-values@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-minify-font-values/-/postcss-minify-font-values-4.0.2.tgz#cd4c344cce474343fac5d82206ab2cbcb8afd5a6" - integrity sha512-j85oO6OnRU9zPf04+PZv1LYIYOprWm6IA6zkXkrJXyRveDEuQggG6tvoy8ir8ZwjLxLuGfNkCZEQG7zan+Hbtg== - dependencies: - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - -postcss-minify-gradients@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-minify-gradients/-/postcss-minify-gradients-4.0.2.tgz#93b29c2ff5099c535eecda56c4aa6e665a663471" - integrity sha512-qKPfwlONdcf/AndP1U8SJ/uzIJtowHlMaSioKzebAXSG4iJthlWC9iSWznQcX4f66gIWX44RSA841HTHj3wK+Q== - dependencies: - cssnano-util-get-arguments "^4.0.0" - is-color-stop "^1.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - -postcss-minify-params@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-minify-params/-/postcss-minify-params-4.0.2.tgz#6b9cef030c11e35261f95f618c90036d680db874" - integrity sha512-G7eWyzEx0xL4/wiBBJxJOz48zAKV2WG3iZOqVhPet/9geefm/Px5uo1fzlHu+DOjT+m0Mmiz3jkQzVHe6wxAWg== - dependencies: - alphanum-sort "^1.0.0" - browserslist "^4.0.0" - cssnano-util-get-arguments "^4.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - uniqs "^2.0.0" - -postcss-minify-selectors@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-minify-selectors/-/postcss-minify-selectors-4.0.2.tgz#e2e5eb40bfee500d0cd9243500f5f8ea4262fbd8" - integrity sha512-D5S1iViljXBj9kflQo4YutWnJmwm8VvIsU1GeXJGiG9j8CIg9zs4voPMdQDUmIxetUOh60VilsNzCiAFTOqu3g== - dependencies: - alphanum-sort "^1.0.0" - has "^1.0.0" - postcss "^7.0.0" - postcss-selector-parser "^3.0.0" - -postcss-modules-extract-imports@1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-1.1.0.tgz#b614c9720be6816eaee35fb3a5faa1dba6a05ddb" - integrity sha1-thTJcgvmgW6u41+zpfqh26agXds= - dependencies: - postcss "^6.0.1" - -postcss-modules-local-by-default@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-1.2.0.tgz#f7d80c398c5a393fa7964466bd19500a7d61c069" - integrity sha1-99gMOYxaOT+nlkRmvRlQCn1hwGk= - dependencies: - css-selector-tokenizer "^0.7.0" - postcss "^6.0.1" - -postcss-modules-scope@1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-1.1.0.tgz#d6ea64994c79f97b62a72b426fbe6056a194bb90" - integrity sha1-1upkmUx5+XtipytCb75gVqGUu5A= - dependencies: - css-selector-tokenizer "^0.7.0" - postcss "^6.0.1" - -postcss-modules-values@1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/postcss-modules-values/-/postcss-modules-values-1.3.0.tgz#ecffa9d7e192518389f42ad0e83f72aec456ea20" - integrity sha1-7P+p1+GSUYOJ9CrQ6D9yrsRW6iA= - dependencies: - icss-replace-symbols "^1.1.0" - postcss "^6.0.1" - -postcss-modules@^1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/postcss-modules/-/postcss-modules-1.4.1.tgz#8aa35bd3461db67e27377a7ce770d77b654a84ef" - integrity sha512-btTrbK+Xc3NBuYF8TPBjCMRSp5h6NoQ1iVZ6WiDQENIze6KIYCSf0+UFQuV3yJ7gRHA+4AAtF8i2jRvUpbBMMg== - dependencies: - css-modules-loader-core "^1.1.0" - generic-names "^1.0.3" - lodash.camelcase "^4.3.0" - postcss "^7.0.1" - string-hash "^1.1.1" - -postcss-normalize-charset@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-normalize-charset/-/postcss-normalize-charset-4.0.1.tgz#8b35add3aee83a136b0471e0d59be58a50285dd4" - integrity sha512-gMXCrrlWh6G27U0hF3vNvR3w8I1s2wOBILvA87iNXaPvSNo5uZAMYsZG7XjCUf1eVxuPfyL4TJ7++SGZLc9A3g== - dependencies: - postcss "^7.0.0" - -postcss-normalize-display-values@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.2.tgz#0dbe04a4ce9063d4667ed2be476bb830c825935a" - integrity sha512-3F2jcsaMW7+VtRMAqf/3m4cPFhPD3EFRgNs18u+k3lTJJlVe7d0YPO+bnwqo2xg8YiRpDXJI2u8A0wqJxMsQuQ== - dependencies: - cssnano-util-get-match "^4.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - -postcss-normalize-positions@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-normalize-positions/-/postcss-normalize-positions-4.0.2.tgz#05f757f84f260437378368a91f8932d4b102917f" - integrity sha512-Dlf3/9AxpxE+NF1fJxYDeggi5WwV35MXGFnnoccP/9qDtFrTArZ0D0R+iKcg5WsUd8nUYMIl8yXDCtcrT8JrdA== - dependencies: - cssnano-util-get-arguments "^4.0.0" - has "^1.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - -postcss-normalize-repeat-style@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-4.0.2.tgz#c4ebbc289f3991a028d44751cbdd11918b17910c" - integrity sha512-qvigdYYMpSuoFs3Is/f5nHdRLJN/ITA7huIoCyqqENJe9PvPmLhNLMu7QTjPdtnVf6OcYYO5SHonx4+fbJE1+Q== - dependencies: - cssnano-util-get-arguments "^4.0.0" - cssnano-util-get-match "^4.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - -postcss-normalize-string@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-normalize-string/-/postcss-normalize-string-4.0.2.tgz#cd44c40ab07a0c7a36dc5e99aace1eca4ec2690c" - integrity sha512-RrERod97Dnwqq49WNz8qo66ps0swYZDSb6rM57kN2J+aoyEAJfZ6bMx0sx/F9TIEX0xthPGCmeyiam/jXif0eA== - dependencies: - has "^1.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - -postcss-normalize-timing-functions@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-4.0.2.tgz#8e009ca2a3949cdaf8ad23e6b6ab99cb5e7d28d9" - integrity sha512-acwJY95edP762e++00Ehq9L4sZCEcOPyaHwoaFOhIwWCDfik6YvqsYNxckee65JHLKzuNSSmAdxwD2Cud1Z54A== - dependencies: - cssnano-util-get-match "^4.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - -postcss-normalize-unicode@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-normalize-unicode/-/postcss-normalize-unicode-4.0.1.tgz#841bd48fdcf3019ad4baa7493a3d363b52ae1cfb" - integrity sha512-od18Uq2wCYn+vZ/qCOeutvHjB5jm57ToxRaMeNuf0nWVHaP9Hua56QyMF6fs/4FSUnVIw0CBPsU0K4LnBPwYwg== - dependencies: - browserslist "^4.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - -postcss-normalize-url@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-normalize-url/-/postcss-normalize-url-4.0.1.tgz#10e437f86bc7c7e58f7b9652ed878daaa95faae1" - integrity sha512-p5oVaF4+IHwu7VpMan/SSpmpYxcJMtkGppYf0VbdH5B6hN8YNmVyJLuY9FmLQTzY3fag5ESUUHDqM+heid0UVA== - dependencies: - is-absolute-url "^2.0.0" - normalize-url "^3.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - -postcss-normalize-whitespace@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-normalize-whitespace/-/postcss-normalize-whitespace-4.0.2.tgz#bf1d4070fe4fcea87d1348e825d8cc0c5faa7d82" - integrity sha512-tO8QIgrsI3p95r8fyqKV+ufKlSHh9hMJqACqbv2XknufqEDhDvbguXGBBqxw9nsQoXWf0qOqppziKJKHMD4GtA== - dependencies: - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - -postcss-ordered-values@^4.1.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/postcss-ordered-values/-/postcss-ordered-values-4.1.2.tgz#0cf75c820ec7d5c4d280189559e0b571ebac0eee" - integrity sha512-2fCObh5UanxvSxeXrtLtlwVThBvHn6MQcu4ksNT2tsaV2Fg76R2CV98W7wNSlX+5/pFwEyaDwKLLoEV7uRybAw== - dependencies: - cssnano-util-get-arguments "^4.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - -postcss-reduce-initial@^4.0.3: - version "4.0.3" - resolved "https://registry.yarnpkg.com/postcss-reduce-initial/-/postcss-reduce-initial-4.0.3.tgz#7fd42ebea5e9c814609639e2c2e84ae270ba48df" - integrity sha512-gKWmR5aUulSjbzOfD9AlJiHCGH6AEVLaM0AV+aSioxUDd16qXP1PCh8d1/BGVvpdWn8k/HiK7n6TjeoXN1F7DA== - dependencies: - browserslist "^4.0.0" - caniuse-api "^3.0.0" - has "^1.0.0" - postcss "^7.0.0" - -postcss-reduce-transforms@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-reduce-transforms/-/postcss-reduce-transforms-4.0.2.tgz#17efa405eacc6e07be3414a5ca2d1074681d4e29" - integrity sha512-EEVig1Q2QJ4ELpJXMZR8Vt5DQx8/mo+dGWSR7vWXqcob2gQLyQGsionYcGKATXvQzMPn6DSN1vTN7yFximdIAg== - dependencies: - cssnano-util-get-match "^4.0.0" - has "^1.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - -postcss-selector-parser@^3.0.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-3.1.1.tgz#4f875f4afb0c96573d5cf4d74011aee250a7e865" - integrity sha1-T4dfSvsMllc9XPTXQBGu4lCn6GU= - dependencies: - dot-prop "^4.1.1" - indexes-of "^1.0.1" - uniq "^1.0.1" - -postcss-selector-parser@^5.0.0-rc.4: - version "5.0.0" - resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz#249044356697b33b64f1a8f7c80922dddee7195c" - integrity sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ== - dependencies: - cssesc "^2.0.0" - indexes-of "^1.0.1" - uniq "^1.0.1" - -postcss-svgo@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-svgo/-/postcss-svgo-4.0.2.tgz#17b997bc711b333bab143aaed3b8d3d6e3d38258" - integrity sha512-C6wyjo3VwFm0QgBy+Fu7gCYOkCmgmClghO+pjcxvrcBKtiKt0uCF+hvbMO1fyv5BMImRK90SMb+dwUnfbGd+jw== - dependencies: - is-svg "^3.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - svgo "^1.0.0" - -postcss-unique-selectors@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-unique-selectors/-/postcss-unique-selectors-4.0.1.tgz#9446911f3289bfd64c6d680f073c03b1f9ee4bac" - integrity sha512-+JanVaryLo9QwZjKrmJgkI4Fn8SBgRO6WXQBJi7KiAVPlmxikB5Jzc4EvXMT2H0/m0RjrVVm9rGNhZddm/8Spg== - dependencies: - alphanum-sort "^1.0.0" - postcss "^7.0.0" - uniqs "^2.0.0" - -postcss-value-parser@^3.0.0, postcss-value-parser@^3.3.1: - version "3.3.1" - resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz#9ff822547e2893213cf1c30efa51ac5fd1ba8281" - integrity sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ== - -postcss@6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-6.0.1.tgz#000dbd1f8eef217aa368b9a212c5fc40b2a8f3f2" - integrity sha1-AA29H47vIXqjaLmiEsX8QLKo8/I= - dependencies: - chalk "^1.1.3" - source-map "^0.5.6" - supports-color "^3.2.3" - -postcss@^6.0.1: - version "6.0.23" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-6.0.23.tgz#61c82cc328ac60e677645f979054eb98bc0e3324" - integrity sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag== - dependencies: - chalk "^2.4.1" - source-map "^0.6.1" - supports-color "^5.4.0" - -postcss@^7.0.0, postcss@^7.0.1, postcss@^7.0.14, postcss@^7.0.5: - version "7.0.16" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.16.tgz#48f64f1b4b558cb8b52c88987724359acb010da2" - integrity sha512-MOo8zNSlIqh22Uaa3drkdIAgUGEL+AD1ESiSdmElLUmE2uVDo1QloiT/IfW9qRw8Gw+Y/w69UVMGwbufMSftxA== - dependencies: - chalk "^2.4.2" - source-map "^0.6.1" - supports-color "^6.1.0" - -prelude-ls@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" - integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ= - -prettier@^1.15.3: - version "1.17.1" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.17.1.tgz#ed64b4e93e370cb8a25b9ef7fef3e4fd1c0995db" - integrity sha512-TzGRNvuUSmPgwivDqkZ9tM/qTGW9hqDKWOE9YHiyQdixlKbv7kvEqsmDPrcHJTKwthU774TQwZXVtaQ/mMsvjg== - -printj@~1.1.0, printj@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/printj/-/printj-1.1.2.tgz#d90deb2975a8b9f600fb3a1c94e3f4c53c78a222" - integrity sha512-zA2SmoLaxZyArQTOPj5LXecR+RagfPSU5Kw1qP+jkWeNlrq+eJZyY2oS68SU1Z/7/myXM4lo9716laOFAVStCQ== - -private@^0.1.6: - version "0.1.8" - resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff" - integrity sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg== - -process-es6@^0.11.2: - version "0.11.6" - resolved "https://registry.yarnpkg.com/process-es6/-/process-es6-0.11.6.tgz#c6bb389f9a951f82bd4eb169600105bd2ff9c778" - integrity sha1-xrs4n5qVH4K9TrFpYAEFvS/5x3g= - -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" - integrity sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw== - -process.argv@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/process.argv/-/process.argv-0.1.0.tgz#22192052587a0a92309f12b1e13717a17885d19e" - integrity sha1-IhkgUlh6CpIwnxKx4TcXoXiF0Z4= - dependencies: - obop "^0.0.12" - -progress@^2.0.0: - version "2.0.3" - resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" - integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== - -promise.series@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/promise.series/-/promise.series-0.2.0.tgz#2cc7ebe959fc3a6619c04ab4dbdc9e452d864bbd" - integrity sha1-LMfr6Vn8OmYZwEq029yeRS2GS70= - -prop-types@^15.6.2, prop-types@^15.7.2: - version "15.7.2" - resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.7.2.tgz#52c41e75b8c87e72b9d9360e0206b99dcbffa6c5" - integrity sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ== - dependencies: - loose-envify "^1.4.0" - object-assign "^4.1.1" - react-is "^16.8.1" - -property-expr@^1.5.0: - version "1.5.1" - resolved "https://registry.yarnpkg.com/property-expr/-/property-expr-1.5.1.tgz#22e8706894a0c8e28d58735804f6ba3a3673314f" - integrity sha512-CGuc0VUTGthpJXL36ydB6jnbyOf/rAHFvmVrJlH+Rg0DqqLFQGAP6hIaxD/G0OAmBJPhXDHuEJigrp0e0wFV6g== - -prr@~0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/prr/-/prr-0.0.0.tgz#1a84b85908325501411853d0081ee3fa86e2926a" - integrity sha1-GoS4WQgyVQFBGFPQCB7j+obikmo= - -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= - -psl@^1.1.24: - version "1.1.33" - resolved "https://registry.yarnpkg.com/psl/-/psl-1.1.33.tgz#5533d9384ca7aab86425198e10e8053ebfeab661" - integrity sha512-LTDP2uSrsc7XCb5lO7A8BI1qYxRe/8EqlRvMeEl6rsnYAqDOl8xHR+8lSAIVfrNaSAlTPTNOCgNjWcoUL3AZsw== - -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@^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" - -punycode@^1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" - integrity sha1-wNWmOycYgArY4esPpSachN1BhF4= - -punycode@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" - integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== - -q@^1.1.2: - version "1.5.1" - resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" - integrity sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc= - -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== - -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: - randombytes "^2.0.5" - safe-buffer "^5.1.0" - -rdotjson@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/rdotjson/-/rdotjson-1.0.1.tgz#35ef2d4e463a6c597c34fb20733ef30fdc50ce28" - integrity sha512-46iCd5JgOIfOSe+6BQIt3cT+faHhDHwYy3RjkV1b7mKwvIbXaVMhOj2giij8jYq0YeOHoCfIPnLH3aHZyzf2PQ== - dependencies: - cheerio "^0.22.0" - is-stream "^2.0.0" - process.argv "^0.1.0" - -react-dom@^16.0.0: - version "16.8.6" - resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-16.8.6.tgz#71d6303f631e8b0097f56165ef608f051ff6e10f" - integrity sha512-1nL7PIq9LTL3fthPqwkvr2zY7phIPjYrT0jp4HjyEQrEROnw4dG41VVwi/wfoCneoleqrNX7iAD+pXebJZwrwA== - dependencies: - loose-envify "^1.1.0" - object-assign "^4.1.1" - prop-types "^15.6.2" - scheduler "^0.13.6" - -react-i18next@^10.11.0: - version "10.11.0" - resolved "https://registry.yarnpkg.com/react-i18next/-/react-i18next-10.11.0.tgz#a6854e556d3aff9f5f161b4aa871d43cfff6bd9b" - integrity sha512-jmxLZK8mf+KxG3RUIiu/COperTq1c7+iHNsna7LODOYEYaoj6EXFuchOytnB80GoUOb0JC1csT37Zp+U5nPQqQ== - dependencies: - "@babel/runtime" "^7.3.1" - html-parse-stringify2 "2.0.1" - -react-is@^16.8.1: - version "16.8.6" - resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.8.6.tgz#5bbc1e2d29141c9fbdfed456343fe2bc430a6a16" - integrity sha512-aUk3bHfZ2bRSVFFbbeVS4i+lNPZr3/WM5jT2J5omUVV1zzcs1nAaf3l51ctA5FFvCRbhrH0bdAsRRQddFJZPtA== - -react@^16.0.0: - version "16.8.6" - resolved "https://registry.yarnpkg.com/react/-/react-16.8.6.tgz#ad6c3a9614fd3a4e9ef51117f54d888da01f2bbe" - integrity sha512-pC0uMkhLaHm11ZSJULfOBqV4tIZkx87ZLvbbQYunNixAAvjnC+snJCg0XQXn9VIsttVsbZP/H/ewzgsd5fxKXw== - dependencies: - loose-envify "^1.1.0" - object-assign "^4.1.1" - prop-types "^15.6.2" - scheduler "^0.13.6" - -read-pkg-up@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-2.0.0.tgz#6b72a8048984e0c41e79510fd5e9fa99b3b549be" - integrity sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4= - dependencies: - find-up "^2.0.0" - read-pkg "^2.0.0" - -read-pkg@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-2.0.0.tgz#8ef1c0623c6a6db0dc6713c4bfac46332b2368f8" - integrity sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg= - dependencies: - load-json-file "^2.0.0" - normalize-package-data "^2.3.2" - path-type "^2.0.0" - -read-pkg@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-4.0.1.tgz#963625378f3e1c4d48c85872b5a6ec7d5d093237" - integrity sha1-ljYlN48+HE1IyFhytabsfV0JMjc= - dependencies: - normalize-package-data "^2.3.2" - parse-json "^4.0.0" - pify "^3.0.0" - -readable-stream@^1.0.26-4: - version "1.1.14" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.14.tgz#7cf4c54ef648e3813084c636dd2079e166c081d9" - integrity sha1-fPTFTvZI44EwhMY23SB54WbAgdk= - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.1" - isarray "0.0.1" - string_decoder "~0.10.x" - -readable-stream@^2.2.2: - version "2.3.6" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf" - integrity sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw== - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.3" - isarray "~1.0.0" - process-nextick-args "~2.0.0" - safe-buffer "~5.1.1" - string_decoder "~1.1.1" - util-deprecate "~1.0.1" - -readable-stream@^3.1.1, readable-stream@^3.2.0: - version "3.4.0" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.4.0.tgz#a51c26754658e0a3c21dbf59163bd45ba6f447fc" - integrity sha512-jItXPLmrSR8jmTRmRWJXCnGJsfy85mB3Wd/uINMXA65yrnFo0cPClFIUWzo2najVNSl+mx7/4W8ttlLWJe99pQ== - dependencies: - inherits "^2.0.3" - string_decoder "^1.1.1" - util-deprecate "^1.0.1" - -readable-stream@~1.0.26, readable-stream@~1.0.26-4: - version "1.0.34" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.0.34.tgz#125820e34bc842d2f2aaafafe4c2916ee32c157c" - integrity sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw= - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.1" - isarray "0.0.1" - string_decoder "~0.10.x" - -regenerate-unicode-properties@^8.0.2: - version "8.1.0" - resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-8.1.0.tgz#ef51e0f0ea4ad424b77bf7cb41f3e015c70a3f0e" - integrity sha512-LGZzkgtLY79GeXLm8Dp0BVLdQlWICzBnJz/ipWUgo59qBaZ+BHtq51P2q1uVZlppMuUAT37SDk39qUbjTWB7bA== - dependencies: - regenerate "^1.4.0" - -regenerate@^1.2.1, regenerate@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.0.tgz#4a856ec4b56e4077c557589cae85e7a4c8869a11" - integrity sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg== - -regenerator-runtime@^0.13.2: - version "0.13.2" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.2.tgz#32e59c9a6fb9b1a4aff09b4930ca2d4477343447" - integrity sha512-S/TQAZJO+D3m9xeN1WTI8dLKBBiRgXBlTJvbWjCThHWZj9EvHK70Ff50/tYj2J/fvBY6JtFVwRuazHN2E7M9BA== - -regenerator-transform@^0.14.0: - version "0.14.0" - resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.14.0.tgz#2ca9aaf7a2c239dd32e4761218425b8c7a86ecaf" - integrity sha512-rtOelq4Cawlbmq9xuMR5gdFmv7ku/sFoB7sRiywx7aq53bc52b4j6zvH7Te1Vt/X2YveDKnCGUbioieU7FEL3w== - dependencies: - private "^0.1.6" - -regex-not@^1.0.0, regex-not@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" - integrity sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A== - dependencies: - extend-shallow "^3.0.2" - safe-regex "^1.1.0" - -regexp-tree@^0.1.6: - version "0.1.10" - resolved "https://registry.yarnpkg.com/regexp-tree/-/regexp-tree-0.1.10.tgz#d837816a039c7af8a8d64d7a7c3cf6a1d93450bc" - integrity sha512-K1qVSbcedffwuIslMwpe6vGlj+ZXRnGkvjAtFHfDZZZuEdA/h0dxljAPu9vhUo6Rrx2U2AwJ+nSQ6hK+lrP5MQ== - -regexpp@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-2.0.1.tgz#8d19d31cf632482b589049f8281f93dbcba4d07f" - integrity sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw== - -regexpu-core@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-1.0.0.tgz#86a763f58ee4d7c2f6b102e4764050de7ed90c6b" - integrity sha1-hqdj9Y7k18L2sQLkdkBQ3n7ZDGs= - dependencies: - regenerate "^1.2.1" - regjsgen "^0.2.0" - regjsparser "^0.1.4" - -regexpu-core@^4.5.4: - version "4.5.4" - resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.5.4.tgz#080d9d02289aa87fe1667a4f5136bc98a6aebaae" - integrity sha512-BtizvGtFQKGPUcTy56o3nk1bGRp4SZOTYrDtGNlqCQufptV5IkkLN6Emw+yunAJjzf+C9FQFtvq7IoA3+oMYHQ== - dependencies: - regenerate "^1.4.0" - regenerate-unicode-properties "^8.0.2" - regjsgen "^0.5.0" - regjsparser "^0.6.0" - unicode-match-property-ecmascript "^1.0.4" - unicode-match-property-value-ecmascript "^1.1.0" - -regjsgen@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.2.0.tgz#6c016adeac554f75823fe37ac05b92d5a4edb1f7" - integrity sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc= - -regjsgen@^0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.5.0.tgz#a7634dc08f89209c2049adda3525711fb97265dd" - integrity sha512-RnIrLhrXCX5ow/E5/Mh2O4e/oa1/jW0eaBKTSy3LaCj+M3Bqvm97GWDp2yUtzIs4LEn65zR2yiYGFqb2ApnzDA== - -regjsparser@^0.1.4: - version "0.1.5" - resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.1.5.tgz#7ee8f84dc6fa792d3fd0ae228d24bd949ead205c" - integrity sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw= - dependencies: - jsesc "~0.5.0" - -regjsparser@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.6.0.tgz#f1e6ae8b7da2bae96c99399b868cd6c933a2ba9c" - integrity sha512-RQ7YyokLiQBomUJuUG8iGVvkgOLxwyZM8k6d3q5SAXpg4r5TZJZigKFvC6PpD+qQ98bCDC5YelPeA3EucDoNeQ== - dependencies: - jsesc "~0.5.0" - -repeat-element@^1.1.2: - version "1.1.3" - resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.3.tgz#782e0d825c0c5a3bb39731f84efee6b742e6b1ce" - integrity sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g== - -repeat-string@^1.6.1: - version "1.6.1" - resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" - integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc= - -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.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.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.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-from-string@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" - integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== - -reserved-words@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/reserved-words/-/reserved-words-0.1.2.tgz#00a0940f98cd501aeaaac316411d9adc52b31ab1" - integrity sha1-AKCUD5jNUBrqqsMWQR2a3FKzGrE= - -resolve-from@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748" - integrity sha1-six699nWiBvItuZTM17rywoYh0g= - -resolve-from@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" - integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== - -resolve-url@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" - integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= - -resolve@^1.10.0, resolve@^1.10.1, resolve@^1.11.0, resolve@^1.3.2, resolve@^1.5.0, resolve@^1.8.1: - version "1.11.0" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.11.0.tgz#4014870ba296176b86343d50b60f3b50609ce232" - integrity sha512-WL2pBDjqT6pGUNSUzMw00o4T7If+z4H2x3Gz893WoUQ5KW8Vr9txp00ykiP16VBaZF5+j/OcXJHZ9+PCvdiDKw== - dependencies: - path-parse "^1.0.6" - -restore-cursor@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf" - integrity sha1-n37ih/gv0ybU/RYpI9YhKe7g368= - dependencies: - onetime "^2.0.0" - signal-exit "^3.0.2" - -resx@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/resx/-/resx-1.2.0.tgz#4495af993588b391abd6885f7627c3912c95b626" - integrity sha512-k7NKz85FxRTsaV1RflS0FLjTQOogyUL6rMiqTX/EpnfEYkyaD1naJTtrNQAdEfjBM4Ie0t8i8cRKPUfZOrQMzQ== - dependencies: - xml2js "0.4.19" - -ret@~0.1.10: - version "0.1.15" - resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" - integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== - -rgb-regex@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/rgb-regex/-/rgb-regex-1.0.1.tgz#c0e0d6882df0e23be254a475e8edd41915feaeb1" - integrity sha1-wODWiC3w4jviVKR16O3UGRX+rrE= - -rgba-regex@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/rgba-regex/-/rgba-regex-1.0.0.tgz#43374e2e2ca0968b0ef1523460b7d730ff22eeb3" - integrity sha1-QzdOLiyglosO8VI0YLfXMP8i7rM= - -rimraf@2.6.3, rimraf@^2.2.8, rimraf@~2.6.2: - 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" - -rollup-plugin-babel@^4.2.0: - version "4.3.2" - resolved "https://registry.yarnpkg.com/rollup-plugin-babel/-/rollup-plugin-babel-4.3.2.tgz#8c0e1bd7aa9826e90769cf76895007098ffd1413" - integrity sha512-KfnizE258L/4enADKX61ozfwGHoqYauvoofghFJBhFnpH9Sb9dNPpWg8QHOaAfVASUYV8w0mCx430i9z0LJoJg== - dependencies: - "@babel/helper-module-imports" "^7.0.0" - rollup-pluginutils "^2.3.0" - -rollup-plugin-commonjs@^9.2.0: - version "9.3.4" - resolved "https://registry.yarnpkg.com/rollup-plugin-commonjs/-/rollup-plugin-commonjs-9.3.4.tgz#2b3dddbbbded83d45c36ff101cdd29e924fd23bc" - integrity sha512-DTZOvRoiVIHHLFBCL4pFxOaJt8pagxsVldEXBOn6wl3/V21wVaj17HFfyzTsQUuou3sZL3lEJZVWKPFblJfI6w== - dependencies: - estree-walker "^0.6.0" - magic-string "^0.25.2" - resolve "^1.10.0" - rollup-pluginutils "^2.6.0" - -rollup-plugin-json@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/rollup-plugin-json/-/rollup-plugin-json-4.0.0.tgz#a18da0a4b30bf5ca1ee76ddb1422afbb84ae2b9e" - integrity sha512-hgb8N7Cgfw5SZAkb3jf0QXii6QX/FOkiIq2M7BAQIEydjHvTyxXHQiIzZaTFgx1GK0cRCHOCBHIyEkkLdWKxow== - dependencies: - rollup-pluginutils "^2.5.0" - -rollup-plugin-node-builtins@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/rollup-plugin-node-builtins/-/rollup-plugin-node-builtins-2.1.2.tgz#24a1fed4a43257b6b64371d8abc6ce1ab14597e9" - integrity sha1-JKH+1KQyV7a2Q3HYq8bOGrFFl+k= - dependencies: - browserify-fs "^1.0.0" - buffer-es6 "^4.9.2" - crypto-browserify "^3.11.0" - process-es6 "^0.11.2" - -rollup-plugin-node-resolve@^4.0.0: - version "4.2.4" - resolved "https://registry.yarnpkg.com/rollup-plugin-node-resolve/-/rollup-plugin-node-resolve-4.2.4.tgz#7d370f8d6fd3031006a0032c38262dd9be3c6250" - integrity sha512-t/64I6l7fZ9BxqD3XlX4ZeO6+5RLKyfpwE2CiPNUKa+GocPlQhf/C208ou8y3AwtNsc6bjSk/8/6y/YAyxCIvw== - dependencies: - "@types/resolve" "0.0.8" - builtin-modules "^3.1.0" - is-module "^1.0.0" - resolve "^1.10.0" - -rollup-plugin-peer-deps-external@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/rollup-plugin-peer-deps-external/-/rollup-plugin-peer-deps-external-2.2.0.tgz#99ef9231aa01736f3e9605b7c3084a0d627f665b" - integrity sha512-BmJMHUWQcvjS2dQMwJ7dzvdbwpRChnq4AYk2sTU/4aySt9Kumk8y8W3HhTHss31wxzKb0AC/wsiX1AqDcOBIEA== - -rollup-plugin-postcss@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/rollup-plugin-postcss/-/rollup-plugin-postcss-2.0.3.tgz#1fd5b7e1fc7545cb0084d9c99d11b259e41a05e6" - integrity sha512-d12oKl6za/GGXmlytzVPzzTdPCKgti/Kq2kNhtfm5vv9hkNbyrTvizMBm6zZ5rRWX/sIWl3znjIJ8xy6Hofoeg== - dependencies: - chalk "^2.4.2" - concat-with-sourcemaps "^1.0.5" - cssnano "^4.1.8" - import-cwd "^2.1.0" - p-queue "^2.4.2" - pify "^3.0.0" - postcss "^7.0.14" - postcss-load-config "^2.0.0" - postcss-modules "^1.4.1" - promise.series "^0.2.0" - reserved-words "^0.1.2" - resolve "^1.5.0" - rollup-pluginutils "^2.0.1" - style-inject "^0.3.0" - -rollup-plugin-url@^2.1.0: - version "2.2.1" - resolved "https://registry.yarnpkg.com/rollup-plugin-url/-/rollup-plugin-url-2.2.1.tgz#cddd38dfab2848e77532c92e04fa17663ef9bd0c" - integrity sha512-Zw7u1SX64LDBty38ghqBVwc55JhQDlvXPt0fSzwRY7Mdlhu6wtQq5t2q1siHi7SLwRqgvAMeuJGjOqPOIB/sSw== - dependencies: - mime "^2.3.1" - mkpath "^1.0.0" - rollup-pluginutils "^2.3.3" - -rollup-pluginutils@^2.0.1, rollup-pluginutils@^2.3.0, rollup-pluginutils@^2.3.3, rollup-pluginutils@^2.6.0: - version "2.8.0" - resolved "https://registry.yarnpkg.com/rollup-pluginutils/-/rollup-pluginutils-2.8.0.tgz#d7ece1502958a35748a74080c7ac5e95681bcbe9" - integrity sha512-8TomM64VQH6w+13lemFHX5sZYxLCxHhf9gzdRUEFNXH3Z+0CDYy7Grzqa6YUbZc0GIrfbWoD5GXZ3o5Teqh9ew== - dependencies: - estree-walker "^0.6.1" - -rollup-pluginutils@^2.5.0: - version "2.8.1" - resolved "https://registry.yarnpkg.com/rollup-pluginutils/-/rollup-pluginutils-2.8.1.tgz#8fa6dd0697344938ef26c2c09d2488ce9e33ce97" - integrity sha512-J5oAoysWar6GuZo0s+3bZ6sVZAC0pfqKz68De7ZgDi5z63jOVZn1uJL/+z1jeKHNbGII8kAyHF5q8LnxSX5lQg== - dependencies: - estree-walker "^0.6.1" - -rollup@^1.1.2: - version "1.13.1" - resolved "https://registry.yarnpkg.com/rollup/-/rollup-1.13.1.tgz#86a474c29df0f303ed31e4c8be5d81c1038beae8" - integrity sha512-TWBmVU5WS4wOy5Ij2qxrJYRUn/keECvStcXDpJSwgr95JZ6VFf1PDewiAk4VPf5vxr7drRJlxh9kYpxHveYOOg== - dependencies: - "@types/estree" "0.0.39" - "@types/node" "^12.0.3" - acorn "^6.1.1" - -run-async@^2.2.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.3.0.tgz#0371ab4ae0bdd720d4166d7dfda64ff7a445a6c0" - integrity sha1-A3GrSuC91yDUFm19/aZP96RFpsA= - dependencies: - is-promise "^2.1.0" - -run-node@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/run-node/-/run-node-1.0.0.tgz#46b50b946a2aa2d4947ae1d886e9856fd9cabe5e" - integrity sha512-kc120TBlQ3mih1LSzdAJXo4xn/GWS2ec0l3S+syHDXP9uRr0JAT8Qd3mdMuyjqCzeZktgP3try92cEgf9Nks8A== - -rxjs@^6.3.3, rxjs@^6.4.0: - version "6.5.2" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.5.2.tgz#2e35ce815cd46d84d02a209fb4e5921e051dbec7" - integrity sha512-HUb7j3kvb7p7eCUHE3FqjoDsC1xfZQ4AHFWfTKSpZ+sAhhz5X1WX0ZuUqWbzB2QhSLp3DoLUG+hMdEDKqWo2Zg== - dependencies: - tslib "^1.9.0" - -safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: - 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" - integrity sha1-QKNmnzsHfR6UPURinhV91IAjvy4= - dependencies: - ret "~0.1.10" - -"safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: - version "2.1.2" - resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" - integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== - -sax@>=0.6.0, sax@^1.2.4, sax@~1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" - integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== - -scheduler@^0.13.6: - version "0.13.6" - resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.13.6.tgz#466a4ec332467b31a91b9bf74e5347072e4cd889" - integrity sha512-IWnObHt413ucAYKsD9J1QShUKkbKLQQHdxRyw73sw4FN26iWr3DY/H34xGPe4nmL1DwXyWmSWmMrA9TfQbE/XQ== - dependencies: - loose-envify "^1.1.0" - object-assign "^4.1.1" - -semver-compare@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/semver-compare/-/semver-compare-1.0.0.tgz#0dee216a1c941ab37e9efb1788f6afc5ff5537fc" - integrity sha1-De4hahyUGrN+nvsXiPavxf9VN/w= - -"semver@2 || 3 || 4 || 5", semver@^5.3.0, semver@^5.4.1, semver@^5.5.0, semver@^5.5.1: - version "5.7.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.0.tgz#790a7cf6fea5459bac96110b29b60412dc8ff96b" - integrity sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA== - -semver@^6.1.0: - version "6.1.1" - resolved "https://registry.yarnpkg.com/semver/-/semver-6.1.1.tgz#53f53da9b30b2103cd4f15eab3a18ecbcb210c9b" - integrity sha512-rWYq2e5iYW+fFe/oPPtYJxYgjBm8sC4rmoGdUOgBB7VnwKt6HrL793l2voH1UlsyYZpJ4g0wfjnTEO1s1NP2eQ== - -semver@~2.3.1: - version "2.3.2" - resolved "https://registry.yarnpkg.com/semver/-/semver-2.3.2.tgz#b9848f25d6cf36333073ec9ef8856d42f1233e52" - integrity sha1-uYSPJdbPNjMwc+ye+IVtQvEjPlI= - -set-value@^0.4.3: - version "0.4.3" - resolved "https://registry.yarnpkg.com/set-value/-/set-value-0.4.3.tgz#7db08f9d3d22dc7f78e53af3c3bf4666ecdfccf1" - integrity sha1-fbCPnT0i3H945Trzw79GZuzfzPE= - dependencies: - extend-shallow "^2.0.1" - is-extendable "^0.1.1" - is-plain-object "^2.0.1" - to-object-path "^0.3.0" - -set-value@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.0.tgz#71ae4a88f0feefbbf52d1ea604f3fb315ebb6274" - integrity sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg== - dependencies: - extend-shallow "^2.0.1" - is-extendable "^0.1.1" - is-plain-object "^2.0.3" - split-string "^3.0.1" - -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" - integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo= - dependencies: - shebang-regex "^1.0.0" - -shebang-regex@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" - integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= - -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" - integrity sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0= - -simple-git@^1.85.0: - version "1.113.0" - resolved "https://registry.yarnpkg.com/simple-git/-/simple-git-1.113.0.tgz#668989728a1e9cf4ec6c72b69ea2eecc93489bea" - integrity sha512-i9WVsrK2u0G/cASI9nh7voxOk9mhanWY9eGtWBDSYql6m49Yk5/Fan6uZsDr/xmzv8n+eQ8ahKCoEr8cvU3h+g== - dependencies: - debug "^4.0.1" - -simple-swizzle@^0.2.2: - version "0.2.2" - resolved "https://registry.yarnpkg.com/simple-swizzle/-/simple-swizzle-0.2.2.tgz#a4da6b635ffcccca33f70d17cb92592de95e557a" - integrity sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo= - dependencies: - is-arrayish "^0.3.1" - -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" - resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-0.0.4.tgz#edbf8903f66f7ce2f8eafd6ceed65e264c831b35" - integrity sha1-7b+JA/ZvfOL46v1s7tZeJkyDGzU= - -slice-ansi@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-2.1.0.tgz#cacd7693461a637a5788d92a7dd4fba068e81636" - integrity sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ== - dependencies: - ansi-styles "^3.2.0" - astral-regex "^1.0.0" - is-fullwidth-code-point "^2.0.0" - -snapdragon-node@^2.0.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" - integrity sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw== - dependencies: - define-property "^1.0.0" - isobject "^3.0.0" - snapdragon-util "^3.0.1" - -snapdragon-util@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2" - integrity sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ== - dependencies: - kind-of "^3.2.0" - -snapdragon@^0.8.1: - version "0.8.2" - resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d" - integrity sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg== - dependencies: - base "^0.11.1" - debug "^2.2.0" - define-property "^0.2.5" - extend-shallow "^2.0.1" - map-cache "^0.2.2" - source-map "^0.5.6" - source-map-resolve "^0.5.0" - use "^3.1.0" - -source-map-resolve@^0.5.0: - version "0.5.2" - resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.2.tgz#72e2cc34095543e43b2c62b2c4c10d4a9054f259" - integrity sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA== - dependencies: - atob "^2.1.1" - decode-uri-component "^0.2.0" - resolve-url "^0.2.1" - source-map-url "^0.4.0" - urix "^0.1.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" - integrity sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM= - -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" - integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= - -source-map@^0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" - integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== - -sourcemap-codec@^1.4.4: - version "1.4.4" - resolved "https://registry.yarnpkg.com/sourcemap-codec/-/sourcemap-codec-1.4.4.tgz#c63ea927c029dd6bd9a2b7fa03b3fec02ad56e9f" - integrity sha512-CYAPYdBu34781kLHkaW3m6b/uUSyMOC2R61gcYMWooeuaGtjof86ZA/8T+qVPPt7np1085CR9hmMGrySwEc8Xg== - -spdx-correct@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.0.tgz#fb83e504445268f154b074e218c87c003cd31df4" - integrity sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q== - dependencies: - spdx-expression-parse "^3.0.0" - spdx-license-ids "^3.0.0" - -spdx-exceptions@^2.1.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz#2ea450aee74f2a89bfb94519c07fcd6f41322977" - integrity sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA== - -spdx-expression-parse@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz#99e119b7a5da00e05491c9fa338b7904823b41d0" - integrity sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg== - dependencies: - spdx-exceptions "^2.1.0" - spdx-license-ids "^3.0.0" - -spdx-license-ids@^3.0.0: - version "3.0.4" - resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.4.tgz#75ecd1a88de8c184ef015eafb51b5b48bfd11bb1" - integrity sha512-7j8LYJLeY/Yb6ACbQ7F76qy5jHkp0U6jgBfJsk97bwWlVUnUWsAgpyaCvo17h0/RQGnQ036tVDomiwoI4pDkQA== - -split-string@^3.0.1, split-string@^3.0.2: - version "3.1.0" - resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" - integrity sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw== - dependencies: - extend-shallow "^3.0.0" - -sprintf-js@~1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" - integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= - -ssf@~0.10.2: - version "0.10.2" - resolved "https://registry.yarnpkg.com/ssf/-/ssf-0.10.2.tgz#65b2b4fcdfd967bc8e8383a41349009893115976" - integrity sha512-rDhAPm9WyIsY8eZEKyE8Qsotb3j/wBdvMWBUsOhJdfhKGLfQidRjiBUV0y/MkyCLiXQ38FG6LWW/VYUtqlIDZQ== - dependencies: - frac "~1.1.2" - -sshpk@^1.7.0: - version "1.16.1" - resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.16.1.tgz#fb661c0bef29b39db40769ee39fa70093d6f6877" - integrity sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg== - dependencies: - asn1 "~0.2.3" - assert-plus "^1.0.0" - bcrypt-pbkdf "^1.0.0" - dashdash "^1.12.0" - ecc-jsbn "~0.1.1" - getpass "^0.1.1" - jsbn "~0.1.0" - safer-buffer "^2.0.2" - tweetnacl "~0.14.0" - -stable@^0.1.8: - version "0.1.8" - resolved "https://registry.yarnpkg.com/stable/-/stable-0.1.8.tgz#836eb3c8382fe2936feaf544631017ce7d47a3cf" - integrity sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w== - -staged-git-files@1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/staged-git-files/-/staged-git-files-1.1.2.tgz#4326d33886dc9ecfa29a6193bf511ba90a46454b" - integrity sha512-0Eyrk6uXW6tg9PYkhi/V/J4zHp33aNyi2hOCmhFLqLTIhbgqWn5jlSzI+IU0VqrZq6+DbHcabQl/WP6P3BG0QA== - -static-extend@^0.1.1: - version "0.1.2" - resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" - integrity sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY= - dependencies: - define-property "^0.2.5" - object-copy "^0.1.0" - -string-argv@^0.0.2: - version "0.0.2" - resolved "https://registry.yarnpkg.com/string-argv/-/string-argv-0.0.2.tgz#dac30408690c21f3c3630a3ff3a05877bdcbd736" - integrity sha1-2sMECGkMIfPDYwo/86BYd73L1zY= - -string-hash@^1.1.1: - version "1.1.3" - resolved "https://registry.yarnpkg.com/string-hash/-/string-hash-1.1.3.tgz#e8aafc0ac1855b4666929ed7dd1275df5d6c811b" - integrity sha1-6Kr8CsGFW0Zmkp7X3RJ1311sgRs= - -string-range@~1.2, string-range@~1.2.1: - version "1.2.2" - resolved "https://registry.yarnpkg.com/string-range/-/string-range-1.2.2.tgz#a893ed347e72299bc83befbbf2a692a8d239d5dd" - integrity sha1-qJPtNH5yKZvIO++78qaSqNI51d0= - -string-width@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" - integrity sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M= - dependencies: - code-point-at "^1.0.0" - is-fullwidth-code-point "^1.0.0" - strip-ansi "^3.0.0" - -string-width@^2.1.0, string-width@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" - integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== - dependencies: - is-fullwidth-code-point "^2.0.0" - strip-ansi "^4.0.0" - -string-width@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" - integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== - dependencies: - emoji-regex "^7.0.1" - is-fullwidth-code-point "^2.0.0" - strip-ansi "^5.1.0" - -string_decoder@^1.1.1: - 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@~0.10.x: - version "0.10.31" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" - integrity sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ= - -string_decoder@~1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" - integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== - dependencies: - safe-buffer "~5.1.0" - -stringify-object@^3.2.2: - version "3.3.0" - resolved "https://registry.yarnpkg.com/stringify-object/-/stringify-object-3.3.0.tgz#703065aefca19300d3ce88af4f5b3956d7556629" - integrity sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw== - dependencies: - get-own-enumerable-property-symbols "^3.0.0" - is-obj "^1.0.1" - is-regexp "^1.0.0" - -strings-file@0.0.5: - version "0.0.5" - resolved "https://registry.yarnpkg.com/strings-file/-/strings-file-0.0.5.tgz#40386d44cd0359db71761d582e743f858334ce27" - integrity sha1-QDhtRM0DWdtxdh1YLnQ/hYM0zic= - dependencies: - iconv-lite "^0.4.13" - -strip-ansi@^3.0.0, strip-ansi@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" - integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8= - dependencies: - ansi-regex "^2.0.0" - -strip-ansi@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" - integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8= - dependencies: - ansi-regex "^3.0.0" - -strip-ansi@^5.1.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: - ansi-regex "^4.1.0" - -strip-bom@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" - integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM= - -strip-eof@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" - integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8= - -strip-json-comments@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" - integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= - -style-inject@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/style-inject/-/style-inject-0.3.0.tgz#d21c477affec91811cc82355832a700d22bf8dd3" - integrity sha512-IezA2qp+vcdlhJaVm5SOdPPTUu0FCEqfNSli2vRuSIBbu5Nq5UvygTk/VzeCqfLz2Atj3dVII5QBKGZRZ0edzw== - -stylehacks@^4.0.0: - version "4.0.3" - resolved "https://registry.yarnpkg.com/stylehacks/-/stylehacks-4.0.3.tgz#6718fcaf4d1e07d8a1318690881e8d96726a71d5" - integrity sha512-7GlLk9JwlElY4Y6a/rmbH2MhVlTyVmiJd1PfTCqFaIBEGMYNsrO/v3SeGTdhBThLg4Z+NbOk/qFMwCa+J+3p/g== - dependencies: - browserslist "^4.0.0" - postcss "^7.0.0" - postcss-selector-parser "^3.0.0" - -supports-color@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" - integrity sha1-U10EXOa2Nj+kARcIRimZXp3zJMc= - -supports-color@^3.2.3: - version "3.2.3" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.2.3.tgz#65ac0504b3954171d8a64946b2ae3cbb8a5f54f6" - integrity sha1-ZawFBLOVQXHYpklGsq48u4pfVPY= - dependencies: - has-flag "^1.0.0" - -supports-color@^5.3.0, supports-color@^5.4.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.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" - -svgo@^1.0.0: - version "1.2.2" - resolved "https://registry.yarnpkg.com/svgo/-/svgo-1.2.2.tgz#0253d34eccf2aed4ad4f283e11ee75198f9d7316" - integrity sha512-rAfulcwp2D9jjdGu+0CuqlrAUin6bBWrpoqXWwKDZZZJfXcUXQSxLJOFJCQCSA0x0pP2U0TxSlJu2ROq5Bq6qA== - dependencies: - chalk "^2.4.1" - coa "^2.0.2" - css-select "^2.0.0" - css-select-base-adapter "^0.1.1" - css-tree "1.0.0-alpha.28" - css-url-regex "^1.1.0" - csso "^3.5.1" - js-yaml "^3.13.1" - mkdirp "~0.5.1" - object.values "^1.1.0" - sax "~1.2.4" - stable "^0.1.8" - unquote "~1.1.1" - util.promisify "~1.0.0" - -symbol-observable@^1.1.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.2.0.tgz#c22688aed4eab3cdc2dfeacbb561660560a00804" - integrity sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ== - -synchronous-promise@^2.0.6: - version "2.0.9" - resolved "https://registry.yarnpkg.com/synchronous-promise/-/synchronous-promise-2.0.9.tgz#b83db98e9e7ae826bf9c8261fd8ac859126c780a" - integrity sha512-LO95GIW16x69LuND1nuuwM4pjgFGupg7pZ/4lU86AmchPKrhk0o2tpMU2unXRrqo81iAFe1YJ0nAGEVwsrZAgg== - -table@^5.0.2: - version "5.4.0" - resolved "https://registry.yarnpkg.com/table/-/table-5.4.0.tgz#d772a3216e68829920a41a32c18eda286c95d780" - integrity sha512-nHFDrxmbrkU7JAFKqKbDJXfzrX2UBsWmrieXFTGxiI5e4ncg3VqsZeI4EzNmX0ncp4XNGVeoxIWJXfCIXwrsvw== - dependencies: - ajv "^6.9.1" - lodash "^4.17.11" - slice-ansi "^2.1.0" - string-width "^3.0.0" - -text-table@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" - integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= - -through@^2.3.6: - version "2.3.8" - resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" - integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= - -timsort@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/timsort/-/timsort-0.3.0.tgz#405411a8e7e6339fe64db9a234de11dc31e02bd4" - integrity sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q= - -tmexchange@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/tmexchange/-/tmexchange-1.2.0.tgz#c67877e61f3e8fac32b900e85c278650233d0605" - integrity sha512-AoD+a0o8Die6AS2alTMU7vERPXo3Qg8k1nFNnrVypJVmQL0nK/Dk3jf7eVh378vVHbnLbsbNs8VqyI4Sjmu+HA== - dependencies: - xml2js "0.4.19" - -tmp@^0.0.33: - version "0.0.33" - resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" - integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== - dependencies: - os-tmpdir "~1.0.2" - -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" - resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" - integrity sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68= - dependencies: - kind-of "^3.0.2" - -to-regex-range@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38" - integrity sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg= - dependencies: - is-number "^3.0.0" - repeat-string "^1.6.1" - -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" - integrity sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw== - dependencies: - define-property "^2.0.2" - extend-shallow "^3.0.2" - regex-not "^1.0.2" - safe-regex "^1.1.0" - -toposort@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/toposort/-/toposort-2.0.2.tgz#ae21768175d1559d48bef35420b2f4962f09c330" - integrity sha1-riF2gXXRVZ1IvvNUILL0li8JwzA= - -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" - -trim-right@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003" - integrity sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM= - -tslib@^1.9.0: - version "1.9.3" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.9.3.tgz#d7e4dd79245d85428c4d7e4822a79917954ca286" - integrity sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ== - -tunnel-agent@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" - integrity sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0= - dependencies: - safe-buffer "^5.0.1" - -tweetnacl@^0.14.3, tweetnacl@~0.14.0: - version "0.14.5" - resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" - integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q= - -type-check@~0.3.2: - version "0.3.2" - resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" - integrity sha1-WITKtRLPHTVeP7eE8wgEsrUg23I= - dependencies: - prelude-ls "~1.1.2" - -typedarray-to-buffer@~1.0.0: - version "1.0.4" - resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-1.0.4.tgz#9bb8ba0e841fb3f4cf1fe7c245e9f3fa8a5fe99c" - integrity sha1-m7i6DoQfs/TPH+fCRenz+opf6Zw= - -typedarray@^0.0.6: - version "0.0.6" - resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" - integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= - -unicode-canonical-property-names-ecmascript@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz#2619800c4c825800efdd8343af7dd9933cbe2818" - integrity sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ== - -unicode-match-property-ecmascript@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz#8ed2a32569961bce9227d09cd3ffbb8fed5f020c" - integrity sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg== - dependencies: - unicode-canonical-property-names-ecmascript "^1.0.4" - unicode-property-aliases-ecmascript "^1.0.4" - -unicode-match-property-value-ecmascript@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.1.0.tgz#5b4b426e08d13a80365e0d657ac7a6c1ec46a277" - integrity sha512-hDTHvaBk3RmFzvSl0UVrUmC3PuW9wKVnpoUDYH0JDkSIovzw+J5viQmeYHxVSBptubnr7PbH2e0fnpDRQnQl5g== - -unicode-property-aliases-ecmascript@^1.0.4: - version "1.0.5" - resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.0.5.tgz#a9cc6cc7ce63a0a3023fc99e341b94431d405a57" - integrity sha512-L5RAqCfXqAwR3RriF8pM0lU0w4Ryf/GgzONwi6KnL1taJQa7x1TCxdJnILX59WIGOwR57IVxn7Nej0fz1Ny6fw== - -union-value@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.0.tgz#5c71c34cb5bad5dcebe3ea0cd08207ba5aa1aea4" - integrity sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ= - dependencies: - arr-union "^3.1.0" - get-value "^2.0.6" - is-extendable "^0.1.1" - set-value "^0.4.3" - -uniq@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/uniq/-/uniq-1.0.1.tgz#b31c5ae8254844a3a8281541ce2b04b865a734ff" - integrity sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8= - -uniqs@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/uniqs/-/uniqs-2.0.0.tgz#ffede4b36b25290696e6e165d4a59edb998e6b02" - integrity sha1-/+3ks2slKQaW5uFl1KWe25mOawI= - -unquote@~1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/unquote/-/unquote-1.1.1.tgz#8fded7324ec6e88a0ff8b905e7c098cdc086d544" - integrity sha1-j97XMk7G6IoP+LkF58CYzcCG1UQ= - -unset-value@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" - integrity sha1-g3aHP30jNRef+x5vw6jtDfyKtVk= - dependencies: - has-value "^0.3.1" - isobject "^3.0.0" - -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" - integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI= - -use@^3.1.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" - integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ== - -util-deprecate@^1.0.1, util-deprecate@~1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" - integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= - -util.promisify@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.0.0.tgz#440f7165a459c9a16dc145eb8e72f35687097030" - integrity sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA== - dependencies: - define-properties "^1.1.2" - object.getownpropertydescriptors "^2.0.3" - -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== - -validate-npm-package-license@^3.0.1: - version "3.0.4" - resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" - integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== - dependencies: - spdx-correct "^3.0.0" - spdx-expression-parse "^3.0.0" - -vendors@^1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/vendors/-/vendors-1.0.3.tgz#a6467781abd366217c050f8202e7e50cc9eef8c0" - integrity sha512-fOi47nsJP5Wqefa43kyWSg80qF+Q3XA6MUkgi7Hp1HQaKDQW4cQrK2D0P7mmbFtsV1N89am55Yru/nyEwRubcw== - -verror@1.10.0: - version "1.10.0" - resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" - integrity sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA= - dependencies: - assert-plus "^1.0.0" - core-util-is "1.0.2" - extsprintf "^1.2.0" - -void-elements@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/void-elements/-/void-elements-2.0.1.tgz#c066afb582bb1cb4128d60ea92392e94d5e9dbec" - integrity sha1-wGavtYK7HLQSjWDqkjkulNXp2+w= - -which@^1.2.10, which@^1.2.9: - 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" - -wordwrap@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" - integrity sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus= - -wrap-ansi@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-3.0.1.tgz#288a04d87eda5c286e060dfe8f135ce8d007f8ba" - integrity sha1-KIoE2H7aXChuBg3+jxNc6NAH+Lo= - dependencies: - string-width "^2.1.1" - strip-ansi "^4.0.0" - -wrappy@1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" - integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= - -write@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/write/-/write-0.2.1.tgz#5fc03828e264cea3fe91455476f7a3c566cb0757" - integrity sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c= - dependencies: - mkdirp "^0.5.1" - -xliff@4.3.1: - version "4.3.1" - resolved "https://registry.yarnpkg.com/xliff/-/xliff-4.3.1.tgz#ae82d1c6283014aa7506c9957bcb3f95ed1ce505" - integrity sha512-SERrOPuKZ/5XyEiv+cXgIjidQq4vp6HYS0yBS2GwC1TDJiREFaUIin3qg4OBlD6jdFWdPOMwkXGackAvgZ6+LQ== - dependencies: - xml-js "1.6.11" - -xlsx@0.14.3: - version "0.14.3" - resolved "https://registry.yarnpkg.com/xlsx/-/xlsx-0.14.3.tgz#09b7534d95ba8f9aca2c462d0f6603e080202224" - integrity sha512-wgt9zGKeFp4WIQdPx+j2sNNbDYRbJ+M+uuFcS16pf2yLo/aKcG3RaD4xmS/LHT5rznc6V27NRwIXNWmxLj6eZw== - dependencies: - adler-32 "~1.2.0" - cfb "^1.1.0" - codepage "~1.14.0" - commander "~2.17.1" - crc-32 "~1.2.0" - exit-on-epipe "~1.0.1" - ssf "~0.10.2" - -xml-js@1.6.11: - version "1.6.11" - resolved "https://registry.yarnpkg.com/xml-js/-/xml-js-1.6.11.tgz#927d2f6947f7f1c19a316dd8eea3614e8b18f8e9" - integrity sha512-7rVi2KMfwfWFl+GpPg6m80IVMWXLRjO+PxTq7V2CDhoGak0wzYzFgUY2m4XJ47OGdXd8eLE8EmwfAmdjw7lC1g== - dependencies: - sax "^1.2.4" - -xml2js@0.4.19: - version "0.4.19" - resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.4.19.tgz#686c20f213209e94abf0d1bcf1efaa291c7827a7" - integrity sha512-esZnJZJOiJR9wWKMyuvSE1y6Dq5LCuJanqhxslH2bxM6duahNZ+HMpCLhBQGZkbX6xRf8x1Y2eJlgt2q3qo49Q== - dependencies: - sax ">=0.6.0" - xmlbuilder "~9.0.1" - -xmlbuilder@~9.0.1: - version "9.0.7" - resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-9.0.7.tgz#132ee63d2ec5565c557e20f4c22df9aca686b10d" - integrity sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0= - -xtend@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/xtend/-/xtend-2.2.0.tgz#eef6b1f198c1c8deafad8b1765a04dad4a01c5a9" - integrity sha1-7vax8ZjByN6vrYsXZaBNrUoBxak= - -xtend@~2.0.4: - version "2.0.6" - resolved "https://registry.yarnpkg.com/xtend/-/xtend-2.0.6.tgz#5ea657a6dba447069c2e59c58a1138cb0c5e6cee" - integrity sha1-XqZXptukRwacLlnFihE4ywxebO4= - dependencies: - is-object "~0.1.2" - object-keys "~0.2.0" - -xtend@~2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/xtend/-/xtend-2.1.2.tgz#6efecc2a4dad8e6962c4901b337ce7ba87b5d28b" - integrity sha1-bv7MKk2tjmlixJAbM3znuoe10os= - dependencies: - object-keys "~0.4.0" - -xtend@~3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/xtend/-/xtend-3.0.0.tgz#5cce7407baf642cba7becda568111c493f59665a" - integrity sha1-XM50B7r2Qsunvs2laBEcST9ZZlo= - -yup@^0.27.0: - version "0.27.0" - resolved "https://registry.yarnpkg.com/yup/-/yup-0.27.0.tgz#f8cb198c8e7dd2124beddc2457571329096b06e7" - integrity sha512-v1yFnE4+u9za42gG/b/081E7uNW9mUj3qtkmelLbW5YPROZzSH/KUUyJu9Wt8vxFJcT9otL/eZopS0YK1L5yPQ== - dependencies: - "@babel/runtime" "^7.0.0" - fn-name "~2.0.1" - lodash "^4.17.11" - property-expr "^1.5.0" - synchronous-promise "^2.0.6" - toposort "^2.0.2" diff --git a/extensions/ohif-vtk-extension/.babelrc b/extensions/ohif-vtk-extension/.babelrc deleted file mode 100644 index 430b9904b69..00000000000 --- a/extensions/ohif-vtk-extension/.babelrc +++ /dev/null @@ -1,14 +0,0 @@ -{ - "presets": [ - ["@babel/preset-env", { - "targets": { - "ie": "11" - } - }], - "@babel/preset-react" - ], - "plugins": [ - "@babel/plugin-proposal-class-properties", - "@babel/plugin-transform-runtime" - ] -} diff --git a/extensions/ohif-vtk-extension/.editorconfig b/extensions/ohif-vtk-extension/.editorconfig deleted file mode 100644 index 9d08a1a828a..00000000000 --- a/extensions/ohif-vtk-extension/.editorconfig +++ /dev/null @@ -1,9 +0,0 @@ -root = true - -[*] -charset = utf-8 -indent_style = space -indent_size = 2 -end_of_line = lf -insert_final_newline = true -trim_trailing_whitespace = true diff --git a/extensions/ohif-vtk-extension/.eslintrc b/extensions/ohif-vtk-extension/.eslintrc deleted file mode 100644 index 77d67cd94b1..00000000000 --- a/extensions/ohif-vtk-extension/.eslintrc +++ /dev/null @@ -1,16 +0,0 @@ -{ - "extends": [ - "react-app", - "eslint:recommended", - "plugin:react/recommended" - ], - "parser": "babel-eslint", - "env": { - "jest": true - }, - "settings": { - "react": { - "version": "detect", - }, - }, -} diff --git a/extensions/ohif-vtk-extension/.gitignore b/extensions/ohif-vtk-extension/.gitignore deleted file mode 100644 index 32c3cd46645..00000000000 --- a/extensions/ohif-vtk-extension/.gitignore +++ /dev/null @@ -1,26 +0,0 @@ - -# See https://help.github.com/ignore-files/ for more about ignoring files. - -# dependencies -node_modules - -# builds -build -dist -.rpt2_cache - -# misc -.DS_Store -.env -.env.local -.env.development.local -.env.test.local -.env.production.local - -npm-debug.log* -yarn-debug.log* -yarn-error.log* -.idea - -yalc.lock -.yalc \ No newline at end of file diff --git a/extensions/ohif-vtk-extension/.prettierrc b/extensions/ohif-vtk-extension/.prettierrc deleted file mode 100644 index 12348ec6acf..00000000000 --- a/extensions/ohif-vtk-extension/.prettierrc +++ /dev/null @@ -1,9 +0,0 @@ -{ - "trailingComma": "es5", - "printWidth": 80, - "proseWrap": "always", - "tabWidth": 2, - "semi": true, - "singleQuote": true, - "endOfLine": "lf" -} diff --git a/extensions/ohif-vtk-extension/.travis.yml b/extensions/ohif-vtk-extension/.travis.yml deleted file mode 100644 index 984658c939e..00000000000 --- a/extensions/ohif-vtk-extension/.travis.yml +++ /dev/null @@ -1,4 +0,0 @@ -language: node_js -node_js: - - 9 - - 8 diff --git a/extensions/ohif-vtk-extension/package.json b/extensions/ohif-vtk-extension/package.json deleted file mode 100644 index 96920491b5d..00000000000 --- a/extensions/ohif-vtk-extension/package.json +++ /dev/null @@ -1,109 +0,0 @@ -{ - "name": "@ohif/extension-vtk", - "version": "0.1.6", - "description": "OHIF extension for VTK.js", - "author": "OHIF", - "license": "MIT", - "repository": "OHIF/Viewers", - "main": "dist/index.umd.js", - "engines": { - "node": ">=8", - "npm": ">=5" - }, - "scripts": { - "build": "webpack --progress --colors --mode development", - "build:release": "webpack --progress --colors --mode production", - "start": "webpack --watch --progress --colors --mode development", - "prepare": "yarn run build:release", - "predeploy": "cd example && yarn install && yarn run build:release", - "prepublishOnly": "yarn install && yarn run build:release", - "lint": "eslint -c .eslintrc --fix src && prettier --single-quote --write src/**/*.{js,jsx,json,css}" - }, - "peerDependencies": { - "@ohif/i18n": "0.2.2", - "cornerstone-core": "^2.2.8", - "cornerstone-wado-image-loader": "^2.2.3", - "dcmjs": "^0.4.7", - "dicom-parser": "^1.8.3", - "i18next": "^17.0.3", - "i18next-browser-languagedetector": "^3.0.1", - "ohif-core": "^0.6.0", - "prop-types": "^15.7.2", - "react": "^16.8.6", - "react-dom": "^16.8.6", - "react-i18next": "^10.11.0", - "react-redux": "^7.1.0", - "react-resize-detector": "^4.2.0", - "react-viewerbase": "^0.15.1", - "redux": "^4.0.1" - }, - "dependencies": { - "@babel/runtime": "^7.4.5", - "react-vtkjs-viewport": "0.0.11", - "vtk.js": "^9.0.1" - }, - "devDependencies": { - "@babel/core": "^7.4.5", - "@babel/plugin-external-helpers": "^7.2.0", - "@babel/plugin-proposal-class-properties": "^7.4.4", - "@babel/plugin-transform-runtime": "^7.4.4", - "@babel/preset-env": "^7.4.5", - "@babel/preset-react": "^7.0.0", - "babel-eslint": "^10.0.1", - "babel-loader": "^8.0.6", - "cornerstone-tools": "^3.13.0", - "cornerstone-wado-image-loader": "^2.2.3", - "cross-env": "^5.2.0", - "dcmjs": "^0.4.7", - "dicom-parser": "^1.8.3", - "eslint": "5.16.0", - "eslint-plugin-import": "^2.17.3", - "eslint-plugin-node": "^9.1.0", - "eslint-plugin-promise": "^4.1.1", - "eslint-plugin-react": "^7.13.0", - "gh-pages": "^2.0.1", - "husky": "^2.4.1", - "i18next": "^17.0.3", - "i18next-browser-languagedetector": "^3.0.1", - "lint-staged": "^8.2.0", - "ohif-core": "^0.7.0", - "prettier": "^1.18.2", - "react": "^16.6.3", - "react-dom": "^16.6.3", - "react-i18next": "^10.11.0", - "react-redux": "^7.1.0", - "react-viewerbase": "^0.15.1", - "redux": "^4.0.1", - "shader-loader": "^1.3.1", - "stylelint": "^10.1.0", - "stylelint-config-recommended": "^2.2.0", - "stylus": "^0.54.5", - "webpack": "^4.33.0", - "webpack-cli": "^3.3.4", - "worker-loader": "^2.0.0" - }, - "husky": { - "hooks": { - "pre-commit": "lint-staged" - } - }, - "lint-staged": { - "src/**/*.{js,jsx,json,css}": [ - "prettier --single-quote --write", - "git add" - ] - }, - "browserslist": [ - ">0.2%", - "not dead", - "not ie <= 11", - "not op_mini all" - ], - "files": [ - "dist", - "README.md" - ], - "publishConfig": { - "access": "public" - } -} diff --git a/extensions/ohif-vtk-extension/rollup.config.js b/extensions/ohif-vtk-extension/rollup.config.js deleted file mode 100644 index 66a4b2b0d55..00000000000 --- a/extensions/ohif-vtk-extension/rollup.config.js +++ /dev/null @@ -1,85 +0,0 @@ -import babel from 'rollup-plugin-babel'; -import builtins from 'rollup-plugin-node-builtins'; -import commonjs from 'rollup-plugin-commonjs'; -import external from 'rollup-plugin-peer-deps-external'; -import pkg from './package.json'; -import postcss from 'rollup-plugin-postcss'; -import resolve from 'rollup-plugin-node-resolve'; -import url from 'rollup-plugin-url'; -import copy from 'rollup-plugin-copy'; - -// Deal with https://github.com/rollup/rollup-plugin-commonjs/issues/297 - - -const globals = { - react: 'React', - 'react-dom': 'ReactDOM', - 'react-redux': 'ReactRedux', - 'react-resize-detector': 'ReactResizeDetector', - 'react-viewerbase': 'reactViewerbase', - 'prop-types': 'PropTypes', - 'cornerstone-core': 'cornerstone', - 'cornerstone-wado-image-loader': 'cornerstoneWADOImageLoader', - 'cornerstone-math': 'cornerstoneMath', - 'cornerstone-tools': 'cornerstoneTools', - dcmjs: 'dcmjs', - 'dicom-parser': 'dicomParser', - 'ohif-core': 'OHIF', - hammerjs: 'Hammer', - '@ohif/i18n': 'i18n' -}; - -export default { - input: 'src/index.js', - output: [ - { - file: pkg.main, - format: 'umd', - name: 'ohif-vtk-extension', - sourcemap: true, - globals - }, - { - file: pkg.module, - format: 'es', - sourcemap: true, - globals - } - ], - plugins: [ - builtins(), - external(), - postcss({ - modules: false - }), - url(), - babel({ - exclude: 'node_modules/**', - externalHelpers: true, - runtimeHelpers: true - }), - copy({ - targets: ['src/locales'], - outputFolder: 'dist', - }), - resolve(), - commonjs({ - include: ['node_modules/**', '.yalc/**'], - namedExports: { - 'node_modules/react-vtkjs-viewport/dist/index.js': [ - 'getImageData', - 'loadImageData', - 'VTKViewport', - 'VTKMPRViewport' - ], - '.yalc/react-vtkjs-viewport/dist/index.js': [ - 'getImageData', - 'loadImageData', - 'VTKViewport', - 'VTKMPRViewport' - ] - } - }) - ], - external: Object.keys(pkg.peerDependencies || {}) -}; diff --git a/extensions/ohif-vtk-extension/webpack.config.js b/extensions/ohif-vtk-extension/webpack.config.js deleted file mode 100644 index 7847d40ab44..00000000000 --- a/extensions/ohif-vtk-extension/webpack.config.js +++ /dev/null @@ -1,110 +0,0 @@ -var path = require('path'); -var webpack = require('webpack'); - -const autoprefixer = require('autoprefixer'); - -const cssRules = [ - { - test: /\.css$/, - exclude: /\.module\.css$/, - use: [ - 'style-loader', - 'css-loader', - { - loader: 'postcss-loader', - options: { - plugins: () => [autoprefixer('last 2 version', 'ie >= 10')] - } - } - ] - }, - { - test: /\.glsl$/i, - include: /vtk\.js[\/\\]Sources/, - loader: 'shader-loader' - }, - { - test: /\.worker\.js$/, - include: /vtk\.js[\/\\]Sources/, - use: [ - { - loader: 'worker-loader', - options: { inline: true, fallback: false } - } - ] - }, - { - test: /\.css$/, - include: /\.module\.css$/, - use: [ - { loader: 'style-loader' }, - { - loader: 'css-loader', - options: { - localIdentName: '[name]-[local]_[sha512:hash:base64:5]', - modules: true - } - }, - { - loader: 'postcss-loader', - options: { - plugins: () => [autoprefixer('last 2 version', 'ie >= 10')] - } - } - ] - } -]; - -var entry = path.join(__dirname, './src/index.js'); -const sourcePath = path.join(__dirname, './src'); -const outputPath = path.join(__dirname, './dist'); - -module.exports = { - entry, - output: { - path: outputPath, - filename: 'index.umd.js', - library: '@ohif/extension-vtk', - libraryTarget: 'umd', - globalObject: 'this' - }, - module: { - rules: [ - { - test: /\.(js|jsx)$/, - exclude: /node_modules/, - use: ['babel-loader'] - } - ].concat(cssRules) - }, - resolve: { - modules: [path.resolve(__dirname, 'node_modules'), sourcePath] - }, - externals: [ - { - 'cornerstone-core': { - commonjs: 'cornerstone-core', - commonjs2: 'cornerstone-core', - amd: 'cornerstone-core', - root: 'cornerstone' - }, - 'cornerstone-math': { - commonjs: 'cornerstone-math', - commonjs2: 'cornerstone-math', - amd: 'cornerstone-math', - root: 'cornerstoneMath' - } - }, - '@ohif/i18n', - 'ohif-core', - 'dcmjs', - 'react-viewerbase', - 'react', //: 'React', - 'react-dom', //: 'ReactDOM', - 'react-redux', //: 'ReactRedux', - 'react-resize-detector', //: 'ReactResizeDetector', - 'react-viewerbase', //: 'reactViewerbase', - 'prop-types' //: 'PropTypes' - /*/\b(vtk.js)/*/ - ] -}; diff --git a/extensions/ohif-vtk-extension/yarn.lock b/extensions/ohif-vtk-extension/yarn.lock deleted file mode 100644 index a6486966033..00000000000 --- a/extensions/ohif-vtk-extension/yarn.lock +++ /dev/null @@ -1,7222 +0,0 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -"@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.2.2", "@babel/core@^7.4.5": - version "7.4.5" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.4.5.tgz#081f97e8ffca65a9b4b0fdc7e274e703f000c06a" - integrity sha512-OvjIh6aqXtlsA8ujtGKfC7LYWksYSX8yQcM8Ay3LuvVeQ63lcOKgoZWVqcpFwkd29aYU9rVx7jxhfhiEDV9MZA== - dependencies: - "@babel/code-frame" "^7.0.0" - "@babel/generator" "^7.4.4" - "@babel/helpers" "^7.4.4" - "@babel/parser" "^7.4.5" - "@babel/template" "^7.4.4" - "@babel/traverse" "^7.4.5" - "@babel/types" "^7.4.4" - 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.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.4.4.tgz#174a215eb843fc392c7edcaabeaa873de6e8f041" - integrity sha512-53UOLK6TVNqKxf7RUh8NE851EHRxOOeVXKbK2bivdb+iziMyk03Sr4eaE9OELCbyZAAafAKPDwF2TPUES5QbxQ== - dependencies: - "@babel/types" "^7.4.4" - jsesc "^2.5.1" - lodash "^4.17.11" - source-map "^0.5.0" - trim-right "^1.0.1" - -"@babel/helper-annotate-as-pure@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.0.0.tgz#323d39dd0b50e10c7c06ca7d7638e6864d8c5c32" - integrity sha512-3UYcJUj9kvSLbLbUIfQTqzcy5VX7GRZ/CCDrnOaZorFFM01aXp1+GJwuFGV4NDDoAS+mOUyHcO6UD/RfqOks3Q== - dependencies: - "@babel/types" "^7.0.0" - -"@babel/helper-builder-binary-assignment-operator-visitor@^7.1.0": - version "7.1.0" - resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.1.0.tgz#6b69628dfe4087798e0c4ed98e3d4a6b2fbd2f5f" - integrity sha512-qNSR4jrmJ8M1VMM9tibvyRAHXQs2PmaksQF7c1CGJNipfe3D8p+wgNwgso/P2A2r2mdgBWAXljNWR0QRZAMW8w== - dependencies: - "@babel/helper-explode-assignable-expression" "^7.1.0" - "@babel/types" "^7.0.0" - -"@babel/helper-builder-react-jsx@^7.3.0": - version "7.3.0" - resolved "https://registry.yarnpkg.com/@babel/helper-builder-react-jsx/-/helper-builder-react-jsx-7.3.0.tgz#a1ac95a5d2b3e88ae5e54846bf462eeb81b318a4" - integrity sha512-MjA9KgwCuPEkQd9ncSXvSyJ5y+j2sICHyrI0M3L+6fnS4wMSNDc1ARXsbTfbb2cXHn17VisSnU/sHFTCxVxSMw== - dependencies: - "@babel/types" "^7.3.0" - esutils "^2.0.0" - -"@babel/helper-call-delegate@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/helper-call-delegate/-/helper-call-delegate-7.4.4.tgz#87c1f8ca19ad552a736a7a27b1c1fcf8b1ff1f43" - integrity sha512-l79boDFJ8S1c5hvQvG+rc+wHw6IuH7YldmRKsYtpbawsxURu/paVy57FZMomGK22/JckepaikOkY0MoAmdyOlQ== - dependencies: - "@babel/helper-hoist-variables" "^7.4.4" - "@babel/traverse" "^7.4.4" - "@babel/types" "^7.4.4" - -"@babel/helper-create-class-features-plugin@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.4.4.tgz#fc3d690af6554cc9efc607364a82d48f58736dba" - integrity sha512-UbBHIa2qeAGgyiNR9RszVF7bUHEdgS4JAUNT8SiqrAN6YJVxlOxeLr5pBzb5kan302dejJ9nla4RyKcR1XT6XA== - dependencies: - "@babel/helper-function-name" "^7.1.0" - "@babel/helper-member-expression-to-functions" "^7.0.0" - "@babel/helper-optimise-call-expression" "^7.0.0" - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-replace-supers" "^7.4.4" - "@babel/helper-split-export-declaration" "^7.4.4" - -"@babel/helper-define-map@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/helper-define-map/-/helper-define-map-7.4.4.tgz#6969d1f570b46bdc900d1eba8e5d59c48ba2c12a" - integrity sha512-IX3Ln8gLhZpSuqHJSnTNBWGDE9kdkTEWl21A/K7PQ00tseBwbqCHTvNLHSBd9M0R5rER4h5Rsvj9vw0R5SieBg== - dependencies: - "@babel/helper-function-name" "^7.1.0" - "@babel/types" "^7.4.4" - lodash "^4.17.11" - -"@babel/helper-explode-assignable-expression@^7.1.0": - version "7.1.0" - resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.1.0.tgz#537fa13f6f1674df745b0c00ec8fe4e99681c8f6" - integrity sha512-NRQpfHrJ1msCHtKjbzs9YcMmJZOg6mQMmGRB+hbamEdG5PNpaSm95275VD92DvJKuyl0s2sFiDmMZ+EnnvufqA== - dependencies: - "@babel/traverse" "^7.1.0" - "@babel/types" "^7.0.0" - -"@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/helper-get-function-arity" "^7.0.0" - "@babel/template" "^7.1.0" - "@babel/types" "^7.0.0" - -"@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-hoist-variables@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.4.4.tgz#0298b5f25c8c09c53102d52ac4a98f773eb2850a" - integrity sha512-VYk2/H/BnYbZDDg39hr3t2kKyifAm1W6zHRfhx8jGjIHpQEBv9dry7oQ2f3+J703TLu69nYdxsovl0XYfcnK4w== - dependencies: - "@babel/types" "^7.4.4" - -"@babel/helper-member-expression-to-functions@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.0.0.tgz#8cd14b0a0df7ff00f009e7d7a436945f47c7a16f" - integrity sha512-avo+lm/QmZlv27Zsi0xEor2fKcqWG56D5ae9dzklpIaY7cQMK5N8VSpaNVPPagiqmy7LrEjK1IWdGMOqPu5csg== - dependencies: - "@babel/types" "^7.0.0" - -"@babel/helper-module-imports@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.0.0.tgz#96081b7111e486da4d2cd971ad1a4fe216cc2e3d" - integrity sha512-aP/hlLq01DWNEiDg4Jn23i+CXxW/owM4WpDLFUbpjxe4NS3BhLVZQ5i7E0ZrxuQ/vwekIeciyamgB1UIYxxM6A== - dependencies: - "@babel/types" "^7.0.0" - -"@babel/helper-module-transforms@^7.1.0", "@babel/helper-module-transforms@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.4.4.tgz#96115ea42a2f139e619e98ed46df6019b94414b8" - integrity sha512-3Z1yp8TVQf+B4ynN7WoHPKS8EkdTbgAEy0nU0rs/1Kw4pDgmvYH3rz3aI11KgxKCba2cn7N+tqzV1mY2HMN96w== - dependencies: - "@babel/helper-module-imports" "^7.0.0" - "@babel/helper-simple-access" "^7.1.0" - "@babel/helper-split-export-declaration" "^7.4.4" - "@babel/template" "^7.4.4" - "@babel/types" "^7.4.4" - lodash "^4.17.11" - -"@babel/helper-optimise-call-expression@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.0.0.tgz#a2920c5702b073c15de51106200aa8cad20497d5" - integrity sha512-u8nd9NQePYNQV8iPWu/pLLYBqZBa4ZaY1YWRFMuxrid94wKI1QNt67NEZ7GAe5Kc/0LLScbim05xZFWkAdrj9g== - 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-regex@^7.0.0", "@babel/helper-regex@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/helper-regex/-/helper-regex-7.4.4.tgz#a47e02bc91fb259d2e6727c2a30013e3ac13c4a2" - integrity sha512-Y5nuB/kESmR3tKjU8Nkn1wMGEx1tjJX076HBMeL3XLQCu6vA/YRzuTW0bbb+qRnXvQGn+d6Rx953yffl8vEy7Q== - dependencies: - lodash "^4.17.11" - -"@babel/helper-remap-async-to-generator@^7.1.0": - version "7.1.0" - resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.1.0.tgz#361d80821b6f38da75bd3f0785ece20a88c5fe7f" - integrity sha512-3fOK0L+Fdlg8S5al8u/hWE6vhufGSn0bN09xm2LXMy//REAF8kDCrYoOBKYmA8m5Nom+sV9LyLCwrFynA8/slg== - dependencies: - "@babel/helper-annotate-as-pure" "^7.0.0" - "@babel/helper-wrap-function" "^7.1.0" - "@babel/template" "^7.1.0" - "@babel/traverse" "^7.1.0" - "@babel/types" "^7.0.0" - -"@babel/helper-replace-supers@^7.1.0", "@babel/helper-replace-supers@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.4.4.tgz#aee41783ebe4f2d3ab3ae775e1cc6f1a90cefa27" - integrity sha512-04xGEnd+s01nY1l15EuMS1rfKktNF+1CkKmHoErDppjAAZL+IUBZpzT748x262HF7fibaQPhbvWUl5HeSt1EXg== - dependencies: - "@babel/helper-member-expression-to-functions" "^7.0.0" - "@babel/helper-optimise-call-expression" "^7.0.0" - "@babel/traverse" "^7.4.4" - "@babel/types" "^7.4.4" - -"@babel/helper-simple-access@^7.1.0": - version "7.1.0" - resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.1.0.tgz#65eeb954c8c245beaa4e859da6188f39d71e585c" - integrity sha512-Vk+78hNjRbsiu49zAPALxTb+JUQCz1aolpd8osOF16BGnLtseD21nbHgLPGUwrXEurZgiCOUmvs3ExTu4F5x6w== - dependencies: - "@babel/template" "^7.1.0" - "@babel/types" "^7.0.0" - -"@babel/helper-split-export-declaration@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.4.4.tgz#ff94894a340be78f53f06af038b205c49d993677" - integrity sha512-Ro/XkzLf3JFITkW6b+hNxzZ1n5OQ80NvIUdmHspih1XAhtN3vPTuUFT4eQnela+2MaZ5ulH+iyP513KJrxbN7Q== - dependencies: - "@babel/types" "^7.4.4" - -"@babel/helper-wrap-function@^7.1.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.2.0.tgz#c4e0012445769e2815b55296ead43a958549f6fa" - integrity sha512-o9fP1BZLLSrYlxYEYyl2aS+Flun5gtjTIG8iln+XuEzQTs0PLagAGSXUcqruJwD5fM48jzIEggCKpIfWTcR7pQ== - dependencies: - "@babel/helper-function-name" "^7.1.0" - "@babel/template" "^7.1.0" - "@babel/traverse" "^7.1.0" - "@babel/types" "^7.2.0" - -"@babel/helpers@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.4.4.tgz#868b0ef59c1dd4e78744562d5ce1b59c89f2f2a5" - integrity sha512-igczbR/0SeuPR8RFfC7tGrbdTbFL3QTvH6D+Z6zNxnTe//GyqmtHmDkzrqDmyZ3eSwPqB/LhyKoU5DXsp+Vp2A== - dependencies: - "@babel/template" "^7.4.4" - "@babel/traverse" "^7.4.4" - "@babel/types" "^7.4.4" - -"@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 "^4.0.0" - -"@babel/parser@^7.0.0", "@babel/parser@^7.4.4", "@babel/parser@^7.4.5": - version "7.4.5" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.4.5.tgz#04af8d5d5a2b044a2a1bffacc1e5e6673544e872" - integrity sha512-9mUqkL1FF5T7f0WDFfAoDdiMVPWsdD1gZYzSnaXsxUCUqzuch/8of9G3VUSNiZmMBoRxT3neyVsqeiL/ZPcjew== - -"@babel/plugin-external-helpers@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-external-helpers/-/plugin-external-helpers-7.2.0.tgz#7f4cb7dee651cd380d2034847d914288467a6be4" - integrity sha512-QFmtcCShFkyAsNtdCM3lJPmRe1iB+vPZymlB4LnDIKEBj2yKQLQKtoxXxJ8ePT5fwMl4QGg303p4mB0UsSI2/g== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-proposal-async-generator-functions@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.2.0.tgz#b289b306669dce4ad20b0252889a15768c9d417e" - integrity sha512-+Dfo/SCQqrwx48ptLVGLdE39YtWRuKc/Y9I5Fy0P1DDBB9lsAHpjcEJQt+4IifuSOSTLBKJObJqMvaO1pIE8LQ== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-remap-async-to-generator" "^7.1.0" - "@babel/plugin-syntax-async-generators" "^7.2.0" - -"@babel/plugin-proposal-class-properties@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.4.4.tgz#93a6486eed86d53452ab9bab35e368e9461198ce" - integrity sha512-WjKTI8g8d5w1Bc9zgwSz2nfrsNQsXcCf9J9cdCvrJV6RF56yztwm4TmJC0MgJ9tvwO9gUA/mcYe89bLdGfiXFg== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.4.4" - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-proposal-json-strings@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.2.0.tgz#568ecc446c6148ae6b267f02551130891e29f317" - integrity sha512-MAFV1CA/YVmYwZG0fBQyXhmj0BHCB5egZHCKWIFVv/XCxAeVGIHfos3SwDck4LvCllENIAg7xMKOG5kH0dzyUg== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-syntax-json-strings" "^7.2.0" - -"@babel/plugin-proposal-object-rest-spread@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.4.4.tgz#1ef173fcf24b3e2df92a678f027673b55e7e3005" - integrity sha512-dMBG6cSPBbHeEBdFXeQ2QLc5gUpg4Vkaz8octD4aoW/ISO+jBOcsuxYL7bsb5WSu8RLP6boxrBIALEHgoHtO9g== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-syntax-object-rest-spread" "^7.2.0" - -"@babel/plugin-proposal-optional-catch-binding@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.2.0.tgz#135d81edb68a081e55e56ec48541ece8065c38f5" - integrity sha512-mgYj3jCcxug6KUcX4OBoOJz3CMrwRfQELPQ5560F70YQUBZB7uac9fqaWamKR1iWUzGiK2t0ygzjTScZnVz75g== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-syntax-optional-catch-binding" "^7.2.0" - -"@babel/plugin-proposal-unicode-property-regex@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.4.4.tgz#501ffd9826c0b91da22690720722ac7cb1ca9c78" - integrity sha512-j1NwnOqMG9mFUOH58JTFsA/+ZYzQLUZ/drqWUqxCYLGeu2JFZL8YrNC9hBxKmWtAuOCHPcRpgv7fhap09Fb4kA== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-regex" "^7.4.4" - regexpu-core "^4.5.4" - -"@babel/plugin-syntax-async-generators@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.2.0.tgz#69e1f0db34c6f5a0cf7e2b3323bf159a76c8cb7f" - integrity sha512-1ZrIRBv2t0GSlcwVoQ6VgSLpLgiN/FVQUzt9znxo7v2Ov4jJrs8RY8tv0wvDmFN3qIdMKWrmMMW6yZ0G19MfGg== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-syntax-json-strings@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.2.0.tgz#72bd13f6ffe1d25938129d2a186b11fd62951470" - integrity sha512-5UGYnMSLRE1dqqZwug+1LISpA403HzlSfsg6P9VXU6TBjcSHeNlw4DxDx7LgpF+iKZoOG/+uzqoRHTdcUpiZNg== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-syntax-jsx@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.2.0.tgz#0b85a3b4bc7cdf4cc4b8bf236335b907ca22e7c7" - integrity sha512-VyN4QANJkRW6lDBmENzRszvZf3/4AXaj9YR7GwrWeeN9tEBPuXbmDYVU9bYBN0D70zCWVwUy0HWq2553VCb6Hw== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-syntax-object-rest-spread@^7.2.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/plugin-syntax-optional-catch-binding@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.2.0.tgz#a94013d6eda8908dfe6a477e7f9eda85656ecf5c" - integrity sha512-bDe4xKNhb0LI7IvZHiA13kff0KEfaGX/Hv4lMA9+7TEc63hMNvfKo6ZFpXhKuEp+II/q35Gc4NoMeDZyaUbj9w== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-arrow-functions@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.2.0.tgz#9aeafbe4d6ffc6563bf8f8372091628f00779550" - integrity sha512-ER77Cax1+8/8jCB9fo4Ud161OZzWN5qawi4GusDuRLcDbDG+bIGYY20zb2dfAFdTRGzrfq2xZPvF0R64EHnimg== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-async-to-generator@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.4.4.tgz#a3f1d01f2f21cadab20b33a82133116f14fb5894" - integrity sha512-YiqW2Li8TXmzgbXw+STsSqPBPFnGviiaSp6CYOq55X8GQ2SGVLrXB6pNid8HkqkZAzOH6knbai3snhP7v0fNwA== - dependencies: - "@babel/helper-module-imports" "^7.0.0" - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-remap-async-to-generator" "^7.1.0" - -"@babel/plugin-transform-block-scoped-functions@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.2.0.tgz#5d3cc11e8d5ddd752aa64c9148d0db6cb79fd190" - integrity sha512-ntQPR6q1/NKuphly49+QiQiTN0O63uOwjdD6dhIjSWBI5xlrbUFh720TIpzBhpnrLfv2tNH/BXvLIab1+BAI0w== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-block-scoping@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.4.4.tgz#c13279fabf6b916661531841a23c4b7dae29646d" - integrity sha512-jkTUyWZcTrwxu5DD4rWz6rDB5Cjdmgz6z7M7RLXOJyCUkFBawssDGcGh8M/0FTSB87avyJI1HsTwUXp9nKA1PA== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - lodash "^4.17.11" - -"@babel/plugin-transform-classes@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.4.4.tgz#0ce4094cdafd709721076d3b9c38ad31ca715eb6" - integrity sha512-/e44eFLImEGIpL9qPxSRat13I5QNRgBLu2hOQJCF7VLy/otSM/sypV1+XaIw5+502RX/+6YaSAPmldk+nhHDPw== - dependencies: - "@babel/helper-annotate-as-pure" "^7.0.0" - "@babel/helper-define-map" "^7.4.4" - "@babel/helper-function-name" "^7.1.0" - "@babel/helper-optimise-call-expression" "^7.0.0" - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-replace-supers" "^7.4.4" - "@babel/helper-split-export-declaration" "^7.4.4" - globals "^11.1.0" - -"@babel/plugin-transform-computed-properties@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.2.0.tgz#83a7df6a658865b1c8f641d510c6f3af220216da" - integrity sha512-kP/drqTxY6Xt3NNpKiMomfgkNn4o7+vKxK2DDKcBG9sHj51vHqMBGy8wbDS/J4lMxnqs153/T3+DmCEAkC5cpA== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-destructuring@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.4.4.tgz#9d964717829cc9e4b601fc82a26a71a4d8faf20f" - integrity sha512-/aOx+nW0w8eHiEHm+BTERB2oJn5D127iye/SUQl7NjHy0lf+j7h4MKMMSOwdazGq9OxgiNADncE+SRJkCxjZpQ== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-dotall-regex@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.4.4.tgz#361a148bc951444312c69446d76ed1ea8e4450c3" - integrity sha512-P05YEhRc2h53lZDjRPk/OektxCVevFzZs2Gfjd545Wde3k+yFDbXORgl2e0xpbq8mLcKJ7Idss4fAg0zORN/zg== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-regex" "^7.4.4" - regexpu-core "^4.5.4" - -"@babel/plugin-transform-duplicate-keys@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.2.0.tgz#d952c4930f312a4dbfff18f0b2914e60c35530b3" - integrity sha512-q+yuxW4DsTjNceUiTzK0L+AfQ0zD9rWaTLiUqHA8p0gxx7lu1EylenfzjeIWNkPy6e/0VG/Wjw9uf9LueQwLOw== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-exponentiation-operator@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.2.0.tgz#a63868289e5b4007f7054d46491af51435766008" - integrity sha512-umh4hR6N7mu4Elq9GG8TOu9M0bakvlsREEC+ialrQN6ABS4oDQ69qJv1VtR3uxlKMCQMCvzk7vr17RHKcjx68A== - dependencies: - "@babel/helper-builder-binary-assignment-operator-visitor" "^7.1.0" - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-for-of@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.4.4.tgz#0267fc735e24c808ba173866c6c4d1440fc3c556" - integrity sha512-9T/5Dlr14Z9TIEXLXkt8T1DU7F24cbhwhMNUziN3hB1AXoZcdzPcTiKGRn/6iOymDqtTKWnr/BtRKN9JwbKtdQ== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-function-name@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.4.4.tgz#e1436116abb0610c2259094848754ac5230922ad" - integrity sha512-iU9pv7U+2jC9ANQkKeNF6DrPy4GBa4NWQtl6dHB4Pb3izX2JOEvDTFarlNsBj/63ZEzNNIAMs3Qw4fNCcSOXJA== - dependencies: - "@babel/helper-function-name" "^7.1.0" - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-literals@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.2.0.tgz#690353e81f9267dad4fd8cfd77eafa86aba53ea1" - integrity sha512-2ThDhm4lI4oV7fVQ6pNNK+sx+c/GM5/SaML0w/r4ZB7sAneD/piDJtwdKlNckXeyGK7wlwg2E2w33C/Hh+VFCg== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-member-expression-literals@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.2.0.tgz#fa10aa5c58a2cb6afcf2c9ffa8cb4d8b3d489a2d" - integrity sha512-HiU3zKkSU6scTidmnFJ0bMX8hz5ixC93b4MHMiYebmk2lUVNGOboPsqQvx5LzooihijUoLR/v7Nc1rbBtnc7FA== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-modules-amd@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.2.0.tgz#82a9bce45b95441f617a24011dc89d12da7f4ee6" - integrity sha512-mK2A8ucqz1qhrdqjS9VMIDfIvvT2thrEsIQzbaTdc5QFzhDjQv2CkJJ5f6BXIkgbmaoax3zBr2RyvV/8zeoUZw== - dependencies: - "@babel/helper-module-transforms" "^7.1.0" - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-modules-commonjs@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.4.4.tgz#0bef4713d30f1d78c2e59b3d6db40e60192cac1e" - integrity sha512-4sfBOJt58sEo9a2BQXnZq+Q3ZTSAUXyK3E30o36BOGnJ+tvJ6YSxF0PG6kERvbeISgProodWuI9UVG3/FMY6iw== - dependencies: - "@babel/helper-module-transforms" "^7.4.4" - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-simple-access" "^7.1.0" - -"@babel/plugin-transform-modules-systemjs@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.4.4.tgz#dc83c5665b07d6c2a7b224c00ac63659ea36a405" - integrity sha512-MSiModfILQc3/oqnG7NrP1jHaSPryO6tA2kOMmAQApz5dayPxWiHqmq4sWH2xF5LcQK56LlbKByCd8Aah/OIkQ== - dependencies: - "@babel/helper-hoist-variables" "^7.4.4" - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-modules-umd@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.2.0.tgz#7678ce75169f0877b8eb2235538c074268dd01ae" - integrity sha512-BV3bw6MyUH1iIsGhXlOK6sXhmSarZjtJ/vMiD9dNmpY8QXFFQTj+6v92pcfy1iqa8DeAfJFwoxcrS/TUZda6sw== - dependencies: - "@babel/helper-module-transforms" "^7.1.0" - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-named-capturing-groups-regex@^7.4.5": - version "7.4.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.4.5.tgz#9d269fd28a370258199b4294736813a60bbdd106" - integrity sha512-z7+2IsWafTBbjNsOxU/Iv5CvTJlr5w4+HGu1HovKYTtgJ362f7kBcQglkfmlspKKZ3bgrbSGvLfNx++ZJgCWsg== - dependencies: - regexp-tree "^0.1.6" - -"@babel/plugin-transform-new-target@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.4.4.tgz#18d120438b0cc9ee95a47f2c72bc9768fbed60a5" - integrity sha512-r1z3T2DNGQwwe2vPGZMBNjioT2scgWzK9BCnDEh+46z8EEwXBq24uRzd65I7pjtugzPSj921aM15RpESgzsSuA== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-object-super@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.2.0.tgz#b35d4c10f56bab5d650047dad0f1d8e8814b6598" - integrity sha512-VMyhPYZISFZAqAPVkiYb7dUe2AsVi2/wCT5+wZdsNO31FojQJa9ns40hzZ6U9f50Jlq4w6qwzdBB2uwqZ00ebg== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-replace-supers" "^7.1.0" - -"@babel/plugin-transform-parameters@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.4.4.tgz#7556cf03f318bd2719fe4c922d2d808be5571e16" - integrity sha512-oMh5DUO1V63nZcu/ZVLQFqiihBGo4OpxJxR1otF50GMeCLiRx5nUdtokd+u9SuVJrvvuIh9OosRFPP4pIPnwmw== - dependencies: - "@babel/helper-call-delegate" "^7.4.4" - "@babel/helper-get-function-arity" "^7.0.0" - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-property-literals@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.2.0.tgz#03e33f653f5b25c4eb572c98b9485055b389e905" - integrity sha512-9q7Dbk4RhgcLp8ebduOpCbtjh7C0itoLYHXd9ueASKAG/is5PQtMR5VJGka9NKqGhYEGn5ITahd4h9QeBMylWQ== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-react-display-name@^7.0.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.2.0.tgz#ebfaed87834ce8dc4279609a4f0c324c156e3eb0" - integrity sha512-Htf/tPa5haZvRMiNSQSFifK12gtr/8vwfr+A9y69uF0QcU77AVu4K7MiHEkTxF7lQoHOL0F9ErqgfNEAKgXj7A== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-react-jsx-self@^7.0.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.2.0.tgz#461e21ad9478f1031dd5e276108d027f1b5240ba" - integrity sha512-v6S5L/myicZEy+jr6ielB0OR8h+EH/1QFx/YJ7c7Ua+7lqsjj/vW6fD5FR9hB/6y7mGbfT4vAURn3xqBxsUcdg== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-syntax-jsx" "^7.2.0" - -"@babel/plugin-transform-react-jsx-source@^7.0.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.2.0.tgz#20c8c60f0140f5dd3cd63418d452801cf3f7180f" - integrity sha512-A32OkKTp4i5U6aE88GwwcuV4HAprUgHcTq0sSafLxjr6AW0QahrCRCjxogkbbcdtpbXkuTOlgpjophCxb6sh5g== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-syntax-jsx" "^7.2.0" - -"@babel/plugin-transform-react-jsx@^7.0.0": - version "7.3.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.3.0.tgz#f2cab99026631c767e2745a5368b331cfe8f5290" - integrity sha512-a/+aRb7R06WcKvQLOu4/TpjKOdvVEKRLWFpKcNuHhiREPgGRB4TQJxq07+EZLS8LFVYpfq1a5lDUnuMdcCpBKg== - dependencies: - "@babel/helper-builder-react-jsx" "^7.3.0" - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-syntax-jsx" "^7.2.0" - -"@babel/plugin-transform-regenerator@^7.4.5": - version "7.4.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.4.5.tgz#629dc82512c55cee01341fb27bdfcb210354680f" - integrity sha512-gBKRh5qAaCWntnd09S8QC7r3auLCqq5DI6O0DlfoyDjslSBVqBibrMdsqO+Uhmx3+BlOmE/Kw1HFxmGbv0N9dA== - dependencies: - regenerator-transform "^0.14.0" - -"@babel/plugin-transform-reserved-words@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.2.0.tgz#4792af87c998a49367597d07fedf02636d2e1634" - integrity sha512-fz43fqW8E1tAB3DKF19/vxbpib1fuyCwSPE418ge5ZxILnBhWyhtPgz8eh1RCGGJlwvksHkyxMxh0eenFi+kFw== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-runtime@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.4.4.tgz#a50f5d16e9c3a4ac18a1a9f9803c107c380bce08" - integrity sha512-aMVojEjPszvau3NRg+TIH14ynZLvPewH4xhlCW1w6A3rkxTS1m4uwzRclYR9oS+rl/dr+kT+pzbfHuAWP/lc7Q== - dependencies: - "@babel/helper-module-imports" "^7.0.0" - "@babel/helper-plugin-utils" "^7.0.0" - resolve "^1.8.1" - semver "^5.5.1" - -"@babel/plugin-transform-shorthand-properties@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.2.0.tgz#6333aee2f8d6ee7e28615457298934a3b46198f0" - integrity sha512-QP4eUM83ha9zmYtpbnyjTLAGKQritA5XW/iG9cjtuOI8s1RuL/3V6a3DeSHfKutJQ+ayUfeZJPcnCYEQzaPQqg== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-spread@^7.2.0": - version "7.2.2" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.2.2.tgz#3103a9abe22f742b6d406ecd3cd49b774919b406" - integrity sha512-KWfky/58vubwtS0hLqEnrWJjsMGaOeSBn90Ezn5Jeg9Z8KKHmELbP1yGylMlm5N6TPKeY9A2+UaSYLdxahg01w== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-sticky-regex@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.2.0.tgz#a1e454b5995560a9c1e0d537dfc15061fd2687e1" - integrity sha512-KKYCoGaRAf+ckH8gEL3JHUaFVyNHKe3ASNsZ+AlktgHevvxGigoIttrEJb8iKN03Q7Eazlv1s6cx2B2cQ3Jabw== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-regex" "^7.0.0" - -"@babel/plugin-transform-template-literals@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.4.4.tgz#9d28fea7bbce637fb7612a0750989d8321d4bcb0" - integrity sha512-mQrEC4TWkhLN0z8ygIvEL9ZEToPhG5K7KDW3pzGqOfIGZ28Jb0POUkeWcoz8HnHvhFy6dwAT1j8OzqN8s804+g== - dependencies: - "@babel/helper-annotate-as-pure" "^7.0.0" - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-typeof-symbol@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.2.0.tgz#117d2bcec2fbf64b4b59d1f9819894682d29f2b2" - integrity sha512-2LNhETWYxiYysBtrBTqL8+La0jIoQQnIScUJc74OYvUGRmkskNY4EzLCnjHBzdmb38wqtTaixpo1NctEcvMDZw== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-unicode-regex@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.4.4.tgz#ab4634bb4f14d36728bf5978322b35587787970f" - integrity sha512-il+/XdNw01i93+M9J9u4T7/e/Ue/vWfNZE4IRUQjplu2Mqb/AFTDimkw2tdEdSH50wuQXZAbXSql0UphQke+vA== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-regex" "^7.4.4" - regexpu-core "^4.5.4" - -"@babel/polyfill@^7.2.5": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/polyfill/-/polyfill-7.4.4.tgz#78801cf3dbe657844eeabf31c1cae3828051e893" - integrity sha512-WlthFLfhQQhh+A2Gn5NSFl0Huxz36x86Jn+E9OW7ibK8edKPq+KLy4apM1yDpQ8kJOVi1OVjpP4vSDLdrI04dg== - dependencies: - core-js "^2.6.5" - regenerator-runtime "^0.13.2" - -"@babel/preset-env@^7.4.5": - version "7.4.5" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.4.5.tgz#2fad7f62983d5af563b5f3139242755884998a58" - integrity sha512-f2yNVXM+FsR5V8UwcFeIHzHWgnhXg3NpRmy0ADvALpnhB0SLbCvrCRr4BLOUYbQNLS+Z0Yer46x9dJXpXewI7w== - dependencies: - "@babel/helper-module-imports" "^7.0.0" - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-proposal-async-generator-functions" "^7.2.0" - "@babel/plugin-proposal-json-strings" "^7.2.0" - "@babel/plugin-proposal-object-rest-spread" "^7.4.4" - "@babel/plugin-proposal-optional-catch-binding" "^7.2.0" - "@babel/plugin-proposal-unicode-property-regex" "^7.4.4" - "@babel/plugin-syntax-async-generators" "^7.2.0" - "@babel/plugin-syntax-json-strings" "^7.2.0" - "@babel/plugin-syntax-object-rest-spread" "^7.2.0" - "@babel/plugin-syntax-optional-catch-binding" "^7.2.0" - "@babel/plugin-transform-arrow-functions" "^7.2.0" - "@babel/plugin-transform-async-to-generator" "^7.4.4" - "@babel/plugin-transform-block-scoped-functions" "^7.2.0" - "@babel/plugin-transform-block-scoping" "^7.4.4" - "@babel/plugin-transform-classes" "^7.4.4" - "@babel/plugin-transform-computed-properties" "^7.2.0" - "@babel/plugin-transform-destructuring" "^7.4.4" - "@babel/plugin-transform-dotall-regex" "^7.4.4" - "@babel/plugin-transform-duplicate-keys" "^7.2.0" - "@babel/plugin-transform-exponentiation-operator" "^7.2.0" - "@babel/plugin-transform-for-of" "^7.4.4" - "@babel/plugin-transform-function-name" "^7.4.4" - "@babel/plugin-transform-literals" "^7.2.0" - "@babel/plugin-transform-member-expression-literals" "^7.2.0" - "@babel/plugin-transform-modules-amd" "^7.2.0" - "@babel/plugin-transform-modules-commonjs" "^7.4.4" - "@babel/plugin-transform-modules-systemjs" "^7.4.4" - "@babel/plugin-transform-modules-umd" "^7.2.0" - "@babel/plugin-transform-named-capturing-groups-regex" "^7.4.5" - "@babel/plugin-transform-new-target" "^7.4.4" - "@babel/plugin-transform-object-super" "^7.2.0" - "@babel/plugin-transform-parameters" "^7.4.4" - "@babel/plugin-transform-property-literals" "^7.2.0" - "@babel/plugin-transform-regenerator" "^7.4.5" - "@babel/plugin-transform-reserved-words" "^7.2.0" - "@babel/plugin-transform-shorthand-properties" "^7.2.0" - "@babel/plugin-transform-spread" "^7.2.0" - "@babel/plugin-transform-sticky-regex" "^7.2.0" - "@babel/plugin-transform-template-literals" "^7.4.4" - "@babel/plugin-transform-typeof-symbol" "^7.2.0" - "@babel/plugin-transform-unicode-regex" "^7.4.4" - "@babel/types" "^7.4.4" - browserslist "^4.6.0" - core-js-compat "^3.1.1" - invariant "^2.2.2" - js-levenshtein "^1.1.3" - semver "^5.5.0" - -"@babel/preset-react@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.0.0.tgz#e86b4b3d99433c7b3e9e91747e2653958bc6b3c0" - integrity sha512-oayxyPS4Zj+hF6Et11BwuBkmpgT/zMxyuZgFrMeZID6Hdh3dGlk4sHCAhdBCpuCKW2ppBfl2uCCetlrUIJRY3w== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-transform-react-display-name" "^7.0.0" - "@babel/plugin-transform-react-jsx" "^7.0.0" - "@babel/plugin-transform-react-jsx-self" "^7.0.0" - "@babel/plugin-transform-react-jsx-source" "^7.0.0" - -"@babel/runtime@7.1.2": - version "7.1.2" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.1.2.tgz#81c89935f4647706fc54541145e6b4ecfef4b8e3" - integrity sha512-Y3SCjmhSupzFB6wcv1KmmFucH6gDVnI30WjOcicV10ju0cZjak3Jcs67YLIXBrmZYw1xCrVeJPbycFwrqNyxpg== - dependencies: - regenerator-runtime "^0.12.0" - -"@babel/runtime@7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.2.0.tgz#b03e42eeddf5898e00646e4c840fa07ba8dcad7f" - integrity sha512-oouEibCbHMVdZSDlJBO6bZmID/zA/G/Qx3H1d3rSNPTD+L8UNKvCat7aKWSJ74zYbm5zWGh0GQN0hKj8zYFTCg== - dependencies: - regenerator-runtime "^0.12.0" - -"@babel/runtime@^7.0.0", "@babel/runtime@^7.1.2", "@babel/runtime@^7.2.0", "@babel/runtime@^7.3.1", "@babel/runtime@^7.4.5": - version "7.4.5" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.4.5.tgz#582bb531f5f9dc67d2fcb682979894f75e253f12" - integrity sha512-TuI4qpWZP6lGOGIuGWtp9sPluqYICmbk8T/1vpSysqJxRPkudh/ofFWyqdcMsDf2s7KvDL4/YHgKyvcS3g9CJQ== - dependencies: - regenerator-runtime "^0.13.2" - -"@babel/template@^7.1.0", "@babel/template@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.4.4.tgz#f4b88d1225689a08f5bc3a17483545be9e4ed237" - integrity sha512-CiGzLN9KgAvgZsnivND7rkA+AeJ9JB0ciPOD4U59GKbQP2iQl+olF1l76kJOupqidozfZ32ghwBEJDhnk9MEcw== - dependencies: - "@babel/code-frame" "^7.0.0" - "@babel/parser" "^7.4.4" - "@babel/types" "^7.4.4" - -"@babel/traverse@^7.0.0", "@babel/traverse@^7.1.0", "@babel/traverse@^7.4.4", "@babel/traverse@^7.4.5": - version "7.4.5" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.4.5.tgz#4e92d1728fd2f1897dafdd321efbff92156c3216" - integrity sha512-Vc+qjynwkjRmIFGxy0KYoPj4FdVDxLej89kMHFsWScq999uX+pwcX4v9mWRjW0KcAYTPAuVQl2LKP1wEVLsp+A== - dependencies: - "@babel/code-frame" "^7.0.0" - "@babel/generator" "^7.4.4" - "@babel/helper-function-name" "^7.1.0" - "@babel/helper-split-export-declaration" "^7.4.4" - "@babel/parser" "^7.4.5" - "@babel/types" "^7.4.4" - debug "^4.1.0" - globals "^11.1.0" - lodash "^4.17.11" - -"@babel/types@^7.0.0", "@babel/types@^7.2.0", "@babel/types@^7.3.0", "@babel/types@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.4.4.tgz#8db9e9a629bb7c29370009b4b779ed93fe57d5f0" - integrity sha512-dOllgYdnEFOebhkKCjzSVFqw/PmmB8pH6RGOWkY4GsboQNd47b1fBThBSwlHAq9alF9vc1M3+6oqR47R50L0tQ== - dependencies: - esutils "^2.0.2" - lodash "^4.17.11" - to-fast-properties "^2.0.0" - -"@mrmlnc/readdir-enhanced@^2.2.1": - version "2.2.1" - resolved "https://registry.yarnpkg.com/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz#524af240d1a360527b730475ecfa1344aa540dde" - integrity sha512-bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g== - dependencies: - call-me-maybe "^1.0.1" - glob-to-regexp "^0.3.0" - -"@nodelib/fs.stat@^1.1.2": - version "1.1.3" - resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz#2b5a3ab3f918cca48a8c754c08168e3f03eba61b" - integrity sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw== - -"@ohif/i18n@^0.1.1": - version "0.1.1" - resolved "https://registry.yarnpkg.com/@ohif/i18n/-/i18n-0.1.1.tgz#e4eee433a0a5fb15a41279910ad061e98a371c4c" - integrity sha512-ON1UzWDyi2RD79Z+632vvOh82tl6jglzLHZ1M2rQEm5FLP1PQyrwMEBjETA6jMx7mE1XIWQNiGpbln+7AaPSgg== - dependencies: - "@babel/runtime" "^7.2.0" - classnames "^2.2.6" - rollup-plugin-json "^4.0.0" - -"@samverschueren/stream-to-observable@^0.3.0": - version "0.3.0" - resolved "https://registry.yarnpkg.com/@samverschueren/stream-to-observable/-/stream-to-observable-0.3.0.tgz#ecdf48d532c58ea477acfcab80348424f8d0662f" - integrity sha512-MI4Xx6LHs4Webyvi6EbspgyAb4D2Q2VtnCQ1blOJcoLS6mVa8lNN2rkIy1CVxfTUpoyIbCTkXES1rLXztFD1lg== - dependencies: - any-observable "^0.3.0" - -"@types/asap@^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@types/asap/-/asap-2.0.0.tgz#d529e9608c83499a62ae08c871c5e62271aa2963" - integrity sha512-upIS0Gt9Mc8eEpCbYMZ1K8rhNosfKUtimNcINce+zLwJF5UpM3Vv7yz3S5l/1IX+DxTa8lTkUjqynvjRXyJzsg== - -"@types/events@*": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@types/events/-/events-3.0.0.tgz#2862f3f58a9a7f7c3e78d79f130dd4d71c25c2a7" - integrity sha512-EaObqwIvayI5a8dCzhFrjKzVwKLxjoG9T6Ppd5CEo07LRKfQ8Yokw54r5+Wq7FaBQ+yXRvQAYPrHwya1/UFt9g== - -"@types/glob@^7.1.1": - version "7.1.1" - resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.1.1.tgz#aa59a1c6e3fbc421e07ccd31a944c30eba521575" - integrity sha512-1Bh06cbWJUHMC97acuD6UMG29nMt0Aqz1vF3guLfG+kHHJhy3AyohZFFxYk2f7Q1SQIrNwvncxAE0N/9s70F2w== - dependencies: - "@types/events" "*" - "@types/minimatch" "*" - "@types/node" "*" - -"@types/hoist-non-react-statics@^3.3.1": - version "3.3.1" - resolved "https://registry.yarnpkg.com/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.1.tgz#1124aafe5118cb591977aeb1ceaaed1070eb039f" - integrity sha512-iMIqiko6ooLrTh1joXodJK5X9xeEALT1kM5G3ZLhD3hszxBdIEd5C75U834D9mLcINgD4OyZf5uQXjkuYydWvA== - dependencies: - "@types/react" "*" - hoist-non-react-statics "^3.3.0" - -"@types/invariant@^2.2.29": - version "2.2.29" - resolved "https://registry.yarnpkg.com/@types/invariant/-/invariant-2.2.29.tgz#aa845204cd0a289f65d47e0de63a6a815e30cc66" - integrity sha512-lRVw09gOvgviOfeUrKc/pmTiRZ7g7oDOU6OAutyuSHpm1/o2RaBQvRhgK8QEdu+FFuw/wnWb29A/iuxv9i8OpQ== - -"@types/minimatch@*": - version "3.0.3" - resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.3.tgz#3dca0e3f33b200fc7d1139c0cd96c1268cadfd9d" - integrity sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA== - -"@types/node@*": - version "12.0.10" - resolved "https://registry.yarnpkg.com/@types/node/-/node-12.0.10.tgz#51babf9c7deadd5343620055fc8aff7995c8b031" - integrity sha512-LcsGbPomWsad6wmMNv7nBLw7YYYyfdYcz6xryKYQhx89c3XXan+8Q6AJ43G5XDIaklaVkK3mE4fCb0SBvMiPSQ== - -"@types/normalize-package-data@^2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz#e486d0d97396d79beedd0a6e33f4534ff6b4973e" - integrity sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA== - -"@types/prop-types@*": - version "15.7.1" - resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.1.tgz#f1a11e7babb0c3cad68100be381d1e064c68f1f6" - integrity sha512-CFzn9idOEpHrgdw8JsoTkaDDyRWk1jrzIV8djzcgpq0y9tG4B4lFT+Nxh52DVpDXV+n4+NPNv7M1Dj5uMp6XFg== - -"@types/react@*": - version "16.8.22" - resolved "https://registry.yarnpkg.com/@types/react/-/react-16.8.22.tgz#7f18bf5ea0c1cad73c46b6b1c804a3ce0eec6d54" - integrity sha512-C3O1yVqk4sUXqWyx0wlys76eQfhrQhiDhDlHBrjER76lR2S2Agiid/KpOU9oCqj1dISStscz7xXz1Cg8+sCQeA== - dependencies: - "@types/prop-types" "*" - csstype "^2.2.0" - -"@types/shallowequal@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@types/shallowequal/-/shallowequal-1.1.1.tgz#aad262bb3f2b1257d94c71d545268d592575c9b1" - integrity sha512-Lhni3aX80zbpdxRuWhnuYPm8j8UQaa571lHP/xI4W+7BAFhSIhRReXnqjEgT/XzPoXZTJkCqstFMJ8CZTK6IlQ== - -"@types/unist@*", "@types/unist@^2.0.0": - version "2.0.3" - resolved "https://registry.yarnpkg.com/@types/unist/-/unist-2.0.3.tgz#9c088679876f374eb5983f150d4787aa6fb32d7e" - integrity sha512-FvUupuM3rlRsRtCN+fDudtmytGO6iHJuuRKS1Ss0pG5z8oX0diNEw94UEL7hgDbpN94rgaK5R7sWm6RrSkZuAQ== - -"@types/vfile-message@*": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@types/vfile-message/-/vfile-message-1.0.1.tgz#e1e9895cc6b36c462d4244e64e6d0b6eaf65355a" - integrity sha512-mlGER3Aqmq7bqR1tTTIVHq8KSAFFRyGbrxuM8C/H82g6k7r2fS+IMEkIu3D7JHzG10NvPdR8DNx0jr0pwpp4dA== - dependencies: - "@types/node" "*" - "@types/unist" "*" - -"@types/vfile@^3.0.0": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@types/vfile/-/vfile-3.0.2.tgz#19c18cd232df11ce6fa6ad80259bc86c366b09b9" - integrity sha512-b3nLFGaGkJ9rzOcuXRfHkZMdjsawuDD0ENL9fzTophtBg8FJHSGbH7daXkEpcwy3v7Xol3pAvsmlYyFhR4pqJw== - dependencies: - "@types/node" "*" - "@types/unist" "*" - "@types/vfile-message" "*" - -"@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== - -abbrev@1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" - integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== - -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-jsx@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.0.1.tgz#32a064fd925429216a09b141102bfdd185fae40e" - integrity sha512-HJ7CfNHrfJLlNTzIEUTj43LNWGkqpRLxm3YjAlcD0ACydk9XynzYsCBHxut+iqt+1aBXkx9UP/w/ZqMr13XIzg== - -acorn@^6.0.5, acorn@^6.0.7: - version "6.1.1" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.1.1.tgz#7d25ae05bb8ad1f9b699108e1094ecd7884adc1f" - integrity sha512-jPTiwtOxaHNaAPg/dmrJ/beuzLRnXtB0kQPQ8JpotKJgTB6rX6c8mlf315941pyjBSaPg8NHXS9fhP4u17DpGA== - -airbnb-prop-types@^2.10.0, airbnb-prop-types@^2.12.0, airbnb-prop-types@^2.8.1: - version "2.13.2" - resolved "https://registry.yarnpkg.com/airbnb-prop-types/-/airbnb-prop-types-2.13.2.tgz#43147a5062dd2a4a5600e748a47b64004cc5f7fc" - integrity sha512-2FN6DlHr6JCSxPPi25EnqGaXC4OC3/B3k1lCd6MMYrZ51/Gf/1qDfaR+JElzWa+Tl7cY2aYOlsYJGFeQyVHIeQ== - dependencies: - array.prototype.find "^2.0.4" - function.prototype.name "^1.1.0" - has "^1.0.3" - is-regex "^1.0.4" - object-is "^1.0.1" - object.assign "^4.1.0" - object.entries "^1.1.0" - prop-types "^15.7.2" - prop-types-exact "^1.2.0" - react-is "^16.8.6" - -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@^6.1.0, ajv@^6.10.0, ajv@^6.9.1: - version "6.10.0" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.10.0.tgz#90d0d54439da587cd7e843bfb7045f50bd22bdf1" - integrity sha512-nffhOpkymDECQyR0mnsUtoCE8RlX38G0rYP+wgLWFyZuUyuuojSSvi/+euOiQBIn63whYwYVIIH1TvE3tu4OEg== - dependencies: - fast-deep-equal "^2.0.1" - fast-json-stable-stringify "^2.0.0" - json-schema-traverse "^0.4.1" - uri-js "^4.2.2" - -amdefine@>=0.0.4: - version "1.0.1" - resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5" - integrity sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU= - -ansi-escapes@^3.0.0, ansi-escapes@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.2.0.tgz#8780b98ff9dbf5638152d1f1fe5c1d7b4442976b" - integrity sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ== - -ansi-regex@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" - integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8= - -ansi-regex@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" - integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg= - -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" - integrity sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4= - -ansi-styles@^3.2.0, ansi-styles@^3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" - integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== - dependencies: - color-convert "^1.9.0" - -any-observable@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/any-observable/-/any-observable-0.3.0.tgz#af933475e5806a67d0d7df090dd5e8bef65d119b" - integrity sha512-/FQM1EDkTsf63Ub2C6O7GuYFDsSXUwsaZDurV0np41ocwq0jthUAYCmhBX9f+KwlaCgIuWyr/4WlUQUBfKfZog== - -anymatch@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" - integrity sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw== - dependencies: - micromatch "^3.1.4" - normalize-path "^2.1.1" - -aproba@^1.0.3, aproba@^1.1.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" - integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw== - -are-we-there-yet@~1.1.2: - version "1.1.5" - resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz#4b35c2944f062a8bfcda66410760350fe9ddfc21" - integrity sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w== - dependencies: - delegates "^1.0.0" - readable-stream "^2.0.6" - -argparse@^1.0.7: - version "1.0.10" - resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" - integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== - dependencies: - sprintf-js "~1.0.2" - -arr-diff@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" - integrity sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA= - -arr-flatten@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" - integrity sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg== - -arr-union@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" - integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ= - -array-find-index@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1" - integrity sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E= - -array-includes@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.0.3.tgz#184b48f62d92d7452bb31b323165c7f8bd02266d" - integrity sha1-GEtI9i2S10UrsxsyMWXH+L0CJm0= - dependencies: - define-properties "^1.1.2" - es-abstract "^1.7.0" - -array-union@^1.0.1, array-union@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" - integrity sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk= - dependencies: - array-uniq "^1.0.1" - -array-uniq@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" - integrity sha1-r2rId6Jcx/dOBYiUdThY39sk/bY= - -array-unique@^0.3.2: - version "0.3.2" - resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" - integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg= - -array.prototype.find@^2.0.4: - version "2.1.0" - resolved "https://registry.yarnpkg.com/array.prototype.find/-/array.prototype.find-2.1.0.tgz#630f2eaf70a39e608ac3573e45cf8ccd0ede9ad7" - integrity sha512-Wn41+K1yuO5p7wRZDl7890c3xvv5UBrfVXTVIe28rSQb6LS0fZMDrQB6PAcxQFRFy6vJTLDc3A2+3CjQdzVKRg== - dependencies: - define-properties "^1.1.3" - es-abstract "^1.13.0" - -array.prototype.flat@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.2.1.tgz#812db8f02cad24d3fab65dd67eabe3b8903494a4" - integrity sha512-rVqIs330nLJvfC7JqYvEWwqVr5QjYF1ib02i3YJtR/fICO6527Tjpc/e4Mvmxh3GIePPreRXMdaGyC99YphWEw== - dependencies: - define-properties "^1.1.2" - es-abstract "^1.10.0" - function-bind "^1.1.1" - -arrify@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" - integrity sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0= - -asap@^2.0.6, asap@~2.0.3: - version "2.0.6" - resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" - integrity sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY= - -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" - -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" - resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" - integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c= - -astral-regex@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9" - integrity sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg== - -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@^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.17.11" - -atob@^2.1.1: - version "2.1.2" - resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" - integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== - -autoprefixer@^9.5.1: - version "9.6.0" - resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-9.6.0.tgz#0111c6bde2ad20c6f17995a33fad7cf6854b4c87" - integrity sha512-kuip9YilBqhirhHEGHaBTZKXL//xxGnzvsD0FtBQa6z+A69qZD6s/BAX9VzDF1i9VKDquTJDQaPLSEhOnL6FvQ== - dependencies: - browserslist "^4.6.1" - caniuse-lite "^1.0.30000971" - chalk "^2.4.2" - normalize-range "^0.1.2" - num2fraction "^1.2.2" - postcss "^7.0.16" - postcss-value-parser "^3.3.1" - -babel-eslint@^10.0.1: - version "10.0.2" - resolved "https://registry.yarnpkg.com/babel-eslint/-/babel-eslint-10.0.2.tgz#182d5ac204579ff0881684b040560fdcc1558456" - integrity sha512-UdsurWPtgiPgpJ06ryUnuaSXC2s0WoSZnQmEpbAH65XZSdwowgN5MvyP7e88nW07FYXv72erVtpBkxyDVKhH1Q== - dependencies: - "@babel/code-frame" "^7.0.0" - "@babel/parser" "^7.0.0" - "@babel/traverse" "^7.0.0" - "@babel/types" "^7.0.0" - eslint-scope "3.7.1" - eslint-visitor-keys "^1.0.0" - -babel-loader@^8.0.6: - version "8.0.6" - resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-8.0.6.tgz#e33bdb6f362b03f4bb141a0c21ab87c501b70dfb" - integrity sha512-4BmWKtBOBm13uoUwd08UwjZlaw3O9GWf456R9j+5YykFZ6LUIjIKLc0zEZf+hauxPOJs96C8k6FvYD09vWzhYw== - dependencies: - find-cache-dir "^2.0.0" - loader-utils "^1.0.2" - mkdirp "^0.5.1" - pify "^4.0.1" - -bail@^1.0.0: - version "1.0.4" - resolved "https://registry.yarnpkg.com/bail/-/bail-1.0.4.tgz#7181b66d508aa3055d3f6c13f0a0c720641dde9b" - integrity sha512-S8vuDB4w6YpRhICUDET3guPlQpaJl7od94tpZ0Fvnyp+MKW/HyDTcRDck+29C9g+d/qQHnddRH3+94kZdrW0Ww== - -balanced-match@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" - integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= - -base64-js@1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.2.1.tgz#a91947da1f4a516ea38e5b4ec0ec3773675e0886" - integrity sha512-dwVUVIXsBZXwTuwnXI9RK8sBmgq09NDHzyR9SAph9eqk76gKK2JSQmZARC2zRC81JC2QTtxD0ARU5qTS25gIGw== - -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" - integrity sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg== - dependencies: - cache-base "^1.0.1" - class-utils "^0.3.5" - component-emitter "^1.2.1" - define-property "^1.0.0" - isobject "^3.0.1" - mixin-deep "^1.2.0" - pascalcase "^0.1.1" - -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== - -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== - -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== - -blueimp-md5@2.10.0: - version "2.10.0" - resolved "https://registry.yarnpkg.com/blueimp-md5/-/blueimp-md5-2.10.0.tgz#02f0843921f90dca14f5b8920a38593201d6964d" - integrity sha512-EkNUOi7tpV68TqjpiUz9D9NcT8um2+qtgntmMbi5UKssVX2m/2PLqotcric0RE63pB3HPN/fjf3cKHN2ufGSUQ== - -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== - -brace-expansion@^1.1.7: - version "1.1.11" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" - integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== - dependencies: - balanced-match "^1.0.0" - concat-map "0.0.1" - -braces@^2.3.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" - -brcast@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/brcast/-/brcast-2.0.2.tgz#2db16de44140e418dc37fab10beec0369e78dcef" - integrity sha512-Tfn5JSE7hrUlFcOoaLzVvkbgIemIorMIyoMr3TgvszWW7jFt2C9PdeMLtysYD9RU0MmU17b69+XJG1eRY2OBRg== - -brorand@^1.0.1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" - integrity sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8= - -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" - -browserslist@^4.6.0, browserslist@^4.6.1, browserslist@^4.6.2: - version "4.6.3" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.6.3.tgz#0530cbc6ab0c1f3fc8c819c72377ba55cf647f05" - integrity sha512-CNBqTCq22RKM8wKJNowcqihHJ4SkI8CGeK7KOR9tPboXUuS5Zk5lQgzzTbs4oxD8x+6HUshZUa2OyNI9lR93bQ== - dependencies: - caniuse-lite "^1.0.30000975" - electron-to-chromium "^1.3.164" - node-releases "^1.1.23" - -buffer-from@^1.0.0: - 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-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-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" - integrity sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ== - dependencies: - collection-visit "^1.0.0" - component-emitter "^1.2.1" - get-value "^2.0.6" - has-value "^1.0.0" - isobject "^3.0.1" - set-value "^2.0.0" - to-object-path "^0.3.0" - union-value "^1.0.0" - unset-value "^1.0.0" - -call-me-maybe@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/call-me-maybe/-/call-me-maybe-1.0.1.tgz#26d208ea89e37b5cbde60250a15f031c16a4d66b" - integrity sha1-JtII6onje1y95gJQoV8DHBak1ms= - -caller-callsite@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/caller-callsite/-/caller-callsite-2.0.0.tgz#847e0fce0a223750a9a027c54b33731ad3154134" - integrity sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ= - dependencies: - callsites "^2.0.0" - -caller-path@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-2.0.0.tgz#468f83044e369ab2010fac5f06ceee15bb2cb1f4" - integrity sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ= - dependencies: - caller-callsite "^2.0.0" - -callsites@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/callsites/-/callsites-2.0.0.tgz#06eb84f00eea413da86affefacbffb36093b3c50" - integrity sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA= - -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-keys@^4.0.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-4.2.0.tgz#a2aa5fb1af688758259c32c141426d78923b9b77" - integrity sha1-oqpfsa9oh1glnDLBQUJteJI7m3c= - dependencies: - camelcase "^4.1.0" - map-obj "^2.0.0" - quick-lru "^1.0.0" - -camelcase@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd" - integrity sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0= - -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== - -caniuse-lite@^1.0.30000971, caniuse-lite@^1.0.30000975: - version "1.0.30000978" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000978.tgz#1e3346c27fc46bce9ac1ccd77863153a263dde56" - integrity sha512-H6gK6kxUzG6oAwg/Jal279z8pHw0BzrpZfwo/CA9FFm/vA0l8IhDfkZtepyJNE2Y4V6Dp3P3ubz6czby1/Mgsw== - -cardboard-vr-display@^1.0.15: - version "1.0.16" - resolved "https://registry.yarnpkg.com/cardboard-vr-display/-/cardboard-vr-display-1.0.16.tgz#f91e2798e8fb70a348599638c6742c72dfeadabc" - integrity sha512-GFBWPMH/ixy4Ji014BAO1ryddGHphtJlA8gUR6UdKsOpPjUQukCKpgsx2XIJ5oBlqXnDQOcLVRqBWyuvTI32jQ== - dependencies: - gl-preserve-state "^1.0.0" - nosleep.js "^0.7.0" - webvr-polyfill-dpdb "^1.0.11" - -ccount@^1.0.0: - version "1.0.4" - resolved "https://registry.yarnpkg.com/ccount/-/ccount-1.0.4.tgz#9cf2de494ca84060a2a8d2854edd6dfb0445f386" - integrity sha512-fpZ81yYfzentuieinmGnphk0pLkOTMm6MZdVqwd77ROvhko6iujLNGrHH5E7utq3ygWklwfmwuG+A7P+NpqT6w== - -chalk@2.4.2, chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.3.1, 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" - -chalk@^1.0.0, chalk@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" - integrity sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg= - dependencies: - ansi-styles "^2.2.1" - escape-string-regexp "^1.0.2" - has-ansi "^2.0.0" - strip-ansi "^3.0.0" - supports-color "^2.0.0" - -character-entities-html4@^1.0.0: - version "1.1.3" - resolved "https://registry.yarnpkg.com/character-entities-html4/-/character-entities-html4-1.1.3.tgz#5ce6e01618e47048ac22f34f7f39db5c6fd679ef" - integrity sha512-SwnyZ7jQBCRHELk9zf2CN5AnGEc2nA+uKMZLHvcqhpPprjkYhiLn0DywMHgN5ttFZuITMATbh68M6VIVKwJbcg== - -character-entities-legacy@^1.0.0: - version "1.1.3" - resolved "https://registry.yarnpkg.com/character-entities-legacy/-/character-entities-legacy-1.1.3.tgz#3c729991d9293da0ede6dddcaf1f2ce1009ee8b4" - integrity sha512-YAxUpPoPwxYFsslbdKkhrGnXAtXoHNgYjlBM3WMXkWGTl5RsY3QmOyhwAgL8Nxm9l5LBThXGawxKPn68y6/fww== - -character-entities@^1.0.0: - version "1.2.3" - resolved "https://registry.yarnpkg.com/character-entities/-/character-entities-1.2.3.tgz#bbed4a52fe7ef98cc713c6d80d9faa26916d54e6" - integrity sha512-yB4oYSAa9yLcGyTbB4ItFwHw43QHdH129IJ5R+WvxOkWlyFnR5FAaBNnUq4mcxsTVZGh28bHoeTHMKXH1wZf3w== - -character-reference-invalid@^1.0.0: - version "1.1.3" - resolved "https://registry.yarnpkg.com/character-reference-invalid/-/character-reference-invalid-1.1.3.tgz#1647f4f726638d3ea4a750cf5d1975c1c7919a85" - integrity sha512-VOq6PRzQBam/8Jm6XBGk2fNEnHXAdGd6go0rtd4weAGECBamHDwwCQSOT12TACIYUZegUXnV6xBXqUssijtxIg== - -chardet@^0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" - integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== - -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@^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" - integrity sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg== - dependencies: - arr-union "^3.1.0" - define-property "^0.2.5" - isobject "^3.0.0" - static-extend "^0.1.1" - -classnames@2.2.6, classnames@^2.2.5, classnames@^2.2.6: - version "2.2.6" - resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.2.6.tgz#43935bffdd291f326dad0a205309b38d00f650ce" - integrity sha512-JR/iSQOSt+LQIWwrwEzJ9uk0xfN3mTVYMwt1Ir5mUcSN6pU+V4zQFFaJsclJbPuAUQH+yfWef6tm7l1quW3C8Q== - -cli-cursor@^2.0.0, cli-cursor@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5" - integrity sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU= - dependencies: - restore-cursor "^2.0.0" - -cli-truncate@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-0.2.1.tgz#9f15cfbb0705005369216c626ac7d05ab90dd574" - integrity sha1-nxXPuwcFAFNpIWxiasfQWrkN1XQ= - dependencies: - slice-ansi "0.0.4" - string-width "^1.0.1" - -cli-width@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.0.tgz#ff19ede8a9a5e579324147b0c11f0fbcbabed639" - integrity sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk= - -cliui@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-5.0.0.tgz#deefcfdb2e800784aa34f46fa08e06851c7bbbc5" - integrity sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA== - dependencies: - string-width "^3.1.0" - strip-ansi "^5.2.0" - wrap-ansi "^5.1.0" - -clone-regexp@^2.1.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/clone-regexp/-/clone-regexp-2.2.0.tgz#7d65e00885cd8796405c35a737e7a86b7429e36f" - integrity sha512-beMpP7BOtTipFuW8hrJvREQ2DrRu3BE7by0ZpibtfBA+qfHYvMGTc2Yb1JMYPKg/JUw0CHYvpg796aNTSW9z7Q== - dependencies: - is-regexp "^2.0.0" - -code-point-at@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" - integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c= - -collapse-white-space@^1.0.2: - version "1.0.5" - resolved "https://registry.yarnpkg.com/collapse-white-space/-/collapse-white-space-1.0.5.tgz#c2495b699ab1ed380d29a1091e01063e75dbbe3a" - integrity sha512-703bOOmytCYAX9cXYqoikYIx6twmFCXsnzRQheBcTG3nzKYBR4P/+wkYeH+Mvj7qUz8zZDtdyzbxfnEi/kYzRQ== - -collection-visit@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" - integrity sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA= - dependencies: - map-visit "^1.0.0" - object-visit "^1.0.0" - -color-convert@^1.9.0: - version "1.9.3" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" - integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== - dependencies: - color-name "1.1.3" - -color-name@1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" - integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= - -commander@2.11.0: - version "2.11.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.11.0.tgz#157152fd1e7a6c8d98a5b715cf376df928004563" - integrity sha512-b0553uYA5YAEGgyYIGYROzKQ7X5RAqedkfjiZxwi0kL1g3bOaBNNZfYkzt/CL0umgD5wc9Jec2FbB98CjkMRvQ== - -commander@^2.14.1, commander@^2.18.0, commander@^2.19.0, commander@^2.9.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= - -component-emitter@^1.2.1: - version "1.3.0" - resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0" - integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg== - -concat-map@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" - integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= - -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" - integrity sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4= - -"consolidated-events@^1.1.1 || ^2.0.0": - version "2.0.2" - resolved "https://registry.yarnpkg.com/consolidated-events/-/consolidated-events-2.0.2.tgz#da8d8f8c2b232831413d9e190dc11669c79f4a91" - integrity sha512-2/uRVMdRypf5z/TW/ncD/66l75P5hH2vM/GR8Jf8HLc2xnfJtmina6F6du8+v4Z2vTrMo7jC+W1tmEEuuELgkQ== - -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= - -contains-path@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/contains-path/-/contains-path-0.1.0.tgz#fe8cf184ff6670b6baef01a9d4861a5cbec4120a" - integrity sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo= - -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" - -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" - integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= - -core-js-compat@^3.1.1: - version "3.1.4" - resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.1.4.tgz#e4d0c40fbd01e65b1d457980fe4112d4358a7408" - integrity sha512-Z5zbO9f1d0YrJdoaQhphVAnKPimX92D6z8lCGphH89MNRxlL1prI9ExJPqVwP0/kgkQCv8c4GJGT8X16yUncOg== - dependencies: - browserslist "^4.6.2" - core-js-pure "3.1.4" - semver "^6.1.1" - -core-js-pure@3.1.4: - version "3.1.4" - resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.1.4.tgz#5fa17dc77002a169a3566cc48dc774d2e13e3769" - integrity sha512-uJ4Z7iPNwiu1foygbcZYJsJs1jiXrTTCvxfLDXNhI/I+NHbSIEyr548y4fcsCEyWY0XgfAG/qqaunJ1SThHenA== - -core-js@^1.0.0: - version "1.2.7" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-1.2.7.tgz#652294c14651db28fa93bd2d5ff2983a4f08c636" - integrity sha1-ZSKUwUZR2yj6k70tX/KYOk8IxjY= - -core-js@^2.6.5: - version "2.6.9" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.9.tgz#6b4b214620c834152e179323727fc19741b084f2" - integrity sha512-HOpZf6eXmnl7la+cUdMnLvUxKNqLUzJvgIziQ0DiF3JwSImNphIqdGqzj6hIKyX04MmV0poclQ7+wjWvxQyR2A== - -core-js@~2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.3.0.tgz#fab83fbb0b2d8dc85fa636c4b9d34c75420c6d65" - integrity sha1-+rg/uwstjchfpjbEudNMdUIMbWU= - -core-util-is@~1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" - integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= - -cornerstone-math@0.1.7: - version "0.1.7" - resolved "https://registry.yarnpkg.com/cornerstone-math/-/cornerstone-math-0.1.7.tgz#7c55536f02e7221b05fc49a4c780bb82c234ce39" - integrity sha512-svsDSoqLNFM9niCV2AtV2DNmRkYztT1v80lVdbA5hkgdGdpWg5/h2On794zbqBK+aI3hNOHufERDsI4wdXGknA== - -cornerstone-tools@^3.13.0: - version "3.14.1" - resolved "https://registry.yarnpkg.com/cornerstone-tools/-/cornerstone-tools-3.14.1.tgz#9a15bca1c4ab96698e91b35f38b5cfa165d58032" - integrity sha512-gfYhRawZ7oZhft1klF2b6IcTciN3f05YM8v4AWT6sVcPiA+MkRPf9GVcrmUOUDsfUtg8RG0TAAO7lN9lRr92BQ== - dependencies: - "@babel/runtime" "7.1.2" - cornerstone-math "0.1.7" - debug "4.1.1" - -cornerstone-wado-image-loader@^2.2.3: - version "2.2.3" - resolved "https://registry.yarnpkg.com/cornerstone-wado-image-loader/-/cornerstone-wado-image-loader-2.2.3.tgz#2d4c06b5c87cd9198b52906c48e2d9dd145de986" - integrity sha512-0N5ykSEVoUx3zzfGn5Oaa7OJL/EHOthPUI2Kv8gSnMgf6ipcz5TcK8xGMOfu6grMkKlNb0SFJ/cEqsHR7bddKQ== - dependencies: - dicom-parser "^1.8.1" - -cosmiconfig@^5.2.0: - version "5.2.1" - resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-5.2.1.tgz#040f726809c591e77a17c0a3626ca45b4f168b1a" - integrity sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA== - dependencies: - import-fresh "^2.0.0" - is-directory "^0.3.1" - js-yaml "^3.13.1" - parse-json "^4.0.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-env@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/cross-env/-/cross-env-5.2.0.tgz#6ecd4c015d5773e614039ee529076669b9d126f2" - integrity sha512-jtdNFfFW1hB7sMhr/H6rW1Z45LFqyI431m3qU6bFXcQ3Eh7LtBuG3h74o7ohHZ3crrRkkqHlo4jYHFPcjroANg== - dependencies: - cross-spawn "^6.0.5" - is-windows "^1.0.0" - -cross-spawn@6.0.5, 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: - nice-try "^1.0.4" - path-key "^2.0.1" - semver "^5.5.0" - shebang-command "^1.2.0" - which "^1.2.9" - -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" - -css-parse@1.7.x: - version "1.7.0" - resolved "https://registry.yarnpkg.com/css-parse/-/css-parse-1.7.0.tgz#321f6cf73782a6ff751111390fc05e2c657d8c9b" - integrity sha1-Mh9s9zeCpv91ERE5D8BeLGV9jJs= - -csstype@^2.2.0: - version "2.6.5" - resolved "https://registry.yarnpkg.com/csstype/-/csstype-2.6.5.tgz#1cd1dff742ebf4d7c991470ae71e12bb6751e034" - integrity sha512-JsTaiksRsel5n7XwqPAfB0l3TFKdpjW/kgAELf9vrb5adGA7UCPLajKK5s3nFrcFm3Rkyp/Qkgl73ENc1UY3cA== - -currently-unhandled@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/currently-unhandled/-/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea" - integrity sha1-mI3zP+qxke95mmE2nddsF635V+o= - dependencies: - array-find-index "^1.0.1" - -cyclist@~0.2.2: - version "0.2.2" - resolved "https://registry.yarnpkg.com/cyclist/-/cyclist-0.2.2.tgz#1b33792e11e914a2fd6d6ed6447464444e5fa640" - integrity sha1-GzN5LhHpFKL9bW7WRHRkRE5fpkA= - -date-fns@^1.27.2: - version "1.30.1" - resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-1.30.1.tgz#2e71bf0b119153dbb4cc4e88d9ea5acfb50dc05c" - integrity sha512-hBSVCvSmWC+QypYObzwGOd9wqdDpOt+0wl0KbU+R+uuZBS1jN8VsD1ss3irQDknRj5NvxiTF6oj/nDRnN/UQNw== - -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= - -dcmjs@^0.4.7: - version "0.4.7" - resolved "https://registry.yarnpkg.com/dcmjs/-/dcmjs-0.4.7.tgz#f99de63fb0f0e126ac83b623a9a3a2b52e3e68e9" - integrity sha512-X90bCdd/xXJN52KXdIn6apmw1LnOtXYzWMFx8uo/ojKzrCEQXipmMok8CGf0tlKybFOMQM9vmF/yQ9UazAL2bg== - dependencies: - "@babel/polyfill" "^7.2.5" - "@babel/runtime" "^7.3.1" - loglevelnext "^3.0.0" - ndarray "^1.0.18" - -debug@*, debug@4.1.1, debug@^4.0.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" - -debug@^2.2.0, debug@^2.3.3, debug@^2.6.8, debug@^2.6.9: - version "2.6.9" - resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" - integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== - dependencies: - ms "2.0.0" - -debug@^3.1.0, debug@^3.2.6: - version "3.2.6" - resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" - integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ== - dependencies: - ms "^2.1.1" - -decamelize-keys@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/decamelize-keys/-/decamelize-keys-1.1.0.tgz#d171a87933252807eb3cb61dc1c1445d078df2d9" - integrity sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk= - dependencies: - decamelize "^1.1.0" - map-obj "^1.0.0" - -decamelize@^1.1.0, decamelize@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" - integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= - -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" - integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU= - -dedent@^0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c" - integrity sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw= - -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" - integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= - -deepmerge@^1.5.1, deepmerge@^1.5.2: - version "1.5.2" - resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-1.5.2.tgz#10499d868844cdad4fee0842df8c7f6f0c95a753" - integrity sha512-95k0GDqvBjZavkuvzx/YqVLv/6YYa17fz6ILMSf7neqQITCPbnfEnQvEgMPNjH4kgobe7+WIL0yJEHku+H3qtQ== - -define-properties@^1.1.2, define-properties@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" - integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== - dependencies: - object-keys "^1.0.12" - -define-property@^0.2.5: - version "0.2.5" - resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116" - integrity sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY= - dependencies: - is-descriptor "^0.1.0" - -define-property@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6" - integrity sha1-dp66rz9KY6rTr56NMEybvnm/sOY= - dependencies: - is-descriptor "^1.0.0" - -define-property@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d" - integrity sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ== - dependencies: - is-descriptor "^1.0.2" - isobject "^3.0.1" - -del@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/del/-/del-3.0.0.tgz#53ecf699ffcbcb39637691ab13baf160819766e5" - integrity sha1-U+z2mf/LyzljdpGrE7rxYIGXZuU= - dependencies: - globby "^6.1.0" - is-path-cwd "^1.0.0" - is-path-in-cwd "^1.0.0" - p-map "^1.1.1" - pify "^3.0.0" - rimraf "^2.2.8" - -delegates@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" - integrity sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o= - -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: - 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" - resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" - integrity sha1-+hN8S9aY7fVc1c0CrFWfkaTEups= - -dicom-parser@^1.8.1, dicom-parser@^1.8.3: - version "1.8.3" - resolved "https://registry.yarnpkg.com/dicom-parser/-/dicom-parser-1.8.3.tgz#6e4b862898112304db30143147562011c1ce6a4d" - integrity sha512-CMeUr+jea7Ml70N+/Z5Pd2MYtvLp6IU+TnvdLe6VRVKzZuTeYLYyuAQa9R+sFK4v4N39hig+hKHN+Wfi9sQ6GA== - -dicomweb-client@^0.4.2: - version "0.4.4" - resolved "https://registry.yarnpkg.com/dicomweb-client/-/dicomweb-client-0.4.4.tgz#0ca0c7706556f3114330a3c40946ee66808148e4" - integrity sha512-5S7wLYxQgHnOyEgR1zlZlt79IjzOk+YDB/Jjzte6ijRZsAoj9RUiIZcsTyxvBD9gLMYs/954n2kYHdbz83Xbtw== - -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" - -dir-glob@^2.2.2: - version "2.2.2" - resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-2.2.2.tgz#fa09f0694153c8918b18ba0deafae94769fc50c4" - integrity sha512-f9LBi5QWzIW3I6e//uxZoLBlUt9kcp66qo0sSCxL6YZKc75R1c4MFCoe/LaZiBGmgujvQdxc5Bn3QhfyvK5Hsw== - dependencies: - path-type "^3.0.0" - -direction@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/direction/-/direction-1.0.3.tgz#5030e1e091e923904067d015dbaafd08f4d27d26" - integrity sha512-8bHRqMt4w/kND19KBksE4NOJo+gIOPuiZfxQvbd6xikfKbuNBYBdLIw0hA/4lWzBaDpwpW+Olmg1BjD9+0LU2w== - -dnd-core@^7.4.4: - version "7.7.0" - resolved "https://registry.yarnpkg.com/dnd-core/-/dnd-core-7.7.0.tgz#3166aefc8c5b85ca4ade4ae836712a3108975fab" - integrity sha512-+YqwflWEY1MEAEl2QiEiRaglYkCwIZryyQwximQGuTOm/ns7fS6Lg/i7OCkrtjM10D5FhArf/VUHIL4ZaRBK0g== - dependencies: - asap "^2.0.6" - invariant "^2.2.4" - redux "^4.0.1" - -dnd-core@^8.0.3: - version "8.0.3" - resolved "https://registry.yarnpkg.com/dnd-core/-/dnd-core-8.0.3.tgz#96fdaae0f53ca86996ed50075000ebd758169682" - integrity sha512-jffgwAMsv5g6TRDmvjBW0EUntVXO8+X184zBRFnOmCfhFU8EV7/Aq+wPpJCeRAMge8fMYJGrjlm1xeH0wMrHYQ== - dependencies: - "@types/asap" "^2.0.0" - "@types/invariant" "^2.2.29" - asap "^2.0.6" - invariant "^2.2.4" - redux "^4.0.1" - -doctrine@1.5.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-1.5.0.tgz#379dce730f6166f76cefa4e6707a159b02c5a6fa" - integrity sha1-N53Ocw9hZvds76TmcHoVmwLFpvo= - dependencies: - esutils "^2.0.2" - isarray "^1.0.0" - -doctrine@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d" - integrity sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw== - dependencies: - esutils "^2.0.2" - -doctrine@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" - integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== - dependencies: - esutils "^2.0.2" - -document.contains@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/document.contains/-/document.contains-1.0.1.tgz#a18339ec8e74f407fa34709b65f45605b38a3e1f" - integrity sha512-A1KqlZq1w605bwiiLqVZehWE9S9UYlUXPoduFWi64pNVNQ9vy6wwH/7BS+iEfSlF1YyZgcg5PZw5HqDi7FCrUw== - dependencies: - define-properties "^1.1.3" - -dom-helpers@^3.2.1, dom-helpers@^3.3.1, dom-helpers@^3.4.0: - version "3.4.0" - resolved "https://registry.yarnpkg.com/dom-helpers/-/dom-helpers-3.4.0.tgz#e9b369700f959f62ecde5a6babde4bccd9169af8" - integrity sha512-LnuPJ+dwqKDIyotW1VzmOZ5TONUN7CwkCR5hrgawTUbkBGYdeoNLZo6nNfGkCrjtE1nXXaj7iMMpDa8/d9WoIA== - dependencies: - "@babel/runtime" "^7.1.2" - -dom-serializer@0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.1.1.tgz#1ec4059e284babed36eec2941d4a970a189ce7c0" - integrity sha512-l0IU0pPzLWSHBcieZbpOKgkIn3ts3vAh7ZuFyXNwJxJXk/c4Gwj9xaTJwIDVQCXawWD0qb3IzMGH5rglQaO0XA== - dependencies: - domelementtype "^1.3.0" - entities "^1.1.1" - -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== - -domelementtype@1, domelementtype@^1.3.0, domelementtype@^1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.1.tgz#d048c44b37b0d10a7f2a3d5fee3f4333d790481f" - integrity sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w== - -domhandler@^2.3.0: - version "2.4.2" - resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.4.2.tgz#8805097e933d65e85546f726d60f5eb88b44f803" - integrity sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA== - dependencies: - domelementtype "1" - -domutils@^1.5.1: - version "1.7.0" - resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.7.0.tgz#56ea341e834e06e6748af7a1cb25da67ea9f8c2a" - integrity sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg== - dependencies: - dom-serializer "0" - domelementtype "1" - -dot-prop@^4.1.1: - version "4.2.0" - resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-4.2.0.tgz#1f19e0c2e1aa0e32797c49799f2837ac6af69c57" - integrity sha512-tUMXrxlExSW6U2EXiiKGSBVdYgtV8qlHL+C10TsW4PURY/ic+eaysnSkwB4kA/mBlCyy/IKDJ+Lc3wbWeaXtuQ== - dependencies: - is-obj "^1.0.0" - -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" - readable-stream "^2.0.0" - stream-shift "^1.0.0" - -electron-to-chromium@^1.3.164: - version "1.3.176" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.176.tgz#df54c54386e0f205dc6d1f5582d9e8b0cd30532b" - integrity sha512-hsQ/BH6x2iCvJ7WOIbNTAlsT39vsVGIVoJJ9i6ZkGXUE2LdzWsNv0xJI2uZ5/Hkqv1oTTLxAYjbtGKVJzqYbjA== - -elegant-spinner@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/elegant-spinner/-/elegant-spinner-1.0.1.tgz#db043521c95d7e303fd8f345bedc3349cfb0729e" - integrity sha1-2wQ1IcldfjA/2PNFvtwzSc+wcp4= - -elliptic@^6.0.0: - version "6.5.0" - resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.0.tgz#2b8ed4c891b7de3200e14412a5b8248c7af505ca" - integrity sha512-eFOJTMyCYb7xtE/caJ6JJu+bhi67WCYNbkGSknu20pmM8Ke/bqOfdnZWxyoGN26JgfxTbXrsCkEw4KheCT/KGg== - 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" - -email-addresses@^3.0.1: - version "3.0.3" - resolved "https://registry.yarnpkg.com/email-addresses/-/email-addresses-3.0.3.tgz#fc3c6952f68da24239914e982c8a7783bc2ed96d" - integrity sha512-kUlSC06PVvvjlMRpNIl3kR1NRXLEe86VQ7N0bQeaCZb2g+InShCeHQp/JvyYNTugMnRN2NvJhHlc3q12MWbbpg== - -emoji-regex@^7.0.1: - version "7.0.3" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" - integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== - -emoji-regex@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" - integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== - -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" - integrity sha1-U4tm8+5izRq1HsMjgp0flIDHS+s= - dependencies: - iconv-lite "~0.4.13" - -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.1.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" - -entities@^1.1.1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.2.tgz#bdfa735299664dfafd34529ed4f8522a275fea56" - integrity sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w== - -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, 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.10.0, es-abstract@^1.11.0, es-abstract@^1.12.0, es-abstract@^1.13.0, es-abstract@^1.7.0: - version "1.13.0" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.13.0.tgz#ac86145fdd5099d8dd49558ccba2eaf9b88e24e9" - integrity sha512-vDZfg/ykNxQVwup/8E1BZhVzFfBxs9NqMzGcvIJrqg5k2/5Za2bWo40dK2J1pgLngZ7c+Shh8lwYtLGyrwPutg== - dependencies: - es-to-primitive "^1.2.0" - function-bind "^1.1.1" - has "^1.0.3" - is-callable "^1.1.4" - is-regex "^1.0.4" - object-keys "^1.0.12" - -es-to-primitive@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.0.tgz#edf72478033456e8dda8ef09e00ad9650707f377" - integrity sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg== - dependencies: - is-callable "^1.1.4" - is-date-object "^1.0.1" - is-symbol "^1.0.2" - -es6-promise@~3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-3.0.2.tgz#010d5858423a5f118979665f46486a95c6ee2bb6" - integrity sha1-AQ1YWEI6XxGJeWZfRkhqlcbuK7Y= - -escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.4, escape-string-regexp@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" - integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= - -eslint-import-resolver-node@^0.3.2: - version "0.3.2" - resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.2.tgz#58f15fb839b8d0576ca980413476aab2472db66a" - integrity sha512-sfmTqJfPSizWu4aymbPr4Iidp5yKm8yDkHp+Ir3YiTHiiDfxh69mOUsmiqW6RZ9zRXFaF64GtYmN7e+8GHBv6Q== - dependencies: - debug "^2.6.9" - resolve "^1.5.0" - -eslint-module-utils@^2.4.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.4.0.tgz#8b93499e9b00eab80ccb6614e69f03678e84e09a" - integrity sha512-14tltLm38Eu3zS+mt0KvILC3q8jyIAH518MlG+HO0p+yK885Lb1UHTY/UgR91eOyGdmxAPb+OLoW4znqIT6Ndw== - dependencies: - debug "^2.6.8" - pkg-dir "^2.0.0" - -eslint-plugin-es@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-es/-/eslint-plugin-es-1.4.0.tgz#475f65bb20c993fc10e8c8fe77d1d60068072da6" - integrity sha512-XfFmgFdIUDgvaRAlaXUkxrRg5JSADoRC8IkKLc/cISeR3yHVMefFHQZpcyXXEUUPHfy5DwviBcrfqlyqEwlQVw== - dependencies: - eslint-utils "^1.3.0" - regexpp "^2.0.1" - -eslint-plugin-import@^2.17.3: - version "2.18.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.18.0.tgz#7a5ba8d32622fb35eb9c8db195c2090bd18a3678" - integrity sha512-PZpAEC4gj/6DEMMoU2Df01C5c50r7zdGIN52Yfi7CvvWaYssG7Jt5R9nFG5gmqodxNOz9vQS87xk6Izdtpdrig== - dependencies: - array-includes "^3.0.3" - contains-path "^0.1.0" - debug "^2.6.9" - doctrine "1.5.0" - eslint-import-resolver-node "^0.3.2" - eslint-module-utils "^2.4.0" - has "^1.0.3" - lodash "^4.17.11" - minimatch "^3.0.4" - read-pkg-up "^2.0.0" - resolve "^1.11.0" - -eslint-plugin-node@^9.1.0: - version "9.1.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-node/-/eslint-plugin-node-9.1.0.tgz#f2fd88509a31ec69db6e9606d76dabc5adc1b91a" - integrity sha512-ZwQYGm6EoV2cfLpE1wxJWsfnKUIXfM/KM09/TlorkukgCAwmkgajEJnPCmyzoFPQQkmvo5DrW/nyKutNIw36Mw== - dependencies: - eslint-plugin-es "^1.4.0" - eslint-utils "^1.3.1" - ignore "^5.1.1" - minimatch "^3.0.4" - resolve "^1.10.1" - semver "^6.1.0" - -eslint-plugin-promise@^4.1.1: - version "4.2.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-promise/-/eslint-plugin-promise-4.2.1.tgz#845fd8b2260ad8f82564c1222fce44ad71d9418a" - integrity sha512-VoM09vT7bfA7D+upt+FjeBO5eHIJQBUWki1aPvB+vbNiHS3+oGIJGIeyBtKQTME6UPXXy3vV07OL1tHd3ANuDw== - -eslint-plugin-react@^7.13.0: - version "7.14.2" - resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.14.2.tgz#94c193cc77a899ac0ecbb2766fbef88685b7ecc1" - integrity sha512-jZdnKe3ip7FQOdjxks9XPN0pjUKZYq48OggNMd16Sk+8VXx6JOvXmlElxROCgp7tiUsTsze3jd78s/9AFJP2mA== - dependencies: - array-includes "^3.0.3" - doctrine "^2.1.0" - has "^1.0.3" - jsx-ast-utils "^2.1.0" - object.entries "^1.1.0" - object.fromentries "^2.0.0" - object.values "^1.1.0" - prop-types "^15.7.2" - resolve "^1.10.1" - -eslint-scope@3.7.1: - version "3.7.1" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-3.7.1.tgz#3d63c3edfda02e06e01a452ad88caacc7cdcb6e8" - integrity sha1-PWPD7f2gLgbgGkUq2IyqzHzctug= - dependencies: - esrecurse "^4.1.0" - estraverse "^4.1.1" - -eslint-scope@^4.0.0, eslint-scope@^4.0.3: - 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" - -eslint-utils@^1.3.0, eslint-utils@^1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-1.3.1.tgz#9a851ba89ee7c460346f97cf8939c7298827e512" - integrity sha512-Z7YjnIldX+2XMcjr7ZkgEsOj/bREONV60qYeB/bjMAqqqZ4zxKyWX+BOUkdmRmA9riiIPVvo5x86m5elviOk0Q== - -eslint-visitor-keys@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz#3f3180fb2e291017716acb4c9d6d5b5c34a6a81d" - integrity sha512-qzm/XxIbxm/FHyH341ZrbnMUpe+5Bocte9xkmFMzPMjRaZMcXww+MpBptFvtU+79L362nqiLhekCxCxDPaUMBQ== - -eslint@5.16.0: - version "5.16.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-5.16.0.tgz#a1e3ac1aae4a3fbd8296fcf8f7ab7314cbb6abea" - integrity sha512-S3Rz11i7c8AA5JPv7xAH+dOyq/Cu/VXHiHXBPOU1k/JAM5dXqQPt3qcrhpHSorXmrpu2g0gkIBVXAqCpzfoZIg== - dependencies: - "@babel/code-frame" "^7.0.0" - ajv "^6.9.1" - chalk "^2.1.0" - cross-spawn "^6.0.5" - debug "^4.0.1" - doctrine "^3.0.0" - eslint-scope "^4.0.3" - eslint-utils "^1.3.1" - eslint-visitor-keys "^1.0.0" - espree "^5.0.1" - esquery "^1.0.1" - esutils "^2.0.2" - file-entry-cache "^5.0.1" - functional-red-black-tree "^1.0.1" - glob "^7.1.2" - globals "^11.7.0" - ignore "^4.0.6" - import-fresh "^3.0.0" - imurmurhash "^0.1.4" - inquirer "^6.2.2" - js-yaml "^3.13.0" - json-stable-stringify-without-jsonify "^1.0.1" - levn "^0.3.0" - lodash "^4.17.11" - minimatch "^3.0.4" - mkdirp "^0.5.1" - natural-compare "^1.4.0" - optionator "^0.8.2" - path-is-inside "^1.0.2" - progress "^2.0.0" - regexpp "^2.0.1" - semver "^5.5.1" - strip-ansi "^4.0.0" - strip-json-comments "^2.0.1" - table "^5.2.3" - text-table "^0.2.0" - -espree@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/espree/-/espree-5.0.1.tgz#5d6526fa4fc7f0788a5cf75b15f30323e2f81f7a" - integrity sha512-qWAZcWh4XE/RwzLJejfcofscgMc9CamR6Tn1+XRXNzrvUSSbiAjGOI/fggztjIi7y9VLPqnICMIPiGyr8JaZ0A== - dependencies: - acorn "^6.0.7" - acorn-jsx "^5.0.0" - eslint-visitor-keys "^1.0.0" - -esprima@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" - integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== - -esquery@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.0.1.tgz#406c51658b1f5991a5f9b62b1dc25b00e3e5c708" - integrity sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA== - dependencies: - estraverse "^4.0.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.0.0, estraverse@^4.1.0, estraverse@^4.1.1: - version "4.2.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.2.0.tgz#0dee3fed31fcd469618ce7342099fc1afa0bdb13" - integrity sha1-De4/7TH81GlhjOc0IJn8GvoL2xM= - -estree-walker@^0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-0.6.1.tgz#53049143f40c6eb918b23671d1fe3219f3a1b362" - integrity sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w== - -esutils@^2.0.0, esutils@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b" - integrity sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs= - -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== - -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: - md5.js "^1.3.4" - safe-buffer "^5.1.1" - -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" - -execall@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/execall/-/execall-2.0.0.tgz#16a06b5fe5099df7d00be5d9c06eecded1663b45" - integrity sha512-0FU2hZ5Hh6iQnarpRtQurM/aAvp3RIbfvgLHrcqJYzhXyV2KFruhuChf9NC6waAhiUR7FFtlugkI4p7f2Fqlow== - dependencies: - clone-regexp "^2.1.0" - -expand-brackets@^2.1.4: - version "2.1.4" - resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" - integrity sha1-t3c14xXOMPa27/D4OwQVGiJEliI= - dependencies: - debug "^2.3.3" - define-property "^0.2.5" - extend-shallow "^2.0.1" - posix-character-classes "^0.1.0" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.1" - -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" - -extend-shallow@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" - integrity sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8= - dependencies: - is-extendable "^0.1.0" - -extend-shallow@^3.0.0, extend-shallow@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8" - integrity sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg= - dependencies: - assign-symbols "^1.0.0" - is-extendable "^1.0.1" - -extend@^3.0.0: - version "3.0.2" - resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" - integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== - -external-editor@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.0.3.tgz#5866db29a97826dbe4bf3afd24070ead9ea43a27" - integrity sha512-bn71H9+qWoOQKyZDo25mOMVpSmXROAsTJVVVYzrrtol3d4y+AsKjf4Iwl2Q+IuT0kFSQ1qo166UuIwqYq7mGnA== - dependencies: - chardet "^0.7.0" - iconv-lite "^0.4.24" - tmp "^0.0.33" - -extglob@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" - integrity sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw== - dependencies: - array-unique "^0.3.2" - define-property "^1.0.0" - expand-brackets "^2.1.4" - extend-shallow "^2.0.1" - fragment-cache "^0.2.1" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.1" - -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-glob@^2.2.6: - version "2.2.7" - resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-2.2.7.tgz#6953857c3afa475fff92ee6015d52da70a4cd39d" - integrity sha512-g1KuQwHOZAmOZMuBtHdxDtju+T2RT8jgCC9aANsbpdiDDTSnjgfuVsIBNKbUeJI3oKMRExcfNDtJl4OhbffMsw== - dependencies: - "@mrmlnc/readdir-enhanced" "^2.2.1" - "@nodelib/fs.stat" "^1.1.2" - glob-parent "^3.1.0" - is-glob "^4.0.0" - merge2 "^1.2.3" - micromatch "^3.1.10" - -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" - integrity sha1-1RQsDK7msRifh9OnYREGT4bIu/I= - -fast-levenshtein@~2.0.4: - version "2.0.6" - resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" - integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= - -fbjs@^0.8.4: - version "0.8.17" - resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-0.8.17.tgz#c4d598ead6949112653d6588b01a5cdcd9f90fdd" - integrity sha1-xNWY6taUkRJlPWWIsBpc3Nn5D90= - dependencies: - core-js "^1.0.0" - isomorphic-fetch "^2.1.1" - loose-envify "^1.0.0" - object-assign "^4.1.0" - promise "^7.1.1" - setimmediate "^1.0.5" - ua-parser-js "^0.7.18" - -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" - resolved "https://registry.yarnpkg.com/figures/-/figures-1.7.0.tgz#cbe1e3affcf1cd44b80cadfed28dc793a9701d2e" - integrity sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4= - dependencies: - escape-string-regexp "^1.0.5" - object-assign "^4.1.0" - -figures@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962" - integrity sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI= - dependencies: - escape-string-regexp "^1.0.5" - -file-entry-cache@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-5.0.1.tgz#ca0f6efa6dd3d561333fb14515065c2fafdf439c" - integrity sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g== - dependencies: - flat-cache "^2.0.1" - -filename-reserved-regex@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/filename-reserved-regex/-/filename-reserved-regex-1.0.0.tgz#e61cf805f0de1c984567d0386dc5df50ee5af7e4" - integrity sha1-5hz4BfDeHJhFZ9A4bcXfUO5a9+Q= - -filenamify-url@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/filenamify-url/-/filenamify-url-1.0.0.tgz#b32bd81319ef5863b73078bed50f46a4f7975f50" - integrity sha1-syvYExnvWGO3MHi+1Q9GpPeXX1A= - dependencies: - filenamify "^1.0.0" - humanize-url "^1.0.0" - -filenamify@^1.0.0: - version "1.2.1" - resolved "https://registry.yarnpkg.com/filenamify/-/filenamify-1.2.1.tgz#a9f2ffd11c503bed300015029272378f1f1365a5" - integrity sha1-qfL/0RxQO+0wABUCknI3jx8TZaU= - dependencies: - filename-reserved-regex "^1.0.0" - strip-outer "^1.0.0" - trim-repeated "^1.0.0" - -fill-range@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" - integrity sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc= - dependencies: - extend-shallow "^2.0.1" - is-number "^3.0.0" - repeat-string "^1.6.1" - to-regex-range "^2.1.0" - -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: - 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.0.0, find-up@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" - integrity sha1-RdG35QbHF93UgndaK3eSCjwMV6c= - dependencies: - locate-path "^2.0.0" - -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" - -find-up@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" - integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== - dependencies: - locate-path "^5.0.0" - path-exists "^4.0.0" - -findup-sync@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/findup-sync/-/findup-sync-3.0.0.tgz#17b108f9ee512dfb7a5c7f3c8b27ea9e1a9c08d1" - integrity sha512-YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg== - dependencies: - detect-file "^1.0.0" - is-glob "^4.0.0" - micromatch "^3.0.4" - resolve-dir "^1.0.1" - -flat-cache@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-2.0.1.tgz#5d296d6f04bda44a4630a301413bdbc2ec085ec0" - integrity sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA== - dependencies: - flatted "^2.0.0" - rimraf "2.6.3" - write "1.0.3" - -flatted@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/flatted/-/flatted-2.0.1.tgz#69e57caa8f0eacbc281d2e2cb458d46fdb449e08" - integrity sha512-a1hQMktqW9Nmqr5aktAux3JMNqaucxGcjtjWnZLHX7yyPCmlSV3M54nGYbqT8K+0GhF3NBgmJCc3ma+WOgX8Jg== - -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" - -fn-name@~2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/fn-name/-/fn-name-2.0.1.tgz#5214d7537a4d06a4a301c0cc262feb84188002e7" - integrity sha1-UhTXU3pNBqSjAcDMJi/rhBiAAuc= - -for-in@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" - integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA= - -fragment-cache@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" - integrity sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk= - dependencies: - map-cache "^0.2.2" - -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-extra@^7.0.0: - version "7.0.1" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-7.0.1.tgz#4f189c44aa123b895f722804f55ea23eadc348e9" - integrity sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw== - dependencies: - graceful-fs "^4.1.2" - jsonfile "^4.0.0" - universalify "^0.1.0" - -fs-minipass@^1.2.5: - version "1.2.6" - resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.6.tgz#2c5cc30ded81282bfe8a0d7c7c1853ddeb102c07" - integrity sha512-crhvyXcMejjv3Z5d2Fa9sf5xLYVCF5O1c71QxbVnbLsmYMBEvDAftewesN/HhY03YRoA7zOMxjNGrF5svGaaeQ== - dependencies: - minipass "^2.2.1" - -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: - graceful-fs "^4.1.2" - iferr "^0.1.5" - imurmurhash "^0.1.4" - readable-stream "1 || 2" - -fs.realpath@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" - integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= - -fsevents@^1.2.7: - version "1.2.9" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.9.tgz#3f5ed66583ccd6f400b5a00db6f7e861363e388f" - integrity sha512-oeyj2H3EjjonWcFjD5NvZNE9Rqe4UW+nQBU2HNeKw0koVLEFIhtyETyAakeAM3de7Z/SW5kcA+fZUait9EApnw== - dependencies: - nan "^2.12.1" - node-pre-gyp "^0.12.0" - -function-bind@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" - integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== - -function.prototype.name@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.0.tgz#8bd763cc0af860a859cc5d49384d74b932cd2327" - integrity sha512-Bs0VRrTz4ghD8pTmbJQD1mZ8A/mN0ur/jGz+A6FBxPDUPkm1tNfF6bhTYPA7i7aF4lZJVr+OXTNNrnnIl58Wfg== - dependencies: - define-properties "^1.1.2" - function-bind "^1.1.1" - is-callable "^1.1.3" - -functional-red-black-tree@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" - integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= - -g-status@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/g-status/-/g-status-2.0.2.tgz#270fd32119e8fc9496f066fe5fe88e0a6bc78b97" - integrity sha512-kQoE9qH+T1AHKgSSD0Hkv98bobE90ILQcXAF4wvGgsr7uFqNvwmh8j+Lq3l0RVt3E3HjSbv2B9biEGcEtpHLCA== - dependencies: - arrify "^1.0.1" - matcher "^1.0.0" - simple-git "^1.85.0" - -gauge@~2.7.3: - version "2.7.4" - resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" - integrity sha1-LANAXHU4w51+s3sxcCLjJfsBi/c= - dependencies: - aproba "^1.0.3" - console-control-strings "^1.0.0" - has-unicode "^2.0.0" - object-assign "^4.1.0" - signal-exit "^3.0.0" - string-width "^1.0.1" - strip-ansi "^3.0.1" - wide-align "^1.1.0" - -get-caller-file@^2.0.1: - version "2.0.5" - resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" - integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== - -get-own-enumerable-property-symbols@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.0.tgz#b877b49a5c16aefac3655f2ed2ea5b684df8d203" - integrity sha512-CIJYJC4GGF06TakLg8z4GQKvDsx9EMspVxOYih7LerEL/WosUnFIww45CGfxfeKHqlg3twgUrYRT1O3WQqjGCg== - -get-stdin@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-7.0.0.tgz#8d5de98f15171a125c5e516643c7a6d0ea8a96f6" - integrity sha512-zRKcywvrXlXsA0v0i9Io4KDRaAw7+a1ZpjRwl9Wox8PFlVCCHra7E9c4kqXCoCM9nR5tBkaTTZRBoCm60bFqTQ== - -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" - integrity sha1-3BXKHGcjh8p2vTesCjlbogQqLCg= - -gh-pages@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/gh-pages/-/gh-pages-2.0.1.tgz#aefe47a43b8d9d2aa3130576b33fe95641e29a2f" - integrity sha512-uFlk3bukljeiWKQ2XvPfjcSi/ou7IfoDf2p+Fj672saLAr8bnOdFVqI/JSgrSgInKpCg5BksxEwGUl++dbg8Dg== - dependencies: - async "^2.6.1" - commander "^2.18.0" - email-addresses "^3.0.1" - filenamify-url "^1.0.0" - fs-extra "^7.0.0" - globby "^6.1.0" - graceful-fs "^4.1.11" - rimraf "^2.6.2" - -gl-matrix@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/gl-matrix/-/gl-matrix-3.0.0.tgz#888301ac7650e148c3865370e13ec66d08a8381f" - integrity sha512-PD4mVH/C/Zs64kOozeFnKY8ybhgwxXXQYGWdB4h68krAHknWJgk9uKOn6z8YElh5//vs++90pb6csrTIDWnexA== - -gl-preserve-state@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/gl-preserve-state/-/gl-preserve-state-1.0.0.tgz#4ef710d62873f1470ed015c6546c37dacddd4198" - integrity sha512-zQZ25l3haD4hvgJZ6C9+s0ebdkW9y+7U2qxvGu1uWOJh8a4RU+jURIKEQhf8elIlFpMH6CrAY2tH0mYrRjet3Q== - -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-to-regexp@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz#8c5a1494d2066c570cc3bfe4496175acc4d502ab" - integrity sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs= - -glob@7.0.x: - version "7.0.6" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.0.6.tgz#211bafaf49e525b8cd93260d14ab136152b3f57a" - integrity sha1-IRuvr0nlJbjNkyYNFKsTYVKz9Xo= - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.0.2" - once "^1.3.0" - path-is-absolute "^1.0.0" - -glob@^7.0.0, glob@^7.0.3, glob@^7.1.2, glob@^7.1.3, 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: - 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" - -global-cache@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/global-cache/-/global-cache-1.2.1.tgz#39ca020d3dd7b3f0934c52b75363f8d53312c16d" - integrity sha512-EOeUaup5DgWKlCMhA9YFqNRIlZwoxt731jCh47WBV9fQqHgXhr3Fa55hfgIUqilIcPsfdNKN7LHjrNY+Km40KA== - dependencies: - define-properties "^1.1.2" - is-symbol "^1.0.1" - -global-modules@2.0.0, global-modules@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-2.0.0.tgz#997605ad2345f27f51539bea26574421215c7780" - integrity sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A== - dependencies: - global-prefix "^3.0.0" - -global-modules@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-1.0.0.tgz#6d770f0eb523ac78164d72b5e71a8877265cc3ea" - integrity sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg== - dependencies: - global-prefix "^1.0.1" - is-windows "^1.0.1" - resolve-dir "^1.0.0" - -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: - expand-tilde "^2.0.2" - homedir-polyfill "^1.0.1" - ini "^1.3.4" - is-windows "^1.0.1" - which "^1.2.14" - -global-prefix@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-3.0.0.tgz#fc85f73064df69f50421f47f883fe5b913ba9b97" - integrity sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg== - dependencies: - ini "^1.3.5" - kind-of "^6.0.2" - which "^1.3.1" - -globals@^11.1.0, globals@^11.7.0: - version "11.12.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" - integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== - -globby@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/globby/-/globby-6.1.0.tgz#f5a6d70e8395e21c858fb0489d64df02424d506c" - integrity sha1-9abXDoOV4hyFj7BInWTfAkJNUGw= - dependencies: - array-union "^1.0.1" - glob "^7.0.3" - object-assign "^4.0.1" - pify "^2.0.0" - pinkie-promise "^2.0.0" - -globby@^9.2.0: - version "9.2.0" - resolved "https://registry.yarnpkg.com/globby/-/globby-9.2.0.tgz#fd029a706c703d29bdd170f4b6db3a3f7a7cb63d" - integrity sha512-ollPHROa5mcxDEkwg6bPt3QbEf4pDQSNtd6JPL1YvOvAo/7/0VAm9TccUeoTmarjPw4pfUthSCqcyfNB1I3ZSg== - dependencies: - "@types/glob" "^7.1.1" - array-union "^1.0.2" - dir-glob "^2.2.2" - fast-glob "^2.2.6" - glob "^7.1.3" - ignore "^4.0.3" - pify "^4.0.1" - slash "^2.0.0" - -globjoin@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/globjoin/-/globjoin-0.1.4.tgz#2f4494ac8919e3767c5cbb691e9f463324285d43" - integrity sha1-L0SUrIkZ43Z8XLtpHp9GMyQoXUM= - -gonzales-pe@^4.2.3: - version "4.2.4" - resolved "https://registry.yarnpkg.com/gonzales-pe/-/gonzales-pe-4.2.4.tgz#356ae36a312c46fe0f1026dd6cb539039f8500d2" - integrity sha512-v0Ts/8IsSbh9n1OJRnSfa7Nlxi4AkXIsWB6vPept8FDbL4bXn3FNuxjYtO/nmBGu7GDkL9MFeGebeSu6l55EPQ== - dependencies: - minimist "1.1.x" - -graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6: - version "4.2.0" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.0.tgz#8d8fdc73977cb04104721cb53666c1ca64cd328b" - integrity sha512-jpSvDPV4Cq/bgtpndIWbI5hmYxhQGHPC4d4cqBPb4DLniCfhJokdXhwhaDuLBGLQdvvRum/UiX6ECVIPvDXqdg== - -has-ansi@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" - integrity sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE= - dependencies: - ansi-regex "^2.0.0" - -has-flag@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" - integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= - -has-symbols@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.0.tgz#ba1a8f1af2a0fc39650f5c850367704122063b44" - integrity sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q= - -has-unicode@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" - integrity sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk= - -has-value@^0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" - integrity sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8= - dependencies: - get-value "^2.0.3" - has-values "^0.1.4" - isobject "^2.0.0" - -has-value@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177" - integrity sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc= - dependencies: - get-value "^2.0.6" - has-values "^1.0.0" - isobject "^3.0.0" - -has-values@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771" - integrity sha1-bWHeldkd/Km5oCCJrThL/49it3E= - -has-values@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f" - integrity sha1-lbC2P+whRmGab+V/51Yo1aOe/k8= - dependencies: - is-number "^3.0.0" - kind-of "^4.0.0" - -has@^1.0.1, has@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" - integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== - dependencies: - function-bind "^1.1.1" - -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: - inherits "^2.0.3" - minimalistic-assert "^1.0.1" - -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" - -hoist-non-react-statics@^2.3.1, hoist-non-react-statics@^2.5.0: - version "2.5.5" - resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-2.5.5.tgz#c5903cf409c0dfd908f388e619d86b9c1174cb47" - integrity sha512-rqcy4pJo55FTTLWt+bU8ukscqHeE/e9KWvsOW2b/a3afxQZhwkQdT1rPPCJ0rYXdj4vNcasY8zHTH+jF/qStxw== - -hoist-non-react-statics@^3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.0.tgz#b09178f0122184fb95acf525daaecb4d8f45958b" - integrity sha512-0XsbTXxgiaCDYDIWFcwkmerZPSwywfUqYmwT4jzewKTQSWoE6FCMoUVOeBJWK3E/CrWbxRG3m5GzY4lnIwGRBA== - dependencies: - react-is "^16.7.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.7.1" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.7.1.tgz#97f236977bd6e125408930ff6de3eec6281ec047" - integrity sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w== - -html-parse-stringify2@2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/html-parse-stringify2/-/html-parse-stringify2-2.0.1.tgz#dc5670b7292ca158b7bc916c9a6735ac8872834a" - integrity sha1-3FZwtyksoVi3vJFsmmc1rIhyg0o= - dependencies: - void-elements "^2.0.1" - -html-tags@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/html-tags/-/html-tags-3.0.0.tgz#41f57708c9e6b7b46a00a22317d614c4a2bab166" - integrity sha512-xiXEBjihaNI+VZ2mKEoI5ZPxqUsevTKM+aeeJ/W4KAg2deGE35minmCJMn51BvwJZmiHaeAxrb2LAS0yZJxuuA== - -htmlparser2@^3.10.0: - version "3.10.1" - resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.10.1.tgz#bd679dc3f59897b6a34bb10749c855bb53a9392f" - integrity sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ== - dependencies: - domelementtype "^1.3.1" - domhandler "^2.3.0" - domutils "^1.5.1" - entities "^1.1.1" - inherits "^2.0.1" - readable-stream "^3.1.1" - -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= - -humanize-url@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/humanize-url/-/humanize-url-1.0.1.tgz#f4ab99e0d288174ca4e1e50407c55fbae464efff" - integrity sha1-9KuZ4NKIF0yk4eUEB8VfuuRk7/8= - dependencies: - normalize-url "^1.0.0" - strip-url-auth "^1.0.0" - -husky@^2.4.1: - version "2.7.0" - resolved "https://registry.yarnpkg.com/husky/-/husky-2.7.0.tgz#c0a9a6a3b51146224e11bba0b46bba546e461d05" - integrity sha512-LIi8zzT6PyFpcYKdvWRCn/8X+6SuG2TgYYMrM6ckEYhlp44UcEduVymZGIZNLiwOUjrEud+78w/AsAiqJA/kRg== - dependencies: - cosmiconfig "^5.2.0" - execa "^1.0.0" - find-up "^3.0.0" - get-stdin "^7.0.0" - is-ci "^2.0.0" - pkg-dir "^4.1.0" - please-upgrade-node "^3.1.1" - read-pkg "^5.1.1" - run-node "^1.0.0" - slash "^3.0.0" - -i18next-browser-languagedetector@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/i18next-browser-languagedetector/-/i18next-browser-languagedetector-3.0.1.tgz#a47c43176e8412c91e808afb7c6eb5367649aa8e" - integrity sha512-WFjPLNPWl62uu07AHY2g+KsC9qz0tyMq+OZEB/H7N58YKL/JLiCz9U709gaR20Mule/Ppn+uyfVx5REJJjn1HA== - -i18next@^17.0.3: - version "17.0.4" - resolved "https://registry.yarnpkg.com/i18next/-/i18next-17.0.4.tgz#c690b9de0c950ff8abe626562d03c4144dd75030" - integrity sha512-+lwmv3FT8Sv/HwVPjkR6rtEFhgOqt9L/CTehzyxvL/NdkeUYbFZJfE57MsBToB6LFWg3d0sZJIVgYqCpWzUyLQ== - dependencies: - "@babel/runtime" "^7.3.1" - -iconv-lite@^0.4.24, iconv-lite@^0.4.4, iconv-lite@~0.4.13: - 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" - -ignore@^4.0.3, ignore@^4.0.6: - version "4.0.6" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" - integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== - -ignore@^5.0.6, ignore@^5.1.1: - version "5.1.2" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.2.tgz#e28e584d43ad7e92f96995019cc43b9e1ac49558" - integrity sha512-vdqWBp7MyzdmHkkRWV5nY+PfGRbYbahfuvsBCh277tq+w9zyNi7h5CYJCK0kmzti9kU+O/cB7sE8HvKv6aXAKQ== - -immediate@~3.0.5: - version "3.0.6" - resolved "https://registry.yarnpkg.com/immediate/-/immediate-3.0.6.tgz#9db1dbd0faf8de6fbe0f5dd5e56bb606280de69b" - integrity sha1-nbHb0Pr43m++D13V5Wu2BigN5ps= - -import-fresh@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-2.0.0.tgz#d81355c15612d386c61f9ddd3922d4304822a546" - integrity sha1-2BNVwVYS04bGH53dOSLUMEgipUY= - dependencies: - caller-path "^2.0.0" - resolve-from "^3.0.0" - -import-fresh@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.0.0.tgz#a3d897f420cab0e671236897f75bc14b4885c390" - integrity sha512-pOnA9tfM3Uwics+SaBLCNyZZZbK+4PTu0OPZtLlMIrv17EdBoC15S9Kn8ckJ9TZTyKb3ywNE5y1yeDxxGA7nTQ== - dependencies: - parent-module "^1.0.0" - resolve-from "^4.0.0" - -import-lazy@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/import-lazy/-/import-lazy-4.0.0.tgz#e8eb627483a0a43da3c03f3e35548be5cb0cc153" - integrity sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw== - -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 "^3.0.0" - resolve-cwd "^2.0.0" - -imurmurhash@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" - integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= - -indent-string@^3.0.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-3.2.0.tgz#4a5fd6d27cc332f37e5419a504dbb837105c9289" - integrity sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok= - -indexes-of@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/indexes-of/-/indexes-of-1.0.1.tgz#f30f716c8e2bd346c7b67d3df3915566a7c05607" - integrity sha1-8w9xbI4r00bHtn0985FVZqfAVgc= - -inflight@^1.0.4: - version "1.0.6" - resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" - integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= - dependencies: - once "^1.3.0" - wrappy "1" - -inherits@2, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.1, inherits@~2.0.3: - version "2.0.4" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" - integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== - -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.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" - integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= - -ini@^1.3.4, ini@^1.3.5, ini@~1.3.0: - version "1.3.5" - resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" - integrity sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw== - -inquirer@^6.2.2: - version "6.4.1" - resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-6.4.1.tgz#7bd9e5ab0567cd23b41b0180b68e0cfa82fc3c0b" - integrity sha512-/Jw+qPZx4EDYsaT6uz7F4GJRNFMRdKNeUZw3ZnKV8lyuUgz/YWRCSUAJMZSVhSq4Ec0R2oYnyi6b3d4JXcL5Nw== - dependencies: - ansi-escapes "^3.2.0" - chalk "^2.4.2" - cli-cursor "^2.1.0" - cli-width "^2.0.0" - external-editor "^3.0.3" - figures "^2.0.0" - lodash "^4.17.11" - mute-stream "0.0.7" - run-async "^2.2.0" - rxjs "^6.4.0" - string-width "^2.1.0" - strip-ansi "^5.1.0" - through "^2.3.6" - -interpret@1.2.0, interpret@^1.0.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.2.0.tgz#d5061a6224be58e8083985f5014d844359576296" - integrity sha512-mT34yGKMNceBQUoVn7iCDKDntA7SC6gycMAWzGx1z/CMCTV7b2AAtXlo3nRyHZ1FelRkQbQjprHSYGwzLtkVbw== - -invariant@^2.2.2, invariant@^2.2.4: - version "2.2.4" - resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" - integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA== - dependencies: - loose-envify "^1.0.0" - -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== - -iota-array@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/iota-array/-/iota-array-1.0.0.tgz#81ef57fe5d05814cd58c2483632a99c30a0e8087" - integrity sha1-ge9X/l0FgUzVjCSDYyqZwwoOgIc= - -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" - integrity sha1-qeEss66Nh2cn7u84Q/igiXtcmNY= - dependencies: - kind-of "^3.0.2" - -is-accessor-descriptor@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656" - integrity sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ== - dependencies: - kind-of "^6.0.0" - -is-alphabetical@^1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/is-alphabetical/-/is-alphabetical-1.0.3.tgz#eb04cc47219a8895d8450ace4715abff2258a1f8" - integrity sha512-eEMa6MKpHFzw38eKm56iNNi6GJ7lf6aLLio7Kr23sJPAECscgRtZvOBYybejWDQ2bM949Y++61PY+udzj5QMLA== - -is-alphanumeric@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-alphanumeric/-/is-alphanumeric-1.0.0.tgz#4a9cef71daf4c001c1d81d63d140cf53fd6889f4" - integrity sha1-Spzvcdr0wAHB2B1j0UDPU/1oifQ= - -is-alphanumerical@^1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/is-alphanumerical/-/is-alphanumerical-1.0.3.tgz#57ae21c374277b3defe0274c640a5704b8f6657c" - integrity sha512-A1IGAPO5AW9vSh7omxIlOGwIqEvpW/TA+DksVOPM5ODuxKlZS09+TEM1E3275lJqO2oJ38vDpeAL3DCIiHE6eA== - dependencies: - is-alphabetical "^1.0.0" - is-decimal "^1.0.0" - -is-arrayish@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" - integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= - -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.0.2, is-buffer@^1.1.5: - version "1.1.6" - resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" - integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== - -is-buffer@^2.0.0: - version "2.0.3" - resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-2.0.3.tgz#4ecf3fcf749cbd1e472689e109ac66261a25e725" - integrity sha512-U15Q7MXTuZlrbymiz95PJpZxu8IlipAp4dtS3wOdgPXx3mqBnslrWU14kxfHB+Py/+2PVKSr37dMAgM2A4uArw== - -is-callable@^1.1.3, is-callable@^1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.4.tgz#1e1adf219e1eeb684d691f9d6a05ff0d30a24d75" - integrity sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA== - -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" - integrity sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y= - dependencies: - kind-of "^3.0.2" - -is-data-descriptor@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7" - integrity sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ== - dependencies: - kind-of "^6.0.0" - -is-date-object@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.1.tgz#9aa20eb6aeebbff77fbd33e74ca01b33581d3a16" - integrity sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY= - -is-decimal@^1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/is-decimal/-/is-decimal-1.0.3.tgz#381068759b9dc807d8c0dc0bfbae2b68e1da48b7" - integrity sha512-bvLSwoDg2q6Gf+E2LEPiklHZxxiSi3XAh4Mav65mKqTfCO1HM3uBs24TjEH8iJX3bbDdLXKJXBTmGzuTUuAEjQ== - -is-descriptor@^0.1.0: - version "0.1.6" - resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca" - integrity sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg== - dependencies: - is-accessor-descriptor "^0.1.6" - is-data-descriptor "^0.1.4" - kind-of "^5.0.0" - -is-descriptor@^1.0.0, is-descriptor@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec" - integrity sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg== - dependencies: - is-accessor-descriptor "^1.0.0" - is-data-descriptor "^1.0.0" - kind-of "^6.0.2" - -is-directory@^0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/is-directory/-/is-directory-0.3.1.tgz#61339b6f2475fc772fd9c9d83f5c8575dc154ae1" - integrity sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE= - -is-extendable@^0.1.0, is-extendable@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" - integrity sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik= - -is-extendable@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4" - integrity sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA== - dependencies: - is-plain-object "^2.0.4" - -is-extglob@^2.1.0, is-extglob@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" - integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= - -is-fullwidth-code-point@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" - integrity sha1-754xOG8DGn8NZDr4L95QxFfvAMs= - dependencies: - number-is-nan "^1.0.0" - -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" - integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= - -is-fullwidth-code-point@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" - integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== - -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" - -is-glob@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" - integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== - dependencies: - is-extglob "^2.1.1" - -is-hexadecimal@^1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/is-hexadecimal/-/is-hexadecimal-1.0.3.tgz#e8a426a69b6d31470d3a33a47bb825cda02506ee" - integrity sha512-zxQ9//Q3D/34poZf8fiy3m3XVpbQc7ren15iKqrTtLPwkPD/t3Scy9Imp63FujULGxuK0ZlCwoo5xNpktFgbOA== - -is-number@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" - integrity sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU= - dependencies: - kind-of "^3.0.2" - -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.0, is-obj@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" - integrity sha1-PkcprB9f3gJc19g6iW2rn09n2w8= - -is-observable@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-observable/-/is-observable-1.1.0.tgz#b3e986c8f44de950867cab5403f5a3465005975e" - integrity sha512-NqCa4Sa2d+u7BWc6CukaObG3Fh+CU9bvixbpcXYhy2VvYS7vVGIdAgnIS5Ks3A/cqk4rebLJ9s8zBstT2aKnIA== - dependencies: - symbol-observable "^1.1.0" - -is-path-cwd@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-1.0.0.tgz#d225ec23132e89edd38fda767472e62e65f1106d" - integrity sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0= - -is-path-in-cwd@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz#5ac48b345ef675339bd6c7a48a912110b241cf52" - integrity sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ== - dependencies: - is-path-inside "^1.0.0" - -is-path-inside@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-1.0.1.tgz#8ef5b7de50437a3fdca6b4e865ef7aa55cb48036" - integrity sha1-jvW33lBDej/cprToZe96pVy0gDY= - dependencies: - path-is-inside "^1.0.1" - -is-plain-obj@^1.0.0, is-plain-obj@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" - integrity sha1-caUMhCnfync8kqOQpKA7OfzVHT4= - -is-plain-object@^2.0.3, is-plain-object@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" - integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== - dependencies: - isobject "^3.0.1" - -is-promise@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa" - integrity sha1-eaKp7OfwlugPNtKy87wWwf9L8/o= - -is-regex@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.4.tgz#5517489b547091b0930e095654ced25ee97e9491" - integrity sha1-VRdIm1RwkbCTDglWVM7SXul+lJE= - dependencies: - has "^1.0.1" - -is-regexp@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-regexp/-/is-regexp-1.0.0.tgz#fd2d883545c46bac5a633e7b9a09e87fa2cb5069" - integrity sha1-/S2INUXEa6xaYz57mgnof6LLUGk= - -is-regexp@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-regexp/-/is-regexp-2.1.0.tgz#cd734a56864e23b956bf4e7c66c396a4c0b22c2d" - integrity sha512-OZ4IlER3zmRIoB9AqNhEggVxqIH4ofDns5nRrPS6yQxXE1TPCUpFznBfRQmQa8uC+pXqjMnukiJBxCisIxiLGA== - -is-stream@^1.0.1, is-stream@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" - integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= - -is-symbol@^1.0.1, is-symbol@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.2.tgz#a055f6ae57192caee329e7a860118b497a950f38" - integrity sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw== - dependencies: - has-symbols "^1.0.0" - -is-touch-device@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-touch-device/-/is-touch-device-1.0.1.tgz#9a2fd59f689e9a9bf6ae9a86924c4ba805a42eab" - integrity sha512-LAYzo9kMT1b2p19L/1ATGt2XcSilnzNlyvq6c0pbPRVisLbAPpLqr53tIJS00kvrTkj0HtR8U7+u8X0yR8lPSw== - -is-whitespace-character@^1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/is-whitespace-character/-/is-whitespace-character-1.0.3.tgz#b3ad9546d916d7d3ffa78204bca0c26b56257fac" - integrity sha512-SNPgMLz9JzPccD3nPctcj8sZlX9DAMJSKH8bP7Z6bohCwuNgX8xbWr1eTAYXX9Vpi/aSn8Y1akL9WgM3t43YNQ== - -is-windows@^1.0.0, 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" - integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== - -is-word-character@^1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/is-word-character/-/is-word-character-1.0.3.tgz#264d15541cbad0ba833d3992c34e6b40873b08aa" - integrity sha512-0wfcrFgOOOBdgRNT9H33xe6Zi6yhX/uoc4U8NBZGeQQB0ctU1dnlNTyL9JM2646bHDTpsDm1Brb3VPoCIMrd/A== - -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: - version "1.0.0" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" - integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= - -isexe@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" - integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= - -isobject@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" - integrity sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk= - dependencies: - isarray "1.0.0" - -isobject@^3.0.0, isobject@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" - integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8= - -isomorphic-base64@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/isomorphic-base64/-/isomorphic-base64-1.0.2.tgz#f426aae82569ba8a4ec5ca73ad21a44ab1ee7803" - integrity sha1-9Caq6CVpuopOxcpzrSGkSrHueAM= - -isomorphic-fetch@^2.1.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz#611ae1acf14f5e81f729507472819fe9733558a9" - integrity sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk= - dependencies: - node-fetch "^1.0.1" - whatwg-fetch ">=0.10.0" - -js-levenshtein@^1.1.3: - version "1.1.6" - resolved "https://registry.yarnpkg.com/js-levenshtein/-/js-levenshtein-1.1.6.tgz#c6cee58eb3550372df8deb85fad5ce66ce01d59d" - integrity sha512-X2BB11YZtrRqY4EnQcLX5Rh373zbK4alC1FW7D7MBhL2gtcC17cTnr6DmfHZeS0s2rTHjUTMMHfG7gO8SSdw+g== - -"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" - integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== - -js-yaml@^3.13.0, js-yaml@^3.13.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" - -jsesc@^2.5.1: - version "2.5.2" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" - integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== - -jsesc@~0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" - integrity sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0= - -json-parse-better-errors@^1.0.1, 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.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-stable-stringify-without-jsonify@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" - integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= - -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" - -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" - -jsonfile@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" - integrity sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss= - optionalDependencies: - graceful-fs "^4.1.6" - -jsx-ast-utils@^2.1.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-2.2.0.tgz#e2bade6d09c8ef9d5f6b9ff2ace67b2cdbc7e370" - integrity sha512-yAmhGSzR7TsD0OQpu1AGLz8Bx84cxMqtgoJrufomY6BlveEDlREhvu1rea21936xbe5tlUh7IPda82m5ae0H8Q== - dependencies: - array-includes "^3.0.3" - object.assign "^4.1.0" - -jszip@3.1.4: - version "3.1.4" - resolved "https://registry.yarnpkg.com/jszip/-/jszip-3.1.4.tgz#fc323fe41bb1730348d20dd022aa4d8b57cbbcf9" - integrity sha512-z6w8iYIxZ/fcgul0j/OerkYnkomH8BZigvzbxVmr2h5HkZUrPtk2kjYtLkqR9wwQxEP6ecKNoKLsbhd18jfnGA== - dependencies: - core-js "~2.3.0" - es6-promise "~3.0.2" - lie "~3.1.0" - pako "~1.0.2" - readable-stream "~2.0.6" - -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" - integrity sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ= - dependencies: - is-buffer "^1.1.5" - -kind-of@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" - integrity sha1-IIE989cSkosgc3hpGkUGb65y3Vc= - dependencies: - is-buffer "^1.1.5" - -kind-of@^5.0.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d" - integrity sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw== - -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" - integrity sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA== - -known-css-properties@^0.14.0: - version "0.14.0" - resolved "https://registry.yarnpkg.com/known-css-properties/-/known-css-properties-0.14.0.tgz#d7032b4334a32dc22e6e46b081ec789daf18756c" - integrity sha512-P+0a/gBzLgVlCnK8I7VcD0yuYJscmWn66wH9tlKsQnmVdg689tLEmziwB9PuazZYLkcm07fvWOKCJJqI55sD5Q== - -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" - -leven@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" - integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A== - -levn@^0.3.0, levn@~0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" - integrity sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4= - dependencies: - prelude-ls "~1.1.2" - type-check "~0.3.2" - -lie@~3.1.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/lie/-/lie-3.1.1.tgz#9a436b2cc7746ca59de7a41fa469b3efb76bd87e" - integrity sha1-mkNrLMd0bKWd56QfpGmz77dr2H4= - dependencies: - immediate "~3.0.5" - -lint-staged@^8.2.0: - version "8.2.1" - resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-8.2.1.tgz#752fcf222d9d28f323a3b80f1e668f3654ff221f" - integrity sha512-n0tDGR/rTCgQNwXnUf/eWIpPNddGWxC32ANTNYsj2k02iZb7Cz5ox2tytwBu+2r0zDXMEMKw7Y9OD/qsav561A== - dependencies: - chalk "^2.3.1" - commander "^2.14.1" - cosmiconfig "^5.2.0" - debug "^3.1.0" - dedent "^0.7.0" - del "^3.0.0" - execa "^1.0.0" - g-status "^2.0.2" - is-glob "^4.0.0" - is-windows "^1.0.2" - listr "^0.14.2" - listr-update-renderer "^0.5.0" - lodash "^4.17.11" - log-symbols "^2.2.0" - micromatch "^3.1.8" - npm-which "^3.0.1" - p-map "^1.1.1" - path-is-inside "^1.0.2" - pify "^3.0.0" - please-upgrade-node "^3.0.2" - staged-git-files "1.1.2" - string-argv "^0.0.2" - stringify-object "^3.2.2" - yup "^0.27.0" - -listr-silent-renderer@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/listr-silent-renderer/-/listr-silent-renderer-1.1.1.tgz#924b5a3757153770bf1a8e3fbf74b8bbf3f9242e" - integrity sha1-kktaN1cVN3C/Go4/v3S4u/P5JC4= - -listr-update-renderer@^0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/listr-update-renderer/-/listr-update-renderer-0.5.0.tgz#4ea8368548a7b8aecb7e06d8c95cb45ae2ede6a2" - integrity sha512-tKRsZpKz8GSGqoI/+caPmfrypiaq+OQCbd+CovEC24uk1h952lVj5sC7SqyFUm+OaJ5HN/a1YLt5cit2FMNsFA== - dependencies: - chalk "^1.1.3" - cli-truncate "^0.2.1" - elegant-spinner "^1.0.1" - figures "^1.7.0" - indent-string "^3.0.0" - log-symbols "^1.0.2" - log-update "^2.3.0" - strip-ansi "^3.0.1" - -listr-verbose-renderer@^0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/listr-verbose-renderer/-/listr-verbose-renderer-0.5.0.tgz#f1132167535ea4c1261102b9f28dac7cba1e03db" - integrity sha512-04PDPqSlsqIOaaaGZ+41vq5FejI9auqTInicFRndCBgE3bXG8D6W1I+mWhk+1nqbHmyhla/6BUrd5OSiHwKRXw== - dependencies: - chalk "^2.4.1" - cli-cursor "^2.1.0" - date-fns "^1.27.2" - figures "^2.0.0" - -listr@^0.14.2: - version "0.14.3" - resolved "https://registry.yarnpkg.com/listr/-/listr-0.14.3.tgz#2fea909604e434be464c50bddba0d496928fa586" - integrity sha512-RmAl7su35BFd/xoMamRjpIE4j3v+L28o8CT5YhAXQJm1fD+1l9ngXY8JAQRJ+tFK2i5njvi0iRUKV09vPwA0iA== - dependencies: - "@samverschueren/stream-to-observable" "^0.3.0" - is-observable "^1.1.0" - is-promise "^2.1.0" - is-stream "^1.1.0" - listr-silent-renderer "^1.1.1" - listr-update-renderer "^0.5.0" - listr-verbose-renderer "^0.5.0" - p-map "^2.0.0" - rxjs "^6.3.3" - -load-json-file@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-2.0.0.tgz#7947e42149af80d696cbf797bcaabcfe1fe29ca8" - integrity sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg= - dependencies: - graceful-fs "^4.1.2" - parse-json "^2.2.0" - pify "^2.0.0" - strip-bom "^3.0.0" - -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 "^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.2.3, loader-utils@^1.0.0, 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" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" - integrity sha1-K1aLJl7slExtnA3pw9u7ygNUzY4= - dependencies: - p-locate "^2.0.0" - path-exists "^3.0.0" - -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: - p-locate "^3.0.0" - path-exists "^3.0.0" - -locate-path@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" - integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== - dependencies: - p-locate "^4.1.0" - -lodash.clonedeep@^4.5.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef" - integrity sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8= - -lodash.debounce@^4.0.8: - version "4.0.8" - resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" - integrity sha1-gteb/zCmfEAF/9XiUVMArZyk168= - -lodash.isequal@4.5.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/lodash.isequal/-/lodash.isequal-4.5.0.tgz#415c4478f2bcc30120c22ce10ed3226f7d3e18e0" - integrity sha1-QVxEePK8wwEgwizhDtMib30+GOA= - -lodash.merge@^4.6.1: - version "4.6.2" - resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" - integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== - -lodash@^4.1.1, 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-symbols@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-1.0.2.tgz#376ff7b58ea3086a0f09facc74617eca501e1a18" - integrity sha1-N2/3tY6jCGoPCfrMdGF+ylAeGhg= - dependencies: - chalk "^1.0.0" - -log-symbols@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-2.2.0.tgz#5740e1c5d6f0dfda4ad9323b5332107ef6b4c40a" - integrity sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg== - dependencies: - chalk "^2.0.1" - -log-symbols@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-3.0.0.tgz#f3a08516a5dea893336a7dee14d18a1cfdab77c4" - integrity sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ== - dependencies: - chalk "^2.4.2" - -log-update@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/log-update/-/log-update-2.3.0.tgz#88328fd7d1ce7938b29283746f0b1bc126b24708" - integrity sha1-iDKP19HOeTiykoN0bwsbwSayRwg= - dependencies: - ansi-escapes "^3.0.0" - cli-cursor "^2.0.0" - wrap-ansi "^3.0.1" - -loglevelnext@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/loglevelnext/-/loglevelnext-3.0.1.tgz#e3e4659c4061c09264f6812c33586dc55a009a04" - integrity sha512-JpjaJhIN1reaSb26SIxDGtE0uc67gPl19OMVHrr+Ggt6b/Vy60jmCtKgQBrygAH0bhRA2nkxgDvM+8QvR8r0YA== - -longest-streak@^2.0.1: - version "2.0.3" - resolved "https://registry.yarnpkg.com/longest-streak/-/longest-streak-2.0.3.tgz#3de7a3f47ee18e9074ded8575b5c091f5d0a4105" - integrity sha512-9lz5IVdpwsKLMzQi0MQ+oD9EA0mIGcWYP7jXMTZVXP8D42PwuAk+M/HBFYQoxt1G5OR8m7aSIgb1UymfWGBWEw== - -loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.3.1, loose-envify@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" - integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== - dependencies: - js-tokens "^3.0.0 || ^4.0.0" - -loud-rejection@^1.0.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/loud-rejection/-/loud-rejection-1.6.0.tgz#5b46f80147edee578870f086d04821cf998e551f" - integrity sha1-W0b4AUft7leIcPCG0Eghz5mOVR8= - dependencies: - currently-unhandled "^0.4.1" - signal-exit "^3.0.0" - -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@^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" - -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" - integrity sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8= - -map-obj@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d" - integrity sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0= - -map-obj@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-2.0.0.tgz#a65cd29087a92598b8791257a523e021222ac1f9" - integrity sha1-plzSkIepJZi4eRJXpSPgISIqwfk= - -map-visit@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" - integrity sha1-7Nyo8TFE5mDxtb1B8S80edmN+48= - dependencies: - object-visit "^1.0.0" - -markdown-escapes@^1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/markdown-escapes/-/markdown-escapes-1.0.3.tgz#6155e10416efaafab665d466ce598216375195f5" - integrity sha512-XUi5HJhhV5R74k8/0H2oCbCiYf/u4cO/rX8tnGkRvrqhsr5BRNU6Mg0yt/8UIx1iIS8220BNJsDb7XnILhLepw== - -markdown-table@^1.1.0: - version "1.1.3" - resolved "https://registry.yarnpkg.com/markdown-table/-/markdown-table-1.1.3.tgz#9fcb69bcfdb8717bfd0398c6ec2d93036ef8de60" - integrity sha512-1RUZVgQlpJSPWYbFSpmudq5nHY1doEIv89gBtF0s4gW1GF2XorxcA/70M5vq7rLv0a6mhOUccRsqkwhwLCIQ2Q== - -matcher@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/matcher/-/matcher-1.1.1.tgz#51d8301e138f840982b338b116bb0c09af62c1c2" - integrity sha512-+BmqxWIubKTRKNWx/ahnCkk3mG8m7OturVlqq6HiojGJTd5hVYbgZm6WzcYPCoB+KBT4Vd6R7WSRG2OADNaCjg== - dependencies: - escape-string-regexp "^1.0.4" - -mathml-tag-names@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/mathml-tag-names/-/mathml-tag-names-2.1.1.tgz#6dff66c99d55ecf739ca53c492e626f1d12a33cc" - integrity sha512-pWB896KPGSGkp1XtyzRBftpTzwSOL0Gfk0wLvxt4f2mgzjY19o0LxJ3U25vNWTzsh7da+KTbuXQoQ3lOJZ8WHw== - -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" - -mdast-util-compact@^1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/mdast-util-compact/-/mdast-util-compact-1.0.3.tgz#98a25cc8a7865761a41477b3a87d1dcef0b1e79d" - integrity sha512-nRiU5GpNy62rZppDKbLwhhtw5DXoFMqw9UNZFmlPsNaQCZ//WLjGKUwWMdJrUH+Se7UvtO2gXtAMe0g/N+eI5w== - dependencies: - unist-util-visit "^1.1.0" - -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" - -meow@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/meow/-/meow-5.0.0.tgz#dfc73d63a9afc714a5e371760eb5c88b91078aa4" - integrity sha512-CbTqYU17ABaLefO8vCU153ZZlprKYWDljcndKKDCFcYQITzWCXZAVk4QMFZPgvzrnUQ3uItnIE/LoUOwrT15Ig== - dependencies: - camelcase-keys "^4.0.0" - decamelize-keys "^1.0.0" - loud-rejection "^1.0.0" - minimist-options "^3.0.1" - normalize-package-data "^2.3.4" - read-pkg-up "^3.0.0" - redent "^2.0.0" - trim-newlines "^2.0.0" - yargs-parser "^10.0.0" - -merge2@^1.2.3: - version "1.2.3" - resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.2.3.tgz#7ee99dbd69bb6481689253f018488a1b902b0ed5" - integrity sha512-gdUU1Fwj5ep4kplwcmftruWofEFt6lfpkkr3h860CXbAB9c3hGb55EOL2ali0Td5oebvW0E1+3Sr+Ur7XfKpRA== - -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" - integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg== - dependencies: - arr-diff "^4.0.0" - array-unique "^0.3.2" - braces "^2.3.1" - define-property "^2.0.2" - extend-shallow "^3.0.2" - extglob "^2.0.4" - fragment-cache "^0.2.1" - kind-of "^6.0.2" - nanomatch "^1.2.9" - object.pick "^1.3.0" - regex-not "^1.0.0" - 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" - -mimic-fn@^1.0.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" - integrity sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ== - -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.2, minimatch@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" - integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== - dependencies: - brace-expansion "^1.1.7" - -minimist-options@^3.0.1: - version "3.0.2" - resolved "https://registry.yarnpkg.com/minimist-options/-/minimist-options-3.0.2.tgz#fba4c8191339e13ecf4d61beb03f070103f3d954" - integrity sha512-FyBrT/d0d4+uiZRbqznPXqw3IpZZG3gl3wKWiX784FycUKVwBt0uLBFkQrtE4tZOrgo78nZp2jnKz3L65T5LdQ== - dependencies: - arrify "^1.0.1" - is-plain-obj "^1.1.0" - -minimist@0.0.8: - version "0.0.8" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" - integrity sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0= - -minimist@1.1.x: - version "1.1.3" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.1.3.tgz#3bedfd91a92d39016fcfaa1c681e8faa1a1efda8" - integrity sha1-O+39kaktOQFvz6ocaB6Pqhoe/ag= - -minimist@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" - integrity sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ= - -minipass@^2.2.1, minipass@^2.3.5: - 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.2.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.2" - resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.2.tgz#1120b43dc359a785dce65b55b82e257ccf479566" - integrity sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA== - dependencies: - for-in "^1.0.2" - is-extendable "^1.0.1" - -mkdirp@0.5.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" - integrity sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM= - dependencies: - minimist "0.0.8" - -moment@2.24.0, moment@>=1.6.0, moment@^2.24.0: - version "2.24.0" - resolved "https://registry.yarnpkg.com/moment/-/moment-2.24.0.tgz#0d055d53f5052aa653c9f6eb68bb5d12bf5c2b5b" - integrity sha512-bV7f+6l2QigeBBZSM/6yTNq4P2fNpSWj/0e7jQcy87A8e7o2nAfP/34/2ky5Vw4B9S446EtIhodAzkFCcR4dQg== - -mousetrap@^1.6.3: - version "1.6.3" - resolved "https://registry.yarnpkg.com/mousetrap/-/mousetrap-1.6.3.tgz#80fee49665fd478bccf072c9d46bdf1bfed3558a" - integrity sha512-bd+nzwhhs9ifsUrC2tWaSgm24/oo2c83zaRyZQF06hYA6sANfsXHtnZ19AbbbDXCDzeH5nZBSQ4NvCjgD62tJA== - -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" - integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= - -ms@^2.1.1: - version "2.1.2" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" - integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== - -mute-stream@0.0.7: - version "0.0.7" - resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" - integrity sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s= - -nan@^2.12.1: - version "2.14.0" - resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.0.tgz#7818f722027b2459a86f0295d434d1fc2336c52c" - integrity sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg== - -nanomatch@^1.2.9: - version "1.2.13" - resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" - integrity sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA== - dependencies: - arr-diff "^4.0.0" - array-unique "^0.3.2" - define-property "^2.0.2" - extend-shallow "^3.0.2" - fragment-cache "^0.2.1" - is-windows "^1.0.2" - kind-of "^6.0.2" - object.pick "^1.3.0" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.1" - -natural-compare@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" - integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= - -ndarray@^1.0.18: - version "1.0.18" - resolved "https://registry.yarnpkg.com/ndarray/-/ndarray-1.0.18.tgz#b60d3a73224ec555d0faa79711e502448fd3f793" - integrity sha1-tg06cyJOxVXQ+qeXEeUCRI/T95M= - dependencies: - iota-array "^1.0.0" - is-buffer "^1.0.2" - -needle@^2.2.1: - version "2.4.0" - resolved "https://registry.yarnpkg.com/needle/-/needle-2.4.0.tgz#6833e74975c444642590e15a750288c5f939b57c" - integrity sha512-4Hnwzr3mi5L97hMYeNl8wRW/Onhy4nUKR/lVemJ8gJedxxUyBLm9kkrDColJvoSfwi0jCNhD+xCdOtiGDQiRZg== - dependencies: - debug "^3.2.6" - 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== - -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-fetch@^1.0.1: - version "1.7.3" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-1.7.3.tgz#980f6f72d85211a5347c6b2bc18c5b84c3eb47ef" - integrity sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ== - dependencies: - encoding "^0.1.11" - is-stream "^1.0.1" - -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-pre-gyp@^0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.12.0.tgz#39ba4bb1439da030295f899e3b520b7785766149" - integrity sha512-4KghwV8vH5k+g2ylT+sLTjy5wmUOb9vPhnM8NHvRf9dHmnW/CndrFXy2aRPaPST6dugXSdHXfeaHQm77PIz/1A== - dependencies: - detect-libc "^1.0.2" - mkdirp "^0.5.1" - needle "^2.2.1" - nopt "^4.0.1" - npm-packlist "^1.1.6" - npmlog "^4.0.2" - rc "^1.2.7" - rimraf "^2.6.1" - semver "^5.3.0" - tar "^4" - -node-releases@^1.1.23: - version "1.1.24" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.24.tgz#2fb494562705c01bfb81a7af9f8584c4d56311b4" - integrity sha512-wym2jptfuKowMmkZsfCSTsn8qAVo8zm+UiQA6l5dNqUcpfChZSnS/vbbpOeXczf+VdPhutxh+99lWHhdd6xKzg== - dependencies: - semver "^5.3.0" - -nopt@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.1.tgz#d0d4685afd5415193c8c7505602d0d17cd64474d" - integrity sha1-0NRoWv1UFRk8jHUFYC0NF81kR00= - dependencies: - abbrev "1" - osenv "^0.1.4" - -normalize-package-data@^2.3.2, normalize-package-data@^2.3.4, normalize-package-data@^2.5.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" - integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== - dependencies: - hosted-git-info "^2.1.4" - resolve "^1.10.0" - semver "2 || 3 || 4 || 5" - validate-npm-package-license "^3.0.1" - -normalize-path@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" - integrity sha1-GrKLVW4Zg2Oowab35vogE3/mrtk= - 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== - -normalize-range@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942" - integrity sha1-LRDAa9/TEuqXd2laTShDlFa3WUI= - -normalize-selector@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/normalize-selector/-/normalize-selector-0.2.0.tgz#d0b145eb691189c63a78d201dc4fdb1293ef0c03" - integrity sha1-0LFF62kRicY6eNIB3E/bEpPvDAM= - -normalize-url@^1.0.0: - version "1.9.1" - resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-1.9.1.tgz#2cc0d66b31ea23036458436e3620d85954c66c3c" - integrity sha1-LMDWazHqIwNkWENuNiDYWVTGbDw= - dependencies: - object-assign "^4.0.1" - prepend-http "^1.0.0" - query-string "^4.1.0" - sort-keys "^1.0.0" - -nosleep.js@^0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/nosleep.js/-/nosleep.js-0.7.0.tgz#cfd919c25523ca0d0f4a69fb3305c083adaee289" - integrity sha1-z9kZwlUjyg0PSmn7MwXAg62u4ok= - -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.2" - resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.4.2.tgz#a9d63153d4fb0547e6d4342e4102ba6c3bd2b2c7" - integrity sha512-pyJclkNoBBckB6K/XPcMp8fP60MaqSZBPQVsNY7Yyc9VP1TUnPMYwck5YaBejf0L7xYr8f4l16+IENeZ0by+yw== - 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" - integrity sha512-IFsj0R9C7ZdR5cP+ET342q77uSRdtWOlWpih5eC+lu29tIDbNEgDbzgVJ5UFvYHWhxDZ5TFkJafFioO0pPQjCw== - dependencies: - which "^1.2.10" - -npm-run-path@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" - integrity sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8= - dependencies: - path-key "^2.0.0" - -npm-which@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/npm-which/-/npm-which-3.0.1.tgz#9225f26ec3a285c209cae67c3b11a6b4ab7140aa" - integrity sha1-kiXybsOihcIJyuZ8OxGmtKtxQKo= - dependencies: - commander "^2.9.0" - npm-path "^2.0.2" - which "^1.2.10" - -npmlog@^4.0.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" - integrity sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg== - dependencies: - are-we-there-yet "~1.1.2" - console-control-strings "~1.1.0" - gauge "~2.7.3" - set-blocking "~2.0.0" - -num2fraction@^1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/num2fraction/-/num2fraction-1.2.2.tgz#6f682b6a027a4e9ddfa4564cd2589d1d4e669ede" - integrity sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4= - -number-is-nan@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" - integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0= - -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" - integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= - -object-copy@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c" - integrity sha1-fn2Fi3gb18mRpBupde04EnVOmYw= - dependencies: - copy-descriptor "^0.1.0" - define-property "^0.2.5" - kind-of "^3.0.3" - -object-is@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.0.1.tgz#0aa60ec9989a0b3ed795cf4d06f62cf1ad6539b6" - integrity sha1-CqYOyZiaCz7Xlc9NBvYs8a1lObY= - -object-keys@^1.0.11, object-keys@^1.0.12: - version "1.1.1" - resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" - integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== - -object-visit@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" - integrity sha1-95xEk68MU3e1n+OdOV5BBC3QRbs= - dependencies: - isobject "^3.0.0" - -object.assign@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.0.tgz#968bf1100d7956bb3ca086f006f846b3bc4008da" - integrity sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w== - dependencies: - define-properties "^1.1.2" - function-bind "^1.1.1" - has-symbols "^1.0.0" - object-keys "^1.0.11" - -object.entries@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.0.tgz#2024fc6d6ba246aee38bdb0ffd5cfbcf371b7519" - integrity sha512-l+H6EQ8qzGRxbkHOd5I/aHRhHDKoQXQ8g0BYt4uSweQU1/J6dZUOyWh9a2Vky35YCKjzmgxOzta2hH6kf9HuXA== - dependencies: - define-properties "^1.1.3" - es-abstract "^1.12.0" - function-bind "^1.1.1" - has "^1.0.3" - -object.fromentries@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.0.tgz#49a543d92151f8277b3ac9600f1e930b189d30ab" - integrity sha512-9iLiI6H083uiqUuvzyY6qrlmc/Gz8hLQFOcb/Ri/0xXFkSNS3ctV+CbE6yM2+AnkYfOB3dGjdzC0wrMLIhQICA== - dependencies: - define-properties "^1.1.2" - es-abstract "^1.11.0" - function-bind "^1.1.1" - has "^1.0.1" - -object.pick@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" - integrity sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c= - dependencies: - isobject "^3.0.1" - -object.values@^1.0.4, object.values@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.0.tgz#bf6810ef5da3e5325790eaaa2be213ea84624da9" - integrity sha512-8mf0nKLAoFX6VlNVdhGj31SVYpaNFtUnuoOXWyFEstsWRgU837AK+JYM0iAxwkSzGRbwn8cbFmgbyxj1j4VbXg== - dependencies: - define-properties "^1.1.3" - es-abstract "^1.12.0" - function-bind "^1.1.1" - has "^1.0.3" - -ohif-core@^0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/ohif-core/-/ohif-core-0.7.0.tgz#564a24209126652df48796da7f326dbae21c7889" - integrity sha512-BzsT55chrd2D1q8ZSCTrB12aroxFbWH9PUA2LjdgKkDWCsz0ydeiIJYVGA5TupDryY4+wBBCAvPPEgeLZxvqzw== - dependencies: - "@babel/runtime" "^7.2.0" - ajv "^6.10.0" - dicomweb-client "^0.4.2" - isomorphic-base64 "^1.0.2" - lodash.clonedeep "^4.5.0" - lodash.merge "^4.6.1" - mousetrap "^1.6.3" - validate.js "^0.12.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" - integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= - dependencies: - wrappy "1" - -onetime@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4" - integrity sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ= - dependencies: - mimic-fn "^1.0.0" - -optionator@^0.8.2: - version "0.8.2" - resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.2.tgz#364c5e409d3f4d6301d6c0b4c05bba50180aeb64" - integrity sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q= - dependencies: - deep-is "~0.1.3" - fast-levenshtein "~2.0.4" - levn "~0.3.0" - prelude-ls "~1.1.2" - type-check "~0.3.2" - wordwrap "~1.0.0" - -os-browserify@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.3.0.tgz#854373c7f5c2315914fc9bfc6bd8238fdda1ec27" - integrity sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc= - -os-homedir@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" - integrity sha1-/7xJiDNuDoM94MFox+8VISGqf7M= - -os-locale@^3.1.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, os-tmpdir@~1.0.2: - 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" - resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410" - integrity sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g== - dependencies: - 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-finally@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" - integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4= - -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.3.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" - integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q== - dependencies: - p-try "^1.0.0" - -p-limit@^2.0.0, p-limit@^2.2.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" - integrity sha1-IKAQOyIqcMj9OcwuWAaA893l7EM= - 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-locate@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" - integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== - dependencies: - p-limit "^2.2.0" - -p-map@^1.1.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/p-map/-/p-map-1.2.0.tgz#e4e94f311eabbc8633a1e79908165fca26241b6b" - integrity sha512-r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA== - -p-map@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/p-map/-/p-map-2.1.0.tgz#310928feef9c9ecc65b68b17693018a665cea175" - integrity sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw== - -p-try@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" - integrity sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M= - -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.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.6.tgz#0101211baa70c4bca4a0f63f2206e97b7dfaf258" - integrity sha512-lQe48YPsMJAig+yngZ87Lus+NF+3mtu7DVOBu6b/gHO1YpKwIj5AWjZ/TOS7i46HD/UixzWb1zeWDZfGZ3iYcg== - -pako@~1.0.2, 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" - -parent-module@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" - integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== - dependencies: - callsites "^3.0.0" - -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-entities@^1.0.2, parse-entities@^1.1.0: - version "1.2.2" - resolved "https://registry.yarnpkg.com/parse-entities/-/parse-entities-1.2.2.tgz#c31bf0f653b6661354f8973559cb86dd1d5edf50" - integrity sha512-NzfpbxW/NPrzZ/yYSoQxyqUZMZXIdCfE0OIN4ESsnptHJECoUk3FZktxNuzQf4tjt5UEopnxpYJbvYuxIFDdsg== - dependencies: - character-entities "^1.0.0" - character-entities-legacy "^1.0.0" - character-reference-invalid "^1.0.0" - is-alphanumerical "^1.0.0" - is-decimal "^1.0.0" - is-hexadecimal "^1.0.0" - -parse-json@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" - integrity sha1-9ID0BDTvgHQfhGkJn43qGPVaTck= - 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-passwd@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/parse-passwd/-/parse-passwd-1.0.0.tgz#6d5b934a456993b23d37f40a382d6f1666a8e5c6" - integrity sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY= - -pascalcase@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" - integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ= - -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" - 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" - integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU= - -path-exists@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" - integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== - -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" - integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= - -path-is-inside@^1.0.1, path-is-inside@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" - integrity sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM= - -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" - integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= - -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== - -path-type@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-2.0.0.tgz#f012ccb8415b7096fc2daa1054c3d72389594c73" - integrity sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM= - dependencies: - pify "^2.0.0" - -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: - pify "^3.0.0" - -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" - -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@^2.0.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" - integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw= - -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" - resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" - integrity sha1-ITXW36ejWMBprJsXh3YogihFD/o= - dependencies: - pinkie "^2.0.0" - -pinkie@^2.0.0: - version "2.0.4" - resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" - integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA= - -pkg-dir@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-2.0.0.tgz#f6d5d1109e19d63edf428e0bd57e12777615334b" - integrity sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s= - dependencies: - find-up "^2.1.0" - -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: - find-up "^3.0.0" - -pkg-dir@^4.1.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" - integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== - dependencies: - find-up "^4.0.0" - -please-upgrade-node@^3.0.2, please-upgrade-node@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/please-upgrade-node/-/please-upgrade-node-3.1.1.tgz#ed320051dfcc5024fae696712c8288993595e8ac" - integrity sha512-KY1uHnQ2NlQHqIJQpnh/i54rKkuxCEBx+voJIS/Mvb+L2iYd2NMotwduhKTMjfC1uKoX3VXOxLjIYG66dfJTVQ== - dependencies: - semver-compare "^1.0.0" - -posix-character-classes@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" - integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs= - -postcss-html@^0.36.0: - version "0.36.0" - resolved "https://registry.yarnpkg.com/postcss-html/-/postcss-html-0.36.0.tgz#b40913f94eaacc2453fd30a1327ad6ee1f88b204" - integrity sha512-HeiOxGcuwID0AFsNAL0ox3mW6MHH5cstWN1Z3Y+n6H+g12ih7LHdYxWwEA/QmrebctLjo79xz9ouK3MroHwOJw== - dependencies: - htmlparser2 "^3.10.0" - -postcss-jsx@^0.36.1: - version "0.36.1" - resolved "https://registry.yarnpkg.com/postcss-jsx/-/postcss-jsx-0.36.1.tgz#ab5e469e7449b84bd1a5973ff555fbe84c39f91d" - integrity sha512-xaZpy01YR7ijsFUtu5rViYCFHurFIPHir+faiOQp8g/NfTfWqZCKDhKrydQZ4d8WlSAmVdXGwLjpFbsNUI26Sw== - dependencies: - "@babel/core" ">=7.2.2" - -postcss-less@^3.1.4: - version "3.1.4" - resolved "https://registry.yarnpkg.com/postcss-less/-/postcss-less-3.1.4.tgz#369f58642b5928ef898ffbc1a6e93c958304c5ad" - integrity sha512-7TvleQWNM2QLcHqvudt3VYjULVB49uiW6XzEUFmvwHzvsOEF5MwBrIXZDJQvJNFGjJQTzSzZnDoCJ8h/ljyGXA== - dependencies: - postcss "^7.0.14" - -postcss-markdown@^0.36.0: - version "0.36.0" - resolved "https://registry.yarnpkg.com/postcss-markdown/-/postcss-markdown-0.36.0.tgz#7f22849ae0e3db18820b7b0d5e7833f13a447560" - integrity sha512-rl7fs1r/LNSB2bWRhyZ+lM/0bwKv9fhl38/06gF6mKMo/NPnp55+K1dSTosSVjFZc0e1ppBlu+WT91ba0PMBfQ== - dependencies: - remark "^10.0.1" - unist-util-find-all-after "^1.0.2" - -postcss-media-query-parser@^0.2.3: - version "0.2.3" - resolved "https://registry.yarnpkg.com/postcss-media-query-parser/-/postcss-media-query-parser-0.2.3.tgz#27b39c6f4d94f81b1a73b8f76351c609e5cef244" - integrity sha1-J7Ocb02U+Bsac7j3Y1HGCeXO8kQ= - -postcss-reporter@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/postcss-reporter/-/postcss-reporter-6.0.1.tgz#7c055120060a97c8837b4e48215661aafb74245f" - integrity sha512-LpmQjfRWyabc+fRygxZjpRxfhRf9u/fdlKf4VHG4TSPbV2XNsuISzYW1KL+1aQzx53CAppa1bKG4APIB/DOXXw== - dependencies: - chalk "^2.4.1" - lodash "^4.17.11" - log-symbols "^2.2.0" - postcss "^7.0.7" - -postcss-resolve-nested-selector@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/postcss-resolve-nested-selector/-/postcss-resolve-nested-selector-0.1.1.tgz#29ccbc7c37dedfac304e9fff0bf1596b3f6a0e4e" - integrity sha1-Kcy8fDfe36wwTp//C/FZaz9qDk4= - -postcss-safe-parser@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-safe-parser/-/postcss-safe-parser-4.0.1.tgz#8756d9e4c36fdce2c72b091bbc8ca176ab1fcdea" - integrity sha512-xZsFA3uX8MO3yAda03QrG3/Eg1LN3EPfjjf07vke/46HERLZyHrTsQ9E1r1w1W//fWEhtYNndo2hQplN2cVpCQ== - dependencies: - postcss "^7.0.0" - -postcss-sass@^0.3.5: - version "0.3.5" - resolved "https://registry.yarnpkg.com/postcss-sass/-/postcss-sass-0.3.5.tgz#6d3e39f101a53d2efa091f953493116d32beb68c" - integrity sha512-B5z2Kob4xBxFjcufFnhQ2HqJQ2y/Zs/ic5EZbCywCkxKd756Q40cIQ/veRDwSrw1BF6+4wUgmpm0sBASqVi65A== - dependencies: - gonzales-pe "^4.2.3" - postcss "^7.0.1" - -postcss-scss@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/postcss-scss/-/postcss-scss-2.0.0.tgz#248b0a28af77ea7b32b1011aba0f738bda27dea1" - integrity sha512-um9zdGKaDZirMm+kZFKKVsnKPF7zF7qBAtIfTSnZXD1jZ0JNZIxdB6TxQOjCnlSzLRInVl2v3YdBh/M881C4ug== - dependencies: - postcss "^7.0.0" - -postcss-selector-parser@^3.1.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-3.1.1.tgz#4f875f4afb0c96573d5cf4d74011aee250a7e865" - integrity sha1-T4dfSvsMllc9XPTXQBGu4lCn6GU= - dependencies: - dot-prop "^4.1.1" - indexes-of "^1.0.1" - uniq "^1.0.1" - -postcss-syntax@^0.36.2: - version "0.36.2" - resolved "https://registry.yarnpkg.com/postcss-syntax/-/postcss-syntax-0.36.2.tgz#f08578c7d95834574e5593a82dfbfa8afae3b51c" - integrity sha512-nBRg/i7E3SOHWxF3PpF5WnJM/jQ1YpY9000OaVXlAQj6Zp/kIqJxEDWIZ67tAd7NLuk7zqN4yqe9nc0oNAOs1w== - -postcss-value-parser@^3.3.1: - version "3.3.1" - resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz#9ff822547e2893213cf1c30efa51ac5fd1ba8281" - integrity sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ== - -postcss@^7.0.0, postcss@^7.0.1, postcss@^7.0.14, postcss@^7.0.16, postcss@^7.0.2, postcss@^7.0.7: - version "7.0.17" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.17.tgz#4da1bdff5322d4a0acaab4d87f3e782436bad31f" - integrity sha512-546ZowA+KZ3OasvQZHsbuEpysvwTZNGJv9EfyCQdsIDltPSWHAeTQ5fQy/Npi2ZDtLI3zs7Ps/p6wThErhm9fQ== - dependencies: - chalk "^2.4.2" - source-map "^0.6.1" - supports-color "^6.1.0" - -prelude-ls@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" - integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ= - -prepend-http@^1.0.0: - version "1.0.4" - resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc" - integrity sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw= - -prettier@^1.18.2: - version "1.18.2" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.18.2.tgz#6823e7c5900017b4bd3acf46fe9ac4b4d7bda9ea" - integrity sha512-OeHeMc0JhFE9idD4ZdtNibzY0+TPHSpSSb9h8FqtP+YnoZZ1sl8Vc9b1sasjfymH3SonAF4QcA2+mzHPhMvIiw== - -private@^0.1.6: - version "0.1.8" - resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff" - integrity sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg== - -process-nextick-args@~1.0.6: - version "1.0.7" - resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-1.0.7.tgz#150e20b756590ad3f91093f25a4f2ad8bff30ba3" - integrity sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M= - -process-nextick-args@~2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" - integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== - -process@^0.11.10: - version "0.11.10" - resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" - integrity sha1-czIwDoQBYb2j5podHZGn1LwW8YI= - -progress@^2.0.0: - version "2.0.3" - resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" - integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== - -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= - -promise@^7.1.1: - version "7.3.1" - resolved "https://registry.yarnpkg.com/promise/-/promise-7.3.1.tgz#064b72602b18f90f29192b8b1bc418ffd1ebd3bf" - integrity sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg== - dependencies: - asap "~2.0.3" - -prop-types-exact@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/prop-types-exact/-/prop-types-exact-1.2.0.tgz#825d6be46094663848237e3925a98c6e944e9869" - integrity sha512-K+Tk3Kd9V0odiXFP9fwDHUYRyvK3Nun3GVyPapSIs5OBkITAm15W0CPFD/YKTkMUAbc0b9CUwRQp2ybiBIq+eA== - dependencies: - has "^1.0.3" - object.assign "^4.1.0" - reflect.ownkeys "^0.2.0" - -prop-types-extra@^1.0.1, prop-types-extra@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/prop-types-extra/-/prop-types-extra-1.1.0.tgz#32609910ea2dcf190366bacd3490d5a6412a605f" - integrity sha512-QFyuDxvMipmIVKD2TwxLVPzMnO4e5oOf1vr3tJIomL8E7d0lr6phTHd5nkPhFIzTD1idBLLEPeylL9g+rrTzRg== - dependencies: - react-is "^16.3.2" - warning "^3.0.0" - -prop-types@15.6.2: - version "15.6.2" - resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.6.2.tgz#05d5ca77b4453e985d60fc7ff8c859094a497102" - integrity sha512-3pboPvLiWD7dkI3qf3KbUe6hKFKa52w+AE0VCqECtf+QHAKgOL37tTaNCnuX1nAAQ4ZhyP+kYVKf8rLmJ/feDQ== - dependencies: - loose-envify "^1.3.1" - object-assign "^4.1.1" - -prop-types@^15.5.10, prop-types@^15.5.8, prop-types@^15.6.0, prop-types@^15.6.1, prop-types@^15.6.2, prop-types@^15.7.2: - version "15.7.2" - resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.7.2.tgz#52c41e75b8c87e72b9d9360e0206b99dcbffa6c5" - integrity sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ== - dependencies: - loose-envify "^1.4.0" - object-assign "^4.1.1" - react-is "^16.8.1" - -property-expr@^1.5.0: - version "1.5.1" - resolved "https://registry.yarnpkg.com/property-expr/-/property-expr-1.5.1.tgz#22e8706894a0c8e28d58735804f6ba3a3673314f" - integrity sha512-CGuc0VUTGthpJXL36ydB6jnbyOf/rAHFvmVrJlH+Rg0DqqLFQGAP6hIaxD/G0OAmBJPhXDHuEJigrp0e0wFV6g== - -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= - -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: - version "1.4.1" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" - integrity sha1-wNWmOycYgArY4esPpSachN1BhF4= - -punycode@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" - integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== - -query-string@^4.1.0: - version "4.3.4" - resolved "https://registry.yarnpkg.com/query-string/-/query-string-4.3.4.tgz#bbb693b9ca915c232515b228b1a02b609043dbeb" - integrity sha1-u7aTucqRXCMlFbIosaArYJBD2+s= - dependencies: - object-assign "^4.1.0" - strict-uri-encode "^1.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= - -querystring@0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" - integrity sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA= - -quick-lru@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-1.1.0.tgz#4360b17c61136ad38078397ff11416e186dcfbb8" - integrity sha1-Q2CxfGETatOAeDl/8RQW4Ybc+7g= - -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: - 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" - -react-addons-shallow-compare@^15.6.2: - version "15.6.2" - resolved "https://registry.yarnpkg.com/react-addons-shallow-compare/-/react-addons-shallow-compare-15.6.2.tgz#198a00b91fc37623db64a28fd17b596ba362702f" - integrity sha1-GYoAuR/DdiPbZKKP0XtZa6NicC8= - dependencies: - fbjs "^0.8.4" - object-assign "^4.1.0" - -react-bootstrap-modal@4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/react-bootstrap-modal/-/react-bootstrap-modal-4.2.0.tgz#010b3ca9230a3c147fa5fc6aa39b6971e34151bd" - integrity sha512-2Xx9yvPEnMNhJIAKCg+t3CECF6w3qt2mmICv1Y1vwDBHeuyyf3OvSFcnRM8E0Tn7pywgopL2qyU4yx0vnGKmdA== - dependencies: - classnames "^2.2.6" - dom-helpers "^3.3.1" - prop-types "^15.6.1" - prop-types-extra "^1.1.0" - react-overlays "^0.8.0" - react-transition-group "^2.0.0" - -react-dates@18.4.1: - version "18.4.1" - resolved "https://registry.yarnpkg.com/react-dates/-/react-dates-18.4.1.tgz#82aa0bb4faaa9cdb9547d61c791af2180beda20e" - integrity sha512-ew6HiORfbJkEGlJ+5SMC5GtgI87zj2BqNv8tRsdnPtgLMt5fY2Z9dUFxc+XATeRHs+wOm4ku0dlKWpuqBzYapQ== - dependencies: - airbnb-prop-types "^2.10.0" - consolidated-events "^1.1.1 || ^2.0.0" - is-touch-device "^1.0.1" - lodash "^4.1.1" - object.assign "^4.1.0" - object.values "^1.0.4" - prop-types "^15.6.1" - react-addons-shallow-compare "^15.6.2" - react-moment-proptypes "^1.6.0" - react-outside-click-handler "^1.2.0" - react-portal "^4.1.5" - react-with-direction "^1.3.0" - react-with-styles "^3.2.0" - react-with-styles-interface-css "^4.0.2" - -react-dnd-touch-backend@^0.8.3: - version "0.8.3" - resolved "https://registry.yarnpkg.com/react-dnd-touch-backend/-/react-dnd-touch-backend-0.8.3.tgz#85d961ec8578dc9efa5b78000ea904d37e01e60f" - integrity sha512-LLJlpeJftRreP9ixm3yfd1JEXf+6BeKo5dkfJFHvNSOEOu+FDSwNl5l8uAG0FeD4z2ZVi7RDQ/jUxdjkBV3zBg== - dependencies: - dnd-core "^7.4.4" - invariant "^2.2.4" - -react-dnd@8.0.3: - version "8.0.3" - resolved "https://registry.yarnpkg.com/react-dnd/-/react-dnd-8.0.3.tgz#6226e1a6476bc7f9593b98def86fdab7d45100f8" - integrity sha512-wsdpZLJj8XqEl04GE1fd45/eNB+cZWEx0ZQC7PgrQ/URD2BfbwyQ5RiT23Cl/BPKJBUkTh1FltZ88LTUd7yGeg== - dependencies: - "@types/hoist-non-react-statics" "^3.3.1" - "@types/shallowequal" "^1.1.1" - dnd-core "^8.0.3" - hoist-non-react-statics "^3.3.0" - shallowequal "^1.1.0" - -react-dom@^16.6.3: - version "16.8.6" - resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-16.8.6.tgz#71d6303f631e8b0097f56165ef608f051ff6e10f" - integrity sha512-1nL7PIq9LTL3fthPqwkvr2zY7phIPjYrT0jp4HjyEQrEROnw4dG41VVwi/wfoCneoleqrNX7iAD+pXebJZwrwA== - dependencies: - loose-envify "^1.1.0" - object-assign "^4.1.1" - prop-types "^15.6.2" - scheduler "^0.13.6" - -react-i18next@^10.11.0: - version "10.11.2" - resolved "https://registry.yarnpkg.com/react-i18next/-/react-i18next-10.11.2.tgz#d8bace8a6383533bd4e0f79a911012bbe5a37c7d" - integrity sha512-Ru+WonG9BLILDg/By7Pw0Lne2I7HVLRyhyvDtar22tNNu6de2D89zAKl2RzK2jgq7m7l+BFSnLpz4kX7ZPV+JQ== - dependencies: - "@babel/runtime" "^7.3.1" - html-parse-stringify2 "2.0.1" - -react-is@^16.3.2, react-is@^16.7.0, react-is@^16.8.1, react-is@^16.8.6: - version "16.8.6" - resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.8.6.tgz#5bbc1e2d29141c9fbdfed456343fe2bc430a6a16" - integrity sha512-aUk3bHfZ2bRSVFFbbeVS4i+lNPZr3/WM5jT2J5omUVV1zzcs1nAaf3l51ctA5FFvCRbhrH0bdAsRRQddFJZPtA== - -react-lifecycles-compat@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz#4f1a273afdfc8f3488a8c516bfda78f872352362" - integrity sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA== - -react-moment-proptypes@^1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/react-moment-proptypes/-/react-moment-proptypes-1.6.0.tgz#8ec266ee392a08ba3412d2df2eebf833ab1046df" - integrity sha512-4h7EuhDMTzQqZ+02KUUO+AVA7PqhbD88yXB740nFpNDyDS/bj9jiPyn2rwr9sa8oDyaE1ByFN9+t5XPyPTmN6g== - dependencies: - moment ">=1.6.0" - -react-outside-click-handler@^1.2.0: - version "1.2.3" - resolved "https://registry.yarnpkg.com/react-outside-click-handler/-/react-outside-click-handler-1.2.3.tgz#911a8b91ca947882156d2483450d8638324f3399" - integrity sha512-4orkx59ais0mM/j1Ekc5ewyRu5xNLX4a6pMs7RT8U7JkbPOlRsucE+190kXzYUUHsGfZvyAmsdQkL7lpqzMGBg== - dependencies: - airbnb-prop-types "^2.12.0" - consolidated-events "^1.1.1 || ^2.0.0" - document.contains "^1.0.0" - object.values "^1.1.0" - prop-types "^15.7.2" - -react-overlays@^0.8.0: - version "0.8.3" - resolved "https://registry.yarnpkg.com/react-overlays/-/react-overlays-0.8.3.tgz#fad65eea5b24301cca192a169f5dddb0b20d3ac5" - integrity sha512-h6GT3jgy90PgctleP39Yu3eK1v9vaJAW73GOA/UbN9dJ7aAN4BTZD6793eI1D5U+ukMk17qiqN/wl3diK1Z5LA== - dependencies: - classnames "^2.2.5" - dom-helpers "^3.2.1" - prop-types "^15.5.10" - prop-types-extra "^1.0.1" - react-transition-group "^2.2.0" - warning "^3.0.0" - -react-portal@^4.1.5: - version "4.2.0" - resolved "https://registry.yarnpkg.com/react-portal/-/react-portal-4.2.0.tgz#5400831cdb0ae64dccb8128121cf076089ab1afd" - integrity sha512-Zf+vGQ/VEAb5XAy+muKEn48yhdCNYPZaB1BWg1xc8sAZWD8pXTgPtQT4ihBdmWzsfCq8p8/kqf0GWydSBqc+Eg== - dependencies: - prop-types "^15.5.8" - -react-redux@^7.1.0: - version "7.1.0" - resolved "https://registry.yarnpkg.com/react-redux/-/react-redux-7.1.0.tgz#72af7cf490a74acdc516ea9c1dd80e25af9ea0b2" - integrity sha512-hyu/PoFK3vZgdLTg9ozbt7WF3GgX5+Yn3pZm5/96/o4UueXA+zj08aiSC9Mfj2WtD1bvpIb3C5yvskzZySzzaw== - dependencies: - "@babel/runtime" "^7.4.5" - hoist-non-react-statics "^3.3.0" - invariant "^2.2.4" - loose-envify "^1.4.0" - prop-types "^15.7.2" - react-is "^16.8.6" - -react-transition-group@^2.0.0, react-transition-group@^2.2.0: - version "2.9.0" - resolved "https://registry.yarnpkg.com/react-transition-group/-/react-transition-group-2.9.0.tgz#df9cdb025796211151a436c69a8f3b97b5b07c8d" - integrity sha512-+HzNTCHpeQyl4MJ/bdE0u6XRMe9+XG/+aL4mCxVN4DnPBQ0/5bfHWPDuOZUzYdMj94daZaZdCCc1Dzt9R/xSSg== - dependencies: - dom-helpers "^3.4.0" - loose-envify "^1.4.0" - prop-types "^15.6.2" - react-lifecycles-compat "^3.0.4" - -react-viewerbase@^0.15.1: - version "0.15.1" - resolved "https://registry.yarnpkg.com/react-viewerbase/-/react-viewerbase-0.15.1.tgz#e18747ba3fb0a7978a09418a5d327b87c76c92ca" - integrity sha512-iF8l0c6FUNNk4eMlOpBvbIYcdKJsA1CT6lH5ThXKnZDq7gK0dEzA6H0EgLQLnbF0q7c4ZB/xk6pFBC9xPUlsvA== - dependencies: - "@babel/runtime" "7.2.0" - "@ohif/i18n" "^0.1.1" - classnames "2.2.6" - i18next "^17.0.3" - i18next-browser-languagedetector "^3.0.1" - lodash.debounce "^4.0.8" - lodash.isequal "4.5.0" - moment "2.24.0" - prop-types "15.6.2" - react-bootstrap-modal "4.2.0" - react-dates "18.4.1" - react-dnd "8.0.3" - react-dnd-touch-backend "^0.8.3" - react-i18next "^10.11.0" - react-with-direction "1.3.0" - -react-vtkjs-viewport@0.0.11: - version "0.0.11" - resolved "https://registry.yarnpkg.com/react-vtkjs-viewport/-/react-vtkjs-viewport-0.0.11.tgz#cedd993ca226502bf0417a3748a5b2f806522519" - integrity sha512-ttWw7bU/lL/nJuaaKdtAc8448vMJmlRQzpkpuP/J+3lTzIQbQPCPU40LqgONjr7LvL5++61N2GJ8m+PRgHyfxQ== - dependencies: - moment "^2.24.0" - -react-with-direction@1.3.0, react-with-direction@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/react-with-direction/-/react-with-direction-1.3.0.tgz#9885f5941aa986be753db95a41e8f3d8f8de97ff" - integrity sha512-2TflEebNckTNUybw3Rzqjg4BwM/H380ZL5lsbZ5f4UTY2JyE5uQdQZK5T2w+BDJSAMcqoA2RDJYa4e7Cl6C2Kg== - dependencies: - airbnb-prop-types "^2.8.1" - brcast "^2.0.2" - deepmerge "^1.5.1" - direction "^1.0.1" - hoist-non-react-statics "^2.3.1" - object.assign "^4.1.0" - object.values "^1.0.4" - prop-types "^15.6.0" - -react-with-styles-interface-css@^4.0.2: - version "4.0.3" - resolved "https://registry.yarnpkg.com/react-with-styles-interface-css/-/react-with-styles-interface-css-4.0.3.tgz#c4a61277b2b8e4126b2cd25eca3ac4097bd2af09" - integrity sha512-wE43PIyjal2dexxyyx4Lhbcb+E42amoYPnkunRZkb9WTA+Z+9LagbyxwsI352NqMdFmghR0opg29dzDO4/YXbw== - dependencies: - array.prototype.flat "^1.2.1" - global-cache "^1.2.1" - -react-with-styles@^3.2.0: - version "3.2.1" - resolved "https://registry.yarnpkg.com/react-with-styles/-/react-with-styles-3.2.1.tgz#57a313ae3dcd0b347193a5538d5061d3bb96bab4" - integrity sha512-L+x/EDgrKkqV6pTfDtLMShf7Xs+bVQ+HAT5rByX88QYX+ft9t5Gn4PWMmg36Ur21IVEBMGjjQQIJGJpBrzbsyg== - dependencies: - deepmerge "^1.5.2" - hoist-non-react-statics "^2.5.0" - prop-types "^15.6.1" - react-with-direction "^1.3.0" - -react@^16.6.3: - version "16.8.6" - resolved "https://registry.yarnpkg.com/react/-/react-16.8.6.tgz#ad6c3a9614fd3a4e9ef51117f54d888da01f2bbe" - integrity sha512-pC0uMkhLaHm11ZSJULfOBqV4tIZkx87ZLvbbQYunNixAAvjnC+snJCg0XQXn9VIsttVsbZP/H/ewzgsd5fxKXw== - dependencies: - loose-envify "^1.1.0" - object-assign "^4.1.1" - prop-types "^15.6.2" - scheduler "^0.13.6" - -read-pkg-up@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-2.0.0.tgz#6b72a8048984e0c41e79510fd5e9fa99b3b549be" - integrity sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4= - dependencies: - find-up "^2.0.0" - read-pkg "^2.0.0" - -read-pkg-up@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-3.0.0.tgz#3ed496685dba0f8fe118d0691dc51f4a1ff96f07" - integrity sha1-PtSWaF26D4/hGNBpHcUfSh/5bwc= - dependencies: - find-up "^2.0.0" - read-pkg "^3.0.0" - -read-pkg@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-2.0.0.tgz#8ef1c0623c6a6db0dc6713c4bfac46332b2368f8" - integrity sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg= - dependencies: - load-json-file "^2.0.0" - normalize-package-data "^2.3.2" - path-type "^2.0.0" - -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: - load-json-file "^4.0.0" - normalize-package-data "^2.3.2" - path-type "^3.0.0" - -read-pkg@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-5.1.1.tgz#5cf234dde7a405c90c88a519ab73c467e9cb83f5" - integrity sha512-dFcTLQi6BZ+aFUaICg7er+/usEoqFdQxiEBsEMNGoipenihtxxtdrQuBXvyANCEI8VuUIVYFgeHGx9sLLvim4w== - dependencies: - "@types/normalize-package-data" "^2.4.0" - normalize-package-data "^2.5.0" - parse-json "^4.0.0" - type-fest "^0.4.1" - -"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" - integrity sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw== - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.3" - isarray "~1.0.0" - process-nextick-args "~2.0.0" - safe-buffer "~5.1.1" - string_decoder "~1.1.1" - util-deprecate "~1.0.1" - -readable-stream@^3.1.1: - version "3.4.0" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.4.0.tgz#a51c26754658e0a3c21dbf59163bd45ba6f447fc" - integrity sha512-jItXPLmrSR8jmTRmRWJXCnGJsfy85mB3Wd/uINMXA65yrnFo0cPClFIUWzo2najVNSl+mx7/4W8ttlLWJe99pQ== - dependencies: - inherits "^2.0.3" - string_decoder "^1.1.1" - util-deprecate "^1.0.1" - -readable-stream@~2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.0.6.tgz#8f90341e68a53ccc928788dacfcd11b36eb9b78e" - integrity sha1-j5A0HmilPMySh4jaz80Rs265t44= - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.1" - isarray "~1.0.0" - process-nextick-args "~1.0.6" - string_decoder "~0.10.x" - util-deprecate "~1.0.1" - -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: - graceful-fs "^4.1.11" - micromatch "^3.1.10" - readable-stream "^2.0.2" - -rechoir@^0.6.2: - version "0.6.2" - resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.6.2.tgz#85204b54dba82d5742e28c96756ef43af50e3384" - integrity sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q= - dependencies: - resolve "^1.1.6" - -redent@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/redent/-/redent-2.0.0.tgz#c1b2007b42d57eb1389079b3c8333639d5e1ccaa" - integrity sha1-wbIAe0LVfrE4kHmzyDM2OdXhzKo= - dependencies: - indent-string "^3.0.0" - strip-indent "^2.0.0" - -redux@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/redux/-/redux-4.0.1.tgz#436cae6cc40fbe4727689d7c8fae44808f1bfef5" - integrity sha512-R7bAtSkk7nY6O/OYMVR9RiBI+XghjF9rlbl5806HJbQph0LJVHZrU5oaO4q70eUKiqMRqm4y07KLTlMZ2BlVmg== - dependencies: - loose-envify "^1.4.0" - symbol-observable "^1.2.0" - -reflect.ownkeys@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/reflect.ownkeys/-/reflect.ownkeys-0.2.0.tgz#749aceec7f3fdf8b63f927a04809e90c5c0b3460" - integrity sha1-dJrO7H8/34tj+SegSAnpDFwLNGA= - -regenerate-unicode-properties@^8.0.2: - version "8.1.0" - resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-8.1.0.tgz#ef51e0f0ea4ad424b77bf7cb41f3e015c70a3f0e" - integrity sha512-LGZzkgtLY79GeXLm8Dp0BVLdQlWICzBnJz/ipWUgo59qBaZ+BHtq51P2q1uVZlppMuUAT37SDk39qUbjTWB7bA== - dependencies: - regenerate "^1.4.0" - -regenerate@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.0.tgz#4a856ec4b56e4077c557589cae85e7a4c8869a11" - integrity sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg== - -regenerator-runtime@^0.12.0: - version "0.12.1" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.12.1.tgz#fa1a71544764c036f8c49b13a08b2594c9f8a0de" - integrity sha512-odxIc1/vDlo4iZcfXqRYFj0vpXFNoGdKMAUieAlFYO6m/nl5e9KR/beGf41z4a1FI+aQgtjhuaSlDxQ0hmkrHg== - -regenerator-runtime@^0.13.2: - version "0.13.2" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.2.tgz#32e59c9a6fb9b1a4aff09b4930ca2d4477343447" - integrity sha512-S/TQAZJO+D3m9xeN1WTI8dLKBBiRgXBlTJvbWjCThHWZj9EvHK70Ff50/tYj2J/fvBY6JtFVwRuazHN2E7M9BA== - -regenerator-transform@^0.14.0: - version "0.14.0" - resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.14.0.tgz#2ca9aaf7a2c239dd32e4761218425b8c7a86ecaf" - integrity sha512-rtOelq4Cawlbmq9xuMR5gdFmv7ku/sFoB7sRiywx7aq53bc52b4j6zvH7Te1Vt/X2YveDKnCGUbioieU7FEL3w== - dependencies: - private "^0.1.6" - -regex-not@^1.0.0, regex-not@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" - integrity sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A== - dependencies: - extend-shallow "^3.0.2" - safe-regex "^1.1.0" - -regexp-tree@^0.1.6: - version "0.1.10" - resolved "https://registry.yarnpkg.com/regexp-tree/-/regexp-tree-0.1.10.tgz#d837816a039c7af8a8d64d7a7c3cf6a1d93450bc" - integrity sha512-K1qVSbcedffwuIslMwpe6vGlj+ZXRnGkvjAtFHfDZZZuEdA/h0dxljAPu9vhUo6Rrx2U2AwJ+nSQ6hK+lrP5MQ== - -regexpp@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-2.0.1.tgz#8d19d31cf632482b589049f8281f93dbcba4d07f" - integrity sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw== - -regexpu-core@^4.5.4: - version "4.5.4" - resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.5.4.tgz#080d9d02289aa87fe1667a4f5136bc98a6aebaae" - integrity sha512-BtizvGtFQKGPUcTy56o3nk1bGRp4SZOTYrDtGNlqCQufptV5IkkLN6Emw+yunAJjzf+C9FQFtvq7IoA3+oMYHQ== - dependencies: - regenerate "^1.4.0" - regenerate-unicode-properties "^8.0.2" - regjsgen "^0.5.0" - regjsparser "^0.6.0" - unicode-match-property-ecmascript "^1.0.4" - unicode-match-property-value-ecmascript "^1.1.0" - -regjsgen@^0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.5.0.tgz#a7634dc08f89209c2049adda3525711fb97265dd" - integrity sha512-RnIrLhrXCX5ow/E5/Mh2O4e/oa1/jW0eaBKTSy3LaCj+M3Bqvm97GWDp2yUtzIs4LEn65zR2yiYGFqb2ApnzDA== - -regjsparser@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.6.0.tgz#f1e6ae8b7da2bae96c99399b868cd6c933a2ba9c" - integrity sha512-RQ7YyokLiQBomUJuUG8iGVvkgOLxwyZM8k6d3q5SAXpg4r5TZJZigKFvC6PpD+qQ98bCDC5YelPeA3EucDoNeQ== - dependencies: - jsesc "~0.5.0" - -remark-parse@^6.0.0: - version "6.0.3" - resolved "https://registry.yarnpkg.com/remark-parse/-/remark-parse-6.0.3.tgz#c99131052809da482108413f87b0ee7f52180a3a" - integrity sha512-QbDXWN4HfKTUC0hHa4teU463KclLAnwpn/FBn87j9cKYJWWawbiLgMfP2Q4XwhxxuuuOxHlw+pSN0OKuJwyVvg== - dependencies: - collapse-white-space "^1.0.2" - is-alphabetical "^1.0.0" - is-decimal "^1.0.0" - is-whitespace-character "^1.0.0" - is-word-character "^1.0.0" - markdown-escapes "^1.0.0" - parse-entities "^1.1.0" - repeat-string "^1.5.4" - state-toggle "^1.0.0" - trim "0.0.1" - trim-trailing-lines "^1.0.0" - unherit "^1.0.4" - unist-util-remove-position "^1.0.0" - vfile-location "^2.0.0" - xtend "^4.0.1" - -remark-stringify@^6.0.0: - version "6.0.4" - resolved "https://registry.yarnpkg.com/remark-stringify/-/remark-stringify-6.0.4.tgz#16ac229d4d1593249018663c7bddf28aafc4e088" - integrity sha512-eRWGdEPMVudijE/psbIDNcnJLRVx3xhfuEsTDGgH4GsFF91dVhw5nhmnBppafJ7+NWINW6C7ZwWbi30ImJzqWg== - dependencies: - ccount "^1.0.0" - is-alphanumeric "^1.0.0" - is-decimal "^1.0.0" - is-whitespace-character "^1.0.0" - longest-streak "^2.0.1" - markdown-escapes "^1.0.0" - markdown-table "^1.1.0" - mdast-util-compact "^1.0.0" - parse-entities "^1.0.2" - repeat-string "^1.5.4" - state-toggle "^1.0.0" - stringify-entities "^1.0.1" - unherit "^1.0.4" - xtend "^4.0.1" - -remark@^10.0.1: - version "10.0.1" - resolved "https://registry.yarnpkg.com/remark/-/remark-10.0.1.tgz#3058076dc41781bf505d8978c291485fe47667df" - integrity sha512-E6lMuoLIy2TyiokHprMjcWNJ5UxfGQjaMSMhV+f4idM625UjjK4j798+gPs5mfjzDE6vL0oFKVeZM6gZVSVrzQ== - dependencies: - remark-parse "^6.0.0" - remark-stringify "^6.0.0" - unified "^7.0.0" - -remove-trailing-separator@^1.0.1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" - integrity sha1-wkvOKig62tW8P1jg1IJJuSN52O8= - -repeat-element@^1.1.2: - version "1.1.3" - resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.3.tgz#782e0d825c0c5a3bb39731f84efee6b742e6b1ce" - integrity sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g== - -repeat-string@^1.5.4, repeat-string@^1.6.1: - version "1.6.1" - resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" - integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc= - -replace-ext@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/replace-ext/-/replace-ext-1.0.0.tgz#de63128373fcbf7c3ccfa4de5a480c45a67958eb" - integrity sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs= - -require-directory@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" - integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= - -require-main-filename@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" - integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== - -resolve-cwd@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-2.0.0.tgz#00a9f7387556e27038eae232caa372a6a59b665a" - integrity sha1-AKn3OHVW4nA46uIyyqNypqWbZlo= - dependencies: - 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" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748" - integrity sha1-six699nWiBvItuZTM17rywoYh0g= - -resolve-from@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" - integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== - -resolve-from@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" - integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== - -resolve-url@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" - integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= - -resolve@^1.1.6, resolve@^1.10.0, resolve@^1.10.1, resolve@^1.11.0, resolve@^1.3.2, resolve@^1.5.0, resolve@^1.8.1: - version "1.11.1" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.11.1.tgz#ea10d8110376982fef578df8fc30b9ac30a07a3e" - integrity sha512-vIpgF6wfuJOZI7KKKSP+HmiKggadPQAdsp5HiC1mvqnfp0gF1vdwgBWZIdrVft9pgqoMFQN+R7BSWZiBxx+BBw== - dependencies: - path-parse "^1.0.6" - -restore-cursor@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf" - integrity sha1-n37ih/gv0ybU/RYpI9YhKe7g368= - dependencies: - onetime "^2.0.0" - signal-exit "^3.0.2" - -ret@~0.1.10: - version "0.1.15" - resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" - integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== - -rimraf@2.6.3, rimraf@^2.2.8, rimraf@^2.5.4, rimraf@^2.6.1, rimraf@^2.6.2, 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" - -rollup-plugin-json@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/rollup-plugin-json/-/rollup-plugin-json-4.0.0.tgz#a18da0a4b30bf5ca1ee76ddb1422afbb84ae2b9e" - integrity sha512-hgb8N7Cgfw5SZAkb3jf0QXii6QX/FOkiIq2M7BAQIEydjHvTyxXHQiIzZaTFgx1GK0cRCHOCBHIyEkkLdWKxow== - dependencies: - rollup-pluginutils "^2.5.0" - -rollup-pluginutils@^2.5.0: - version "2.8.1" - resolved "https://registry.yarnpkg.com/rollup-pluginutils/-/rollup-pluginutils-2.8.1.tgz#8fa6dd0697344938ef26c2c09d2488ce9e33ce97" - integrity sha512-J5oAoysWar6GuZo0s+3bZ6sVZAC0pfqKz68De7ZgDi5z63jOVZn1uJL/+z1jeKHNbGII8kAyHF5q8LnxSX5lQg== - dependencies: - estree-walker "^0.6.1" - -run-async@^2.2.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.3.0.tgz#0371ab4ae0bdd720d4166d7dfda64ff7a445a6c0" - integrity sha1-A3GrSuC91yDUFm19/aZP96RFpsA= - dependencies: - is-promise "^2.1.0" - -run-node@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/run-node/-/run-node-1.0.0.tgz#46b50b946a2aa2d4947ae1d886e9856fd9cabe5e" - integrity sha512-kc120TBlQ3mih1LSzdAJXo4xn/GWS2ec0l3S+syHDXP9uRr0JAT8Qd3mdMuyjqCzeZktgP3try92cEgf9Nks8A== - -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@^6.3.3, rxjs@^6.4.0: - version "6.5.2" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.5.2.tgz#2e35ce815cd46d84d02a209fb4e5921e051dbec7" - integrity sha512-HUb7j3kvb7p7eCUHE3FqjoDsC1xfZQ4AHFWfTKSpZ+sAhhz5X1WX0ZuUqWbzB2QhSLp3DoLUG+hMdEDKqWo2Zg== - dependencies: - tslib "^1.9.0" - -safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: - 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" - integrity sha1-QKNmnzsHfR6UPURinhV91IAjvy4= - dependencies: - ret "~0.1.10" - -"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== - -sax@0.5.x: - version "0.5.8" - resolved "https://registry.yarnpkg.com/sax/-/sax-0.5.8.tgz#d472db228eb331c2506b0e8c15524adb939d12c1" - integrity sha1-1HLbIo6zMcJQaw6MFVJK25OdEsE= - -sax@^1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" - integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== - -scheduler@^0.13.6: - version "0.13.6" - resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.13.6.tgz#466a4ec332467b31a91b9bf74e5347072e4cd889" - integrity sha512-IWnObHt413ucAYKsD9J1QShUKkbKLQQHdxRyw73sw4FN26iWr3DY/H34xGPe4nmL1DwXyWmSWmMrA9TfQbE/XQ== - dependencies: - loose-envify "^1.1.0" - object-assign "^4.1.1" - -schema-utils@^0.4.0: - version "0.4.7" - resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-0.4.7.tgz#ba74f597d2be2ea880131746ee17d0a093c68187" - integrity sha512-v/iwU6wvwGK8HbU9yi3/nhGzP0yGSuhQMzL6ySiec1FSrZZDkhm4noOSWzrNFo/jEc+SJY6jRTwuwbSXJPDUnQ== - dependencies: - ajv "^6.1.0" - ajv-keywords "^3.1.0" - -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" - -seedrandom@2.4.3: - version "2.4.3" - resolved "https://registry.yarnpkg.com/seedrandom/-/seedrandom-2.4.3.tgz#2438504dad33917314bff18ac4d794f16d6aaecc" - integrity sha1-JDhQTa0zkXMUv/GKxNeU8W1qrsw= - -semver-compare@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/semver-compare/-/semver-compare-1.0.0.tgz#0dee216a1c941ab37e9efb1788f6afc5ff5537fc" - integrity sha1-De4hahyUGrN+nvsXiPavxf9VN/w= - -"semver@2 || 3 || 4 || 5", semver@^5.3.0, semver@^5.4.1, semver@^5.5.0, semver@^5.5.1, 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.1.0, semver@^6.1.1: - version "6.1.2" - resolved "https://registry.yarnpkg.com/semver/-/semver-6.1.2.tgz#079960381376a3db62eb2edc8a3bfb10c7cfe318" - integrity sha512-z4PqiCpomGtWj8633oeAdXm1Kn1W++3T8epkZYnwiVgIYIJ0QHszhInYSJTYxebByQH7KVCEAn8R9duzZW2PhQ== - -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" - integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= - -set-value@^2.0.0, set-value@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.1.tgz#a18d40530e6f07de4228c7defe4227af8cad005b" - integrity sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw== - dependencies: - extend-shallow "^2.0.1" - is-extendable "^0.1.1" - is-plain-object "^2.0.3" - split-string "^3.0.1" - -setimmediate@^1.0.4, setimmediate@^1.0.5: - 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" - -shader-loader@^1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/shader-loader/-/shader-loader-1.3.1.tgz#2d87808c088bdd172ce577490b41db4e6f01535f" - integrity sha512-dt8F9K0x4rjmaFyHh7rNDfpt4LUiR64zhNIEwp2WbE99B3z4ALuvvmhftkElg93dUD6sTmv/aXa/z9SJiEddcA== - dependencies: - loader-utils "^1.1.0" - -shallowequal@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/shallowequal/-/shallowequal-1.1.0.tgz#188d521de95b9087404fd4dcb68b13df0ae4e7f8" - integrity sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ== - -shebang-command@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" - integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo= - dependencies: - shebang-regex "^1.0.0" - -shebang-regex@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" - integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= - -shelljs@0.7.8: - version "0.7.8" - resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.7.8.tgz#decbcf874b0d1e5fb72e14b164a9683048e9acb3" - integrity sha1-3svPh0sNHl+3LhSxZKloMEjprLM= - dependencies: - glob "^7.0.0" - interpret "^1.0.0" - rechoir "^0.6.2" - -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" - integrity sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0= - -simple-git@^1.85.0: - version "1.116.0" - resolved "https://registry.yarnpkg.com/simple-git/-/simple-git-1.116.0.tgz#ea6e533466f1e0152186e306e004d4eefa6e3e00" - integrity sha512-Pbo3tceqMYy0j3U7jzMKabOWcx5+67GdgQUjpK83XUxGhA+1BX93UPvlWNzbCRoFwd7EJTyDSCC2XCoT4NTLYQ== - dependencies: - debug "^4.0.1" - -slash@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/slash/-/slash-2.0.0.tgz#de552851a1759df3a8f206535442f5ec4ddeab44" - integrity sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A== - -slash@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" - integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== - -slice-ansi@0.0.4: - version "0.0.4" - resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-0.0.4.tgz#edbf8903f66f7ce2f8eafd6ceed65e264c831b35" - integrity sha1-7b+JA/ZvfOL46v1s7tZeJkyDGzU= - -slice-ansi@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-2.1.0.tgz#cacd7693461a637a5788d92a7dd4fba068e81636" - integrity sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ== - dependencies: - ansi-styles "^3.2.0" - astral-regex "^1.0.0" - is-fullwidth-code-point "^2.0.0" - -snapdragon-node@^2.0.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" - integrity sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw== - dependencies: - define-property "^1.0.0" - isobject "^3.0.0" - snapdragon-util "^3.0.1" - -snapdragon-util@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2" - integrity sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ== - dependencies: - kind-of "^3.2.0" - -snapdragon@^0.8.1: - version "0.8.2" - resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d" - integrity sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg== - dependencies: - base "^0.11.1" - debug "^2.2.0" - define-property "^0.2.5" - extend-shallow "^2.0.1" - map-cache "^0.2.2" - source-map "^0.5.6" - source-map-resolve "^0.5.0" - use "^3.1.0" - -sort-keys@^1.0.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/sort-keys/-/sort-keys-1.1.2.tgz#441b6d4d346798f1b4e49e8920adfba0e543f9ad" - integrity sha1-RBttTTRnmPG05J6JIK37oOVD+a0= - dependencies: - is-plain-obj "^1.0.0" - -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.2" - resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.2.tgz#72e2cc34095543e43b2c62b2c4c10d4a9054f259" - integrity sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA== - dependencies: - atob "^2.1.1" - decode-uri-component "^0.2.0" - resolve-url "^0.2.1" - source-map-url "^0.4.0" - urix "^0.1.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" - integrity sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM= - -source-map@0.1.x: - version "0.1.43" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.1.43.tgz#c24bc146ca517c1471f5dacbe2571b2b7f9e3346" - integrity sha1-wkvBRspRfBRx9drL4lcbK3+eM0Y= - dependencies: - amdefine ">=0.0.4" - -source-map@^0.5.0, source-map@^0.5.6: - version "0.5.7" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" - integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= - -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" - integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== - -spdx-correct@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.0.tgz#fb83e504445268f154b074e218c87c003cd31df4" - integrity sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q== - dependencies: - spdx-expression-parse "^3.0.0" - spdx-license-ids "^3.0.0" - -spdx-exceptions@^2.1.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz#2ea450aee74f2a89bfb94519c07fcd6f41322977" - integrity sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA== - -spdx-expression-parse@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz#99e119b7a5da00e05491c9fa338b7904823b41d0" - integrity sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg== - dependencies: - spdx-exceptions "^2.1.0" - spdx-license-ids "^3.0.0" - -spdx-license-ids@^3.0.0: - version "3.0.4" - resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.4.tgz#75ecd1a88de8c184ef015eafb51b5b48bfd11bb1" - integrity sha512-7j8LYJLeY/Yb6ACbQ7F76qy5jHkp0U6jgBfJsk97bwWlVUnUWsAgpyaCvo17h0/RQGnQ036tVDomiwoI4pDkQA== - -specificity@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/specificity/-/specificity-0.4.1.tgz#aab5e645012db08ba182e151165738d00887b019" - integrity sha512-1klA3Gi5PD1Wv9Q0wUoOQN1IWAuPu0D1U03ThXTr0cJ20+/iq2tHSDnK7Kk/0LXJ1ztUB2/1Os0wKmfyNgUQfg== - -split-string@^3.0.1, split-string@^3.0.2: - version "3.1.0" - resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" - integrity sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw== - dependencies: - extend-shallow "^3.0.0" - -sprintf-js@~1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" - integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= - -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" - -staged-git-files@1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/staged-git-files/-/staged-git-files-1.1.2.tgz#4326d33886dc9ecfa29a6193bf511ba90a46454b" - integrity sha512-0Eyrk6uXW6tg9PYkhi/V/J4zHp33aNyi2hOCmhFLqLTIhbgqWn5jlSzI+IU0VqrZq6+DbHcabQl/WP6P3BG0QA== - -state-toggle@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/state-toggle/-/state-toggle-1.0.2.tgz#75e93a61944116b4959d665c8db2d243631d6ddc" - integrity sha512-8LpelPGR0qQM4PnfLiplOQNJcIN1/r2Gy0xKB2zKnIW2YzPMt2sR4I/+gtPjhN7Svh9kw+zqEg2SFwpBO9iNiw== - -static-extend@^0.1.1: - version "0.1.2" - resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" - integrity sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY= - dependencies: - define-property "^0.2.5" - object-copy "^0.1.0" - -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: - 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= - -strict-uri-encode@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713" - integrity sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM= - -string-argv@^0.0.2: - version "0.0.2" - resolved "https://registry.yarnpkg.com/string-argv/-/string-argv-0.0.2.tgz#dac30408690c21f3c3630a3ff3a05877bdcbd736" - integrity sha1-2sMECGkMIfPDYwo/86BYd73L1zY= - -string-width@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" - integrity sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M= - dependencies: - code-point-at "^1.0.0" - is-fullwidth-code-point "^1.0.0" - strip-ansi "^3.0.0" - -"string-width@^1.0.2 || 2", string-width@^2.1.0, string-width@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" - integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== - dependencies: - is-fullwidth-code-point "^2.0.0" - strip-ansi "^4.0.0" - -string-width@^3.0.0, string-width@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" - integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== - dependencies: - emoji-regex "^7.0.1" - is-fullwidth-code-point "^2.0.0" - strip-ansi "^5.1.0" - -string-width@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.1.0.tgz#ba846d1daa97c3c596155308063e075ed1c99aff" - integrity sha512-NrX+1dVVh+6Y9dnQ19pR0pP4FiEIlUvdTGn8pw6CKTNq5sgib2nIhmUNT5TAmhWmvKr3WcxBcP3E8nWezuipuQ== - dependencies: - emoji-regex "^8.0.0" - is-fullwidth-code-point "^3.0.0" - strip-ansi "^5.2.0" - -string_decoder@^1.0.0, string_decoder@^1.1.1: - 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@~0.10.x: - version "0.10.31" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" - integrity sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ= - -string_decoder@~1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" - integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== - dependencies: - safe-buffer "~5.1.0" - -stringify-entities@^1.0.1: - version "1.3.2" - resolved "https://registry.yarnpkg.com/stringify-entities/-/stringify-entities-1.3.2.tgz#a98417e5471fd227b3e45d3db1861c11caf668f7" - integrity sha512-nrBAQClJAPN2p+uGCVJRPIPakKeKWZ9GtBCmormE7pWOSlHat7+x5A8gx85M7HM5Dt0BP3pP5RhVW77WdbJJ3A== - dependencies: - character-entities-html4 "^1.0.0" - character-entities-legacy "^1.0.0" - is-alphanumerical "^1.0.0" - is-hexadecimal "^1.0.0" - -stringify-object@^3.2.2: - version "3.3.0" - resolved "https://registry.yarnpkg.com/stringify-object/-/stringify-object-3.3.0.tgz#703065aefca19300d3ce88af4f5b3956d7556629" - integrity sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw== - dependencies: - get-own-enumerable-property-symbols "^3.0.0" - is-obj "^1.0.1" - is-regexp "^1.0.0" - -strip-ansi@^3.0.0, strip-ansi@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" - integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8= - dependencies: - ansi-regex "^2.0.0" - -strip-ansi@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" - integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8= - dependencies: - ansi-regex "^3.0.0" - -strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.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: - ansi-regex "^4.1.0" - -strip-bom@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" - integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM= - -strip-eof@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" - integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8= - -strip-indent@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-2.0.0.tgz#5ef8db295d01e6ed6cbf7aab96998d7822527b68" - integrity sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g= - -strip-json-comments@^2.0.1, strip-json-comments@~2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" - integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= - -strip-outer@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/strip-outer/-/strip-outer-1.0.1.tgz#b2fd2abf6604b9d1e6013057195df836b8a9d631" - integrity sha512-k55yxKHwaXnpYGsOzg4Vl8+tDrWylxDEpknGjhTiZB8dFRU5rTo9CAzeycivxV3s+zlTKwrs6WxMxR95n26kwg== - dependencies: - escape-string-regexp "^1.0.2" - -strip-url-auth@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/strip-url-auth/-/strip-url-auth-1.0.1.tgz#22b0fa3a41385b33be3f331551bbb837fa0cd7ae" - integrity sha1-IrD6OkE4WzO+PzMVUbu4N/oM164= - -style-search@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/style-search/-/style-search-0.1.0.tgz#7958c793e47e32e07d2b5cafe5c0bf8e12e77902" - integrity sha1-eVjHk+R+MuB9K1yv5cC/jhLneQI= - -stylelint-config-recommended@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/stylelint-config-recommended/-/stylelint-config-recommended-2.2.0.tgz#46ab139db4a0e7151fd5f94af155512886c96d3f" - integrity sha512-bZ+d4RiNEfmoR74KZtCKmsABdBJr4iXRiCso+6LtMJPw5rd/KnxUWTxht7TbafrTJK1YRjNgnN0iVZaJfc3xJA== - -stylelint@^10.1.0: - version "10.1.0" - resolved "https://registry.yarnpkg.com/stylelint/-/stylelint-10.1.0.tgz#1bc4c4ce878107e7c396b19226d91ba28268911a" - integrity sha512-OmlUXrgzEMLQYj1JPTpyZPR9G4bl0StidfHnGJEMpdiQ0JyTq0MPg1xkHk1/xVJ2rTPESyJCDWjG8Kbpoo7Kuw== - dependencies: - autoprefixer "^9.5.1" - balanced-match "^1.0.0" - chalk "^2.4.2" - cosmiconfig "^5.2.0" - debug "^4.1.1" - execall "^2.0.0" - file-entry-cache "^5.0.1" - get-stdin "^7.0.0" - global-modules "^2.0.0" - globby "^9.2.0" - globjoin "^0.1.4" - html-tags "^3.0.0" - ignore "^5.0.6" - import-lazy "^4.0.0" - imurmurhash "^0.1.4" - known-css-properties "^0.14.0" - leven "^3.1.0" - lodash "^4.17.11" - log-symbols "^3.0.0" - mathml-tag-names "^2.1.0" - meow "^5.0.0" - micromatch "^4.0.0" - normalize-selector "^0.2.0" - pify "^4.0.1" - postcss "^7.0.14" - postcss-html "^0.36.0" - postcss-jsx "^0.36.1" - postcss-less "^3.1.4" - postcss-markdown "^0.36.0" - postcss-media-query-parser "^0.2.3" - postcss-reporter "^6.0.1" - postcss-resolve-nested-selector "^0.1.1" - postcss-safe-parser "^4.0.1" - postcss-sass "^0.3.5" - postcss-scss "^2.0.0" - postcss-selector-parser "^3.1.0" - postcss-syntax "^0.36.2" - postcss-value-parser "^3.3.1" - resolve-from "^5.0.0" - signal-exit "^3.0.2" - slash "^3.0.0" - specificity "^0.4.1" - string-width "^4.1.0" - strip-ansi "^5.2.0" - style-search "^0.1.0" - sugarss "^2.0.0" - svg-tags "^1.0.0" - table "^5.2.3" - -stylus@^0.54.5: - version "0.54.5" - resolved "https://registry.yarnpkg.com/stylus/-/stylus-0.54.5.tgz#42b9560931ca7090ce8515a798ba9e6aa3d6dc79" - integrity sha1-QrlWCTHKcJDOhRWnmLqeaqPW3Hk= - dependencies: - css-parse "1.7.x" - debug "*" - glob "7.0.x" - mkdirp "0.5.x" - sax "0.5.x" - source-map "0.1.x" - -sugarss@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/sugarss/-/sugarss-2.0.0.tgz#ddd76e0124b297d40bf3cca31c8b22ecb43bc61d" - integrity sha512-WfxjozUk0UVA4jm+U1d736AUpzSrNsQcIbyOkoE364GrtWmIrFdk5lksEupgWMD4VaT/0kVx1dobpiDumSgmJQ== - dependencies: - postcss "^7.0.2" - -supports-color@6.1.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-color@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" - integrity sha1-U10EXOa2Nj+kARcIRimZXp3zJMc= - -supports-color@^5.3.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" - -svg-tags@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/svg-tags/-/svg-tags-1.0.0.tgz#58f71cee3bd519b59d4b2a843b6c7de64ac04764" - integrity sha1-WPcc7jvVGbWdSyqEO2x95krAR2Q= - -symbol-observable@^1.1.0, symbol-observable@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.2.0.tgz#c22688aed4eab3cdc2dfeacbb561660560a00804" - integrity sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ== - -synchronous-promise@^2.0.6: - version "2.0.9" - resolved "https://registry.yarnpkg.com/synchronous-promise/-/synchronous-promise-2.0.9.tgz#b83db98e9e7ae826bf9c8261fd8ac859126c780a" - integrity sha512-LO95GIW16x69LuND1nuuwM4pjgFGupg7pZ/4lU86AmchPKrhk0o2tpMU2unXRrqo81iAFe1YJ0nAGEVwsrZAgg== - -table@^5.2.3: - version "5.4.1" - resolved "https://registry.yarnpkg.com/table/-/table-5.4.1.tgz#0691ae2ebe8259858efb63e550b6d5f9300171e8" - integrity sha512-E6CK1/pZe2N75rGZQotFOdmzWQ1AILtgYbMAbAjvms0S1l5IDB47zG3nCnFGB/w+7nB3vKofbLXCH7HPBo864w== - dependencies: - ajv "^6.9.1" - lodash "^4.17.11" - slice-ansi "^2.1.0" - string-width "^3.0.0" - -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.10" - resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.10.tgz#946b2810b9a5e0b26140cf78bea6b0b0d689eba1" - integrity sha512-g2SVs5QIxvo6OLp0GudTqEf05maawKUxXru104iaayWA09551tFCTI8f1Asb4lPfkBr91k07iL4c11XO3/b0tA== - dependencies: - chownr "^1.1.1" - fs-minipass "^1.2.5" - minipass "^2.3.5" - minizlib "^1.2.1" - mkdirp "^0.5.0" - safe-buffer "^5.1.2" - yallist "^3.0.3" - -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: - commander "^2.19.0" - source-map "~0.6.1" - source-map-support "~0.5.10" - -text-table@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" - integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= - -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.3.6" - xtend "~4.0.1" - -through@^2.3.6: - version "2.3.8" - resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" - integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= - -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" - -tmp@^0.0.33: - version "0.0.33" - resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" - integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== - dependencies: - os-tmpdir "~1.0.2" - -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@^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" - resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" - integrity sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68= - dependencies: - kind-of "^3.0.2" - -to-regex-range@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38" - integrity sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg= - dependencies: - 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" - integrity sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw== - dependencies: - define-property "^2.0.2" - extend-shallow "^3.0.2" - regex-not "^1.0.2" - safe-regex "^1.1.0" - -toposort@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/toposort/-/toposort-2.0.2.tgz#ae21768175d1559d48bef35420b2f4962f09c330" - integrity sha1-riF2gXXRVZ1IvvNUILL0li8JwzA= - -trim-newlines@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-2.0.0.tgz#b403d0b91be50c331dfc4b82eeceb22c3de16d20" - integrity sha1-tAPQuRvlDDMd/EuC7s6yLD3hbSA= - -trim-repeated@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/trim-repeated/-/trim-repeated-1.0.0.tgz#e3646a2ea4e891312bf7eace6cfb05380bc01c21" - integrity sha1-42RqLqTokTEr9+rObPsFOAvAHCE= - dependencies: - escape-string-regexp "^1.0.2" - -trim-right@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003" - integrity sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM= - -trim-trailing-lines@^1.0.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/trim-trailing-lines/-/trim-trailing-lines-1.1.2.tgz#d2f1e153161152e9f02fabc670fb40bec2ea2e3a" - integrity sha512-MUjYItdrqqj2zpcHFTkMa9WAv4JHTI6gnRQGPFLrt5L9a6tRMiDnIqYl8JBvu2d2Tc3lWJKQwlGCp0K8AvCM+Q== - -trim@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/trim/-/trim-0.0.1.tgz#5858547f6b290757ee95cccc666fb50084c460dd" - integrity sha1-WFhUf2spB1fulczMZm+1AITEYN0= - -trough@^1.0.0: - version "1.0.4" - resolved "https://registry.yarnpkg.com/trough/-/trough-1.0.4.tgz#3b52b1f13924f460c3fbfd0df69b587dbcbc762e" - integrity sha512-tdzBRDGWcI1OpPVmChbdSKhvSVurznZ8X36AYURAcl+0o2ldlCY2XPzyXNNxwJwwyIU+rIglTCG4kxtNKBQH7Q== - -tslib@^1.9.0: - version "1.10.0" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.10.0.tgz#c3c19f95973fb0a62973fb09d90d961ee43e5c8a" - integrity sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ== - -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= - -type-check@~0.3.2: - version "0.3.2" - resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" - integrity sha1-WITKtRLPHTVeP7eE8wgEsrUg23I= - dependencies: - prelude-ls "~1.1.2" - -type-fest@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.4.1.tgz#8bdf77743385d8a4f13ba95f610f5ccd68c728f8" - integrity sha512-IwzA/LSfD2vC1/YDYMv/zHP4rDF1usCwllsDpbolT3D4fUepIO7f9K70jjmUewU/LmGUKJcwcVtDCpnKk4BPMw== - -typedarray@^0.0.6: - version "0.0.6" - resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" - integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= - -ua-parser-js@^0.7.18: - version "0.7.20" - resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.20.tgz#7527178b82f6a62a0f243d1f94fd30e3e3c21098" - integrity sha512-8OaIKfzL5cpx8eCMAhhvTlft8GYF8b2eQr6JkCyVdrgjcytyOmPCXrqXFcUnhonRpLlh5yxEZVohm6mzaowUOw== - -unherit@^1.0.4: - version "1.1.2" - resolved "https://registry.yarnpkg.com/unherit/-/unherit-1.1.2.tgz#14f1f397253ee4ec95cec167762e77df83678449" - integrity sha512-W3tMnpaMG7ZY6xe/moK04U9fBhi6wEiCYHUW5Mop/wQHf12+79EQGwxYejNdhEz2mkqkBlGwm7pxmgBKMVUj0w== - dependencies: - inherits "^2.0.1" - xtend "^4.0.1" - -unicode-canonical-property-names-ecmascript@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz#2619800c4c825800efdd8343af7dd9933cbe2818" - integrity sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ== - -unicode-match-property-ecmascript@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz#8ed2a32569961bce9227d09cd3ffbb8fed5f020c" - integrity sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg== - dependencies: - unicode-canonical-property-names-ecmascript "^1.0.4" - unicode-property-aliases-ecmascript "^1.0.4" - -unicode-match-property-value-ecmascript@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.1.0.tgz#5b4b426e08d13a80365e0d657ac7a6c1ec46a277" - integrity sha512-hDTHvaBk3RmFzvSl0UVrUmC3PuW9wKVnpoUDYH0JDkSIovzw+J5viQmeYHxVSBptubnr7PbH2e0fnpDRQnQl5g== - -unicode-property-aliases-ecmascript@^1.0.4: - version "1.0.5" - resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.0.5.tgz#a9cc6cc7ce63a0a3023fc99e341b94431d405a57" - integrity sha512-L5RAqCfXqAwR3RriF8pM0lU0w4Ryf/GgzONwi6KnL1taJQa7x1TCxdJnILX59WIGOwR57IVxn7Nej0fz1Ny6fw== - -unified@^7.0.0: - version "7.1.0" - resolved "https://registry.yarnpkg.com/unified/-/unified-7.1.0.tgz#5032f1c1ee3364bd09da12e27fdd4a7553c7be13" - integrity sha512-lbk82UOIGuCEsZhPj8rNAkXSDXd6p0QLzIuSsCdxrqnqU56St4eyOB+AlXsVgVeRmetPTYydIuvFfpDIed8mqw== - dependencies: - "@types/unist" "^2.0.0" - "@types/vfile" "^3.0.0" - bail "^1.0.0" - extend "^3.0.0" - is-plain-obj "^1.1.0" - trough "^1.0.0" - vfile "^3.0.0" - x-is-string "^0.1.0" - -union-value@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847" - integrity sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg== - dependencies: - arr-union "^3.1.0" - get-value "^2.0.6" - is-extendable "^0.1.1" - set-value "^2.0.1" - -uniq@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/uniq/-/uniq-1.0.1.tgz#b31c5ae8254844a3a8281541ce2b04b865a734ff" - integrity sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8= - -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: - imurmurhash "^0.1.4" - -unist-util-find-all-after@^1.0.2: - version "1.0.4" - resolved "https://registry.yarnpkg.com/unist-util-find-all-after/-/unist-util-find-all-after-1.0.4.tgz#2eeaba818fd98492d69c44f9bee52c6a25282eef" - integrity sha512-CaxvMjTd+yF93BKLJvZnEfqdM7fgEACsIpQqz8vIj9CJnUb9VpyymFS3tg6TCtgrF7vfCJBF5jbT2Ox9CBRYRQ== - dependencies: - unist-util-is "^3.0.0" - -unist-util-is@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/unist-util-is/-/unist-util-is-3.0.0.tgz#d9e84381c2468e82629e4a5be9d7d05a2dd324cd" - integrity sha512-sVZZX3+kspVNmLWBPAB6r+7D9ZgAFPNWm66f7YNb420RlQSbn+n8rG8dGZSkrER7ZIXGQYNm5pqC3v3HopH24A== - -unist-util-remove-position@^1.0.0: - version "1.1.3" - resolved "https://registry.yarnpkg.com/unist-util-remove-position/-/unist-util-remove-position-1.1.3.tgz#d91aa8b89b30cb38bad2924da11072faa64fd972" - integrity sha512-CtszTlOjP2sBGYc2zcKA/CvNdTdEs3ozbiJ63IPBxh8iZg42SCCb8m04f8z2+V1aSk5a7BxbZKEdoDjadmBkWA== - dependencies: - unist-util-visit "^1.1.0" - -unist-util-stringify-position@^1.0.0, unist-util-stringify-position@^1.1.1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/unist-util-stringify-position/-/unist-util-stringify-position-1.1.2.tgz#3f37fcf351279dcbca7480ab5889bb8a832ee1c6" - integrity sha512-pNCVrk64LZv1kElr0N1wPiHEUoXNVFERp+mlTg/s9R5Lwg87f9bM/3sQB99w+N9D/qnM9ar3+AKDBwo/gm/iQQ== - -unist-util-visit-parents@^2.0.0: - version "2.1.2" - resolved "https://registry.yarnpkg.com/unist-util-visit-parents/-/unist-util-visit-parents-2.1.2.tgz#25e43e55312166f3348cae6743588781d112c1e9" - integrity sha512-DyN5vD4NE3aSeB+PXYNKxzGsfocxp6asDc2XXE3b0ekO2BaRUpBicbbUygfSvYfUz1IkmjFR1YF7dPklraMZ2g== - dependencies: - unist-util-is "^3.0.0" - -unist-util-visit@^1.1.0: - version "1.4.1" - resolved "https://registry.yarnpkg.com/unist-util-visit/-/unist-util-visit-1.4.1.tgz#4724aaa8486e6ee6e26d7ff3c8685960d560b1e3" - integrity sha512-AvGNk7Bb//EmJZyhtRUnNMEpId/AZ5Ph/KUpTI09WHQuDZHKovQ1oEv3mfmKpWKtoMzyMC4GLBm1Zy5k12fjIw== - dependencies: - unist-util-visit-parents "^2.0.0" - -universalify@^0.1.0: - version "0.1.2" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" - integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== - -unset-value@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" - integrity sha1-g3aHP30jNRef+x5vw6jtDfyKtVk= - dependencies: - 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" - integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI= - -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.1" - resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" - integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ== - -util-deprecate@^1.0.1, util-deprecate@~1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" - integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= - -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" - -v8-compile-cache@2.0.3: - 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.4" - resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" - integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== - dependencies: - spdx-correct "^3.0.0" - spdx-expression-parse "^3.0.0" - -validate.js@^0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/validate.js/-/validate.js-0.12.0.tgz#17f989e37c192ea2f826bbf19bf4e97e6e4be68f" - integrity sha512-/x2RJSvbqEyxKj0RPN4xaRquK+EggjeVXiDDEyrJzsJogjtiZ9ov7lj/svVb4DM5Q5braQF4cooAryQbUwOxlA== - -vfile-location@^2.0.0: - version "2.0.5" - resolved "https://registry.yarnpkg.com/vfile-location/-/vfile-location-2.0.5.tgz#c83eb02f8040228a8d2b3f10e485be3e3433e0a2" - integrity sha512-Pa1ey0OzYBkLPxPZI3d9E+S4BmvfVwNAAXrrqGbwTVXWaX2p9kM1zZ+n35UtVM06shmWKH4RPRN8KI80qE3wNQ== - -vfile-message@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/vfile-message/-/vfile-message-1.1.1.tgz#5833ae078a1dfa2d96e9647886cd32993ab313e1" - integrity sha512-1WmsopSGhWt5laNir+633LszXvZ+Z/lxveBf6yhGsqnQIhlhzooZae7zV6YVM1Sdkw68dtAW3ow0pOdPANugvA== - dependencies: - unist-util-stringify-position "^1.1.1" - -vfile@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/vfile/-/vfile-3.0.1.tgz#47331d2abe3282424f4a4bb6acd20a44c4121803" - integrity sha512-y7Y3gH9BsUSdD4KzHsuMaCzRjglXN0W2EcMf0gpvu6+SbsGhMje7xDc8AEoeXy6mIwCKMI6BkjMsRjzQbhMEjQ== - dependencies: - is-buffer "^2.0.0" - replace-ext "1.0.0" - unist-util-stringify-position "^1.0.0" - vfile-message "^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== - -void-elements@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/void-elements/-/void-elements-2.0.1.tgz#c066afb582bb1cb4128d60ea92392e94d5e9dbec" - integrity sha1-wGavtYK7HLQSjWDqkjkulNXp2+w= - -vtk.js@^9.0.1: - version "9.0.1" - resolved "https://registry.yarnpkg.com/vtk.js/-/vtk.js-9.0.1.tgz#fa769e2f14c2e4546a205417ae861cc9d715e5ff" - integrity sha512-4GG2xu9gVXoL6Q0yyKMCIs09/yJcVLinDvHY33MBeMslKf3u6dO3qVMIh0lAXYJQcVKi/mFrMfary3PPF/JmDA== - dependencies: - base64-js "1.2.1" - blueimp-md5 "2.10.0" - commander "2.11.0" - gl-matrix "3.0.0" - jszip "3.1.4" - pako "1.0.6" - seedrandom "2.4.3" - shelljs "0.7.8" - webvr-polyfill "0.10.8" - webworker-promise "0.4.2" - xmlbuilder "9.0.7" - -warning@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/warning/-/warning-3.0.0.tgz#32e5377cb572de4ab04753bdf8821c01ed605b7c" - integrity sha1-MuU3fLVy3kqwR1O9+IIcAe1gW3w= - dependencies: - loose-envify "^1.0.0" - -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: - chokidar "^2.0.2" - graceful-fs "^4.1.2" - neo-async "^2.5.0" - -webpack-cli@^3.3.4: - version "3.3.5" - resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-3.3.5.tgz#f4d1238a66a2843d9cebf189835ea22142e72767" - integrity sha512-w0j/s42c5UhchwTmV/45MLQnTVwRoaUTu9fM5LuyOd/8lFoCNCELDogFoecx5NzRUndO0yD/gF2b02XKMnmAWQ== - dependencies: - chalk "2.4.2" - cross-spawn "6.0.5" - enhanced-resolve "4.1.0" - findup-sync "3.0.0" - global-modules "2.0.0" - import-local "2.0.0" - interpret "1.2.0" - loader-utils "1.2.3" - supports-color "6.1.0" - v8-compile-cache "2.0.3" - yargs "13.2.4" - -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.33.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" - -webvr-polyfill-dpdb@^1.0.11: - version "1.0.16" - resolved "https://registry.yarnpkg.com/webvr-polyfill-dpdb/-/webvr-polyfill-dpdb-1.0.16.tgz#7f2cf88460c002a5f10ff69b2bf3a5663e0ad9dd" - integrity sha512-FCciTtPhwkYYHGL0K67G8k7ZnNVqnEx3u4NVHLJ0+Ya6f2VTZUl/GJpaEo1Id2pBP/2l0RYZ3IGZE4Pe8fRalg== - -webvr-polyfill@0.10.8: - version "0.10.8" - resolved "https://registry.yarnpkg.com/webvr-polyfill/-/webvr-polyfill-0.10.8.tgz#64f8896a4d07375347217284a66b943c93da3dc9" - integrity sha512-Oa89Hb0+NRRgQXxnMxnPgT/1UYItPJfpnwmn7RFmPtGpxcWBXpwXZ0zR0RkfoB77ahlJZ+No+5QejLfOA4CJ8Q== - dependencies: - cardboard-vr-display "^1.0.15" - -webworker-promise@0.4.2: - version "0.4.2" - resolved "https://registry.yarnpkg.com/webworker-promise/-/webworker-promise-0.4.2.tgz#aeb92684a3a5a05e95ddaeccf8482254c6cf5dc0" - integrity sha512-/se9zS6MpRhyodk+C7YcBZq5mY1apJvKys6Tb6t2NDDeRMGgRuuyYjox38PssylFyPodjPEab/S0WuA20CFu7g== - -whatwg-fetch@>=0.10.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-3.0.0.tgz#fc804e458cc460009b1a2b966bc8817d2578aefb" - integrity sha512-9GSJUgz1D4MfyKU7KRqwOjXCXTqWdFNvEr7eUBYchQiVc744mqK/MzXPNR2WsPkmkOa4ywfg8C2n8h+13Bey1Q== - -which-module@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" - integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= - -which@^1.2.10, which@^1.2.14, which@^1.2.9, which@^1.3.1: - 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.3" - resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457" - integrity sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA== - dependencies: - string-width "^1.0.2 || 2" - -wordwrap@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" - integrity sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus= - -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" - -worker-loader@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/worker-loader/-/worker-loader-2.0.0.tgz#45fda3ef76aca815771a89107399ee4119b430ac" - integrity sha512-tnvNp4K3KQOpfRnD20m8xltE3eWh89Ye+5oj7wXEEHKac1P4oZ6p9oTj8/8ExqoSBnk9nu5Pr4nKfQ1hn2APJw== - dependencies: - loader-utils "^1.0.0" - schema-utils "^0.4.0" - -wrap-ansi@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-3.0.1.tgz#288a04d87eda5c286e060dfe8f135ce8d007f8ba" - integrity sha1-KIoE2H7aXChuBg3+jxNc6NAH+Lo= - dependencies: - string-width "^2.1.1" - strip-ansi "^4.0.0" - -wrap-ansi@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-5.1.0.tgz#1fd1f67235d5b6d0fee781056001bfb694c03b09" - integrity sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q== - dependencies: - ansi-styles "^3.2.0" - string-width "^3.0.0" - strip-ansi "^5.0.0" - -wrappy@1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" - integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= - -write@1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/write/-/write-1.0.3.tgz#0800e14523b923a387e415123c865616aae0f5c3" - integrity sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig== - dependencies: - mkdirp "^0.5.1" - -x-is-string@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/x-is-string/-/x-is-string-0.1.0.tgz#474b50865af3a49a9c4657f05acd145458f77d82" - integrity sha1-R0tQhlrzpJqcRlfwWs0UVFj3fYI= - -xmlbuilder@9.0.7: - version "9.0.7" - resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-9.0.7.tgz#132ee63d2ec5565c557e20f4c22df9aca686b10d" - integrity sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0= - -xtend@^4.0.0, xtend@^4.0.1, xtend@~4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af" - integrity sha1-pcbVMr5lbiPbgg77lDofBJmNY68= - -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@^3.0.0, yallist@^3.0.2, yallist@^3.0.3: - 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.0.0: - 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@^13.1.0: - version "13.1.1" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.1.tgz#d26058532aa06d365fe091f6a1fc06b2f7e5eca0" - integrity sha512-oVAVsHz6uFrg3XQheFII8ESO2ssAf9luWuAd6Wexsu4F3OtIW0o8IribPXYrD4WC24LWtPrJlGy87y5udK+dxQ== - dependencies: - camelcase "^5.0.0" - decamelize "^1.2.0" - -yargs@13.2.4: - version "13.2.4" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.2.4.tgz#0b562b794016eb9651b98bd37acf364aa5d6dc83" - integrity sha512-HG/DWAJa1PAnHT9JAhNa8AbAv3FPaiLzioSjCcmuXXhP8MlpHO5vwls4g4j6n30Z74GVQj8Xa62dWVx1QCGklg== - dependencies: - cliui "^5.0.0" - find-up "^3.0.0" - get-caller-file "^2.0.1" - os-locale "^3.1.0" - require-directory "^2.1.1" - require-main-filename "^2.0.0" - set-blocking "^2.0.0" - string-width "^3.0.0" - which-module "^2.0.0" - y18n "^4.0.0" - yargs-parser "^13.1.0" - -yup@^0.27.0: - version "0.27.0" - resolved "https://registry.yarnpkg.com/yup/-/yup-0.27.0.tgz#f8cb198c8e7dd2124beddc2457571329096b06e7" - integrity sha512-v1yFnE4+u9za42gG/b/081E7uNW9mUj3qtkmelLbW5YPROZzSH/KUUyJu9Wt8vxFJcT9otL/eZopS0YK1L5yPQ== - dependencies: - "@babel/runtime" "^7.0.0" - fn-name "~2.0.1" - lodash "^4.17.11" - property-expr "^1.5.0" - synchronous-promise "^2.0.6" - toposort "^2.0.2" diff --git a/extensions/vtk/.webpack/webpack.dev.js b/extensions/vtk/.webpack/webpack.dev.js new file mode 100644 index 00000000000..180994fd663 --- /dev/null +++ b/extensions/vtk/.webpack/webpack.dev.js @@ -0,0 +1,16 @@ +const path = require('path'); +const merge = require('webpack-merge'); +const webpackCommon = require('./../../../.webpack/webpack.common.js'); + +// +const SRC_DIR = path.join(__dirname, '../src'); +const DIST_DIR = path.join(__dirname, '../dist'); + +module.exports = (env, argv) => { + const commonConfig = webpackCommon(env, argv, { SRC_DIR, DIST_DIR }); + + return merge(commonConfig, { + // https://webpack.js.org/configuration/mode/#mode-development + mode: 'development', + }); +}; diff --git a/extensions/vtk/.webpack/webpack.prod.js b/extensions/vtk/.webpack/webpack.prod.js new file mode 100644 index 00000000000..6ad317ec154 --- /dev/null +++ b/extensions/vtk/.webpack/webpack.prod.js @@ -0,0 +1,39 @@ +const merge = require('webpack-merge'); +const path = require('path'); +const webpackCommon = require('./../../../.webpack/webpack.common.js'); +const pkg = require('./../package.json'); + +const ROOT_DIR = path.join(__dirname, './..'); +const SRC_DIR = path.join(__dirname, '../src'); +const DIST_DIR = path.join(__dirname, '../dist'); + +module.exports = (env, argv) => { + const commonConfig = webpackCommon(env, argv, { SRC_DIR, DIST_DIR }); + + return merge(commonConfig, { + // https://webpack.js.org/configuration/mode/#mode-production + mode: 'production', + devtool: 'source-map', + stats: { + colors: true, + hash: true, + timings: true, + assets: true, + chunks: false, + chunkModules: false, + modules: false, + children: false, + warnings: true, + }, + optimization: { + minimize: true, + sideEffects: true, + }, + output: { + path: ROOT_DIR, + library: 'ohifExtensionVtk', + libraryTarget: 'umd', + filename: pkg.main, + }, + }); +}; diff --git a/extensions/vtk/CHANGELOG.md b/extensions/vtk/CHANGELOG.md new file mode 100644 index 00000000000..18ae47d86b6 --- /dev/null +++ b/extensions/vtk/CHANGELOG.md @@ -0,0 +1,61 @@ +# Change Log + +All notable changes to this project will be documented in this file. See +[Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +## [0.1.4-alpha.7](https://github.com/OHIF/Viewers/compare/@ohif/extension-vtk@0.1.4-alpha.6...@ohif/extension-vtk@0.1.4-alpha.7) (2019-08-08) + +**Note:** Version bump only for package @ohif/extension-vtk + +# Change Log + +All notable changes to this project will be documented in this file. See +[Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +## [0.1.4-alpha.6](https://github.com/OHIF/Viewers/compare/@ohif/extension-vtk@0.1.4-alpha.5...@ohif/extension-vtk@0.1.4-alpha.6) (2019-08-08) + +**Note:** Version bump only for package @ohif/extension-vtk + +# Change Log + +All notable changes to this project will be documented in this file. See +[Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +## [0.1.4-alpha.5](https://github.com/OHIF/Viewers/compare/@ohif/extension-vtk@0.1.4-alpha.4...@ohif/extension-vtk@0.1.4-alpha.5) (2019-08-08) + +**Note:** Version bump only for package @ohif/extension-vtk + +# Change Log + +All notable changes to this project will be documented in this file. See +[Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +## [0.1.4-alpha.4](https://github.com/OHIF/Viewers/compare/@ohif/extension-vtk@0.1.4-alpha.3...@ohif/extension-vtk@0.1.4-alpha.4) (2019-08-08) + +**Note:** Version bump only for package @ohif/extension-vtk + +# Change Log + +All notable changes to this project will be documented in this file. See +[Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +## [0.1.4-alpha.3](https://github.com/OHIF/Viewers/compare/@ohif/extension-vtk@0.1.4-alpha.2...@ohif/extension-vtk@0.1.4-alpha.3) (2019-08-08) + +**Note:** Version bump only for package @ohif/extension-vtk + +# Change Log + +All notable changes to this project will be documented in this file. See +[Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +## [0.1.4-alpha.2](https://github.com/OHIF/Viewers/compare/@ohif/extension-vtk@0.1.4-alpha.1...@ohif/extension-vtk@0.1.4-alpha.2) (2019-08-07) + +**Note:** Version bump only for package @ohif/extension-vtk + +## [0.1.4-alpha.1](https://github.com/OHIF/Viewers/compare/@ohif/extension-vtk@0.1.4-alpha.0...@ohif/extension-vtk@0.1.4-alpha.1) (2019-08-07) + +**Note:** Version bump only for package @ohif/extension-vtk + +## 0.1.4-alpha.0 (2019-08-05) + +**Note:** Version bump only for package @ohif/extension-vtk diff --git a/extensions/ohif-i18n/LICENSE b/extensions/vtk/LICENSE similarity index 100% rename from extensions/ohif-i18n/LICENSE rename to extensions/vtk/LICENSE diff --git a/extensions/ohif-vtk-extension/README.md b/extensions/vtk/README.md similarity index 100% rename from extensions/ohif-vtk-extension/README.md rename to extensions/vtk/README.md diff --git a/extensions/vtk/package.json b/extensions/vtk/package.json new file mode 100644 index 00000000000..24343da8335 --- /dev/null +++ b/extensions/vtk/package.json @@ -0,0 +1,67 @@ +{ + "name": "@ohif/extension-vtk", + "version": "0.1.4-alpha.7", + "description": "OHIF extension for VTK.js", + "author": "OHIF", + "license": "MIT", + "repository": "OHIF/Viewers", + "main": "dist/index.umd.js", + "module": "src/index.js", + "sideEffects": true, + "publishConfig": { + "access": "public" + }, + "files": [ + "dist", + "README.md" + ], + "engines": { + "node": ">=8", + "npm": ">=5" + }, + "scripts": { + "dev": "webpack --config .webpack/webpack.dev.js --watch --debug --output-pathinfo", + "dev:dicom-vtk": "yarn run dev", + "build": "webpack --config .webpack/webpack.prod.js", + "build:package": "yarn run build", + "prepublishOnly": "yarn run build", + "start": "yarn run dev" + }, + "peerDependencies": { + "@ohif/core": "^0.11.1-alpha.0", + "@ohif/i18n": "^0.2.3", + "@ohif/ui": "^0.2.18-alpha.0", + "cornerstone-core": "^2.2.8", + "cornerstone-wado-image-loader": "^3.0.0", + "dcmjs": "^0.4.7", + "dicom-parser": "^1.8.3", + "i18next": "^17.0.3", + "i18next-browser-languagedetector": "^3.0.1", + "prop-types": "^15.7.2", + "react": "^16.8.6", + "react-dom": "^16.8.6", + "react-i18next": "^10.11.0", + "react-redux": "^7.1.0", + "react-resize-detector": "^4.2.0", + "redux": "^4.0.1" + }, + "dependencies": { + "@babel/runtime": "^7.5.5", + "react-vtkjs-viewport": "0.0.9", + "vtk.js": "^8.11.0" + }, + "devDependencies": { + "@ohif/core": "^0.11.1-alpha.7", + "@ohif/ui": "^0.2.18-alpha.7", + "cornerstone-tools": "^3.13.0", + "cornerstone-wado-image-loader": "^3.0.0", + "dcmjs": "^0.4.7", + "dicom-parser": "^1.8.3", + "gh-pages": "^2.0.1", + "i18next": "^17.0.3", + "i18next-browser-languagedetector": "^3.0.1", + "react-i18next": "^10.11.0", + "react-redux": "^7.1.0", + "redux": "^4.0.1" + } +} diff --git a/extensions/ohif-vtk-extension/src/ConnectedVTKViewport.js b/extensions/vtk/src/ConnectedVTKViewport.js similarity index 89% rename from extensions/ohif-vtk-extension/src/ConnectedVTKViewport.js rename to extensions/vtk/src/ConnectedVTKViewport.js index 2eb69559432..ae1dc98072a 100644 --- a/extensions/ohif-vtk-extension/src/ConnectedVTKViewport.js +++ b/extensions/vtk/src/ConnectedVTKViewport.js @@ -1,6 +1,6 @@ -import OHIF from 'ohif-core'; -import { View2D } from 'react-vtkjs-viewport'; -import { connect } from 'react-redux'; +import OHIF from "@ohif/core"; +import { View2D } from "react-vtkjs-viewport"; +import { connect } from "react-redux"; const { setViewportActive, setViewportSpecificData } = OHIF.redux.actions; @@ -24,7 +24,7 @@ const mapStateToProps = (state, ownProps) => { // Hopefully this doesn't break anything under the hood for this one // activeTool: activeButton && activeButton.command, ...dataFromStore, - enableStackPrefetch: isActive, + enableStackPrefetch: isActive }; }; @@ -38,7 +38,7 @@ const mapDispatchToProps = (dispatch, ownProps) => { setViewportSpecificData: data => { dispatch(setViewportSpecificData(viewportIndex, data)); - }, + } }; }; @@ -63,10 +63,10 @@ const mergeProps = (propsFromState, propsFromDispatch, ownProps) => { // Store the API details for later //setViewportSpecificData({ vtkApi: api }); - if (afterCreation && typeof afterCreation === 'function') { + if (afterCreation && typeof afterCreation === "function") { afterCreation(api); } - }, + } }; return props; }; diff --git a/extensions/ohif-vtk-extension/src/LoadingIndicator.css b/extensions/vtk/src/LoadingIndicator.css similarity index 100% rename from extensions/ohif-vtk-extension/src/LoadingIndicator.css rename to extensions/vtk/src/LoadingIndicator.css diff --git a/extensions/ohif-vtk-extension/src/LoadingIndicator.js b/extensions/vtk/src/LoadingIndicator.js similarity index 100% rename from extensions/ohif-vtk-extension/src/LoadingIndicator.js rename to extensions/vtk/src/LoadingIndicator.js diff --git a/extensions/ohif-vtk-extension/src/OHIFVTKViewport.js b/extensions/vtk/src/OHIFVTKViewport.js similarity index 82% rename from extensions/ohif-vtk-extension/src/OHIFVTKViewport.js rename to extensions/vtk/src/OHIFVTKViewport.js index abee33420f0..983230facae 100644 --- a/extensions/ohif-vtk-extension/src/OHIFVTKViewport.js +++ b/extensions/vtk/src/OHIFVTKViewport.js @@ -1,16 +1,16 @@ -import React, { Component } from 'react'; -import { getImageData, loadImageData } from 'react-vtkjs-viewport'; - -import ConnectedVTKViewport from './ConnectedVTKViewport'; -import LoadingIndicator from './LoadingIndicator.js'; -import OHIF from 'ohif-core'; -import PropTypes from 'prop-types'; -import cornerstone from 'cornerstone-core'; -import handleSegmentationStorage from './handleSegmentationStorage.js'; -import vtkDataArray from 'vtk.js/Sources/Common/Core/DataArray'; -import vtkImageData from 'vtk.js/Sources/Common/DataModel/ImageData'; -import vtkVolume from 'vtk.js/Sources/Rendering/Core/Volume'; -import vtkVolumeMapper from 'vtk.js/Sources/Rendering/Core/VolumeMapper'; +import React, { Component } from "react"; +import { getImageData, loadImageData } from "react-vtkjs-viewport"; + +import ConnectedVTKViewport from "./ConnectedVTKViewport"; +import LoadingIndicator from "./LoadingIndicator.js"; +import OHIF from "@ohif/core"; +import PropTypes from "prop-types"; +import cornerstone from "cornerstone-core"; +import handleSegmentationStorage from "./handleSegmentationStorage.js"; +import vtkDataArray from "vtk.js/Sources/Common/Core/DataArray"; +import vtkImageData from "vtk.js/Sources/Common/DataModel/ImageData"; +import vtkVolume from "vtk.js/Sources/Rendering/Core/Volume"; +import vtkVolumeMapper from "vtk.js/Sources/Rendering/Core/VolumeMapper"; const { StackManager } = OHIF.utils; @@ -24,7 +24,7 @@ cornerstone.metaData.addProvider( StackManager.setMetadataProvider(metadataProvider); const SOP_CLASSES = { - SEGMENTATION_STORAGE: '1.2.840.10008.5.1.4.1.1.66.4', + SEGMENTATION_STORAGE: "1.2.840.10008.5.1.4.1.1.66.4" }; const specialCaseHandlers = {}; @@ -42,7 +42,7 @@ const volumeCache = {}; */ function createLabelMapImageData(backgroundImageData) { const labelMapData = vtkImageData.newInstance( - backgroundImageData.get('spacing', 'origin', 'direction') + backgroundImageData.get("spacing", "origin", "direction") ); labelMapData.setDimensions(backgroundImageData.getDimensions()); labelMapData.computeTransforms(); @@ -50,7 +50,7 @@ function createLabelMapImageData(backgroundImageData) { const values = new Uint8Array(backgroundImageData.getNumberOfPoints()); const dataArray = vtkDataArray.newInstance({ numberOfComponents: 1, // labelmap with single component - values, + values }); labelMapData.getPointData().setScalars(dataArray); @@ -61,24 +61,24 @@ class OHIFVTKViewport extends Component { state = { volumes: null, paintFilterLabelMapImageData: null, - paintFilterBackgroundImageData: null, + paintFilterBackgroundImageData: null }; static propTypes = { studies: PropTypes.object, displaySet: PropTypes.object, viewportIndex: PropTypes.number, - children: PropTypes.node, + children: PropTypes.node }; - static id = 'OHIFVTKViewport'; + static id = "OHIFVTKViewport"; static init() { - console.log('OHIFVTKViewport init()'); + console.log("OHIFVTKViewport init()"); } static destroy() { - console.log('OHIFVTKViewport destroy()'); + console.log("OHIFVTKViewport destroy()"); StackManager.clearStacks(); } @@ -109,7 +109,7 @@ class OHIFVTKViewport extends Component { } else if (sopInstanceUid) { const index = stack.imageIds.findIndex(imageId => { const sopCommonModule = cornerstone.metaData.get( - 'sopCommonModule', + "sopCommonModule", imageId ); if (!sopCommonModule) { @@ -151,7 +151,7 @@ class OHIFVTKViewport extends Component { switch (sopClassUid) { case SOP_CLASSES.SEGMENTATION_STORAGE: - throw new Error('Not yet implemented'); + throw new Error("Not yet implemented"); const data = handleSegmentationStorage( stack.imageIds, @@ -164,7 +164,7 @@ class OHIFVTKViewport extends Component { return loadImageData(imageDataObject).then(() => { return { data: imageDataObject.vtkImageData, - labelmap: labelmapDataObject, + labelmap: labelmapDataObject }; }); default: @@ -172,7 +172,7 @@ class OHIFVTKViewport extends Component { return loadImageData(imageDataObject).then(() => { return { - data: imageDataObject.vtkImageData, + data: imageDataObject.vtkImageData }; }); } @@ -213,12 +213,12 @@ class OHIFVTKViewport extends Component { displaySetInstanceUid, sopClassUids, sopInstanceUid, - frameIndex, + frameIndex } = displaySet; if (sopClassUids.length > 1) { console.warn( - 'More than one SOPClassUid in the same series is not yet supported.' + "More than one SOPClassUid in the same series is not yet supported." ); } @@ -242,7 +242,7 @@ class OHIFVTKViewport extends Component { this.setState({ volumes: [volumeActor], paintFilterBackgroundImageData: data, - paintFilterLabelMapImageData: labelmap, + paintFilterLabelMapImageData: labelmap }); } @@ -272,12 +272,12 @@ class OHIFVTKViewport extends Component { childrenWithProps = this.props.children.map((child, index) => { return React.cloneElement(child, { viewportIndex: this.props.viewportIndex, - key: index, + key: index }); }); } - const style = { width: '100%', height: '100%', position: 'relative' }; + const style = { width: "100%", height: "100%", position: "relative" }; return ( <> diff --git a/extensions/ohif-vtk-extension/src/commandsModule.js b/extensions/vtk/src/commandsModule.js similarity index 100% rename from extensions/ohif-vtk-extension/src/commandsModule.js rename to extensions/vtk/src/commandsModule.js diff --git a/extensions/ohif-vtk-extension/src/handleSegmentationStorage.js b/extensions/vtk/src/handleSegmentationStorage.js similarity index 90% rename from extensions/ohif-vtk-extension/src/handleSegmentationStorage.js rename to extensions/vtk/src/handleSegmentationStorage.js index 1988456cdad..c8aa5983c30 100644 --- a/extensions/ohif-vtk-extension/src/handleSegmentationStorage.js +++ b/extensions/vtk/src/handleSegmentationStorage.js @@ -1,7 +1,7 @@ -import * as dcmjs from 'dcmjs'; +import * as dcmjs from "dcmjs"; -import OHIF from 'ohif-core'; -import { api } from 'dicomweb-client'; +import OHIF from "@ohif/core"; +import { api } from "dicomweb-client"; const { StackManager } = OHIF.utils; @@ -57,14 +57,14 @@ function retrieveDicomData( ) { const config = { url: wadoRoot, - headers: DICOMWeb.getAuthorizationHeader(), + headers: DICOMWeb.getAuthorizationHeader() }; const dicomWeb = new api.DICOMwebClient(config); const options = { studyInstanceUID, seriesInstanceUID, - sopInstanceUID, + sopInstanceUID }; return dicomWeb.retrieveInstance(options); @@ -117,7 +117,7 @@ async function handleSegmentationStorage( if (displaySets.length > 1) { console.warn( - 'More than one display set with the same seriesInstanceUid. This is not supported yet...' + "More than one display set with the same seriesInstanceUid. This is not supported yet..." ); } @@ -125,7 +125,7 @@ async function handleSegmentationStorage( const imageIds = referenceDisplaySet.images.map(image => image.getImageId()); if (!results) { - throw new Error('Fractional segmentations are not supported'); + throw new Error("Fractional segmentations are not supported"); } const cachedStack = StackManager.findOrCreateStack( @@ -137,13 +137,13 @@ async function handleSegmentationStorage( return { referenceDataObject, - labelmapDataObject, + labelmapDataObject }; return { studyInstanceUid, displaySetInstanceUid, - stack, + stack }; } diff --git a/extensions/ohif-vtk-extension/src/index.js b/extensions/vtk/src/index.js similarity index 75% rename from extensions/ohif-vtk-extension/src/index.js rename to extensions/vtk/src/index.js index 726b13c7c3b..ec2674f7201 100644 --- a/extensions/ohif-vtk-extension/src/index.js +++ b/extensions/vtk/src/index.js @@ -1,10 +1,10 @@ import OHIFVTKViewport from './OHIFVTKViewport.js'; import commandsModule from './commandsModule.js'; -// This feels weird -import loadLocales from './loadLocales'; import toolbarModule from './toolbarModule.js'; +// This feels weird +// import loadLocales from './loadLocales'; -export default { +const vtkExtension = { /** * Only required property. Should be a unique value across all extensions. */ @@ -21,4 +21,8 @@ export default { }, }; -loadLocales(); +export default vtkExtension; + +export { vtkExtension }; + +// loadLocales(); diff --git a/extensions/ohif-vtk-extension/src/loadLocales.js b/extensions/vtk/src/loadLocales.js similarity index 100% rename from extensions/ohif-vtk-extension/src/loadLocales.js rename to extensions/vtk/src/loadLocales.js diff --git a/extensions/ohif-vtk-extension/src/locales/en/Buttons.json b/extensions/vtk/src/locales/en/Buttons.json similarity index 100% rename from extensions/ohif-vtk-extension/src/locales/en/Buttons.json rename to extensions/vtk/src/locales/en/Buttons.json diff --git a/extensions/ohif-vtk-extension/src/locales/en/index.js b/extensions/vtk/src/locales/en/index.js similarity index 100% rename from extensions/ohif-vtk-extension/src/locales/en/index.js rename to extensions/vtk/src/locales/en/index.js diff --git a/extensions/ohif-vtk-extension/src/locales/es/Buttons.json b/extensions/vtk/src/locales/es/Buttons.json similarity index 100% rename from extensions/ohif-vtk-extension/src/locales/es/Buttons.json rename to extensions/vtk/src/locales/es/Buttons.json diff --git a/extensions/ohif-vtk-extension/src/locales/es/index.js b/extensions/vtk/src/locales/es/index.js similarity index 100% rename from extensions/ohif-vtk-extension/src/locales/es/index.js rename to extensions/vtk/src/locales/es/index.js diff --git a/extensions/ohif-vtk-extension/src/locales/index.js b/extensions/vtk/src/locales/index.js similarity index 100% rename from extensions/ohif-vtk-extension/src/locales/index.js rename to extensions/vtk/src/locales/index.js diff --git a/extensions/ohif-vtk-extension/src/toolbarModule.js b/extensions/vtk/src/toolbarModule.js similarity index 100% rename from extensions/ohif-vtk-extension/src/toolbarModule.js rename to extensions/vtk/src/toolbarModule.js diff --git a/extensions/ohif-vtk-extension/src/utils/setLayoutAndViewportData.js b/extensions/vtk/src/utils/setLayoutAndViewportData.js similarity index 90% rename from extensions/ohif-vtk-extension/src/utils/setLayoutAndViewportData.js rename to extensions/vtk/src/utils/setLayoutAndViewportData.js index c28b1771783..c8223cd3b20 100644 --- a/extensions/ohif-vtk-extension/src/utils/setLayoutAndViewportData.js +++ b/extensions/vtk/src/utils/setLayoutAndViewportData.js @@ -1,4 +1,4 @@ -import { redux } from 'ohif-core'; +import { redux } from "@ohif/core"; const { setViewportLayoutAndData } = redux.actions; diff --git a/extensions/ohif-vtk-extension/src/utils/setMPRLayout.js b/extensions/vtk/src/utils/setMPRLayout.js similarity index 100% rename from extensions/ohif-vtk-extension/src/utils/setMPRLayout.js rename to extensions/vtk/src/utils/setMPRLayout.js diff --git a/extensions/ohif-vtk-extension/src/utils/setSingleLayoutData.js b/extensions/vtk/src/utils/setSingleLayoutData.js similarity index 100% rename from extensions/ohif-vtk-extension/src/utils/setSingleLayoutData.js rename to extensions/vtk/src/utils/setSingleLayoutData.js diff --git a/extensions/ohif-vtk-extension/src/utils/setViewportToVTK.js b/extensions/vtk/src/utils/setViewportToVTK.js similarity index 100% rename from extensions/ohif-vtk-extension/src/utils/setViewportToVTK.js rename to extensions/vtk/src/utils/setViewportToVTK.js diff --git a/generateStaticSite.sh b/generateStaticSite.sh deleted file mode 100755 index da5af65b397..00000000000 --- a/generateStaticSite.sh +++ /dev/null @@ -1,57 +0,0 @@ -#!/bin/bash - -# Set directory to location of this script -# https://stackoverflow.com/a/3355423/1867984 -cd "$(dirname "$0")" - -yarn -v -node -v -echo 'Installing Gitbook CLI' -yarn global add gitbook-cli - -echo 'Running Gitbook installation' - -# Generate all version's GitBook output -# For each directory in /docs ... -cd ./docs/ -for D in *; do - if [ -d "${D}" ]; then - - echo "Generating output for: ${D}" - cd "${D}" - - # Clear previous output, generate new - rm -rf _book - gitbook install - gitbook build - - cd .. - - fi -done - -# Move CNAME File into `latest` -cp CNAME ./latest/_book/CNAME - -# Create a history folder in our latest version's output -mkdir ./latest/_book/history - -# Move each version's files to latest's history folder -for D in *; do - if [ -d "${D}" ]; then - if [ "${D}" == v* ] ; then - - echo "Moving ${D} to the latest version's history folder" - - mkdir "./latest/_book/history/${D}" - cp -v -r "./${D}/_book"/* "./latest/_book/history/${D}" - - fi - fi -done -cd .. - -# Build and copy the StandaloneViewer into the static directory -mkdir ./docs/latest/_book/demo/ -yarn install -yarn build:web:ci diff --git a/jest.config.base.js b/jest.config.base.js new file mode 100644 index 00000000000..4c3ea67af3a --- /dev/null +++ b/jest.config.base.js @@ -0,0 +1,39 @@ +const path = require("path"); + +module.exports = { + verbose: true, + roots: ["/src"], + transform: { + "^.+\\.js$": "babel-jest" + }, + testMatch: ["/src/**/*.test.js"], + testPathIgnorePatterns: ["/node_modules/"], + moduleFileExtensions: ["js", "jsx"], + moduleNameMapper: { + "\\.(jpg|jpeg|png|gif|eot|otf|webp|svg|ttf|woff|woff2|mp4|webm|wav|mp3|m4a|aac|oga)$": + "/src/__mocks__/fileMock.js", + "\\.(css|less)$": "identity-obj-proxy" + }, + // Setup + // setupFiles: ["jest-canvas-mock/lib/index.js"], + // Coverage + reporters: [ + "default", + // Docs: https://www.npmjs.com/package/jest-junit + [ + "jest-junit", + { + addFileAttribute: true // CircleCI Only + } + ] + ], + collectCoverage: false, + collectCoverageFrom: [ + "/src/**/*.{js,jsx}", + // Not + "!/src/**/*.test.js", + "!**/node_modules/**", + "!**/__tests__/**", + "!/dist/**" + ] +}; diff --git a/jest.config.js b/jest.config.js index d2505ec8dd5..549f14da80d 100644 --- a/jest.config.js +++ b/jest.config.js @@ -1,21 +1,16 @@ +// Initiate all tests from root, but allow tests from each package root. +// Share as much config as possible to reduce duplication. +// +// Borrowing from here: +// https://github.com/facebook/jest/issues/3112#issuecomment-398581705 +const base = require("./jest.config.base.js"); + module.exports = { - verbose: true, - testMatch: ['/src/**/*.test.js'], - // - collectCoverage: false, - collectCoverageFrom: [ - '/src/**/*.{js,jsx}', - '!/src/**/*.test.js', - '!**/node_modules/**', - '!**/__tests__/**', + ...base, + // https://jestjs.io/docs/en/configuration#projects-array-string-projectconfig + projects: [ + // "/extensions/*/jest.config.js", + "/platform/*/jest.config.js" ], - reporters: ['default', 'jest-junit'], - // - moduleNameMapper: { - '\\.(jpg|jpeg|png|gif|eot|otf|webp|svg|ttf|woff|woff2|mp4|webm|wav|mp3|m4a|aac|oga)$': - '/src/__mocks__/fileMock.js', - '\\.(css|less)$': 'identity-obj-proxy', - }, - setupFiles: ['/node_modules/jest-canvas-mock/lib/index.js'], - setupTestFrameworkScriptFile: '/src/__tests__/globalSetup.js', -} + coverageDirectory: "/coverage/" +}; diff --git a/lerna.json b/lerna.json new file mode 100644 index 00000000000..43af90d93c3 --- /dev/null +++ b/lerna.json @@ -0,0 +1,18 @@ +{ + "version": "independent", + "packages": ["extensions/*", "platform/*"], + "npmClient": "yarn", + "useWorkspaces": true, + "command": { + "publish": { + "ignoreChanges": ["*.md", "*.yml", "*.spec.js", "*.test.js"], + "message": "chore(release): publish" + }, + "version": { + "conventionalCommits": true, + "createRelease": "github", + "yes": true, + "message": "chore(release): publish [skip ci]" + } + } +} diff --git a/maintainer-notes.md b/maintainer-notes.md new file mode 100644 index 00000000000..a9461fdb797 --- /dev/null +++ b/maintainer-notes.md @@ -0,0 +1,72 @@ +## Notes + +### Helpful Commands + +These commands are less frequently used, but good to remember: + +```bash +# Add shared dev dependency for workspace +yarn add --dev -W package-name +``` + +## TODO + +- Patch status for PRs (we care about threshold only) + - Allows us to use multiproject test runner +- Flags per project for merged coverage; easier to break down coverage per + project +- Remove all-contributors bot; install CLI per project and add per project + commands +- Verify all have "dev:package-name" command + - Should we include `package.json` and `src` as output? (build from ESM) + - Should we remove `dev:package-name` commands and suggest navigating to + package root? +- Fix broken peer dependencies? +- Lingering core-js resolution issues when building for Viewer PWA (from project + directory) + +## ORBS + +- Cypress: https://circleci.com/orbs/registry/orb/cypress-io/cypress +- Slack: https://circleci.com/orbs/registry/orb/circleci/slack +- GCP: https://circleci.com/orbs/registry/orb/circleci/gcp-cli +- Browser Tools: https://circleci.com/orbs/registry/orb/circleci/browser-tools +- Multi-Repo: https://circleci.com/orbs/registry/orb/dnephin/multirepo +- PR Comment: https://circleci.com/orbs/registry/orb/benjlevesque/pr-comment + +NOTES: + +# bumps pre-release version of all packages if any changes + +- `npx lerna version prerelease` + +# Releases based on package.json differences from NPM + +- `npx lerna publish from-package --dist-tag canary` + +Use Env options to set config: + +- https://webpack.js.org/api/cli/#environment-options + +## Bundling + +- Extensions must bundle all assets into a single file for UMD +- The umd build for Viewer must bundle all of it's assets, and baked-in + extension assets + - The "skinny" umd build for viewer only needs to bundle it's own assets +- The PWA build for Viewer can code-split to it's heart's content +- Don't load/bundle a font at any layer other than Application/Viewer +- It gets to decide if it should be bundled/cached/external + +* For ESM/Module builds +* Not dissimilar from VTK.js consumption +* jest --watchAll for individual packages? + +WebPack 5: https://github.com/webpack/webpack/issues/6386#issue-291757876 + +Flattened ESM: Less efficient, not as great at code splitting? From source? More +loaders, added complexity, slower builds, better output + +Notes: + +- Remove preBuild step in viewer after @3 wado image loader diff --git a/netlify.toml b/netlify.toml index 39a2cf2c83f..20302413bed 100644 --- a/netlify.toml +++ b/netlify.toml @@ -1,25 +1,75 @@ +# Netlify Config +# +# TOML Reference: # https://www.netlify.com/docs/netlify-toml-reference/ +# +# We use Netlify for deploy previews and deploy previews only. +# https://viewer.ohif.org is created using a different process that is +# managed by CircleCI and deployed to our Google Hosting +# +# Settings in the [build] context are global and are applied to all contexts +# unless otherwise overridden by more specific contexts. [build] - # Directory (relative to root of your repo) that contains the deploy-ready - # HTML files and assets generated by the build. If a base directory has - # been specified, include it in the publish directory path. - publish = "docs/latest/_book/" + # Directory to change to before starting a build. + # This is where we will look for package.json/.nvmrc/etc. + base = "" + publish = "project/build-output/" -# COMMENT: NODE_VERSION in root `.nvmrc` takes priority -# COMMENT: Why we specify YARN_FLAGS: https://www.netlify.com/docs/build-gotchas/#yarn + +# NODE_VERSION in root `.nvmrc` takes priority +# YARN_FLAGS: https://www.netlify.com/docs/build-gotchas/#yarn [build.environment] - NODE_VERSION = "10.15.3" - YARN_VERSION = "1.15.2" + NODE_END = "production" + NODE_VERSION = "10.16.0" + YARN_VERSION = "1.17.3" + RUBY_VERSION = "2.6.2" YARN_FLAGS = "--no-ignore-optional --pure-lockfile" -# COMMENT: This a rule for Single Page Applications -[[redirects]] - from = "/demo/*" - to = "/demo/index.html" - status = 200 +# Production context: all deploys from the Production branch set in your site's +# deploy contexts will inherit these settings. +# [context.production] +# publish = "project/output/" +# command = "make publish" +# environment = { ACCESS_TOKEN = "super secret", NODE_VERSION = "8.0.1" } +# Deploy Preview context: all deploys generated from a pull/merge request will +# inherit these settings. +[context.deploy-preview] + base = "" + publish = ".netlify/www/" + command = "yarn config set workspaces-experimental true && chmod +x .netlify/build-deploy-preview.sh && .netlify/build-deploy-preview.sh" + +# Redirects and headers are GLOBAL for all builds – they do not get scoped to +# contexts no matter where you define them in the file. +# For context-specific rules, use _headers or _redirects files, which are +# PER-DEPLOY. +# The following redirect is intended for use with most SPAs that handle +# routing internally. +# By default, redirects won't be applied if there's a file with the same +# path as the one defined in the `from` property. Setting `force` to `true` +# will make the redirect rule take precedence over any existing files. [[redirects]] from = "/*" to = "/index.html" status = 200 + +[[redirects]] + from = "/pwa/*" + to = "/pwa/index.html" + status = 200 + +[[headers]] + # Define which paths this specific [[headers]] block will cover. + for = "/*" + + [headers.values] + X-Frame-Options = "DENY" + X-XSS-Protection = "1; mode=block" + + # Multi-key header rules are expressed with multi-line strings. + cache-control = ''' + max-age=0, + no-cache, + no-store, + must-revalidate''' diff --git a/package.json b/package.json index 169e2cfa60d..06c3e91ac59 100644 --- a/package.json +++ b/package.json @@ -1,168 +1,98 @@ { - "name": "ohif-viewer", - "version": "0.0.21", - "description": "OHIF Viewer", - "author": "OHIF Contributors", - "license": "MIT", - "repository": "OHIF/Viewers", - "main": "dist/index.umd.js", - "browser": "dist/index.umd.js", - "module": "dist/index.es.js", - "jsnext:main": "dist/index.es.js", + "name": "root", + "private": true, + "workspaces": [ + "platform/*", + "extensions/*" + ], "engines": { - "node": ">=8", - "npm": ">=5" + "node": "^10.0.0", + "npm": "^6.0.0", + "yarn": "^1.16.0" }, - "proxy": "http://localhost:8042", "scripts": { "cm": "npx git-cz", - "dev": "yarn run preBuild && cross-env PORT=5000 react-scripts start", - "dev:debug": "cross-env PORT=5000 react-scripts start", - "build:package": "yarn run preBuild && node --max-old-space-size=4096 node_modules/rollup/bin/rollup -c", - "build:package:ci": "yarn run preBuild && node --max-old-space-size=4096 node_modules/rollup/bin/rollup -c", - "build:web": "yarn run preBuild && react-scripts --max_old_space_size=4096 build", - "build:web:ci": "yarn run preBuild && cross-env PUBLIC_URL=/demo REACT_APP_CONFIG=config/netlify.js react-scripts --max_old_space_size=4096 build && cpx 'build/**/*' docs/latest/_book/demo --verbose", - "build:demo:ci": "yarn run preBuild && cross-env PUBLIC_URL=/ REACT_APP_CONFIG=config/demo.js react-scripts --max_old_space_size=4096 build", - "lint": "eslint -c .eslintrc --fix src && prettier --single-quote --write src/**/*.{js,jsx,json,css}", - "test:unit": "jest", - "test:unit:ci": "jest --ci --runInBand --collectCoverage --reporters=default --reporters=jest-junit && codecov", - "test:e2e": "start-server-and-test start http://localhost:5000 cy:run", - "test:e2e:ci": "start-server-and-test start http://localhost:5000 cy:run:ci", - "make-script-tag-example": "rm -rf script-tag-test && mkdir script-tag-test && cp dist/index.umd.* script-tag-test && cp -R public/* script-tag-test && cp -R cypress/support/script-tag/* script-tag-test", - "start-server-script-tag": "yarn run make-script-tag-example && serve -l 5000 -s script-tag-test", - "test:e2e:scriptTag": "start-server-and-test start-server-script-tag http-get://localhost:5000/index.umd.js cy:run", - "staticDeploy": "./generateStaticSite.sh", - "docs:publish": "./publishStaticSite.sh", - "start": "yarn run dev", - "predeploy": "cd example && npm install && yarn run build:package", - "preBuild": "yarn run version", - "orthanc:up": "docker-compose -f docker/Nginx-Orthanc/docker-compose.yml up", - "dev:orthanc": "yarn run preBuild && cross-env PORT=5000 REACT_APP_CONFIG=config/docker_nginx-orthanc.js react-scripts start", - "version": "node -p -e \"'export default \\'' + require('./package.json').version + '\\';'\" > src/version.js", - "cy": "cypress open", - "cy:run": "cypress run", - "cy:run:ci": "yarn run cy:run -- --record" - }, - "husky": { - "hooks": { - "pre-commit": "lint-staged" - } - }, - "lint-staged": { - "src/**/*.{js,jsx,json,css}": [ - "prettier --single-quote --write", - "git add" - ] - }, - "browserslist": [ - ">0.2%", - "not dead", - "not ie <= 11", - "not op_mini all" - ], - "resolutions": { - "@babel/core": "^7.5.4", - "browserslist": "4.6.2", - "caniuse-lite": "1.0.30000974" - }, - "files": [ - "dist" - ], - "config": { - "commitizen": { - "path": "./node_modules/cz-conventional-changelog" - } - }, - "peerDependencies": { - "react": "^16.8.6", - "react-dom": "^16.8.6" + "dev": "lerna run dev:viewer --stream", + "dev:project": ".scripts/dev.sh", + "build": "lerna run build:viewer --stream", + "build:ci": "lerna run build:viewer:ci --stream", + "build:package": "lerna run build:viewer:package --stream", + "build:package-all": "lerna run build:package --parallel --stream", + "test": "yarn run test:unit && yarn run test:e2e:ci", + "test:unit": "jest --collectCoverage", + "test:unit:ci": "lerna run test:unit:ci --parallel --stream", + "test:e2e:ci": "cd platform/viewer && yarn run test:e2e:ci", + "see-changed": "lerna changed", + "release": "yarn run lerna:version && yarn run lerna:publish", + "lerna:version": "npx lerna version prerelease --force-publish", + "lerna:publish": "lerna publish from-package --canary --dist-tag canary" }, "dependencies": { - "@babel/runtime": "^7.4.5", - "@ohif/extension-cornerstone": "0.0.43", - "@ohif/extension-dicom-html": "0.0.4", - "@ohif/extension-dicom-microscopy": "0.0.12", - "@ohif/extension-dicom-pdf": "0.0.8", - "@ohif/extension-vtk": "0.1.6", - "@ohif/i18n": "0.2.5", - "@tanem/react-nprogress": "^1.1.25", - "classnames": "^2.2.6", - "cornerstone-core": "^2.2.8", - "cornerstone-math": "^0.1.8", - "cornerstone-tools": "^3.16.0", - "cornerstone-wado-image-loader": "^3.0.0", - "dcmjs": "^0.4.7", - "dicom-parser": "^1.8.3", - "dicomweb-client": "^0.5.2", - "hammerjs": "^2.0.8", - "i18next": "^17.0.3", - "i18next-browser-languagedetector": "^3.0.1", - "lodash.isequal": "4.5.0", - "moment": "^2.24.0", - "ohif-core": "0.11.0", - "oidc-client": "1.8.x", - "prop-types": "^15.7.2", - "react-dropzone": "^10.1.5", - "react-i18next": "^10.11.0", - "react-redux": "^7.1.0", - "react-resize-detector": "^4.2.0", - "react-router": "^5.0.1", - "react-router-dom": "^5.0.1", - "react-transition-group": "^4.1.1", - "react-viewerbase": "0.17.6", - "redux": "^4.0.1", - "redux-logger": "^3.0.6", - "redux-oidc": "3.1.x", - "redux-thunk": "^2.3.0", - "reselect": "^4.0.0" + "@babel/runtime": "^7.5.5", + "core-js": "^3.2.1" }, "devDependencies": { - "@babel/core": "^7.4.5", - "@babel/plugin-proposal-class-properties": "^7.4.4", + "@babel/core": "^7.5.0", + "@babel/plugin-proposal-class-properties": "^7.5.0", + "@babel/plugin-proposal-object-rest-spread": "^7.5.0", "@babel/plugin-syntax-dynamic-import": "^7.2.0", - "@babel/plugin-transform-runtime": "^7.4.4", - "@babel/preset-env": "^7.4.5", + "@babel/plugin-transform-runtime": "^7.5.0", + "@babel/preset-env": "^7.5.0", "@babel/preset-react": "^7.0.0", - "@semantic-release/exec": "3.3.3", - "@svgr/rollup": "^4.3.0", - "babel-eslint": "10.0.1", - "codecov": "3.5.0", - "commitizen": "3.1.x", - "core-js": "^3.1.4", - "cpx": "1.5.0", + "babel-eslint": "9.x", + "babel-loader": "^8.0.6", + "babel-plugin-inline-react-svg": "1.1.0", + "babel-plugin-module-resolver": "^3.2.0", + "clean-webpack-plugin": "^3.0.0", + "copy-webpack-plugin": "^5.0.3", "cross-env": "^5.2.0", - "cypress": "^3.3.1", - "cz-conventional-changelog": "2.1.0", + "css-loader": "^3.2.0", "eslint": "5.16.0", - "eslint-plugin-import": "^2.17.3", + "eslint-config-react-app": "^4.0.1", + "eslint-plugin-flowtype": "2.x", + "eslint-plugin-import": "2.x", + "eslint-plugin-jsx-a11y": "6.x", "eslint-plugin-node": "^9.1.0", - "eslint-plugin-promise": "^4.1.1", - "eslint-plugin-react": "^7.13.0", - "gh-pages": "2.0.1", - "husky": "2.4.x", - "identity-obj-proxy": "3.0.x", - "jest-canvas-mock": "2.1.0", - "jest-junit": "6.4.x", - "lint-staged": "^8.2.1", - "lodash": "4.17.11", - "lodash.clonedeep": "4.5.0", - "prettier": "1.18.x", + "eslint-plugin-promise": "^4.2.1", + "eslint-plugin-react": "7.x", + "eslint-plugin-react-hooks": "1.5.0", + "extract-css-chunks-webpack-plugin": "^4.5.4", + "html-webpack-plugin": "^3.2.0", + "husky": "^3.0.0", + "jest": "^24.8.0", + "jest-canvas-mock": "^2.1.0", + "jest-junit": "^6.4.0", + "lerna": "^3.15.0", + "lint-staged": "^9.0.2", + "postcss-import": "^12.0.1", + "postcss-loader": "^3.0.0", + "postcss-preset-env": "^6.6.0", + "prettier": "^1.18.2", "react": "^16.8.6", "react-dom": "^16.8.6", "react-scripts": "^3.0.1", - "rollup": "^1.15.5", - "rollup-plugin-babel": "^4.3.2", - "rollup-plugin-commonjs": "^10.0.0", - "rollup-plugin-json": "^4.0.0", - "rollup-plugin-node-builtins": "^2.1.2", - "rollup-plugin-node-resolve": "^5.0.2", - "rollup-plugin-peer-deps-external": "^2.2.0", - "rollup-plugin-postcss": "^2.0.3", - "rollup-plugin-replace": "^2.2.0", - "rollup-plugin-url": "^2.2.2", - "semantic-release": "15.13.x", - "serve": "^11.1.0", - "start-server-and-test": "^1.9.1", - "stylelint": "^10.1.0" - } + "redux-testkit": "^1.0.6", + "shader-loader": "^1.3.1", + "style-loader": "^1.0.0", + "stylelint": "^10.1.0", + "stylelint-config-recommended": "^2.2.0", + "stylus": "^0.54.5", + "stylus-loader": "^3.0.2", + "webpack": "^4.35.2", + "webpack-cli": "^3.3.5", + "webpack-dev-server": "^3.7.2", + "webpack-hot-middleware": "^2.25.0", + "webpack-merge": "^4.2.1", + "workbox-webpack-plugin": "^4.3.1", + "worker-loader": "^2.0.0" + }, + "resolutions": { + "**/@babel/runtime": "7.5.5" + }, + "browserslist": [ + ">0.2%", + "not dead", + "not ie <= 11", + "not op_mini all" + ] } diff --git a/platform/core/.all-contributorsrc b/platform/core/.all-contributorsrc new file mode 100644 index 00000000000..f8dc5c140af --- /dev/null +++ b/platform/core/.all-contributorsrc @@ -0,0 +1,97 @@ +{ + "files": [ + "README.md" + ], + "imageSize": 100, + "commit": false, + "contributors": [ + { + "login": "swederik", + "name": "Erik Ziegler", + "avatar_url": "https://avatars3.githubusercontent.com/u/607793?v=4", + "profile": "https://github.com/swederik", + "contributions": [ + "code" + ] + }, + { + "login": "evren217", + "name": "Evren Ozkan", + "avatar_url": "https://avatars1.githubusercontent.com/u/4920551?v=4", + "profile": "https://github.com/evren217", + "contributions": [ + "code" + ] + }, + { + "login": "galelis", + "name": "Gustavo AndrΓ© Lelis", + "avatar_url": "https://avatars3.githubusercontent.com/u/2378326?v=4", + "profile": "https://github.com/galelis", + "contributions": [ + "code" + ] + }, + { + "login": "dannyrb", + "name": "Danny Brown", + "avatar_url": "https://avatars1.githubusercontent.com/u/5797588?v=4", + "profile": "http://dannyrb.com/", + "contributions": [ + "code" + ] + }, + { + "login": "allcontributors", + "name": "allcontributors[bot]", + "avatar_url": "https://avatars3.githubusercontent.com/u/46843839?v=4", + "profile": "https://github.com/all-contributors/all-contributors-bot", + "contributions": [ + "doc" + ] + }, + { + "login": "ivan-aksamentov", + "name": "Ivan Aksamentov", + "avatar_url": "https://avatars0.githubusercontent.com/u/9403403?v=4", + "profile": "https://github.com/ivan-aksamentov", + "contributions": [ + "code", + "test" + ] + }, + { + "login": "igoroctaviano", + "name": "Igor Octaviano", + "avatar_url": "https://avatars0.githubusercontent.com/u/13886933?v=4", + "profile": "http://igoroctaviano.com", + "contributions": [ + "code" + ] + }, + { + "login": "dlwire", + "name": "David Wire", + "avatar_url": "https://avatars3.githubusercontent.com/u/1167291?v=4", + "profile": "https://github.com/dlwire", + "contributions": [ + "code", + "test" + ] + }, + { + "login": "pavertomato", + "name": "Egor Lezhnin", + "avatar_url": "https://avatars0.githubusercontent.com/u/878990?v=4", + "profile": "http://egor.lezhn.in", + "contributions": [ + "code" + ] + } + ], + "contributorsPerLine": 7, + "projectName": "@ohif/core", + "projectOwner": "OHIF", + "repoType": "github", + "repoHost": "https://github.com" +} diff --git a/platform/core/.webpack/webpack.prod.js b/platform/core/.webpack/webpack.prod.js new file mode 100644 index 00000000000..fd561e55dd8 --- /dev/null +++ b/platform/core/.webpack/webpack.prod.js @@ -0,0 +1,39 @@ +const merge = require('webpack-merge'); +const path = require('path'); +const webpackCommon = require('./../../../.webpack/webpack.common.js'); +const pkg = require('./../package.json'); + +const ROOT_DIR = path.join(__dirname, './..'); +const SRC_DIR = path.join(__dirname, '../src'); +const DIST_DIR = path.join(__dirname, '../dist'); + +module.exports = (env, argv) => { + const commonConfig = webpackCommon(env, argv, { SRC_DIR, DIST_DIR }); + + return merge(commonConfig, { + // https://webpack.js.org/configuration/mode/#mode-production + mode: 'production', + devtool: 'source-map', + stats: { + colors: true, + hash: true, + timings: true, + assets: true, + chunks: false, + chunkModules: false, + modules: false, + children: false, + warnings: true, + }, + optimization: { + minimize: true, + sideEffects: true, + }, + output: { + path: ROOT_DIR, + library: 'ohifCore', + libraryTarget: 'umd', + filename: pkg.main, + }, + }); +}; diff --git a/platform/core/CHANGELOG.md b/platform/core/CHANGELOG.md new file mode 100644 index 00000000000..4a528cf4032 --- /dev/null +++ b/platform/core/CHANGELOG.md @@ -0,0 +1,61 @@ +# Change Log + +All notable changes to this project will be documented in this file. See +[Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +## [0.11.1-alpha.7](https://github.com/OHIF/Viewers/compare/@ohif/core@0.11.1-alpha.6...@ohif/core@0.11.1-alpha.7) (2019-08-08) + +**Note:** Version bump only for package @ohif/core + +# Change Log + +All notable changes to this project will be documented in this file. See +[Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +## [0.11.1-alpha.6](https://github.com/OHIF/Viewers/compare/@ohif/core@0.11.1-alpha.5...@ohif/core@0.11.1-alpha.6) (2019-08-08) + +**Note:** Version bump only for package @ohif/core + +# Change Log + +All notable changes to this project will be documented in this file. See +[Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +## [0.11.1-alpha.5](https://github.com/OHIF/Viewers/compare/@ohif/core@0.11.1-alpha.4...@ohif/core@0.11.1-alpha.5) (2019-08-08) + +**Note:** Version bump only for package @ohif/core + +# Change Log + +All notable changes to this project will be documented in this file. See +[Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +## [0.11.1-alpha.4](https://github.com/OHIF/Viewers/compare/@ohif/core@0.11.1-alpha.3...@ohif/core@0.11.1-alpha.4) (2019-08-08) + +**Note:** Version bump only for package @ohif/core + +# Change Log + +All notable changes to this project will be documented in this file. See +[Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +## [0.11.1-alpha.3](https://github.com/OHIF/Viewers/compare/@ohif/core@0.11.1-alpha.2...@ohif/core@0.11.1-alpha.3) (2019-08-08) + +**Note:** Version bump only for package @ohif/core + +# Change Log + +All notable changes to this project will be documented in this file. See +[Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +## [0.11.1-alpha.2](https://github.com/OHIF/Viewers/compare/@ohif/core@0.11.1-alpha.1...@ohif/core@0.11.1-alpha.2) (2019-08-07) + +**Note:** Version bump only for package @ohif/core + +## [0.11.1-alpha.1](https://github.com/OHIF/Viewers/compare/@ohif/core@0.11.1-alpha.0...@ohif/core@0.11.1-alpha.1) (2019-08-07) + +**Note:** Version bump only for package @ohif/core + +## 0.11.1-alpha.0 (2019-08-05) + +**Note:** Version bump only for package @ohif/core diff --git a/extensions/ohif-vtk-extension/LICENSE b/platform/core/LICENSE similarity index 100% rename from extensions/ohif-vtk-extension/LICENSE rename to platform/core/LICENSE diff --git a/platform/core/README.md b/platform/core/README.md new file mode 100644 index 00000000000..f23d70f954c --- /dev/null +++ b/platform/core/README.md @@ -0,0 +1,137 @@ + + +
+

@ohif/core

+

@ohif/core is a collection of useful functions and classes for building web-based medical imaging applications. This library helps power OHIF's zero-footprint DICOM viewer.

+
+ +
+ +[![NPM version][npm-version-image]][npm-url] +[![NPM downloads][npm-downloads-image]][npm-url] +[![All Contributors](https://img.shields.io/badge/all_contributors-6-orange.svg?style=flat-square)](#contributors) +[![MIT License][license-image]][license-url] + + + +## Why? + +This library offers pre-packaged solutions for features common to Web-based +medical imaging viewers. For example: + +- Hotkeys +- DICOM Web +- Hanging Protocols +- Managing a study's measurements +- Managing a study's DICOM metadata +- A flexible pattern for extensions +- And many others + +It does this while remaining decoupled from any particular view library or +rendering logic. While we use it to power our [React Viewer][react-viewer], it +can be used with Vue, React, Vanilla JS, or any number of other frameworks. + +## Getting Started + +The documentation for this library is sparse. The best way to get started is to +look at its +[top level exports](https://github.com/OHIF/ohif-core/blob/master/src/index.js), +and explore the source code of features that interest you. If you want to see +how we use this library, you can check out [our viewer +implementation][react-viewer]. + +### Install + +> This library is pre- v1.0. All realeases until a v1.0 have the possibility of +> introducing breaking changes. Please depend on an "exact" version in your +> projects to prevent issues caused by loose versioning. + +``` +// with npm +npm i @ohif/core --save-exact + +// with yarn +yarn add @ohif/core --exact +``` + +### Usage + +Usage is dependent on the feature(s) you want to leverage. The bulk of +`ohif-core`'s features are "pure" and can be imported and used in place. + +_Example: retrieving study metadata from a server_ + +```js +import { studies } from "@ohif/core"; + +const studiesMetadata = await studies.retrieveStudiesMetadata( + server, // Object + studyInstanceUids, // Array + seriesInstanceUids // Array (optional) +); +``` + +### Contributing + +It is notoriously difficult to setup multiple dependent repositories for +end-to-end testing and development. That's why we recommend writing and running +unit tests when adding and modifying features for this library. This allows us +to program in isolation without a complex setup, and has the added benefit of +producing well-tested business logic. + +1. Clone this repository +2. Navigate to the project directory, and `yarn install` +3. To begin making changes, `yarn run dev` +4. To commit changes, run `yarn run cm` + +When creating tests, place the test file "next to" the file you're testing. +[For example](https://github.com/OHIF/ohif-core/blob/master/src/index.test.js): + +```js +// File +index.js; + +// Test for file +index.test.js; +``` + +As you add and modify code, `jest` will watch for uncommitted changes and run +your tests, reporting the results to your terminal. Make a pull request with +your changes to `master`, and a core team member will review your work. If you +have any questions, please don't hesitate to reach out via a GitHub issue. + +## Contributors + +Thanks goes to these wonderful people +([emoji key](https://allcontributors.org/docs/en/emoji-key)): + + + +
Erik Ziegler
Erik Ziegler

πŸ’»
Evren Ozkan
Evren Ozkan

πŸ’»
Gustavo AndrΓ© Lelis
Gustavo AndrΓ© Lelis

πŸ’»
Danny Brown
Danny Brown

πŸ’»
allcontributors[bot]
allcontributors[bot]

πŸ“–
Ivan Aksamentov
Ivan Aksamentov

πŸ’» ⚠️
+ + + +This project follows the +[all-contributors](https://github.com/all-contributors/all-contributors) +specification. Contributions of any kind welcome! + +## License + +MIT Β© [OHIF](https://github.com/OHIF) + + + + + +[npm-url]: https://npmjs.org/package/ohif-core +[npm-downloads-image]: https://img.shields.io/npm/dm/ohif-core.svg?style=flat-square +[npm-version-image]: https://img.shields.io/npm/v/ohif-core.svg?style=flat-square +[all-contributors-image]: https://img.shields.io/badge/all_contributors-0-orange.svg?style=flat-square +[contributing-url]: https://github.com/OHIF/ohif-core/blob/master/CONTRIBUTING.md +[license-image]: https://img.shields.io/badge/license-MIT-blue.svg?style=flat-square +[license-url]: LICENSE + +[react-viewer]: https://github.com/OHIF/Viewers/tree/react + diff --git a/platform/core/babel.config.js b/platform/core/babel.config.js new file mode 100644 index 00000000000..fed6f05fecd --- /dev/null +++ b/platform/core/babel.config.js @@ -0,0 +1 @@ +module.exports = require("../../babel.config.js"); diff --git a/platform/core/jest.config.js b/platform/core/jest.config.js new file mode 100644 index 00000000000..9055db5b51e --- /dev/null +++ b/platform/core/jest.config.js @@ -0,0 +1,13 @@ +const base = require('../../jest.config.base.js'); +const pkg = require('./package'); + +module.exports = { + ...base, + name: pkg.name, + displayName: pkg.name, + // rootDir: "../.." + // testMatch: [ + // //`/platform/${pack.name}/**/*.spec.js` + // "/platform/viewer/**/*.test.js" + // ] +}; diff --git a/platform/core/package.json b/platform/core/package.json new file mode 100644 index 00000000000..e63d795c844 --- /dev/null +++ b/platform/core/package.json @@ -0,0 +1,48 @@ +{ + "name": "@ohif/core", + "version": "0.11.1-alpha.7", + "description": "Generic business logic for web-based medical imaging applications", + "author": "OHIF Core Team", + "license": "MIT", + "repository": "OHIF/Viewers", + "main": "dist/index.umd.js", + "module": "src/index.js", + "sideEffects": "false", + "publishConfig": { + "access": "public" + }, + "files": [ + "dist", + "README.md" + ], + "engines": { + "node": ">=8", + "npm": ">=5" + }, + "scripts": { + "dev": "jest --watchAll", + "dev:core": "yarn run dev", + "build": "webpack --config .webpack/webpack.prod.js", + "build:package": "yarn run build", + "prepublishOnly": "yarn run build", + "start": "yarn run dev", + "test:unit": "jest --watchAll", + "test:unit:ci": "jest --ci --runInBand --collectCoverage" + }, + "peerDependencies": { + "cornerstone-core": "^2.2.8", + "cornerstone-tools": "^3.9.0", + "cornerstone-wado-image-loader": "^3.0.0", + "dicom-parser": "^1.8.3" + }, + "dependencies": { + "@babel/runtime": "^7.5.5", + "ajv": "^6.10.0", + "dicomweb-client": "^0.5.2", + "isomorphic-base64": "^1.0.2", + "lodash.clonedeep": "^4.5.0", + "lodash.merge": "^4.6.1", + "mousetrap": "^1.6.3", + "validate.js": "^0.12.0" + } +} diff --git a/platform/core/src/DICOMWeb/getAttribute.js b/platform/core/src/DICOMWeb/getAttribute.js new file mode 100644 index 00000000000..ae6b34b056c --- /dev/null +++ b/platform/core/src/DICOMWeb/getAttribute.js @@ -0,0 +1,44 @@ +/** + * Returns the specified element as a dicom attribute group/element. + * + * @param element - The group/element of the element (e.g. '00280009') + * @param [defaultValue] - The value to return if the element is not present + * @returns {*} + */ +export default function getAttribute(element, defaultValue) { + if (!element) { + return defaultValue; + } + // Value is not present if the attribute has a zero length value + if (!element.Value) { + return defaultValue; + } + // Sanity check to make sure we have at least one entry in the array. + if (!element.Value.length) { + return defaultValue; + } + + return convertToInt(element.Value); +} + +function convertToInt(input) { + function padFour(input) { + const l = input.length; + + if (l == 0) return '0000'; + if (l == 1) return '000' + input; + if (l == 2) return '00' + input; + if (l == 3) return '0' + input; + + return input; + } + + let output = ''; + for (let i = 0; i < input.length; i++) { + for (let j = 0; j < input[i].length; j++) { + output += padFour(input[i].charCodeAt(j).toString(16)); + } + } + + return parseInt(output, 16); +} diff --git a/platform/core/src/DICOMWeb/getAttribute.test.js b/platform/core/src/DICOMWeb/getAttribute.test.js new file mode 100644 index 00000000000..8432c8dcaad --- /dev/null +++ b/platform/core/src/DICOMWeb/getAttribute.test.js @@ -0,0 +1,67 @@ +import getAttribute from './getAttribute'; + +describe('getAttribute', () => { + it('should return a default value if element is null or undefined', () => { + const defaultValue = '0000'; + const nullElement = null; + const undefinedElement = undefined; + + expect(getAttribute(nullElement, defaultValue)).toEqual(defaultValue); + expect(getAttribute(undefinedElement, defaultValue)).toEqual(defaultValue); + }); + + it('should return a default value if element.Value is null, undefined or not present', () => { + const defaultValue = '0000'; + const nullElement = { + id: 0, + Value: null, + }; + const undefinedElement = { + id: 0, + Value: undefined, + }; + const noValuePresentElement = { + id: 0, + }; + + expect(getAttribute(nullElement, defaultValue)).toEqual(defaultValue); + expect(getAttribute(undefinedElement, defaultValue)).toEqual(defaultValue); + expect(getAttribute(noValuePresentElement, defaultValue)).toEqual( + defaultValue + ); + }); + + it('should return 48 for element with value 0', () => { + const returnValue = 48; + const element = { + Value: '0', + }; + expect(getAttribute(element, null)).toEqual(returnValue); + }); + + it('should return 3211313 for element with value 11', () => { + const returnValue = 3211313; + const element = { + Value: '11', + }; + expect(getAttribute(element, null)).toEqual(returnValue); + }); + + it('should return 2.4923405222191973e+35 for element with value 00280009', () => { + const returnValue = 2.4923405222191973e35; + const element = { + id: 0, + Value: '00280009', + }; + expect(getAttribute(element, null)).toEqual(returnValue); + }); + + it('should return 2949169 for element with value -1', () => { + const returnValue = 2949169; + const element = { + id: 0, + Value: '-1', + }; + expect(getAttribute(element, null)).toEqual(returnValue); + }); +}); diff --git a/platform/core/src/DICOMWeb/getAuthorizationHeader.js b/platform/core/src/DICOMWeb/getAuthorizationHeader.js new file mode 100644 index 00000000000..c7d3915718a --- /dev/null +++ b/platform/core/src/DICOMWeb/getAuthorizationHeader.js @@ -0,0 +1,25 @@ +// Commenting this out for now since it looks like Rollup is pulling in the +// Node.js version instead of the Browser version of this package +//import { btoa } from 'isomorphic-base64'; +import user from '../user'; + +/** + * Returns the Authorization header as part of an Object. + * + * @returns {Object} + */ +export default function getAuthorizationHeader(server) { + const headers = {}; + + // Check for OHIF.user since this can also be run on the server + const accessToken = user && user.getAccessToken && user.getAccessToken(); + + if (server && server.requestOptions && server.requestOptions.auth) { + // HTTP Basic Auth (user:password) + headers.Authorization = `Basic ${btoa(server.requestOptions.auth)}`; + } else if (accessToken) { + headers.Authorization = `Bearer ${accessToken}`; + } + + return headers; +} diff --git a/platform/core/src/DICOMWeb/getAuthorizationHeader.test.js b/platform/core/src/DICOMWeb/getAuthorizationHeader.test.js new file mode 100644 index 00000000000..cdf3aa198f7 --- /dev/null +++ b/platform/core/src/DICOMWeb/getAuthorizationHeader.test.js @@ -0,0 +1,82 @@ +import getAuthorizationHeader from './getAuthorizationHeader'; +import user from './../user'; + +jest.mock('./../user.js'); + +describe('getAuthorizationHeader', () => { + it('should return a HTTP Basic Auth when server contains requestOptions.auth', () => { + const validServer = { + requestOptions: { + auth: { + user: 'dummy_user', + password: 'dummy_password', + }, + }, + }; + + const expectedAuthorizationHeader = { + Authorization: `Basic ${btoa(validServer.requestOptions.auth)}`, + }; + + const authentication = getAuthorizationHeader(validServer); + + expect(authentication).toEqual(expectedAuthorizationHeader); + }); + + it('should return a HTTP Basic Auth when server contains requestOptions.auth even though there is no password', () => { + const validServerWithoutPassword = { + requestOptions: { + auth: { + user: 'dummy_user', + }, + }, + }; + + const expectedAuthorizationHeader = { + Authorization: `Basic ${btoa( + validServerWithoutPassword.requestOptions.auth + )}`, + }; + + const authentication = getAuthorizationHeader(validServerWithoutPassword); + + expect(authentication).toEqual(expectedAuthorizationHeader); + }); + + it('should return a HTTP Basic Auth when server contains requestOptions.auth even though there is no username', () => { + const validServerWithoutPassword = { + requestOptions: { + auth: { + user: 'dummy_user', + }, + }, + }; + + const expectedAuthorizationHeader = { + Authorization: `Basic ${btoa( + validServerWithoutPassword.requestOptions.auth + )}`, + }; + + const authentication = getAuthorizationHeader(validServerWithoutPassword); + + expect(authentication).toEqual(expectedAuthorizationHeader); + }); + + it('should return an empty object when there is no either server.requestOptions.auth or accessToken', () => { + const authentication = getAuthorizationHeader({}); + + expect(authentication).toEqual({}); + }); + + it('should return an Authorization with accessToken when server is not defined and there is an accessToken', () => { + user.getAccessToken.mockImplementationOnce(() => 'MOCKED_TOKEN'); + + const authentication = getAuthorizationHeader({}); + const exptecteHeaderBasedOnUserAccessToekn = { + Authorization: 'Bearer MOCKED_TOKEN', + }; + + expect(authentication).toEqual(exptecteHeaderBasedOnUserAccessToekn); + }); +}); diff --git a/platform/core/src/DICOMWeb/getModalities.js b/platform/core/src/DICOMWeb/getModalities.js new file mode 100644 index 00000000000..0b52bb5781c --- /dev/null +++ b/platform/core/src/DICOMWeb/getModalities.js @@ -0,0 +1,21 @@ +export default function getModalities(modality, modalitiesInStudy) { + let modalities = {}; + if (modality) { + modalities = modality; + } + + if (modalitiesInStudy) { + // Find vr in modalities + if (modalities.vr && modalities.vr === modalitiesInStudy.vr) { + for (let i = 0; i < modalitiesInStudy.Value.length; i++) { + const value = modalitiesInStudy.Value[i]; + if (modalities.Value.indexOf(value) === -1) { + modalities.Value.push(value); + } + } + } else { + modalities = modalitiesInStudy; + } + } + return modalities; +} diff --git a/platform/core/src/DICOMWeb/getModalities.test.js b/platform/core/src/DICOMWeb/getModalities.test.js new file mode 100644 index 00000000000..958d031b4b3 --- /dev/null +++ b/platform/core/src/DICOMWeb/getModalities.test.js @@ -0,0 +1,74 @@ +import getModalities from './getModalities'; + +describe('getModalities', () => { + test('should return an empty object when modality and modalitiesInStudy are not present', () => { + const modality = null; + const modalitiesInStudy = null; + + expect(getModalities(modality, modalitiesInStudy)).toEqual({}); + }); + + test('should return an empty object when modality and modalitiesInStudy are not present', () => { + const modality = null; + const modalitiesInStudy = null; + + expect(getModalities(modality, modalitiesInStudy)).toEqual({}); + }); + + test('should return modalities in Study when modality is not defined', () => { + const modality = null; + + const modalitiesInStudy = { + Value: ['MOCKED_VALUE'], + vr: 'MOCKED_VALUE', + }; + + expect(getModalities(modality, modalitiesInStudy)).toEqual( + modalitiesInStudy + ); + }); + + test('should return only the modalitues that exists in modalitiesInStudy', () => { + const modality = { + Value: ['DESIRED_VALUE'], + vr: 'DESIRED_VR', + }; + + const modalitiesInStudy = { + Value: ['DESIRED_VALUE', 'NOT_DESIRED_VALUE'], + vr: 'DESIRED_VR', + }; + + expect(getModalities(modality, modalitiesInStudy)).toEqual(modality); + }); + + test('should return the seek modality when the desired modality does not exist in modalitiesInStudy', () => { + const modality = { + Value: ['DESIRED_VALUE'], + vr: 'DESIRED_VR', + }; + + const modalitiesInStudy = { + Value: ['NOT_DESIRED_VALUE'], + vr: 'DESIRED_VR', + }; + + expect(getModalities(modality, modalitiesInStudy)).toEqual(modality); + }); + + test('should return the seek modality when the desired modality does not exist in modalitiesInStudy VR', () => { + const modality = { + Value: ['DESIRED_VALUE'], + vr: 'DESIRED_VR', + }; + + const modalitiesInStudy = { + Value: ['NOT_DESIRED_VALUE'], + vr: 'ANOTHER_VR', + }; + + expect(getModalities(modality, modalitiesInStudy)).toEqual( + modalitiesInStudy + ); + }); +}); diff --git a/platform/core/src/DICOMWeb/getName.js b/platform/core/src/DICOMWeb/getName.js new file mode 100644 index 00000000000..096a1b4eaa1 --- /dev/null +++ b/platform/core/src/DICOMWeb/getName.js @@ -0,0 +1,26 @@ +/** + * Returns the Alphabetic version of a PN + * + * @param element - The group/element of the element (e.g. '00200013') + * @param [defaultValue] - The default value to return if the element is not found + * @returns {*} + */ +export default function getName(element, defaultValue) { + if (!element) { + return defaultValue; + } + // Value is not present if the attribute has a zero length value + if (!element.Value) { + return defaultValue; + } + // Sanity check to make sure we have at least one entry in the array. + if (!element.Value.length) { + return defaultValue; + } + // Return the Alphabetic component group + if (element.Value[0].Alphabetic) { + return element.Value[0].Alphabetic; + } + // Orthanc does not return PN properly so this is a temporary workaround + return element.Value[0]; +} diff --git a/platform/core/src/DICOMWeb/getName.test.js b/platform/core/src/DICOMWeb/getName.test.js new file mode 100644 index 00000000000..b42a928c794 --- /dev/null +++ b/platform/core/src/DICOMWeb/getName.test.js @@ -0,0 +1,62 @@ +import getName from './getName'; + +describe('getName', () => { + it('should return a default value if element is null or undefined', () => { + const defaultValue = 'DEFAULT_NAME'; + const nullElement = null; + const undefinedElement = undefined; + + expect(getName(nullElement, defaultValue)).toEqual(defaultValue); + expect(getName(undefinedElement, defaultValue)).toEqual(defaultValue); + }); + + it('should return a default value if element.Value is null, undefined or not present', () => { + const defaultValue = 'DEFAULT_NAME'; + const nullElement = { + id: 0, + Value: null, + }; + const undefinedElement = { + id: 0, + Value: undefined, + }; + const noValuePresentElement = { + id: 0, + }; + + expect(getName(nullElement, defaultValue)).toEqual(defaultValue); + expect(getName(undefinedElement, defaultValue)).toEqual(defaultValue); + expect(getName(noValuePresentElement, defaultValue)).toEqual(defaultValue); + }); + + it('should return A for element when Alphabetic is [A, B, C, D]', () => { + const returnValue = 'A'; + const element = { + Value: [ + { Alphabetic: 'A' }, + { Alphabetic: 'B' }, + { Alphabetic: 'C' }, + { Alphabetic: 'D' }, + ], + }; + expect(getName(element, null)).toEqual(returnValue); + }); + + it('should return FIRST for element when Alphabetic is [FIRST, SECOND]', () => { + const returnValue = 'FIRST'; + const element = { + Value: [{ Alphabetic: 'FIRST' }, { Alphabetic: 'SECOND' }], + }; + expect(getName(element, null)).toEqual(returnValue); + }); + + it('should return element.value[0] for element with not Alphabetic and when there is at least on element.Value', () => { + const returnValue = { + anyOtherProperty: 'FIRST', + }; + const element = { + Value: [{ anyOtherProperty: 'FIRST' }, { Alphabetic: 'SECOND' }], + }; + expect(getName(element, null)).toEqual(returnValue); + }); +}); diff --git a/platform/core/src/DICOMWeb/getNumber.js b/platform/core/src/DICOMWeb/getNumber.js new file mode 100644 index 00000000000..f7a21264bca --- /dev/null +++ b/platform/core/src/DICOMWeb/getNumber.js @@ -0,0 +1,21 @@ +/** + * Returns the first string value as a Javascript Number + * @param element - The group/element of the element (e.g. '00200013') + * @param [defaultValue] - The default value to return if the element does not exist + * @returns {*} + */ +export default function getNumber(element, defaultValue) { + if (!element) { + return defaultValue; + } + // Value is not present if the attribute has a zero length value + if (!element.Value) { + return defaultValue; + } + // Sanity check to make sure we have at least one entry in the array. + if (!element.Value.length) { + return defaultValue; + } + + return parseFloat(element.Value[0]); +} diff --git a/platform/core/src/DICOMWeb/getNumber.test.js b/platform/core/src/DICOMWeb/getNumber.test.js new file mode 100644 index 00000000000..18f10524e04 --- /dev/null +++ b/platform/core/src/DICOMWeb/getNumber.test.js @@ -0,0 +1,57 @@ +import getNumber from './getNumber'; + +describe('getNumber', () => { + it('should return a default value if element is null or undefined', () => { + const defaultValue = 1.0; + const nullElement = null; + const undefinedElement = undefined; + + expect(getNumber(nullElement, defaultValue)).toEqual(defaultValue); + expect(getNumber(undefinedElement, defaultValue)).toEqual(defaultValue); + }); + + it('should return a default value if element.Value is null, undefined or not present', () => { + const defaultValue = 1.0; + const nullElement = { + id: 0, + Value: null, + }; + const undefinedElement = { + id: 0, + Value: undefined, + }; + const noValuePresentElement = { + id: 0, + }; + + expect(getNumber(nullElement, defaultValue)).toEqual(defaultValue); + expect(getNumber(undefinedElement, defaultValue)).toEqual(defaultValue); + expect(getNumber(noValuePresentElement, defaultValue)).toEqual( + defaultValue + ); + }); + + it('should return 2.0 for element when element.Value[0] = 2', () => { + const returnValue = 2.0; + const element = { + Value: ['2'], + }; + expect(getNumber(element, null)).toEqual(returnValue); + }); + + it('should return -1.0 for element when element.Value[0] is -1', () => { + const returnValue = -1.0; + const element = { + Value: ['-1'], + }; + expect(getNumber(element, null)).toEqual(returnValue); + }); + + it('should return -1.0 for element when element.Value is [-1, 2, 5, -10] ', () => { + const returnValue = -1.0; + const element = { + Value: ['-1', '2', '5', '-10'], + }; + expect(getNumber(element, null)).toEqual(returnValue); + }); +}); diff --git a/platform/core/src/DICOMWeb/getString.js b/platform/core/src/DICOMWeb/getString.js new file mode 100644 index 00000000000..b6ff678aa6a --- /dev/null +++ b/platform/core/src/DICOMWeb/getString.js @@ -0,0 +1,23 @@ +/** + * Returns the specified element as a string. Multi-valued elements will be separated by a backslash + * + * @param element - The group/element of the element (e.g. '00200013') + * @param [defaultValue] - The value to return if the element is not present + * @returns {*} + */ +export default function getString(element, defaultValue) { + if (!element) { + return defaultValue; + } + // Value is not present if the attribute has a zero length value + if (!element.Value) { + return defaultValue; + } + // Sanity check to make sure we have at least one entry in the array. + if (!element.Value.length) { + return defaultValue; + } + // Join the array together separated by backslash + // NOTE: Orthanc does not correctly split values into an array so the join is a no-op + return element.Value.join('\\'); +} diff --git a/platform/core/src/DICOMWeb/getString.test.js b/platform/core/src/DICOMWeb/getString.test.js new file mode 100644 index 00000000000..34d02955368 --- /dev/null +++ b/platform/core/src/DICOMWeb/getString.test.js @@ -0,0 +1,57 @@ +import getString from './getString'; + +describe('getString', () => { + it('should return a default value if element is null or undefined', () => { + const defaultValue = ['A', 'B', 'C'].join('\\'); + const nullElement = null; + const undefinedElement = undefined; + + expect(getString(nullElement, defaultValue)).toEqual(defaultValue); + expect(getString(undefinedElement, defaultValue)).toEqual(defaultValue); + }); + + it('should return a default value if element.Value is null, undefined or not present', () => { + const defaultValue = ['A', 'B', 'C'].join('\\'); + const nullElement = { + id: 0, + Value: null, + }; + const undefinedElement = { + id: 0, + Value: undefined, + }; + const noValuePresentElement = { + id: 0, + }; + + expect(getString(nullElement, defaultValue)).toEqual(defaultValue); + expect(getString(undefinedElement, defaultValue)).toEqual(defaultValue); + expect(getString(noValuePresentElement, defaultValue)).toEqual( + defaultValue + ); + }); + + it('should return A,B,C,D for element when element.Value[0] = [A, B, C, D]', () => { + const returnValue = ['A', 'B', 'C'].join('\\'); + const element = { + Value: ['A', 'B', 'C'], + }; + expect(getString(element, null)).toEqual(returnValue); + }); + + it('should return 1,4,5,6 for element when element.Value[0] is [1, 4, 5, 6]', () => { + const returnValue = [1, 4, 5, 6].join('\\'); + const element = { + Value: [1, 4, 5, 6], + }; + expect(getString(element, null)).toEqual(returnValue); + }); + + it('should return A,1,3,R,7,-1 for element when element.Value is [-1, 2, 5, -10] ', () => { + const returnValue = ['A', '1', '3', 'R', '7', '-1'].join('\\'); + const element = { + Value: ['A', '1', '3', 'R', '7', '-1'], + }; + expect(getString(element, null)).toEqual(returnValue); + }); +}); diff --git a/platform/core/src/DICOMWeb/index.js b/platform/core/src/DICOMWeb/index.js new file mode 100644 index 00000000000..f60c9b36208 --- /dev/null +++ b/platform/core/src/DICOMWeb/index.js @@ -0,0 +1,17 @@ +import getAttribute from './getAttribute.js'; +import getAuthorizationHeader from './getAuthorizationHeader.js'; +import getModalities from './getModalities.js'; +import getName from './getName.js'; +import getNumber from './getNumber.js'; +import getString from './getString.js'; + +const DICOMWeb = { + getAttribute, + getAuthorizationHeader, + getModalities, + getName, + getNumber, + getString, +}; + +export default DICOMWeb; diff --git a/platform/core/src/DICOMWeb/index.test.js b/platform/core/src/DICOMWeb/index.test.js new file mode 100644 index 00000000000..3db8a05c8d3 --- /dev/null +++ b/platform/core/src/DICOMWeb/index.test.js @@ -0,0 +1,18 @@ +import * as DICOMWeb from './index.js'; + +describe('Top level exports', () => { + test('should export the modules getAttribute, getAuthorizationHeader, getModalities, getName, getNumber, getString', () => { + const expectedExports = [ + 'getAttribute', + 'getAuthorizationHeader', + 'getModalities', + 'getName', + 'getNumber', + 'getString', + ].sort(); + + const exports = Object.keys(DICOMWeb.default).sort(); + + expect(exports).toEqual(expectedExports); + }); +}); diff --git a/platform/core/src/__mocks__/cornerstone-core.js b/platform/core/src/__mocks__/cornerstone-core.js new file mode 100644 index 00000000000..ff8b4c56321 --- /dev/null +++ b/platform/core/src/__mocks__/cornerstone-core.js @@ -0,0 +1 @@ +export default {}; diff --git a/platform/core/src/__mocks__/cornerstone-tools.js b/platform/core/src/__mocks__/cornerstone-tools.js new file mode 100644 index 00000000000..ff8b4c56321 --- /dev/null +++ b/platform/core/src/__mocks__/cornerstone-tools.js @@ -0,0 +1 @@ +export default {}; diff --git a/platform/core/src/__mocks__/cornerstone-wado-image-loader.js b/platform/core/src/__mocks__/cornerstone-wado-image-loader.js new file mode 100644 index 00000000000..ff8b4c56321 --- /dev/null +++ b/platform/core/src/__mocks__/cornerstone-wado-image-loader.js @@ -0,0 +1 @@ +export default {}; diff --git a/platform/core/src/__mocks__/dicom-parser.js b/platform/core/src/__mocks__/dicom-parser.js new file mode 100644 index 00000000000..ff8b4c56321 --- /dev/null +++ b/platform/core/src/__mocks__/dicom-parser.js @@ -0,0 +1 @@ +export default {}; diff --git a/platform/core/src/__mocks__/dicomweb-client.js b/platform/core/src/__mocks__/dicomweb-client.js new file mode 100644 index 00000000000..e91680ed075 --- /dev/null +++ b/platform/core/src/__mocks__/dicomweb-client.js @@ -0,0 +1,15 @@ +// import { api } from 'dicomweb-client' + +const api = { + DICOMwebClient: jest.fn().mockImplementation(() => { + return { + retrieveStudyMetadata: jest.fn().mockResolvedValue([]), + }; + }), +}; + +export default { + api, +}; + +export { api }; diff --git a/platform/core/src/__mocks__/log.js b/platform/core/src/__mocks__/log.js new file mode 100644 index 00000000000..29194b790a5 --- /dev/null +++ b/platform/core/src/__mocks__/log.js @@ -0,0 +1,4 @@ +export default { + warn: jest.fn(), + error: jest.fn(), +}; diff --git a/platform/core/src/classes/CommandsManager.js b/platform/core/src/classes/CommandsManager.js new file mode 100644 index 00000000000..e6efdaa67f9 --- /dev/null +++ b/platform/core/src/classes/CommandsManager.js @@ -0,0 +1,189 @@ +import log from '../log.js'; + +/** + * The definition of a command + * + * @typedef {Object} CommandDefinition + * @property {Function} commandFn - Command to call + * @property {Array} storeContexts - Array of string of modules required from store + * @property {Object} options - Object of params to pass action + */ + +/** + * The Commands Manager tracks named commands (or functions) that are scoped to + * a context. When we attempt to run a command with a given name, we look for it + * in our active contexts. If found, we run the command, passing in any application + * or call specific data specified in the command's definition. + * + * NOTE: A more robust version of the CommandsManager lives in v1. If you're looking + * to extend this class, please check it's source before adding new methods. + */ +export class CommandsManager { + constructor({ getAppState, getActiveContexts } = {}) { + this.contexts = {}; + + if (!getAppState || !getActiveContexts) { + log.warn( + 'CommandsManager was instantiated without getAppState() or getActiveContexts()' + ); + } + + this._getAppState = getAppState; + this._getActiveContexts = getActiveContexts; + } + + /** + * Allows us to create commands "per context". An example would be the "Cornerstone" + * context having a `SaveImage` command, and the "VTK" context having a `SaveImage` + * command. The distinction of a context allows us to call the command in either + * context, and have faith that the correct command will be run. + * + * @method + * @param {string} contextName - Namespace for commands + * @returns {undefined} + */ + createContext(contextName) { + if (!contextName) { + return; + } + + if (this.contexts[contextName]) { + return this.clearContext(contextName); + } + + this.contexts[contextName] = {}; + } + + /** + * Returns all command definitions for a given context + * + * @method + * @param {string} contextName - Namespace for commands + * @returs {Object} - the matched context + */ + getContext(contextName) { + const context = this.contexts[contextName]; + + if (!context) { + return; + } + + return context; + } + + /** + * Clears all registered commands for a given context. + * + * @param {string} contextName - Namespace for commands + * @returns {undefined} + */ + clearContext(contextName) { + if (!contextName) { + return; + } + + this.contexts[contextName] = {}; + } + + /** + * Register a new command with the command manager. Scoped to a context, and + * with a definition to assist command callers w/ providing the necessary params + * + * @method + * @param {string} contextName - Namespace for command; often scoped to the extension that added it + * @param {string} commandName - Unique name identifying the command + * @param {CommandDefinition} definition - {@link CommandDefinition} + */ + registerCommand(contextName, commandName, definition) { + if (typeof definition !== 'object') { + return; + } + + const context = this.getContext(contextName); + if (!context) { + return; + } + + context[commandName] = definition; + } + + /** + * Finds a command with the provided name if it exists in the specified context, + * or a currently active context. + * + * @method + * @param {String} commandName - Command to find + * @param {String} [contextName] - Specific command to look in. Defaults to current activeContexts + */ + getCommand(commandName, contextName) { + let contexts = []; + + if (contextName) { + const context = this.getContext(contextName); + if (context) { + contexts.push(context); + } + } else { + const activeContexts = this._getActiveContexts(); + activeContexts.forEach(activeContext => { + const context = this.getContext(activeContext); + if (context) { + contexts.push(context); + } + }); + } + + if (contexts.length === 0) { + return; + } + + let foundCommand; + contexts.forEach(context => { + if (context[commandName]) { + foundCommand = context[commandName]; + } + }); + + return foundCommand; + } + + /** + * + * @method + * @param {String} commandName + * @param {Object} [options={}] - Extra options to pass the command. Like a mousedown event + * @param {String} [contextName] + */ + runCommand(commandName, options = {}, contextName) { + const definition = this.getCommand(commandName, contextName); + if (!definition) { + log.warn(`Command "${commandName}" not found in current context`); + return; + } + + const { commandFn, storeContexts } = definition; + const definitionOptions = definition.options; + + let commandParams = {}; + const appState = this._getAppState(); + storeContexts.forEach(context => { + commandParams[context] = appState[context]; + }); + + commandParams = Object.assign( + {}, + commandParams, // Required store contexts + definitionOptions, // "Command configuration" + options // "Time of call" info + ); + + if (typeof commandFn !== 'function') { + log.warn(`No commandFn was defined for command "${commandName}"`); + return; + } else { + return commandFn(commandParams); + } + } +} + +export default CommandsManager; diff --git a/platform/core/src/classes/CommandsManager.test.js b/platform/core/src/classes/CommandsManager.test.js new file mode 100644 index 00000000000..411fc7cb8d9 --- /dev/null +++ b/platform/core/src/classes/CommandsManager.test.js @@ -0,0 +1,225 @@ +import CommandsManager from './CommandsManager.js'; +import log from './../log.js'; + +jest.mock('./../log.js'); + +describe('CommandsManager', () => { + let commandsManager, + contextName = 'VTK', + command = { + commandFn: jest.fn().mockReturnValue(true), + storeContexts: ['viewers'], + options: { passMeToCommandFn: ':wave:' }, + }, + commandsManagerConfig = { + getAppState: () => { + return { + viewers: 'Test', + }; + }, + getActiveContexts: () => ['VIEWER', 'ACTIVE_VIEWER::CORNERSTONE'], + }; + + beforeEach(() => { + commandsManager = new CommandsManager(commandsManagerConfig); + commandsManager.createContext('VIEWER'); + commandsManager.createContext('ACTIVE_VIEWER::CORNERSTONE'); + jest.clearAllMocks(); + }); + + it('has a contexts property', () => { + const localCommandsManager = new CommandsManager(commandsManagerConfig); + + expect(localCommandsManager).toHaveProperty('contexts'); + expect(localCommandsManager.contexts).toEqual({}); + }); + + it('logs a warning if instantiated without getAppState or getActiveContexts', () => { + new CommandsManager(); + + expect(log.warn.mock.calls.length).toBe(1); + }); + + describe('createContext()', () => { + it('creates a context', () => { + commandsManager.createContext(contextName); + + expect(commandsManager.contexts).toHaveProperty(contextName); + }); + + it('clears the context if it already exists', () => { + commandsManager.createContext(contextName); + commandsManager.registerCommand(contextName, 'TestCommand', command); + commandsManager.registerCommand(contextName, 'TestCommand2', command); + commandsManager.createContext(contextName); + + const registeredCommands = commandsManager.getContext(contextName); + + expect(registeredCommands).toEqual({}); + }); + }); + + describe('getContext()', () => { + it('returns all registered commands for a context', () => { + commandsManager.createContext(contextName); + commandsManager.registerCommand(contextName, 'TestCommand', command); + const registeredCommands = commandsManager.getContext(contextName); + + expect(registeredCommands).toHaveProperty('TestCommand'); + expect(registeredCommands['TestCommand']).toEqual(command); + }); + it('returns undefined if the context does not exist', () => { + const registeredCommands = commandsManager.getContext(contextName); + + expect(registeredCommands).toBe(undefined); + }); + }); + + describe('clearContext()', () => { + it('clears all registered commands for a context', () => { + commandsManager.createContext(contextName); + commandsManager.registerCommand(contextName, 'TestCommand', command); + commandsManager.registerCommand(contextName, 'TestCommand2', command); + commandsManager.clearContext(contextName); + + const registeredCommands = commandsManager.getContext(contextName); + + expect(registeredCommands).toEqual({}); + }); + }); + + describe('registerCommand()', () => { + it('registers commands to a context', () => { + commandsManager.createContext(contextName); + commandsManager.registerCommand(contextName, 'TestCommand', command); + const registeredCommands = commandsManager.getContext(contextName); + + expect(registeredCommands).toHaveProperty('TestCommand'); + expect(registeredCommands['TestCommand']).toEqual(command); + }); + }); + + describe('getCommand()', () => { + it('returns undefined if context does not exist', () => { + const result = commandsManager.getCommand( + 'TestCommand', + 'NonExistentContext' + ); + + expect(result).toBe(undefined); + }); + it('returns undefined if command does not exist in context', () => { + commandsManager.createContext(contextName); + const result = commandsManager.getCommand('TestCommand', contextName); + + expect(result).toBe(undefined); + }); + it('uses contextName param to get command', () => { + commandsManager.createContext('GLOBAL'); + commandsManager.registerCommand('GLOBAL', 'TestCommand', command); + const foundCommand = commandsManager.getCommand('TestCommand', 'GLOBAL'); + + expect(foundCommand).toBe(command); + }); + it('uses activeContexts, if contextName is not provided, to get command', () => { + commandsManager.registerCommand('VIEWER', 'TestCommand', command); + const foundCommand = commandsManager.getCommand('TestCommand'); + + expect(foundCommand).toBe(command); + }); + it('returns the expected command', () => { + commandsManager.createContext(contextName); + commandsManager.registerCommand(contextName, 'TestCommand', command); + const result = commandsManager.getCommand('TestCommand', contextName); + + expect(result).toEqual(command); + }); + }); + + describe('runCommand()', () => { + it('Logs a warning if commandName not found in context', () => { + const result = commandsManager.runCommand( + 'CommandThatDoesNotExistInAnyContext' + ); + + expect(result).toBe(undefined); + expect(log.warn.mock.calls[0][0]).toEqual( + 'Command "CommandThatDoesNotExistInAnyContext" not found in current context' + ); + }); + + it('Logs a warning if command definition does not have a commandFn', () => { + const commandWithNoCommmandFn = { + commandFn: undefined, + storeContexts: [], + options: {}, + }; + + commandsManager.createContext(contextName); + commandsManager.registerCommand( + contextName, + 'TestCommand', + commandWithNoCommmandFn + ); + const result = commandsManager.runCommand( + 'TestCommand', + null, + contextName + ); + + expect(result).toBe(undefined); + expect(log.warn.mock.calls[0][0]).toEqual( + 'No commandFn was defined for command "TestCommand"' + ); + }); + + it('Calls commandFn', () => { + commandsManager.registerCommand('VIEWER', 'TestCommand', command); + commandsManager.runCommand('TestCommand', {}, 'VIEWER'); + + expect(command.commandFn.mock.calls.length).toBe(1); + }); + + it('Calls commandFn w/ properties from appState', () => { + commandsManager.registerCommand('VIEWER', 'TestCommand', command); + commandsManager.runCommand('TestCommand', {}, 'VIEWER'); + + expect(command.commandFn.mock.calls.length).toBe(1); + expect(command.commandFn.mock.calls[0][0].viewers).toEqual( + commandsManagerConfig.getAppState().viewers + ); + }); + + it('Calls commandFn w/ command definition options', () => { + commandsManager.registerCommand('VIEWER', 'TestCommand', command); + commandsManager.runCommand('TestCommand', {}, 'VIEWER'); + + expect(command.commandFn.mock.calls.length).toBe(1); + expect(command.commandFn.mock.calls[0][0].passMeToCommandFn).toEqual( + command.options.passMeToCommandFn + ); + }); + + it('Calls commandFn w/ runCommand "options" parameter', () => { + const runCommandOptions = { + test: ':+1:', + }; + + commandsManager.registerCommand('VIEWER', 'TestCommand', command); + commandsManager.runCommand('TestCommand', runCommandOptions, 'VIEWER'); + + expect(command.commandFn.mock.calls.length).toBe(1); + expect(command.commandFn.mock.calls[0][0].test).toEqual( + runCommandOptions.test + ); + }); + + it('Returns the result of commandFn', () => { + commandsManager.registerCommand('VIEWER', 'TestCommand', command); + const result = commandsManager.runCommand('TestCommand', {}, 'VIEWER'); + + expect(command.commandFn.mock.calls.length).toBe(1); + expect(result).toBe(true); + }); + }); +}); diff --git a/platform/core/src/classes/HotkeysManager.js b/platform/core/src/classes/HotkeysManager.js new file mode 100644 index 00000000000..b5a0ed20d7b --- /dev/null +++ b/platform/core/src/classes/HotkeysManager.js @@ -0,0 +1,162 @@ +import hotkeys from './hotkeys'; +import log from './../log.js'; + +/** + * + * + * @typedef {Object} HotkeyDefinition + * @property {String} commandName - Command to call + * @property {String} label - Display name for hotkey + * @property {String[]} keys - Keys to bind; Follows Mousetrap.js binding syntax + */ + +export class HotkeysManager { + constructor(commandsManager) { + this.hotkeyDefinitions = {}; + this.hotkeyDefaults = []; + this.isEnabled = true; + + if (!commandsManager) { + log.warn( + 'HotkeysManager instantiated without a commandsManager. Hotkeys will be unable to find and run commands.' + ); + } + + this._commandsManager = commandsManager; + } + + /** + * Disables all hotkeys. Hotkeys added while disabled will not listen for + * input. + */ + disable() { + this.isEnabled = false; + hotkeys.pause(); + } + + /** + * Enables all hotkeys. + */ + enable() { + this.isEnabled = true; + hotkeys.unpause(); + } + + /** + * Registers a list of hotkeydefinitions. Optionally, sets the + * default hotkey bindings for all provided definitions. These + * values are used in `this.restoreDefaultBindings`. + * + * @param {HotkeyDefinition[]} hotkeyDefinitions + * @param {Boolean} [isDefaultDefinitions] + */ + setHotkeys(hotkeyDefinitions, isDefaultDefinitions = false) { + hotkeyDefinitions.forEach(definition => this.registerHotkeys(definition)); + + if (isDefaultDefinitions) { + this.hotkeyDefaults = hotkeyDefinitions; + } + } + + /** + * (unbinds and) binds the specified command to one or more key combinations. + * When a hotkey combination is triggered, the command name and active contexts + * are used to locate the correct command to call. + * + * @param {HotkeyDefinition} commandName + * @param {String} extension + * @returns {undefined} + */ + registerHotkeys({ commandName, keys, label } = {}, extension) { + if (!commandName) { + log.warn(`No command was defined for hotkey "${keys}"`); + return; + } + + const previouslyRegisteredDefinition = this.hotkeyDefinitions[commandName]; + + if (previouslyRegisteredDefinition) { + const previouslyRegisteredKeys = previouslyRegisteredDefinition.keys; + this._unbindHotkeys(commandName, previouslyRegisteredKeys); + } + + // Set definition & bind + this.hotkeyDefinitions[commandName] = { keys, label }; + this._bindHotkeys(commandName, keys); + } + + /** + * Uses most recent + * + * @returns {undefined} + */ + restoreDefaultBindings() { + this.setHotkeys(this.hotkeyDefaults); + } + + /** + * + */ + destroy() { + this.hotkeyDefaults = []; + this.hotkeyDefinitions = {}; + hotkeys.reset(); + } + + /** + * Binds one or more set of hotkey combinations for a given command + * + * @private + * @param {string} commandName - The name of the command to trigger when hotkeys are used + * @param {string[]} keys - One or more key combinations that should trigger command + * @returns {undefined} + */ + _bindHotkeys(commandName, keys) { + const isKeyDefined = keys === '' || keys === undefined; + if (isKeyDefined) { + return; + } + + const isKeyArray = keys instanceof Array; + if (isKeyArray) { + keys.forEach(key => this._bindHotkeys(commandName, key)); + return; + } + + hotkeys.bind(keys, evt => { + this._commandsManager.runCommand(commandName, { evt }); + }); + } + + /** + * unbinds one or more set of hotkey combinations for a given command + * + * @private + * @param {string} commandName - The name of the previously bound command + * @param {string[]} keys - One or more sets of previously bound keys + * @returns {undefined} + */ + _unbindHotkeys(commandName, keys) { + const isKeyDefined = keys !== '' && keys !== undefined; + if (!isKeyDefined) { + return; + } + + const isKeyArray = keys instanceof Array; + if (isKeyArray) { + keys.forEach(key => this._unbindHotkeys(commandName, key)); + return; + } + + hotkeys.unbind(keys); + } +} + +export default HotkeysManager; + +// Commands Contexts: + +// --> Name and Priority +// GLOBAL: 0 +// VIEWER::CORNERSTONE: 1 +// VIEWER::VTK: 1 diff --git a/platform/core/src/classes/HotkeysManager.test.js b/platform/core/src/classes/HotkeysManager.test.js new file mode 100644 index 00000000000..e02c1f9a071 --- /dev/null +++ b/platform/core/src/classes/HotkeysManager.test.js @@ -0,0 +1,201 @@ +import CommandsManager from './CommandsManager.js'; +import HotkeysManager from './HotkeysManager.js'; +import hotkeys from './hotkeys'; +import log from './../log.js'; + +jest.mock('./CommandsManager.js'); +jest.mock('./hotkeys'); +jest.mock('./../log.js'); + +describe('HotkeysManager', () => { + let hotkeysManager, commandsManager; + + beforeEach(() => { + commandsManager = new CommandsManager(); + hotkeysManager = new HotkeysManager(commandsManager); + CommandsManager.mockClear(); + hotkeys.mockClear(); + log.warn.mockClear(); + jest.clearAllMocks(); + }); + + it('has expected properties', () => { + const allProperties = Object.keys(hotkeysManager); + const expectedProprties = [ + 'hotkeyDefinitions', + 'hotkeyDefaults', + 'isEnabled', + ]; + + const containsAllExpectedProperties = expectedProprties.every(expected => + allProperties.includes(expected) + ); + + expect(containsAllExpectedProperties).toBe(true); + }); + + it('logs a warning if instantiated without a commandsManager', () => { + new HotkeysManager(); + + expect(log.warn.mock.calls.length).toBe(1); + expect(log.warn.mock.calls[0][0]).toEqual( + 'HotkeysManager instantiated without a commandsManager. Hotkeys will be unable to find and run commands.' + ); + }); + + describe('disable()', () => { + beforeEach(() => hotkeys.pause.mockClear()); + + it('sets isEnabled property to false', () => { + hotkeysManager.disable(); + + expect(hotkeysManager.isEnabled).toBe(false); + }); + + it('calls hotkeys.pause()', () => { + hotkeysManager.disable(); + + expect(hotkeys.pause.mock.calls.length).toBe(1); + }); + }); + + describe('enable()', () => { + beforeEach(() => hotkeys.unpause.mockClear()); + + it('sets isEnabled property to true', () => { + hotkeysManager.disable(); + hotkeysManager.enable(); + + expect(hotkeysManager.isEnabled).toBe(true); + }); + + it('calls hotkeys.unpause()', () => { + hotkeysManager.enable(); + + expect(hotkeys.unpause.mock.calls.length).toBe(1); + }); + }); + + describe('setHotkeys()', () => { + it('calls registerHotkeys for each hotkeyDefinition', () => { + const hotkeyDefinitions = [ + { commandName: 'dance', label: 'dance dance', keys: '+' }, + { commandName: 'celebrate', label: 'celebrate everything', keys: 'q' }, + ]; + + hotkeysManager.registerHotkeys = jest.fn(); + hotkeysManager.setHotkeys(hotkeyDefinitions); + + const numberOfCalls = hotkeysManager.registerHotkeys.mock.calls.length; + const firstCallArgs = hotkeysManager.registerHotkeys.mock.calls[0][0]; + const secondCallArgs = hotkeysManager.registerHotkeys.mock.calls[1][0]; + + expect(numberOfCalls).toBe(2); + expect(firstCallArgs).toEqual(hotkeyDefinitions[0]); + expect(secondCallArgs).toEqual(hotkeyDefinitions[1]); + }); + it('does not set this.hotkeyDefaults by default', () => { + const hotkeyDefinitions = [{ commandName: 'dance', keys: '+' }]; + + hotkeysManager.setHotkeys(hotkeyDefinitions); + + expect(hotkeysManager.hotkeyDefaults).toEqual([]); + }); + it('sets this.hotkeyDefaults when isDefaultDefinitions is true', () => { + const hotkeyDefinitions = [{ commandName: 'dance', keys: '+' }]; + const isDefaultDefinitions = true; + + hotkeysManager.setHotkeys(hotkeyDefinitions, isDefaultDefinitions); + + expect(hotkeysManager.hotkeyDefaults).toEqual(hotkeyDefinitions); + }); + }); + + describe('registerHotkeys()', () => { + it('logs a warning and returns undefined if a commandName is not provided', () => { + const definition = { commandName: undefined, keys: '+' }; + + const result = hotkeysManager.registerHotkeys(definition); + + expect(result).toBe(undefined); + expect(log.warn.mock.calls.length).toBe(1); + }); + it('updates hotkeyDefinitions property with registered keys', () => { + const definition = { commandName: 'dance', label: 'hello', keys: '+' }; + const expectedHotkeyDefinition = { label: 'hello', keys: '+' }; + + hotkeysManager.registerHotkeys(definition); + + const numOfHotkeyDefinitions = Object.keys( + hotkeysManager.hotkeyDefinitions + ).length; + const hotkeyDefinitionForRegisteredCommand = + hotkeysManager.hotkeyDefinitions[definition.commandName]; + + expect(numOfHotkeyDefinitions).toBe(1); + expect(hotkeyDefinitionForRegisteredCommand).toEqual( + expectedHotkeyDefinition + ); + }); + it('calls hotkeys.bind for all keys in array', () => { + const definition = { commandName: 'dance', keys: ['h', 'e', 'l', 'o'] }; + + hotkeysManager.registerHotkeys(definition); + + expect(hotkeys.bind.mock.calls.length).toBe(definition.keys.length); + definition.keys.forEach((key, i) => + expect(hotkeys.bind.mock.calls[i][0]).toBe(key) + ); + }); + it('calls hotkeys.unbind if commandName was previously registered, for each previously registered set of keys', () => { + const firstDefinition = { + commandName: 'dance', + keys: ['h', 'e', 'l', 'o'], + }; + const secondDefinition = { commandName: 'dance', keys: 'a' }; + + // First call + hotkeysManager.registerHotkeys(firstDefinition); + // Second call + hotkeysManager.registerHotkeys(secondDefinition); + + expect(hotkeys.unbind.mock.calls.length).toBe( + firstDefinition.keys.length + ); + firstDefinition.keys.forEach((key, i) => + expect(hotkeys.unbind.mock.calls[i][0]).toBe(key) + ); + }); + }); + + describe('restoreDefaults()', () => { + it('calls setHotkeys with hotkey defaults', () => { + hotkeysManager.setHotkeys = jest.fn(); + + hotkeysManager.restoreDefaultBindings(); + + expect(hotkeysManager.setHotkeys.mock.calls[0][0]).toEqual( + hotkeysManager.hotkeyDefaults + ); + }); + }); + + describe('destroy()', () => { + it('clears default and definition properties', () => { + hotkeysManager.hotkeyDefaults = ['hotdog', 'jeremy', 'qasar']; + hotkeysManager.hotkeyDefinitions = { + hello: 'world', + }; + + hotkeysManager.destroy(); + + expect(hotkeysManager.hotkeyDefaults).toEqual([]); + expect(hotkeysManager.hotkeyDefinitions).toEqual({}); + }); + it('resets all hotkey bindings', () => { + hotkeysManager.destroy(); + + expect(hotkeys.reset.mock.calls.length).toEqual(1); + }); + }); +}); diff --git a/platform/core/src/classes/ImageSet.js b/platform/core/src/classes/ImageSet.js new file mode 100644 index 00000000000..d97c7cb563a --- /dev/null +++ b/platform/core/src/classes/ImageSet.js @@ -0,0 +1,68 @@ +import guid from '../utils/guid.js'; +import OHIFError from './OHIFError'; + +const OBJECT = 'object'; + +/** + * This class defines an ImageSet object which will be used across the viewer. This object represents + * a list of images that are associated by any arbitrary criteria being thus content agnostic. Besides the + * main attributes (images and uid) it allows additional attributes to be appended to it (currently + * indiscriminately, but this should be changed). + */ +class ImageSet { + constructor(images) { + if (Array.isArray(images) !== true) { + throw new OHIFError('ImageSet expects an array of images'); + } + + // @property "images" + Object.defineProperty(this, 'images', { + enumerable: false, + configurable: false, + writable: false, + value: images, + }); + + // @property "uid" + Object.defineProperty(this, 'uid', { + enumerable: false, + configurable: false, + writable: false, + value: guid(), // Unique ID of the instance + }); + } + + getUID() { + return this.uid; + } + + setAttribute(attribute, value) { + this[attribute] = value; + } + + getAttribute(attribute) { + return this[attribute]; + } + + setAttributes(attributes) { + if (typeof attributes === OBJECT && attributes !== null) { + const imageSet = this, + hasOwn = Object.prototype.hasOwnProperty; + for (let attribute in attributes) { + if (hasOwn.call(attributes, attribute)) { + imageSet[attribute] = attributes[attribute]; + } + } + } + } + + getImage(index) { + return this.images[index]; + } + + sortBy(sortingCallback) { + return this.images.sort(sortingCallback); + } +} + +export default ImageSet; diff --git a/platform/core/src/classes/MetadataProvider.js b/platform/core/src/classes/MetadataProvider.js new file mode 100644 index 00000000000..f8ba427fe88 --- /dev/null +++ b/platform/core/src/classes/MetadataProvider.js @@ -0,0 +1,412 @@ +import { parsingUtils } from '../lib/parsingUtils'; + +const FUNCTION = 'function'; + +class MetadataProvider { + constructor() { + // Define the main "metadataLookup" private property as an immutable property. + Object.defineProperty(this, 'metadataLookup', { + configurable: false, + enumerable: false, + writable: false, + value: new Map(), + }); + + // Local reference to provider function bound to current instance. + Object.defineProperty(this, '_provider', { + configurable: false, + enumerable: false, + writable: true, + value: null, + }); + } + + /** + * Cornerstone Metadata provider to store image meta data + * Data from instances, series, and studies are associated with + * imageIds to facilitate usage of this information by Cornerstone's Tools + * + * e.g. the imagePlane metadata object contains instance information about + * row/column pixel spacing, patient position, and patient orientation. It + * is used in CornerstoneTools to position reference lines and orientation markers. + * + * @param {String} imageId The Cornerstone ImageId + * @param {Object} data An object containing instance, series, and study metadata + */ + addMetadata(imageId, data) { + const instanceMetadata = data.instance; + const seriesMetadata = data.series; + const studyMetadata = data.study; + const numImages = data.numImages; + const metadata = {}; + + metadata.frameNumber = data.frameNumber; + + metadata.study = { + accessionNumber: studyMetadata.accessionNumber, + patientId: studyMetadata.patientId, + studyInstanceUid: studyMetadata.studyInstanceUid, + studyDate: studyMetadata.studyDate, + studyTime: studyMetadata.studyTime, + studyDescription: studyMetadata.studyDescription, + institutionName: studyMetadata.institutionName, + patientHistory: studyMetadata.patientHistory, + }; + + metadata.series = { + seriesDescription: seriesMetadata.seriesDescription, + seriesNumber: seriesMetadata.seriesNumber, + seriesDate: seriesMetadata.seriesDate, + seriesTime: seriesMetadata.seriesTime, + modality: seriesMetadata.modality, + seriesInstanceUid: seriesMetadata.seriesInstanceUid, + numImages: numImages, + }; + + metadata.instance = instanceMetadata; + + metadata.patient = { + name: studyMetadata.patientName, + id: studyMetadata.patientId, + birthDate: studyMetadata.patientBirthDate, + sex: studyMetadata.patientSex, + age: studyMetadata.patientAge, + }; + + // If there is sufficient information, populate + // the imagePlane object for easier use in the Viewer + metadata.imagePlane = this.getImagePlane(instanceMetadata); + + // Add the metadata to the imageId lookup object + this.metadataLookup.set(imageId, metadata); + } + + /** + * Return the metadata for the given imageId + * @param {String} imageId The Cornerstone ImageId + * @returns image metadata + */ + getMetadata(imageId) { + return this.metadataLookup.get(imageId); + } + + /** + * Adds a set of metadata to the Cornerstone metadata provider given a specific + * imageId, type, and dataset + * + * @param imageId + * @param type (e.g. series, instance, tagDisplay) + * @param data + */ + addSpecificMetadata(imageId, type, data) { + const metadata = {}; + metadata[type] = data; + + const oldMetadata = this.metadataLookup.get(imageId); + this.metadataLookup.set(imageId, Object.assign(oldMetadata, metadata)); + } + + getFromImage(image, type, tag, attrName, defaultValue) { + let value; + + if (image.data) { + value = this.getFromDataSet(image.data, type, tag); + } else { + value = image.instance[attrName]; + } + + return value === null ? defaultValue : value; + } + + getFromDataSet(dataSet, type, tag) { + if (!dataSet) { + return; + } + + const fn = dataSet[type]; + if (!fn) { + return; + } + + return fn.call(dataSet, tag); + } + + getFrameIncrementPointer(image) { + const dataSet = image.data; + let frameInstancePointer = ''; + + if (parsingUtils.isValidDataSet(dataSet)) { + const frameInstancePointerNames = { + x00181063: 'frameTime', + x00181065: 'frameTimeVector', + }; + + // (0028,0009) = Frame Increment Pointer + const frameInstancePointerTag = parsingUtils.attributeTag( + dataSet, + 'x00280009' + ); + frameInstancePointer = frameInstancePointerNames[frameInstancePointerTag]; + } else { + frameInstancePointer = image.instance.frameIncrementPointer; + } + + return frameInstancePointer || ''; + } + + getFrameTimeVector(image) { + const dataSet = image.data; + + if (parsingUtils.isValidDataSet(dataSet)) { + // Frame Increment Pointer points to Frame Time Vector (0018,1065) field + return parsingUtils.floatArray(dataSet, 'x00181065'); + } + + return image.instance.frameTimeVector; + } + + getFrameTime(image) { + const dataSet = image.data; + + if (parsingUtils.isValidDataSet(dataSet)) { + // Frame Increment Pointer points to Frame Time (0018,1063) field or is not defined (for addtional flexibility). + // Yet another value is possible for this field (5200,9230 for Multi-frame Functional Groups) + // but that case is currently not supported. + return dataSet.floatString('x00181063', -1); + } + + return image.instance.frameTime; + } + + /** + * Updates the related metadata for missing fields given a specified image + * + * @param image + */ + updateMetadata(image) { + const imageMetadata = this.metadataLookup.get(image.imageId); + if (!imageMetadata) { + return; + } + + imageMetadata.patient.age = + imageMetadata.patient.age || + this.getFromDataSet(image.data, 'string', 'x00101010'); + + imageMetadata.instance.rows = imageMetadata.instance.rows || image.rows; + imageMetadata.instance.columns = + imageMetadata.instance.columns || image.columns; + + imageMetadata.instance.sopClassUid = + imageMetadata.instance.sopClassUid || + this.getFromDataSet(image.data, 'string', 'x00080016'); + imageMetadata.instance.sopInstanceUid = + imageMetadata.instance.sopInstanceUid || + this.getFromDataSet(image.data, 'string', 'x00080018'); + + imageMetadata.instance.pixelSpacing = + imageMetadata.instance.pixelSpacing || + this.getFromDataSet(image.data, 'string', 'x00280030'); + imageMetadata.instance.frameOfReferenceUID = + imageMetadata.instance.frameOfReferenceUID || + this.getFromDataSet(image.data, 'string', 'x00200052'); + imageMetadata.instance.imageOrientationPatient = + imageMetadata.instance.imageOrientationPatient || + this.getFromDataSet(image.data, 'string', 'x00200037'); + imageMetadata.instance.imagePositionPatient = + imageMetadata.instance.imagePositionPatient || + this.getFromDataSet(image.data, 'string', 'x00200032'); + + imageMetadata.instance.sliceThickness = + imageMetadata.instance.sliceThickness || + this.getFromDataSet(image.data, 'string', 'x00180050'); + imageMetadata.instance.sliceLocation = + imageMetadata.instance.sliceLocation || + this.getFromDataSet(image.data, 'string', 'x00201041'); + imageMetadata.instance.tablePosition = + imageMetadata.instance.tablePosition || + this.getFromDataSet(image.data, 'string', 'x00189327'); + imageMetadata.instance.spacingBetweenSlices = + imageMetadata.instance.spacingBetweenSlices || + this.getFromDataSet(image.data, 'string', 'x00180088'); + + imageMetadata.instance.lossyImageCompression = + imageMetadata.instance.lossyImageCompression || + this.getFromDataSet(image.data, 'string', 'x00282110'); + imageMetadata.instance.lossyImageCompressionRatio = + imageMetadata.instance.lossyImageCompressionRatio || + this.getFromDataSet(image.data, 'string', 'x00282112'); + + imageMetadata.instance.frameIncrementPointer = + imageMetadata.instance.frameIncrementPointer || + this.getFromDataSet(image.data, 'string', 'x00280009'); + imageMetadata.instance.frameTime = + imageMetadata.instance.frameTime || + this.getFromDataSet(image.data, 'string', 'x00181063'); + imageMetadata.instance.frameTimeVector = + imageMetadata.instance.frameTimeVector || + this.getFromDataSet(image.data, 'string', 'x00181065'); + + if ( + (image.data || image.instance) && + !imageMetadata.instance.multiframeMetadata + ) { + imageMetadata.instance.multiframeMetadata = this.getMultiframeModuleMetadata( + image + ); + } + + imageMetadata.imagePlane = + imageMetadata.imagePlane || this.getImagePlane(imageMetadata.instance); + } + + /** + * Constructs and returns the imagePlane given the metadata instance + * + * @param metadataInstance The metadata instance (InstanceMetadata class) containing information to construct imagePlane + * @returns imagePlane The constructed imagePlane to be used in viewer easily + */ + getImagePlane(instance) { + if ( + !instance.rows || + !instance.columns || + !instance.pixelSpacing || + !instance.frameOfReferenceUID || + !instance.imageOrientationPatient || + !instance.imagePositionPatient + ) { + return; + } + + const imageOrientation = instance.imageOrientationPatient.split('\\'); + const imagePosition = instance.imagePositionPatient.split('\\'); + + let columnPixelSpacing = 1.0; + let rowPixelSpacing = 1.0; + if (instance.pixelSpacing) { + const split = instance.pixelSpacing.split('\\'); + rowPixelSpacing = parseFloat(split[0]); + columnPixelSpacing = parseFloat(split[1]); + } + + return { + frameOfReferenceUID: instance.frameOfReferenceUID, + rows: instance.rows, + columns: instance.columns, + rowCosines: [ + parseFloat(imageOrientation[0]), + parseFloat(imageOrientation[1]), + parseFloat(imageOrientation[2]), + ], + columnCosines: [ + parseFloat(imageOrientation[3]), + parseFloat(imageOrientation[4]), + parseFloat(imageOrientation[5]), + ], + imagePositionPatient: [ + parseFloat(imagePosition[0]), + parseFloat(imagePosition[1]), + parseFloat(imagePosition[2]), + ], + rowPixelSpacing, + columnPixelSpacing, + }; + } + + /** + * This function extracts miltiframe information from a dicomParser.DataSet object. + * + * @param dataSet {Object} An instance of dicomParser.DataSet object where multiframe information can be found. + * @return {Object} An object containing multiframe image metadata (frameIncrementPointer, frameTime, frameTimeVector, etc). + */ + getMultiframeModuleMetadata(image) { + const imageInfo = { + isMultiframeImage: false, + frameIncrementPointer: null, + numberOfFrames: 0, + frameTime: 0, + frameTimeVector: null, + averageFrameRate: 0, // backwards compatibility only... it might be useless in the future + }; + + let frameTime; + + const numberOfFrames = this.getFromImage( + image, + 'intString', + 'x00280008', + 'numberOfFrames', + -1 + ); + + if (numberOfFrames > 0) { + // set multi-frame image indicator + imageInfo.isMultiframeImage = true; + imageInfo.numberOfFrames = numberOfFrames; + + // (0028,0009) = Frame Increment Pointer + const frameIncrementPointer = this.getFrameIncrementPointer(image); + + if (frameIncrementPointer === 'frameTimeVector') { + // Frame Increment Pointer points to Frame Time Vector (0018,1065) field + const frameTimeVector = this.getFrameTimeVector(image); + + if (frameTimeVector instanceof Array && frameTimeVector.length > 0) { + imageInfo.frameIncrementPointer = frameIncrementPointer; + imageInfo.frameTimeVector = frameTimeVector; + frameTime = + frameTimeVector.reduce((a, b) => a + b) / frameTimeVector.length; + imageInfo.averageFrameRate = 1000 / frameTime; + } + } else if ( + frameIncrementPointer === 'frameTime' || + frameIncrementPointer === '' + ) { + frameTime = this.getFrameTime(image); + + if (frameTime > 0) { + imageInfo.frameIncrementPointer = frameIncrementPointer; + imageInfo.frameTime = frameTime; + imageInfo.averageFrameRate = 1000 / frameTime; + } + } + } + + return imageInfo; + } + + /** + * Get a bound reference to the provider function. + */ + getProvider() { + let provider = this._provider; + if (typeof this._provider !== FUNCTION) { + provider = this.provider.bind(this); + this._provider = provider; + } + + return provider; + } + + /** + * Looks up metadata for Cornerstone Tools given a specified type and imageId + * A type may be, e.g. 'study', or 'patient', or 'imagePlaneModule'. These types + * are keys in the stored metadata objects. + * + * @param type + * @param imageId + * @returns {Object} Relevant metadata of the specified type + */ + provider(type, imageId) { + const imageMetadata = this.metadataLookup.get(imageId); + if (!imageMetadata) { + return; + } + + if (imageMetadata.hasOwnProperty(type)) { + return imageMetadata[type]; + } + } +} + +export default MetadataProvider; diff --git a/platform/core/src/classes/OHIFError.js b/platform/core/src/classes/OHIFError.js new file mode 100644 index 00000000000..ff6068a0f0a --- /dev/null +++ b/platform/core/src/classes/OHIFError.js @@ -0,0 +1,14 @@ +// @TODO: improve this object +/** + * Objects to be used to throw errors + */ +class OHIFError extends Error { + constructor(message) { + super(); + this.message = message; + this.stack = new Error().stack; + this.name = this.constructor.name; + } +} + +export default OHIFError; diff --git a/platform/core/src/classes/OHIFStudyMetadataSource.js b/platform/core/src/classes/OHIFStudyMetadataSource.js new file mode 100644 index 00000000000..f78a5e6c100 --- /dev/null +++ b/platform/core/src/classes/OHIFStudyMetadataSource.js @@ -0,0 +1,81 @@ +import { studyMetadataManager, updateMetaDataManager } from '../utils'; + +import OHIFError from './OHIFError'; +import { StudyMetadata } from './metadata/StudyMetadata'; +import { StudyMetadataSource } from './StudyMetadataSource.js'; +import { StudySummary } from './metadata/StudySummary'; +import { retrieveStudyMetadata } from '../studies/retrieveStudyMetadata.js'; + +export class OHIFStudyMetadataSource extends StudyMetadataSource { + /** + * Get study metadata for a study with given study InstanceUID + * @param server + * @param {String} studyInstanceUID Study InstanceUID + * @return {Promise} A Promise object + */ + getByInstanceUID(server, studyInstanceUID) { + return retrieveStudyMetadata(server, studyInstanceUID); + } + + /** + * Load study info (OHIF.viewer.Studies) and study metadata (OHIF.viewer.StudyMetadataList) for a given study. + * @param {StudySummary|StudyMetadata} study of StudySummary or StudyMetadata object. + */ + loadStudy(study) { + if (!(study instanceof StudyMetadata) && !(study instanceof StudySummary)) { + throw new OHIFError( + 'OHIFStudyMetadataSource::loadStudy study is not an instance of StudySummary or StudyMetadata' + ); + } + + return new Promise((resolve, reject) => { + const studyInstanceUID = study.getStudyInstanceUID(); + + if (study instanceof StudyMetadata) { + const alreadyLoaded = OHIF.viewer.Studies.findBy({ + studyInstanceUid: studyInstanceUID, + }); + + if (!alreadyLoaded) { + OHIFStudyMetadataSource._updateStudyCollections(study); + } + + resolve(study); + return; + } + + this.getByInstanceUID(studyInstanceUID) + .then(studyInfo => { + // Create study metadata object + const studyMetadata = new StudyMetadata( + studyInfo, + studyInfo.studyInstanceUid + ); + + // Get Study display sets + const displaySets = studyMetadata.createDisplaySets(); + + // Set studyMetadata display sets + studyMetadata.setDisplaySets(displaySets); + + OHIFStudyMetadataSource._updateStudyCollections(studyMetadata); + resolve(studyMetadata); + }) + .catch(reject); + }); + } + + // Static methods + static _updateStudyCollections(studyMetadata) { + const studyInfo = studyMetadata.getData(); + + // Set some studyInfo properties + studyInfo.selected = true; + studyInfo.displaySets = studyMetadata.getDisplaySets(); + + // Updates WADO-RS metaDataManager + updateMetaDataManager(studyInfo); + + studyMetadataManager.add(studyMetadata); + } +} diff --git a/platform/core/src/classes/OHIFStudySummary.js b/platform/core/src/classes/OHIFStudySummary.js new file mode 100644 index 00000000000..e40072a7761 --- /dev/null +++ b/platform/core/src/classes/OHIFStudySummary.js @@ -0,0 +1,55 @@ +import StudySummary from './StudySummary'; + +/** + * Constants + */ + +const STRING = 'string'; +const propertyReplacementMap = { + modalities: 'ModalitiesInStudy', + patientBirthdate: 'PatientBirthDate', +}; + +/** + * OHIF Viewers specialized version of StudySummary class + */ +export class OHIFStudySummary extends StudySummary { + // @Override + addTags(tagMap) { + const _hasOwn = Object.prototype.hasOwnProperty; + const _tagMap = Object.create(null); + for (let property in tagMap) { + if (_hasOwn.call(tagMap, property)) { + let standardProperty = OHIFStudySummary.getStandardPropertyName( + property + ); + if (standardProperty) { + _tagMap[standardProperty] = tagMap[property]; + } + } + } + super.addTags(_tagMap); + } + + /** + * Turns a non-standard, OHIF specific, DICOM property name into a standard one. + * @param {string} property A string representing a non-conforming keyword. + * @returns {string|undefined} Returns a standard-conforming property name. + */ + static getStandardPropertyName(property) { + let standardProperty; + if (typeof property === STRING && property.charAt(0) !== '_') { + if (property in propertyReplacementMap) { + standardProperty = propertyReplacementMap[propertyReplacementMap]; + } else { + standardProperty = property + .replace(/^sop/, 'SOP') + .replace(/Uid$/, 'UID') + .replace(/Id$/, 'ID'); + standardProperty = + standardProperty.charAt(0).toUpperCase() + standardProperty.substr(1); + } + } + return standardProperty; + } +} diff --git a/platform/core/src/classes/README.md b/platform/core/src/classes/README.md new file mode 100644 index 00000000000..a93a1ea6011 --- /dev/null +++ b/platform/core/src/classes/README.md @@ -0,0 +1,167 @@ +# Table of contents +In this document, some important objects are described. In the files there are comments that can help better undestand their methods and properties. + - [ResizeViewportManager object](#the-resize-viewport-manager-object) + - [ImageSet object](#the-image-set-object) + - [Layout Manager](#the-layout-manager-object) + - [Type Safe Collections](#the-type-safe-collections) + +# The Resize Viewport Manager object +This object has multiple functions to manage window resize event. It relocates Dialogs, resizes viewport elements and scrollbars and some other UI components such as Study and Series Quick Switch, when available. + +## Usage +It's only necessary to bind **handleResize** function to the window resize event as follows. The **ohif:viewerbase** package needs to be imported by the referring code as well. +```javascript +import { Viewerbase } from 'meteor/ohif:viewerbase'; + +const ResizeViewportManager = new Viewerbase.ResizeViewportManager(); +window.addEventListener('resize', ResizeViewportManager.getResizeHandler()); +``` +An example os its usage can be found in **ohif-viewerbase/client/components/viewer/viewerMain/viewerMain.js**. + +# The Image Set object +An object that represents a list of images that are associated by any arbitrary criteria being thus content agnostic. Besides the main attributes (**images** and **uid**) it allows additional attributes to be appended to it (currently indiscriminately, but this should be changed). + +## Usage +ImageSet constructor requires an array of SOP instances like in the example below. It's necessary to import **ohif:viewerbase**. + +```javascript +import { Viewerbase } from 'meteor/ohif:viewerbase'; + +const imageSet = new Viewerbase.ImageSet(sopInstances); + +imageSet.setAttributes({ + displaySetInstanceUid: imageSet.uid, + seriesInstanceUid: seriesData.seriesInstanceUid, + seriesNumber: seriesData.seriesNumber, + seriesDescription: seriesData.seriesDescription, + numImageFrames: instances.length, + frameRate: instance.getRawValue('x00181063'), + modality: seriesData.modality, + isMultiFrame: isMultiFrame(instance) +}); + +// Sort instances by InstanceNumber (0020,0013) +imageSet.sortBy((a, b) => { + return (parseInt(a.getRawValue('x00200013', 0)) || 0) - (parseInt(b.getRawValue('x00200013', 0)) || 0); +}); +``` +Each SOP instance in this example is an instance of **OHIFInstanceMetadata** object, which is a specialization of **InstanceMetadata**. To read more about the **Metadata API** click [here](metadata/). + +# The Layout Manager object +Objects of this class are responsible for creating, organizing and maintaining (manage) viewport rendering. It creates a grid, positioning viewports accordingly to it's configuration keeping all viewports data (in **viewportData** property) for easy access from other components. It support many layout configurations and some of them were fully tested: 1x1, 1x2, 1x3, 2x1, 2x2, 2x3, 3x1, 3x2, 3x3. Other configurations may work as well. +Finally it provides some useful functions to move through viewports and zoom it. + +## Usage +In order to use _LayoutManager_ the **ohif:viewerbase** package needs to be imported by the referring code and instantiated as follows. An example os its usage is in **ohif-viewerbase/client/components/viewer/viewerMain/viewerMain.js**. + +```javascript +import { Viewerbase } from 'meteor/ohif:viewerbase'; + +// Get an array of studies object. This function needs to be implemented, it does not exist. +const studies = getArrayOfStudiesObjects(); +const parentElement = document.getElementById('layoutManagerTarget'); +const LayoutManager = new Viewerbase.LayoutManager(parentElement, studies); +``` + +The default configuration is 1x1, and to change it just set **layoutProps** and call **updateViewports** to update the layout as follows. + +```javascript +import { Viewerbase } from 'meteor/ohif:viewerbase'; + +// Get an array of studies object. This function needs to be implemented, it does not exist. +const studies = getArrayOfStudiesObjects(); +const parentElement = document.getElementById('layoutManagerTarget'); +const LayoutManager = new LayoutManager(parentElement, studies); + +// Set the layout proprerties to 2x2 layout +LayoutManager.layoutProps = { + rows: 2, + columns: 2 +}; + +// It will render four viewports: two in each row. +LayoutManager.updateViewports(); +``` + +The layoutManagerTarget element will have a new class **layout-2-2** (to allow further styling) and it's inner content will a new div#imageViewerViewports that has four inner elements like the following (some elements and attributes were removed for example purpose): +```html +
+
+
+ +
+
+
+
+
+
+
+``` + +Each of this _div.viewportContainer_ will have some classes to help CSS specific styling accordingly to the element's position in the grid: **top**, **middle** and **bottom**. This classes are added by **viewer/components/gridLayout/** component in ohif-viewerbase package. + +# The Type Safe Collections + +With the introduction of the new _Study Metadata API_ in which study metadata is represented by class hierarchies (using prototype-based inheritance), the usage of standard _Minimongo_ collections as a central client-side storage for this data became no longer an option. Standard _Mongo_ and _Minimongo_ collections internally _flatten_ data (in other words, data gets serialized) before storage hence no functions or prototype chains are preserved. In that scenario, when an object is restored (fetched), what is returned is actually a flattened copy of the original object with no functions or prototype (it's no longer an instance of it's original class). As an attempt to overcome this limitation a new type of collection was intruduced: the *TypeSafeCollection*. + +The `TypeSafeCollection` is a simple list-like collection which tries to implement an API _similar_ but not compatible with _Mongo_'s API. It supports basic features like search by attribute map and ID, retrieval by index, sorting of result sets, insertion, removal and reactive operations but, unlike _Mongo_'s API, it (still) lacks support to advanced functionality like complex search criterea or flexible sorting options. + +## Implementation + +The `TypeSafeCollection` is implemented on top of the _JavaScript_ `Array` object. Each element inserted in the collection is appended to the end of its internal array as a _key-value pair (KVP)_ object where the _key_ is a unique randomly generated ID string and the _value_ is the element itself. Once the object has been successfully stored, the generated ID (its ID) is returned to the client code and can later be used to access that specific element. At this point, an important difference to the _Minimongo_ API can be highlighted: a _TypeSafeCollection_ instance will never make any changes to the stored element (e.g., no "\_id" property will ever be assigned to the original object). Another relevant feature that is supported by this design decision is that _not only objects_ can be stored in this collections, but literally _anything_. + +Inside the codebase, the _value_ attribute of each _KVP_ entry in the collection is refered to as _the **payload** of the entry_ since it's what really matters to the user. Hence, this term will also be used here to refer to the _value that has been stored in the collection_. That being said, we can approach another important feature of these collections: A single _payload_ cannot be stored more than once in a given collection. When an attempt of inserting a _payload_ which is already present in the collection is detected, the insert operation will fail and `null` will be returned. In that regard, the collection behaves like `Set` object not permitting a payload to be stored more than once. Strict equality is used when comparing payloads, thus cloned objects are not considered the same. This feature adds an additional garantee that a given study/series/instance will not be listed more than once (it was designed as a replacement for central study collections which were always checked for duplicates). + +Please refer to the codebase for the full `TypeSafeCollection` API. + +## Usage + +In order to use the `TypeSafeCollection` class, the **ohif:viewerbase** package needs to be imported by the referring code and instantiated as follows: + +```javascript +import { Viewerbase } from 'meteor/ohif:viewerbase'; // i.e., Viewerbase.TypeSafeCollection +OR + +import 'meteor/ohif:viewerbase'; // i.e., OHIF.viewerbase.TypeSafeCollection +// The later is preferred when the client code already makes use of the "OHIF" namespace making the second +// "import" a garantee that the ".viewerbase" namespace has been properly loaded. +``` + +A few usage examples: + +```javascript + +const Users = new OHIF.viewerbase.TypeSafeCollection(); + +[[ ... ]] + +// Insert a User object... +let userId = Users.insert({ + data: { + firstName: 'John', + lastName: 'Doe', + age: 45 + }, + getFullName() { + return `${this.data.firstName} ${this.data.lastName}`; + }, + getAge() { + return this.data.age; + } +}); + +[[ ... ]] + +let theUserWeJustStored = Users.findById(userId); // ;-) + +[[ ... ]] + +// Retrieve a single user with "Doe" as `lastName`... +let myUser = Users.findBy({ 'data.lastName': 'Doe' }); +// Or all users with "Doe" as `lastName`, sorted by `firstName` in ascending +// order and using the `age` attribute to break ties in descending order... +let myUsers = Users.findAllBy({ 'data.lastName': 'Doe' }, { + sort: [ [ 'data.firstName', 'asc' ], [ 'data.age', 'desc' ] ] +}); + +``` diff --git a/platform/core/src/classes/StudyLoadingListener.js b/platform/core/src/classes/StudyLoadingListener.js new file mode 100644 index 00000000000..9859bb0560e --- /dev/null +++ b/platform/core/src/classes/StudyLoadingListener.js @@ -0,0 +1,471 @@ +import cornerstone from 'cornerstone-core'; +import cornerstoneWADOImageLoader from 'cornerstone-wado-image-loader'; +import { + clearStudyLoadingProgress, + setStudyLoadingProgress, +} from '../redux/actions'; +import StackManager from '../utils/StackManager'; + +class BaseLoadingListener { + constructor(stack, options = {}) { + this.id = BaseLoadingListener.getNewId(); + this.stack = stack; + this.startListening(); + this.statsItemsLimit = options.statsItemsLimit || 2; + this.stats = { + items: [], + total: 0, + elapsedTime: 0, + speed: 0, + }; + + this._setProgressData = options._setProgressData; + this._clearProgressById = options._clearProgressById; + + // Register the start point to make it possible to calculate + // bytes/s or frames/s when the first byte or frame is received + this._addStatsData(0); + + // Update the progress before starting the download + // to make it possible to update the UI + this._updateProgress(); + } + + _addStatsData(value) { + const date = new Date(); + const stats = this.stats; + const items = stats.items; + const newItem = { + value, + date, + }; + + items.push(newItem); + stats.total += newItem.value; + + // Remove items until it gets below the limit + while (items.length > this.statsItemsLimit) { + const item = items.shift(); + stats.total -= item.value; + } + + // Update the elapsedTime (seconds) based on first and last + // elements and recalculate the speed (bytes/s or frames/s) + if (items.length > 1) { + const oldestItem = items[0]; + stats.elapsedTime = + (newItem.date.getTime() - oldestItem.date.getTime()) / 1000; + stats.speed = (stats.total - oldestItem.value) / stats.elapsedTime; + } + } + + _getProgressId() { + const displaySetInstanceUid = this.stack.displaySetInstanceUid; + return 'StackProgress:' + displaySetInstanceUid; + } + + _clearProgress() { + const progressId = this._getProgressId(); + this._clearProgressById(progressId); + } + + startListening() { + throw new Error('`startListening` must be implemented by child classes'); + } + + stopListening() { + throw new Error('`stopListening` must be implemented by child classes'); + } + + destroy() { + this.stopListening(); + this._clearProgress(); + } + + static getNewId() { + const timeSlice = new Date() + .getTime() + .toString() + .slice(-8); + const randomNumber = parseInt(Math.random() * 1000000000); + + return timeSlice.toString() + randomNumber.toString(); + } +} + +class DICOMFileLoadingListener extends BaseLoadingListener { + constructor(stack, options) { + super(stack, options); + this._dataSetUrl = this._getDataSetUrl(stack); + this._lastLoaded = 0; + + // Check how many instances has already been download (cached) + this._checkCachedData(); + } + + _checkCachedData() { + const dataSet = cornerstoneWADOImageLoader.wadouri.dataSetCacheManager.get( + this._dataSetUrl + ); + + if (dataSet) { + const dataSetLength = dataSet.byteArray.length; + + this._updateProgress({ + percentComplete: 100, + loaded: dataSetLength, + total: dataSetLength, + }); + } + } + + _getImageLoadProgressEventName() { + // TODO: Add this event as a constant in Cornerstone + return 'cornerstoneimageloadprogress.' + this.id; + } + + startListening() { + const imageLoadProgressEventName = this._getImageLoadProgressEventName(); + + this.imageLoadProgressEventHandler = this._imageLoadProgressEventHandle.bind( + this + ); + + this.stopListening(); + + cornerstone.events.addEventListener( + imageLoadProgressEventName, + this.imageLoadProgressEventHandle + ); + } + + stopListening() { + const imageLoadProgressEventName = this._getImageLoadProgressEventName(); + cornerstone.events.removeEventListener( + imageLoadProgressEventName, + this.imageLoadProgressEventHandle + ); + } + + _imageLoadProgressEventHandler = e => { + const eventData = e.detail; + const dataSetUrl = this._convertImageIdToDataSetUrl(eventData.imageId); + const bytesDiff = eventData.loaded - this._lastLoaded; + + if (!this._dataSetUrl === dataSetUrl) { + return; + } + + // Add the bytes downloaded to the stats + this._addStatsData(bytesDiff); + + // Update the download progress + this._updateProgress(eventData); + + // Cache the last eventData.loaded value + this._lastLoaded = eventData.loaded; + }; + + _updateProgress(eventData) { + const progressId = this._getProgressId(); + eventData = eventData || {}; + + const progressData = { + multiFrame: false, + percentComplete: eventData.percentComplete, + bytesLoaded: eventData.loaded, + bytesTotal: eventData.total, + bytesPerSecond: this.stats.speed, + }; + + this._setProgressData(progressId, progressData); + } + + _convertImageIdToDataSetUrl(imageId) { + // Remove the prefix ("dicomweb:" or "wadouri:"") + imageId = imageId.replace(/^(dicomweb:|wadouri:)/i, ''); + + // Remove "frame=999&" from the imageId + imageId = imageId.replace(/frame=\d+&?/i, ''); + + // Remove the last "&" like in "http://...?foo=1&bar=2&" + imageId = imageId.replace(/&$/, ''); + + return imageId; + } + + _getDataSetUrl(stack) { + const imageId = stack.imageIds[0]; + return this._convertImageIdToDataSetUrl(imageId); + } +} + +class StackLoadingListener extends BaseLoadingListener { + constructor(stack, options = {}) { + options.statsItemsLimit = 20; + super(stack, options); + + this.imageDataMap = this._convertImageIdsArrayToMap(stack.imageIds); + this.framesStatus = this._createArray(stack.imageIds.length, false); + this.loadedCount = 0; + + // Check how many instances has already been download (cached) + this._checkCachedData(); + } + + _convertImageIdsArrayToMap(imageIds) { + const imageIdsMap = new Map(); + + for (let i = 0; i < imageIds.length; i++) { + imageIdsMap.set(imageIds[i], { + index: i, + loaded: false, + }); + } + + return imageIdsMap; + } + + _createArray(length, defaultValue) { + // `new Array(length)` is an anti-pattern in javascript because its + // funny API. Otherwise I would go for `new Array(length).fill(false)` + const array = []; + + for (let i = 0; i < length; i++) { + array[i] = defaultValue; + } + + return array; + } + + _checkCachedData() { + // const imageIds = this.stack.imageIds; + // TODO: No way to check status of Promise. + /*for(let i = 0; i < imageIds.length; i++) { + const imageId = imageIds[i]; + + const imagePromise = cornerstone.imageCache.getImageLoadObject(imageId).promise; + + if (imagePromise && (imagePromise.state() === 'resolved')) { + this._updateFrameStatus(imageId, true); + } + }*/ + } + + _getImageLoadedEventName() { + return `${cornerstone.EVENTS.IMAGE_LOADED}.${this.id}`; + } + + _getImageCachePromiseRemoveEventName() { + return `${cornerstone.EVENTS.IMAGE_CACHE_PROMISE_REMOVED}.${this.id}`; + } + + _imageLoadedEventHandler(e) { + this._updateFrameStatus(e.detail.image.imageId, true); + } + + _imageCachePromiseRemovedEventHandler(e) { + this._updateFrameStatus(e.detail.imageId, false); + } + + startListening() { + const imageLoadedEventName = this._getImageLoadedEventName(); + const imageCachePromiseRemovedEventName = this._getImageCachePromiseRemoveEventName(); + + this.imageLoadedEventHandler = this._imageLoadedEventHandler.bind(this); + this.imageCachePromiseRemovedEventHandler = this._imageCachePromiseRemovedEventHandler.bind( + this + ); + + this.stopListening(); + + cornerstone.events.addEventListener( + imageLoadedEventName, + this.imageLoadedEventHandler + ); + cornerstone.events.addEventListener( + imageCachePromiseRemovedEventName, + this.imageCachePromiseRemovedEventHandler + ); + } + + stopListening() { + const imageLoadedEventName = this._getImageLoadedEventName(); + const imageCachePromiseRemovedEventName = this._getImageCachePromiseRemoveEventName(); + + cornerstone.events.removeEventListener( + imageLoadedEventName, + this.imageLoadedEventHandler + ); + cornerstone.events.removeEventListener( + imageCachePromiseRemovedEventName, + this.imageCachePromiseRemovedEventHandler + ); + } + + _updateFrameStatus(imageId, loaded) { + const imageData = this.imageDataMap.get(imageId); + + if (!imageData || imageData.loaded === loaded) { + return; + } + + // Add one more frame to the stats + if (loaded) { + this._addStatsData(1); + } + + imageData.loaded = loaded; + this.framesStatus[imageData.index] = loaded; + this.loadedCount += loaded ? 1 : -1; + this._updateProgress(); + } + + _setProgressData(progressId, progressData) { + // TODO: This method (and _clearProgressById) need to access + // the Redux store and should therefore be provided from the + // application. I've added a workaround to pass this in through + // the 'options' variable on instantiation, but this is really ugly. + // We could consider making the StudyLoadingListener a higher-order + // component which would set this stuff itself. + throw new Error( + "The _setProgressData function must be provided in StudyLoadingListener's options" + ); + } + + _clearProgressById(progressId) { + throw new Error( + "The _clearProgressById function must be provided in StudyLoadingListener's options" + ); + } + + _updateProgress() { + const totalFramesCount = this.stack.imageIds.length; + const loadedFramesCount = this.loadedCount; + const loadingFramesCount = totalFramesCount - loadedFramesCount; + const percentComplete = Math.round( + (loadedFramesCount / totalFramesCount) * 100 + ); + const progressId = this._getProgressId(); + const progressData = { + multiFrame: true, + totalFramesCount, + loadedFramesCount, + loadingFramesCount, + percentComplete, + framesPerSecond: this.stats.speed, + framesStatus: this.framesStatus, + }; + + this._setProgressData(progressId, progressData); + } + + _logProgress() { + const totalFramesCount = this.stack.imageIds.length; + const displaySetInstanceUid = this.stack.displaySetInstanceUid; + let progressBar = '['; + + for (let i = 0; i < totalFramesCount; i++) { + const ch = this.framesStatus[i] ? '|' : '.'; + progressBar += `${ch}`; + } + + progressBar += ']'; + log.info(`${displaySetInstanceUid}: ${progressBar}`); + } +} + +class StudyLoadingListener { + constructor(options) { + this.listeners = {}; + this.options = options; + } + + addStack(stack, stackMetaData) { + // TODO: Make this work for plugins + if (!stack) { + //console.log('Skipping adding stack to StudyLoadingListener'); + return; + } + + const displaySetInstanceUid = stack.displaySetInstanceUid; + + if (!this.listeners[displaySetInstanceUid]) { + const listener = this._createListener(stack, stackMetaData); + if (listener) { + this.listeners[displaySetInstanceUid] = listener; + } + } + } + + addStudy(study) { + study.displaySets.forEach(displaySet => { + const stack = StackManager.findOrCreateStack(study, displaySet); + + // TODO: Make this work for plugins + if (!stack) { + console.warn('Skipping adding displaySet to StudyLoadingListener'); + console.warn(displaySet); + return; + } + + this.addStack(stack, { + isMultiFrame: displaySet.isMultiFrame, + }); + }); + } + + addStudies(studies) { + if (!studies || !studies.length) { + return; + } + + studies.forEach(study => this.addStudy(study)); + } + + clear() { + const displaySetInstanceUids = Object.keys(this.listeners); + const length = displaySetInstanceUids.length; + + for (let i = 0; i < length; i++) { + const displaySetInstanceUid = displaySetInstanceUids[i]; + const displaySet = this.listeners[displaySetInstanceUid]; + + displaySet.destroy(); + } + + this.listeners = {}; + } + + _createListener(stack, stackMetaData) { + const schema = this._getSchema(stack); + + // A StackLoadingListener can be created if it's wadors or not a multiframe + // wadouri instance (single file) that means "N" files will have to be + // downloaded where "N" is the number of frames. DICOMFileLoadingListener + // is created only if it's a single DICOM file and there's no way to know + // how many frames has already been loaded (bytes/s instead of frames/s). + if (schema === 'wadors' || !stackMetaData.isMultiFrame) { + return new StackLoadingListener(stack, this.options); + } else { + return new DICOMFileLoadingListener(stack, this.options); + } + } + + _getSchema(stack) { + const imageId = stack.imageIds[0]; + const colonIndex = imageId.indexOf(':'); + return imageId.substring(0, colonIndex); + } + + // Singleton + static getInstance(options) { + if (!StudyLoadingListener._instance) { + StudyLoadingListener._instance = new StudyLoadingListener(options); + } + + return StudyLoadingListener._instance; + } +} + +export { StudyLoadingListener, StackLoadingListener, DICOMFileLoadingListener }; diff --git a/platform/core/src/classes/StudyMetadataSource.js b/platform/core/src/classes/StudyMetadataSource.js new file mode 100644 index 00000000000..8f4fb8dc3d5 --- /dev/null +++ b/platform/core/src/classes/StudyMetadataSource.js @@ -0,0 +1,32 @@ +import OHIFError from './OHIFError'; + +/** + * Abstract class to fetch study metadata. + */ +export class StudyMetadataSource { + /** + * Get study metadata for a study with given study InstanceUID. + * @param {String} studyInstanceUID Study InstanceUID. + */ + getByInstanceUID(studyInstanceUID) { + /** + * Please override this method on a specialized class. + */ + throw new OHIFError( + 'StudyMetadataSource::getByInstanceUID is not overriden. Please, override it in a specialized class. See OHIFStudyMetadataSource for example' + ); + } + + /** + * Load study info and study metadata for a given study into the viewer. + * @param {StudySummary|StudyMetadata} study of StudySummary or StudyMetadata object. + */ + loadStudy(study) { + /** + * Please override this method on a specialized class. + */ + throw new OHIFError( + 'StudyMetadataSource::loadStudy is not overriden. Please, override it in a specialized class. See OHIFStudyMetadataSource for example' + ); + } +} diff --git a/platform/core/src/classes/StudyPrefetcher.js b/platform/core/src/classes/StudyPrefetcher.js new file mode 100644 index 00000000000..fc2c4afc84f --- /dev/null +++ b/platform/core/src/classes/StudyPrefetcher.js @@ -0,0 +1,255 @@ +import log from '../log.js'; +import OHIFError from './OHIFError'; +import cornerstone from 'cornerstone-core'; +import cornerstoneTools from 'cornerstone-tools'; +import getImageId from '../utils/getImageId.js'; + +export class StudyPrefetcher { + constructor(studies) { + this.studies = studies || []; + this.prefetchDisplaySetsTimeout = 300; + this.lastActiveViewportElement = null; + + cornerstone.events.addEventListener( + 'cornerstoneimagecachefull.StudyPrefetcher', + this.cacheFullHandler + ); + } + + destroy() { + this.stopPrefetching(); + cornerstone.events.removeEventListener( + 'cornerstoneimagecachefull.StudyPrefetcher', + this.cacheFullHandler + ); + } + + static getInstance() { + if (!StudyPrefetcher.instance) { + StudyPrefetcher.instance = new StudyPrefetcher([]); + } + + return StudyPrefetcher.instance; + } + + setStudies(studies) { + this.stopPrefetching(); + this.studies = studies; + } + + prefetch() { + if (!this.studies || !this.studies.length) { + return; + } + + this.stopPrefetching(); + this.prefetchDisplaySets(); + } + + stopPrefetching() { + cornerstoneTools.requestPoolManager.clearRequestStack('prefetch'); + } + + prefetchDisplaySetsAsync(timeout) { + timeout = timeout || this.prefetchDisplaySetsTimeout; + + clearTimeout(this.prefetchDisplaySetsHandler); + this.prefetchDisplaySetsHandler = setTimeout(() => { + this.prefetchDisplaySets(); + }, timeout); + } + + prefetchDisplaySets() { + // TODO: Allow passing in config + let config = { + order: 'closest', + displaySetCount: 1, + }; + + const displaySetsToPrefetch = this.getDisplaySetsToPrefetch(config); + const imageIds = this.getImageIdsFromDisplaySets(displaySetsToPrefetch); + + this.prefetchImageIds(imageIds); + } + + prefetchImageIds(imageIds) { + const nonCachedImageIds = this.filterCachedImageIds(imageIds); + const requestPoolManager = cornerstoneTools.requestPoolManager; + const requestType = 'prefetch'; + const preventCache = false; + const noop = () => {}; + + nonCachedImageIds.forEach(imageId => { + requestPoolManager.addRequest( + {}, + imageId, + requestType, + preventCache, + noop, + noop + ); + }); + + requestPoolManager.startGrabbing(); + } + + getStudy(image) { + const studyMetadata = cornerstone.metaData.get('study', image.imageId); + return OHIF.viewer.Studies.find( + study => study.studyInstanceUid === studyMetadata.studyInstanceUid + ); + } + + getSeries(study, image) { + const seriesMetadata = cornerstone.metaData.get('series', image.imageId); + const studyMetadata = OHIF.viewerbase.getStudyMetadata(study); + + return studyMetadata.getSeriesByUID(seriesMetadata.seriesInstanceUid); + } + + getInstance(series, image) { + const instanceMetadata = cornerstone.metaData.get( + 'instance', + image.imageId + ); + return series.getInstanceByUID(instanceMetadata.sopInstanceUid); + } + + getActiveDisplaySet(displaySets, instance) { + return displaySets.find(displaySet => { + return displaySet.images.some(displaySetImage => { + return displaySetImage.sopInstanceUid === instance.sopInstanceUid; + }); + }); + } + + getDisplaySetsToPrefetch(config) { + const image = this.getActiveViewportImage(); + + if (!image || !config || !config.displaySetCount) { + return []; + } + + /*const study = this.getStudy(image); + const series = this.getSeries(study, image); + const instance = this.getInstance(series, image);*/ + const displaySets = study.displaySets; + const activeDisplaySet = null; //this.getActiveDisplaySet(displaySets, instance); + const prefetchMethodMap = { + topdown: 'getFirstDisplaySets', + downward: 'getNextDisplaySets', + closest: 'getClosestDisplaySets', + }; + + const prefetchOrder = config.order; + const methodName = prefetchMethodMap[prefetchOrder]; + const getDisplaySets = this[methodName]; + + if (!getDisplaySets) { + if (prefetchOrder) { + log.warn(`Invalid prefetch order configuration (${prefetchOrder})`); + } + + return []; + } + + return getDisplaySets.call( + this, + displaySets, + activeDisplaySet, + config.displaySetCount + ); + } + + getFirstDisplaySets(displaySets, activeDisplaySet, displaySetCount) { + const length = displaySets.length; + const selectedDisplaySets = []; + + for (let i = 0; i < length && displaySetCount; i++) { + const displaySet = displaySets[i]; + + if (displaySet !== activeDisplaySet) { + selectedDisplaySets.push(displaySet); + displaySetCount--; + } + } + + return selectedDisplaySets; + } + + getNextDisplaySets(displaySets, activeDisplaySet, displaySetCount) { + const activeDisplaySetIndex = displaySets.indexOf(activeDisplaySet); + const begin = activeDisplaySetIndex + 1; + const end = Math.min(begin + displaySetCount, displaySets.length); + + return displaySets.slice(begin, end); + } + + getClosestDisplaySets(displaySets, activeDisplaySet, displaySetCount) { + const activeDisplaySetIndex = displaySets.indexOf(activeDisplaySet); + const length = displaySets.length; + const selectedDisplaySets = []; + let left = activeDisplaySetIndex - 1; + let right = activeDisplaySetIndex + 1; + + while ((left >= 0 || right < length) && displaySetCount) { + if (left >= 0) { + selectedDisplaySets.push(displaySets[left]); + displaySetCount--; + left--; + } + + if (right < length && displaySetCount) { + selectedDisplaySets.push(displaySets[right]); + displaySetCount--; + right++; + } + } + + return selectedDisplaySets; + } + + getImageIdsFromDisplaySets(displaySets) { + let imageIds = []; + + displaySets.forEach(displaySet => { + imageIds = imageIds.concat(this.getImageIdsFromDisplaySet(displaySet)); + }); + + return imageIds; + } + + getImageIdsFromDisplaySet(displaySet) { + const imageIds = []; + + // TODO: This duplicates work done by the stack manager + displaySet.images.forEach(image => { + const numFrames = image.numFrames; + if (numFrames > 1) { + for (let i = 0; i < numFrames; i++) { + let imageId = getImageId(image, i); + imageIds.push(imageId); + } + } else { + let imageId = getImageId(image); + imageIds.push(imageId); + } + }); + + return imageIds; + } + + filterCachedImageIds(imageIds) { + return imageIds.filter(imageId => !this.isImageCached(imageId)); + } + + isImageCached(imageId) { + const image = cornerstone.imageCache.imageCache[imageId]; + return image && image.sizeInBytes; + } + + cacheFullHandler = () => { + log.warn('Cache full'); + this.stopPrefetching(); + }; +} diff --git a/platform/core/src/classes/TypeSafeCollection.js b/platform/core/src/classes/TypeSafeCollection.js new file mode 100644 index 00000000000..29eea0fad8f --- /dev/null +++ b/platform/core/src/classes/TypeSafeCollection.js @@ -0,0 +1,508 @@ +import guid from '../utils/guid'; + +/** + * Constants + */ +const PROPERTY_SEPARATOR = '.'; +const ORDER_ASC = 'asc'; +const ORDER_DESC = 'desc'; +const MIN_COUNT = 0x00000000; +const MAX_COUNT = 0x7fffffff; + +/** + * Class Definition + */ +export class TypeSafeCollection { + constructor() { + this._operationCount = MIN_COUNT; + this._elementList = []; + this._handlers = Object.create(null); + } + + /** + * Private Methods + */ + + _invalidate() { + let count = this._operationCount; + this._operationCount = count < MAX_COUNT ? count + 1 : MIN_COUNT; + } + + _elements(silent) { + silent === true || this._operationCount; + return this._elementList; + } + + _elementWithPayload(payload, silent) { + return this._elements(silent).find(item => item.payload === payload); + } + + _elementWithId(id, silent) { + return this._elements(silent).find(item => item.id === id); + } + + _trigger(event, data) { + let handlers = this._handlers; + if (event in handlers) { + handlers = handlers[event]; + if (!(handlers instanceof Array)) { + return; + } + for (let i = 0, limit = handlers.length; i < limit; ++i) { + let handler = handlers[i]; + if (_isFunction(handler)) { + handler.call(null, data); + } + } + } + } + + /** + * Public Methods + */ + + onInsert(callback) { + if (_isFunction(callback)) { + let handlers = this._handlers.insert; + if (!(handlers instanceof Array)) { + handlers = []; + this._handlers.insert = handlers; + } + handlers.push(callback); + } + } + + /** + * Update the payload associated with the given ID to be the new supplied payload. + * @param {string} id The ID of the entry that will be updated. + * @param {any} payload The element that will replace the previous payload. + * @returns {boolean} Returns true if the given ID is present in the collection, false otherwise. + */ + updateById(id, payload) { + let result = false, + found = this._elementWithPayload(payload, true); + if (found) { + // nothing to do since the element is already in the collection... + if (found.id === id) { + // set result to true since the ids match... + result = true; + this._invalidate(); + } + } else { + found = this._elementWithId(id, true); + if (found) { + found.payload = payload; + result = true; + this._invalidate(); + } + } + return result; + } + + /** + * Signal that the given element has been changed by notifying reactive data-source observers. + * This method is basically a means to invalidate the inernal reactive data-source. + * @param {any} payload The element that has been altered. + * @returns {boolean} Returns true if the element is present in the collection, false otherwise. + */ + update(payload) { + let result = false, + found = this._elementWithPayload(payload, true); + if (found) { + // nothing to do since the element is already in the collection... + result = true; + this._invalidate(); + } + return result; + } + + /** + * Insert an element in the collection. On success, the element ID (a unique string) is returned. On failure, returns null. + * A failure scenario only happens when the given payload is already present in the collection. Note that NO exceptions are thrown! + * @param {any} payload The element to be stored. + * @returns {string} The ID of the inserted element or null if the element already exists... + */ + insert(payload) { + let id = null, + found = this._elementWithPayload(payload, true); + if (!found) { + id = guid(); + this._elements(true).push({ id, payload }); + this._invalidate(); + this._trigger('insert', { id, data: payload }); + } + return id; + } + + /** + * Remove all elements from the collection. + * @returns {void} No meaningful value is returned. + */ + removeAll() { + let all = this._elements(true), + length = all.length; + for (let i = length - 1; i >= 0; i--) { + let item = all[i]; + delete item.id; + delete item.payload; + all[i] = null; + } + all.splice(0, length); + this._invalidate(); + } + + /** + * Remove elements from the collection that match the criteria given in the property map. + * @param {Object} propertyMap A property map that will be macthed against all collection elements. + * @returns {Array} A list with all removed elements. + */ + remove(propertyMap) { + let found = this.findAllEntriesBy(propertyMap), + foundCount = found.length, + removed = []; + if (foundCount > 0) { + const all = this._elements(true); + for (let i = foundCount - 1; i >= 0; i--) { + let item = found[i]; + all.splice(item[2], 1); + removed.push(item[0]); + } + this._invalidate(); + } + return removed; + } + + /** + * Provides the ID of the given element inside the collection. + * @param {any} payload The element being searched for. + * @returns {string} The ID of the given element or undefined if the element is not present. + */ + getElementId(payload) { + let found = this._elementWithPayload(payload); + return found && found.id; + } + + /** + * Provides the position of the given element in the internal list returning -1 if the element is not present. + * @param {any} payload The element being searched for. + * @returns {number} The position of the given element in the internal list. If the element is not present -1 is returned. + */ + findById(id) { + let found = this._elementWithId(id); + return found && found.payload; + } + + /** + * Provides the position of the given element in the internal list returning -1 if the element is not present. + * @param {any} payload The element being searched for. + * @returns {number} The position of the given element in the internal list. If the element is not present -1 is returned. + */ + indexOfElement(payload) { + return this._elements().indexOf(this._elementWithPayload(payload, true)); + } + + /** + * Provides the position of the element associated with the given ID in the internal list returning -1 if the element is not present. + * @param {string} id The index of the element. + * @returns {number} The position of the element associated with the given ID in the internal list. If the element is not present -1 is returned. + */ + indexOfId(id) { + return this._elements().indexOf(this._elementWithId(id, true)); + } + + /** + * Provides a list-like approach to the collection returning an element by index. + * @param {number} index The index of the element. + * @returns {any} If out of bounds, undefined is returned. Otherwise the element in the given position is returned. + */ + getElementByIndex(index) { + let found = this._elements()[index >= 0 ? index : -1]; + return found && found.payload; + } + + /** + * Find an element by a criteria defined by the given callback function. + * Attention!!! The reactive source will not be notified if no valid callback is supplied... + * @param {function} callback A callback function which will define the search criteria. The callback + * function will be passed the collection element, its ID and its index in this very order. The callback + * shall return true when its criterea has been fulfilled. + * @returns {any} The matched element or undefined if not match was found. + */ + find(callback) { + let found; + if (_isFunction(callback)) { + found = this._elements().find((item, index) => { + return callback.call(this, item.payload, item.id, index); + }); + } + return found && found.payload; + } + + /** + * Find the first element that strictly matches the specified property map. + * @param {Object} propertyMap A property map that will be macthed against all collection elements. + * @param {Object} options A set of options. Currently only "options.sort" option is supported. + * @param {Object.SortingSpecifier} options.sort An optional sorting specifier. If a sorting specifier is supplied + * but is not valid, an exception will be thrown. + * @returns {Any} The matched element or undefined if not match was found. + */ + findBy(propertyMap, options) { + let found; + if (_isObject(options)) { + // if the "options" argument is provided and is a valid object, + // it must be applied to the dataset before search... + const all = this.all(options); + if (all.length > 0) { + if (_isObject(propertyMap)) { + found = all.find(item => + _compareToPropertyMapStrict(propertyMap, item) + ); + } else { + found = all[0]; // simply extract the first element... + } + } + } else if (_isObject(propertyMap)) { + found = this._elements().find(item => + _compareToPropertyMapStrict(propertyMap, item.payload) + ); + if (found) { + found = found.payload; + } + } + return found; + } + + /** + * Find all elements that strictly match the specified property map. + * Attention!!! The reactive source will not be notified if no valid property map is supplied... + * @param {Object} propertyMap A property map that will be macthed against all collection elements. + * @returns {Array} An array of entries of all elements that match the given criteria. Each set in + * in the array has the following format: [ elementData, elementId, elementIndex ]. + */ + findAllEntriesBy(propertyMap) { + const found = []; + if (_isObject(propertyMap)) { + this._elements().forEach((item, index) => { + if (_compareToPropertyMapStrict(propertyMap, item.payload)) { + // Match! Add it to the found list... + found.push([item.payload, item.id, index]); + } + }); + } + return found; + } + + /** + * Find all elements that match a specified property map. + * Attention!!! The reactive source will not be notified if no valid property map is supplied... + * @param {Object} propertyMap A property map that will be macthed against all collection elements. + * @param {Object} options A set of options. Currently only "options.sort" option is supported. + * @param {Object.SortingSpecifier} options.sort An optional sorting specifier. If a sorting specifier is supplied + * but is not valid, an exception will be thrown. + * @returns {Array} An array with all elements that match the given criteria and sorted in the specified sorting order. + */ + findAllBy(propertyMap, options) { + const found = this.findAllEntriesBy(propertyMap).map(item => item[0]); // Only payload is relevant... + if (_isObject(options)) { + if ('sort' in options) { + _sortListBy(found, options.sort); + } + } + return found; + } + + /** + * Executes the supplied callback function for each element of the collection. + * Attention!!! The reactive source will not be notified if no valid property map is supplied... + * @param {function} callback The callback function to be executed. The callback is passed the element, + * its ID and its index in this very order. + * @returns {void} Nothing is returned. + */ + forEach(callback) { + if (_isFunction(callback)) { + this._elements().forEach((item, index) => { + callback.call(this, item.payload, item.id, index); + }); + } + } + + /** + * Count the number of elements currently in the collection. + * @returns {number} The current number of elements in the collection. + */ + count() { + return this._elements().length; + } + + /** + * Returns a list with all elements of the collection optionally sorted by a sorting specifier criteria. + * @param {Object} options A set of options. Currently only "options.sort" option is supported. + * @param {Object.SortingSpecifier} options.sort An optional sorting specifier. If a sorting specifier is supplied + * but is not valid, an exception will be thrown. + * @returns {Array} An array with all elements stored in the collection. + */ + all(options) { + let list = this._elements().map(item => item.payload); + if (_isObject(options)) { + if ('sort' in options) { + _sortListBy(list, options.sort); + } + } + return list; + } +} + +/** + * Utility Functions + */ + +/** + * Test if supplied argument is a valid object for current class purposes. + * Atention! The underscore version of this function should not be used for performance reasons. + */ +function _isObject(subject) { + return ( + subject instanceof Object || + (typeof subject === 'object' && subject !== null) + ); +} + +/** + * Test if supplied argument is a valid string for current class purposes. + * Atention! The underscore version of this function should not be used for performance reasons. + */ +function _isString(subject) { + return typeof subject === 'string'; +} + +/** + * Test if supplied argument is a valid function for current class purposes. + * Atention! The underscore version of this function should not be used for performance reasons. + */ +function _isFunction(subject) { + return typeof subject === 'function'; +} + +/** + * Shortcut for Object's prototype "hasOwnProperty" method. + */ +const _hasOwnProperty = Object.prototype.hasOwnProperty; + +/** + * Retrieve an object's property value by name. Composite property names (e.g., 'address.country.name') are accepted. + * @param {Object} targetObject The object we want read the property from... + * @param {String} propertyName The property to be read (e.g., 'address.street.name' or 'address.street.number' + * to read object.address.street.name or object.address.street.number, respectively); + * @returns {Any} Returns whatever the property holds or undefined if the property cannot be read or reached. + */ +function _getPropertyValue(targetObject, propertyName) { + let propertyValue; // undefined (the default return value) + if (_isObject(targetObject) && _isString(propertyName)) { + const fragments = propertyName.split(PROPERTY_SEPARATOR); + const fragmentCount = fragments.length; + if (fragmentCount > 0) { + const firstFragment = fragments[0]; + const remainingFragments = + fragmentCount > 1 ? fragments.slice(1).join(PROPERTY_SEPARATOR) : null; + propertyValue = targetObject[firstFragment]; + if (remainingFragments !== null) { + propertyValue = _getPropertyValue(propertyValue, remainingFragments); + } + } + } + return propertyValue; +} + +/** + * Compare a property map with a target object using strict comparison. + * @param {Object} propertyMap The property map whose properties will be used for comparison. Composite + * property names (e.g., 'address.country.name') will be tested against the "resolved" properties from the target object. + * @param {Object} targetObject The target object whose properties will be tested. + * @returns {boolean} Returns true if the properties match, false otherwise. + */ +function _compareToPropertyMapStrict(propertyMap, targetObject) { + let result = false; + // "for in" loops do not thown exceptions for invalid data types... + for (let propertyName in propertyMap) { + if (_hasOwnProperty.call(propertyMap, propertyName)) { + if ( + propertyMap[propertyName] !== + _getPropertyValue(targetObject, propertyName) + ) { + result = false; + break; + } else if (result !== true) { + result = true; + } + } + } + return result; +} + +/** + * Checks if a sorting specifier is valid. + * A valid sorting specifier consists of an array of arrays being each subarray a pair + * in the format ["property name", "sorting order"]. + * The following exemple can be used to sort studies by "date"" and use "time" to break ties in descending order. + * [ [ 'study.date', 'desc' ], [ 'study.time', 'desc' ] ] + * @param {Array} specifiers The sorting specifier to be tested. + * @returns {boolean} Returns true if the specifiers are valid, false otherwise. + */ +function _isValidSortingSpecifier(specifiers) { + let result = true; + if (specifiers instanceof Array && specifiers.length > 0) { + for (let i = specifiers.length - 1; i >= 0; i--) { + const item = specifiers[i]; + if (item instanceof Array) { + const property = item[0]; + const order = item[1]; + if ( + _isString(property) && + (order === ORDER_ASC || order === ORDER_DESC) + ) { + continue; + } + } + result = false; + break; + } + } + return result; +} + +/** + * Sorts an array based on sorting specifier options. + * @param {Array} list The that needs to be sorted. + * @param {Array} specifiers An array of specifiers. Please read isValidSortingSpecifier method definition for further details. + * @returns {void} No value is returned. The array is sorted in place. + */ +function _sortListBy(list, specifiers) { + if (list instanceof Array && _isValidSortingSpecifier(specifiers)) { + const specifierCount = specifiers.length; + list.sort(function _sortListByCallback(a, b) { + // callback name for stack traces... + let index = 0; + while (index < specifierCount) { + const specifier = specifiers[index]; + const property = specifier[0]; + const order = specifier[1] === ORDER_DESC ? -1 : 1; + const aValue = _getPropertyValue(a, property); + const bValue = _getPropertyValue(b, property); + // @TODO: should we check for the types being compared, like: + // ~~ if (typeof aValue !== typeof bValue) continue; + // Not sure because dates, for example, can be correctly compared to numbers... + if (aValue < bValue) { + return order * -1; + } + if (aValue > bValue) { + return order * 1; + } + if (++index >= specifierCount) { + return 0; + } + } + }); + } else { + throw new Error('Invalid Arguments'); + } +} diff --git a/platform/core/src/classes/hotkeys/index.js b/platform/core/src/classes/hotkeys/index.js new file mode 100644 index 00000000000..4db77861a39 --- /dev/null +++ b/platform/core/src/classes/hotkeys/index.js @@ -0,0 +1,17 @@ +// Only imported in environment w/ `window` +// So we need to mock these for tests +import Mousetrap from 'mousetrap'; +import pausePlugin from 'mousetrap/plugins/pause/mousetrap-pause.js'; +import recordPlugin from 'mousetrap/plugins/record/mousetrap-record.js'; + +// import pausePlugin from './pausePlugin.js'; +// import recordPlugin from './recordPlugin.js'; + +// // // TODO: May need to bind these so Mousetrap = this in plugins; +// pausePlugin(Mousetrap); +// recordPlugin(Mousetrap); + +// console.log(Mousetrap); +// console.log(Object.keys(Mousetrap)); + +export default Mousetrap; diff --git a/platform/core/src/classes/hotkeys/pausePlugin.js b/platform/core/src/classes/hotkeys/pausePlugin.js new file mode 100644 index 00000000000..80c5513f038 --- /dev/null +++ b/platform/core/src/classes/hotkeys/pausePlugin.js @@ -0,0 +1,32 @@ +/** + * adds a pause and unpause method to Mousetrap + * this allows you to enable or disable keyboard shortcuts + * without having to reset Mousetrap and rebind everything + * + * https://github.com/ccampbell/mousetrap/blob/master/plugins/pause/mousetrap-pause.js + */ +export default function(Mousetrap) { + var _originalStopCallback = Mousetrap.prototype.stopCallback; + + Mousetrap.prototype.stopCallback = function(e, element, combo) { + var self = this; + + if (self.paused) { + return true; + } + + return _originalStopCallback.call(self, e, element, combo); + }; + + Mousetrap.prototype.pause = function() { + var self = this; + self.paused = true; + }; + + Mousetrap.prototype.unpause = function() { + var self = this; + self.paused = false; + }; + + Mousetrap.init(); +} diff --git a/platform/core/src/classes/hotkeys/recordPlugin.js b/platform/core/src/classes/hotkeys/recordPlugin.js new file mode 100644 index 00000000000..e091039bd12 --- /dev/null +++ b/platform/core/src/classes/hotkeys/recordPlugin.js @@ -0,0 +1,200 @@ +/** + * This extension allows you to record a sequence using Mousetrap. + * {@link https://craig.is/killing/mice} + * + * @author Dan Tao + */ +export default function(Mousetrap) { + /** + * the sequence currently being recorded + * + * @type {Array} + */ + var _recordedSequence = [], + /** + * a callback to invoke after recording a sequence + * + * @type {Function|null} + */ + _recordedSequenceCallback = null, + /** + * a list of all of the keys currently held down + * + * @type {Array} + */ + _currentRecordedKeys = [], + /** + * temporary state where we remember if we've already captured a + * character key in the current combo + * + * @type {boolean} + */ + _recordedCharacterKey = false, + /** + * a handle for the timer of the current recording + * + * @type {null|number} + */ + _recordTimer = null, + /** + * the original handleKey method to override when Mousetrap.record() is + * called + * + * @type {Function} + */ + _origHandleKey = Mousetrap.prototype.handleKey; + + /** + * handles a character key event + * + * @param {string} character + * @param {Array} modifiers + * @param {Event} e + * @returns void + */ + function _handleKey(character, modifiers, e) { + var self = this; + + if (!self.recording) { + _origHandleKey.apply(self, arguments); + return; + } + + // remember this character if we're currently recording a sequence + if (e.type == 'keydown') { + if (character.length === 1 && _recordedCharacterKey) { + _recordCurrentCombo(); + } + + for (i = 0; i < modifiers.length; ++i) { + _recordKey(modifiers[i]); + } + _recordKey(character); + + // once a key is released, all keys that were held down at the time + // count as a keypress + } else if (e.type == 'keyup' && _currentRecordedKeys.length > 0) { + _recordCurrentCombo(); + } + } + + /** + * marks a character key as held down while recording a sequence + * + * @param {string} key + * @returns void + */ + function _recordKey(key) { + var i; + + // one-off implementation of Array.indexOf, since IE6-9 don't support it + for (i = 0; i < _currentRecordedKeys.length; ++i) { + if (_currentRecordedKeys[i] === key) { + return; + } + } + + _currentRecordedKeys.push(key); + + if (key.length === 1) { + _recordedCharacterKey = true; + } + } + + /** + * marks whatever key combination that's been recorded so far as finished + * and gets ready for the next combo + * + * @returns void + */ + function _recordCurrentCombo() { + _recordedSequence.push(_currentRecordedKeys); + _currentRecordedKeys = []; + _recordedCharacterKey = false; + _restartRecordTimer(); + } + + /** + * ensures each combo in a sequence is in a predictable order and formats + * key combos to be '+'-delimited + * + * modifies the sequence in-place + * + * @param {Array} sequence + * @returns void + */ + function _normalizeSequence(sequence) { + var i; + + for (i = 0; i < sequence.length; ++i) { + sequence[i].sort(function(x, y) { + // modifier keys always come first, in alphabetical order + if (x.length > 1 && y.length === 1) { + return -1; + } else if (x.length === 1 && y.length > 1) { + return 1; + } + + // character keys come next (list should contain no duplicates, + // so no need for equality check) + return x > y ? 1 : -1; + }); + + sequence[i] = sequence[i].join('+'); + } + } + + /** + * finishes the current recording, passes the recorded sequence to the stored + * callback, and sets Mousetrap.handleKey back to its original function + * + * @returns void + */ + function _finishRecording() { + if (_recordedSequenceCallback) { + _normalizeSequence(_recordedSequence); + _recordedSequenceCallback(_recordedSequence); + } + + // reset all recorded state + _recordedSequence = []; + _recordedSequenceCallback = null; + _currentRecordedKeys = []; + } + + /** + * called to set a 1 second timeout on the current recording + * + * this is so after each key press in the sequence the recording will wait for + * 1 more second before executing the callback + * + * @returns void + */ + function _restartRecordTimer() { + clearTimeout(_recordTimer); + _recordTimer = setTimeout(_finishRecording, 1000); + } + + /** + * records the next sequence and passes it to a callback once it's + * completed + * + * @param {Function} callback + * @returns void + */ + Mousetrap.prototype.record = function(callback) { + var self = this; + self.recording = true; + _recordedSequenceCallback = function() { + self.recording = false; + callback.apply(self, arguments); + }; + }; + + Mousetrap.prototype.handleKey = function() { + var self = this; + _handleKey.apply(self, arguments); + }; + + Mousetrap.init(); +} diff --git a/platform/core/src/classes/index.js b/platform/core/src/classes/index.js new file mode 100644 index 00000000000..87977ac1184 --- /dev/null +++ b/platform/core/src/classes/index.js @@ -0,0 +1,61 @@ +import { + InstanceMetadata, + SeriesMetadata, + StudyMetadata, + StudySummary, +} from './metadata'; + +import CommandsManager from './CommandsManager.js'; +import { DICOMFileLoadingListener } from './StudyLoadingListener'; +import HotkeysManager from './HotkeysManager.js'; +import ImageSet from './ImageSet'; +import MetadataProvider from './MetadataProvider.js'; +import OHIFError from './OHIFError.js'; +import { OHIFStudyMetadataSource } from './OHIFStudyMetadataSource'; +import { StackLoadingListener } from './StudyLoadingListener'; +import { StudyLoadingListener } from './StudyLoadingListener'; +import { StudyMetadataSource } from './StudyMetadataSource'; +import { StudyPrefetcher } from './StudyPrefetcher'; +import { TypeSafeCollection } from './TypeSafeCollection'; + +//import { StudySummary } from './metadata/StudySummary'; + +export { + OHIFStudyMetadataSource, + MetadataProvider, + CommandsManager, + HotkeysManager, + ImageSet, + StudyPrefetcher, + //StudyLoadingListener, + StackLoadingListener, + DICOMFileLoadingListener, + StudyMetadata, + SeriesMetadata, + InstanceMetadata, + StudySummary, + TypeSafeCollection, + OHIFError, + StudyMetadataSource, +}; + +const classes = { + OHIFStudyMetadataSource, + MetadataProvider, + CommandsManager, + HotkeysManager, + ImageSet, + StudyPrefetcher, + StudyLoadingListener, + StackLoadingListener, + DICOMFileLoadingListener, + StudyMetadata, + SeriesMetadata, + InstanceMetadata, + StudySummary, + TypeSafeCollection, + OHIFError, + StudyMetadataSource, +}; + +export default classes; diff --git a/platform/core/src/classes/metadata/InstanceMetadata.js b/platform/core/src/classes/metadata/InstanceMetadata.js new file mode 100644 index 00000000000..4b59852ae94 --- /dev/null +++ b/platform/core/src/classes/metadata/InstanceMetadata.js @@ -0,0 +1,225 @@ +import { Metadata } from './Metadata'; +import OHIFError from '../OHIFError.js'; + +/** + * ATTENTION! This class should never depend on StudyMetadata or SeriesMetadata classes as this could + * possibly cause circular dependency issues. + */ + +const UNDEFINED = 'undefined'; +const STRING = 'string'; +const STUDY_INSTANCE_UID = 'x0020000d'; +const SERIES_INSTANCE_UID = 'x0020000e'; + +export class InstanceMetadata extends Metadata { + constructor(data, uid) { + super(data, uid); + // Initialize Private Properties + Object.defineProperties(this, { + _sopInstanceUID: { + configurable: true, // configurable so that it can be redefined in sub-classes... + enumerable: false, + writable: true, + value: null, + }, + _imageId: { + configurable: true, // configurable so that it can be redefined in sub-classes... + enumerable: false, + writable: true, + value: null, + }, + }); + // Initialize Public Properties + this._definePublicProperties(); + } + + /** + * Private Methods + */ + + /** + * Define Public Properties + * This method should only be called during initialization (inside the class constructor) + */ + _definePublicProperties() { + /** + * Property: this.sopInstanceUID + * Same as this.getSOPInstanceUID() + * It's specially useful in contexts where a method call is not suitable like in search criteria. For example: + * sopInstanceCollection.findBy({ + * sopInstanceUID: '1.2.3.4.5.6.77777.8888888.99999999999.0' + * }); + */ + Object.defineProperty(this, 'sopInstanceUID', { + configurable: false, + enumerable: false, + get: function() { + return this.getSOPInstanceUID(); + }, + }); + } + + /** + * Public Methods + */ + + /** + * Returns the StudyInstanceUID of the current instance. This method is basically a shorthand the full "getTagValue" method call. + */ + getStudyInstanceUID() { + return this.getTagValue(STUDY_INSTANCE_UID, null); + } + + /** + * Returns the SeriesInstanceUID of the current instance. This method is basically a shorthand the full "getTagValue" method call. + */ + getSeriesInstanceUID() { + return this.getTagValue(SERIES_INSTANCE_UID, null); + } + + /** + * Returns the SOPInstanceUID of the current instance. + */ + getSOPInstanceUID() { + return this._sopInstanceUID; + } + + // @TODO: Improve this... (E.g.: blob data) + getStringValue(tagOrProperty, index, defaultValue) { + let value = this.getTagValue(tagOrProperty, defaultValue); + + if (typeof value !== STRING && typeof value !== UNDEFINED) { + value = value.toString(); + } + + return InstanceMetadata.getIndexedValue(value, index, defaultValue); + } + + // @TODO: Improve this... (E.g.: blob data) + getFloatValue(tagOrProperty, index, defaultValue) { + let value = this.getTagValue(tagOrProperty, defaultValue); + value = InstanceMetadata.getIndexedValue(value, index, defaultValue); + + if (value instanceof Array) { + value.forEach((val, idx) => { + value[idx] = parseFloat(val); + }); + + return value; + } + + return typeof value === STRING ? parseFloat(value) : value; + } + + // @TODO: Improve this... (E.g.: blob data) + getIntValue(tagOrProperty, index, defaultValue) { + let value = this.getTagValue(tagOrProperty, defaultValue); + value = InstanceMetadata.getIndexedValue(value, index, defaultValue); + + if (value instanceof Array) { + value.forEach((val, idx) => { + value[idx] = parseFloat(val); + }); + + return value; + } + + return typeof value === STRING ? parseInt(value) : value; + } + + /** + * @deprecated Please use getTagValue instead. + */ + getRawValue(tagOrProperty, defaultValue) { + return this.getTagValue(tagOrProperty, defaultValue); + } + + /** + * This function should be overriden by specialized classes in order to allow client libraries or viewers to take advantage of the Study Metadata API. + */ + getTagValue(tagOrProperty, defaultValue) { + /** + * Please override this method on a specialized class. + */ + throw new OHIFError( + 'InstanceMetadata::getTagValue is not overriden. Please, override it in a specialized class. See OHIFInstanceMetadata for example' + ); + } + + /** + * Compares the current instance with another one. + * @param {InstanceMetadata} instance An instance of the InstanceMetadata class. + * @returns {boolean} Returns true if both instances refer to the same instance. + */ + equals(instance) { + const self = this; + return ( + instance === self || + (instance instanceof InstanceMetadata && + instance.getSOPInstanceUID() === self.getSOPInstanceUID()) + ); + } + + /** + * Check if the tagOrProperty exists + * @param {String} tagOrProperty tag or property be checked + * @return {Boolean} True if the tag or property exists or false if doesn't + */ + tagExists(tagOrProperty) { + /** + * Please override this method + */ + throw new OHIFError( + 'InstanceMetadata::tagExists is not overriden. Please, override it in a specialized class. See OHIFInstanceMetadata for example' + ); + } + + /** + * Get custom image id of a sop instance + * @return {Any} sop instance image id + */ + getImageId(frame) { + /** + * Please override this method + */ + throw new OHIFError( + 'InstanceMetadata::getImageId is not overriden. Please, override it in a specialized class. See OHIFInstanceMetadata for example' + ); + } + + /** + * Static Methods + */ + + /** + * Get an value based that can be index based. This function is called by all getters. See above functions. + * - If value is a String and has indexes: + * - If undefined index: returns an array of the split values. + * - If defined index: + * - If invalid: returns defaultValue + * - If valid: returns the indexed value + * - If value is not a String, returns default value. + */ + static getIndexedValue(value, index, defaultValue) { + let result = defaultValue; + + if (typeof value === STRING) { + const hasIndexValues = value.indexOf('\\') !== -1; + + result = value; + + if (hasIndexValues) { + const splitValues = value.split('\\'); + if (Metadata.isValidIndex(index)) { + const indexedValue = splitValues[index]; + + result = typeof indexedValue !== STRING ? defaultValue : indexedValue; + } else { + result = splitValues; + } + } + } + + return result; + } +} diff --git a/platform/core/src/classes/metadata/Metadata.js b/platform/core/src/classes/metadata/Metadata.js new file mode 100644 index 00000000000..3bf8dc8dfb2 --- /dev/null +++ b/platform/core/src/classes/metadata/Metadata.js @@ -0,0 +1,127 @@ +/** + * Constants + */ + +const STRING = 'string'; +const NUMBER = 'number'; +const FUNCTION = 'function'; +const OBJECT = 'object'; + +/** + * Class Definition + */ + +export class Metadata { + /** + * Constructor and Instance Methods + */ + + constructor(data, uid) { + // Define the main "_data" private property as an immutable property. + // IMPORTANT: This property can only be set during instance construction. + Object.defineProperty(this, '_data', { + configurable: false, + enumerable: false, + writable: false, + value: data, + }); + + // Define the main "_uid" private property as an immutable property. + // IMPORTANT: This property can only be set during instance construction. + Object.defineProperty(this, '_uid', { + configurable: false, + enumerable: false, + writable: false, + value: uid, + }); + + // Define "_custom" properties as an immutable property. + // IMPORTANT: This property can only be set during instance construction. + Object.defineProperty(this, '_custom', { + configurable: false, + enumerable: false, + writable: false, + value: Object.create(null), + }); + } + + getData() { + return this._data; + } + + getDataProperty(propertyName) { + let propertyValue; + const _data = this._data; + if ( + _data instanceof Object || + (typeof _data === OBJECT && _data !== null) + ) { + propertyValue = _data[propertyName]; + } + return propertyValue; + } + + /** + * Get unique object ID + */ + getObjectID() { + return this._uid; + } + + /** + * Set custom attribute value + * @param {String} attribute Custom attribute name + * @param {Any} value Custom attribute value + */ + setCustomAttribute(attribute, value) { + this._custom[attribute] = value; + } + + /** + * Get custom attribute value + * @param {String} attribute Custom attribute name + * @return {Any} Custom attribute value + */ + getCustomAttribute(attribute) { + return this._custom[attribute]; + } + + /** + * Check if a custom attribute exists + * @param {String} attribute Custom attribute name + * @return {Boolean} True if custom attribute exists or false if not + */ + customAttributeExists(attribute) { + return attribute in this._custom; + } + + /** + * Set custom attributes in batch mode. + * @param {Object} attributeMap An object whose own properties will be used as custom attributes. + */ + setCustomAttributes(attributeMap) { + const _hasOwn = Object.prototype.hasOwnProperty; + const _custom = this._custom; + for (let attribute in attributeMap) { + if (_hasOwn.call(attributeMap, attribute)) { + _custom[attribute] = attributeMap[attribute]; + } + } + } + + /** + * Static Methods + */ + + static isValidUID(uid) { + return typeof uid === STRING && uid.length > 0; + } + + static isValidIndex(index) { + return typeof index === NUMBER && index >= 0 && (index | 0) === index; + } + + static isValidCallback(callback) { + return typeof callback === FUNCTION; + } +} diff --git a/platform/core/src/classes/metadata/OHIFInstanceMetadata.js b/platform/core/src/classes/metadata/OHIFInstanceMetadata.js new file mode 100644 index 00000000000..8fc5f42a5da --- /dev/null +++ b/platform/core/src/classes/metadata/OHIFInstanceMetadata.js @@ -0,0 +1,124 @@ +import { InstanceMetadata } from './InstanceMetadata'; +import { DICOMTagDescriptions } from '../../utils/DICOMTagDescriptions.js'; +import getImageId from '../../utils/getImageId.js'; + +export class OHIFInstanceMetadata extends InstanceMetadata { + /** + * @param {Object} Instance object. + */ + constructor(data, series, study, uid) { + super(data, uid); + this.init(series, study); + } + + init(series, study) { + const instance = this.getData(); + + // Initialize Private Properties + Object.defineProperties(this, { + _sopInstanceUID: { + configurable: false, + enumerable: false, + writable: false, + value: instance.sopInstanceUid, + }, + _study: { + configurable: false, + enumerable: false, + writable: false, + value: study, + }, + _series: { + configurable: false, + enumerable: false, + writable: false, + value: series, + }, + _instance: { + configurable: false, + enumerable: false, + writable: false, + value: instance, + }, + _cache: { + configurable: false, + enumerable: false, + writable: false, + value: Object.create(null), + }, + }); + } + + // Override + getTagValue(tagOrProperty, defaultValue, bypassCache) { + // check if this property has been cached... + if (tagOrProperty in this._cache && bypassCache !== true) { + return this._cache[tagOrProperty]; + } + + const propertyName = OHIFInstanceMetadata.getPropertyName(tagOrProperty); + + // Search property value in the whole study metadata chain... + let rawValue; + if (propertyName in this._instance) { + rawValue = this._instance[propertyName]; + } else if (propertyName in this._series) { + rawValue = this._series[propertyName]; + } else if (propertyName in this._study) { + rawValue = this._study[propertyName]; + } + + if (rawValue !== void 0) { + // if rawValue value is not undefined, cache result... + this._cache[tagOrProperty] = rawValue; + return rawValue; + } + + return defaultValue; + } + + // Override + tagExists(tagOrProperty) { + const propertyName = OHIFInstanceMetadata.getPropertyName(tagOrProperty); + + return ( + propertyName in this._instance || + propertyName in this._series || + propertyName in this._study + ); + } + + // Override + getImageId(frame, thumbnail) { + // If _imageID is not cached, create it + if (this._imageId === null) { + this._imageId = getImageId(this.getData(), frame, thumbnail); + } + + return this._imageId; + } + + /** + * Static methods + */ + + // @TODO: The current mapping of standard DICOM property names to local property names is not optimal. + // The inconsistency in property naming makes this function increasingly complex. + // A possible solution to improve this would be adapt retriveMetadata names to use DICOM standard names as in dicomTagDescriptions.js + static getPropertyName(tagOrProperty) { + let propertyName; + const tagInfo = DICOMTagDescriptions.find(tagOrProperty); + + if (tagInfo !== void 0) { + // This function tries to translate standard DICOM property names into local naming convention. + propertyName = tagInfo.keyword + .replace(/^SOP/, 'sop') + .replace(/UID$/, 'Uid') + .replace(/ID$/, 'Id'); + propertyName = + propertyName.charAt(0).toLowerCase() + propertyName.substr(1); + } + + return propertyName; + } +} diff --git a/platform/core/src/classes/metadata/OHIFSeriesMetadata.js b/platform/core/src/classes/metadata/OHIFSeriesMetadata.js new file mode 100644 index 00000000000..668a686e139 --- /dev/null +++ b/platform/core/src/classes/metadata/OHIFSeriesMetadata.js @@ -0,0 +1,29 @@ +import { SeriesMetadata } from './SeriesMetadata'; +import { OHIFInstanceMetadata } from './OHIFInstanceMetadata'; + +export class OHIFSeriesMetadata extends SeriesMetadata { + /** + * @param {Object} Series object. + */ + constructor(data, study, uid) { + super(data, uid); + this.init(study); + } + + init(study) { + const series = this.getData(); + + // define "_seriesInstanceUID" protected property... + Object.defineProperty(this, '_seriesInstanceUID', { + configurable: false, + enumerable: false, + writable: false, + value: series.seriesInstanceUid, + }); + + // populate internal list of instances... + series.instances.forEach(instance => { + this.addInstance(new OHIFInstanceMetadata(instance, series, study)); + }); + } +} diff --git a/platform/core/src/classes/metadata/OHIFStudyMetadata.js b/platform/core/src/classes/metadata/OHIFStudyMetadata.js new file mode 100644 index 00000000000..e5396dd48a8 --- /dev/null +++ b/platform/core/src/classes/metadata/OHIFStudyMetadata.js @@ -0,0 +1,29 @@ +import { StudyMetadata } from './StudyMetadata'; +import { OHIFSeriesMetadata } from './OHIFSeriesMetadata'; + +export class OHIFStudyMetadata extends StudyMetadata { + /** + * @param {Object} Study object. + */ + constructor(data, uid) { + super(data, uid); + this.init(); + } + + init() { + const study = this.getData(); + + // define "_studyInstanceUID" protected property + Object.defineProperty(this, '_studyInstanceUID', { + configurable: false, + enumerable: false, + writable: false, + value: study.studyInstanceUid, + }); + + // populate internal list of series + study.seriesList.forEach(series => { + this.addSeries(new OHIFSeriesMetadata(series, study)); + }); + } +} diff --git a/platform/core/src/classes/metadata/README.md b/platform/core/src/classes/metadata/README.md new file mode 100644 index 00000000000..264b754df6b --- /dev/null +++ b/platform/core/src/classes/metadata/README.md @@ -0,0 +1,145 @@ +# Study Metadata Module + +This module defines the API/Data-Model by which OHIF Viewerbase package and +possibly distinct viewer implementations can access studies metadata. This +module does not attempt to define any means of _loading_ study metadata from any +data end-point but only how the data that has been previously loaded into the +application context will be accessed by any of the routines or algorithm +implementations that need the data. + +## Intro + +For various reasons like sorting, grouping or simply rendering study +information, OHIF Viewerbase package and applications depending on it usually +have the need to access study metadata. Before the current initiative there was +no uniform way of achieving that since each implementation provides study +metadata on its own specific ways. The application and the package itself needed +to have a deep knowledge of the data structures provided by the data endpoint to +perform any of the operations mentioned above, meaning that any data access code +needed to be adapted or rewritten. + +The intent of the current module is to provide a fairly consistent and flexible +API/Data-Model by which OHIF Viewerbase package (and different viewer +implementations that depend on it) can manipulate DICOM matadata retrieved from +distinct data end points (e.g., a proprietary back end servers) in uniform ways +with minor to no modifications needed. + +## Implementation + +The current API implementation defines three classes of objects: +`StudyMetadata`, `SeriesMetadata` and `InstanceMetadata`. Inside OHIF Viewerbase +package, every access to Study, Series or SOP Instance metadata is achieved by +the interface exposed by these three classes. By inheriting from them and +overriding or extending their methods, different applications with different +data models can adapt even the most peculiar data structures to the uniform +interface defined by those classes. Together these classes define a flexible and +extensible data manipulation layer leaving routines and algorithms that depend +on that data untouched. + +## Design Decisions & "_Protected_" Members + +In order to provide for good programming practices, attributes and methods meant +to be used exclusively by the classes themselves (for internal purposes only) +were written with an initial '\_' character, being thus treated as "_protected_" +members. The idea behind this practice was never to hide them from the +programmers (what makes debugging tasks painful) but only advise for something +that's not part of the official public API and thus should not be relied on. +Usage of "protected" members makes the code less readable and prone to +compatibility issues. + +As an example, the initial implementation of the `StudyMetadata` class defined +the attribute `_studyInstanceUID` and the method `getStudyInstanceUID`. This +implies that whenever the _StudyInstanceUID_ of a given study needs to be +retrieved the `getStudyInstanceUID` method should be called instead of directly +accessing the attribute `_studyInstanceUID` (which might not even be populated +since `getStudyInstanceUID` can be possiblity overriden by a subclass to satisfy +specific implementation needs, leaving the attribute `_studyInstanceUID` +unused). + +Ex: + +```javascript +let studyUID = myStudy.getStudyInstanceUID(); // GOOD! :-) +[ ... ] +let otherStudyUID = anotherStudy._studyInstanceUID; // BAD... :-( +``` + +Another important topic is the preference of _methods_ over _attributes_ on the +public API. This design decision was made to ensure extensibility and +flexibility (methods are extensible while standalone attributes are not, and can +be adapted – through overrides, for example – to support even the most peculiar +data models) even though the overhead a few additional function calls may incur. + +## Abstract Classes + +Some classes defined in this module are "_abstract_" classes (even though +JavaScript does not _officially_ support such programming facility). They are +_abstract_ in the sense that a few methods (very important ones, by the way) +were left "_blank_" (unimplemented, or more precisely implemented as empty NOP +functions) in order to be implemented by specialized subclasses. Methods +believed to be more generic were implemented in an attempt to satify most +implementation needs but nothing prevents a subclass from overriding them as +well (again, flexibility and extensibility are design goals). Most implemented +methods rely on the implementation of an unimplemented method. For example, the +method `getStringValue` from `InstanceMetadata` class, which has indeed been +implemented and is meant to retrieve a metadata value as a string, internally +calls the `getRawValue` method which _was NOT implemented_ and is meant to query +the internal data structures for the requested metadata value and return it _as +is_. Used in that way, an application would not benefit much from the already +implemented methods. On the other hand, by simply overriding the `getRawValue` +method on a specialized class to deal with the intrinsics of its internal data +structures, this very application would now benefit from all already implemented +methods. + +The following code snippet tries to illustrate the idea: + +```javascript + +// -- InstanceMetadata.js + +class InstanceMetadata { + [ ... ] + getRawValue(tagOrProperty, defaultValue) { + // Please implement this method in a specialized subclass... + } + [ ... ] + getStringValue(tagOrProperty, index, defaultValue) { + let rawValue = this.getRawValue(tagOrProperty, ''); + // parse the returned value into a string... + [ ... ] + return stringValue; + } + [ ... ] +} + +// -- MyFancyAppInstanceMetadata.js + +class MyFancyAppInstanceMetadata extends InstanceMetadata { + // Overriding this method will make all methods implemented in the super class + // that rely on it to be immediately available... + getRawValue(tagOrProperty, defaultValue) { + let rawValue; + // retrieve raw value from internal data structures... + [ ... ] + return rawValue; + } +} + +// -- main.js + +[ ... ] +let sopInstaceMetadata = new MyFancyAppInstanceMetadata(myInternalData); +if (sopInstaceMetadata instanceof MyFancyAppInstanceMetadata) { // true + // this code will be executed... +} +if (sopInstaceMetadata instanceof InstanceMetadata) { // also true + // this code will also be executed... +} +// The following will also work since the internal "getRawValue" call inside +// "getStringValue" method will now be satisfied... (thanks to the override) +let patientName = sopInstaceMetadata.getStringValue('PatientName', ''); +[ ... ] + +``` + +_Copyright © 2016 nucleushealth™. All rights reserved_ diff --git a/platform/core/src/classes/metadata/SeriesMetadata.js b/platform/core/src/classes/metadata/SeriesMetadata.js new file mode 100644 index 00000000000..84ae4a037e9 --- /dev/null +++ b/platform/core/src/classes/metadata/SeriesMetadata.js @@ -0,0 +1,192 @@ +import { Metadata } from './Metadata'; +import { InstanceMetadata } from './InstanceMetadata'; + +export class SeriesMetadata extends Metadata { + constructor(data, uid) { + super(data, uid); + // Initialize Private Properties + Object.defineProperties(this, { + _seriesInstanceUID: { + configurable: true, // configurable so that it can be redefined in sub-classes... + enumerable: false, + writable: true, + value: null, + }, + _instances: { + configurable: false, + enumerable: false, + writable: false, + value: [], + }, + _firstInstance: { + configurable: false, + enumerable: false, + writable: true, + value: null, + }, + }); + // Initialize Public Properties + this._definePublicProperties(); + } + + /** + * Private Methods + */ + + /** + * Define Public Properties + * This method should only be called during initialization (inside the class constructor) + */ + _definePublicProperties() { + /** + * Property: this.seriesInstanceUID + * Same as this.getSeriesInstanceUID() + * It's specially useful in contexts where a method call is not suitable like in search criteria. For example: + * seriesCollection.findBy({ + * seriesInstanceUID: '1.2.3.4.5.6.77777.8888888.99999999999.0' + * }); + */ + Object.defineProperty(this, 'seriesInstanceUID', { + configurable: false, + enumerable: false, + get: function() { + return this.getSeriesInstanceUID(); + }, + }); + } + + /** + * Public Methods + */ + + /** + * Returns the SeriesInstanceUID of the current series. + */ + getSeriesInstanceUID() { + return this._seriesInstanceUID; + } + + /** + * Append an instance to the current series. + * @param {InstanceMetadata} instance The instance to be added to the current series. + * @returns {boolean} Returns true on success, false otherwise. + */ + addInstance(instance) { + let result = false; + if ( + instance instanceof InstanceMetadata && + this.getInstanceByUID(instance.getSOPInstanceUID()) === void 0 + ) { + this._instances.push(instance); + result = true; + } + return result; + } + + /** + * Get the first instance of the current series retaining a consistent result across multiple calls. + * @return {InstanceMetadata} An instance of the InstanceMetadata class or null if it does not exist. + */ + getFirstInstance() { + let instance = this._firstInstance; + if (!(instance instanceof InstanceMetadata)) { + instance = null; + const found = this.getInstanceByIndex(0); + if (found instanceof InstanceMetadata) { + this._firstInstance = found; + instance = found; + } + } + return instance; + } + + /** + * Find an instance by index. + * @param {number} index An integer representing a list index. + * @returns {InstanceMetadata} Returns a InstanceMetadata instance when found or undefined otherwise. + */ + getInstanceByIndex(index) { + let found; // undefined by default... + if (Metadata.isValidIndex(index)) { + found = this._instances[index]; + } + return found; + } + + /** + * Find an instance by SOPInstanceUID. + * @param {string} uid An UID string. + * @returns {InstanceMetadata} Returns a InstanceMetadata instance when found or undefined otherwise. + */ + getInstanceByUID(uid) { + let found; // undefined by default... + if (Metadata.isValidUID(uid)) { + found = this._instances.find(instance => { + return instance.getSOPInstanceUID() === uid; + }); + } + return found; + } + + /** + * Retrieve the number of instances within the current series. + * @returns {number} The number of instances in the current series. + */ + getInstanceCount() { + return this._instances.length; + } + + /** + * Invokes the supplied callback for each instance in the current series passing + * two arguments: instance (an InstanceMetadata instance) and index (the integer + * index of the instance within the current series) + * @param {function} callback The callback function which will be invoked for each instance in the series. + * @returns {undefined} Nothing is returned. + */ + forEachInstance(callback) { + if (Metadata.isValidCallback(callback)) { + this._instances.forEach((instance, index) => { + callback.call(null, instance, index); + }); + } + } + + /** + * Find the index of an instance inside the series. + * @param {InstanceMetadata} instance An instance of the SeriesMetadata class. + * @returns {number} The index of the instance inside the series or -1 if not found. + */ + indexOfInstance(instance) { + return this._instances.indexOf(instance); + } + + /** + * Search the associated instances using the supplied callback as criteria. The callback is passed + * two arguments: instance (a InstanceMetadata instance) and index (the integer + * index of the instance within its series) + * @param {function} callback The callback function which will be invoked for each instance. + * @returns {InstanceMetadata|undefined} If an instance is found based on callback criteria it + * returns a InstanceMetadata. "undefined" is returned otherwise + */ + findInstance(callback) { + if (Metadata.isValidCallback(callback)) { + return this._instances.find((instance, index) => { + return callback.call(null, instance, index); + }); + } + } + + /** + * Compares the current series with another one. + * @param {SeriesMetadata} series An instance of the SeriesMetadata class. + * @returns {boolean} Returns true if both instances refer to the same series. + */ + equals(series) { + const self = this; + return ( + series === self || + (series instanceof SeriesMetadata && + series.getSeriesInstanceUID() === self.getSeriesInstanceUID()) + ); + } +} diff --git a/platform/core/src/classes/metadata/StudyMetadata.js b/platform/core/src/classes/metadata/StudyMetadata.js new file mode 100644 index 00000000000..20bd1709781 --- /dev/null +++ b/platform/core/src/classes/metadata/StudyMetadata.js @@ -0,0 +1,661 @@ +// - createStacks +import DICOMWeb from './../../DICOMWeb'; +import ImageSet from './../ImageSet'; +import { InstanceMetadata } from './InstanceMetadata'; +import { Metadata } from './Metadata'; +import OHIFError from '../OHIFError'; +import { SeriesMetadata } from './SeriesMetadata'; +// - createStacks +import { api } from 'dicomweb-client'; +// - createStacks +import { isImage } from './../../utils/isImage'; + +export class StudyMetadata extends Metadata { + constructor(data, uid) { + super(data, uid); + // Initialize Private Properties + Object.defineProperties(this, { + _studyInstanceUID: { + configurable: true, // configurable so that it can be redefined in sub-classes... + enumerable: false, + writable: true, + value: null, + }, + _series: { + configurable: false, + enumerable: false, + writable: false, + value: [], + }, + _displaySets: { + configurable: false, + enumerable: false, + writable: false, + value: [], + }, + _firstSeries: { + configurable: false, + enumerable: false, + writable: true, + value: null, + }, + _firstInstance: { + configurable: false, + enumerable: false, + writable: true, + value: null, + }, + }); + // Initialize Public Properties + this._definePublicProperties(); + } + + /** + * Private Methods + */ + + /** + * Define Public Properties + * This method should only be called during initialization (inside the class constructor) + */ + _definePublicProperties() { + /** + * Property: this.studyInstanceUID + * Same as this.getStudyInstanceUID() + * It's specially useful in contexts where a method call is not suitable like in search criteria. For example: + * studyCollection.findBy({ + * studyInstanceUID: '1.2.3.4.5.6.77777.8888888.99999999999.0' + * }); + */ + Object.defineProperty(this, 'studyInstanceUID', { + configurable: false, + enumerable: false, + get: function() { + return this.getStudyInstanceUID(); + }, + }); + } + + /** + * Public Methods + */ + + /** + * Getter for displaySets + * @return {Array} Array of display set object + */ + getDisplaySets() { + return this._displaySets.slice(); + } + + /** + * Creates a set of series to be placed in the Study Metadata + * The series that appear in the Study Metadata must represent + * imaging modalities. + * + * Furthermore, for drag/drop functionality, + * it is easiest if the stack objects also contain information about + * which study they are linked to. + * + * @param {StudyMetadata} study The study instance metadata to be used + * @returns {Array} An array of series to be placed in the Study Metadata + */ + createDisplaySets(sopClassHandlerModules) { + const study = this; + const displaySets = []; + const anyDisplaySets = study.getSeriesCount(); + const anySopClassHandlerModules = + sopClassHandlerModules && sopClassHandlerModules.length > 0; + + if (!anyDisplaySets) { + return displaySets; + } + + // Loop through the series (SeriesMetadata) + this.forEachSeries(series => { + const anyInstances = series.getInstanceCount() > 0; + if (!anyInstances) { + return; + } + + const sopClassUids = getSopClassUids(series); + + if (anySopClassHandlerModules) { + const displaySet = _getDisplaySetFromSopClassModule( + sopClassHandlerModules, + series, + study, + sopClassUids + ); + + if (displaySet) { + displaySets.push(displaySet); + + return; + } + } + + // WE NEED A BETTER WAY TO NOTE THAT THIS IS THE DEFAULT BEHAVIOR FOR LOADING + // A DISPLAY SET IF THERE IS NO MATCHING SOP CLASS PLUGIN + + // Search through the instances (InstanceMetadata object) of this series + // Split Multi-frame instances and Single-image modalities + // into their own specific display sets. Place the rest of each + // series into another display set. + const stackableInstances = []; + series.forEachInstance(instance => { + // All imaging modalities must have a valid value for sopClassUid (x00080016) or rows (x00280010) + if ( + !isImage(instance.getRawValue('x00080016')) && + !instance.getRawValue('x00280010') + ) { + return; + } + + let displaySet; + + if (isMultiFrame(instance)) { + displaySet = makeDisplaySet(series, [instance]); + displaySet.setAttributes({ + sopClassUids, + isClip: true, + seriesInstanceUid: series.getSeriesInstanceUID(), + studyInstanceUid: study.getStudyInstanceUID(), // Include the study instance Uid for drag/drop purposes + numImageFrames: instance.getRawValue('x00280008'), // Override the default value of instances.length + instanceNumber: instance.getRawValue('x00200013'), // Include the instance number + acquisitionDatetime: instance.getRawValue('x0008002a'), // Include the acquisition datetime + }); + displaySets.push(displaySet); + } else if (isSingleImageModality(instance.modality)) { + displaySet = makeDisplaySet(series, [instance]); + displaySet.setAttributes({ + sopClassUids, + studyInstanceUid: study.getStudyInstanceUID(), // Include the study instance Uid + seriesInstanceUid: series.getSeriesInstanceUID(), + instanceNumber: instance.getRawValue('x00200013'), // Include the instance number + acquisitionDatetime: instance.getRawValue('x0008002a'), // Include the acquisition datetime + }); + displaySets.push(displaySet); + } else { + stackableInstances.push(instance); + } + }); + + if (stackableInstances.length) { + const displaySet = makeDisplaySet(series, stackableInstances); + displaySet.setAttribute( + 'studyInstanceUid', + study.getStudyInstanceUID() + ); + displaySet.setAttributes({ + sopClassUids, + }); + displaySets.push(displaySet); + } + }); + + // TODO + displaySets.sort(_sortBySeriesNumber); + + return displaySets; + } + + /** + * Set display sets + * @param {Array} displaySets Array of display sets (ImageSet[]) + */ + setDisplaySets(displaySets) { + displaySets.forEach(displaySet => this.addDisplaySet(displaySet)); + } + + /** + * Add a single display set to the list + * @param {Object} displaySet Display set object + * @returns {boolean} True on success, false on failure. + */ + addDisplaySet(displaySet) { + if (displaySet instanceof ImageSet) { + this._displaySets.push(displaySet); + return true; + } + return false; + } + + /** + * Invokes the supplied callback for each display set in the current study passing + * two arguments: display set (a ImageSet instance) and index (the integer + * index of the display set within the current study) + * @param {function} callback The callback function which will be invoked for each display set instance. + * @returns {undefined} Nothing is returned. + */ + forEachDisplaySet(callback) { + if (Metadata.isValidCallback(callback)) { + this._displaySets.forEach((displaySet, index) => { + callback.call(null, displaySet, index); + }); + } + } + + /** + * Search the associated display sets using the supplied callback as criteria. The callback is passed + * two arguments: display set (an ImageSet instance) and index (the integer + * index of the display set within the current study) + * @param {function} callback The callback function which will be invoked for each display set instance. + * @returns {undefined} Nothing is returned. + */ + findDisplaySet(callback) { + if (Metadata.isValidCallback(callback)) { + return this._displaySets.find((displaySet, index) => { + return callback.call(null, displaySet, index); + }); + } + } + + /** + * Retrieve the number of display sets within the current study. + * @returns {number} The number of display sets in the current study. + */ + getDisplaySetCount() { + return this._displaySets.length; + } + + /** + * Returns the StudyInstanceUID of the current study. + */ + getStudyInstanceUID() { + return this._studyInstanceUID; + } + + /** + * Getter for series + * @return {Array} Array of SeriesMetadata object + */ + getSeries() { + return this._series.slice(); + } + + /** + * Append a series to the current study. + * @param {SeriesMetadata} series The series to be added to the current study. + * @returns {boolean} Returns true on success, false otherwise. + */ + addSeries(series) { + let result = false; + if ( + series instanceof SeriesMetadata && + this.getSeriesByUID(series.getSeriesInstanceUID()) === void 0 + ) { + this._series.push(series); + result = true; + } + return result; + } + + /** + * Find a series by index. + * @param {number} index An integer representing a list index. + * @returns {SeriesMetadata} Returns a SeriesMetadata instance when found or undefined otherwise. + */ + getSeriesByIndex(index) { + let found; // undefined by default... + if (Metadata.isValidIndex(index)) { + found = this._series[index]; + } + return found; + } + + /** + * Find a series by SeriesInstanceUID. + * @param {string} uid An UID string. + * @returns {SeriesMetadata} Returns a SeriesMetadata instance when found or undefined otherwise. + */ + getSeriesByUID(uid) { + let found; // undefined by default... + if (Metadata.isValidUID(uid)) { + found = this._series.find(series => { + return series.getSeriesInstanceUID() === uid; + }); + } + return found; + } + + /** + * Retrieve the number of series within the current study. + * @returns {number} The number of series in the current study. + */ + getSeriesCount() { + return this._series.length; + } + + /** + * Retrieve the number of instances within the current study. + * @returns {number} The number of instances in the current study. + */ + getInstanceCount() { + return this._series.reduce((sum, series) => { + return sum + series.getInstanceCount(); + }, 0); + } + + /** + * Invokes the supplied callback for each series in the current study passing + * two arguments: series (a SeriesMetadata instance) and index (the integer + * index of the series within the current study) + * @param {function} callback The callback function which will be invoked for each series instance. + * @returns {undefined} Nothing is returned. + */ + forEachSeries(callback) { + if (Metadata.isValidCallback(callback)) { + this._series.forEach((series, index) => { + callback.call(null, series, index); + }); + } + } + + /** + * Find the index of a series inside the study. + * @param {SeriesMetadata} series An instance of the SeriesMetadata class. + * @returns {number} The index of the series inside the study or -1 if not found. + */ + indexOfSeries(series) { + return this._series.indexOf(series); + } + + /** + * It sorts the series based on display sets order. Each series must be an instance + * of SeriesMetadata and each display sets must be an instance of ImageSet. + * Useful example of usage: + * Study data provided by backend does not sort series at all and client-side + * needs series sorted by the same criteria used for sorting display sets. + */ + sortSeriesByDisplaySets() { + // Object for mapping display sets' index by seriesInstanceUid + const displaySetsMapping = {}; + + // Loop through each display set to create the mapping + this.forEachDisplaySet((displaySet, index) => { + if (!(displaySet instanceof ImageSet)) { + throw new OHIFError( + `StudyMetadata::sortSeriesByDisplaySets display set at index ${index} is not an instance of ImageSet` + ); + } + + // In case of multiframe studies, just get the first index occurence + if (displaySetsMapping[displaySet.seriesInstanceUid] === void 0) { + displaySetsMapping[displaySet.seriesInstanceUid] = index; + } + }); + + // Clone of actual series + const actualSeries = this.getSeries(); + + actualSeries.forEach((series, index) => { + if (!(series instanceof SeriesMetadata)) { + throw new OHIFError( + `StudyMetadata::sortSeriesByDisplaySets series at index ${index} is not an instance of SeriesMetadata` + ); + } + + // Get the new series index + const seriesIndex = displaySetsMapping[series.getSeriesInstanceUID()]; + + // Update the series object with the new series position + this._series[seriesIndex] = series; + }); + } + + /** + * Compares the current study instance with another one. + * @param {StudyMetadata} study An instance of the StudyMetadata class. + * @returns {boolean} Returns true if both instances refer to the same study. + */ + equals(study) { + const self = this; + return ( + study === self || + (study instanceof StudyMetadata && + study.getStudyInstanceUID() === self.getStudyInstanceUID()) + ); + } + + /** + * Get the first series of the current study retaining a consistent result across multiple calls. + * @return {SeriesMetadata} An instance of the SeriesMetadata class or null if it does not exist. + */ + getFirstSeries() { + let series = this._firstSeries; + if (!(series instanceof SeriesMetadata)) { + series = null; + const found = this.getSeriesByIndex(0); + if (found instanceof SeriesMetadata) { + this._firstSeries = found; + series = found; + } + } + return series; + } + + /** + * Get the first instance of the current study retaining a consistent result across multiple calls. + * @return {InstanceMetadata} An instance of the InstanceMetadata class or null if it does not exist. + */ + getFirstInstance() { + let instance = this._firstInstance; + if (!(instance instanceof InstanceMetadata)) { + instance = null; + const firstSeries = this.getFirstSeries(); + if (firstSeries instanceof SeriesMetadata) { + const found = firstSeries.getFirstInstance(); + if (found instanceof InstanceMetadata) { + this._firstInstance = found; + instance = found; + } + } + } + return instance; + } + + /** + * Search the associated series to find an specific instance using the supplied callback as criteria. + * The callback is passed two arguments: instance (a InstanceMetadata instance) and index (the integer + * index of the instance within the current series) + * @param {function} callback The callback function which will be invoked for each instance instance. + * @returns {Object} Result object containing series (SeriesMetadata) and instance (InstanceMetadata) + * objects or an empty object if not found. + */ + findSeriesAndInstanceByInstance(callback) { + let result; + + if (Metadata.isValidCallback(callback)) { + let instance; + + const series = this._series.find(series => { + instance = series.findInstance(callback); + return instance instanceof InstanceMetadata; + }); + + // No series found + if (series instanceof SeriesMetadata) { + result = { + series, + instance, + }; + } + } + + return result || {}; + } + + /** + * Find series by instance using the supplied callback as criteria. The callback is passed + * two arguments: instance (a InstanceMetadata instance) and index (the integer index of + * the instance within its series) + * @param {function} callback The callback function which will be invoked for each instance. + * @returns {SeriesMetadata|undefined} If a series is found based on callback criteria it + * returns a SeriesMetadata. "undefined" is returned otherwise + */ + findSeriesByInstance(callback) { + const result = this.findSeriesAndInstanceByInstance(callback); + + return result.series; + } + + /** + * Find an instance using the supplied callback as criteria. The callback is passed + * two arguments: instance (a InstanceMetadata instance) and index (the integer index of + * the instance within its series) + * @param {function} callback The callback function which will be invoked for each instance. + * @returns {InstanceMetadata|undefined} If an instance is found based on callback criteria it + * returns a InstanceMetadata. "undefined" is returned otherwise + */ + findInstance(callback) { + const result = this.findSeriesAndInstanceByInstance(callback); + + return result.instance; + } +} + +/** + * + * @typedef StudyMetadata + * @property {function} getSeriesCount - returns the number of series in the study + * @property {function} forEachSeries - function that invokes callback with each series and index + * @property {function} getStudyInstanceUID - returns the study's instance UID + * + */ + +/** + * @typedef SeriesMetadata + * @property {function} getSeriesInstanceUID - returns the series's instance UID + * @property {function} getData - ??? + * @property {function} forEachInstance - ??? + */ + +const dwc = api.DICOMwebClient; + +const isMultiFrame = instance => { + // NumberOfFrames (0028,0008) + return instance.getRawValue('x00280008') > 1; +}; + +const makeDisplaySet = (series, instances) => { + const instance = instances[0]; + const imageSet = new ImageSet(instances); + const seriesData = series.getData(); + + // set appropriate attributes to image set... + imageSet.setAttributes({ + displaySetInstanceUid: imageSet.uid, // create a local alias for the imageSet UID + seriesDate: seriesData.seriesDate, + seriesTime: seriesData.seriesTime, + seriesInstanceUid: series.getSeriesInstanceUID(), + seriesNumber: instance.getRawValue('x00200011'), + seriesDescription: instance.getRawValue('x0008103e'), + numImageFrames: instances.length, + frameRate: instance.getRawValue('x00181063'), + modality: instance.getRawValue('x00080060'), + isMultiFrame: isMultiFrame(instance), + }); + + // Sort the images in this series if needed + const shallSort = true; //!OHIF.utils.ObjectPath.get(Meteor, 'settings.public.ui.sortSeriesByIncomingOrder'); + if (shallSort) { + imageSet.sortBy((a, b) => { + // Sort by InstanceNumber (0020,0013) + return ( + (parseInt(a.getRawValue('x00200013', 0)) || 0) - + (parseInt(b.getRawValue('x00200013', 0)) || 0) + ); + }); + } + + // Include the first image instance number (after sorted) + imageSet.setAttribute( + 'instanceNumber', + imageSet.getImage(0).getRawValue('x00200013') + ); + + return imageSet; +}; + +const isSingleImageModality = modality => { + return modality === 'CR' || modality === 'MG' || modality === 'DX'; +}; + +function getSopClassUids(series) { + const uniqueSopClassUidsInSeries = new Set(); + series.forEachInstance(instance => { + const instanceSopClassUid = instance.getRawValue('x00080016'); + + uniqueSopClassUidsInSeries.add(instanceSopClassUid); + }); + const sopClassUids = Array.from(uniqueSopClassUidsInSeries); + + return sopClassUids; +} + +/** + * @private + * @param {SeriesMetadata} series + * @param {StudyMetadata} study + * @param {string[]} sopClassUids + */ +function _getDisplaySetFromSopClassModule( + sopClassHandlerExtensions, // TODO: Update Usage + series, + study, + sopClassUids +) { + // TODO: For now only use the plugins if all instances have the same sopClassUid + if (sopClassUids.length !== 1) { + console.warn( + 'getDisplaySetFromSopClassPlugin: More than one SOPClassUid in the same series is not yet supported.' + ); + return; + } + + const sopClassUid = sopClassUids[0]; + const sopClassHandlerModules = sopClassHandlerExtensions.map(extension => { + return extension.module; + }); + + const handlersForSopClassUid = sopClassHandlerModules.filter(module => { + return module.sopClassUids.includes(sopClassUid); + }); + + // TODO: Sort by something, so we can determine which plugin to use + if (!handlersForSopClassUid || !handlersForSopClassUid.length) { + return; + } + + const plugin = handlersForSopClassUid[0]; + const headers = DICOMWeb.getAuthorizationHeader(); + const dicomWebClient = new dwc({ + url: study.getData().wadoRoot, + headers, + }); + + let displaySet = plugin.getDisplaySetFromSeries( + series, + study, + dicomWebClient, + headers + ); + if (displaySet && !displaySet.modality) { + const instance = series.getFirstInstance(); + displaySet.modality = instance.getRawValue('x00080060'); + } + return displaySet; +} + +/** + * + * @param {*} a - DisplaySet + * @param {*} b - DisplaySet + */ +function _sortBySeriesNumber(a, b) { + const seriesNumberAIsGreaterOrUndefined = + a.seriesNumber > b.seriesNumber || (!a.seriesNumber && b.seriesNumber); + + return seriesNumberAIsGreaterOrUndefined ? 1 : -1; +} diff --git a/platform/core/src/classes/metadata/StudySummary.js b/platform/core/src/classes/metadata/StudySummary.js new file mode 100644 index 00000000000..a9b4550d37b --- /dev/null +++ b/platform/core/src/classes/metadata/StudySummary.js @@ -0,0 +1,73 @@ +import { Metadata } from './Metadata'; +import { DICOMTagDescriptions } from '../../utils/DICOMTagDescriptions'; + +/** + * Constants + */ + +const STUDY_INSTANCE_UID = 'x0020000d'; + +/** + * Class Definition + */ + +export class StudySummary extends Metadata { + constructor(tagMap, attributeMap, uid) { + // Call the superclass constructor passing an plain object with no prototype to be used as the main "_data" attribute. + const _data = Object.create(null); + super(_data, uid); + + // Initialize internal tag map if first argument is given. + if (tagMap !== void 0) { + this.addTags(tagMap); + } + + // Initialize internal property map if second argument is given. + if (attributeMap !== void 0) { + this.setCustomAttributes(attributeMap); + } + } + + getStudyInstanceUID() { + // This method should return null if StudyInstanceUID is not available to keep compatibility StudyMetadata API + return this.getTagValue(STUDY_INSTANCE_UID) || null; + } + + /** + * Append tags to internal tag map. + * @param {Object} tagMap An object whose own properties will be used as tag values and appended to internal tag map. + */ + addTags(tagMap) { + const _hasOwn = Object.prototype.hasOwnProperty; + const _data = this._data; + for (let tag in tagMap) { + if (_hasOwn.call(tagMap, tag)) { + const description = DICOMTagDescriptions.find(tag); + // When a description is available, use its tag as internal key... + if (description) { + _data[description.tag] = tagMap[tag]; + } else { + _data[tag] = tagMap[tag]; + } + } + } + } + + tagExists(tagName) { + const _data = this._data; + const description = DICOMTagDescriptions.find(tagName); + if (description) { + return description.tag in _data; + } + return tagName in _data; + } + + getTagValue(tagName) { + const _data = this._data; + const description = DICOMTagDescriptions.find(tagName); + if (description) { + return _data[description.tag]; + } + return _data[tagName]; + } +} diff --git a/platform/core/src/classes/metadata/WadoRsMetaDataBuilder.js b/platform/core/src/classes/metadata/WadoRsMetaDataBuilder.js new file mode 100644 index 00000000000..4cd0e8a358b --- /dev/null +++ b/platform/core/src/classes/metadata/WadoRsMetaDataBuilder.js @@ -0,0 +1,48 @@ +export class WadoRsMetaDataBuilder { + constructor() { + this.tags = {}; + } + + addTag(tag, value, multi) { + this.tags[tag] = { + tag, + value, + multi, + }; + + return this; + } + + toJSON() { + const json = {}; + const keys = Object.keys(this.tags); + + keys.forEach(key => { + if (!this.tags.hasOwnProperty(key)) { + return; + } + + const tag = this.tags[key]; + const multi = !!tag.multi; + let value = tag.value; + + if (value == null || (value.length === 1 && value[0] == null)) { + return; + } + + if (typeof value === 'string' && multi) { + value = value.split('\\'); + } + + if (!Array.isArray(value)) { + value = [value]; + } + + json[key] = { + Value: value, + }; + }); + + return json; + } +} diff --git a/platform/core/src/classes/metadata/index.js b/platform/core/src/classes/metadata/index.js new file mode 100644 index 00000000000..a3e6da50d24 --- /dev/null +++ b/platform/core/src/classes/metadata/index.js @@ -0,0 +1,35 @@ +import { InstanceMetadata } from './InstanceMetadata'; +import { Metadata } from './Metadata'; +import { OHIFInstanceMetadata } from './OHIFInstanceMetadata'; +import { OHIFSeriesMetadata } from './OHIFSeriesMetadata'; +import { OHIFStudyMetadata } from './OHIFStudyMetadata'; +import { SeriesMetadata } from './SeriesMetadata'; +import { StudyMetadata } from './StudyMetadata'; +import { StudySummary } from './StudySummary'; +import { WadoRsMetaDataBuilder } from './WadoRsMetaDataBuilder'; + +const metadata = { + Metadata, + StudySummary, + WadoRsMetaDataBuilder, + StudyMetadata, + SeriesMetadata, + InstanceMetadata, + OHIFStudyMetadata, + OHIFSeriesMetadata, + OHIFInstanceMetadata, +}; + +export { + Metadata, + StudySummary, + WadoRsMetaDataBuilder, + StudyMetadata, + SeriesMetadata, + InstanceMetadata, + OHIFStudyMetadata, + OHIFSeriesMetadata, + OHIFInstanceMetadata, +}; + +export default metadata; diff --git a/platform/core/src/compatibility/dialogPolyfill.js b/platform/core/src/compatibility/dialogPolyfill.js new file mode 100644 index 00000000000..6523dea08c1 --- /dev/null +++ b/platform/core/src/compatibility/dialogPolyfill.js @@ -0,0 +1,458 @@ +var dialogPolyfill = (function() { + var supportCustomEvent = window.CustomEvent; + if (!supportCustomEvent || typeof supportCustomEvent == 'object') { + supportCustomEvent = function CustomEvent(event, x) { + x = x || {}; + var ev = document.createEvent('CustomEvent'); + ev.initCustomEvent(event, !!x.bubbles, !!x.cancelable, x.detail || null); + return ev; + }; + supportCustomEvent.prototype = window.Event.prototype; + } + + /** + * Finds the nearest from the passed element. + * + * @param {Element} el to search from + * @param {HTMLDialogElement} dialog found + */ + function findNearestDialog(el) { + while (el) { + if (el.nodeName == 'DIALOG') { + return el; + } + el = el.parentElement; + } + return null; + } + + var dialogPolyfill = {}; + + dialogPolyfill.reposition = function(element) { + var scrollTop = + document.body.scrollTop || document.documentElement.scrollTop; + var topValue = scrollTop + (window.innerHeight - element.offsetHeight) / 2; + element.style.top = Math.max(0, topValue) + 'px'; + element.dialogPolyfillInfo.isTopOverridden = true; + }; + + dialogPolyfill.inNodeList = function(nodeList, node) { + for (var i = 0; i < nodeList.length; ++i) { + if (nodeList[i] == node) return true; + } + return false; + }; + + dialogPolyfill.isInlinePositionSetByStylesheet = function(element) { + for (var i = 0; i < document.styleSheets.length; ++i) { + var styleSheet = document.styleSheets[i]; + var cssRules = null; + // Some browsers throw on cssRules. + try { + cssRules = styleSheet.cssRules; + } catch (e) {} + if (!cssRules) continue; + for (var j = 0; j < cssRules.length; ++j) { + var rule = cssRules[j]; + var selectedNodes = null; + // Ignore errors on invalid selector texts. + try { + selectedNodes = document.querySelectorAll(rule.selectorText); + } catch (e) {} + if ( + !selectedNodes || + !dialogPolyfill.inNodeList(selectedNodes, element) + ) + continue; + var cssTop = rule.style.getPropertyValue('top'); + var cssBottom = rule.style.getPropertyValue('bottom'); + if ((cssTop && cssTop != 'auto') || (cssBottom && cssBottom != 'auto')) + return true; + } + } + return false; + }; + + dialogPolyfill.needsCentering = function(dialog) { + var computedStyle = window.getComputedStyle(dialog); + if (computedStyle.position != 'absolute') { + return false; + } + + // We must determine whether the top/bottom specified value is non-auto. In + // WebKit/Blink, checking computedStyle.top == 'auto' is sufficient, but + // Firefox returns the used value. So we do this crazy thing instead: check + // the inline style and then go through CSS rules. + if ( + (dialog.style.top != 'auto' && dialog.style.top != '') || + (dialog.style.bottom != 'auto' && dialog.style.bottom != '') + ) + return false; + return !dialogPolyfill.isInlinePositionSetByStylesheet(dialog); + }; + + dialogPolyfill.showDialog = function(isModal) { + if (this.open) { + throw 'InvalidStateError: showDialog called on open dialog'; + } + this.open = true; // TODO: should be a getter mapped to attribute + this.setAttribute('open', 'open'); + + if (isModal) { + // Find element with `autofocus` attribute or first form control + var first_form_ctrl = null; + var autofocus = null; + var findElementToFocus = function(root) { + if (!root.children) { + return; + } + for (var i = 0; i < root.children.length; i++) { + var elem = root.children[i]; + if ( + first_form_ctrl === null && + !elem.disabled && + (elem.nodeName == 'BUTTON' || + elem.nodeName == 'INPUT' || + elem.nodeName == 'KEYGEN' || + elem.nodeName == 'SELECT' || + elem.nodeName == 'TEXTAREA') + ) { + first_form_ctrl = elem; + } + if (elem.autofocus) { + autofocus = elem; + return; + } + findElementToFocus(elem); + if (autofocus !== null) return; + } + }; + + findElementToFocus(this); + + if (autofocus !== null) { + autofocus.focus(); + } else if (first_form_ctrl !== null) { + first_form_ctrl.focus(); + } + } + + if (dialogPolyfill.needsCentering(this)) dialogPolyfill.reposition(this); + if (isModal) { + this.dialogPolyfillInfo.modal = true; + dialogPolyfill.dm.pushDialog(this); + } + + // IE sometimes complains when calling .focus() that it + // "Can't move focus to the control because it is invisible, not enabled, or of a type that does not accept the focus." + try { + if (autofocus !== null) { + autofocus.focus(); + } else if (first_form_ctrl !== null) { + first_form_ctrl.focus(); + } + } catch (e) {} + this.style.zoom = 1; + }; + + dialogPolyfill.close = function(retval) { + if (!this.open && !window.HTMLDialogElement) { + // Native implementations will set .open to false, so ignore this error. + throw 'InvalidStateError: close called on closed dialog'; + } + this.open = false; + this.removeAttribute('open'); + + // Leave returnValue untouched in case it was set directly on the element + if (typeof retval != 'undefined') { + this.returnValue = retval; + } + + // This won't match the native exactly because if the user sets top + // on a centered polyfill dialog, that top gets thrown away when the dialog is + // closed. Not sure it's possible to polyfill this perfectly. + if (this.dialogPolyfillInfo.isTopOverridden) { + this.style.top = 'auto'; + } + + if (this.dialogPolyfillInfo.modal) { + dialogPolyfill.dm.removeDialog(this); + } + + // Triggering "close" event for any attached listeners on the + var event; + if (document.createEvent) { + event = document.createEvent('HTMLEvents'); + event.initEvent('close', true, true); + } else { + event = new Event('close'); + } + this.dispatchEvent(event); + + return this.returnValue; + }; + + dialogPolyfill.registerDialog = function(element) { + if (element.show) { + // console.warn("This browser already supports , the polyfill " + + // "may not work correctly."); + } + element.show = dialogPolyfill.showDialog.bind(element, false); + element.showModal = dialogPolyfill.showDialog.bind(element, true); + element.close = dialogPolyfill.close.bind(element); + element.dialogPolyfillInfo = {}; + element.open = false; + }; + + // The overlay is used to simulate how a modal dialog blocks the document. The + // blocking dialog is positioned on top of the overlay, and the rest of the + // dialogs on the pending dialog stack are positioned below it. In the actual + // implementation, the modal dialog stacking is controlled by the top layer, + // where z-index has no effect. + var TOP_LAYER_ZINDEX = 100000; + var MAX_PENDING_DIALOGS = 100000; + + dialogPolyfill.DialogManager = function() { + this.pendingDialogStack = []; + this.overlay = document.createElement('div'); + this.overlay.style.width = '100%'; + this.overlay.style.height = '100%'; + this.overlay.style.position = 'fixed'; + this.overlay.style.left = '0px'; + this.overlay.style.top = '0px'; + this.overlay.style.backgroundColor = 'rgba(0,0,0,0.0)'; + + this.focusPageLast = this.createFocusable(); + this.overlay.appendChild(this.focusPageLast); + + this.overlay.addEventListener('click', function(e) { + var redirectedEvent = document.createEvent('MouseEvents'); + redirectedEvent.initMouseEvent( + e.type, + e.bubbles, + e.cancelable, + window, + e.detail, + e.screenX, + e.screenY, + e.clientX, + e.clientY, + e.ctrlKey, + e.altKey, + e.shiftKey, + e.metaKey, + e.button, + e.relatedTarget + ); + document.body.dispatchEvent(redirectedEvent); + }); + + // TODO: Only install when any dialogs are open. + document.addEventListener( + 'submit', + function(ev) { + var method = ev.target.getAttribute('method'); + method = method ? method.toLowerCase() : ''; + if (method != 'dialog') { + return; + } + ev.preventDefault(); + + var dialog = findNearestDialog(ev.target); + if (!dialog) { + return; + } + + // FIXME: The original event doesn't contain the INPUT element used to + // submit the form (if any). Look in some possible places. + var returnValue; + var cands = [document.activeElement, ev.explicitOriginalTarget]; + cands.some(function(cand) { + if (cand && cand.nodeName == 'INPUT' && cand.form == ev.target) { + returnValue = cand.value; + return true; + } + }); + dialog.close(returnValue); + }, + true + ); + }; + + dialogPolyfill.DialogManager.prototype.createFocusable = function(tabIndex) { + var span = document.createElement('span'); + span.tabIndex = tabIndex || 0; + span.style.opacity = 0; + span.style.position = 'static'; + return span; + }; + + dialogPolyfill.DialogManager.prototype.blockDocument = function() { + if (!document.body.contains(this.overlay)) { + document.body.appendChild(this.overlay); + + // On Safari/Mac (and possibly other browsers), the documentElement is + // not focusable. This is required for modal dialogs as it is the first + // element to be hit by a tab event, and further tabs are redirected to + // the most visible dialog. + if (this.needsDocumentElementFocus === undefined) { + document.documentElement.focus(); + this.needsDocumentElementFocus = + document.activeElement != document.documentElement; + } + if (this.needsDocumentElementFocus) { + document.documentElement.tabIndex = 1; + } + } + }; + + dialogPolyfill.DialogManager.prototype.unblockDocument = function() { + document.body.removeChild(this.overlay); + if (this.needsDocumentElementFocus) { + // TODO: Restore the previous tabIndex, rather than clearing it. + document.documentElement.tabIndex = ''; + } + }; + + dialogPolyfill.DialogManager.prototype.updateStacking = function() { + if (this.pendingDialogStack.length == 0) { + this.unblockDocument(); + return; + } + this.blockDocument(); + + var zIndex = TOP_LAYER_ZINDEX; + for (var i = 0; i < this.pendingDialogStack.length; i++) { + if (i == this.pendingDialogStack.length - 1) + this.overlay.style.zIndex = zIndex++; + var dialog = this.pendingDialogStack[i]; + dialog.dialogPolyfillInfo.backdrop.style.zIndex = zIndex++; + dialog.style.zIndex = zIndex++; + } + }; + + dialogPolyfill.DialogManager.prototype.handleKey = function(event) { + var dialogCount = this.pendingDialogStack.length; + if (dialogCount == 0) { + return; + } + var dialog = this.pendingDialogStack[dialogCount - 1]; + var pfi = dialog.dialogPolyfillInfo; + + switch (event.keyCode) { + case 9 /* tab */: + var activeElement = document.activeElement; + var forward = !event.shiftKey; + if (forward) { + // Tab forward, so look for document or fake last focus element. + if ( + activeElement == document.documentElement || + activeElement == document.body || + activeElement == pfi.backdrop + ) { + pfi.focusFirst.focus(); + } else if (activeElement == pfi.focusLast) { + // TODO: Instead of wrapping to focusFirst, escape to browser chrome. + pfi.focusFirst.focus(); + } + } else { + // Tab backwards, so look for fake first focus element. + if (activeElement == pfi.focusFirst) { + // TODO: Instead of wrapping to focusLast, escape to browser chrome. + pfi.focusLast.focus(); + } else if (activeElement == this.focusPageLast) { + // The focus element is at the end of the page (e.g., shift-tab from + // the window chrome): move current focus to the last element in the + // dialog instead. + pfi.focusLast.focus(); + } + } + break; + + case 27 /* esc */: + event.preventDefault(); + event.stopPropagation(); + var cancelEvent = new supportCustomEvent('cancel', { + bubbles: false, + cancelable: true, + }); + if (dialog.dispatchEvent(cancelEvent)) { + dialog.close(); + } + break; + } + }; + + dialogPolyfill.DialogManager.prototype.pushDialog = function(dialog) { + if (this.pendingDialogStack.length >= MAX_PENDING_DIALOGS) { + throw 'Too many modal dialogs'; + } + + var backdrop = document.createElement('div'); + backdrop.className = 'backdrop'; + var clickEventListener = function(e) { + var redirectedEvent = document.createEvent('MouseEvents'); + redirectedEvent.initMouseEvent( + e.type, + e.bubbles, + e.cancelable, + window, + e.detail, + e.screenX, + e.screenY, + e.clientX, + e.clientY, + e.ctrlKey, + e.altKey, + e.shiftKey, + e.metaKey, + e.button, + e.relatedTarget + ); + dialog.dispatchEvent(redirectedEvent); + }; + backdrop.addEventListener('click', clickEventListener); + dialog.parentNode.insertBefore(backdrop, dialog.nextSibling); + dialog.dialogPolyfillInfo.backdrop = backdrop; + dialog.dialogPolyfillInfo.clickEventListener = clickEventListener; + this.pendingDialogStack.push(dialog); + this.updateStacking(); + + dialog.dialogPolyfillInfo.focusFirst = this.createFocusable(); + dialog.dialogPolyfillInfo.focusLast = this.createFocusable(); + dialog.appendChild(dialog.dialogPolyfillInfo.focusLast); + dialog.insertBefore( + dialog.dialogPolyfillInfo.focusFirst, + dialog.firstChild + ); + }; + + dialogPolyfill.DialogManager.prototype.removeDialog = function(dialog) { + var index = this.pendingDialogStack.indexOf(dialog); + if (index == -1) { + return; + } + this.pendingDialogStack.splice(index, 1); + var backdrop = dialog.dialogPolyfillInfo.backdrop; + var clickEventListener = dialog.dialogPolyfillInfo.clickEventListener; + backdrop.removeEventListener('click', clickEventListener); + backdrop.parentNode.removeChild(backdrop); + dialog.dialogPolyfillInfo.backdrop = null; + dialog.dialogPolyfillInfo.clickEventListener = null; + this.updateStacking(); + + dialog.removeChild(dialog.dialogPolyfillInfo.focusFirst); + dialog.removeChild(dialog.dialogPolyfillInfo.focusLast); + dialog.dialogPolyfillInfo.focusFirst = null; + dialog.dialogPolyfillInfo.focusLast = null; + }; + + dialogPolyfill.dm = new dialogPolyfill.DialogManager(); + + document.addEventListener( + 'keydown', + dialogPolyfill.dm.handleKey.bind(dialogPolyfill.dm) + ); + + return dialogPolyfill; +})(); diff --git a/platform/core/src/compatibility/dialogPolyfill.styl b/platform/core/src/compatibility/dialogPolyfill.styl new file mode 100644 index 00000000000..fc571789ae4 --- /dev/null +++ b/platform/core/src/compatibility/dialogPolyfill.styl @@ -0,0 +1,34 @@ +dialog + position: absolute + left: 0 + right: 0 + width: -moz-fit-content + width: -webkit-fit-content + width: fit-content + height: -moz-fit-content + height: -webkit-fit-content + height: fit-content + margin: auto + border: solid + padding: 1em + background: white + color: black + display: none + +dialog[open] + display: block + +dialog + .backdrop + position: fixed + top: 0 + right: 0 + bottom: 0 + left: 0 + background: rgba(0,0,0,0.1) + +/* for small devices, modal dialogs go full-screen */ +@media screen and (max-width: 540px) + dialog[_polyfill_modal] + top: 0 + width: auto + margin: 1em \ No newline at end of file diff --git a/platform/core/src/compatibility/index.js b/platform/core/src/compatibility/index.js new file mode 100644 index 00000000000..c314ffd181e --- /dev/null +++ b/platform/core/src/compatibility/index.js @@ -0,0 +1 @@ +import './styleProperty.js'; diff --git a/platform/core/src/compatibility/styleProperty.js b/platform/core/src/compatibility/styleProperty.js new file mode 100644 index 00000000000..f64bd284142 --- /dev/null +++ b/platform/core/src/compatibility/styleProperty.js @@ -0,0 +1,66 @@ +/* + * https://github.com/swederik/dragula/blob/ccc15d75186f5168e7abadbe3077cf12dab09f8b/styleProperty.js + */ +(function() { + 'use strict'; + + const browserProps = {}; + + function eachVendor(prop, fn) { + const prefixes = ['Webkit', 'Moz', 'ms', 'O']; + fn(prop); + for (let i = 0; i < prefixes.length; i++) { + fn(prefixes[i] + prop.charAt(0).toUpperCase() + prop.slice(1)); + } + } + + function check(property, testValue) { + const sandbox = document.createElement('iframe'); + const element = document.createElement('p'); + + document.body.appendChild(sandbox); + sandbox.contentDocument.body.appendChild(element); + const support = set(element, property, testValue); + + // We have to do this because remove() is not supported by IE11 and below + sandbox.parentElement.removeChild(sandbox); + return support; + } + + function checkComputed(el, prop) { + const computed = window.getComputedStyle(el).getPropertyValue(prop); + return computed !== void 0 && computed.length > 0 && computed !== 'none'; + } + + function set(el, prop, value) { + let match = false; + + if (browserProps[prop] === void 0) { + eachVendor(prop, function(vendorProp) { + if (el.style[vendorProp] !== void 0 && match === false) { + el.style[vendorProp] = value; + if (checkComputed(el, vendorProp)) { + match = true; + browserProps[prop] = vendorProp; + } + } + }); + } else { + el.style[browserProps[prop]] = value; + return true; + } + + return match; + } + + const styleProperty = { + check, + set, + }; + + OHIF.ui.styleProperty = styleProperty; +})(); + +const { styleProperty } = OHIF.ui; + +export { styleProperty }; diff --git a/platform/core/src/compatibility/transition-to-from-auto.js b/platform/core/src/compatibility/transition-to-from-auto.js new file mode 100644 index 00000000000..4743b202347 --- /dev/null +++ b/platform/core/src/compatibility/transition-to-from-auto.js @@ -0,0 +1,150 @@ +/*! + * transition-to-from-auto 0.5.2 + * https://github.com/75lb/transition-to-from-auto + * Copyright 2015 Lloyd Brookes <75pound@gmail.com> + */ + +/** +@module +@alias transition +*/ +(function(window, document) { + 'use strict'; + + var getComputedStyle = window.getComputedStyle; + var isTransition = 'data-ttfaInTransition'; + + var elements = []; + var data = []; + + // Transition detecting + var transitionProp = false; + var transitionEnd = false; + var testStyle = document.createElement('a').style; + var testProp; + + if (testStyle[(testProp = 'webkitTransition')] !== undefined) { + transitionProp = testProp; + transitionEnd = testProp + 'End'; + } + + if (testStyle[(testProp = 'transition')] !== undefined) { + transitionProp = testProp; + transitionEnd = testProp + 'end'; + } + + function process(options, data) { + var el = options.element; + var val = options.val; + var prop = options.prop; + var style = el.style; + var startVal; + var autoVal; + + if (!transitionProp) { + return (style[prop] = val); + } + + if (el.hasAttribute(isTransition)) { + el.removeEventListener(transitionEnd, data.l); + } else { + style[transitionProp] = 'none'; + + startVal = getComputedStyle(el)[prop]; + style[prop] = 'auto'; + autoVal = getComputedStyle(el)[prop]; + + // Interrupt + if (startVal === val || (val === 'auto' && startVal === autoVal)) { + return; + } + + data.auto = autoVal; + el.setAttribute(isTransition, 1); + + // Transition + style[prop] = startVal; + el.offsetWidth; + style[transitionProp] = options.style; + } + + style[prop] = val === 'auto' ? data.auto : val; + + data.l = function(e) { + if (e.propertyName === prop) { + el.removeAttribute(isTransition); + el.removeEventListener(transitionEnd, data.l); + if (val === 'auto') { + /* avoid transition flashes in Safari */ + style[transitionProp] = 'none'; + style[prop] = val; + } + } + }; + + el.addEventListener(transitionEnd, data.l); + } + + /** + @param options {Object} + @param options.element {string | element} - The DOM element or selector to transition + @param options.val {string} - The value you want to transition to + @param [options.prop] {string} - The CSS property to transition, defaults to `"height"` + @param [options.style] {string} - The desired value for the `transition` CSS property (e.g. `"height 1s"`). If specified, this value is added inline and will override your CSS. Leave this value blank if you already have it defined in your stylesheet. + @alias module:transition-to-from-auto + */ + function transition(options) { + var element = options.element; + var datum; + var index; + + if (typeof element === 'string') { + element = document.querySelector(element); + } + + element = options.element = element instanceof Node ? element : false; + options.prop = options.prop || 'height'; + options.style = options.style || ''; + + if (element) { + index = elements.indexOf(element); + if (~index) { + datum = data[index]; + } else { + datum = {}; + elements.push(element); + data.push(datum); + } + + process(options, datum); + } + } + + /** + The name of the vendor-specific transition CSS property + @type {string} + @example + el.style[transition.prop + 'Duration'] = '1s'; + */ + transition.prop = transitionProp; + + /** + * The name of the [transition end event](https://developer.mozilla.org/en-US/docs/Web/Events/transitionend) in the current browser (typically `"transitionend"` or `"webkitTransitionEnd"`) + * @type {string} + * @example + * el.addEventListener(transition.end, function(){ + * // the transition ended.. + * }); + */ + transition.end = transitionEnd; + + if (typeof module === 'object' && module.exports) { + module.exports = transition; + } else if (typeof define === 'function' && define.amd) { + define(function() { + return transition; + }); + } else { + window.transition = transition; + } +})(window, document); diff --git a/platform/core/src/cornerstone.js b/platform/core/src/cornerstone.js new file mode 100644 index 00000000000..dc7f993389e --- /dev/null +++ b/platform/core/src/cornerstone.js @@ -0,0 +1,15 @@ +import MetadataProvider from './classes/MetadataProvider'; +import { + getBoundingBox, + pixelToPage, + repositionTextBox, +} from './lib/cornerstone.js'; + +const cornerstone = { + MetadataProvider, + getBoundingBox, + pixelToPage, + repositionTextBox, +}; + +export default cornerstone; diff --git a/platform/core/src/extensions/ExtensionManager.js b/platform/core/src/extensions/ExtensionManager.js new file mode 100644 index 00000000000..672160821e6 --- /dev/null +++ b/platform/core/src/extensions/ExtensionManager.js @@ -0,0 +1,176 @@ +import MODULE_TYPES from './MODULE_TYPES.js'; +import log from './../log.js'; + +export default class ExtensionManager { + constructor({ commandsManager }) { + this.modules = {}; + this.registeredExtensionIds = []; + this.moduleTypeNames = Object.values(MODULE_TYPES); + // + this._commandsManager = commandsManager; + + this.moduleTypeNames.forEach(moduleType => { + this.modules[moduleType] = []; + }); + } + + /** + * An array of extensions, or an array of arrays that contains extension + * configuration pairs. + * + * @param {Object[]} extensions - Array of extensions + */ + registerExtensions(extensions) { + extensions.forEach(extension => { + const hasConfiguration = Array.isArray(extension); + + if (hasConfiguration) { + const [ohifExtension, configuration] = extensions; + this.registerExtension(ohifExtension, configuration); + } else { + this.registerExtension(extension); + } + }); + } + + /** + * + * TODO: Id Management: SopClassHandlers currently refer to viewport module by id; setting the extension id as viewport module id is a workaround for now + * @param {Object} extension + * @param {Object} configuration + */ + registerExtension(extension, configuration = {}) { + if (!extension) { + log.warn( + 'Attempting to register a null/undefined extension. Exiting early.' + ); + return; + } + + let extensionId = extension.id; + + if (!extensionId) { + extensionId = Math.random() + .toString(36) + .substr(2, 5); + + log.warn(`Extension ID not set. Using random string ID: ${extensionId}`); + } + + if (this.registeredExtensionIds.includes(extensionId)) { + log.warn( + `Extension ID ${extensionId} has already been registered. Exiting before duplicating modules.` + ); + return; + } + + // preRegistrationHook + if (extension.preRegistration) { + extension.preRegistration(configuration); + } + + // Register Modules + this.moduleTypeNames.forEach(moduleType => { + const extensionModule = this._getExtensionModule( + moduleType, + extension, + extensionId + ); + + if (extensionModule) { + this._initSpecialModuleTypes(moduleType, extensionModule); + + this.modules[moduleType].push({ + extensionId, + module: extensionModule, + }); + } + }); + + // Track extension registration + this.registeredExtensionIds.push(extensionId); + } + + /** + * @private + * @param {string} moduleType + * @param {Object} extension + * @param {string} extensionId - Used for logging warnings + */ + _getExtensionModule(moduleType, extension, extensionId) { + const getModuleFnName = 'get' + _capitalizeFirstCharacter(moduleType); + const getModuleFn = extension[getModuleFnName]; + + if (!getModuleFn) { + return; + } + + try { + const extensionModule = getModuleFn(); + + if (!extensionModule) { + log.warn( + `Null or undefined returned when registering the ${getModuleFnName} module for the ${extensionId} extension` + ); + } + + return extensionModule; + } catch (ex) { + log.error( + `Exception thrown while trying to call ${getModuleFnName} for the ${extensionId} extension` + ); + } + } + + _initSpecialModuleTypes(moduleType, extensionModule) { + switch (moduleType) { + case 'commandsModule': { + const { definitions, defaultContext } = extensionModule; + if (!definitions || Object.keys(definitions).length === 0) { + log.warn('Commands Module contains no command definitions'); + return; + } + this._initCommandsModule(definitions, defaultContext); + break; + } + default: + // code block + } + } + + /** + * + * @private + * @param {Object[]} commandDefinitions + */ + _initCommandsModule(commandDefinitions, defaultContext = 'VIEWER') { + if (!this._commandsManager.getContext(defaultContext)) { + this._commandsManager.createContext(defaultContext); + } + + Object.keys(commandDefinitions).forEach(commandName => { + const commandDefinition = commandDefinitions[commandName]; + const commandHasContextThatDoesNotExist = + commandDefinition.context && + !this._commandsManager.getContext(commandDefinition.context); + + if (commandHasContextThatDoesNotExist) { + this._commandsManager.createContext(commandDefinition.context); + } + + this._commandsManager.registerCommand( + commandDefinition.context || defaultContext, + commandName, + commandDefinition + ); + }); + } +} + +/** + * @private + * @param {string} lower + */ +function _capitalizeFirstCharacter(lower) { + return lower.charAt(0).toUpperCase() + lower.substr(1); +} diff --git a/platform/core/src/extensions/ExtensionManager.test.js b/platform/core/src/extensions/ExtensionManager.test.js new file mode 100644 index 00000000000..cfe892ef08d --- /dev/null +++ b/platform/core/src/extensions/ExtensionManager.test.js @@ -0,0 +1,182 @@ +import { Exception } from 'handlebars'; +import ExtensionManager from './ExtensionManager.js'; +import MODULE_TYPES from './MODULE_TYPES.js'; +import log from './../log.js'; + +jest.mock('./../log.js'); + +describe('ExtensionManager.js', () => { + let extensionManager, commandsManager; + + beforeEach(() => { + commandsManager = { + createContext: jest.fn(), + getContext: jest.fn(), + registerCommand: jest.fn(), + }; + extensionManager = new ExtensionManager({ commandsManager }); + log.warn.mockClear(); + jest.clearAllMocks(); + }); + + it('creates a module namespace for each module type', () => { + const moduleKeys = Object.keys(extensionManager.modules); + const moduleTypeValues = Object.values(MODULE_TYPES); + + expect(moduleKeys.sort()).toEqual(moduleTypeValues.sort()); + }); + + describe('registerExtensions()', () => { + it('calls registerExtension() for each extension', () => { + extensionManager.registerExtension = jest.fn(); + + // SUT + const fakeExtensions = [{ one: '1' }, { two: '2' }, { three: '3 ' }]; + extensionManager.registerExtensions(fakeExtensions); + + // Assert + expect(extensionManager.registerExtension.mock.calls.length).toBe(3); + }); + }); + + describe('registerExtension()', () => { + it('logs a warning if the extension is null or undefined', () => { + const undefinedExtension = undefined; + const nullExtension = null; + + extensionManager.registerExtension(undefinedExtension); + extensionManager.registerExtension(nullExtension); + + expect(log.warn.mock.calls.length).toBe(2); + }); + + it('logs a warning if the extension does not have an id', () => { + const extensionWithoutId = {}; + + extensionManager.registerExtension(extensionWithoutId); + + expect(log.warn.mock.calls.length).toBe(1); + }); + + it('tracks which extensions have been registered', () => { + const extension = { + id: 'hello-world', + }; + + extensionManager.registerExtension(extension); + + expect(extensionManager.registeredExtensionIds).toContain(extension.id); + }); + + it('logs a warning if the extension has an id that has already been registered', () => { + const extension = { id: 'hello-world' }; + extensionManager.registerExtension(extension); + + // SUT + extensionManager.registerExtension(extension); + + expect(log.warn.mock.calls.length).toBe(1); + }); + + it('logs a warning if a defined module returns null or undefined', () => { + const extensionWithBadModule = { + id: 'hello-world', + getViewportModule: () => { + return null; + }, + }; + + extensionManager.registerExtension(extensionWithBadModule); + + expect(log.warn.mock.calls.length).toBe(1); + expect(log.warn.mock.calls[0][0]).toContain( + 'Null or undefined returned when registering' + ); + }); + + it('logs an error if an exception is thrown while retrieving a module', () => { + const extensionWithBadModule = { + id: 'hello-world', + getViewportModule: () => { + throw new Exception('Hello World'); + }, + }; + + extensionManager.registerExtension(extensionWithBadModule); + + expect(log.error.mock.calls.length).toBe(1); + expect(log.error.mock.calls[0][0]).toContain( + 'Exception thrown while trying to call' + ); + }); + + it('successfully registers a module for each module type', () => { + const extension = { + id: 'hello-world', + getViewportModule: () => { + return {}; + }, + getSopClassHandlerModule: () => { + return {}; + }, + getPanelModule: () => { + return {}; + }, + getToolbarModule: () => { + return {}; + }, + getCommandsModule: () => { + return {}; + }, + }; + + extensionManager.registerExtension(extension); + + // Registers 1 module per module type + Object.keys(extensionManager.modules).forEach(moduleType => { + const modulesForType = extensionManager.modules[moduleType]; + + expect(modulesForType.length).toBe(1); + }); + }); + + it('calls commandsManager.registerCommand for each commandsModule command definition', () => { + const extension = { + id: 'hello-world', + getCommandsModule: () => { + return { + definitions: { + exampleDefinition: { + commandFn: () => {}, + storeContexts: [], + options: {}, + }, + }, + }; + }, + }; + + // SUT + extensionManager.registerExtension(extension); + + expect(commandsManager.registerCommand.mock.calls.length).toBe(1); + }); + + it('logs a warning if the commandsModule contains no command definitions', () => { + const extension = { + id: 'hello-world', + getCommandsModule: () => { + return {}; + }, + }; + + // SUT + extensionManager.registerExtension(extension); + + expect(log.warn.mock.calls.length).toBe(1); + expect(log.warn.mock.calls[0][0]).toContain( + 'Commands Module contains no command definitions' + ); + }); + }); +}); diff --git a/platform/core/src/extensions/MODULE_TYPES.js b/platform/core/src/extensions/MODULE_TYPES.js new file mode 100644 index 00000000000..fbebcac1547 --- /dev/null +++ b/platform/core/src/extensions/MODULE_TYPES.js @@ -0,0 +1,7 @@ +export default { + COMMANDS: 'commandsModule', + PANEL: 'panelModule', + SOP_CLASS_HANDLER: 'sopClassHandlerModule', + TOOLBAR: 'toolbarModule', + VIEWPORT: 'viewportModule', +}; diff --git a/platform/core/src/extensions/index.js b/platform/core/src/extensions/index.js new file mode 100644 index 00000000000..50a27db1173 --- /dev/null +++ b/platform/core/src/extensions/index.js @@ -0,0 +1,9 @@ +import ExtensionManager from './ExtensionManager'; +import MODULE_TYPES from './MODULE_TYPES.js'; + +export default { + ExtensionManager, + MODULE_TYPES, +}; + +export { ExtensionManager, MODULE_TYPES }; diff --git a/platform/core/src/hanging-protocols/HPMatcher.js b/platform/core/src/hanging-protocols/HPMatcher.js new file mode 100644 index 00000000000..9c1775a47d1 --- /dev/null +++ b/platform/core/src/hanging-protocols/HPMatcher.js @@ -0,0 +1,120 @@ +import OHIFError from '../classes/OHIFError.js'; +import metadata from '../classes/metadata/'; +import { validate } from './lib/validate.js'; +import { CustomAttributeRetrievalCallbacks } from './customAttributes'; + +/** + * Import Constants + */ +const { StudySummary, InstanceMetadata } = metadata; + +/** + * Match a Metadata instance against rules using Validate.js for validation. + * @param {StudySummary|InstanceMetadata} metadataInstance Metadata instance object + * @param {Array} rules Array of MatchingRules instances (StudyMatchingRule|SeriesMatchingRule|ImageMatchingRule) for the match + * @return {Object} Matching Object with score and details (which rule passed or failed) + */ +const match = (metadataInstance, rules) => { + // Make sure the supplied data is valid. + if ( + !( + metadataInstance instanceof StudySummary || + metadataInstance instanceof InstanceMetadata + ) + ) { + throw new OHIFError( + 'HPMatcher::match metadataInstance must be an instance of StudySummary or InstanceMetadata' + ); + } + + const options = { + format: 'grouped', + }; + + const details = { + passed: [], + failed: [], + }; + + let requiredFailed = false; + let score = 0; + + rules.forEach(rule => { + const attribute = rule.attribute; + + // Do not use the custom attribute from the metadataInstance since it is subject to change + if (CustomAttributeRetrievalCallbacks.hasOwnProperty(attribute)) { + const customAttribute = CustomAttributeRetrievalCallbacks[attribute]; + metadataInstance.setCustomAttribute( + attribute, + customAttribute.callback(metadataInstance) + ); + } + + // Format the constraint as required by Validate.js + const testConstraint = { + [attribute]: rule.constraint, + }; + + // Create a single attribute object to be validated, since metadataInstance is an + // instance of Metadata (StudyMetadata, SeriesMetadata or InstanceMetadata) + const attributeValue = metadataInstance.customAttributeExists(attribute) + ? metadataInstance.getCustomAttribute(attribute) + : metadataInstance.getTagValue(attribute); + const attributeMap = { + [attribute]: attributeValue, + }; + + // Use Validate.js to evaluate the constraints on the specified metadataInstance + let errorMessages; + try { + errorMessages = validate(attributeMap, testConstraint, [options]); + } catch (e) { + errorMessages = ['Something went wrong during validation.', e]; + } + + if (!errorMessages) { + // If no errorMessages were returned, then validation passed. + + // Add the rule's weight to the total score + score += parseInt(rule.weight, 10); + + // Log that this rule passed in the matching details object + details.passed.push({ + rule, + }); + } else { + // If errorMessages were present, then validation failed + + // If the rule that failed validation was Required, then + // mark that a required Rule has failed + if (rule.required) { + requiredFailed = true; + } + + // Log that this rule failed in the matching details object + // and include any error messages + details.failed.push({ + rule, + errorMessages, + }); + } + }); + + // If a required Rule has failed Validation, set the matching score to zero + if (requiredFailed) { + score = 0; + } + + return { + score, + details, + requiredFailed, + }; +}; + +const HPMatcher = { + match, +}; + +export { HPMatcher }; diff --git a/platform/core/src/hanging-protocols/ProtocolEngine.js b/platform/core/src/hanging-protocols/ProtocolEngine.js new file mode 100644 index 00000000000..3172678dcf5 --- /dev/null +++ b/platform/core/src/hanging-protocols/ProtocolEngine.js @@ -0,0 +1,824 @@ +import OHIFError from '../classes/OHIFError.js'; +import metadata from '../classes/metadata/'; +import { StudyMetadataSource } from '../classes/StudyMetadataSource.js'; +import { isImage } from '../utils/isImage.js'; +import { HPMatcher } from './HPMatcher.js'; +import { sortByScore } from './lib/sortByScore'; +import log from '../log.js'; +import sortBy from '../utils/sortBy.js'; +import { CustomViewportSettings } from './customViewportSettings'; +import Protocol from './classes/Protocol'; +import { ProtocolStore } from './protocolStore/classes'; + +/** + * Import Constants + */ +const { StudyMetadata, InstanceMetadata, StudySummary } = metadata; + +// Useful constants +const ABSTRACT_PRIOR_VALUE = 'abstractPriorValue'; + +export default class ProtocolEngine { + matchedProtocols = new Map(); + matchedProtocolScores = {}; + + /** + * Constructor + * @param {ProtocolStore} protocolStore Protocol Store used to keep track of all hanging protocols + * @param {Array} studies Array of study metadata + * @param {Map} priorStudies Map of prior studies + * @param {Object} studyMetadataSource Instance of StudyMetadataSource (ohif-viewerbase) Object to get study metadata + * @param {Object} options + */ + constructor( + protocolStore, + studies, + priorStudies, + studyMetadataSource, + options = {} + ) { + // ----------- + // Type Validations + if (!(studyMetadataSource instanceof StudyMetadataSource)) { + throw new OHIFError( + 'ProtocolEngine::constructor studyMetadataSource is not an instance of StudyMetadataSource' + ); + } + + if ( + !(studies instanceof Array) && + !studies.every(study => study instanceof StudyMetadata) + ) { + throw new OHIFError( + "ProtocolEngine::constructor studies is not an array or it's items are not instances of StudyMetadata" + ); + } + + // -------------- + // Initialization + this.protocolStore = protocolStore; + this.studies = studies; + this.priorStudies = priorStudies instanceof Map ? priorStudies : new Map(); + this.studyMetadataSource = studyMetadataSource; + this.options = options; + + // Put protocol engine in a known state + this.reset(); + + // Create an array for new stage ids to be stored + // while editing a stage + this.newStageIds = []; + } + + /** + * Resets the ProtocolEngine to the best match + */ + reset() { + const protocol = this.getBestProtocolMatch(); + + this.setHangingProtocol(protocol); + } + + /** + * Retrieves the current Stage from the current Protocol and stage index + * + * @returns {*} The Stage model for the currently displayed Stage + */ + getCurrentStageModel() { + return this.protocol.stages[this.stage]; + } + + /** + * Finds the best protocols from Protocol Store, matching each protocol matching rules + * with the given study. The best protocol are orded by score and returned in an array + * @param {Object} study StudyMetadata instance object + * @return {Array} Array of match objects or an empty array if no match was found + * Each match object has the score of the matching and the matched + * protocol + */ + findMatchByStudy(study) { + log.trace('ProtocolEngine::findMatchByStudy'); + + const matched = []; + const studyInstance = study.getFirstInstance(); + + // Set custom attribute for study metadata + const numberOfAvailablePriors = this.getNumberOfAvailablePriors( + study.getObjectID() + ); + + this.protocolStore.getProtocol().forEach(protocol => { + // Clone the protocol's protocolMatchingRules array + // We clone it so that we don't accidentally add the + // numberOfPriorsReferenced rule to the Protocol itself. + let rules = protocol.protocolMatchingRules.slice(); + if (!rules) { + return; + } + + // Check if the study has the minimun number of priors used by the protocol. + const numberOfPriorsReferenced = protocol.getNumberOfPriorsReferenced(); + if (numberOfPriorsReferenced > numberOfAvailablePriors) { + return; + } + + // Run the matcher and get matching details + const matchedDetails = HPMatcher.match(studyInstance, rules); + const score = matchedDetails.score; + + // The protocol matched some rule, add it to the matched list + if (score > 0) { + matched.push({ + score, + protocol, + }); + } + }); + + // If no matches were found, select the default protocol + if (!matched.length) { + const defaultProtocol = this.protocolStore.getProtocol('defaultProtocol'); + + return [ + { + score: 1, + protocol: defaultProtocol, + }, + ]; + } + + // Sort the matched list by score + sortByScore(matched); + + log.trace('ProtocolEngine::findMatchByStudy matched', matched); + + return matched; + } + + _clearMatchedProtocols() { + this.matchedProtocols.clear(); + this.matchedProtocolScores = {}; + } + /** + * Populates the MatchedProtocols Collection by running the matching procedure + */ + updateProtocolMatches() { + log.trace('ProtocolEngine::updateProtocolMatches'); + + // Clear all data currently in matchedProtocols + this._clearMatchedProtocols(); + + // For each study, find the matching protocols + this.studies.forEach(study => { + const matched = this.findMatchByStudy(study); + + // For each matched protocol, check if it is already in MatchedProtocols + matched.forEach(matchedDetail => { + const protocol = matchedDetail.protocol; + if (!protocol) { + return; + } + + // If it is not already in the MatchedProtocols Collection, insert it with its score + if (!this.matchedProtocols.has(protocol.id)) { + log.trace( + 'ProtocolEngine::updateProtocolMatches inserting protocol match', + matchedDetail + ); + this.matchedProtocols.set(protocol.id, protocol); + this.matchedProtocolScores[protocol.id] = matchedDetail.score; + } + }); + }); + } + + _largestKeyByValue(obj) { + return Object.keys(obj).reduce((a, b) => (obj[a] > obj[b] ? a : b)); + } + + _getHighestScoringProtocol() { + if (!Object.keys(this.matchedProtocolScores).length) { + return this.protocolStore.getProtocol('defaultProtocol'); + } + const highestScoringProtocolId = this._largestKeyByValue( + this.matchedProtocolScores + ); + return this.matchedProtocols.get(highestScoringProtocolId); + } + + /** + * Return the best matched Protocol to the current study or set of studies + * @returns {*} + */ + getBestProtocolMatch() { + // Run the matching to populate matchedProtocols Set and Map + this.updateProtocolMatches(); + + // Retrieve the highest scoring Protocol + const bestMatch = this._getHighestScoringProtocol(); + + log.trace('ProtocolEngine::getBestProtocolMatch bestMatch', bestMatch); + + return bestMatch; + } + + /** + * Get the number of prior studies supplied in the priorStudies map property. + * + * @param {String} studyObjectID The study object ID of the study whose priors are needed + * @returns {number} The number of available prior studies with the same PatientID + */ + getNumberOfAvailablePriors(studyObjectID) { + return this.getAvailableStudyPriors(studyObjectID).length; + } + + /** + * Get the array of prior studies from a specific study. + * + * @param {String} studyObjectID The study object ID of the study whose priors are needed + * @returns {Array} The array of available priors or an empty array + */ + getAvailableStudyPriors(studyObjectID) { + const priors = this.priorStudies.get(studyObjectID); + + return priors instanceof Array ? priors : []; + } + + // Match images given a list of Studies and a Viewport's image matching reqs + matchImages(viewport, viewportIndex) { + log.trace('ProtocolEngine::matchImages'); + + const { + studyMatchingRules, + seriesMatchingRules, + imageMatchingRules: instanceMatchingRules, + } = viewport; + + const matchingScores = []; + const currentStudy = this.studies[0]; // @TODO: Should this be: this.studies[this.currentStudy] ??? + const firstInstance = currentStudy.getFirstInstance(); + + let highestStudyMatchingScore = 0; + let highestSeriesMatchingScore = 0; + + // Set custom attribute for study metadata and it's first instance + currentStudy.setCustomAttribute(ABSTRACT_PRIOR_VALUE, 0); + if (firstInstance instanceof InstanceMetadata) { + firstInstance.setCustomAttribute(ABSTRACT_PRIOR_VALUE, 0); + } + + // Only used if study matching rules has abstract prior values defined... + let priorStudies; + + studyMatchingRules.forEach(rule => { + if (rule.attribute === ABSTRACT_PRIOR_VALUE) { + const validatorType = Object.keys(rule.constraint)[0]; + const validator = Object.keys(rule.constraint[validatorType])[0]; + + let abstractPriorValue = rule.constraint[validatorType][validator]; + abstractPriorValue = parseInt(abstractPriorValue, 10); + // TODO: Restrict or clarify validators for abstractPriorValue? + + // No need to call it more than once... + if (!priorStudies) { + priorStudies = this.getAvailableStudyPriors( + currentStudy.getObjectID() + ); + } + + // TODO: Revisit this later: What about two studies with the same + // study date? + + let priorStudy; + if (abstractPriorValue === -1) { + priorStudy = priorStudies[priorStudies.length - 1]; + } else { + const studyIndex = Math.max(abstractPriorValue - 1, 0); + priorStudy = priorStudies[studyIndex]; + } + + // Invalid data + if ( + !(priorStudy instanceof StudyMetadata) && + !(priorStudy instanceof StudySummary) + ) { + return; + } + + const priorStudyObjectID = priorStudy.getObjectID(); + + // Check if study metadata is already in studies list + if ( + this.studies.find(study => study.getObjectID() === priorStudyObjectID) + ) { + return; + } + + // Get study metadata if necessary and load study in the viewer (each viewer should provide it's own load study method) + this.studyMetadataSource.loadStudy(priorStudy).then( + studyMetadata => { + // Set the custom attribute abstractPriorValue for the study metadata + studyMetadata.setCustomAttribute( + ABSTRACT_PRIOR_VALUE, + abstractPriorValue + ); + + // Also add custom attribute + const firstInstance = studyMetadata.getFirstInstance(); + if (firstInstance instanceof InstanceMetadata) { + firstInstance.setCustomAttribute( + ABSTRACT_PRIOR_VALUE, + abstractPriorValue + ); + } + + // Insert the new study metadata + this.studies.push(studyMetadata); + + // Update the viewport to refresh layout manager with new study + this.updateViewports(viewportIndex); + }, + error => { + log.warn(error); + throw new OHIFError( + `ProtocolEngine::matchImages could not get study metadata for the Study with the following ObjectID: ${priorStudyObjectID}` + ); + } + ); + } + // TODO: Add relative Date / time + }); + + this.studies.forEach(study => { + const studyMatchDetails = HPMatcher.match( + study.getFirstInstance(), + studyMatchingRules + ); + + // Prevent bestMatch from being updated if the matchDetails' required attribute check has failed + if ( + studyMatchDetails.requiredFailed === true || + studyMatchDetails.score < highestStudyMatchingScore + ) { + return; + } + + highestStudyMatchingScore = studyMatchDetails.score; + + study.forEachSeries(series => { + const seriesMatchDetails = HPMatcher.match( + series.getFirstInstance(), + seriesMatchingRules + ); + + // Prevent bestMatch from being updated if the matchDetails' required attribute check has failed + if ( + seriesMatchDetails.requiredFailed === true || + seriesMatchDetails.score < highestSeriesMatchingScore + ) { + return; + } + + highestSeriesMatchingScore = seriesMatchDetails.score; + + series.forEachInstance((instance, index) => { + // This tests to make sure there is actually image data in this instance + // TODO: Change this when we add PDF and MPEG support + // See https://ohiforg.atlassian.net/browse/LT-227 + // sopClassUid = x00080016 + // rows = x00280010 + if ( + !isImage(instance.getTagValue('x00080016')) && + !instance.getTagValue('x00280010') + ) { + return; + } + + const instanceMatchDetails = HPMatcher.match( + instance, + instanceMatchingRules + ); + + // Prevent bestMatch from being updated if the matchDetails' required attribute check has failed + if (instanceMatchDetails.requiredFailed === true) { + return; + } + + const matchDetails = { + passed: [], + failed: [], + }; + + matchDetails.passed = matchDetails.passed.concat( + instanceMatchDetails.details.passed + ); + matchDetails.passed = matchDetails.passed.concat( + seriesMatchDetails.details.passed + ); + matchDetails.passed = matchDetails.passed.concat( + studyMatchDetails.details.passed + ); + + matchDetails.failed = matchDetails.failed.concat( + instanceMatchDetails.details.failed + ); + matchDetails.failed = matchDetails.failed.concat( + seriesMatchDetails.details.failed + ); + matchDetails.failed = matchDetails.failed.concat( + studyMatchDetails.details.failed + ); + + const totalMatchScore = + instanceMatchDetails.score + + seriesMatchDetails.score + + studyMatchDetails.score; + const currentSOPInstanceUID = instance.getSOPInstanceUID(); + + const imageDetails = { + studyInstanceUid: study.getStudyInstanceUID(), + seriesInstanceUid: series.getSeriesInstanceUID(), + sopInstanceUid: currentSOPInstanceUID, + currentImageIdIndex: index, + matchingScore: totalMatchScore, + matchDetails: matchDetails, + sortingInfo: { + score: totalMatchScore, + study: + instance.getTagValue('x00080020') + + instance.getTagValue('x00080030'), // StudyDate = x00080020 StudyTime = x00080030 + series: parseInt(instance.getTagValue('x00200011')), // TODO: change for seriesDateTime SeriesNumber = x00200011 + instance: parseInt(instance.getTagValue('x00200013')), // TODO: change for acquisitionTime InstanceNumber = x00200013 + }, + }; + + // Find the displaySet + const displaySet = study.findDisplaySet(displaySet => + displaySet.images.find( + image => image.getSOPInstanceUID() === currentSOPInstanceUID + ) + ); + + // If the instance was found, set the displaySet ID + if (displaySet) { + imageDetails.displaySetInstanceUid = displaySet.getUID(); + imageDetails.imageId = instance.getImageId(); + } + + matchingScores.push(imageDetails); + }); + }); + }); + + // Sort the matchingScores + const sortingFunction = sortBy( + { + name: 'score', + reverse: true, + }, + { + name: 'study', + reverse: true, + }, + { + name: 'instance', + }, + { + name: 'series', + } + ); + matchingScores.sort((a, b) => + sortingFunction(a.sortingInfo, b.sortingInfo) + ); + + const bestMatch = matchingScores[0]; + + log.trace('ProtocolEngine::matchImages bestMatch', bestMatch); + + return { + bestMatch, + matchingScores, + }; + } + + /** + * Sets the current layout + * + * @param rows + * @param columns + */ + setLayout(rows, columns) { + if (rows < 1 && columns < 1) { + log.error(`Invalid layout ${rows} x ${columns}`); + return; + } + + if (typeof this.options.setLayout !== 'function') { + log.error('Hanging Protocol Engine setLayout callback is not defined'); + return; + } + + let viewports = []; + const numViewports = rows * columns; + + for (let i = 0; i < numViewports; i++) { + viewports.push({ + height: `${100 / rows}%`, + width: `${100 / columns}%`, + }); + } + + this.options.setLayout({ viewports }); + } + + /** + * Rerenders viewports that are part of the current layout manager + * using the matching rules internal to each viewport. + * + * If this function is provided the index of a viewport, only the specified viewport + * is rerendered. + * + * @param viewportIndex + */ + updateViewports(viewportIndex) { + log.trace( + `ProtocolEngine::updateViewports viewportIndex: ${viewportIndex}` + ); + + // Make sure we have an active protocol with a non-empty array of display sets + if (!this.getNumProtocolStages()) { + return; + } + + // Retrieve the current stage + const stageModel = this.getCurrentStageModel(); + + // If the current stage does not fulfill the requirements to be displayed, + // stop here. + if ( + !stageModel || + !stageModel.viewportStructure || + !stageModel.viewports || + !stageModel.viewports.length + ) { + return; + } + + // Retrieve the layoutTemplate associated with the current display set's viewport structure + // If no such template name exists, stop here. + const layoutTemplateName = stageModel.viewportStructure.getLayoutTemplateName(); + if (!layoutTemplateName) { + return; + } + + // Retrieve the properties associated with the current display set's viewport structure template + // If no such layout properties exist, stop here. + const layoutProps = stageModel.viewportStructure.properties; + if (!layoutProps) { + return; + } + + // Create an empty array to store the output viewportData + const viewportData = []; + + // Empty the matchDetails associated with the ProtocolEngine. + // This will be used to store the pass/fail details and score + // for each of the viewport matching procedures + this.matchDetails = []; + + // Loop through each viewport + stageModel.viewports.forEach((viewport, viewportIndex) => { + const details = this.matchImages(viewport, viewportIndex); + + this.matchDetails[viewportIndex] = details; + + // Convert any YES/NO values into true/false for Cornerstone + const cornerstoneViewportParams = {}; + + // Cache viewportSettings keys + const viewportSettingsKeys = Object.keys(viewport.viewportSettings); + + viewportSettingsKeys.forEach(key => { + let value = viewport.viewportSettings[key]; + if (value === 'YES') { + value = true; + } else if (value === 'NO') { + value = false; + } + + cornerstoneViewportParams[key] = value; + }); + + // imageViewerViewports occasionally needs relevant layout data in order to set + // the element style of the viewport in question + const currentViewportData = { + viewportIndex, + viewport: cornerstoneViewportParams, + ...layoutProps, + }; + + const customSettings = []; + viewportSettingsKeys.forEach(id => { + const setting = CustomViewportSettings[id]; + if (!setting) { + return; + } + + customSettings.push({ + id: id, + value: viewport.viewportSettings[id], + }); + }); + + currentViewportData.renderedCallback = element => { + //console.log('renderedCallback for ' + element.id); + customSettings.forEach(customSetting => { + log.trace( + `ProtocolEngine::currentViewportData.renderedCallback Applying custom setting: ${ + customSetting.id + }` + ); + log.trace( + `ProtocolEngine::currentViewportData.renderedCallback with value: ${ + customSetting.value + }` + ); + + const setting = CustomViewportSettings[customSetting.id]; + setting.callback(element, customSetting.value); + }); + }; + + let currentMatch = details.bestMatch; + let currentPosition = 1; + const scoresLength = details.matchingScores.length; + while ( + currentPosition < scoresLength && + viewportData.find(a => a.imageId === currentMatch.imageId) + ) { + currentMatch = details.matchingScores[currentPosition]; + currentPosition++; + } + + if (currentMatch && currentMatch.imageId) { + currentViewportData.studyInstanceUid = currentMatch.studyInstanceUid; + currentViewportData.seriesInstanceUid = currentMatch.seriesInstanceUid; + currentViewportData.sopInstanceUid = currentMatch.sopInstanceUid; + currentViewportData.currentImageIdIndex = + currentMatch.currentImageIdIndex; + currentViewportData.displaySetInstanceUid = + currentMatch.displaySetInstanceUid; + currentViewportData.imageId = currentMatch.imageId; + } + + // @TODO Why should we throw an exception when a best match is not found? This was aborting the whole process. + // if (!currentViewportData.displaySetInstanceUid) { + // throw new OHIFError('ProtocolEngine::updateViewports No matching display set found?'); + // } + + viewportData.push(currentViewportData); + }); + + this.setLayout(layoutProps.rows, layoutProps.columns); + + if (typeof this.options.setViewportSpecificData !== 'function') { + log.error( + 'Hanging Protocol Engine setViewportSpecificData callback is not defined' + ); + return; + } + + // If viewportIndex is defined, then update only that viewport + if (viewportIndex !== undefined && viewportData[viewportIndex]) { + this.options.setViewportSpecificData( + viewportIndex, + viewportData[viewportIndex] + ); + return; + } + + // Update all viewports + viewportData.forEach(viewportSpecificData => { + this.options.setViewportSpecificData( + viewportSpecificData.viewportIndex, + viewportSpecificData + ); + }); + } + + /** + * Sets the current Hanging Protocol to the specified Protocol + * An optional argument can also be used to prevent the updating of the Viewports + * + * @param newProtocol + * @param updateViewports + */ + setHangingProtocol(newProtocol, updateViewports = true) { + log.trace('ProtocolEngine::setHangingProtocol newProtocol', newProtocol); + log.trace( + `ProtocolEngine::setHangingProtocol updateViewports = ${updateViewports}` + ); + + // Reset the array of newStageIds + this.newStageIds = []; + + if (Protocol.prototype.isPrototypeOf(newProtocol)) { + this.protocol = newProtocol; + } else { + this.protocol = new Protocol(); + this.protocol.fromObject(newProtocol); + } + + this.stage = 0; + + // Update viewports by default + if (updateViewports) { + this.updateViewports(); + } + } + + /** + * Check if the next stage is available + * @return {Boolean} True if next stage is available or false otherwise + */ + isNextStageAvailable() { + const numberOfStages = this.getNumProtocolStages(); + + return this.stage + 1 < numberOfStages; + } + + /** + * Check if the previous stage is available + * @return {Boolean} True if previous stage is available or false otherwise + */ + isPreviousStageAvailable() { + return this.stage - 1 >= 0; + } + + /** + * Changes the current stage to a new stage index in the display set sequence. + * It checks if the next stage exists. + * + * @param {Integer} stageAction An integer value specifying wheater next (1) or previous (-1) stage + * @return {Boolean} True if new stage has set or false, otherwise + */ + setCurrentProtocolStage(stageAction) { + // Check if previous or next stage is available + if (stageAction === -1 && !this.isPreviousStageAvailable()) { + return false; + } else if (stageAction === 1 && !this.isNextStageAvailable()) { + return false; + } + + // Sets the new stage + this.stage += stageAction; + + // Log the new stage + log.trace(`ProtocolEngine::setCurrentProtocolStage stage = ${this.stage}`); + + // Since stage has changed, we need to update the viewports + // and redo matchings + this.updateViewports(); + + // Everything went well + return true; + } + + /** + * Retrieves the number of Stages in the current Protocol or + * undefined if no protocol or stages are set + */ + getNumProtocolStages() { + if ( + !this.protocol || + !this.protocol.stages || + !this.protocol.stages.length + ) { + return; + } + + return this.protocol.stages.length; + } + + /** + * Switches to the next protocol stage in the display set sequence + */ + nextProtocolStage() { + log.trace('ProtocolEngine::nextProtocolStage'); + + if (!this.setCurrentProtocolStage(1)) { + log.trace('ProtocolEngine::nextProtocolStage failed'); + } + } + + /** + * Switches to the previous protocol stage in the display set sequence + */ + previousProtocolStage() { + log.trace('ProtocolEngine::previousProtocolStage'); + + if (!this.setCurrentProtocolStage(-1)) { + log.trace('ProtocolEngine::previousProtocolStage failed'); + } + } +} diff --git a/platform/core/src/hanging-protocols/classes/Protocol.js b/platform/core/src/hanging-protocols/classes/Protocol.js new file mode 100644 index 00000000000..5e71825aeb7 --- /dev/null +++ b/platform/core/src/hanging-protocols/classes/Protocol.js @@ -0,0 +1,244 @@ +import { ProtocolMatchingRule } from './rules'; +import { removeFromArray } from '../lib/removeFromArray'; +import Stage from './Stage'; +import guid from '../../utils/guid'; +import user from '../../user'; + +/** + * This class represents a Hanging Protocol at the highest level + * + * @type {Protocol} + */ +export default class Protocol { + /** + * The Constructor for the Class to create a Protocol with the bare + * minimum information + * + * @param name The desired name for the Protocol + */ + constructor(name) { + // Create a new UUID for this Protocol + this.id = guid(); + + // Store a value which determines whether or not a Protocol is locked + // This is probably temporary, since we will eventually have role / user + // checks for editing. For now we just need it to prevent changes to the + // default protocols. + this.locked = false; + + // Boolean value to indicate if the protocol has updated priors information + // it's set in "updateNumberOfPriorsReferenced" function + this.hasUpdatedPriorsInformation = false; + + // Apply the desired name + this.name = name; + + // Set the created and modified dates to Now + this.createdDate = new Date(); + this.modifiedDate = new Date(); + + // If we are logged in while creating this Protocol, + // store this information as well + if (user.userLoggedIn && user.userLoggedIn()) { + this.createdBy = user.getUserId(); + this.modifiedBy = user.getUserId(); + } + + // Create two empty Sets specifying which roles + // have read and write access to this Protocol + this.availableTo = new Set(); + this.editableBy = new Set(); + + // Define empty arrays for the Protocol matching rules + // and Stages + this.protocolMatchingRules = []; + this.stages = []; + + // Define auxiliary values for priors + this.numberOfPriorsReferenced = -1; + } + + getNumberOfPriorsReferenced(skipCache = false) { + let numberOfPriorsReferenced = + skipCache !== true ? this.numberOfPriorsReferenced : -1; + + // Check if information is cached already + if (numberOfPriorsReferenced > -1) { + return numberOfPriorsReferenced; + } + + numberOfPriorsReferenced = 0; + + // Search each study matching rule for prior rules + // Each stage can have many viewports that can have + // multiple study matching rules. + this.stages.forEach(stage => { + if (!stage.viewports) { + return; + } + + stage.viewports.forEach(viewport => { + if (!viewport.studyMatchingRules) { + return; + } + + viewport.studyMatchingRules.forEach(rule => { + // If the current rule is not a priors rule, it will return -1 then numberOfPriorsReferenced will continue to be 0 + const priorsReferenced = rule.getNumberOfPriorsReferenced(); + if (priorsReferenced > numberOfPriorsReferenced) { + numberOfPriorsReferenced = priorsReferenced; + } + }); + }); + }); + + this.numberOfPriorsReferenced = numberOfPriorsReferenced; + + return numberOfPriorsReferenced; + } + + updateNumberOfPriorsReferenced() { + this.getNumberOfPriorsReferenced(true); + } + + /** + * Method to update the modifiedDate when the Protocol + * has been changed + */ + protocolWasModified() { + // If we are logged in while modifying this Protocol, + // store this information as well + if (user.userLoggedIn && user.userLoggedIn()) { + this.modifiedBy = user.getUserId(); + } + + // Protocol has been modified, so mark priors information + // as "outdated" + this.hasUpdatedPriorsInformation = false; + + // Update number of priors referenced info + this.updateNumberOfPriorsReferenced(); + + // Update the modifiedDate with the current Date/Time + this.modifiedDate = new Date(); + } + + /** + * Occasionally the Protocol class needs to be instantiated from a JavaScript Object + * containing the Protocol data. This function fills in a Protocol with the Object + * data. + * + * @param input A Protocol as a JavaScript Object, e.g. retrieved from JSON + */ + fromObject(input) { + // Check if the input already has an ID + // If so, keep it. It not, create a new UUID + this.id = input.id || guid(); + + // Assign the input name to the Protocol + this.name = input.name; + + // Retrieve locked status, use !! to make it truthy + // so that undefined values will be set to false + this.locked = !!input.locked; + + // TODO: Check how to regenerate Set from Object + //this.availableTo = new Set(input.availableTo); + //this.editableBy = new Set(input.editableBy); + + // If the input contains Protocol matching rules + if (input.protocolMatchingRules) { + input.protocolMatchingRules.forEach(ruleObject => { + // Create new Rules from the stored data + var rule = new ProtocolMatchingRule(); + rule.fromObject(ruleObject); + + // Add them to the Protocol + this.protocolMatchingRules.push(rule); + }); + } + + // If the input contains data for various Stages in the + // display set sequence + if (input.stages) { + input.stages.forEach(stageObject => { + // Create Stages from the stored data + var stage = new Stage(); + stage.fromObject(stageObject); + + // Add them to the Protocol + this.stages.push(stage); + }); + } + } + + /** + * Creates a clone of the current Protocol with a new name + * + * @param name + * @returns {Protocol|*} + */ + createClone(name) { + // Create a new JavaScript independent of the current Protocol + var currentProtocol = Object.assign({}, this); + + // Create a new Protocol to return + var clonedProtocol = new Protocol(); + + // Apply the desired properties + currentProtocol.id = clonedProtocol.id; + clonedProtocol.fromObject(currentProtocol); + + // If we have specified a name, assign it + if (name) { + clonedProtocol.name = name; + } + + // Unlock the clone + clonedProtocol.locked = false; + + // Return the cloned Protocol + return clonedProtocol; + } + + /** + * Adds a Stage to this Protocol's display set sequence + * + * @param stage + */ + addStage(stage) { + this.stages.push(stage); + + // Update the modifiedDate and User that last + // modified this Protocol + this.protocolWasModified(); + } + + /** + * Adds a Rule to this Protocol's array of matching rules + * + * @param rule + */ + addProtocolMatchingRule(rule) { + this.protocolMatchingRules.push(rule); + + // Update the modifiedDate and User that last + // modified this Protocol + this.protocolWasModified(); + } + + /** + * Removes a Rule from this Protocol's array of matching rules + * + * @param rule + */ + removeProtocolMatchingRule(rule) { + var wasRemoved = removeFromArray(this.protocolMatchingRules, rule); + + // Update the modifiedDate and User that last + // modified this Protocol + if (wasRemoved) { + this.protocolWasModified(); + } + } +} diff --git a/platform/core/src/hanging-protocols/classes/Rule.js b/platform/core/src/hanging-protocols/classes/Rule.js new file mode 100644 index 00000000000..bf0ddc0dc5f --- /dev/null +++ b/platform/core/src/hanging-protocols/classes/Rule.js @@ -0,0 +1,174 @@ +import { comparators } from '../lib/comparators'; +import guid from '../../utils/guid'; + +const EQUALS_REGEXP = /^equals$/; + +/** + * This Class represents a Rule to be evaluated given a set of attributes + * Rules have: + * - An attribute (e.g. 'seriesDescription') + * - A constraint Object, in the form required by Validate.js: + * + * rule.constraint = { + * contains: { + * value: 'T-1' + * } + * }; + * + * Note: In this example we use the 'contains' Validator, which is a custom Validator defined in Viewerbase + * + * - A value for whether or not they are Required to be matched (default: False) + * - A value for their relative weighting during Protocol or Image matching (default: 1) + */ +export default class Rule { + /** + * The Constructor for the Class to create a Rule with the bare + * minimum information + * + * @param name The desired name for the Rule + */ + constructor(attribute, constraint, required, weight) { + // Create a new UUID for this Rule + this.id = guid(); + + // Set the Rule's weight (defaults to 1) + this.weight = weight || 1; + + // If an attribute is specified, assign it + if (attribute) { + this.attribute = attribute; + } + + // If a constraint is specified, assign it + if (constraint) { + this.constraint = constraint; + } + + // If a value for 'required' is specified, assign it + if (required === undefined) { + // If no value was specified, default to False + this.required = false; + } else { + this.required = required; + } + + // Cache for constraint info object + this._constraintInfo = void 0; + + // Cache for validator and value object + this._validatorAndValue = void 0; + } + + /** + * Occasionally the Rule class needs to be instantiated from a JavaScript Object. + * This function fills in a Protocol with the Object data. + * + * @param input A Rule as a JavaScript Object, e.g. retrieved from JSON + */ + fromObject(input) { + // Check if the input already has an ID + // If so, keep it. It not, create a new UUID + this.id = input.id || guid(); + + // Assign the specified input data to the Rule + this.required = input.required; + this.weight = input.weight; + this.attribute = input.attribute; + this.constraint = input.constraint; + } + + /** + * Get the constraint info object for the current constraint + * @return {Object\undefined} Constraint object or undefined if current constraint + * is not valid or not found in comparators list + */ + getConstraintInfo() { + let constraintInfo = this._constraintInfo; + // Check if info is cached already + if (constraintInfo !== void 0) { + return constraintInfo; + } + + const ruleConstraint = Object.keys(this.constraint)[0]; + + if (ruleConstraint !== void 0) { + constraintInfo = comparators.find( + comparator => ruleConstraint === comparator.id + ); + } + + // Cache this information for later use + this._constraintInfo = constraintInfo; + + return constraintInfo; + } + + /** + * Check if current rule is related to priors + * @return {Boolean} True if a rule is related to priors or false otherwise + */ + isRuleForPrior() { + // @TODO: Should we check this too? this.attribute === 'relativeTime' + return this.attribute === 'abstractPriorValue'; + } + + /** + * If the current rule is a rule for priors, returns the number of referenced priors. Otherwise, returns -1. + * @return {Number} The number of referenced priors or -1 if not applicable. Returns zero if the actual value could not be determined. + */ + getNumberOfPriorsReferenced() { + if (!this.isRuleForPrior()) { + return -1; + } + + // Get rule's validator and value + const ruleValidatorAndValue = this.getConstraintValidatorAndValue(); + const { value, validator } = ruleValidatorAndValue; + const intValue = parseInt(value, 10) || 0; // avoid possible NaN + + // "Equal to" validators + if (EQUALS_REGEXP.test(validator)) { + // In this case, -1 (the oldest prior) indicates that at least one study is used + return intValue < 0 ? 1 : intValue; + } + + // Default cases return value + return 0; + } + + /** + * Get the constraint validator and value + * @return {Object|undefined} Returns an object containing the validator and it's value or undefined + */ + getConstraintValidatorAndValue() { + let validatorAndValue = this._validatorAndValue; + + // Check if validator and value are cached already + if (validatorAndValue !== void 0) { + return validatorAndValue; + } + + // Get the constraint info object + const constraintInfo = this.getConstraintInfo(); + + // Constraint info object exists and is valid + if (constraintInfo !== void 0) { + const validator = constraintInfo.validator; + const currentValidator = this.constraint[validator]; + + if (currentValidator) { + const constraintValidator = constraintInfo.validatorOption; + const constraintValue = currentValidator[constraintValidator]; + + validatorAndValue = { + value: constraintValue, + validator: constraintInfo.id, + }; + + this._validatorAndValue = validatorAndValue; + } + } + + return validatorAndValue; + } +} diff --git a/platform/core/src/hanging-protocols/classes/Stage.js b/platform/core/src/hanging-protocols/classes/Stage.js new file mode 100644 index 00000000000..f6cb34ae91e --- /dev/null +++ b/platform/core/src/hanging-protocols/classes/Stage.js @@ -0,0 +1,85 @@ +import ViewportStructure from './ViewportStructure'; +import Viewport from './Viewport'; +import guid from '../../utils/guid'; + +/** + * A Stage is one step in the Display Set Sequence for a Hanging Protocol + * + * Stages are defined as a ViewportStructure and an array of Viewports + * + * @type {Stage} + */ +export default class Stage { + constructor(ViewportStructure, name) { + // Create a new UUID for this Stage + this.id = guid(); + + // Assign the name and ViewportStructure provided + this.name = name; + this.viewportStructure = ViewportStructure; + + // Create an empty array for the Viewports + this.viewports = []; + + // Set the created date to Now + this.createdDate = new Date(); + } + + /** + * Creates a clone of the current Stage with a new name + * + * @param name + * @returns {Stage|*} + */ + createClone(name) { + // Create a new JavaScript independent of the current Protocol + var currentStage = Object.assign({}, this); + + // Create a new Stage to return + var clonedStage = new Stage(); + + // Assign the desired properties + currentStage.id = clonedStage.id; + clonedStage.fromObject(currentStage); + + // If we have specified a name, assign it + if (name) { + clonedStage.name = name; + } + + // Return the cloned Stage + return clonedStage; + } + + /** + * Occasionally the Stage class needs to be instantiated from a JavaScript Object. + * This function fills in a Protocol with the Object data. + * + * @param input A Stage as a JavaScript Object, e.g. retrieved from JSON + */ + fromObject(input) { + // Check if the input already has an ID + // If so, keep it. It not, create a new UUID + this.id = input.id || guid(); + + // Assign the input name to the Stage + this.name = input.name; + + // If a ViewportStructure is present in the input, add it from the + // input data + this.viewportStructure = new ViewportStructure(); + this.viewportStructure.fromObject(input.viewportStructure); + + // If any viewports are present in the input object + if (input.viewports) { + input.viewports.forEach(viewportObject => { + // Create a new Viewport with their data + var viewport = new Viewport(); + viewport.fromObject(viewportObject); + + // Add it to the viewports array + this.viewports.push(viewport); + }); + } + } +} diff --git a/platform/core/src/hanging-protocols/classes/Viewport.js b/platform/core/src/hanging-protocols/classes/Viewport.js new file mode 100644 index 00000000000..6187c3298d5 --- /dev/null +++ b/platform/core/src/hanging-protocols/classes/Viewport.js @@ -0,0 +1,85 @@ +import { + StudyMatchingRule, + SeriesMatchingRule, + ImageMatchingRule, +} from './rules'; +import { removeFromArray } from '../lib/removeFromArray'; + +/** + * This Class defines a Viewport in the Hanging Protocol Stage. A Viewport contains + * arrays of Rules that are matched in the ProtocolEngine in order to determine which + * images should be hung. + * + * @type {Viewport} + */ +export default class Viewport { + constructor() { + this.viewportSettings = {}; + this.imageMatchingRules = []; + this.seriesMatchingRules = []; + this.studyMatchingRules = []; + } + + /** + * Occasionally the Viewport class needs to be instantiated from a JavaScript Object. + * This function fills in a Viewport with the Object data. + * + * @param input The Viewport as a JavaScript Object, e.g. retrieved from JSON + */ + fromObject(input) { + // If ImageMatchingRules exist, create them from the Object data + // and add them to the Viewport's imageMatchingRules array + if (input.imageMatchingRules) { + input.imageMatchingRules.forEach(ruleObject => { + var rule = new ImageMatchingRule(); + rule.fromObject(ruleObject); + this.imageMatchingRules.push(rule); + }); + } + + // If SeriesMatchingRules exist, create them from the Object data + // and add them to the Viewport's seriesMatchingRules array + if (input.seriesMatchingRules) { + input.seriesMatchingRules.forEach(ruleObject => { + var rule = new SeriesMatchingRule(); + rule.fromObject(ruleObject); + this.seriesMatchingRules.push(rule); + }); + } + + // If StudyMatchingRules exist, create them from the Object data + // and add them to the Viewport's studyMatchingRules array + if (input.studyMatchingRules) { + input.studyMatchingRules.forEach(ruleObject => { + var rule = new StudyMatchingRule(); + rule.fromObject(ruleObject); + this.studyMatchingRules.push(rule); + }); + } + + // If ViewportSettings exist, add them to the current protocol + if (input.viewportSettings) { + this.viewportSettings = input.viewportSettings; + } + } + + /** + * Finds and removes a rule from whichever array it exists in. + * It is not required to specify if it exists in studyMatchingRules, + * seriesMatchingRules, or imageMatchingRules + * + * @param rule + */ + removeRule(rule) { + var array; + if (rule instanceof StudyMatchingRule) { + array = this.studyMatchingRules; + } else if (rule instanceof SeriesMatchingRule) { + array = this.seriesMatchingRules; + } else if (rule instanceof ImageMatchingRule) { + array = this.imageMatchingRules; + } + + removeFromArray(array, rule); + } +} diff --git a/platform/core/src/hanging-protocols/classes/ViewportStructure.js b/platform/core/src/hanging-protocols/classes/ViewportStructure.js new file mode 100644 index 00000000000..2a605fa06bd --- /dev/null +++ b/platform/core/src/hanging-protocols/classes/ViewportStructure.js @@ -0,0 +1,53 @@ +/** + * The ViewportStructure class represents the layout and layout properties that + * Viewports are displayed in. ViewportStructure has a type, which corresponds to + * a layout template, and a set of properties, which depend on the type. + * + * @type {ViewportStructure} + */ +export default class ViewportStructure { + constructor(type, properties) { + this.type = type; + this.properties = properties; + } + + /** + * Occasionally the ViewportStructure class needs to be instantiated from a JavaScript Object. + * This function fills in a ViewportStructure with the Object data. + * + * @param input The ViewportStructure as a JavaScript Object, e.g. retrieved from JSON + */ + fromObject(input) { + this.type = input.type; + this.properties = input.properties; + } + + /** + * Retrieve the layout template name based on the layout type + * + * @returns {string} + */ + getLayoutTemplateName() { + // Viewport structure can be updated later when we build more complex display layouts + switch (this.type) { + case 'grid': + return 'gridLayout'; + } + } + + /** + * Retrieve the number of Viewports required for this layout + * given the layout type and properties + * + * @returns {string} + */ + getNumViewports() { + // Viewport structure can be updated later when we build more complex display layouts + switch (this.type) { + case 'grid': + // For the typical grid layout, we only need to multiply rows by columns to + // obtain the number of viewports + return this.properties.rows * this.properties.columns; + } + } +} diff --git a/platform/core/src/hanging-protocols/classes/index.js b/platform/core/src/hanging-protocols/classes/index.js new file mode 100644 index 00000000000..b27b088de77 --- /dev/null +++ b/platform/core/src/hanging-protocols/classes/index.js @@ -0,0 +1,23 @@ +import Protocol from './Protocol.js'; +import Rule from './Rule.js'; +import Stage from './Stage.js'; +import Viewport from './Viewport.js'; +import ViewportStructure from './ViewportStructure.js'; +import { + ProtocolMatchingRule, + StudyMatchingRule, + SeriesMatchingRule, + ImageMatchingRule, +} from './rules.js'; + +export { + Protocol, + Rule, + Stage, + Viewport, + ViewportStructure, + ProtocolMatchingRule, + StudyMatchingRule, + SeriesMatchingRule, + ImageMatchingRule, +}; diff --git a/platform/core/src/hanging-protocols/classes/rules.js b/platform/core/src/hanging-protocols/classes/rules.js new file mode 100644 index 00000000000..3c94b71c5b6 --- /dev/null +++ b/platform/core/src/hanging-protocols/classes/rules.js @@ -0,0 +1,40 @@ +import Rule from './Rule'; + +/** + * The ProtocolMatchingRule Class extends the Rule Class. + * + * At present it does not add any new methods or attributes + * @type {ProtocolMatchingRule} + */ +class ProtocolMatchingRule extends Rule {} + +/** + * The StudyMatchingRule Class extends the Rule Class. + * + * At present it does not add any new methods or attributes + * @type {StudyMatchingRule} + */ +class StudyMatchingRule extends Rule {} + +/** + * The SeriesMatchingRule Class extends the Rule Class. + * + * At present it does not add any new methods or attributes + * @type {SeriesMatchingRule} + */ +class SeriesMatchingRule extends Rule {} + +/** + * The ImageMatchingRule class extends the Rule Class. + * + * At present it does not add any new methods or attributes + * @type {ImageMatchingRule} + */ +class ImageMatchingRule extends Rule {} + +export { + ProtocolMatchingRule, + StudyMatchingRule, + SeriesMatchingRule, + ImageMatchingRule, +}; diff --git a/platform/core/src/hanging-protocols/customAttributes.js b/platform/core/src/hanging-protocols/customAttributes.js new file mode 100644 index 00000000000..21a481ef24e --- /dev/null +++ b/platform/core/src/hanging-protocols/customAttributes.js @@ -0,0 +1,30 @@ +// Define an empty object to store callbacks that are used to retrieve custom attributes +// The simplest example for a custom attribute is the Timepoint type (i.e. baseline or follow-up) +// used in the LesionTracker application. +// +// Timepoint type can be obtained given a studyId, and this is done through a custom callback. +// Developers can define attributes (i.e. attributeId = timepointType) with a name ('Timepoint Type') +// and a callback function that is used to calculate them. +// +// The input to the callback, which is called during viewport-image matching rule evaluation +// is the set of attributes that contains the specified attribute. In our example, timepointType is +// linked to the study attributes, and so the inputs to the callback is an object containing +// the study attributes. +const CustomAttributeRetrievalCallbacks = {}; + +/** + * Adds a custom attribute to be used in the HangingProtocol UI and matching rules, including a + * callback that will be used to calculate the attribute value. + * + * @param attributeId The ID used to refer to the attribute (e.g. 'timepointType') + * @param attributeName The name of the attribute to be displayed (e.g. 'Timepoint Type') + * @param callback The function used to calculate the attribute value from the other attributes at its level (e.g. study/series/image) + */ +function addCustomAttribute(attributeId, attributeName, callback) { + CustomAttributeRetrievalCallbacks[attributeId] = { + name: attributeName, + callback: callback, + }; +} + +export { CustomAttributeRetrievalCallbacks, addCustomAttribute }; diff --git a/platform/core/src/hanging-protocols/customViewportSettings.js b/platform/core/src/hanging-protocols/customViewportSettings.js new file mode 100644 index 00000000000..c47f1ce3b13 --- /dev/null +++ b/platform/core/src/hanging-protocols/customViewportSettings.js @@ -0,0 +1,22 @@ +// Define an empty object to store callbacks that are used to apply custom viewport settings +// after a viewport is rendered. +const CustomViewportSettings = {}; + +/** + * Adds a custom setting that can be chosen in the HangingProtocol UI and applied to a Viewport + * + * @param settingId The ID used to refer to the setting (e.g. 'displayCADMarkers') + * @param settingName The name of the setting to be displayed (e.g. 'Display CAD Markers') + * @param options + * @param callback A function to be run after a viewport is rendered with a series + */ +function addCustomViewportSetting(settingId, settingName, options, callback) { + CustomViewportSettings[settingId] = { + id: settingId, + text: settingName, + options: options, + callback: callback, + }; +} + +export { CustomViewportSettings, addCustomViewportSetting }; diff --git a/platform/core/src/hanging-protocols/hardcodedData.js b/platform/core/src/hanging-protocols/hardcodedData.js new file mode 100644 index 00000000000..47781f994da --- /dev/null +++ b/platform/core/src/hanging-protocols/hardcodedData.js @@ -0,0 +1,133 @@ +export const attributeDefaults = { + abstractPriorValue: 0, +}; + +export const displaySettings = { + invert: { + id: 'invert', + text: 'Show Grayscale Inverted', + defaultValue: 'NO', + options: ['YES', 'NO'], + }, +}; + +// @TODO Fix abstractPriorValue comparison +export const studyAttributes = [ + { + id: 'x00100020', + text: '(x00100020) Patient ID', + }, + { + id: 'x0020000d', + text: '(x0020000d) Study Instance UID', + }, + { + id: 'x00080020', + text: '(x00080020) Study Date', + }, + { + id: 'x00080030', + text: '(x00080030) Study Time', + }, + { + id: 'x00081030', + text: '(x00081030) Study Description', + }, + { + id: 'abstractPriorValue', + text: 'Abstract Prior Value', + }, +]; + +export const protocolAttributes = [ + { + id: 'x00100020', + text: '(x00100020) Patient ID', + }, + { + id: 'x0020000d', + text: '(x0020000d) Study Instance UID', + }, + { + id: 'x00080020', + text: '(x00080020) Study Date', + }, + { + id: 'x00080030', + text: '(x00080030) Study Time', + }, + { + id: 'x00081030', + text: '(x00081030) Study Description', + }, + { + id: 'anatomicRegion', + text: 'Anatomic Region', + }, +]; + +export const seriesAttributes = [ + { + id: 'x0020000e', + text: '(x0020000e) Series Instance UID', + }, + { + id: 'x00080060', + text: '(x00080060) Modality', + }, + { + id: 'x00200011', + text: '(x00200011) Series Number', + }, + { + id: 'x0008103e', + text: '(x0008103e) Series Description', + }, + { + id: 'numImages', + text: 'Number of Images', + }, +]; + +export const instanceAttributes = [ + { + id: 'x00080016', + text: '(x00080016) SOP Class UID', + }, + { + id: 'x00080018', + text: '(x00080018) SOP Instance UID', + }, + { + id: 'x00185101', + text: '(x00185101) View Position', + }, + { + id: 'x00200013', + text: '(x00200013) Instance Number', + }, + { + id: 'x00080008', + text: '(x00080008) Image Type', + }, + { + id: 'x00181063', + text: '(x00181063) Frame Time', + }, + { + id: 'x00200060', + text: '(x00200060) Laterality', + }, + { + id: 'x00541330', + text: '(x00541330) Image Index', + }, + { + id: 'x00280004', + text: '(x00280004) Photometric Interpretation', + }, + { + id: 'x00180050', + text: '(x00180050) Slice Thickness', + }, +]; diff --git a/platform/core/src/hanging-protocols/index.js b/platform/core/src/hanging-protocols/index.js new file mode 100644 index 00000000000..b0d2cdb312f --- /dev/null +++ b/platform/core/src/hanging-protocols/index.js @@ -0,0 +1,14 @@ +import ProtocolEngine from './ProtocolEngine.js'; +import { ProtocolStore, ProtocolStrategy } from './protocolStore'; +import { addCustomAttribute } from './customAttributes'; +import { addCustomViewportSetting } from './customViewportSettings'; + +const hangingProtocols = { + ProtocolEngine, + ProtocolStore, + ProtocolStrategy, + addCustomAttribute, + addCustomViewportSetting, +}; + +export default hangingProtocols; diff --git a/platform/core/src/hanging-protocols/lib/comparators.js b/platform/core/src/hanging-protocols/lib/comparators.js new file mode 100644 index 00000000000..ce76a4d822a --- /dev/null +++ b/platform/core/src/hanging-protocols/lib/comparators.js @@ -0,0 +1,98 @@ +const comparators = [ + { + id: 'equals', + name: '= (Equals)', + validator: 'equals', + validatorOption: 'value', + description: 'The attribute must equal this value.', + }, + { + id: 'doesNotEqual', + name: '!= (Does not equal)', + validator: 'doesNotEqual', + validatorOption: 'value', + description: 'The attribute must not equal this value.', + }, + { + id: 'contains', + name: 'Contains', + validator: 'contains', + validatorOption: 'value', + description: 'The attribute must contain this value.', + }, + { + id: 'doesNotContain', + name: 'Does not contain', + validator: 'doesNotContain', + validatorOption: 'value', + description: 'The attribute must not contain this value.', + }, + { + id: 'startsWith', + name: 'Starts with', + validator: 'startsWith', + validatorOption: 'value', + description: 'The attribute must start with this value.', + }, + { + id: 'endsWith', + name: 'Ends with', + validator: 'endsWith', + validatorOption: 'value', + description: 'The attribute must end with this value.', + }, + { + id: 'onlyInteger', + name: 'Only Integers', + validator: 'numericality', + validatorOption: 'onlyInteger', + description: "Real numbers won't be allowed.", + }, + { + id: 'greaterThan', + name: '> (Greater than)', + validator: 'numericality', + validatorOption: 'greaterThan', + description: 'The attribute has to be greater than this value.', + }, + { + id: 'greaterThanOrEqualTo', + name: '>= (Greater than or equal to)', + validator: 'numericality', + validatorOption: 'greaterThanOrEqualTo', + description: 'The attribute has to be at least this value.', + }, + { + id: 'lessThanOrEqualTo', + name: '<= (Less than or equal to)', + validator: 'numericality', + validatorOption: 'lessThanOrEqualTo', + description: 'The attribute can be this value at the most.', + }, + { + id: 'lessThan', + name: '< (Less than)', + validator: 'numericality', + validatorOption: 'lessThan', + description: 'The attribute has to be less than this value.', + }, + { + id: 'odd', + name: 'Odd', + validator: 'numericality', + validatorOption: 'odd', + description: 'The attribute has to be odd.', + }, + { + id: 'even', + name: 'Even', + validator: 'numericality', + validatorOption: 'even', + description: 'The attribute has to be even.', + }, +]; + +// Immutable object +Object.freeze(comparators); + +export { comparators }; diff --git a/platform/core/src/hanging-protocols/lib/displayConstraint.js b/platform/core/src/hanging-protocols/lib/displayConstraint.js new file mode 100644 index 00000000000..17368c87721 --- /dev/null +++ b/platform/core/src/hanging-protocols/lib/displayConstraint.js @@ -0,0 +1,71 @@ +const attributeCache = Object.create(null); +const REGEXP = /^\([x0-9a-f]+\)/; + +const humanize = text => { + let humanized = text.replace(/([A-Z])/g, ' $1'); // insert a space before all caps + + humanized = humanized.replace(/^./, str => { + // uppercase the first character + return str.toUpperCase(); + }); + + return humanized; +}; + +/** + * Get the text of an attribute for a given attribute + * @param {String} attributeId The attribute ID + * @param {Array} attributes Array of attributes objects with id and text properties + * @return {String} If found return the attribute text or an empty string otherwise + */ +const getAttributeText = (attributeId, attributes) => { + // If the attribute is already in the cache, return it + if (attributeId in attributeCache) { + return attributeCache[attributeId]; + } + + // Find the attribute with given attributeId + const attribute = attributes.find(attribute => attribute.id === attributeId); + + let attributeText; + + // If attribute was found get its text and save it on the cache + if (attribute) { + attributeText = attribute.text.replace(REGEXP, ''); + attributeCache[attributeId] = attributeText; + } + + return attributeText || ''; +}; + +function displayConstraint(attributeId, constraint, attributes) { + if (!constraint || !attributeId) { + return; + } + + const validatorType = Object.keys(constraint)[0]; + if (!validatorType) { + return; + } + + const validator = Object.keys(constraint[validatorType])[0]; + if (!validator) { + return; + } + + const value = constraint[validatorType][validator]; + if (value === void 0) { + return; + } + + let comparator = validator; + if (validator === 'value') { + comparator = validatorType; + } + + const attributeText = getAttributeText(attributeId, attributes); + const constraintText = + attributeText + ' ' + humanize(comparator).toLowerCase() + ' ' + value; + + return constraintText; +} diff --git a/platform/core/src/hanging-protocols/lib/removeFromArray.js b/platform/core/src/hanging-protocols/lib/removeFromArray.js new file mode 100644 index 00000000000..602cc415850 --- /dev/null +++ b/platform/core/src/hanging-protocols/lib/removeFromArray.js @@ -0,0 +1,32 @@ +/** + * Removes the first instance of an element from an array, if an equal value exists + * + * @param array + * @param input + * + * @returns {boolean} Whether or not the element was found and removed + */ +const removeFromArray = (array, input) => { + // If the array is empty, stop here + if (!array || !array.length) { + return false; + } + + array.forEach((value, index) => { + // TODO: Double check whether or not this deep equality check is necessary + //if (_.isEqual(value, input)) { + if (value === input) { + indexToRemove = index; + return false; + } + }); + + if (indexToRemove === void 0) { + return false; + } + + array.splice(indexToRemove, 1); + return true; +}; + +export { removeFromArray }; diff --git a/platform/core/src/hanging-protocols/lib/sortByScore.js b/platform/core/src/hanging-protocols/lib/sortByScore.js new file mode 100644 index 00000000000..902072591bf --- /dev/null +++ b/platform/core/src/hanging-protocols/lib/sortByScore.js @@ -0,0 +1,8 @@ +// Sorts an array by score +const sortByScore = arr => { + arr.sort((a, b) => { + return b.score - a.score; + }); +}; + +export { sortByScore }; diff --git a/platform/core/src/hanging-protocols/lib/validate.js b/platform/core/src/hanging-protocols/lib/validate.js new file mode 100644 index 00000000000..deb9521c0f3 --- /dev/null +++ b/platform/core/src/hanging-protocols/lib/validate.js @@ -0,0 +1,39 @@ +import validate from 'validate.js'; + +validate.validators.equals = function(value, options, key, attributes) { + if (options && value !== options.value) { + return key + 'must equal ' + options.value; + } +}; + +validate.validators.doesNotEqual = function(value, options, key) { + if (options && value === options.value) { + return key + 'cannot equal ' + options.value; + } +}; + +validate.validators.contains = function(value, options, key) { + if (options && value.indexOf && value.indexOf(options.value) === -1) { + return key + 'must contain ' + options.value; + } +}; + +validate.validators.doesNotContain = function(value, options, key) { + if (options && value.indexOf && value.indexOf(options.value) !== -1) { + return key + 'cannot contain ' + options.value; + } +}; + +validate.validators.startsWith = function(value, options, key) { + if (options && value.startsWith && !value.startsWith(options.value)) { + return key + 'must start with ' + options.value; + } +}; + +validate.validators.endsWith = function(value, options, key) { + if (options && value.endsWith && !value.endsWith(options.value)) { + return key + 'must end with ' + options.value; + } +}; + +export { validate }; diff --git a/platform/core/src/hanging-protocols/protocolStore/classes/ProtocolStore.js b/platform/core/src/hanging-protocols/protocolStore/classes/ProtocolStore.js new file mode 100644 index 00000000000..956347b2f05 --- /dev/null +++ b/platform/core/src/hanging-protocols/protocolStore/classes/ProtocolStore.js @@ -0,0 +1,97 @@ +import Protocol from '../../classes/Protocol'; + +// The ProtocolStore class allows persisting hanging protocols using different strategies. +// For example, one strategy stores hanging protocols in the application server while +// another strategy stores them in a remote machine, but only one strategy can be used at a time. + +export default class ProtocolStore { + constructor(strategy) { + this.strategy = strategy; + } + + /** + * Get a Protocol instance or array of Protocol instances for the given protocol object or array + * @param {Object|array} protocolObject Protocol plain object or array of Protocol plain objects + * @return {Protocol|array} Protocol instance or array of Protocol intances for the given protocol object or array + */ + static getProtocolInstance(protocolObject) { + let result = protocolObject; + + // If result is an array of protocols objects + if (result instanceof Array) { + result.forEach((protocol, index) => { + // Check if protocol is an instance of Protocol + if (!(protocol instanceof Protocol)) { + const protocolInstance = new Protocol(); + protocolInstance.fromObject(protocol); + result[index] = protocolInstance; + } + }); + } else if (result !== void 0 && !(result instanceof Protocol)) { + // Check if result exists and is not an instance of Protocol + const protocolInstance = new Protocol(); + protocolInstance.fromObject(result); + result = protocolInstance; + } + + return result; + } + + /** + * Registers a function to be called when the protocol store is ready to persist hanging protocols + * + * NOTE: Strategies should implement this function + * + * @param callback The function to be called as a callback + */ + onReady(callback) { + this.strategy.onReady(callback); + } + + /** + * Gets the hanging protocol by protocolId if defined, otherwise all stored hanging protocols + * + * NOTE: Strategies should implement this function + * + * @param protocolId The protocol ID used to find the hanging protocol + * @returns {object|array} The hanging protocol by protocolId or array of the stored hanging protocols + */ + getProtocol(protocolId) { + let result = this.strategy.getProtocol(protocolId); + return ProtocolStore.getProtocolInstance(result); + } + + /** + * Stores the hanging protocol + * + * NOTE: Strategies should implement this function + * + * @param protocol The hanging protocol to be stored + */ + addProtocol(protocol) { + this.strategy.addProtocol(protocol); + } + + /** + * Updates the hanging protocol by protocolId + * + * NOTE: Strategies should implement this function + * + * @param protocolId The protocol ID used to find the hanging protocol to update + * @param protocol The updated hanging protocol + */ + updateProtocol(protocolId, protocol) { + this.strategy.updateProtocol(protocolId, protocol); + } + + /** + * Removes the hanging protocol + * + * NOTE: Strategies should implement this function + * + * @param protocolId The protocol ID used to remove the hanging protocol + */ + removeProtocol(protocolId) { + this.strategy.removeProtocol(protocolId); + } +} diff --git a/platform/core/src/hanging-protocols/protocolStore/classes/ProtocolStrategy.js b/platform/core/src/hanging-protocols/protocolStore/classes/ProtocolStrategy.js new file mode 100644 index 00000000000..46079287298 --- /dev/null +++ b/platform/core/src/hanging-protocols/protocolStore/classes/ProtocolStrategy.js @@ -0,0 +1,77 @@ +import log from '../../../log'; +import defaultProtocol from '../defaultProtocol'; + +export default class ProtocolStrategy { + constructor() { + this.hangingProtocols = new Map(); + this.defaultsAdded = false; + } + + /** + * Registers a function to be called when the hangingProtocols collection is subscribed + * The callback is called only one time when the subscription is ready + * + * @param callback The function to be called as a callback + */ + onReady(callback) { + if (!this.defaultsAdded) { + log.info('Inserting the default hanging protocol...'); + this.addProtocol(defaultProtocol); + this.defaultsAdded = true; + } + + callback(); + } + + /** + * Gets the hanging protocol by protocolId if defined, otherwise all stored hanging protocols + * + * @param protocolId The protocol ID used to find the hanging protocol + * @returns {object|array} The hanging protocol by protocolId or array of the stored hanging protocols + */ + getProtocol(protocolId) { + // Return the hanging protocol by protocolId if defined + if (protocolId) { + return this.hangingProtocols.get(protocolId); + } + + // Otherwise, return all protocols + return Array.from(this.hangingProtocols.values()); + } + + /** + * Stores the hanging protocol + * + * @param protocol The hanging protocol to be stored + */ + addProtocol(protocol) { + this.hangingProtocols.set(protocol.id, protocol); + } + + /** + * Updates the hanging protocol by protocolId + * + * @param protocolId The protocol ID used to find the hanging protocol to update + * @param protocol The updated hanging protocol + */ + updateProtocol(protocolId, protocol) { + if (!this.hangingProtocols.has(protocolId)) { + return; + } + + this.hangingProtocols.set(protocolId, protocol); + } + + /** + * Removes the hanging protocol + * + * @param protocolId The protocol ID used to remove the hanging protocol + */ + removeProtocol(protocolId) { + if (!this.hangingProtocols.has(protocolId)) { + return; + } + + this.hangingProtocols.delete(protocolId); + } +} diff --git a/platform/core/src/hanging-protocols/protocolStore/classes/index.js b/platform/core/src/hanging-protocols/protocolStore/classes/index.js new file mode 100644 index 00000000000..3a9fd4cfcdb --- /dev/null +++ b/platform/core/src/hanging-protocols/protocolStore/classes/index.js @@ -0,0 +1,4 @@ +import ProtocolStore from './ProtocolStore'; +import ProtocolStrategy from './ProtocolStrategy'; + +export { ProtocolStore, ProtocolStrategy }; diff --git a/platform/core/src/hanging-protocols/protocolStore/defaultProtocol.js b/platform/core/src/hanging-protocols/protocolStore/defaultProtocol.js new file mode 100644 index 00000000000..f285cf8329c --- /dev/null +++ b/platform/core/src/hanging-protocols/protocolStore/defaultProtocol.js @@ -0,0 +1,27 @@ +import Protocol from '../classes/Protocol'; +import ViewportStructure from '../classes/ViewportStructure'; +import Viewport from '../classes/Viewport'; +import Stage from '../classes/Stage'; + +function getDefaultProtocol() { + const protocol = new Protocol('Default'); + protocol.id = 'defaultProtocol'; + protocol.locked = true; + + const oneByOne = new ViewportStructure('grid', { + rows: 1, + columns: 1, + }); + + const viewport = new Viewport(); + const first = new Stage(oneByOne, 'oneByOne'); + first.viewports.push(viewport); + + protocol.stages.push(first); + + return protocol; +} + +const defaultProtocol = getDefaultProtocol(); + +export default defaultProtocol; diff --git a/platform/core/src/hanging-protocols/protocolStore/index.js b/platform/core/src/hanging-protocols/protocolStore/index.js new file mode 100644 index 00000000000..5bb4ba7da67 --- /dev/null +++ b/platform/core/src/hanging-protocols/protocolStore/index.js @@ -0,0 +1,5 @@ +import { ProtocolStore, ProtocolStrategy } from './classes'; +import defaultProtocol from './defaultProtocol'; +import testProtocols from './testProtocols'; + +export { ProtocolStore, ProtocolStrategy, defaultProtocol, testProtocols }; diff --git a/platform/core/src/hanging-protocols/protocolStore/testProtocols.js b/platform/core/src/hanging-protocols/protocolStore/testProtocols.js new file mode 100644 index 00000000000..c7852546d54 --- /dev/null +++ b/platform/core/src/hanging-protocols/protocolStore/testProtocols.js @@ -0,0 +1,1510 @@ +import Protocol from '../classes/Protocol'; +import ViewportStructure from '../classes/ViewportStructure'; +import Viewport from '../classes/Viewport'; +import Stage from '../classes/Stage'; +import { + ImageMatchingRule, + ProtocolMatchingRule, + SeriesMatchingRule, +} from '../classes'; + +function getMRTwoByTwoTest() { + var proto = new Protocol('MR_TwoByTwo'); + proto.id = 'MR_TwoByTwo'; + proto.locked = true; + // Use http://localhost:3000/viewer/1.2.840.113619.2.5.1762583153.215519.978957063.78 + + var studyInstanceUid = new ProtocolMatchingRule( + 'studyInstanceUid', + { + equals: { + value: '1.2.840.113619.2.5.1762583153.215519.978957063.78', + }, + }, + true + ); + + proto.addProtocolMatchingRule(studyInstanceUid); + + var oneByTwo = new ViewportStructure('grid', { + rows: 1, + columns: 2, + }); + + // Stage 1 + var left = new Viewport(); + var right = new Viewport(); + + var firstSeries = new SeriesMatchingRule('seriesNumber', { + equals: { + value: 1, + }, + }); + + var secondSeries = new SeriesMatchingRule('seriesNumber', { + equals: { + value: 2, + }, + }); + + var thirdImage = new ImageMatchingRule('instanceNumber', { + equals: { + value: 3, + }, + }); + + left.seriesMatchingRules.push(firstSeries); + left.imageMatchingRules.push(thirdImage); + + right.seriesMatchingRules.push(secondSeries); + right.imageMatchingRules.push(thirdImage); + + var first = new Stage(oneByTwo, 'oneByTwo'); + first.viewports.push(left); + first.viewports.push(right); + + proto.stages.push(first); + + // Stage 2 + var twoByOne = new ViewportStructure('grid', { + rows: 2, + columns: 1, + }); + var left2 = new Viewport(); + var right2 = new Viewport(); + + var fourthSeries = new SeriesMatchingRule('seriesNumber', { + equals: { + value: 4, + }, + }); + + var fifthSeries = new SeriesMatchingRule('seriesNumber', { + equals: { + value: 5, + }, + }); + + left2.seriesMatchingRules.push(fourthSeries); + left2.imageMatchingRules.push(thirdImage); + right2.seriesMatchingRules.push(fifthSeries); + right2.imageMatchingRules.push(thirdImage); + + var second = new Stage(twoByOne, 'twoByOne'); + second.viewports.push(left2); + second.viewports.push(right2); + + proto.stages.push(second); + + return proto; +} + +function getDemoProtocols() { + const demoProtocols = []; + + /** + * Demo #1 + */ + demoProtocols.push({ + id: 'demoProtocol1', + locked: false, + name: 'DFCI-CT-CHEST-COMPARE', + createdDate: '2017-02-14T16:07:09.033Z', + modifiedDate: '2017-02-14T16:18:43.930Z', + availableTo: {}, + editableBy: {}, + protocolMatchingRules: [ + { + id: '7tmuq7KzDMCWFeapc', + weight: 2, + required: false, + attribute: 'x00081030', + constraint: { + contains: { + value: 'DFCI CT CHEST', + }, + }, + }, + ], + stages: [ + { + id: 'v5PfGt9F6mffZPif5', + name: 'oneByOne', + viewportStructure: { + type: 'grid', + properties: { + rows: 1, + columns: 2, + }, + layoutTemplateName: 'gridLayout', + }, + viewports: [ + { + viewportSettings: {}, + imageMatchingRules: [], + seriesMatchingRules: [ + { + id: 'mXnsCcNzZL56z7mTZ', + weight: 1, + required: false, + attribute: 'x0008103e', + constraint: { + contains: { + value: '2.0', + }, + }, + }, + ], + studyMatchingRules: [], + }, + { + viewportSettings: {}, + imageMatchingRules: [], + seriesMatchingRules: [ + { + id: 'ygz4nb28iJZcJhnYa', + weight: 1, + required: false, + attribute: 'x0008103e', + constraint: { + contains: { + value: '2.0', + }, + }, + }, + ], + studyMatchingRules: [ + { + id: 'uDoEgLTvnXTByWnPz', + weight: 1, + required: false, + attribute: 'abstractPriorValue', + constraint: { + equals: { + value: 1, + }, + }, + }, + ], + }, + ], + createdDate: '2017-02-14T16:07:09.033Z', + }, + { + id: 'XTzu8HB3feep3HYKs', + viewportStructure: { + type: 'grid', + properties: { + rows: 1, + columns: 2, + }, + layoutTemplateName: 'gridLayout', + }, + viewports: [ + { + viewportSettings: {}, + imageMatchingRules: [], + seriesMatchingRules: [ + { + id: 'mXnsCcNzZL56z7mTZ', + weight: 1, + required: false, + attribute: 'x0008103e', + constraint: { + contains: { + value: '3.0', + }, + }, + }, + ], + studyMatchingRules: [], + }, + { + viewportSettings: {}, + imageMatchingRules: [], + seriesMatchingRules: [ + { + id: 'ygz4nb28iJZcJhnYa', + weight: 1, + required: false, + attribute: 'x0008103e', + constraint: { + contains: { + value: '3.0', + }, + }, + }, + ], + studyMatchingRules: [ + { + id: 'uDoEgLTvnXTByWnPz', + weight: 1, + required: false, + attribute: 'abstractPriorValue', + constraint: { + equals: { + value: 1, + }, + }, + }, + ], + }, + ], + createdDate: '2017-02-14T16:07:12.085Z', + }, + { + id: '3yPYNaeFtr76Qz3jq', + viewportStructure: { + type: 'grid', + properties: { + rows: 2, + columns: 2, + }, + layoutTemplateName: 'gridLayout', + }, + viewports: [ + { + viewportSettings: {}, + imageMatchingRules: [], + seriesMatchingRules: [ + { + id: 'mXnsCcNzZL56z7mTZ', + weight: 1, + required: false, + attribute: 'x0008103e', + constraint: { + contains: { + value: 'Body 3.0', + }, + }, + }, + ], + studyMatchingRules: [], + }, + { + viewportSettings: { + wlPreset: 'Lung', + }, + imageMatchingRules: [], + seriesMatchingRules: [ + { + id: 'ygz4nb28iJZcJhnYa', + weight: 1, + required: false, + attribute: 'x0008103e', + constraint: { + contains: { + value: 'Lung 3.0', + }, + }, + }, + ], + studyMatchingRules: [], + }, + { + viewportSettings: {}, + imageMatchingRules: [], + seriesMatchingRules: [ + { + id: '6vdBRZYnqmmosipph', + weight: 1, + required: false, + attribute: 'x0008103e', + constraint: { + contains: { + value: 'Body 3.0', + }, + }, + }, + ], + studyMatchingRules: [ + { + id: 'SxfTyhGcMhr56PtPM', + weight: 1, + required: false, + attribute: 'abstractPriorValue', + constraint: { + equals: { + value: 1, + }, + }, + }, + ], + }, + { + viewportSettings: { + wlPreset: 'Lung', + }, + imageMatchingRules: [], + seriesMatchingRules: [ + { + id: 'FTAyChZCPW68yJjXD', + weight: 1, + required: false, + attribute: 'x0008103e', + constraint: { + contains: { + value: 'Lung 3.0', + }, + }, + }, + ], + studyMatchingRules: [ + { + id: 'gMJjfrbsqYNbErPx5', + weight: 1, + required: false, + attribute: 'abstractPriorValue', + constraint: { + equals: { + value: 1, + }, + }, + }, + ], + }, + ], + createdDate: '2017-02-14T16:11:40.489Z', + }, + ], + numberOfPriorsReferenced: 4, + }); + + /** + * Demo #2 + */ + + demoProtocols.push({ + id: 'demoProtocol2', + locked: false, + name: 'DFCI-CT-CHEST-COMPARE-2', + createdDate: '2017-02-14T16:07:09.033Z', + modifiedDate: '2017-02-14T16:18:43.930Z', + availableTo: {}, + editableBy: {}, + protocolMatchingRules: [ + { + id: '7tmuq7KzDMCWFeapc', + weight: 2, + required: false, + attribute: 'x00081030', + constraint: { + contains: { + value: 'DFCI CT CHEST', + }, + }, + }, + ], + stages: [ + { + id: 'v5PfGt9F6mffZPif5', + name: 'oneByOne', + viewportStructure: { + type: 'grid', + properties: { + rows: 1, + columns: 2, + }, + layoutTemplateName: 'gridLayout', + }, + viewports: [ + { + viewportSettings: {}, + imageMatchingRules: [], + seriesMatchingRules: [ + { + id: 'mXnsCcNzZL56z7mac', + weight: 1, + required: false, + attribute: 'x0008103e', + constraint: { + contains: { + value: '2.0', + }, + }, + }, + ], + studyMatchingRules: [], + }, + { + viewportSettings: {}, + imageMatchingRules: [], + seriesMatchingRules: [ + { + id: 'ygz4nb28iJZcJhnYc', + weight: 1, + required: false, + attribute: 'x0008103e', + constraint: { + contains: { + value: '2.0', + }, + }, + }, + ], + studyMatchingRules: [ + { + id: 'uDoEgLTvnXTByWnPt', + weight: 1, + required: false, + attribute: 'abstractPriorValue', + constraint: { + equals: { + value: 1, + }, + }, + }, + ], + }, + ], + createdDate: '2017-02-14T16:07:09.033Z', + }, + { + id: 'XTzu8HB3feep3HYKs', + viewportStructure: { + type: 'grid', + properties: { + rows: 1, + columns: 2, + }, + layoutTemplateName: 'gridLayout', + }, + viewports: [ + { + viewportSettings: {}, + imageMatchingRules: [], + seriesMatchingRules: [ + { + id: 'mXnsCcNzZL56z7mTZ', + weight: 1, + required: false, + attribute: 'x0008103e', + constraint: { + contains: { + value: 'Body 3.0', + }, + }, + }, + { + id: 'mYnsCcNwZL56z7mTZ', + weight: 1, + required: false, + attribute: 'x0008103e', + constraint: { + contains: { + value: 'Body 5.0', + }, + }, + }, + ], + studyMatchingRules: [], + }, + { + viewportSettings: {}, + imageMatchingRules: [], + seriesMatchingRules: [ + { + id: 'ygz4nb28iJZcJhnYa', + weight: 1, + required: false, + attribute: 'x0008103e', + constraint: { + contains: { + value: 'Body 3.0', + }, + }, + }, + { + id: 'ygz4nb29iJZcJhnYa', + weight: 1, + required: false, + attribute: 'x0008103e', + constraint: { + contains: { + value: 'Body 5.0', + }, + }, + }, + ], + studyMatchingRules: [ + { + id: 'uDoEgLTvnXTByWnPz', + weight: 1, + required: false, + attribute: 'abstractPriorValue', + constraint: { + equals: { + value: 1, + }, + }, + }, + ], + }, + ], + createdDate: '2017-02-14T16:07:12.085Z', + }, + { + id: '3yPYNaeFtr76Qz3jq', + viewportStructure: { + type: 'grid', + properties: { + rows: 2, + columns: 2, + }, + layoutTemplateName: 'gridLayout', + }, + viewports: [ + { + viewportSettings: {}, + imageMatchingRules: [], + seriesMatchingRules: [ + { + id: 'mXnsCcNzZL56z7mtr', + weight: 1, + required: false, + attribute: 'x0008103e', + constraint: { + contains: { + value: 'Body 3.0', + }, + }, + }, + { + id: 'jXnsCcNzZL56z7mTZ', + weight: 1, + required: false, + attribute: 'x0008103e', + constraint: { + contains: { + value: 'Body 5.0', + }, + }, + }, + ], + studyMatchingRules: [], + }, + { + viewportSettings: { + wlPreset: 'Lung', + }, + imageMatchingRules: [], + seriesMatchingRules: [ + { + id: 'ygz4nb28iJZcJhnYb', + weight: 2, + required: false, + attribute: 'x0008103e', + constraint: { + contains: { + value: 'Lung 3.0', + }, + }, + }, + { + id: 'ycz4nb28iJZcJhnYa', + weight: 1, + required: false, + attribute: 'x0008103e', + constraint: { + contains: { + value: 'Lung 5.0', + }, + }, + }, + ], + studyMatchingRules: [], + }, + { + viewportSettings: {}, + imageMatchingRules: [], + seriesMatchingRules: [ + { + id: '6vdBRZYnqmmosipph', + weight: 2, + required: false, + attribute: 'x0008103e', + constraint: { + contains: { + value: 'Body 3.0', + }, + }, + }, + { + id: '6vdBRFYnqmmosipph', + weight: 1, + required: false, + attribute: 'x0008103e', + constraint: { + contains: { + value: 'Body 5.0', + }, + }, + }, + ], + studyMatchingRules: [ + { + id: 'SxfTyhGcMhr56PtPM', + weight: 1, + required: false, + attribute: 'abstractPriorValue', + constraint: { + equals: { + value: 1, + }, + }, + }, + ], + }, + { + viewportSettings: { + wlPreset: 'Lung', + }, + imageMatchingRules: [], + seriesMatchingRules: [ + { + id: 'FTAyChZCPW68yJjXD', + weight: 2, + required: false, + attribute: 'x0008103e', + constraint: { + contains: { + value: 'Lung 3.0', + }, + }, + }, + { + id: 'DTAyChZCPW68yJjXD', + weight: 1, + required: false, + attribute: 'x0008103e', + constraint: { + contains: { + value: 'Lung 5.0', + }, + }, + }, + ], + studyMatchingRules: [ + { + id: 'gMJjfrbsqYNbErPx5', + weight: 1, + required: false, + attribute: 'abstractPriorValue', + constraint: { + equals: { + value: 1, + }, + }, + }, + ], + }, + ], + createdDate: '2017-02-14T16:11:40.489Z', + }, + ], + numberOfPriorsReferenced: 1, + }); + + /** + * Demo: screenCT + */ + + demoProtocols.push({ + id: 'screenCT', + locked: false, + name: 'DFCI-CT-CHEST-SCREEN', + createdDate: '2017-02-14T16:07:09.033Z', + modifiedDate: '2017-02-14T16:18:43.930Z', + availableTo: {}, + editableBy: {}, + protocolMatchingRules: [ + { + id: '7tmuq7KzDMCWFeapc', + weight: 2, + required: false, + attribute: 'x00081030', + constraint: { + contains: { + value: 'DFCI CT CHEST', + }, + }, + }, + ], + stages: [ + { + id: 'v5PfGt9F6mffZPif5', + name: 'oneByOne', + viewportStructure: { + type: 'grid', + properties: { + rows: 1, + columns: 1, + }, + layoutTemplateName: 'gridLayout', + }, + viewports: [ + { + viewportSettings: {}, + imageMatchingRules: [], + seriesMatchingRules: [ + { + id: 'mXnsCcNzZL55z7mTZ', + weight: 1, + required: false, + attribute: 'x0008103e', + constraint: { + contains: { + value: '2.0', + }, + }, + }, + ], + studyMatchingRules: [], + }, + ], + createdDate: '2017-02-14T16:07:09.033Z', + }, + { + id: 'v5PfGt9F4mffZPif5', + name: 'oneByOne', + viewportStructure: { + type: 'grid', + properties: { + rows: 2, + columns: 2, + }, + layoutTemplateName: 'gridLayout', + }, + viewports: [ + { + viewportSettings: {}, + imageMatchingRules: [], + seriesMatchingRules: [ + { + id: 'mXnsCcNzZL56z7nTZ', + weight: 1, + required: false, + attribute: 'x0008103e', + constraint: { + contains: { + value: 'Body 5.0', + }, + }, + }, + { + id: 'mXnsCcNzZL56z7rTZ', + weight: 1, + required: false, + attribute: 'x0008103e', + constraint: { + contains: { + value: 'Body 3.0', + }, + }, + }, + ], + studyMatchingRules: [], + }, + { + viewportSettings: {}, + imageMatchingRules: [], + seriesMatchingRules: [ + { + id: 'mXnsCcNzZL56r7mTZ', + weight: 1, + required: false, + attribute: 'x0008103e', + constraint: { + contains: { + value: 'Lung 5.0', + }, + }, + }, + { + id: 'mXnsCcNzZL56a7mTZ', + weight: 1, + required: false, + attribute: 'x0008103e', + constraint: { + contains: { + value: 'Lung 3.0', + }, + }, + }, + ], + studyMatchingRules: [], + }, + { + viewportSettings: {}, + imageMatchingRules: [], + seriesMatchingRules: [ + { + id: 'mXnsCcRzZL56z7mTZ', + weight: 1, + required: false, + attribute: 'x0008103e', + constraint: { + contains: { + value: 'Body 4.0', + }, + }, + }, + { + id: 'mXnsCcNzTL56z7mTZ', + weight: 1, + required: false, + attribute: 'x0008103e', + constraint: { + contains: { + value: 'Coronal', + }, + }, + }, + ], + studyMatchingRules: [], + }, + { + viewportSettings: {}, + imageMatchingRules: [], + seriesMatchingRules: [ + { + id: 'mXnsCcMzZL56z7mTZ', + weight: 1, + required: false, + attribute: 'x0008103e', + constraint: { + contains: { + value: 'Body 4.0', + }, + }, + }, + { + id: 'mXnsCcAzZL56z7mTZ', + weight: 1, + required: false, + attribute: 'x0008103e', + constraint: { + contains: { + value: 'Sagittal', + }, + }, + }, + ], + studyMatchingRules: [], + }, + ], + createdDate: '2017-02-14T16:07:09.033Z', + }, + ], + numberOfPriorsReferenced: 0, + }); + + /** + * Demo: PETCTSCREEN + */ + + demoProtocols.push({ + id: 'PETCTSCREEN', + locked: false, + name: 'PETCT-SCREEN', + createdDate: '2017-02-14T16:07:09.033Z', + modifiedDate: '2017-02-14T16:18:43.930Z', + availableTo: {}, + editableBy: {}, + protocolMatchingRules: [ + { + id: '7tmuqgKzDMCWFeapc', + weight: 5, + required: false, + attribute: 'x00081030', + constraint: { + contains: { + value: 'PETCT', + }, + }, + }, + ], + stages: [ + { + id: 'v5PfGt9F6mFgZPif5', + name: 'oneByOne', + viewportStructure: { + type: 'grid', + properties: { + rows: 1, + columns: 2, + }, + layoutTemplateName: 'gridLayout', + }, + viewports: [ + { + viewportSettings: {}, + imageMatchingRules: [], + seriesMatchingRules: [ + { + id: 'mXnsCcAzZL56z7mTZ', + weight: 1, + required: false, + attribute: 'x0008103e', + constraint: { + contains: { + value: 'Topogram', + }, + }, + }, + ], + studyMatchingRules: [], + }, + { + viewportSettings: {}, + imageMatchingRules: [], + seriesMatchingRules: [ + { + id: 'mXnsCcNzZR56z7mTZ', + weight: 1, + required: false, + attribute: 'x0008103e', + constraint: { + contains: { + value: 'Topogram', + }, + }, + }, + { + id: 'mRnsCcNzZL56z7mTZ', + weight: 1, + required: false, + attribute: 'x00200011', + constraint: { + numericality: { + greaterThanOrEqualTo: 2, + }, + }, + }, + ], + studyMatchingRules: [], + }, + ], + createdDate: '2017-02-14T16:07:09.033Z', + }, + { + id: 'v5PfGt9F6mFgZPif5', + name: 'oneByOne', + viewportStructure: { + type: 'grid', + properties: { + rows: 1, + columns: 2, + }, + layoutTemplateName: 'gridLayout', + }, + viewports: [ + { + viewportSettings: {}, + imageMatchingRules: [], + seriesMatchingRules: [ + { + id: 'mXnsGcNzZL56z7mTZ', + weight: 1, + required: false, + attribute: 'x0008103e', + constraint: { + contains: { + value: 'PET WB Corrected', + }, + }, + }, + ], + studyMatchingRules: [], + }, + { + viewportSettings: {}, + imageMatchingRules: [], + seriesMatchingRules: [ + { + id: 'mXnsHcNzZL56z7mTZ', + weight: 1, + required: false, + attribute: 'x0008103e', + constraint: { + contains: { + value: 'CT WB', + }, + }, + }, + ], + studyMatchingRules: [], + }, + ], + createdDate: '2017-02-14T16:07:09.033Z', + }, + { + id: 'v5PfGt9F6mFgZPif5', + name: 'oneByOne', + viewportStructure: { + type: 'grid', + properties: { + rows: 1, + columns: 2, + }, + layoutTemplateName: 'gridLayout', + }, + viewports: [ + { + viewportSettings: { + invert: 'YES', + }, + imageMatchingRules: [], + seriesMatchingRules: [ + { + id: 'mXneCcNzZL56z7mTZ', + weight: 1, + required: false, + attribute: 'x0008103e', + constraint: { + contains: { + value: 'PET WB Uncorrected', + }, + }, + }, + ], + studyMatchingRules: [], + }, + { + viewportSettings: {}, + imageMatchingRules: [], + seriesMatchingRules: [ + { + id: 'mXnsCuNzZL56z7mTZ', + weight: 1, + required: false, + attribute: 'x0008103e', + constraint: { + contains: { + value: 'CT Nk', + }, + }, + }, + ], + studyMatchingRules: [], + }, + ], + createdDate: '2017-02-14T16:07:09.033Z', + }, + ], + numberOfPriorsReferenced: 0, + }); + + /** + * Demo: PETCTCOMPARE + */ + + demoProtocols.push({ + id: 'PETCTCOMPARE', + locked: false, + name: 'PETCT-COMPARE', + createdDate: '2017-02-14T16:07:09.033Z', + modifiedDate: '2017-02-14T16:18:43.930Z', + availableTo: {}, + editableBy: {}, + protocolMatchingRules: [ + { + id: '7tmuqgKzDMCWFeapc', + weight: 5, + required: false, + attribute: 'x00081030', + constraint: { + contains: { + value: 'PETCT', + }, + }, + }, + ], + stages: [ + { + id: 'v5PfGt9F6mFgZPif5', + name: 'oneByOne', + viewportStructure: { + type: 'grid', + properties: { + rows: 1, + columns: 2, + }, + layoutTemplateName: 'gridLayout', + }, + viewports: [ + { + viewportSettings: {}, + imageMatchingRules: [], + seriesMatchingRules: [ + { + id: 'mXnsCcNzZL59z7mTZ', + weight: 1, + required: false, + attribute: 'x0008103e', + constraint: { + contains: { + value: 'Topogram', + }, + }, + }, + ], + studyMatchingRules: [], + }, + { + viewportSettings: {}, + imageMatchingRules: [], + seriesMatchingRules: [ + { + id: 'mXnsCcNzZL56z7lTZ', + weight: 1, + required: false, + attribute: 'x0008103e', + constraint: { + contains: { + value: 'Topogram', + }, + }, + }, + ], + studyMatchingRules: [ + { + id: 'uDoEgLTbnXTByWnPz', + weight: 1, + required: false, + attribute: 'abstractPriorValue', + constraint: { + equals: { + value: 1, + }, + }, + }, + ], + }, + ], + createdDate: '2017-02-14T16:07:09.033Z', + }, + { + id: 'v5PfGt9F6mFgZPif5', + name: 'oneByOne', + viewportStructure: { + type: 'grid', + properties: { + rows: 1, + columns: 2, + }, + layoutTemplateName: 'gridLayout', + }, + viewports: [ + { + viewportSettings: {}, + imageMatchingRules: [], + seriesMatchingRules: [ + { + id: 'mXnsCcNjZL56z7mTZ', + weight: 1, + required: false, + attribute: 'x0008103e', + constraint: { + contains: { + value: 'Topogram', + }, + }, + }, + { + id: 'mXnsCcNzZL56z7gTZ', + weight: 1, + required: false, + attribute: 'x00200011', + constraint: { + numericality: { + greaterThanOrEqualTo: 2, + }, + }, + }, + ], + studyMatchingRules: [], + }, + { + viewportSettings: {}, + imageMatchingRules: [], + seriesMatchingRules: [ + { + id: 'mXnsCcCzZL56z7mTZ', + weight: 1, + required: false, + attribute: 'x0008103e', + constraint: { + contains: { + value: 'Topogram', + }, + }, + }, + { + id: 'mXnsCcNzZL56z7mTZ', + weight: 1, + required: false, + attribute: 'x00200011', + constraint: { + numericality: { + greaterThanOrEqualTo: 2, + }, + }, + }, + ], + studyMatchingRules: [ + { + id: 'uDoEgLTvn1TByWnPz', + weight: 1, + required: false, + attribute: 'abstractPriorValue', + constraint: { + equals: { + value: 1, + }, + }, + }, + ], + }, + ], + createdDate: '2017-02-14T16:07:09.033Z', + }, + { + id: 'v5PfGt9F6mFgZPif5', + name: 'oneByOne', + viewportStructure: { + type: 'grid', + properties: { + rows: 2, + columns: 2, + }, + layoutTemplateName: 'gridLayout', + }, + viewports: [ + { + viewportSettings: {}, + imageMatchingRules: [], + seriesMatchingRules: [ + { + id: 'mXnsCcNzZL26z7mTZ', + weight: 1, + required: false, + attribute: 'x0008103e', + constraint: { + contains: { + value: 'PET WB Corrected', + }, + }, + }, + ], + studyMatchingRules: [], + }, + { + viewportSettings: {}, + imageMatchingRules: [], + seriesMatchingRules: [ + { + id: 'mXnsCcNzZL46z7mTZ', + weight: 1, + required: false, + attribute: 'x0008103e', + constraint: { + contains: { + value: 'CT WB', + }, + }, + }, + ], + studyMatchingRules: [], + }, + { + viewportSettings: {}, + imageMatchingRules: [], + seriesMatchingRules: [ + { + id: 'mXnsCcNzZL57z7mTZ', + weight: 1, + required: false, + attribute: 'x0008103e', + constraint: { + contains: { + value: 'PET WB Corrected', + }, + }, + }, + ], + studyMatchingRules: [ + { + id: 'uDoEgLTvnYTByWnPz', + weight: 1, + required: false, + attribute: 'abstractPriorValue', + constraint: { + equals: { + value: 1, + }, + }, + }, + ], + }, + { + viewportSettings: {}, + imageMatchingRules: [], + seriesMatchingRules: [ + { + id: 'mXnsCcNzZQ56z7mTZ', + weight: 1, + required: false, + attribute: 'x0008103e', + constraint: { + contains: { + value: 'CT WB', + }, + }, + }, + ], + studyMatchingRules: [ + { + id: 'uDoEgLTvnKTByWnPz', + weight: 1, + required: false, + attribute: 'abstractPriorValue', + constraint: { + equals: { + value: 1, + }, + }, + }, + ], + }, + ], + createdDate: '2017-02-14T16:07:09.033Z', + }, + { + id: 'v5PfGt9F6mFgZPif5', + name: 'oneByOne', + viewportStructure: { + type: 'grid', + properties: { + rows: 2, + columns: 2, + }, + layoutTemplateName: 'gridLayout', + }, + viewports: [ + { + viewportSettings: { + invert: 'YES', + }, + imageMatchingRules: [], + seriesMatchingRules: [ + { + id: 'mXnsCcNzZL56z7nTZ', + weight: 1, + required: false, + attribute: 'x0008103e', + constraint: { + contains: { + value: 'PET WB Uncorrected', + }, + }, + }, + ], + studyMatchingRules: [], + }, + { + viewportSettings: {}, + imageMatchingRules: [], + seriesMatchingRules: [ + { + id: 'mXnsCcNxZL56z7mTZ', + weight: 1, + required: false, + attribute: 'x0008103e', + constraint: { + contains: { + value: 'CT Nk', + }, + }, + }, + ], + studyMatchingRules: [], + }, + { + viewportSettings: { + invert: 'YES', + }, + imageMatchingRules: [], + seriesMatchingRules: [ + { + id: 'mXnsCcNzZA56z7mTZ', + weight: 1, + required: false, + attribute: 'x0008103e', + constraint: { + contains: { + value: 'PET WB Uncorrected', + }, + }, + }, + ], + studyMatchingRules: [ + { + id: 'uDoEgHTvnXTByWnPz', + weight: 1, + required: false, + attribute: 'abstractPriorValue', + constraint: { + equals: { + value: 1, + }, + }, + }, + ], + }, + { + viewportSettings: {}, + imageMatchingRules: [], + seriesMatchingRules: [ + { + id: 'mXnsCcNzZP56z7mTZ', + weight: 1, + required: false, + attribute: 'x0008103e', + constraint: { + contains: { + value: 'CT Nk', + }, + }, + }, + ], + studyMatchingRules: [ + { + id: 'uDoEgITvnXTByWnPz', + weight: 1, + required: false, + attribute: 'abstractPriorValue', + constraint: { + equals: { + value: 1, + }, + }, + }, + ], + }, + ], + createdDate: '2017-02-14T16:07:09.033Z', + }, + ], + numberOfPriorsReferenced: 1, + }); + + return demoProtocols; +} + +const testProtocols = { + getMRTwoByTwoTest, + getDemoProtocols, +}; + +export default testProtocols; diff --git a/platform/core/src/header.js b/platform/core/src/header.js new file mode 100644 index 00000000000..34e06773b63 --- /dev/null +++ b/platform/core/src/header.js @@ -0,0 +1,9 @@ +//import Dropdown from './ui/dropdown/class.js'; + +/* + * Defines the base OHIF header object + */ +//const dropdown = new OHIF.ui.Dropdown(); +const header = {}; + +export default header; diff --git a/platform/core/src/ie.js b/platform/core/src/ie.js new file mode 100644 index 00000000000..ed233f5a8d5 --- /dev/null +++ b/platform/core/src/ie.js @@ -0,0 +1,9 @@ +import writeScript from './lib/writeScript'; + +// Check if browser is IE and add the polyfill scripts +if (navigator && /MSIE \d|Trident.*rv:/.test(navigator.userAgent)) { + window.onload = () => { + // Fix SVG+USE issues by calling the SVG polyfill + writeScript('svgxuse.min.js'); + }; +} diff --git a/platform/core/src/index.js b/platform/core/src/index.js new file mode 100644 index 00000000000..75d2421b56d --- /dev/null +++ b/platform/core/src/index.js @@ -0,0 +1,73 @@ +import './lib'; + +import { ExtensionManager, MODULE_TYPES } from './extensions'; +import classes, { CommandsManager, HotkeysManager } from './classes/'; + +import DICOMWeb from './DICOMWeb'; +import cornerstone from './cornerstone.js'; +import hangingProtocols from './hanging-protocols'; +import header from './header.js'; +import log from './log.js'; +import measurements from './measurements'; +import metadata from './classes/metadata/'; +import object from './object.js'; +import redux from './redux/'; +import string from './string.js'; +//import './schema.js'; +import studies from './studies/'; +import ui from './ui'; +import user from './user.js'; +import utils from './utils/'; + +const OHIF = { + MODULE_TYPES, + // + CommandsManager, + ExtensionManager, + HotkeysManager, + // + utils, + studies, + redux, + classes, + metadata, + header, + cornerstone, + string, + ui, + user, + object, + log, + DICOMWeb, + viewer: {}, + measurements, + hangingProtocols, +}; + +export { + MODULE_TYPES, + // + CommandsManager, + ExtensionManager, + HotkeysManager, + // + utils, + studies, + redux, + classes, + metadata, + header, + cornerstone, + string, + ui, + user, + object, + log, + DICOMWeb, + measurements, + hangingProtocols, +}; + +export { OHIF }; + +export default OHIF; diff --git a/platform/core/src/index.test.js b/platform/core/src/index.test.js new file mode 100644 index 00000000000..43b1691a0c0 --- /dev/null +++ b/platform/core/src/index.test.js @@ -0,0 +1,35 @@ +import * as OHIF from './index.js'; + +describe('Top level exports', () => { + test('have not changed', () => { + const expectedExports = [ + 'MODULE_TYPES', + // + 'CommandsManager', + 'ExtensionManager', + 'HotkeysManager', + // + 'utils', + 'studies', + 'redux', + 'classes', + 'metadata', + 'header', + 'cornerstone', + 'default', // + 'string', + 'ui', + 'user', + 'object', + 'log', + 'DICOMWeb', + 'OHIF', // + 'measurements', + 'hangingProtocols', + ].sort(); + + const exports = Object.keys(OHIF).sort(); + + expect(exports).toEqual(expectedExports); + }); +}); diff --git a/platform/core/src/lib/cornerstone.js b/platform/core/src/lib/cornerstone.js new file mode 100644 index 00000000000..d4d472c9947 --- /dev/null +++ b/platform/core/src/lib/cornerstone.js @@ -0,0 +1,327 @@ +import cornerstone from 'cornerstone-core'; +import cornerstoneTools from 'cornerstone-tools'; + +function getBoundingBox(context, textLines, x, y, options) { + if (Object.prototype.toString.call(textLines) !== '[object Array]') { + textLines = [textLines]; + } + + const padding = 5; + const font = cornerstoneTools.textStyle.getFont(); + const fontSize = cornerstoneTools.textStyle.getFontSize(); + + context.save(); + context.font = font; + context.textBaseline = 'top'; + + // Find the longest text width in the array of text data + let maxWidth = 0; + + textLines.forEach(text => { + // Get the text width in the current font + const width = context.measureText(text).width; + + // Find the maximum with for all the text rows; + maxWidth = Math.max(maxWidth, width); + }); + + // Calculate the bounding box for this text box + const boundingBox = { + width: maxWidth + padding * 2, + height: padding + textLines.length * (fontSize + padding), + }; + + if (options && options.centering && options.centering.x === true) { + x -= boundingBox.width / 2; + } + + if (options && options.centering && options.centering.y === true) { + y -= boundingBox.height / 2; + } + + boundingBox.left = x; + boundingBox.top = y; + + context.restore(); + + // Return the bounding box so it can be used for pointNearHandle + return boundingBox; +} + +function pixelToPage(element, position) { + const enabledElement = cornerstone.getEnabledElement(element); + const result = { + x: 0, + y: 0, + }; + + // Stop here if the cornerstone element is not enabled or position is not an object + if (!enabledElement || typeof position !== 'object') { + return result; + } + + const canvas = enabledElement.canvas; + + const canvasOffset = $(canvas).offset(); + result.x += canvasOffset.left; + result.y += canvasOffset.top; + + const canvasPosition = cornerstone.pixelToCanvas(element, position); + result.x += canvasPosition.x; + result.y += canvasPosition.y; + + return result; +} + +function repositionTextBox(eventData, measurementData, config) { + // Stop here if it's not a measurement creating + if (!measurementData.isCreating) { + return; + } + + const element = eventData.element; + const enabledElement = cornerstone.getEnabledElement(element); + const image = enabledElement.image; + + const allowedBorders = OHIF.uiSettings.autoPositionMeasurementsTextCallOuts; + const allow = { + T: !allowedBorders || allowedBorders.includes('T'), + R: !allowedBorders || allowedBorders.includes('R'), + B: !allowedBorders || allowedBorders.includes('B'), + L: !allowedBorders || allowedBorders.includes('L'), + }; + + const getAvailableBlankAreas = (enabledElement, labelWidth, labelHeight) => { + const { element, canvas, image } = enabledElement; + + const topLeft = cornerstone.pixelToCanvas(element, { + x: 0, + y: 0, + }); + + const bottomRight = cornerstone.pixelToCanvas(element, { + x: image.width, + y: image.height, + }); + + const $canvas = $(canvas); + const canvasWidth = $canvas.outerWidth(); + const canvasHeight = $canvas.outerHeight(); + + const result = {}; + result['x-1'] = allow.L && topLeft.x > labelWidth; + result['y-1'] = allow.T && topLeft.y > labelHeight; + result.x1 = allow.R && canvasWidth - bottomRight.x > labelWidth; + result.y1 = allow.B && canvasHeight - bottomRight.y > labelHeight; + + return result; + }; + + const getRenderingInformation = (limits, tool) => { + const mid = {}; + mid.x = limits.x / 2; + mid.y = limits.y / 2; + + const directions = {}; + directions.x = tool.x < mid.x ? -1 : 1; + directions.y = tool.y < mid.y ? -1 : 1; + + const diffX = directions.x < 0 ? tool.x : limits.x - tool.x; + const diffY = directions.y < 0 ? tool.y : limits.y - tool.y; + let cornerAxis = diffY < diffX ? 'y' : 'x'; + + const map = { + 'x-1': 'L', + 'y-1': 'T', + x1: 'R', + y1: 'B', + }; + + let current = 0; + while (current < 4 && !allow[map[cornerAxis + directions[cornerAxis]]]) { + // Invert the direction for the next iteration + directions[cornerAxis] *= -1; + + // Invert the tempCornerAxis + cornerAxis = cornerAxis === 'x' ? 'y' : 'x'; + + current++; + } + + return { + directions, + cornerAxis, + }; + }; + + const calculateAxisCenter = (axis, start, end) => { + const a = start[axis]; + const b = end[axis]; + const lowest = Math.min(a, b); + const highest = Math.max(a, b); + return lowest + (highest - lowest) / 2; + }; + + const getTextBoxSizeInPixels = (element, bounds) => { + const topLeft = cornerstone.pageToPixel(element, 0, 0); + const bottomRight = cornerstone.pageToPixel(element, bounds.x, bounds.y); + return { + x: bottomRight.x - topLeft.x, + y: bottomRight.y - topLeft.y, + }; + }; + + function getTextBoxOffset(config, cornerAxis, toolAxis, boxSize) { + config = config || {}; + const centering = config.centering || {}; + const centerX = !!centering.x; + const centerY = !!centering.y; + const halfBoxSizeX = boxSize.x / 2; + const halfBoxSizeY = boxSize.y / 2; + const offset = { + x: [], + y: [], + }; + + if (cornerAxis === 'x') { + const offsetY = centerY ? 0 : halfBoxSizeY; + + offset.x[-1] = centerX ? halfBoxSizeX : 0; + offset.x[1] = centerX ? -halfBoxSizeX : -boxSize.x; + offset.y[-1] = offsetY; + offset.y[1] = offsetY; + } else { + const offsetX = centerX ? 0 : halfBoxSizeX; + + offset.x[-1] = offsetX; + offset.x[1] = offsetX; + offset.y[-1] = centerY ? halfBoxSizeY : 0; + offset.y[1] = centerY ? -halfBoxSizeY : -boxSize.y; + } + + return offset; + } + + const handles = measurementData.handles; + const textBox = handles.textBox; + + const $canvas = $(enabledElement.canvas); + const canvasWidth = $canvas.outerWidth(); + const canvasHeight = $canvas.outerHeight(); + const offset = $canvas.offset(); + const canvasDimensions = { + x: canvasWidth, + y: canvasHeight, + }; + + const bounds = {}; + bounds.x = textBox.boundingBox.width; + bounds.y = textBox.boundingBox.height; + + const getHandlePosition = key => { + const { x, y } = handles[key]; + + return { x, y }; + }; + const start = getHandlePosition('start'); + const end = getHandlePosition('end'); + + const tool = {}; + tool.x = calculateAxisCenter('x', start, end); + tool.y = calculateAxisCenter('y', start, end); + + let limits = {}; + limits.x = image.width; + limits.y = image.height; + + let { directions, cornerAxis } = getRenderingInformation(limits, tool); + + const availableAreas = getAvailableBlankAreas( + enabledElement, + bounds.x, + bounds.y + ); + const tempDirections = Object.assign({}, directions); + let tempCornerAxis = cornerAxis; + let foundPlace = false; + let current = 0; + while (current < 4) { + if (availableAreas[tempCornerAxis + tempDirections[tempCornerAxis]]) { + foundPlace = true; + break; + } + + // Invert the direction for the next iteration + tempDirections[tempCornerAxis] *= -1; + + // Invert the tempCornerAxis + tempCornerAxis = tempCornerAxis === 'x' ? 'y' : 'x'; + + current++; + } + + let cornerAxisPosition; + if (foundPlace) { + directions = Object.assign({}, directions, tempDirections); + cornerAxis = tempCornerAxis; + cornerAxisPosition = directions[cornerAxis] < 0 ? 0 : limits[cornerAxis]; + } else { + limits = Object.assign({}, limits, canvasDimensions); + + const toolPositionOnCanvas = cornerstone.pixelToCanvas(element, tool); + const renderingInformation = getRenderingInformation( + limits, + toolPositionOnCanvas + ); + directions = renderingInformation.directions; + cornerAxis = renderingInformation.cornerAxis; + + const position = { + x: directions.x < 0 ? offset.left : offset.left + canvasWidth, + y: directions.y < 0 ? offset.top : offset.top + canvasHeight, + }; + + const pixelPosition = cornerstone.pageToPixel( + element, + position.x, + position.y + ); + cornerAxisPosition = pixelPosition[cornerAxis]; + } + + const toolAxis = cornerAxis === 'x' ? 'y' : 'x'; + const boxSize = getTextBoxSizeInPixels(element, bounds); + + textBox[cornerAxis] = cornerAxisPosition; + textBox[toolAxis] = tool[toolAxis]; + + // Adjust the text box position reducing its size from the corner axis + const textBoxOffset = getTextBoxOffset(config, cornerAxis, toolAxis, boxSize); + textBox[cornerAxis] += textBoxOffset[cornerAxis][directions[cornerAxis]]; + + // Preventing the text box from partially going outside the canvas area + const topLeft = cornerstone.pixelToCanvas(element, textBox); + const bottomRight = { + x: topLeft.x + bounds.x, + y: topLeft.y + bounds.y, + }; + const canvasBorders = { + x0: offset.left, + y0: offset.top, + x1: offset.left + canvasWidth, + y1: offset.top + canvasHeight, + }; + if (topLeft[toolAxis] < 0) { + const x = canvasBorders.x0; + const y = canvasBorders.y0; + const pixelPosition = cornerstone.pageToPixel(element, x, y); + textBox[toolAxis] = pixelPosition[toolAxis]; + } else if (bottomRight[toolAxis] > canvasDimensions[toolAxis]) { + const x = canvasBorders.x1 - bounds.x; + const y = canvasBorders.y1 - bounds.y; + const pixelPosition = cornerstone.pageToPixel(element, x, y); + textBox[toolAxis] = pixelPosition[toolAxis]; + } +} + +export { getBoundingBox, pixelToPage, repositionTextBox }; diff --git a/platform/core/src/lib/index.js b/platform/core/src/lib/index.js new file mode 100644 index 00000000000..dee5f06e9ec --- /dev/null +++ b/platform/core/src/lib/index.js @@ -0,0 +1,2 @@ +import './cornerstone.js'; +import './parsingUtils.js'; diff --git a/platform/core/src/lib/parsingUtils.js b/platform/core/src/lib/parsingUtils.js new file mode 100644 index 00000000000..0d78a0665e9 --- /dev/null +++ b/platform/core/src/lib/parsingUtils.js @@ -0,0 +1,90 @@ +import dicomParser from 'dicom-parser'; + +/** + * A small set of utilities to help parsing DICOM element values. + * In the future the functionality provided by this library might + * be incorporated into dicomParser library. + */ + +export const parsingUtils = { + /** + * Check if supplied argument is a valid instance of the dicomParser.DataSet class. + * @param data {Object} An instance of the dicomParser.DataSet class. + * @returns {Boolean} Returns true if data is a valid instance of the dicomParser.DataSet class. + */ + isValidDataSet: function(data) { + return data instanceof dicomParser.DataSet; + }, + + /** + * Parses an element tag according to the 'AT' VR definition. + * @param data {Object} An instance of the dicomParser.DataSet class. + * @param tag {String} A DICOM tag with in the format xGGGGEEEE. + * @returns {String} A string representation of a data element tag or null if the field is not present or data is not long enough. + */ + attributeTag: function(data, tag) { + if (this.isValidDataSet(data) && tag in data.elements) { + let element = data.elements[tag]; + if (element && element.length === 4) { + let parser = data.byteArrayParser.readUint16, + bytes = data.byteArray, + offset = element.dataOffset; + return ( + 'x' + + ( + '00000000' + + ( + parser(bytes, offset) * 256 * 256 + + parser(bytes, offset + 2) + ).toString(16) + ).substr(-8) + ); + } + } + + return null; + }, + + /** + * Parses the string representation of a multi-valued element into an array of strings. If the parser + * parameter is passed and is a function, it will be applied to each element of the resulting array. + * @param data {Object} An instance of the dicomParser.DataSet class. + * @param tag {String} A DICOM tag with in the format xGGGGEEEE. + * @param parser {Function} An optional parser function that can be applied to each element of the array. + * @returns {Array} An array of floating point numbers or null if the field is not present or data is not long enough. + */ + multiValue: function(data, tag, parser) { + if (this.isValidDataSet(data) && tag in data.elements) { + let element = data.elements[tag]; + if (element && element.length > 0) { + let string = dicomParser.readFixedString( + data.byteArray, + element.dataOffset, + element.length + ); + if (typeof string === 'string' && string.length > 0) { + if (typeof parser !== 'function') { + parser = null; + } + + return string.split('\\').map(function(value) { + value = value.trim(); + return parser !== null ? parser(value) : value; + }); + } + } + } + + return null; + }, + + /** + * Parses a string to an array of floats for a multi-valued element. + * @param data {Object} An instance of the dicomParser.DataSet class. + * @param tag {String} A DICOM tag with in the format xGGGGEEEE. + * @returns {Array} An array of floating point numbers or null if the field is not present or data is not long enough. + */ + floatArray: function(data, tag) { + return this.multiValue(data, tag, parseFloat); + }, +}; diff --git a/platform/core/src/log.js b/platform/core/src/log.js new file mode 100644 index 00000000000..ada577d1a32 --- /dev/null +++ b/platform/core/src/log.js @@ -0,0 +1,11 @@ +const log = { + error: console.error, + warn: console.warn, + info: console.log, + trace: console.trace, + debug: console.debug, + time: console.time, + timeEnd: console.timeEnd, +}; + +export default log; diff --git a/platform/core/src/measurements/classes/MeasurementApi.js b/platform/core/src/measurements/classes/MeasurementApi.js new file mode 100644 index 00000000000..d5612659d67 --- /dev/null +++ b/platform/core/src/measurements/classes/MeasurementApi.js @@ -0,0 +1,1000 @@ +import cornerstoneTools from 'cornerstone-tools'; +import log from '../../log'; +import getLabel from '../lib/getLabel'; +import getDescription from '../lib/getDescription'; +import getImageIdForImagePath from '../lib/getImageIdForImagePath'; +import guid from '../../utils/guid'; +import studyMetadataManager from '../../utils/studyMetadataManager'; + +const configuration = { + measurementTools: [], +}; + +export default class MeasurementApi { + static Instance; + + static setConfiguration(config) { + Object.assign(configuration, config); + } + + static getConfiguration() { + return configuration; + } + + static getToolsGroupsMap() { + const toolsGroupsMap = {}; + configuration.measurementTools.forEach(toolGroup => { + toolGroup.childTools.forEach( + tool => (toolsGroupsMap[tool.id] = toolGroup.id) + ); + }); + + return toolsGroupsMap; + } + + static getToolGroupTools(toolsGroupsMap) { + const result = {}; + Object.keys(toolsGroupsMap).forEach(toolType => { + const toolGroupId = toolsGroupsMap[toolType]; + if (!result[toolGroupId]) { + result[toolGroupId] = []; + } + + result[toolGroupId].push(toolType); + }); + + return result; + } + + static getToolConfiguration(toolType) { + const configuration = MeasurementApi.getConfiguration(); + const toolsGroupsMap = MeasurementApi.getToolsGroupsMap(); + + const toolGroupId = toolsGroupsMap[toolType]; + const toolGroup = configuration.measurementTools.find( + toolGroup => toolGroup.id === toolGroupId + ); + + let tool; + if (toolGroup) { + tool = toolGroup.childTools.find(tool => tool.id === toolType); + } + + return { + toolGroupId, + toolGroup, + tool, + }; + } + + static syncMeasurementAndToolData(measurement) { + log.info('syncMeasurementAndToolData'); + + const measurementLabel = getLabel(measurement); + if (measurementLabel) { + measurement.labels = [measurementLabel]; + } + + const toolState = cornerstoneTools.globalImageIdSpecificToolStateManager.saveToolState(); + + // Stop here if the metadata for the measurement's study is not loaded yet + const { studyInstanceUid } = measurement; + const metadata = studyMetadataManager.get(studyInstanceUid); + if (!metadata) return; + + // Iterate each child tool if the current tool has children + const toolType = measurement.toolType; + const { tool } = MeasurementApi.getToolConfiguration(toolType); + if (Array.isArray(tool.childTools)) { + tool.childTools.forEach(childToolKey => { + const childMeasurement = measurement[childToolKey]; + if (!childMeasurement) return; + childMeasurement._id = measurement._id; + childMeasurement.measurementNumber = measurement.measurementNumber; + childMeasurement.lesionNamingNumber = measurement.lesionNamingNumber; + + MeasurementApi.syncMeasurementAndToolData(childMeasurement); + }); + + return; + } + + const imageId = getImageIdForImagePath(measurement.imagePath); + + // If no tool state exists for this imageId, create an empty object to store it + if (!toolState[imageId]) { + toolState[imageId] = {}; + } + + const currentToolState = toolState[imageId][toolType]; + const toolData = currentToolState && currentToolState.data; + + // Check if we already have toolData for this imageId and toolType + if (toolData && toolData.length) { + // If we have toolData, we should search it for any data related to the current Measurement + const toolData = toolState[imageId][toolType].data; + + // Create a flag so we know if we've successfully updated the Measurement in the toolData + let alreadyExists = false; + + // Loop through the toolData to search for this Measurement + toolData.forEach(tool => { + // Break the loop if this isn't the Measurement we are looking for + if (tool._id !== measurement._id) { + return; + } + + // If we have found the Measurement, set the flag to True + alreadyExists = true; + + // Update the toolData from the Measurement data + Object.assign(tool, measurement); + return false; + }); + + // If we have found the Measurement we intended to update, we can stop this function here + if (alreadyExists === true) { + return; + } + } else { + // If no toolData exists for this toolType, create an empty array to hold some + toolState[imageId][toolType] = { + data: [], + }; + } + + // If we have reached this point, it means we haven't found the Measurement we are looking for + // in the current toolData. This means we need to add it. + + // Add the MeasurementData into the toolData for this imageId + toolState[imageId][toolType].data.push(measurement); + + cornerstoneTools.globalImageIdSpecificToolStateManager.restoreToolState( + toolState + ); + } + + static isToolIncluded(tool) { + return ( + tool.options && + tool.options.caseProgress && + tool.options.caseProgress.include + ); + } + + constructor(timepointApi, options = {}) { + if (MeasurementApi.Instance) { + MeasurementApi.Instance.initialize(timepointApi, options); + return MeasurementApi.Instance; + } + + this.initialize(timepointApi, options); + MeasurementApi.Instance = this; + } + + initialize(timepointApi, options = {}) { + this.timepointApi = timepointApi; + this.options = options; + this.toolGroups = {}; + this.tools = {}; + this.toolsGroupsMap = MeasurementApi.getToolsGroupsMap(); + this.toolGroupTools = MeasurementApi.getToolGroupTools(this.toolsGroupsMap); + + // Iterate over each tool group and create collection + configuration.measurementTools.forEach(toolGroup => { + this.toolGroups[toolGroup.id] = []; + + // Iterate over each tool group child tools (e.g. bidirectional, targetCR, etc.) and create collection + toolGroup.childTools.forEach(tool => { + this.tools[tool.id] = []; + }); + }); + } + + onMeasurementsUpdated() { + if (typeof this.options.onMeasurementsUpdated !== 'function') { + log.warn('Measurements update callback is not defined'); + return; + } + + this.options.onMeasurementsUpdated(Object.assign({}, this.tools)); + } + + retrieveMeasurements(patientId, timepointIds) { + const retrievalFn = configuration.dataExchange.retrieve; + if (typeof retrievalFn !== 'function') { + log.error('Measurement retrieval function has not been configured.'); + return; + } + + return new Promise((resolve, reject) => { + retrievalFn(patientId, timepointIds).then(measurementData => { + if (measurementData) { + log.info('Measurement data retrieval'); + log.info(measurementData); + + Object.keys(measurementData).forEach(measurementTypeId => { + const measurements = measurementData[measurementTypeId]; + + measurements.forEach(measurement => { + const { toolType } = measurement; + + this.addMeasurement(toolType, measurement); + }); + }); + } + + resolve(); + + // Synchronize the new tool data + this.syncMeasurementsAndToolData(); + + // Let others know that the measurements are updated + this.onMeasurementsUpdated(); + }, reject); + }); + } + + storeMeasurements(timepointId) { + const storeFn = configuration.dataExchange.store; + if (typeof storeFn !== 'function') { + log.error('Measurement store function has not been configured.'); + return; + } + + let measurementData = {}; + configuration.measurementTools.forEach(toolGroup => { + // Skip the tool groups excluded from case progress + if (!MeasurementApi.isToolIncluded(toolGroup)) { + return; + } + + toolGroup.childTools.forEach(tool => { + // Skip the tools excluded from case progress + if (!MeasurementApi.isToolIncluded(tool)) { + return; + } + + if (!measurementData[toolGroup.id]) { + measurementData[toolGroup.id] = []; + } + + measurementData[toolGroup.id] = measurementData[toolGroup.id].concat( + this.tools[tool.id] + ); + }); + }); + + const timepointFilter = timepointId + ? tp => tp.timepointId === timepointId + : null; + const timepoints = this.timepointApi.all(timepointFilter); + const timepointIds = timepoints.map(t => t.timepointId); + const patientId = timepoints[0].patientId; + const filter = { + patientId, + timepointIds, + }; + + log.info('Saving Measurements for timepoints:', timepoints); + return storeFn(measurementData, filter).then(() => { + log.info('Measurement storage completed'); + }); + } + + calculateLesionNamingNumber(measurements) { + const sortedMeasurements = measurements.sort((a, b) => { + if (a.lesionNamingNumber > b.lesionNamingNumber) { + return 1; + } else if (a.lesionNamingNumber < b.lesionNamingNumber) { + return -1; + } + + return 0; + }); + + // Calculate lesion naming number starting from 1 not to miss any measurement (as seen in MM) + // A measurement from beginning of the list might be deleted, so a new measurement should replace that + let i; + for (i = 1; i < sortedMeasurements.length + 1; i++) { + if (i < sortedMeasurements[i - 1].lesionNamingNumber) { + break; + } + } + + return i; + } + + fetch(toolGroupId, filter) { + if (!this.toolGroups[toolGroupId]) { + throw new Error( + `MeasurementApi: No Collection with the id: ${toolGroupId}` + ); + } + + let items; + if (filter) { + items = this.toolGroups[toolGroupId].filter(filter); + } else { + items = this.toolGroups[toolGroupId]; + } + + return items.map(item => { + if (item.toolId) { + return this.tools[item.toolId].find( + tool => tool._id === item.toolItemId + ); + } + + return { lesionNamingNumber: item.lesionNamingNumber }; + }); + } + + getFirstMeasurement(timepointId) { + // Get child tools from all included tool groups + let childTools = []; + configuration.measurementTools.forEach(toolGroup => { + // Skip the tool groups excluded from case progress + if (!MeasurementApi.isToolIncluded(toolGroup)) { + return false; + } + + childTools = childTools.concat(toolGroup.childTools); + }); + + // Get all included child tools + const includedChildTools = childTools.filter(tool => + MeasurementApi.isToolIncluded(tool) + ); + + // Get the first measurement for the given timepoint + let measurement = undefined; + includedChildTools.every(tool => { + measurement = this.tools[tool.id].find( + t => t.timepointId === timepointId && t.measurementNumber === 1 + ); + + return !measurement; + }); + + // Return the found measurement object or undefined if not found + return measurement; + } + + lesionExistsAtTimepoints(lesionNamingNumber, toolGroupId, timepointIds) { + // Retrieve all the data for the given tool group (e.g. 'targets') + const measurementsAtTimepoint = this.fetch(toolGroupId, tool => + timepointIds.includes(tool.timepointId) + ); + + // Return whether or not any lesion at this timepoint has the same lesionNamingNumber + return !!measurementsAtTimepoint.find( + m => m.lesionNamingNumber === lesionNamingNumber + ); + } + + isNewLesionsMeasurement(measurementData) { + if (!measurementData) { + return; + } + + const toolConfig = MeasurementApi.getToolConfiguration( + measurementData.toolType + ); + const toolType = toolConfig.tool.parentTool || measurementData.toolType; + const { timepointApi } = this; + const currentMeasurement = + this.tools[toolType].find(tool => tool._id === measurementData._id) || {}; + const timepointId = + currentMeasurement.timepointId || measurementData.timepointId; + const lesionNamingNumber = + currentMeasurement.lesionNamingNumber || + measurementData.lesionNamingNumber; + + // Stop here if the needed information is not set + if (!timepointApi || !timepointId || !toolConfig) { + return; + } + + const { toolGroupId } = toolConfig; + const current = timepointApi.timepoints.find( + tp => tp.timepointId === timepointId + ); + const initialTimepointIds = timepointApi.initialTimepointIds(); + + // Stop here if there's no initial timepoint, or if the current is any initial + if ( + !initialTimepointIds || + initialTimepointIds.length < 1 || + initialTimepointIds.some( + initialtpid => initialtpid === current.timepointId + ) + ) { + return false; + } + + return ( + this.lesionExistsAtTimepoints( + lesionNamingNumber, + toolGroupId, + initialTimepointIds + ) === false + ); + } + + calculateLesionMaxMeasurementNumber(groupId, filter) { + let measurements = []; + if (groupId) { + // Get the measurements of the group + measurements = this.toolGroups[groupId] || []; + } else { + // Get all measurements of all groups + measurements = Object.keys(this.toolGroups).reduce((acc, val) => { + acc.push(...this.toolGroups[val]); + return acc; + }, []); + } + + const sortedMeasurements = measurements.filter(filter).sort((tp1, tp2) => { + return tp1.measurementNumber < tp2.measurementNumber ? 1 : -1; + }); + + for (let i = 0; i < sortedMeasurements.length; i++) { + const toolGroupMeasurement = sortedMeasurements[i]; + const measurement = this.tools[toolGroupMeasurement.toolId].find( + tool => tool._id === toolGroupMeasurement.toolItemId + ); + const isNew = this.isNewLesionsMeasurement(measurement); + if (!isNew) { + return measurement.measurementNumber; + } + } + + return 0; + } + + calculateNewLesionMaxMeasurementNumber(groupId, filter) { + const sortedMeasurements = this.toolGroups[groupId] + .filter(filter) + .sort((tp1, tp2) => { + return tp1.measurementNumber < tp2.measurementNumber ? 1 : -1; + }); + + for (let i = 0; i < sortedMeasurements.length; i++) { + const toolGroupMeasurement = sortedMeasurements[i]; + const measurement = this.tools[toolGroupMeasurement.toolId].find( + tool => tool._id === toolGroupMeasurement.toolItemId + ); + const isNew = this.isNewLesionsMeasurement(measurement); + if (isNew) { + return measurement.measurementNumber; + } + } + + return 0; + } + + calculateMeasurementNumber(measurement) { + const toolGroupId = this.toolsGroupsMap[measurement.toolType]; + + const filter = tool => tool._id !== measurement._id; + + const isNew = this.isNewLesionsMeasurement(measurement); + + if (isNew) { + const maxTargetMeasurementNumber = this.calculateLesionMaxMeasurementNumber( + 'targets', + filter + ); + const maxNonTargetMeasurementNumber = this.calculateLesionMaxMeasurementNumber( + 'nonTargets', + filter + ); + const maxNewTargetMeasurementNumber = this.calculateNewLesionMaxMeasurementNumber( + 'targets', + filter + ); + if (toolGroupId === 'targets') { + return Math.max( + maxTargetMeasurementNumber, + maxNonTargetMeasurementNumber, + maxNewTargetMeasurementNumber + ); + } else if (toolGroupId === 'nonTargets') { + const maxNewNonTargetMeasurementNumber = this.calculateNewLesionMaxMeasurementNumber( + 'nonTargets', + filter + ); + return Math.max( + maxTargetMeasurementNumber, + maxNonTargetMeasurementNumber, + maxNewTargetMeasurementNumber, + maxNewNonTargetMeasurementNumber + ); + } + } else { + const maxTargetMeasurementNumber = this.calculateLesionMaxMeasurementNumber( + 'targets', + filter + ); + if (toolGroupId === 'targets') { + return maxTargetMeasurementNumber; + } else if (toolGroupId === 'nonTargets') { + const maxNonTargetMeasurementNumber = this.calculateLesionMaxMeasurementNumber( + 'nonTargets', + filter + ); + return Math.max( + maxTargetMeasurementNumber, + maxNonTargetMeasurementNumber + ); + } else { + return this.calculateLesionMaxMeasurementNumber(null, filter); + } + } + + return 0; + } + + getPreviousMeasurement(measurementData) { + if (!measurementData) { + return; + } + + const { timepointId, toolType, lesionNamingNumber } = measurementData; + if (!timepointId || !toolType || !lesionNamingNumber) { + return; + } + + const toolGroupId = this.toolsGroupsMap[measurementData.toolType]; + + // TODO: Remove TrialPatientLocationUid from here and override it somehow + // by dependant applications. Here we should use the location attribute instead of the uid + let filter; + const uid = + measurementData.additionalData && + measurementData.additionalData.TrialPatientLocationUid; + if (uid) { + filter = tool => + tool._id !== measurementData._id && + tool.additionalData && + tool.additionalData.TrialPatientLocationUid === uid; + } else { + filter = tool => + tool._id !== measurementData._id && + tool.lesionNamingNumber === lesionNamingNumber; + } + + const childToolTypes = this.toolGroupTools[toolGroupId]; + for (let i = 0; i < childToolTypes.length; i++) { + const childToolType = childToolTypes[i]; + const toolCollection = this.tools[childToolType]; + const item = toolCollection.find(filter); + + if (item) { + return item; + } + } + } + + hasDuplicateMeasurementNumber(measurementData) { + if (!measurementData) { + return; + } + + const { toolType, measurementNumber } = measurementData; + if (!toolType || !measurementNumber) { + return; + } + + const filter = tool => + tool._id !== measurementData._id && + tool.measurementNumber === measurementData.measurementNumber; + + return configuration.measurementTools + .filter(toolGroup => toolGroup.id !== 'temp') + .some(toolGroup => { + if (this.toolGroups[toolGroup.id].find(filter)) { + return true; + } + return toolGroup.childTools.some(tool => { + if (this.tools[tool.id].find(filter)) { + return true; + } + }); + }); + } + + updateNumbering(collectionToUpdate, propertyFilter, propertyName, increment) { + collectionToUpdate.filter(propertyFilter).forEach(item => { + item[propertyName] += increment; + }); + } + + updateMeasurementNumberForAllMeasurements(measurement, increment) { + const filter = tool => + tool._id !== measurement._id && + tool.measurementNumber >= measurement.measurementNumber; + + configuration.measurementTools + .filter(toolGroup => toolGroup.id !== 'temp') + .forEach(toolGroup => { + this.updateNumbering( + this.toolGroups[toolGroup.id], + filter, + 'measurementNumber', + increment + ); + + toolGroup.childTools.forEach(tool => { + this.updateNumbering( + this.tools[tool.id], + filter, + 'measurementNumber', + increment + ); + }); + }); + } + + addMeasurement(toolType, measurement) { + const toolGroup = this.toolsGroupsMap[toolType]; + const groupCollection = this.toolGroups[toolGroup]; + const collection = this.tools[toolType]; + + // Get the related measurement by the measurement number and use its location if defined + const relatedMeasurement = collection.find( + t => + t.lesionNamingNumber === measurement.lesionNamingNumber && + t.toolType === measurement.toolType + ); + + // Use the related measurement location if found and defined + if (relatedMeasurement && relatedMeasurement.location) { + measurement.location = relatedMeasurement.location; + } + + // Use the related measurement description if found and defined + if (relatedMeasurement && relatedMeasurement.description) { + measurement.description = relatedMeasurement.description; + } + + measurement._id = guid(); + + // Get the timepoint + let timepoint; + if (measurement.studyInstanceUid) { + timepoint = this.timepointApi.study(measurement.studyInstanceUid)[0]; + } else { + const { timepointId } = measurement; + timepoint = this.timepointApi.timepoints.find( + t => t.timepointId === timepointId + ); + } + + // Preventing errors thrown when non-associated (standalone) study is opened... + // @TODO: Make sure this logic is correct. + if (!timepoint) return; + + // Empty Item is the lesion just added in cornerstoneTools, but does not have measurement data yet + const emptyItem = groupCollection.find( + groupTool => + !groupTool.toolId && groupTool.timepointId === timepoint.timepointId + ); + + // Set the timepointId attribute to measurement to make it easier to filter measurements by timepoint + measurement.timepointId = timepoint.timepointId; + + // Check if the measurement data is just added by a cornerstone tool and is still empty + if (emptyItem) { + // Set relevant initial data and measurement number to the measurement + measurement.lesionNamingNumber = emptyItem.lesionNamingNumber; + measurement.measurementNumber = emptyItem.measurementNumber; + + groupCollection + .filter( + groupTool => + groupTool.timepointId === timepoint.timepointId && + groupTool.lesionNamingNumber === measurement.lesionNamingNumber + ) + .forEach(groupTool => { + groupTool.toolId = tool.id; + groupTool.toolItemId = measurement._id; + groupTool.createdAt = measurement.createdAt; + groupTool.measurementNumber = measurement.measurementNumber; + }); + } else { + // Handle measurements not added by cornerstone tools and update its number + const measurementsInTimepoint = groupCollection.filter( + groupTool => groupTool.timepointId === timepoint.timepointId + ); + measurement.lesionNamingNumber = this.calculateLesionNamingNumber( + measurementsInTimepoint + ); + measurement.measurementNumber = + measurement.measurementNumber || + this.calculateMeasurementNumber(measurement) + 1; + } + + // Define an update object to reflect the changes in the collection + const updateObject = { + timepointId: timepoint.timepointId, + lesionNamingNumber: measurement.lesionNamingNumber, + measurementNumber: measurement.measurementNumber, + }; + + // Find the matched measurement from other timepoints + const found = this.getPreviousMeasurement(measurement); + + // Check if a previous related meausurement was found on other timepoints + if (found) { + // Use the same number as the previous measurement + measurement.lesionNamingNumber = found.lesionNamingNumber; + measurement.measurementNumber = found.measurementNumber; + + // TODO: Remove TrialPatientLocationUid from here and override it somehow + // by dependant applications + + // Change the update object to set the same number, additionalData, + // location, label and description to the current measurement + updateObject.lesionNamingNumber = found.lesionNamingNumber; + updateObject.measurementNumber = found.measurementNumber; + updateObject.additionalData = measurement.additionalData || {}; + updateObject.additionalData.TrialPatientLocationUid = + found.additionalData && found.additionalData.TrialPatientLocationUid; + updateObject.location = found.location; + updateObject.label = found.label; + updateObject.description = found.description; + updateObject.isSplitLesion = found.isSplitLesion; + updateObject.isNodal = found.isNodal; + + const description = getDescription(found, measurement); + if (description) { + updateObject.description = description; + } + } else if (this.hasDuplicateMeasurementNumber(measurement)) { + // Update measurementNumber for the measurements with masurementNumber greater or equal than + // measurementNumber of the added measurement (except the added one) + // only if there is another measurement with the same measurementNumber + this.updateMeasurementNumberForAllMeasurements(measurement, 1); + } + + let addedMeasurement; + + // Upsert the measurement in collection + const toolIndex = collection.findIndex( + tool => tool._id === measurement._id + ); + if (toolIndex > -1) { + addedMeasurement = Object.assign({}, collection[toolIndex], updateObject); + collection[toolIndex] = addedMeasurement; + } else { + addedMeasurement = Object.assign({}, measurement, updateObject); + collection.push(addedMeasurement); + } + + if (!emptyItem) { + // Reflect the entry in the tool group collection + groupCollection.push({ + toolId: toolType, + toolItemId: addedMeasurement._id, + timepointId: timepoint.timepointId, + studyInstanceUid: addedMeasurement.studyInstanceUid, + createdAt: addedMeasurement.createdAt, + lesionNamingNumber: addedMeasurement.lesionNamingNumber, + measurementNumber: addedMeasurement.measurementNumber, + }); + } + + // Let others know that the measurements are updated + this.onMeasurementsUpdated(); + + // TODO: Enable reactivity + // this.timepointChanged.set(timepoint.timepointId); + + return addedMeasurement; + } + + updateMeasurement(toolType, measurement) { + const collection = this.tools[toolType]; + + const toolIndex = collection.findIndex( + tool => tool._id === measurement._id + ); + if (toolIndex < 0) { + return; + } + + collection[toolIndex] = Object.assign({}, measurement); + + // Let others know that the measurements are updated + this.onMeasurementsUpdated(); + + // TODO: Enable reactivity + // this.timepointChanged.set(timepoint.timepointId); + } + + onMeasurementRemoved(toolType, measurement) { + const { lesionNamingNumber, measurementNumber } = measurement; + + const toolGroupId = this.toolsGroupsMap[toolType]; + const groupCollection = this.toolGroups[toolGroupId]; + + const groupIndex = groupCollection.findIndex( + group => group.toolItemId === measurement._id + ); + if (groupIndex < 0) { + return; + } + + // Remove the deleted measurement only in its timepoint from the collection + groupCollection.splice(groupIndex, 1); + + // Check which timepoints have the deleted measurement + const timepointsWithDeletedMeasurement = groupCollection + .filter(tool => tool.measurementNumber === measurementNumber) + .map(tool => tool.timepointId); + + // Update lesionNamingNumber and measurementNumber only if there is no timepoint with that measurement + if (timepointsWithDeletedMeasurement.length < 1) { + // Decrease lesionNamingNumber of all measurements with lesionNamingNumber greater than lesionNamingNumber of the deleted measurement by 1 + const lesionNamingNumberFilter = tool => + tool.lesionNamingNumber >= lesionNamingNumber; + this.updateNumbering( + groupCollection, + lesionNamingNumberFilter, + 'lesionNamingNumber', + -1 + ); + + const toolGroup = configuration.measurementTools.find( + tGroup => tGroup.id === toolGroupId + ); + if (toolGroup && toolGroup.childTools) { + toolGroup.childTools.forEach(childTool => { + const collection = this.tools[childTool.id]; + this.updateNumbering( + collection, + lesionNamingNumberFilter, + 'lesionNamingNumber', + -1 + ); + }); + } + + // Decrease measurementNumber of all measurements with measurementNumber greater than measurementNumber of the deleted measurement by 1 + this.updateMeasurementNumberForAllMeasurements(measurement, -1); + } + + // Synchronize the new tool data + this.syncMeasurementsAndToolData(); + + // Let others know that the measurements are updated + this.onMeasurementsUpdated(); + + // TODO: Enable reactivity + // this.timepointChanged.set(timepoint.timepointId); + } + + syncMeasurementsAndToolData() { + configuration.measurementTools.forEach(toolGroup => { + // Skip the tool groups excluded from case progress + if (!MeasurementApi.isToolIncluded(toolGroup)) { + return; + } + toolGroup.childTools.forEach(tool => { + // Skip the tools excluded from case progress + if (!MeasurementApi.isToolIncluded(tool)) { + return; + } + const measurements = this.tools[tool.id]; + measurements.forEach(measurement => { + MeasurementApi.syncMeasurementAndToolData(measurement); + }); + }); + }); + } + + deleteMeasurements(toolType, measurementTypeId, filter) { + const filterKeys = Object.keys(filter); + const groupCollection = this.toolGroups[measurementTypeId]; + + // Stop here if it is a temporary toolGroups + if (!groupCollection) return; + + // Get the entries information before removing them + const groupItems = groupCollection.filter(toolGroup => { + return filterKeys.every( + filterKey => toolGroup[filterKey] === filter[filterKey] + ); + }); + const entries = []; + groupItems.forEach(groupItem => { + if (!groupItem.toolId) { + return; + } + + const collection = this.tools[groupItem.toolId]; + const toolIndex = collection.findIndex( + tool => tool._id === groupItem.toolItemId + ); + if (toolIndex > -1) { + entries.push(collection[toolIndex]); + collection.splice(toolIndex, 1); + } + }); + + // Stop here if no entries were found + if (!entries.length) { + return; + } + + // If the filter doesn't have the measurement number, get it from the first entry + const lesionNamingNumber = + filter.lesionNamingNumber || entries[0].lesionNamingNumber; + + // Synchronize the new data with cornerstone tools + const toolState = cornerstoneTools.globalImageIdSpecificToolStateManager.saveToolState(); + + entries.forEach(entry => { + const measurementsData = []; + const { tool } = MeasurementApi.getToolConfiguration(entry.toolType); + if (Array.isArray(tool.childTools)) { + tool.childTools.forEach(key => { + const childMeasurement = entry[key]; + if (!childMeasurement) return; + measurementsData.push(childMeasurement); + }); + } else { + measurementsData.push(entry); + } + + measurementsData.forEach(measurementData => { + const { imagePath, toolType } = measurementData; + const imageId = getImageIdForImagePath(imagePath); + if (imageId && toolState[imageId]) { + const toolData = toolState[imageId][toolType]; + const measurementEntries = toolData && toolData.data; + const measurementEntry = measurementEntries.find( + mEntry => mEntry._id === entry._id + ); + if (measurementEntry) { + const index = measurementEntries.indexOf(measurementEntry); + measurementEntries.splice(index, 1); + } + } + }); + + this.onMeasurementRemoved(toolType, entry); + }); + + cornerstoneTools.globalImageIdSpecificToolStateManager.restoreToolState( + toolState + ); + + // Synchronize the updated measurements with Cornerstone Tools + // toolData to make sure the displayed measurements show 'Target X' correctly + const syncFilter = Object.assign({}, filter); + delete syncFilter.timepointId; + delete syncFilter.lesionNamingNumber; + + const syncFilterKeys = Object.keys(syncFilter); + + const toolTypes = [...new Set(entries.map(entry => entry.toolType))]; + toolTypes.forEach(toolType => { + const collection = this.tools[toolType]; + collection + .filter(tool => { + return ( + tool.lesionNamingNumber > lesionNamingNumber - 1 && + syncFilterKeys.every( + syncFilterKey => tool[syncFilterKey] === filter[syncFilterKey] + ) + ); + }) + .forEach(measurement => { + MeasurementApi.syncMeasurementAndToolData(measurement); + }); + }); + } +} diff --git a/platform/core/src/measurements/classes/TimepointApi.js b/platform/core/src/measurements/classes/TimepointApi.js new file mode 100644 index 00000000000..12d893100c2 --- /dev/null +++ b/platform/core/src/measurements/classes/TimepointApi.js @@ -0,0 +1,576 @@ +import log from '../../log'; + +const configuration = {}; + +const TIMEPOINT_TYPE_NAMES = { + prebaseline: 'Pre-Baseline', + baseline: 'Baseline', + followup: 'Follow-up', +}; + +export default class TimepointApi { + static Instance; + + static setConfiguration(config) { + Object.assign(configuration, config); + } + + static getConfiguration() { + return configuration; + } + + constructor(currentTimepointId, options = {}) { + if (TimepointApi.Instance) { + TimepointApi.Instance.initialize(currentTimepointId, options); + return TimepointApi.Instance; + } + + this.initialize(currentTimepointId, options); + TimepointApi.Instance = this; + } + + initialize(currentTimepointId, options = {}) { + this.currentTimepointId = currentTimepointId; + this.comparisonTimepointKey = options.comparisonTimepointKey || 'baseline'; + this.options = options; + this.timepoints = []; + } + + onTimepointsUpdated() { + if (typeof this.options.onTimepointsUpdated !== 'function') { + log.warn('Timepoints update callback is not defined'); + return; + } + + this.options.onTimepointsUpdated(Object.assign([], this.timepoints)); + } + + calculateVisitNumber(timepoint) { + // Retrieve all of the relevant follow-up timepoints for this patient + const sortedTimepoints = this.timepoints.sort((tp1, tp2) => { + return tp1.visitDate > tp2.visitDate ? 1 : -1; + }); + const filteredTimepoints = sortedTimepoints.find( + tp => + tp.patientId === timepoint.patientId && + tp.timepointType === timepoint.timepointType + ); + + // Create an array of just timepointIds, so we can use indexOf + // on it to find the current timepoint's relative position + const timepointIds = filteredTimepoints.map( + timepoint => timepoint.timepointId + ); + + // Calculate the index of the current timepoint in the array of all + // relevant follow-up timepoints + const visitNumber = timepointIds.indexOf(timepoint.timepointId) + 1; + + // If visitNumber is 0, it means that the current timepoint was not in the list + if (!visitNumber) { + throw new Error( + 'Current timepoint was not in the list of relevant timepoints?' + ); + } + + return visitNumber; + } + + retrieveTimepoints(filter) { + const retrievalFn = configuration.dataExchange.retrieve; + if (typeof retrievalFn !== 'function') { + log.error('Timepoint retrieval function has not been configured.'); + return; + } + + return new Promise((resolve, reject) => { + retrievalFn(filter) + .then(timepointData => { + log.info('Timepoint data retrieval'); + + timepointData.forEach(timepoint => { + const timepointIndex = this.timepoints.findIndex( + tp => tp.timepointId === timepoint.timepointId + ); + if (timepointIndex < 0) { + this.timepoints.push(timepoint); + } else { + this.timepoints[timepointIndex] = timepoint; + } + }); + + // Let others know that the timepoints are updated + this.onTimepointsUpdated(); + + resolve(); + }) + .catch(reason => { + log.error(`Timepoint retrieval function failed: ${reason}`); + reject(reason); + }); + }); + } + + storeTimepoints() { + const storeFn = configuration.dataExchange.store; + if (typeof storeFn !== 'function') { + log.error('Timepoint store function has not been configured.'); + return; + } + + log.info('Preparing to store timepoints'); + log.info(JSON.stringify(this.timepoints, null, 2)); + + storeFn(this.timepoints).then(() => + log.info('Timepoint storage completed') + ); + } + + disassociateStudy(timepointIds, studyInstanceUid) { + const disassociateFn = configuration.dataExchange.disassociate; + if (typeof disassociateFn !== 'function') { + log.error('Study disassociate function has not been configured.'); + return; + } + + disassociateFn(timepointIds, studyInstanceUid).then(() => { + log.info('Disassociation completed'); + + this.timepoints = []; + this.retrieveTimepoints({}); + }); + } + + removeTimepoint(timepointId) { + const removeFn = configuration.dataExchange.remove; + if (typeof removeFn !== 'function') { + log.error('Timepoint remove function has not been configured.'); + return; + } + + const timepointData = { + timepointId, + }; + + log.info('Preparing to remove timepoint'); + log.info(JSON.stringify(timepointData, null, 2)); + + removeFn(timepointData).then(() => { + log.info('Timepoint removal completed'); + + const tpIndex = this.timepoints.findIndex( + tp => tp.timepointId === timepointId + ); + if (tpIndex > -1) { + this.timepoints.splice(tpIndex, 1); + } + + // Let others know that the timepoints are updated + this.onTimepointsUpdated(); + }); + } + + updateTimepoint(timepointId, query) { + const updateFn = configuration.dataExchange.update; + if (typeof updateFn !== 'function') { + log.error('Timepoint update function has not been configured.'); + return; + } + + const timepointData = { + timepointId, + }; + + log.info('Preparing to update timepoint'); + log.info(JSON.stringify(timepointData, null, 2)); + log.info(JSON.stringify(query, null, 2)); + + updateFn(timepointData, query).then(() => { + log.info('Timepoint updated completed'); + + const tpIndex = this.timepoints.findIndex( + tp => tp.timepointId === timepointId + ); + if (tpIndex > -1) { + this.timepoints[tpIndex] = Object.assign( + {}, + this.timepoints[tpIndex], + query + ); + } + + // Let others know that the timepoints are updated + this.onTimepointsUpdated(); + }); + } + + // Return all timepoints + all(filter) { + let timepointsToReturn; + if (filter) { + timepointsToReturn = this.timepoints.filter(filter); + } else { + timepointsToReturn = this.timepoints; + } + + return timepointsToReturn.sort((tp1, tp2) => { + return tp1.visitDate < tp2.visitDate ? 1 : -1; + }); + } + + // Return only the current timepoint + current() { + return this.timepoints.find( + tp => tp.timepointId === this.currentTimepointId + ); + } + + lock() { + const tpIndex = this.timepoints.findIndex( + tp => tp.timepointId === this.currentTimepointId + ); + if (tpIndex < 0) { + return; + } + + this.timepoints[tpIndex] = Object.assign({}, this.timepoints[tpIndex], { + locked: true, + }); + } + + // Return the prior timepoint + prior() { + const current = this.current(); + if (!current) { + return; + } + + return this.all().find(tp => tp.visitDate < current.visitDate); + } + + // Return only the current and prior timepoints + currentAndPrior() { + const timepoints = []; + + const current = this.current(); + if (current) { + timepoints.push(current); + } + + const prior = this.prior(); + if (current && prior && prior.timepointId !== current.timepointId) { + timepoints.push(prior); + } + + return timepoints; + } + + // Return the current and the comparison timepoints + currentAndComparison(comparisonTimepointKey = this.comparisonTimepointKey) { + const current = this.current(); + const comparisonTimepoint = this.comparison(comparisonTimepointKey); + const timepoints = [current]; + + if ( + comparisonTimepoint && + !timepoints.find(tp => tp.timepointId === comparisonTimepoint.timepointId) + ) { + timepoints.push(comparisonTimepoint); + } + + return timepoints; + } + + /** + * Return true if there are 2 or more baseline timepoints before and at the current timepoint, otherwise false + * @returns {boolean} + */ + isRebaseline(timepointId) { + const current = timepointId + ? this.timepoints.find(tp => tp.timepointId === timepointId) + : this.current(); + if (!current) { + return false; + } + + const baselines = this.timepoints.filter( + tp => tp.timepointType === 'baseline' && tp.visitDate <= current.visitDate + ); + return baselines.length > 1; + } + + /** + * Return the next (closest future) baseline after current timepoint + * @returns {*} + */ + nextBaselineAfterCurrent() { + let current = this.current(); + + // Get all next timepoints newer than the current timepoint sorted by visitDate ascending + const sortedTimepoints = this.timepoints.sort((tp1, tp2) => { + return tp1.visitDate > tp2.visitDate ? 1 : -1; + }); + return sortedTimepoints.find( + tp => tp.visitDate > current.visitDate && tp.timepointType === 'baseline' + ); + } + + /** + * Set the current timepoint id + * @param timepointId + */ + setCurrentTimepointId(timepointId) { + this.currentTimepointId = timepointId; + } + + /** + * Set the comparison timepoint that overrides the default comparison timepoint (called based on user selection in a viewport) + * @param timepoint + */ + setUserComparison(timepoint) { + this.userComparison = timepoint; + } + + /** + * Return only the comparison timepoint + * @param {String} [comparisonTimepointKey] + * @return {*} + */ + comparison(comparisonTimepointKey = this.comparisonTimepointKey) { + // Return the comparison timepoint set by user if exists + if (this.userComparison) { + return this.userComparison; + } + + const current = this.current(); + if (!current) { + return; + } + + // If current timepoint is prebaseline, the first (closest future) BL after current is comparison regardless of default comparison timepoint + if (current.timepointType === 'prebaseline') { + const nextBaselineAfterCurrent = this.nextBaselineAfterCurrent(); + // If there is a next baseline, make it comparison, otherwise comparison is done by default comparison timepoint + if (nextBaselineAfterCurrent) { + return nextBaselineAfterCurrent; + } + } + + // If current timepoint is baseline, the prior is comparison if exists regardless of default comparison timepoint + if (current.timepointType === 'baseline') { + const prior = this.prior(); + if (prior) { + return prior; + } + } + + const comparison = this[comparisonTimepointKey](); + + // Do not return a comparison if it would be identical to + // the current. + if (comparison && comparison.timepointId === current.timepointId) { + return; + } + + return comparison; + } + + /** + * Return the latest initial (prebaseline or baseline) timepoint after current and before the next followup timepoint + * @returns {*} + */ + latestInitialTimepointAfterCurrent() { + let currentTimepoint = this.current(); + + // Skip if the current timepoint is FU since there is no initial timepoint after follow-up + if (currentTimepoint.timepointType === 'followup') { + return; + } + + // Get all next timepoints newer than the current timepoint sorted by visitDate ascending + const sortedTimepoints = this.timepoints.sort((tp1, tp2) => { + return tp1.visitDate > tp2.visitDate ? 1 : -1; + }); + const allNextTimepoints = sortedTimepoints.filter( + tp => tp.visitDate > currentTimepoint.visitDate + ); + + const nextFollowupIndex = allNextTimepoints.findIndex( + tp => tp.timepointType === 'followup' + ); + const latestInitialBeforeNextFUIndex = nextFollowupIndex - 1; + + if (latestInitialBeforeNextFUIndex < 0) { + // There is no FU and all next timepoints are initial, so return the last one + return allNextTimepoints[allNextTimepoints.length - 1]; + } + + // Return the latest initial timepoint before the next FU + return allNextTimepoints[latestInitialBeforeNextFUIndex]; + } + + /** + * Return timepoint ids of initial timepoints which are prebaseline and baseline + * @returns {*} + */ + initialTimepointIds() { + let timepointToCheck = this.current(); + + // If the current timepoint is PBL or BL, then get the recent PBL/BL of the current timepoint by its first FU + // If it does not exist, then there is no newer initial timepoint, so the current timepoint is used to determine initial timepoint ids + if ( + timepointToCheck.timepointType === 'prebaseline' || + timepointToCheck.timepointType === 'baseline' + ) { + timepointToCheck = + this.latestInitialTimepointAfterCurrent() || timepointToCheck; + } + + const visitDateToCheck = timepointToCheck.visitDate; + + const preBaselineTimepoints = + this.timepoints.filter( + tp => + tp.timepointType === 'prebaseline' && tp.visitDate <= visitDateToCheck + ) || []; + const preBaselineTimepointIds = preBaselineTimepoints.map( + timepoint => timepoint.timepointId + ); + + const baselineTimepoints = + this.timepoints.filter( + tp => + tp.timepointType === 'baseline' && tp.visitDate <= visitDateToCheck + ) || []; + const baselineTimepointIds = baselineTimepoints.map( + timepoint => timepoint.timepointId + ); + + return preBaselineTimepointIds.concat(baselineTimepointIds); + } + + // Return only the baseline timepoint + baseline() { + const currentVisitDate = this.current().visitDate; + return this.all().find( + tp => tp.timepointType === 'baseline' && tp.visitDate <= currentVisitDate + ); + } + + /** + * Return only the nadir timepoint. Must be prior to the current timepoint + * @return {any} + */ + nadir() { + const current = this.current(); + const nadir = this.all().find( + tp => + tp.timepointId !== current.timepointId && + tp.timepointKey === 'nadir' && + tp.visitDate <= current.visitDate + ); + + // If we have found a nadir, return that + if (nadir) { + return nadir; + } + + // Otherwise, return the most recent baseline + // This should only happen if we are only at FU1, + // so the baseline is the nadir. + return this.baseline(); + } + + // Return only the key timepoints (current, prior, nadir and baseline) + key() { + const result = [this.current()]; + const prior = this.prior(); + const nadir = this.nadir(); + const baseline = this.baseline(); + + const resultIncludes = timepoint => + !!result.find(x => x.timepointId === timepoint.timepointId); + + if (prior && resultIncludes(prior) === false) { + result.push(prior); + } + + if (nadir && resultIncludes(nadir) === false) { + result.push(nadir); + } + + if (baseline && resultIncludes(baseline) === false) { + result.push(baseline); + } + + return result; + } + + // Return only the timepoints for the given study + study(studyInstanceUid) { + return this.all().filter(timepoint => + timepoint.studyInstanceUids.includes(studyInstanceUid) + ); + } + + // Return the timepoint's name + name(timepoint) { + const timepointTypeName = TIMEPOINT_TYPE_NAMES[timepoint.timepointType]; + + // Check if this is a Baseline timepoint, if it is, return 'Baseline' + if (timepoint.timepointType === 'baseline') { + return 'Baseline'; + } else if (timepoint.visitNumber) { + return `${timepointTypeName} ${timepoint.visitNumber}`; + } + + const visitNumber = this.calculateVisitNumber(timepoint); + + // Return the timepoint name as 'Follow-up N' + return `${timepointTypeName} ${visitNumber}`; + } + + // Build the timepoint title based on its date + title(timepoint) { + const timepointName = this.name(timepoint); + + const all = this.all(); + let index = -1; + let currentIndex = null; + for (let i = 0; i < all.length; i++) { + const currentTimepoint = all[i]; + + // Skip the iterations until we can't find the selected timepoint on study list + if (this.currentTimepointId === currentTimepoint.timepointId) { + currentIndex = 0; + } + + if (currentIndex !== null) { + index = currentIndex++; + } + + // Break the loop if reached the timepoint to get the title + if (currentTimepoint.timepointId === timepoint.timepointId) { + break; + } + } + + const states = { + 0: ['Current'], + 1: ['Prior'], + }; + const parenthesis = states[index] || []; + const nadir = this.nadir(); + + if (nadir && nadir.timepointId === timepoint.timepointId) { + parenthesis.push('Nadir'); + } + + let parenthesisText = ''; + if (parenthesis.length) { + parenthesisText = `(${parenthesis.join(', ')})`; + } + + return `${timepointName} ${parenthesisText}`; + } +} diff --git a/platform/core/src/measurements/classes/index.js b/platform/core/src/measurements/classes/index.js new file mode 100644 index 00000000000..4cd734312b4 --- /dev/null +++ b/platform/core/src/measurements/classes/index.js @@ -0,0 +1,4 @@ +import MeasurementApi from './MeasurementApi'; +import TimepointApi from './TimepointApi'; + +export { TimepointApi, MeasurementApi }; diff --git a/platform/core/src/measurements/configuration.js b/platform/core/src/measurements/configuration.js new file mode 100644 index 00000000000..e82925868e2 --- /dev/null +++ b/platform/core/src/measurements/configuration.js @@ -0,0 +1,41 @@ +import { TimepointApi, MeasurementApi } from './classes'; +import { allTools } from './toolGroups/allTools'; +import { + retrieveMeasurements, + storeMeasurements, + retrieveTimepoints, + storeTimepoints, + removeTimepoint, + updateTimepoint, + disassociateStudy, +} from './dataExchange'; + +MeasurementApi.setConfiguration({ + measurementTools: [allTools], + newLesions: [ + { + id: 'newTargets', + name: 'New Targets', + toolGroupId: 'targets', + }, + { + id: 'newNonTargets', + name: 'New Non-Targets', + toolGroupId: 'nonTargets', + }, + ], + dataExchange: { + retrieve: retrieveMeasurements, + store: storeMeasurements, + }, +}); + +TimepointApi.setConfiguration({ + dataExchange: { + retrieve: retrieveTimepoints, + store: storeTimepoints, + remove: removeTimepoint, + update: updateTimepoint, + disassociate: disassociateStudy, + }, +}); diff --git a/platform/core/src/measurements/conformance/ConformanceCriteria.js b/platform/core/src/measurements/conformance/ConformanceCriteria.js new file mode 100644 index 00000000000..b305326593c --- /dev/null +++ b/platform/core/src/measurements/conformance/ConformanceCriteria.js @@ -0,0 +1,229 @@ +import { CriteriaEvaluator } from './CriteriaEvaluator'; +import * as initialEvaluations from './evaluations'; +import log from '../../log'; + +const evaluations = Object.assign({}, initialEvaluations); + +const BASELINE = 'baseline'; +const FOLLOWUP = 'followup'; +const BOTH = 'both'; +const TARGETS = 'targets'; +const NONTARGETS = 'nonTargets'; + +class ConformanceCriteria { + constructor(measurementApi, timepointApi, options = {}) { + this.measurementApi = measurementApi; + this.timepointApi = timepointApi; + this.nonconformities = []; + this.groupedNonConformities = []; + this.maxTargets = null; + this.maxNewTargets = null; + this.options = options; + } + + loadStudy(studyInstanceUid) { + if (typeof this.options.loadStudy !== 'function') { + throw new Error('loadStudy callback is not defined'); + } + + return this.options.loadStudy(null, studyInstanceUid); + } + + async validate(trialCriteriaType) { + const baselinePromise = this.getData(BASELINE); + const followupPromise = this.getData(FOLLOWUP); + const [baselineData, followupData] = await Promise.all([ + baselinePromise, + followupPromise, + ]); + const mergedData = { + targets: [], + nonTargets: [], + }; + + mergedData.targets = mergedData.targets.concat(baselineData.targets); + mergedData.targets = mergedData.targets.concat(followupData.targets); + mergedData.nonTargets = mergedData.nonTargets.concat( + baselineData.nonTargets + ); + mergedData.nonTargets = mergedData.nonTargets.concat( + followupData.nonTargets + ); + + this.maxTargets = null; + this.maxNewTargets = null; + const resultBoth = this.validateTimepoint( + BOTH, + trialCriteriaType, + mergedData + ); + const resultBaseline = this.validateTimepoint( + BASELINE, + trialCriteriaType, + baselineData + ); + const resultFollowup = this.validateTimepoint( + FOLLOWUP, + trialCriteriaType, + followupData + ); + const nonconformities = resultBaseline + .concat(resultFollowup) + .concat(resultBoth); + const groupedNonConformities = this.groupNonConformities(nonconformities); + + // Keep both? Group the data only on viewer/measurementTable views? + // Work with not grouped data (worse lookup performance on measurementTableRow)? + this.nonconformities = nonconformities; + this.groupedNonConformities = groupedNonConformities; + + console.warn('nonconformities'); + console.warn(nonconformities); + console.warn('groupedNonConformities'); + console.warn(groupedNonConformities); + + return nonconformities; + } + + groupNonConformities(nonconformities) { + const groups = {}; + const toolsGroupsMap = this.measurementApi.toolsGroupsMap; + + nonconformities.forEach(nonConformity => { + if (nonConformity.isGlobal) { + groups.globals = groups.globals || { messages: [] }; + groups.globals.messages.push(nonConformity.message); + + return; + } + + nonConformity.measurements.forEach(measurement => { + const groupName = toolsGroupsMap[measurement.toolType]; + groups[groupName] = groups[groupName] || { measurementNumbers: {} }; + + const group = groups[groupName]; + const measureNumber = measurement.measurementNumber; + let measurementNumbers = group.measurementNumbers[measureNumber]; + + if (!measurementNumbers) { + measurementNumbers = group.measurementNumbers[measureNumber] = { + messages: [], + measurements: [], + }; + } + + measurementNumbers.messages.push(nonConformity.message); + measurementNumbers.measurements.push(measurement); + }); + }); + + return groups; + } + + validateTimepoint(timepointType, trialCriteriaType, data) { + const evaluators = this.getEvaluators(timepointType, trialCriteriaType); + let nonconformities = []; + + evaluators.forEach(evaluator => { + const maxTargets = evaluator.getMaxTargets(false); + const maxNewTargets = evaluator.getMaxTargets(true); + if (maxTargets) { + this.maxTargets = maxTargets; + } + + if (maxNewTargets) { + this.maxNewTargets = maxNewTargets; + } + + const result = evaluator.evaluate(data); + + if (result.length > 0) { + result.forEach(resultItem => { + resultItem.timepointType = timepointType; + }); + } + + nonconformities = nonconformities.concat(result); + }); + + return nonconformities; + } + + getEvaluators(timepointType, trialCriteriaType) { + const evaluators = []; + console.warn(evaluations); + const trialCriteriaTypeId = trialCriteriaType.id.toLowerCase(); + const evaluation = evaluations[trialCriteriaTypeId]; + + if (evaluation) { + const evaluationTimepoint = evaluation[timepointType]; + + if (evaluationTimepoint) { + evaluators.push(new CriteriaEvaluator(evaluationTimepoint)); + } + } + + return evaluators; + } + + /* + * Build the data that will be used to do the conformance criteria checks + */ + async getData(timepointType) { + const data = { + targets: [], + nonTargets: [], + }; + + const studyPromises = []; + + const fillData = measurementType => { + const measurements = this.measurementApi.fetch(measurementType); + + measurements.forEach(measurement => { + const { studyInstanceUid } = measurement; + + const timepointId = measurement.timepointId; + const timepoint = + timepointId && + this.timepointApi.timepoints.find(a => a.timepointId === timepointId); + + if ( + !timepoint || + (timepointType !== BOTH && timepoint.timepointType !== timepointType) + ) { + return; + } + + const promise = this.loadStudy(studyInstanceUid); + promise.then( + studyMetadata => { + data[measurementType].push({ + measurement, + metadata: studyMetadata.getFirstInstance(), + timepoint, + }); + }, + error => { + throw new Error(error); + } + ); + studyPromises.push(promise); + }); + }; + + fillData(TARGETS); + fillData(NONTARGETS); + + await Promise.all(studyPromises); + + return data; + } + + static setEvaluationDefinitions(evaluationKey, evaluationDefinitions) { + evaluations[evaluationKey] = evaluationDefinitions; + } +} + +export default ConformanceCriteria; +//OHIF.measurements.ConformanceCriteria = ConformanceCriteria; diff --git a/platform/core/src/measurements/conformance/CriteriaEvaluator.js b/platform/core/src/measurements/conformance/CriteriaEvaluator.js new file mode 100644 index 00000000000..bddfb76b6fb --- /dev/null +++ b/platform/core/src/measurements/conformance/CriteriaEvaluator.js @@ -0,0 +1,94 @@ +import { BaseCriterion } from './criteria/BaseCriterion'; +import * as initialCriteria from './criteria'; +import Ajv from 'ajv'; + +const Criteria = Object.assign({}, initialCriteria); + +export class CriteriaEvaluator { + constructor(criteriaObject) { + const criteriaValidator = this.getCriteriaValidator(); + this.criteria = []; + + if (!criteriaValidator(criteriaObject)) { + let message = ''; + criteriaValidator.errors.forEach(error => { + message += `\noptions${error.dataPath} ${error.message}`; + }); + throw new Error(message); + } + + Object.keys(criteriaObject).forEach(criterionkey => { + const optionsObject = criteriaObject[criterionkey]; + const Criterion = Criteria[`${criterionkey}Criterion`]; + const optionsArray = + optionsObject instanceof Array ? optionsObject : [optionsObject]; + optionsArray.forEach(options => + this.criteria.push(new Criterion(options, criterionkey)) + ); + }); + } + + getMaxTargets(newTarget = false) { + let result = 0; + this.criteria.forEach(criterion => { + const newTargetMatch = newTarget === !!criterion.options.newTarget; + if (criterion instanceof Criteria.MaxTargetsCriterion && newTargetMatch) { + const { limit } = criterion.options; + if (limit > result) { + result = limit; + } + } + }); + return result; + } + + getCriteriaValidator() { + if (CriteriaEvaluator.criteriaValidator) { + return CriteriaEvaluator.criteriaValidator; + } + + const schema = { + properties: {}, + definitions: {}, + }; + + Object.keys(Criteria).forEach(key => { + const Criterion = Criteria[key]; + if (Criterion.prototype instanceof BaseCriterion) { + const criterionkey = key.replace(/Criterion$/, ''); + const criterionDefinition = `#/definitions/${criterionkey}`; + + schema.definitions[criterionkey] = Criteria[`${criterionkey}Schema`]; + schema.properties[criterionkey] = { + oneOf: [ + { $ref: criterionDefinition }, + { + type: 'array', + items: { + $ref: criterionDefinition, + }, + }, + ], + }; + } + }); + + CriteriaEvaluator.criteriaValidator = new Ajv().compile(schema); + return CriteriaEvaluator.criteriaValidator; + } + + evaluate(data) { + const nonconformities = []; + this.criteria.forEach(criterion => { + const criterionResult = criterion.evaluate(data); + if (!criterionResult.passed) { + nonconformities.push(criterionResult); + } + }); + return nonconformities; + } + + static setCriterion(criterionKey, criterionDefinitions) { + Criteria[criterionKey] = criterionDefinitions; + } +} diff --git a/platform/core/src/measurements/conformance/criteria/BaseCriterion.js b/platform/core/src/measurements/conformance/criteria/BaseCriterion.js new file mode 100644 index 00000000000..0b88eca7f26 --- /dev/null +++ b/platform/core/src/measurements/conformance/criteria/BaseCriterion.js @@ -0,0 +1,44 @@ +export class BaseCriterion { + constructor(options, criterionName) { + this.options = options; + this.criterionName = criterionName; + } + + generateResponse(message, measurements) { + const passed = !message; + const isGlobal = !measurements || !measurements.length; + + return { + passed, + isGlobal, + message, + measurements, + criterionName: this.criterionName, + }; + } + + getNewTargetNumbers(data) { + const { options } = this; + const baselineMeasurementNumbers = []; + const newTargetNumbers = new Set(); + + if (options.newTarget) { + data.targets.forEach(target => { + const { measurementNumber } = target.measurement; + if (target.timepoint.timepointType === 'baseline') { + baselineMeasurementNumbers.push(measurementNumber); + } + }); + data.targets.forEach(target => { + const { measurementNumber } = target.measurement; + if (target.timepoint.timepointType === 'followup') { + if (!baselineMeasurementNumbers.includes(measurementNumber)) { + newTargetNumbers.add(measurementNumber); + } + } + }); + } + + return newTargetNumbers; + } +} diff --git a/platform/core/src/measurements/conformance/criteria/Location.js b/platform/core/src/measurements/conformance/criteria/Location.js new file mode 100644 index 00000000000..208026c784d --- /dev/null +++ b/platform/core/src/measurements/conformance/criteria/Location.js @@ -0,0 +1,34 @@ +import { BaseCriterion } from './BaseCriterion'; + +export const LocationSchema = { + type: 'object', +}; + +/* LocationCriterion + * Check if the there are non-target measurements with response different than "present" on baseline + */ +export class LocationCriterion extends BaseCriterion { + constructor(...props) { + super(...props); + } + + evaluate(data) { + const items = data.targets.concat(data.nonTargets); + const measurements = []; + let message; + + items.forEach(item => { + const measurement = item.measurement; + + if (!measurement.location) { + measurements.push(measurement); + } + }); + + if (measurements.length) { + message = 'All measurements should have a location'; + } + + return this.generateResponse(message, measurements); + } +} diff --git a/platform/core/src/measurements/conformance/criteria/MaxTargets.js b/platform/core/src/measurements/conformance/criteria/MaxTargets.js new file mode 100644 index 00000000000..40dcec80004 --- /dev/null +++ b/platform/core/src/measurements/conformance/criteria/MaxTargets.js @@ -0,0 +1,105 @@ +import { BaseCriterion } from './BaseCriterion'; + +export const MaxTargetsSchema = { + type: 'object', + properties: { + limit: { + label: 'Max targets allowed in study', + type: 'integer', + minimum: 0, + }, + newTarget: { + label: 'Flag to evaluate only new targets', + type: 'boolean', + }, + locationIn: { + label: + 'Filter to evaluate only measurements with the specified locations', + type: 'array', + items: { + type: 'string', + }, + minItems: 1, + uniqueItems: true, + }, + locationNotIn: { + label: + 'Filter to evaluate only measurements without the specified locations', + type: 'array', + items: { + type: 'string', + }, + minItems: 1, + uniqueItems: true, + }, + isNodal: { + label: 'Filter to evaluate only nodal or extranodal measurements', + type: 'boolean' + }, + message: { + label: 'Message to be displayed in case of nonconformity', + type: 'string', + } + }, + required: ['limit'], +}; + +/* MaxTargetsCriterion + * Check if the number of target measurements exceeded the limit allowed + * Options: + * limit: Max targets allowed in study + * newTarget: Flag to evaluate only new targets (must be evaluated on both) + * locationIn: Filter to evaluate only measurements with the specified locations + * locationNotIn: Filter to evaluate only measurements without the specified locations + * isNodal: Filter to evaluate only nodal or extranodal measurements + * message: Message to be displayed in case of nonconformity + */ +export class MaxTargetsCriterion extends BaseCriterion { + constructor(...props) { + super(...props); + } + + evaluate(data) { + const { options } = this; + + const newTargetNumbers = this.getNewTargetNumbers(data); + const measurementNumbers = []; + data.targets.forEach(target => { + const { location, measurementNumber, isSplitLesion, isNodal } = target.measurement; + + if (isSplitLesion) + return; + + if (typeof isNodal === 'boolean' && typeof options.isNodal === 'boolean' && options.isNodal !== isNodal) + return; + + if (options.newTarget && !newTargetNumbers.has(measurementNumber)) + return; + + if (options.locationIn && options.locationIn.indexOf(location) === -1) + return; + + if (options.locationNotIn && options.locationNotIn.indexOf(location) > -1) + return; + + measurementNumbers.push(measurementNumber); + }); + + let lesionType = ''; + if (typeof options.isNodal === 'boolean') { + lesionType = options.isNodal ? 'nodal ' : 'extranodal '; + } + + let message; + if (measurementNumbers.length > options.limit) { + const increment = options.newTarget ? 'new ' : ''; + const plural = options.limit === 1 ? '' : 's'; + const amount = options.limit === 0 ? '' : `more than ${options.limit}`; + message = + options.message || + `The study should not have ${amount} ${increment}${lesionType}target${plural}.`; + } + + return this.generateResponse(message); + } +} diff --git a/platform/core/src/measurements/conformance/criteria/MaxTargetsPerOrgan.js b/platform/core/src/measurements/conformance/criteria/MaxTargetsPerOrgan.js new file mode 100644 index 00000000000..2b09434ec20 --- /dev/null +++ b/platform/core/src/measurements/conformance/criteria/MaxTargetsPerOrgan.js @@ -0,0 +1,82 @@ +import { BaseCriterion } from './BaseCriterion'; + +export const MaxTargetsPerOrganSchema = { + type: 'object', + properties: { + limit: { + label: 'Max targets allowed per organ', + type: 'integer', + minimum: 1, + }, + newTarget: { + label: 'Flag to evaluate only new targets', + type: 'boolean', + }, + isNodal: { + label: 'Filter to evaluate only nodal or extranodal measurements', + type: 'boolean' + }, + message: { + label: 'Message to be displayed in case of nonconformity', + type: 'string', + } + }, + required: ['limit'], +}; + +/* + * MaxTargetsPerOrganCriterion + * Check if the number of target measurements per organ exceeded the limit allowed + * Options: + * limit: Max targets allowed in study + * newTarget: Flag to evaluate only new targets (must be evaluated on both) + * isNodal: Filter to evaluate only nodal or extranodal measurements + * message: Message to be displayed in case of nonconformity + */ +export class MaxTargetsPerOrganCriterion extends BaseCriterion { + constructor(...props) { + super(...props); + } + + evaluate(data) { + const { options } = this; + const targetsPerOrgan = {}; + let measurements = []; + + const newTargetNumbers = this.getNewTargetNumbers(data); + data.targets.forEach(target => { + const { measurement } = target; + const { location, measurementNumber, isSplitLesion, isNodal } = measurement; + + if (isSplitLesion) + return; + + if (typeof isNodal === 'boolean' && typeof options.isNodal === 'boolean' && options.isNodal !== isNodal) + return; + + if (!targetsPerOrgan[location]) { + targetsPerOrgan[location] = new Set(); + } + + if (!options.newTarget || newTargetNumbers.has(measurementNumber)) { + targetsPerOrgan[location].add(measurementNumber); + } + + if (targetsPerOrgan[location].size > options.limit) { + measurements.push(measurement); + } + }); + + let message; + if (measurements.length) { + const increment = options.newTarget ? 'new ' : ''; + message = + options.message || + `Each organ should not have more than ${ + options.limit + } ${increment}targets.`; + } + + return this.generateResponse(message, measurements); + } +} diff --git a/platform/core/src/measurements/conformance/criteria/MeasurementsLength.js b/platform/core/src/measurements/conformance/criteria/MeasurementsLength.js new file mode 100644 index 00000000000..0ca2291b1e7 --- /dev/null +++ b/platform/core/src/measurements/conformance/criteria/MeasurementsLength.js @@ -0,0 +1,161 @@ +import { BaseCriterion } from './BaseCriterion'; + +export const MeasurementsLengthSchema = { + type: 'object', + properties: { + longAxis: { + label: 'Minimum length of long axis', + type: 'number', + minimum: 0, + }, + shortAxis: { + label: 'Minimum length of short axis', + type: 'number', + minimum: 0, + }, + longAxisSliceThicknessMultiplier: { + label: 'Length of long axis multiplier', + type: 'number', + minimum: 0, + }, + shortAxisSliceThicknessMultiplier: { + label: 'Length of short axis multiplier', + type: 'number', + minimum: 0, + }, + modalityIn: { + label: + 'Filter to evaluate only measurements with the specified modalities', + type: 'array', + items: { + type: 'string', + }, + minItems: 1, + uniqueItems: true, + }, + modalityNotIn: { + label: + 'Filter to evaluate only measurements without the specified modalities', + type: 'array', + items: { + type: 'string', + }, + minItems: 1, + uniqueItems: true, + }, + locationIn: { + label: + 'Filter to evaluate only measurements with the specified locations', + type: 'array', + items: { + type: 'string', + }, + minItems: 1, + uniqueItems: true, + }, + locationNotIn: { + label: + 'Filter to evaluate only measurements without the specified locations', + type: 'array', + items: { + type: 'string', + }, + minItems: 1, + uniqueItems: true, + }, + isNodal: { + label: 'Filter to evaluate only nodal or extranodal measurements', + type: 'boolean' + }, + message: { + label: 'Message to be displayed in case of nonconformity', + type: 'string', + }, + }, + anyOf: [ + { required: ['message', 'longAxis'] }, + { required: ['message', 'shortAxis'] }, + { required: ['message', 'longAxisSliceThicknessMultiplier'] }, + { required: ['message', 'shortAxisSliceThicknessMultiplier'] }, + ], +}; + +/* + * MeasurementsLengthCriterion + * Check the measurements of all bidirectional tools based on + * short axis, long axis, modalities, location and slice thickness + * Options: + * longAxis: Minimum length of long axis + * shortAxis: Minimum length of short axis + * longAxisSliceThicknessMultiplier: Length of long axis multiplier + * shortAxisSliceThicknessMultiplier: Length of short axis multiplier + * modalityIn: Filter to evaluate only measurements with the specified modalities + * modalityNotIn: Filter to evaluate only measurements without the specified modalities + * locationIn: Filter to evaluate only measurements with the specified locations + * locationNotIn: Filter to evaluate only measurements without the specified locations + * isNodal: Filter to evaluate only nodal or extranodal measurements + * message: Message to be displayed in case of nonconformity + */ +export class MeasurementsLengthCriterion extends BaseCriterion { + constructor(...props) { + super(...props); + } + + evaluate(data) { + let message; + let measurements = []; + const { options } = this; + const longMultiplier = options.longAxisSliceThicknessMultiplier; + const shortMultiplier = options.shortAxisSliceThicknessMultiplier; + + data.targets.forEach(item => { + const { metadata, measurement } = item; + const { location } = measurement; + + let { longestDiameter, shortestDiameter, isNodal } = measurement; + if (measurement.childToolsCount) { + const child = measurement.bidirectional; + longestDiameter = (child && child.longestDiameter) || 0; + shortestDiameter = (child && child.shortestDiameter) || 0; + } + + const { sliceThickness } = metadata; + const modality = (metadata.getRawValue('x00080060') || '').toUpperCase(); + + // Stop here if the measurement does not match the modality and location filters + if (typeof isNodal === 'boolean' && typeof options.isNodal === 'boolean' && options.isNodal !== isNodal) + return; + if (options.locationIn && options.locationIn.indexOf(location) === -1) + return; + if (options.modalityIn && options.modalityIn.indexOf(modality) === -1) + return; + if (options.locationNotIn && options.locationNotIn.indexOf(location) > -1) + return; + if (options.modalityNotIn && options.modalityNotIn.indexOf(modality) > -1) + return; + + // Check the measurement length + const failed = + (options.longAxis && longestDiameter < options.longAxis) || + (options.shortAxis && shortestDiameter < options.shortAxis) || + (longMultiplier && + !isNaN(sliceThickness) && + longestDiameter < longMultiplier * sliceThickness) || + (shortMultiplier && + !isNaN(sliceThickness) && + shortestDiameter < shortMultiplier * sliceThickness); + + // Mark this measurement as invalid if some of the checks have failed + if (failed) { + measurements.push(measurement); + } + }); + + // Use the options' message if some measurement is invalid + if (measurements.length) { + message = options.message; + } + + return this.generateResponse(message, measurements); + } +} diff --git a/platform/core/src/measurements/conformance/criteria/Modality.js b/platform/core/src/measurements/conformance/criteria/Modality.js new file mode 100644 index 00000000000..64bf480d76e --- /dev/null +++ b/platform/core/src/measurements/conformance/criteria/Modality.js @@ -0,0 +1,84 @@ +import { BaseCriterion } from './BaseCriterion'; + +export const ModalitySchema = { + type: 'object', + properties: { + method: { + label: 'Specify if it\'s goinig to "allow" or "deny" the modalities', + type: 'string', + enum: ['allow', 'deny'], + }, + measurementTypes: { + label: 'List of measurement types that will be evaluated', + type: 'array', + items: { + type: 'string', + }, + minItems: 1, + uniqueItems: true, + }, + modalities: { + label: 'List of allowed/denied modalities', + type: 'array', + items: { + type: 'string', + }, + minItems: 1, + uniqueItems: true, + }, + }, + required: ['method', 'modalities'], +}; + +/* + * ModalityCriteria + * Check if a modality is allowed or denied + * Options: + * method (string): Specify if it\'s goinig to "allow" or "deny" the modalities + * measurementTypes (string[]): List of measurement types that will be evaluated + * modalities (string[]): List of allowed/denied modalities + */ +export class ModalityCriterion extends BaseCriterion { + constructor(...props) { + super(...props); + } + + evaluate(data) { + const measurementTypes = this.options.measurementTypes || ['targets']; + const modalitiesSet = new Set(this.options.modalities); + const validationMethod = this.options.method; + const measurements = []; + const invalidModalities = new Set(); + let message; + + measurementTypes.forEach(measurementType => { + const items = data[measurementType]; + + items.forEach(item => { + const { measurement, metadata } = item; + const modality = ( + metadata.getRawValue('x00080060') || '' + ).toUpperCase(); + + if ( + (validationMethod === 'allow' && !modalitiesSet.has(modality)) || + (validationMethod === 'deny' && modalitiesSet.has(modality)) + ) { + measurements.push(measurement); + invalidModalities.add(modality); + } + }); + }); + + if (measurements.length) { + const uniqueModalities = Array.from(invalidModalities); + const uniqueModalitiesText = uniqueModalities.join(', '); + const modalityText = + uniqueModalities.length > 1 ? 'modalities' : 'modality'; + + message = `The ${modalityText} ${uniqueModalitiesText} should not be used as a method of measurement`; + } + + return this.generateResponse(message, measurements); + } +} diff --git a/platform/core/src/measurements/conformance/criteria/NonTargetResponse.js b/platform/core/src/measurements/conformance/criteria/NonTargetResponse.js new file mode 100644 index 00000000000..f8b4f966551 --- /dev/null +++ b/platform/core/src/measurements/conformance/criteria/NonTargetResponse.js @@ -0,0 +1,35 @@ +import { BaseCriterion } from './BaseCriterion'; + +export const NonTargetResponseSchema = { + type: 'object', +}; + +/* NonTargetResponseCriterion + * Check if the there are non-target measurements with response different than "present" on baseline + */ +export class NonTargetResponseCriterion extends BaseCriterion { + constructor(...props) { + super(...props); + } + + evaluate(data) { + const items = data.nonTargets; + const measurements = []; + let message; + + items.forEach(item => { + const measurement = item.measurement; + const response = (measurement.response || '').toLowerCase(); + + if (response !== 'present') { + measurements.push(measurement); + } + }); + + if (measurements.length) { + message = 'Non-targets can only be assessed as "present"'; + } + + return this.generateResponse(message, measurements); + } +} diff --git a/platform/core/src/measurements/conformance/criteria/TargetType.js b/platform/core/src/measurements/conformance/criteria/TargetType.js new file mode 100644 index 00000000000..b40f63962e0 --- /dev/null +++ b/platform/core/src/measurements/conformance/criteria/TargetType.js @@ -0,0 +1,38 @@ +import { BaseCriterion } from './BaseCriterion'; + +export const TargetTypeSchema = { + type: 'object', +}; + +/* TargetTypeCriterion + * Check if the there are non-bidirectional target measurements on baseline + */ +export class TargetTypeCriterion extends BaseCriterion { + constructor(...props) { + super(...props); + } + + evaluate(data) { + const items = data.targets; + const measurements = []; + let message; + + items.forEach(item => { + const measurement = item.measurement; + + if ( + measurement.toolType !== 'Bidirectional' && + !measurement.bidirectional + ) { + measurements.push(measurement); + } + }); + + if (measurements.length) { + message = + 'Target lesions must have measurements (cannot be assessed as CR, UN/NE, EX)'; + } + + return this.generateResponse(message, measurements); + } +} diff --git a/platform/core/src/measurements/conformance/criteria/index.js b/platform/core/src/measurements/conformance/criteria/index.js new file mode 100644 index 00000000000..5501e2c7a19 --- /dev/null +++ b/platform/core/src/measurements/conformance/criteria/index.js @@ -0,0 +1,7 @@ +export * from './Location'; +export * from './MaxTargetsPerOrgan'; +export * from './MaxTargets'; +export * from './MeasurementsLength'; +export * from './Modality'; +export * from './NonTargetResponse'; +export * from './TargetType'; diff --git a/platform/core/src/measurements/conformance/evaluations/index.js b/platform/core/src/measurements/conformance/evaluations/index.js new file mode 100644 index 00000000000..ffb8fbb7272 --- /dev/null +++ b/platform/core/src/measurements/conformance/evaluations/index.js @@ -0,0 +1,3 @@ +import * as recistEvaluation from './recist.json'; + +export const recist11 = recistEvaluation; diff --git a/platform/core/src/measurements/conformance/evaluations/recist.json b/platform/core/src/measurements/conformance/evaluations/recist.json new file mode 100644 index 00000000000..fe93839d67f --- /dev/null +++ b/platform/core/src/measurements/conformance/evaluations/recist.json @@ -0,0 +1,38 @@ +{ + "both": { + "Location": {} + }, + "baseline": { + "TargetType": {}, + "MaxTargetsPerOrgan": { + "limit": 2 + }, + "MaxTargets": { + "limit": 5 + }, + "MeasurementsLength": [ + { + "longAxis": 10, + "longAxisSliceThicknessMultiplier": 2, + "modalityIn": ["CT", "MR"], + "locationNotIn": ["Lymph Node"], + "message": "Extranodal lesions must be >= 10mm long axis AND >= double the acquisition slice thickness by CT and MR" + }, + { + "shortAxis": 20, + "longAxis": 20, + "modalityIn": ["PX", "XA"], + "locationNotIn": ["Lymph Node"], + "message": "Extranodal lesions must be >= 20mm on chest x-ray (although x-rays rarely used for clinical trial assessment)" + }, + { + "shortAxis": 15, + "shortAxisSliceThicknessMultiplier": 2, + "modalityIn": ["CT", "MR"], + "locationIn": ["Lymph Node"], + "message": "Nodal lesions must be >= 15mm short axis AND >= double the acquisition slice thickness by CT and MR" + } + ] + }, + "followup": {} +} diff --git a/platform/core/src/measurements/conformance/index.js b/platform/core/src/measurements/conformance/index.js new file mode 100644 index 00000000000..901d433e76c --- /dev/null +++ b/platform/core/src/measurements/conformance/index.js @@ -0,0 +1,3 @@ +import ConformanceCriteria from './ConformanceCriteria'; + +export { ConformanceCriteria }; diff --git a/platform/core/src/measurements/dataExchange.js b/platform/core/src/measurements/dataExchange.js new file mode 100644 index 00000000000..0af694d4d76 --- /dev/null +++ b/platform/core/src/measurements/dataExchange.js @@ -0,0 +1,36 @@ +import log from '../log'; + +export const retrieveMeasurements = (patientId, timepointIds) => { + log.error('retrieveMeasurements'); + return Promise.resolve(); +}; + +export const storeMeasurements = (measurementData, timepointIds) => { + log.error('storeMeasurements'); + return Promise.resolve(); +}; + +export const retrieveTimepoints = filter => { + log.error('retrieveTimepoints'); + return Promise.resolve(); +}; + +export const storeTimepoints = timepointData => { + log.error('storeTimepoints'); + return Promise.resolve(); +}; + +export const updateTimepoint = (timepointData, query) => { + log.error('updateTimepoint'); + return Promise.resolve(); +}; + +export const removeTimepoint = timepointId => { + log.error('removeTimepoint'); + return Promise.resolve(); +}; + +export const disassociateStudy = (timepointIds, studyInstanceUid) => { + log.error('disassociateStudy'); + return Promise.resolve(); +}; diff --git a/platform/core/src/measurements/index.js b/platform/core/src/measurements/index.js new file mode 100644 index 00000000000..0b84a138517 --- /dev/null +++ b/platform/core/src/measurements/index.js @@ -0,0 +1,28 @@ +import './configuration'; + +import * as tools from './tools'; + +import { MeasurementApi, TimepointApi } from './classes'; + +import { ConformanceCriteria } from './conformance'; +import MeasurementHandlers from './measurementHandlers'; +import getDescription from './lib/getDescription'; +import getImageAttributes from './lib/getImageAttributes'; +import getImageIdForImagePath from './lib/getImageIdForImagePath'; +import getLabel from './lib/getLabel'; +import ltTools from './ltTools'; + +const measurements = { + TimepointApi, + MeasurementApi, + ConformanceCriteria, + MeasurementHandlers, + ltTools, + tools, + getLabel, + getDescription, + getImageAttributes, + getImageIdForImagePath, +}; + +export default measurements; diff --git a/platform/core/src/measurements/lib/getDescription.js b/platform/core/src/measurements/lib/getDescription.js new file mode 100644 index 00000000000..e6e83018c04 --- /dev/null +++ b/platform/core/src/measurements/lib/getDescription.js @@ -0,0 +1,3 @@ +export default function(measurement) { + return measurement.description; +} diff --git a/platform/core/src/measurements/lib/getImageAttributes.js b/platform/core/src/measurements/lib/getImageAttributes.js new file mode 100644 index 00000000000..caa804e4d58 --- /dev/null +++ b/platform/core/src/measurements/lib/getImageAttributes.js @@ -0,0 +1,37 @@ +import cornerstone from 'cornerstone-core'; + +export default function(element) { + // Get the Cornerstone imageId + const enabledElement = cornerstone.getEnabledElement(element); + const imageId = enabledElement.image.imageId; + + // Get studyInstanceUid & patientId + const study = cornerstone.metaData.get('study', imageId); + const studyInstanceUid = study.studyInstanceUid; + const patientId = study.patientId; + + // Get seriesInstanceUid + const series = cornerstone.metaData.get('series', imageId); + const seriesInstanceUid = series.seriesInstanceUid; + + // Get sopInstanceUid + const sopInstance = cornerstone.metaData.get('instance', imageId); + const sopInstanceUid = sopInstance.sopInstanceUid; + const frameIndex = sopInstance.frame || 0; + + const imagePath = [ + studyInstanceUid, + seriesInstanceUid, + sopInstanceUid, + frameIndex, + ].join('_'); + + return { + patientId, + studyInstanceUid, + seriesInstanceUid, + sopInstanceUid, + frameIndex, + imagePath, + }; +} diff --git a/platform/core/src/measurements/lib/getImageIdForImagePath.js b/platform/core/src/measurements/lib/getImageIdForImagePath.js new file mode 100644 index 00000000000..943e0c72ad6 --- /dev/null +++ b/platform/core/src/measurements/lib/getImageIdForImagePath.js @@ -0,0 +1,14 @@ +import studyMetadataManager from '../../utils/studyMetadataManager'; + +export default function(imagePath, thumbnail = false) { + const [ + studyInstanceUid, + seriesInstanceUid, + sopInstanceUid, + frameIndex, + ] = imagePath.split('_'); + const studyMetadata = studyMetadataManager.get(studyInstanceUid); + const series = studyMetadata.getSeriesByUID(seriesInstanceUid); + const instance = series.getInstanceByUID(sopInstanceUid); + return instance.getImageId(frameIndex, thumbnail); +} diff --git a/platform/core/src/measurements/lib/getLabel.js b/platform/core/src/measurements/lib/getLabel.js new file mode 100644 index 00000000000..cfb10363ffb --- /dev/null +++ b/platform/core/src/measurements/lib/getLabel.js @@ -0,0 +1,15 @@ +export default function(measurement) { + if (!measurement) { + return; + } + + switch (measurement.toolType) { + case 'Bidirectional': + case 'TargetCR': + case 'TargetNE': + case 'TargetUN': + return `Target ${measurement.lesionNamingNumber}`; + case 'NonTarget': + return `Non-Target ${measurement.lesionNamingNumber}`; + } +} diff --git a/platform/core/src/measurements/ltTools.js b/platform/core/src/measurements/ltTools.js new file mode 100644 index 00000000000..c99bced6368 --- /dev/null +++ b/platform/core/src/measurements/ltTools.js @@ -0,0 +1,14 @@ +import { targets } from './toolGroups/targets'; +import { nonTargets } from './toolGroups/nonTargets'; +import { temp } from './toolGroups/temp'; +import cloneDeep from 'lodash.clonedeep'; + +const ltTools = cloneDeep([targets, nonTargets, temp]); + +ltTools.forEach(toolGroup => { + toolGroup.childTools.forEach(tool => { + tool.toolGroup = toolGroup.id; + }); +}); + +export default ltTools; diff --git a/platform/core/src/measurements/measurementHandlers/handleChildMeasurementAdded.js b/platform/core/src/measurements/measurementHandlers/handleChildMeasurementAdded.js new file mode 100644 index 00000000000..bdb7d5d480b --- /dev/null +++ b/platform/core/src/measurements/measurementHandlers/handleChildMeasurementAdded.js @@ -0,0 +1,98 @@ +import cornerstone from 'cornerstone-core'; +import { MeasurementApi } from '../classes'; +import log from '../../log'; +import user from '../../user'; +import getImageAttributes from '../lib/getImageAttributes'; +import getLabel from '../lib/getLabel'; + +export default function({ eventData, tool, toolGroupId, toolGroup }) { + const measurementApi = MeasurementApi.Instance; + if (!measurementApi) { + log.warn('Measurement API is not initialized'); + } + + const { measurementData } = eventData; + + const collection = measurementApi.tools[tool.parentTool]; + + // Stop here if the tool data shall not be persisted (e.g. temp tools) + if (!collection) return; + + // Stop here if there's no measurement data or if it was cancelled + if (!measurementData || measurementData.cancelled) return; + + log.info('CornerstoneToolsMeasurementAdded'); + + const imageAttributes = getImageAttributes(eventData.element); + + const additionalProperties = Object.assign(imageAttributes, { + userId: user.getUserId(), + }); + + const childMeasurement = Object.assign( + {}, + measurementData, + additionalProperties + ); + + const parentMeasurement = collection.find( + t => + t.toolType === tool.parentTool && + t.patientId === imageAttributes.patientId && + t[tool.attribute] === null + ); + + // Check if a measurement to fit this child tool already exists + if (parentMeasurement) { + const key = tool.attribute; + + // Add the createdAt attribute + childMeasurement.createdAt = new Date(); + + // Update the parent measurement + parentMeasurement[key] = childMeasurement; + parentMeasurement.childToolsCount = + (parentMeasurement.childToolsCount || 0) + 1; + measurementApi.updateMeasurement(tool.parentTool, parentMeasurement); + + // Update the measurementData ID and lesionNamingNumber + measurementData._id = parentMeasurement._id; + measurementData.lesionNamingNumber = parentMeasurement.lesionNamingNumber; + } else { + const measurement = { + toolType: tool.parentTool, + lesionNamingNumber: measurementData.lesionNamingNumber, + userId: user.getUserId(), + patientId: imageAttributes.patientId, + studyInstanceUid: imageAttributes.studyInstanceUid, + }; + + measurement[tool.attribute] = Object.assign( + {}, + measurementData, + additionalProperties + ); + + const addedMeasurement = measurementApi.addMeasurement( + tool.parentTool, + measurement + ); + Object.assign(measurementData, addedMeasurement); + } + + const measurementLabel = getLabel(measurementData); + if (measurementLabel) { + measurementData.labels = [measurementLabel]; + } + + // TODO: This is very hacky, but will work for now + cornerstone.getEnabledElements().forEach(enabledElement => { + cornerstone.updateImage(enabledElement.element); + }); + + // TODO: Notify about the last activated measurement + + if (MeasurementApi.isToolIncluded(tool)) { + // TODO: Notify that viewer suffered changes + } +} diff --git a/platform/core/src/measurements/measurementHandlers/handleChildMeasurementModified.js b/platform/core/src/measurements/measurementHandlers/handleChildMeasurementModified.js new file mode 100644 index 00000000000..05d44777d86 --- /dev/null +++ b/platform/core/src/measurements/measurementHandlers/handleChildMeasurementModified.js @@ -0,0 +1,38 @@ +import cornerstone from 'cornerstone-core'; +import { MeasurementApi } from '../classes'; +import log from '../../log'; + +export default function({ eventData, tool, toolGroupId, toolGroup }) { + const measurementApi = MeasurementApi.Instance; + if (!measurementApi) { + log.warn('Measurement API is not initialized'); + } + + const { measurementData } = eventData; + + const collection = measurementApi.tools[tool.parentTool]; + + // Stop here if the tool data shall not be persisted (e.g. temp tools) + if (!collection) return; + + log.info('CornerstoneToolsMeasurementModified'); + + const measurement = collection.find(t => t._id === measurementData._id); + let childMeasurement = measurement && measurement[tool.attribute]; + + // Stop here if the measurement is already deleted + if (!childMeasurement) return; + + childMeasurement = Object.assign(childMeasurement, measurementData); + childMeasurement.viewport = cornerstone.getViewport(eventData.element); + + // Update the parent measurement + measurement[tool.attribute] = childMeasurement; + measurementApi.updateMeasurement(tool.parentTool, measurement); + + // TODO: Notify about the last activated measurement + + if (MeasurementApi.isToolIncluded(tool)) { + // TODO: Notify that viewer suffered changes + } +} diff --git a/platform/core/src/measurements/measurementHandlers/handleChildMeasurementRemoved.js b/platform/core/src/measurements/measurementHandlers/handleChildMeasurementRemoved.js new file mode 100644 index 00000000000..21ae8b9d465 --- /dev/null +++ b/platform/core/src/measurements/measurementHandlers/handleChildMeasurementRemoved.js @@ -0,0 +1,47 @@ +import cornerstone from 'cornerstone-core'; +import { MeasurementApi } from '../classes'; +import log from '../../log'; + +export default function({ eventData, tool, toolGroupId, toolGroup }) { + log.info('CornerstoneToolsMeasurementRemoved'); + const { measurementData } = eventData; + + const measurementApi = MeasurementApi.Instance; + if (!measurementApi) { + log.warn('Measurement API is not initialized'); + } + + const collection = measurementApi.tools[tool.parentTool]; + + // Stop here if the tool data shall not be persisted (e.g. temp tools) + if (!collection) return; + + const measurementIndex = collection.findIndex( + t => t._id === measurementData._id + ); + const measurement = + measurementIndex > -1 ? collection[measurementIndex] : null; + + // Stop here if the measurement is already gone or never existed + if (!measurement) return; + + if (measurement.childToolsCount === 1) { + // Remove the measurement + collection.splice(measurementIndex, 1); + measurementApi.onMeasurementRemoved(tool.parentTool, measurement); + } else { + // Update the measurement + measurement[tool.attribute] = null; + measurement.childToolsCount = (measurement.childToolsCount || 0) - 1; + measurementApi.updateMeasurement(tool.parentTool, measurement); + } + + // TODO: This is very hacky, but will work for now + cornerstone.getEnabledElements().forEach(enabledElement => { + cornerstone.updateImage(enabledElement.element); + }); + + if (MeasurementApi.isToolIncluded(tool)) { + // TODO: Notify that viewer suffered changes + } +} diff --git a/platform/core/src/measurements/measurementHandlers/handleSingleMeasurementAdded.js b/platform/core/src/measurements/measurementHandlers/handleSingleMeasurementAdded.js new file mode 100644 index 00000000000..55ecc7b5f25 --- /dev/null +++ b/platform/core/src/measurements/measurementHandlers/handleSingleMeasurementAdded.js @@ -0,0 +1,51 @@ +import cornerstone from 'cornerstone-core'; +import { MeasurementApi } from '../classes'; +import log from '../../log'; +import user from '../../user'; +import getImageAttributes from '../lib/getImageAttributes'; +import getLabel from '../lib/getLabel'; + +export default function handleSingleMeasurementAdded({ eventData, tool }) { + const measurementApi = MeasurementApi.Instance; + if (!measurementApi) { + log.warn('Measurement API is not initialized'); + } + + const { measurementData, toolType } = eventData; + + const collection = measurementApi.tools[toolType]; + + // Stop here if the tool data shall not be persisted (e.g. temp tools) + if (!collection) return; + + // Stop here if there's no measurement data or if it was cancelled + if (!measurementData || measurementData.cancelled) return; + + log.info('CornerstoneToolsMeasurementAdded'); + + const imageAttributes = getImageAttributes(eventData.element); + const measurement = Object.assign({}, measurementData, imageAttributes, { + lesionNamingNumber: measurementData.lesionNamingNumber, + userId: user.getUserId(), + toolType, + }); + + const addedMeasurement = measurementApi.addMeasurement(toolType, measurement); + Object.assign(measurementData, addedMeasurement); + + const measurementLabel = getLabel(measurementData); + if (measurementLabel) { + measurementData.labels = [measurementLabel]; + } + + // TODO: This is very hacky, but will work for now + cornerstone.getEnabledElements().forEach(enabledElement => { + cornerstone.updateImage(enabledElement.element); + }); + + // TODO: Notify about the last activated measurement + + if (MeasurementApi.isToolIncluded(tool)) { + // TODO: Notify that viewer suffered changes + } +} diff --git a/platform/core/src/measurements/measurementHandlers/handleSingleMeasurementModified.js b/platform/core/src/measurements/measurementHandlers/handleSingleMeasurementModified.js new file mode 100644 index 00000000000..23c5b08d606 --- /dev/null +++ b/platform/core/src/measurements/measurementHandlers/handleSingleMeasurementModified.js @@ -0,0 +1,34 @@ +import cornerstone from 'cornerstone-core'; +import { MeasurementApi } from '../classes'; +import log from '../../log'; + +export default function({ eventData, tool, toolGroupId, toolGroup }) { + const measurementApi = MeasurementApi.Instance; + if (!measurementApi) { + log.warn('Measurement API is not initialized'); + } + + const { measurementData, toolType } = eventData; + + const collection = measurementApi.tools[toolType]; + + // Stop here if the tool data shall not be persisted (e.g. temp tools) + if (!collection) return; + + log.info('CornerstoneToolsMeasurementModified'); + let measurement = collection.find(t => t._id === measurementData._id); + + // Stop here if the measurement is already deleted + if (!measurement) return; + + measurement = Object.assign(measurement, measurementData); + measurement.viewport = cornerstone.getViewport(eventData.element); + + measurementApi.updateMeasurement(toolType, measurement); + + // TODO: Notify about the last activated measurement + + if (MeasurementApi.isToolIncluded(tool)) { + // TODO: Notify that viewer suffered changes + } +} diff --git a/platform/core/src/measurements/measurementHandlers/handleSingleMeasurementRemoved.js b/platform/core/src/measurements/measurementHandlers/handleSingleMeasurementRemoved.js new file mode 100644 index 00000000000..7faca56f995 --- /dev/null +++ b/platform/core/src/measurements/measurementHandlers/handleSingleMeasurementRemoved.js @@ -0,0 +1,45 @@ +import cornerstone from 'cornerstone-core'; +import { MeasurementApi } from '../classes'; +import log from '../../log'; + +export default function handleSingleMeasurementRemoved({ + eventData, + tool, + toolGroupId, + toolGroup, +}) { + log.info('CornerstoneToolsMeasurementRemoved'); + const { measurementData, toolType } = eventData; + + const measurementApi = MeasurementApi.Instance; + if (!measurementApi) { + log.warn('Measurement API is not initialized'); + } + + const collection = measurementApi.tools[toolType]; + + // Stop here if the tool data shall not be persisted (e.g. temp tools) + if (!collection) return; + + const measurementTypeId = measurementApi.toolsGroupsMap[toolType]; + const measurement = collection.find(t => t._id === measurementData._id); + + // Stop here if the measurement is already gone or never existed + if (!measurement) return; + + // Remove all the measurements with the given type and number + const { lesionNamingNumber, timepointId } = measurement; + measurementApi.deleteMeasurements(toolType, measurementTypeId, { + lesionNamingNumber, + timepointId, + }); + + // TODO: This is very hacky, but will work for now + cornerstone.getEnabledElements().forEach(enabledElement => { + cornerstone.updateImage(enabledElement.element); + }); + + if (MeasurementApi.isToolIncluded(tool)) { + // TODO: Notify that viewer suffered changes + } +} diff --git a/platform/core/src/measurements/measurementHandlers/index.js b/platform/core/src/measurements/measurementHandlers/index.js new file mode 100644 index 00000000000..7f01f690a56 --- /dev/null +++ b/platform/core/src/measurements/measurementHandlers/index.js @@ -0,0 +1,99 @@ +import { MeasurementApi } from '../classes'; +import handleSingleMeasurementAdded from './handleSingleMeasurementAdded'; +import handleChildMeasurementAdded from './handleChildMeasurementAdded'; +import handleSingleMeasurementModified from './handleSingleMeasurementModified'; +import handleChildMeasurementModified from './handleChildMeasurementModified'; +import handleSingleMeasurementRemoved from './handleSingleMeasurementRemoved'; +import handleChildMeasurementRemoved from './handleChildMeasurementRemoved'; + +const getEventData = event => { + const eventData = event.detail; + if (eventData.toolName) { + eventData.toolType = eventData.toolName; + } + + return eventData; +}; + +const MeasurementHandlers = { + handleSingleMeasurementAdded, + handleChildMeasurementAdded, + handleSingleMeasurementModified, + handleChildMeasurementModified, + handleSingleMeasurementRemoved, + handleChildMeasurementRemoved, + + onAdded(event) { + const eventData = getEventData(event); + const { toolType } = eventData; + const { + toolGroupId, + toolGroup, + tool, + } = MeasurementApi.getToolConfiguration(toolType); + const params = { + eventData, + tool, + toolGroupId, + toolGroup, + }; + + if (!tool) return; + + if (tool.parentTool) { + handleChildMeasurementAdded(params); + } else { + handleSingleMeasurementAdded(params); + } + }, + + onModified(event) { + const eventData = getEventData(event); + const { toolType } = eventData; + const { + toolGroupId, + toolGroup, + tool, + } = MeasurementApi.getToolConfiguration(toolType); + const params = { + eventData, + tool, + toolGroupId, + toolGroup, + }; + + if (!tool) return; + + if (tool.parentTool) { + handleChildMeasurementModified(params); + } else { + handleSingleMeasurementModified(params); + } + }, + + onRemoved(event) { + const eventData = getEventData(event); + const { toolType } = eventData; + const { + toolGroupId, + toolGroup, + tool, + } = MeasurementApi.getToolConfiguration(toolType); + const params = { + eventData, + tool, + toolGroupId, + toolGroup, + }; + + if (!tool) return; + + if (tool.parentTool) { + handleChildMeasurementRemoved(params); + } else { + handleSingleMeasurementRemoved(params); + } + }, +}; + +export default MeasurementHandlers; diff --git a/platform/core/src/measurements/toolGroups/allTools.js b/platform/core/src/measurements/toolGroups/allTools.js new file mode 100644 index 00000000000..0aa6a6ab1f4 --- /dev/null +++ b/platform/core/src/measurements/toolGroups/allTools.js @@ -0,0 +1,16 @@ +import * as tools from '../tools'; + +const childTools = []; +Object.keys(tools).forEach(key => childTools.push(tools[key])); + +export const allTools = { + id: 'allTools', + name: 'Measurements', + childTools: childTools, + options: { + caseProgress: { + include: true, + evaluate: true, + }, + }, +}; diff --git a/platform/core/src/measurements/toolGroups/nonTargets.js b/platform/core/src/measurements/toolGroups/nonTargets.js new file mode 100644 index 00000000000..95492443006 --- /dev/null +++ b/platform/core/src/measurements/toolGroups/nonTargets.js @@ -0,0 +1,13 @@ +import { nonTarget } from '../tools'; + +export const nonTargets = { + id: 'nonTargets', + name: 'Non-Targets', + childTools: [nonTarget], + options: { + caseProgress: { + include: true, + evaluate: true, + }, + }, +}; diff --git a/platform/core/src/measurements/toolGroups/targets.js b/platform/core/src/measurements/toolGroups/targets.js new file mode 100644 index 00000000000..29d3bec5cae --- /dev/null +++ b/platform/core/src/measurements/toolGroups/targets.js @@ -0,0 +1,13 @@ +import { bidirectional, targetCR, targetUN, targetNE } from '../tools'; + +export const targets = { + id: 'targets', + name: 'Targets', + childTools: [bidirectional, targetCR, targetUN, targetNE], + options: { + caseProgress: { + include: true, + evaluate: true, + }, + }, +}; diff --git a/platform/core/src/measurements/toolGroups/temp.js b/platform/core/src/measurements/toolGroups/temp.js new file mode 100644 index 00000000000..228486e0a52 --- /dev/null +++ b/platform/core/src/measurements/toolGroups/temp.js @@ -0,0 +1,26 @@ +import { length, ellipticalRoi } from '../tools'; +import cloneDeep from 'lodash.clonedeep'; + +const childTools = cloneDeep([length, ellipticalRoi]); + +// Exclude temp tools from case progress +childTools.forEach(childTool => { + childTool.options = Object.assign({}, childTool.options, { + caseProgress: { + include: false, + evaluate: false, + }, + }); +}); + +export const temp = { + id: 'temp', + name: 'Temporary', + childTools, + options: { + caseProgress: { + include: false, + evaluate: false, + }, + }, +}; diff --git a/platform/core/src/measurements/tools/angle.js b/platform/core/src/measurements/tools/angle.js new file mode 100644 index 00000000000..852cc37e59b --- /dev/null +++ b/platform/core/src/measurements/tools/angle.js @@ -0,0 +1,23 @@ +const displayFunction = data => { + let text = ''; + if (data.rAngle) { + text = data.rAngle.toFixed(2) + String.fromCharCode(parseInt('00B0', 16)); + } + return text; +}; + +export const angle = { + id: 'Angle', + name: 'Angle', + toolGroup: 'allTools', + cornerstoneToolType: 'Angle', + options: { + measurementTable: { + displayFunction, + }, + caseProgress: { + include: true, + evaluate: true, + }, + }, +}; diff --git a/platform/core/src/measurements/tools/arrowAnnotate.js b/platform/core/src/measurements/tools/arrowAnnotate.js new file mode 100644 index 00000000000..a45822addb2 --- /dev/null +++ b/platform/core/src/measurements/tools/arrowAnnotate.js @@ -0,0 +1,19 @@ +const displayFunction = data => { + return data.text || ''; +}; + +export const arrowAnnotate = { + id: 'ArrowAnnotate', + name: 'ArrowAnnotate', + toolGroup: 'allTools', + cornerstoneToolType: 'ArrowAnnotate', + options: { + measurementTable: { + displayFunction, + }, + caseProgress: { + include: true, + evaluate: true, + }, + }, +}; diff --git a/platform/core/src/measurements/tools/bidirectional.js b/platform/core/src/measurements/tools/bidirectional.js new file mode 100644 index 00000000000..e17955070b9 --- /dev/null +++ b/platform/core/src/measurements/tools/bidirectional.js @@ -0,0 +1,24 @@ +const displayFunction = data => { + if (data.shortestDiameter) { + // TODO: Make this check criteria again to see if we should display shortest x longest + return data.longestDiameter + ' x ' + data.shortestDiameter; + } + + return data.longestDiameter; +}; + +export const bidirectional = { + id: 'Bidirectional', + name: 'Target', + toolGroup: 'allTools', + cornerstoneToolType: 'Bidirectional', + options: { + measurementTable: { + displayFunction, + }, + caseProgress: { + include: true, + evaluate: true, + }, + }, +}; diff --git a/platform/core/src/measurements/tools/circleRoi.js b/platform/core/src/measurements/tools/circleRoi.js new file mode 100644 index 00000000000..0f8cef3fe17 --- /dev/null +++ b/platform/core/src/measurements/tools/circleRoi.js @@ -0,0 +1,24 @@ +const displayFunction = data => { + let meanValue = ''; + const { cachedStats } = data; + if (cachedStats && cachedStats.mean) { + meanValue = cachedStats.mean.toFixed(2) + ' HU'; + } + return meanValue; +}; + +export const circleRoi = { + id: 'CircleRoi', + name: 'Circle', + toolGroup: 'allTools', + cornerstoneToolType: 'CircleRoi', + options: { + measurementTable: { + displayFunction, + }, + caseProgress: { + include: true, + evaluate: true, + }, + }, +}; diff --git a/platform/core/src/measurements/tools/ellipticalRoi.js b/platform/core/src/measurements/tools/ellipticalRoi.js new file mode 100644 index 00000000000..f392002d2f5 --- /dev/null +++ b/platform/core/src/measurements/tools/ellipticalRoi.js @@ -0,0 +1,24 @@ +const displayFunction = data => { + let meanValue = ''; + const { cachedStats } = data; + if (cachedStats && cachedStats.mean) { + meanValue = cachedStats.mean.toFixed(2) + ' HU'; + } + return meanValue; +}; + +export const ellipticalRoi = { + id: 'EllipticalRoi', + name: 'Ellipse', + toolGroup: 'allTools', + cornerstoneToolType: 'EllipticalRoi', + options: { + measurementTable: { + displayFunction, + }, + caseProgress: { + include: true, + evaluate: true, + }, + }, +}; diff --git a/platform/core/src/measurements/tools/freehandMouse.js b/platform/core/src/measurements/tools/freehandMouse.js new file mode 100644 index 00000000000..ea26bd6b2e6 --- /dev/null +++ b/platform/core/src/measurements/tools/freehandMouse.js @@ -0,0 +1,23 @@ +const displayFunction = data => { + let meanValue = ''; + if (data.meanStdDev && data.meanStdDev.mean) { + meanValue = data.meanStdDev.mean.toFixed(2) + ' HU'; + } + return meanValue; +}; + +export const freehandMouse = { + id: 'FreehandMouse', + name: 'Freehand', + toolGroup: 'allTools', + cornerstoneToolType: 'FreehandMouse', + options: { + measurementTable: { + displayFunction, + }, + caseProgress: { + include: true, + evaluate: true, + }, + }, +}; diff --git a/platform/core/src/measurements/tools/index.js b/platform/core/src/measurements/tools/index.js new file mode 100644 index 00000000000..16035e2215b --- /dev/null +++ b/platform/core/src/measurements/tools/index.js @@ -0,0 +1,27 @@ +import { arrowAnnotate } from './arrowAnnotate'; +import { bidirectional } from './bidirectional'; +import { ellipticalRoi } from './ellipticalRoi'; +import { circleRoi } from './circleRoi'; +import { freehandMouse } from './freehandMouse'; +import { length } from './length'; +import { nonTarget } from './nonTarget'; +import { rectangleRoi } from './rectangleRoi'; +import { angle } from './angle'; +import { targetCR } from './targetCR'; +import { targetNE } from './targetNE'; +import { targetUN } from './targetUN'; + +export { + arrowAnnotate, + bidirectional, + ellipticalRoi, + circleRoi, + freehandMouse, + length, + nonTarget, + rectangleRoi, + angle, + targetCR, + targetNE, + targetUN, +}; diff --git a/platform/core/src/measurements/tools/length.js b/platform/core/src/measurements/tools/length.js new file mode 100644 index 00000000000..2f8331f5e15 --- /dev/null +++ b/platform/core/src/measurements/tools/length.js @@ -0,0 +1,23 @@ +const displayFunction = data => { + let lengthValue = ''; + if (data.length) { + lengthValue = data.length.toFixed(2) + ' mm'; + } + return lengthValue; +}; + +export const length = { + id: 'Length', + name: 'Length', + toolGroup: 'allTools', + cornerstoneToolType: 'Length', + options: { + measurementTable: { + displayFunction, + }, + caseProgress: { + include: true, + evaluate: true, + }, + }, +}; diff --git a/platform/core/src/measurements/tools/nonTarget.js b/platform/core/src/measurements/tools/nonTarget.js new file mode 100644 index 00000000000..7e0848018c4 --- /dev/null +++ b/platform/core/src/measurements/tools/nonTarget.js @@ -0,0 +1,15 @@ +export const nonTarget = { + id: 'NonTarget', + name: 'Non-Target', + toolGroup: 'allTools', + cornerstoneToolType: 'NonTarget', + options: { + measurementTable: { + displayFunction: data => data.response, + }, + caseProgress: { + include: true, + evaluate: true, + }, + }, +}; diff --git a/platform/core/src/measurements/tools/rectangleRoi.js b/platform/core/src/measurements/tools/rectangleRoi.js new file mode 100644 index 00000000000..6a359380999 --- /dev/null +++ b/platform/core/src/measurements/tools/rectangleRoi.js @@ -0,0 +1,24 @@ +const displayFunction = data => { + let meanValue = ''; + const { cachedStats } = data; + if (cachedStats && cachedStats.mean) { + meanValue = cachedStats.mean.toFixed(2) + ' HU'; + } + return meanValue; +}; + +export const rectangleRoi = { + id: 'RectangleRoi', + name: 'Rectangle', + toolGroup: 'allTools', + cornerstoneToolType: 'RectangleRoi', + options: { + measurementTable: { + displayFunction, + }, + caseProgress: { + include: true, + evaluate: true, + }, + }, +}; diff --git a/platform/core/src/measurements/tools/targetCR.js b/platform/core/src/measurements/tools/targetCR.js new file mode 100644 index 00000000000..fffd29f25a4 --- /dev/null +++ b/platform/core/src/measurements/tools/targetCR.js @@ -0,0 +1,15 @@ +export const targetCR = { + id: 'TargetCR', + name: 'CR Target', + toolGroup: 'allTools', + cornerstoneToolType: 'TargetCR', + options: { + measurementTable: { + displayFunction: data => data.response, + }, + caseProgress: { + include: true, + evaluate: true, + }, + }, +}; diff --git a/platform/core/src/measurements/tools/targetNE.js b/platform/core/src/measurements/tools/targetNE.js new file mode 100644 index 00000000000..361de89d07e --- /dev/null +++ b/platform/core/src/measurements/tools/targetNE.js @@ -0,0 +1,15 @@ +export const targetNE = { + id: 'TargetNE', + name: 'NE Target', + toolGroup: 'allTools', + cornerstoneToolType: 'TargetNE', + options: { + measurementTable: { + displayFunction: data => data.response, + }, + caseProgress: { + include: true, + evaluate: true, + }, + }, +}; diff --git a/platform/core/src/measurements/tools/targetUN.js b/platform/core/src/measurements/tools/targetUN.js new file mode 100644 index 00000000000..3bf8acdc7f2 --- /dev/null +++ b/platform/core/src/measurements/tools/targetUN.js @@ -0,0 +1,15 @@ +export const targetUN = { + id: 'TargetUN', + name: 'UN Target', + toolGroup: 'allTools', + cornerstoneToolType: 'TargetUN', + options: { + measurementTable: { + displayFunction: data => data.response, + }, + caseProgress: { + include: true, + evaluate: true, + }, + }, +}; diff --git a/platform/core/src/object.js b/platform/core/src/object.js new file mode 100644 index 00000000000..030793f52b5 --- /dev/null +++ b/platform/core/src/object.js @@ -0,0 +1,55 @@ +// Transforms a shallow object with keys separated by "." into a nested object +function getNestedObject(shallowObject) { + const nestedObject = {}; + for (let key in shallowObject) { + if (!shallowObject.hasOwnProperty(key)) continue; + const value = shallowObject[key]; + const propertyArray = key.split('.'); + let currentObject = nestedObject; + while (propertyArray.length) { + const currentProperty = propertyArray.shift(); + if (!propertyArray.length) { + currentObject[currentProperty] = value; + } else { + if (!currentObject[currentProperty]) { + currentObject[currentProperty] = {}; + } + + currentObject = currentObject[currentProperty]; + } + } + } + + return nestedObject; +} + +// Transforms a nested object into a shallowObject merging its keys with "." character +function getShallowObject(nestedObject) { + const shallowObject = {}; + const putValues = (baseKey, nestedObject, resultObject) => { + for (let key in nestedObject) { + if (!nestedObject.hasOwnProperty(key)) continue; + let currentKey = baseKey ? `${baseKey}.${key}` : key; + const currentValue = nestedObject[key]; + if (typeof currentValue === 'object') { + if (currentValue instanceof Array) { + currentKey += '[]'; + } + + putValues(currentKey, currentValue, resultObject); + } else { + resultObject[currentKey] = currentValue; + } + } + }; + + putValues('', nestedObject, shallowObject); + return shallowObject; +} + +const object = { + getNestedObject, + getShallowObject, +}; + +export default object; diff --git a/platform/core/src/redux/actions.js b/platform/core/src/redux/actions.js new file mode 100644 index 00000000000..323fefb8eca --- /dev/null +++ b/platform/core/src/redux/actions.js @@ -0,0 +1,114 @@ +/** Action Creators: + * https://redux.js.org/basics/actions#action-creators + */ + +import { + CLEAR_VIEWPORT, + SET_ACTIVE_SPECIFIC_DATA, + SET_SERVERS, + SET_VIEWPORT, + SET_VIEWPORT_ACTIVE, + SET_VIEWPORT_LAYOUT, + SET_VIEWPORT_LAYOUT_AND_DATA, +} from './constants/ActionTypes.js'; + +/** + * VIEWPORT + */ +export const setViewportSpecificData = (viewportIndex, data) => ({ + type: SET_VIEWPORT, + viewportIndex, + data, +}); + +export const setViewportActive = viewportIndex => ({ + type: SET_VIEWPORT_ACTIVE, + viewportIndex, +}); + +export const setLayout = layout => ({ + type: SET_VIEWPORT_LAYOUT, + layout, +}); + +export const clearViewportSpecificData = viewportIndex => ({ + type: CLEAR_VIEWPORT, + viewportIndex, +}); + +export const setActiveViewportSpecificData = data => ({ + type: SET_ACTIVE_SPECIFIC_DATA, + data, +}); + +/** + * NOT-VIEWPORT + */ +export const setStudyLoadingProgress = (progressId, progressData) => ({ + type: 'SET_STUDY_LOADING_PROGRESS', + progressId, + progressData, +}); + +export const clearStudyLoadingProgress = progressId => ({ + type: 'CLEAR_STUDY_LOADING_PROGRESS', + progressId, +}); + +export const setUserPreferences = state => ({ + type: 'SET_USER_PREFERENCES', + state, +}); + +export const setExtensionData = (extension, data) => ({ + type: 'SET_EXTENSION_DATA', + extension, + data, +}); + +export const setTimepoints = state => ({ + type: 'SET_TIMEPOINTS', + state, +}); + +export const setMeasurements = state => ({ + type: 'SET_MEASUREMENTS', + state, +}); + +export const setStudyData = (studyInstanceUid, data) => ({ + type: 'SET_STUDY_DATA', + studyInstanceUid, + data, +}); + +export const setServers = servers => ({ + type: SET_SERVERS, + servers, +}); + +export const setViewportLayoutAndData = (layout, viewportSpecificData) => ({ + type: SET_VIEWPORT_LAYOUT_AND_DATA, + layout, + viewportSpecificData, +}); + +const actions = { + // VIEWPORT + setViewportActive, + setViewportSpecificData, + setViewportLayoutAndData, + setLayout, + clearViewportSpecificData, + setActiveViewportSpecificData, + setStudyLoadingProgress, + clearStudyLoadingProgress, + setUserPreferences, + setExtensionData, + setTimepoints, + setMeasurements, + setStudyData, + setServers, +}; + +export default actions; diff --git a/platform/core/src/redux/actions.test.js b/platform/core/src/redux/actions.test.js new file mode 100644 index 00000000000..2613586bd85 --- /dev/null +++ b/platform/core/src/redux/actions.test.js @@ -0,0 +1,112 @@ +import * as types from './constants/ActionTypes.js'; + +import actions from './actions.js'; + +describe('actions', () => { + test('exports have not changed', () => { + const expectedExports = [ + 'setViewportActive', + 'setViewportSpecificData', + 'setViewportLayoutAndData', + 'setLayout', + 'clearViewportSpecificData', + 'setActiveViewportSpecificData', + 'setStudyLoadingProgress', + 'clearStudyLoadingProgress', + 'setUserPreferences', + 'setExtensionData', + 'setTimepoints', + 'setMeasurements', + 'setServers', + 'setStudyData', + ].sort(); + + const exports = Object.keys(actions).sort(); + + expect(exports).toEqual(expectedExports); + }); + + describe('viewport action creators', () => { + it('should create an action to set the viewport specific data', () => { + const data = { + displaySetInstanceUid: 'ef859a23-4631-93ab-d26b-7940a822c699', + seriesDate: '20151026', + seriesTime: '082611.370000', + seriesInstanceUid: + '1.3.6.1.4.1.25403.345050719074.3824.20170126085406.5', + seriesNumber: 2, + seriesDescription: 'Chest 3x3 Soft', + numImageFrames: 126, + modality: 'CT', + isMultiFrame: false, + instanceNumber: 1, + studyInstanceUid: + '1.3.6.1.4.1.25403.345050719074.3824.20170126085406.1', + sopClassUids: ['1.2.840.10008.5.1.4.1.1.2'], + plugin: 'cornerstone', + viewport: { + zoomScale: null, + rotation: 360, + resetViewport: null, + invert: null, + vflip: null, + hflip: null, + clearTools: null, + scrollUp: null, + scrollDown: null, + scrollFirstImage: null, + scrollLastImage: null, + previousPanel: null, + nextPanel: null, + nextSeries: null, + previousSeries: null, + }, + }; + + const expectedAction = { + type: types.SET_ACTIVE_SPECIFIC_DATA, + data, + }; + + expect(actions.setActiveViewportSpecificData(data)).toEqual( + expectedAction + ); + }); + + it('should create an action to clear clearViewportSpecificData', () => { + const viewportIndex = 1; + const expectedAction = { + type: types.CLEAR_VIEWPORT, + viewportIndex, + }; + expect(actions.clearViewportSpecificData(viewportIndex)).toEqual( + expectedAction + ); + }); + + it('should create an action to set the active viewport', () => { + const viewportIndex = 1; + const expectedAction = { + type: types.SET_VIEWPORT_ACTIVE, + viewportIndex, + }; + expect(actions.setViewportActive(viewportIndex)).toEqual(expectedAction); + }); + + it('should create an action to set the viewport layout', () => { + const layout = { + viewports: [ + { + height: '100%', + width: '100%', + }, + ], + }; + const expectedAction = { + type: types.SET_VIEWPORT_LAYOUT, + layout, + }; + expect(actions.setLayout(layout)).toEqual(expectedAction); + }); + }); +}); diff --git a/platform/core/src/redux/constants/ActionTypes.js b/platform/core/src/redux/constants/ActionTypes.js new file mode 100644 index 00000000000..4a9cdccf4f1 --- /dev/null +++ b/platform/core/src/redux/constants/ActionTypes.js @@ -0,0 +1,22 @@ +/** + * VIEWPORT + */ +export const SET_VIEWPORT = 'VIEWPORT::SET'; +export const SET_VIEWPORT_ACTIVE = 'VIEWPORT::SET_ACTIVE'; +export const SET_VIEWPORT_LAYOUT = 'VIEWPORT::SET_LAYOUT'; +export const SET_VIEWPORT_LAYOUT_AND_DATA = + 'VIEWPORT::SET_VIEWPORT_LAYOUT_AND_DATA'; +export const CLEAR_VIEWPORT = 'VIEWPORT::CLEAR'; +export const SET_SPECIFIC_DATA = 'VIEWPORT::SET_SPECIFIC_DATA'; +export const SET_ACTIVE_SPECIFIC_DATA = 'VIEWPORT::SET_ACTIVE_SPECIFIC_DATA'; + +/** + * SERVERS + */ +export const ADD_SERVER = 'ADD_SERVER'; +export const SET_SERVERS = 'SET_SERVERS'; + +/** + * EXTENSIONS + */ +export const SET_EXTENSION_DATA = 'SET_EXTENSION_DATA'; diff --git a/platform/core/src/redux/index.js b/platform/core/src/redux/index.js new file mode 100644 index 00000000000..26c1988d669 --- /dev/null +++ b/platform/core/src/redux/index.js @@ -0,0 +1,11 @@ +import actions from './actions.js'; +import reducers from './reducers'; +import localStorage from './localStorage.js'; + +const redux = { + reducers, + actions, + localStorage, +}; + +export default redux; diff --git a/platform/core/src/redux/index.test.js b/platform/core/src/redux/index.test.js new file mode 100644 index 00000000000..cd1c82cf27a --- /dev/null +++ b/platform/core/src/redux/index.test.js @@ -0,0 +1,11 @@ +import redux from './index.js'; + +describe('redux exports', () => { + test('have not changed', () => { + const expectedExports = ['actions', 'reducers', 'localStorage'].sort(); + + const exports = Object.keys(redux).sort(); + + expect(exports).toEqual(expectedExports); + }); +}); diff --git a/platform/core/src/redux/localStorage.js b/platform/core/src/redux/localStorage.js new file mode 100644 index 00000000000..89ab0d0b146 --- /dev/null +++ b/platform/core/src/redux/localStorage.js @@ -0,0 +1,26 @@ +export const loadState = () => { + try { + const serializedState = window.localStorage.getItem('state'); + if (!serializedState) { + return undefined; + } + + return JSON.parse(serializedState); + } catch (e) { + return undefined; + } +}; + +export const saveState = state => { + try { + const serializedState = JSON.stringify(state); + localStorage.setItem('state', serializedState); + } catch (e) {} +}; + +const localStorage = { + saveState, + loadState, +}; + +export default localStorage; diff --git a/platform/core/src/redux/reducers/extensions.js b/platform/core/src/redux/reducers/extensions.js new file mode 100644 index 00000000000..10b88b91361 --- /dev/null +++ b/platform/core/src/redux/reducers/extensions.js @@ -0,0 +1,25 @@ +export const defaultState = {}; + +const extensions = (state = defaultState, action) => { + switch (action.type) { + case 'SET_EXTENSION_DATA': + const extensionName = action.extension; + const currentData = state[extensionName] || {}; + + const incomingData = action.data; + + const extension = { + [extensionName]: { + ...currentData, + ...incomingData, + }, + }; + + return { ...state, ...extension }; + + default: + return state; + } +}; + +export default extensions; diff --git a/platform/core/src/redux/reducers/extensions.test.js b/platform/core/src/redux/reducers/extensions.test.js new file mode 100644 index 00000000000..ff279795274 --- /dev/null +++ b/platform/core/src/redux/reducers/extensions.test.js @@ -0,0 +1,50 @@ +import { Reducer } from 'redux-testkit'; + +import reducer, { defaultState } from './extensions'; +import * as actionTypes from './../constants/ActionTypes.js'; + +describe('viewports reducer', () => { + it('should return the initial state', () => { + expect(reducer(undefined, {})).toEqual(defaultState); + }); + + it('should set new data on first SET_EXTENSION_DATA', () => { + const initialState = defaultState; + + const action = { + type: actionTypes.SET_EXTENSION_DATA, + extension: 'uber plugin', + data: { greeting: 'Hello!' }, + }; + + const expectedState = { + 'uber plugin': { greeting: 'Hello!' }, + }; + + Reducer(reducer) + .withState(initialState) + .expect(action) + .toReturnState(expectedState); + }); + + it('should shallow-merge extension data, keeping unmodified fields, on SET_EXTENSION_DATA', () => { + const initialState = { + 'uber plugin': { greeting: 'Hello!', "Can't touch this": 42 }, + }; + + const action = { + type: actionTypes.SET_EXTENSION_DATA, + extension: 'uber plugin', + data: { greeting: 'Aloha!' }, + }; + + const expectedState = { + 'uber plugin': { greeting: 'Aloha!', "Can't touch this": 42 }, + }; + + Reducer(reducer) + .withState(initialState) + .expect(action) + .toReturnState(expectedState); + }); +}); diff --git a/platform/core/src/redux/reducers/index.js b/platform/core/src/redux/reducers/index.js new file mode 100644 index 00000000000..44bf26755af --- /dev/null +++ b/platform/core/src/redux/reducers/index.js @@ -0,0 +1,19 @@ +import extensions from './extensions'; +import loading from './loading'; +import preferences from './preferences'; +import servers from './servers'; +import studies from './studies'; +import timepointManager from './timepointManager'; +import viewports from './viewports'; + +const reducers = { + extensions, + loading, + preferences, + servers, + studies, + timepointManager, + viewports, +}; + +export default reducers; diff --git a/platform/core/src/redux/reducers/loading.js b/platform/core/src/redux/reducers/loading.js new file mode 100644 index 00000000000..b82a57d273c --- /dev/null +++ b/platform/core/src/redux/reducers/loading.js @@ -0,0 +1,33 @@ +import cloneDeep from 'lodash.clonedeep'; + +const defaultState = { + progress: {}, + lastUpdated: null, +}; + +const loading = (state = defaultState, action) => { + let progress; + let lastUpdated; + switch (action.type) { + case 'SET_STUDY_LOADING_PROGRESS': + progress = cloneDeep(state).progress; + progress[action.progressId] = action.progressData; + + // This is a workaround so we can easily identify changes + // to the progress object without doing deep comparison. + lastUpdated = new Date().getTime(); + + return Object.assign({}, state, { progress, lastUpdated }); + case 'CLEAR_STUDY_LOADING_PROGRESS': + progress = cloneDeep(state).progress; + delete progress[action.progressId]; + + lastUpdated = new Date().getTime(); + + return Object.assign({}, state, { progress, lastUpdated }); + default: + return state; + } +}; + +export default loading; diff --git a/platform/core/src/redux/reducers/preferences.js b/platform/core/src/redux/reducers/preferences.js new file mode 100644 index 00000000000..2c9ccdf76f0 --- /dev/null +++ b/platform/core/src/redux/reducers/preferences.js @@ -0,0 +1,31 @@ +import cloneDeep from 'lodash.clonedeep'; + +const defaultState = { + // Top level key + viewer: { + // First tab + hotKeysData: { + // hotkeyName, label, keys, column + // zoom: { label: 'Zoom', command: 'Z', column: 0 }, + }, + // Second tab + windowLevelData: { + // order, description, window (int), level (int) + // 0: { description: 'Soft tissue', window: '', level: '' }, + }, + }, +}; + +const preferences = (state, action) => { + switch (action.type) { + case 'SET_USER_PREFERENCES': { + const newState = action.state ? action.state : cloneDeep(defaultState); + + return Object.assign({}, state, newState); + } + default: + return cloneDeep(state) || cloneDeep(defaultState); + } +}; + +export default preferences; diff --git a/platform/core/src/redux/reducers/servers.js b/platform/core/src/redux/reducers/servers.js new file mode 100644 index 00000000000..b834f4fb08f --- /dev/null +++ b/platform/core/src/redux/reducers/servers.js @@ -0,0 +1,22 @@ +import uniqBy from 'lodash/uniqBy'; + +export const defaultState = { + servers: [], +}; + +const servers = (state = defaultState, action) => { + switch (action.type) { + case 'ADD_SERVER': + let servers = uniqBy([...state.servers, action.server], 'id'); + servers.forEach(s => (s.active = true)); + return { ...state, servers }; + + case 'SET_SERVERS': + return { ...state, servers: action.servers }; + + default: + return state; + } +}; + +export default servers; diff --git a/platform/core/src/redux/reducers/servers.test.js b/platform/core/src/redux/reducers/servers.test.js new file mode 100644 index 00000000000..cbd5155ed6c --- /dev/null +++ b/platform/core/src/redux/reducers/servers.test.js @@ -0,0 +1,89 @@ +import { Reducer } from 'redux-testkit'; + +import reducer, { defaultState } from './servers'; +import * as types from './../constants/ActionTypes.js'; + +describe('viewports reducer', () => { + it('should return the initial state', () => { + expect(reducer(undefined, {})).toEqual(defaultState); + }); + + it('should result in one server when there were no servers before on ADD_SERVER', () => { + const initialState = defaultState; + + const action = { type: types.ADD_SERVER, server: { id: 'some-server-id' } }; + + const expectedState = { servers: [action.server] }; + + Reducer(reducer) + .withState(initialState) + .expect(action) + .toReturnState(expectedState); + }); + + it('should add to servers list on ADD_SERVER', () => { + const initialState = { + servers: [ + { id: 'one', active: true }, + { id: 'two', active: true }, + { id: 'three', active: true }, + { id: 'four', active: true }, + ], + }; + + const action = { + type: types.ADD_SERVER, + server: { id: 'five', active: true }, + }; + + const expectedState = { + servers: [...initialState.servers, action.server], + }; + + Reducer(reducer) + .withState(initialState) + .expect(action) + .toReturnState(expectedState); + }); + + it('should not add duplicated servers on ADD_SERVER', () => { + const initialState = { + servers: [ + { id: 'one', active: true }, + { id: 'two', active: true }, + { id: 'three', active: true }, + { id: 'four', active: true }, + ], + }; + + const action = { + type: types.ADD_SERVER, + server: { id: 'two', active: true }, + }; + + Reducer(reducer) + .withState(initialState) + .expect(action) + .toReturnState(initialState); + }); + + it('should replace servers on SET_SERVERS', () => { + const initialState = { + servers: [{ id: 'one' }, { id: 'two' }, { id: 'three' }, { id: 'four' }], + }; + + const action = { + type: types.SET_SERVERS, + servers: [{ id: 'un' }, { id: 'deux' }, { id: 'trois' }], + }; + + const expectedState = { + servers: action.servers, + }; + + Reducer(reducer) + .withState(initialState) + .expect(action) + .toReturnState(expectedState); + }); +}); diff --git a/platform/core/src/redux/reducers/studies.js b/platform/core/src/redux/reducers/studies.js new file mode 100644 index 00000000000..3bd61aef259 --- /dev/null +++ b/platform/core/src/redux/reducers/studies.js @@ -0,0 +1,19 @@ +import cloneDeep from 'lodash.clonedeep'; + +const defaultState = { + studyData: {}, +}; + +const servers = (state = defaultState, action) => { + switch (action.type) { + case 'SET_STUDY_DATA': + const updatedStudyData = cloneDeep(state).studyData; + updatedStudyData[action.studyInstanceUid] = action.data; + + return Object.assign({}, state, { studyData: updatedStudyData }); + default: + return state; + } +}; + +export default servers; diff --git a/platform/core/src/redux/reducers/timepointManager.js b/platform/core/src/redux/reducers/timepointManager.js new file mode 100644 index 00000000000..98f03e8c4f7 --- /dev/null +++ b/platform/core/src/redux/reducers/timepointManager.js @@ -0,0 +1,17 @@ +const defaultState = { + timepoints: [], + measurements: [], +}; + +const timepointManager = (state = defaultState, action) => { + switch (action.type) { + case 'SET_TIMEPOINTS': + return Object.assign({}, state, { timepoints: action.state }); + case 'SET_MEASUREMENTS': + return Object.assign({}, state, { measurements: action.state }); + default: + return state; + } +}; + +export default timepointManager; diff --git a/platform/core/src/redux/reducers/viewports.js b/platform/core/src/redux/reducers/viewports.js new file mode 100644 index 00000000000..be0cc2313c7 --- /dev/null +++ b/platform/core/src/redux/reducers/viewports.js @@ -0,0 +1,97 @@ +import { + CLEAR_VIEWPORT, + SET_ACTIVE_SPECIFIC_DATA, + SET_SPECIFIC_DATA, + SET_VIEWPORT, + SET_VIEWPORT_ACTIVE, + SET_VIEWPORT_LAYOUT, + SET_VIEWPORT_LAYOUT_AND_DATA, +} from './../constants/ActionTypes.js'; + +import cloneDeep from 'lodash.clonedeep'; +import merge from 'lodash.merge'; + +const defaultState = { + activeViewportIndex: 0, + layout: { + viewports: [ + { + // plugin: 'cornerstone', + height: '100%', + width: '100%', + }, + ], + }, + viewportSpecificData: {}, +}; + +/** + * @param {Object} [state=defaultState] + * @param {Object} action + * @param {string} [action.type] + * @param {number} [action.viewportIndex] + * @param {Object} [action.layout] + * @param {Object} [action.viewportSpecificData] + */ +const viewports = (state = defaultState, action) => { + let currentData; + let viewportSpecificData; + let useActiveViewport = false; + switch (action.type) { + case SET_VIEWPORT_LAYOUT_AND_DATA: + return Object.assign({}, state, { + viewportSpecificData: action.viewportSpecificData, + layout: action.layout, + }); + case SET_VIEWPORT_ACTIVE: + return Object.assign({}, state, { + activeViewportIndex: action.viewportIndex, + }); + case SET_VIEWPORT_LAYOUT: + return Object.assign({}, state, { layout: action.layout }); + case SET_VIEWPORT: { + const layout = cloneDeep(state.layout); + const hasPlugin = action.data && action.data.plugin; + + viewportSpecificData = cloneDeep(state.viewportSpecificData); + viewportSpecificData[action.viewportIndex] = merge( + {}, + viewportSpecificData[action.viewportIndex], + action.data + ); + + if (hasPlugin) { + layout.viewports[action.viewportIndex].plugin = action.data.plugin; + } + + return Object.assign({}, state, { layout, viewportSpecificData }); + } + case SET_ACTIVE_SPECIFIC_DATA: + useActiveViewport = true; + // Allow fall-through + // eslint-disable-next-line + case SET_SPECIFIC_DATA: { + const viewportIndex = useActiveViewport + ? state.activeViewportIndex + : action.viewportIndex; + currentData = cloneDeep(state.viewportSpecificData[viewportIndex]) || {}; + viewportSpecificData = cloneDeep(state.viewportSpecificData); + viewportSpecificData[viewportIndex] = merge({}, currentData, action.data); + + return Object.assign({}, state, { viewportSpecificData }); + } + case CLEAR_VIEWPORT: + viewportSpecificData = cloneDeep(state.viewportSpecificData); + if (action.viewportIndex) { + viewportSpecificData[action.viewportIndex] = {}; + return Object.assign({}, state, { viewportSpecificData }); + } else { + return defaultState; + } + + default: + return state; + } +}; + +export default viewports; diff --git a/platform/core/src/redux/reducers/viewports.test.js b/platform/core/src/redux/reducers/viewports.test.js new file mode 100644 index 00000000000..fd949e20e08 --- /dev/null +++ b/platform/core/src/redux/reducers/viewports.test.js @@ -0,0 +1,101 @@ +// https://medium.com/@netxm/testing-redux-reducers-with-jest-6653abbfe3e1 +import reducer from './viewports.js'; +import * as types from './../constants/ActionTypes.js'; + +describe('viewports reducer', () => { + it('should return the initial state', () => { + expect(reducer(undefined, {})).toEqual({ + activeViewportIndex: 0, + layout: { + viewports: [ + { + height: '100%', + width: '100%', + }, + ], + }, + viewportSpecificData: {}, + }); + }); + + it('should handle SET_VIEWPORT_ACTIVE', () => { + const setViewportActiveAction = { + type: types.SET_VIEWPORT_ACTIVE, + viewportIndex: 100, + }; + + const updatedState = reducer({}, setViewportActiveAction); + + expect(updatedState.activeViewportIndex).toEqual( + setViewportActiveAction.viewportIndex + ); + }); + + it('should handle SET_VIEWPORT_LAYOUT', () => { + const setViewportLayoutAction = { + type: types.SET_VIEWPORT_LAYOUT, + layout: { + viewports: [ + { + height: '100%', + width: '50%', + }, + { + height: '100%', + width: '50%', + }, + ], + }, + }; + + const updatedState = reducer({}, setViewportLayoutAction); + + expect(updatedState.layout).toEqual(setViewportLayoutAction.layout); + }); + + // If there were previous keys, this would have + // "merge" behavior, not a clear & set + // May be worth another test? + it('should handle SET_VIEWPORT', () => { + const viewportToSet = 0; + const setViewportAction = { + type: types.SET_VIEWPORT, + viewportIndex: viewportToSet, + data: { + hello: 'this is that data for the viewport', + world: 'that will be set for the viewportIndex', + }, + }; + + const updatedState = reducer(undefined, setViewportAction); + const updatedViewport = updatedState.viewportSpecificData[viewportToSet]; + + expect(updatedViewport).toEqual(setViewportAction.data); + }); + + it('should handle CLEAR_VIEWPORT', () => { + const existingViewportData = { + viewportSpecificData: { + 0: { + viewportProperty: 'hello world', + }, + 1: { + viewportProperty: 'fizzbuzz', + }, + }, + }; + const clearViewportAction = { + type: types.CLEAR_VIEWPORT, + viewportIndex: 1, + }; + + const updatedState = reducer(existingViewportData, clearViewportAction); + const clearedViewport = + updatedState.viewportSpecificData[clearViewportAction.viewportIndex]; + const originalOtherViewport = existingViewportData.viewportSpecificData[0]; + const updatedOtherViewport = updatedState.viewportSpecificData[0]; + + expect(clearedViewport).toEqual({}); + expect(updatedOtherViewport).toEqual(originalOtherViewport); + }); +}); diff --git a/platform/core/src/schema.js b/platform/core/src/schema.js new file mode 100644 index 00000000000..74544e6d0c9 --- /dev/null +++ b/platform/core/src/schema.js @@ -0,0 +1,34 @@ +//import SimpleSchema from 'simpl-schema' + +/* + Extend the available options on schema definitions: + + * valuesLabels: Used in conjunction with allowedValues to define the text + label for each value (used on forms) + + * textOptional: Used to allow empty strings + + */ +/*SimpleSchema.extendOptions({ + valuesLabels: Match.Optional([String]), + textOptional: Match.Optional(Boolean) +}); + +// Add default required validation for empty strings which can be bypassed +// using textOptional=true definition +SimpleSchema.addValidator(function() { + if ( + this.definition.optional !== true && + this.definition.textOptional !== true && + this.value === '' + ) { + return 'required'; + } +});*/ + +// Including [label] for some messages +/*SimpleSchema.messages({ + maxCount: '[label] can not have more than [maxCount] values', + minCount: '[label] must have at least [minCount] values', + notAllowed: '[label] has an invalid value: "[value]"' +});*/ diff --git a/platform/core/src/schema/servers.js b/platform/core/src/schema/servers.js new file mode 100644 index 00000000000..08b68904eb8 --- /dev/null +++ b/platform/core/src/schema/servers.js @@ -0,0 +1,320 @@ +/*import SimpleSchema from 'simpl-schema'; + +const serverNameDefinitions = { + type: String, + label: 'Server Name', + max: 100 +}; + +const serverTypeDefinitions = { + type: String, + label: 'Server Type', + allowedValues: ['dicomWeb', 'dimse'], + valuesLabels: ['DICOM Web', 'DIMSE'], + optional: true +}; + +const wadoUriRootDefinitions = { + type: String, + label: 'WADO URI root', + max: 1000 +}; + +const availableMouseButtonTools = ['wwwc', 'zoom', 'pan', 'stackScroll']; + +export const DICOMWebRequestOptions = new SimpleSchema({ + auth: { + type: String, + label: 'Authentication', + defaultValue: 'orthanc:orthanc', + optional: true + }, + requestFromBrowser: { + type: Boolean, + label: 'Make DICOMWeb requests from the Browser', + defaultValue: false, + optional: true + }, + logRequests: { + type: Boolean, + defaultValue: true, + label: 'Requests' + }, + logResponses: { + type: Boolean, + defaultValue: false, + label: 'Responses' + }, + logTiming: { + type: Boolean, + defaultValue: true, + label: 'Timing' + } +}); + +export const DICOMWebServer = new SimpleSchema({ + name: serverNameDefinitions, + type: serverTypeDefinitions, + wadoUriRoot: wadoUriRootDefinitions, + wadoRoot: { + type: String, + label: 'WADO root', + max: 1000 + }, + imageRendering: { + type: String, + label: 'Image rendering', + allowedValues: ['wadouri', 'wadors'], + valuesLabels: ['WADO URI', 'WADO RS'], + defaultValue: 'wadouri' + }, + thumbnailRendering: { + type: String, + label: 'Thumbnail rendering', + allowedValues: ['wadouri', 'wadors'], + valuesLabels: ['WADO URI', 'WADO RS'], + defaultValue: 'wadouri' + }, + qidoRoot: { + type: String, + label: 'QIDO root', + max: 1000 + }, + qidoSupportsIncludeField: { + type: Boolean, + label: 'QIDO supports "includefield" query key', + defaultValue: false + }, + requestOptions: { + type: DICOMWebRequestOptions, + label: 'Request Options' + } +}); + +export const DIMSEPeer = new SimpleSchema({ + aeTitle: { + type: String, + label: 'AE Title' + }, + hostAE: { + type: String, + label: 'AE Host', + optional: true + }, + host: { + type: String, + label: 'Host Domain/IP', + regEx: SimpleSchema.RegEx.WeakDomain + }, + port: { + type: Number, + label: 'Port', + min: 1, + defaultValue: 11112, + max: 65535 + }, + default: { + type: Boolean, + label: 'Default', + defaultValue: false + }, + server: { + type: Boolean, + label: 'Server', + defaultValue: false + }, + supportsInstanceRetrievalByStudyUid: { + type: Boolean, + label: 'Supports instance retrieval by StudyUid', + defaultValue: true + } +}); + +export const DIMSEServer = new SimpleSchema({ + name: serverNameDefinitions, + type: serverTypeDefinitions, + wadoUriRoot: wadoUriRootDefinitions, + requestOptions: { + type: DICOMWebRequestOptions, + label: 'Request Options' + }, + peers: { + type: [DIMSEPeer], + label: 'Peer List', + minCount: 1 + } +}); + +export const UISettings = new SimpleSchema({ + studyListFunctionsEnabled: { + type: Boolean, + label: 'Study List Functions Enabled?', + defaultValue: true + }, + leftSidebarOpen: { + type: Boolean, + label: 'Left sidebar open by default?', + defaultValue: false + }, + leftSidebarDragAndDrop: { + type: Boolean, + label: + 'Left sidebar allows thumbnail drag and drop. If false, images will be loaded on single click.', + defaultValue: true + }, + displaySetNavigationLoopOverSeries: { + type: Boolean, + label: + 'The UP/DOWN display set navigation buttons will start over when reach the last display set in viewport?', + defaultValue: true + }, + displaySetNavigationMultipleViewports: { + type: Boolean, + label: + 'The UP/DOWN display set navigation buttons will iterate over all the viewports at once?', + defaultValue: false + }, + displayEchoUltrasoundWorkflow: { + type: Boolean, + label: 'Enable cine dialog enhancements for multiframe images.', + defaultValue: false + }, + autoPositionMeasurementsTextCallOuts: { + type: String, + label: 'Auto position text call-outs for measurements when creating them.', + defaultValue: 'TRBL' + }, + studyListDateFilterNumDays: { + type: Number, + label: 'Number of days to be used on Study List date filter', + min: 1 + }, + showStackLoadingProgressBar: { + type: Boolean, + label: + 'Show a progress bar closest to the thumbnail showing how much the stack has loaded', + defaultValue: true + }, + cornerstoneRenderer: { + type: String, + label: 'Cornerstone default image renderer', + defaultValue: 'webgl' + }, + sortSeriesByIncomingOrder: { + type: Boolean, + label: + "Define if the series' images shall be sorted by incoming order. Sort by Instance Number by default.", + defaultValue: false + }, + useMiddleSeriesInstanceAsThumbnail: { + type: Boolean, + label: + 'Define if the middle instance of a series will be used as thumbnail. If not, the first instance will be used.', + defaultValue: true + } +}); + +export const PrefetchSchema = new SimpleSchema({ + order: { + type: String, + label: 'Prefetch Order', + allowedValues: ['topdown', 'downward', 'closest'], + optional: false + }, + displaySetCount: { + type: Number, + label: 'Display Set Count', + min: 1, + defaultValue: 1 + } +}); + +export const MouseButtonToolSchema = new SimpleSchema({ + left: { + type: String, + label: 'Left Mouse Button', + allowedValues: availableMouseButtonTools, + optional: true + }, + right: { + type: String, + label: 'Right Mouse Button', + allowedValues: availableMouseButtonTools, + optional: true + }, + middle: { + type: String, + label: 'Middle Mouse Button', + allowedValues: availableMouseButtonTools, + optional: true + } +}); + +export const PublicServerConfig = new SimpleSchema({ + verifyEmail: { + type: Boolean, + label: 'Verify Email', + defaultValue: false + }, + demoUserEnabled: { + type: Boolean, + label: 'Creates demo user on startup and show TestDrive button', + defaultValue: true + }, + userAuthenticationRoutesEnabled: { + type: Boolean, + label: 'Enables routing to /login page.', + defaultValue: false + }, + ui: { + type: UISettings, + label: 'UI Settings' + }, + prefetch: { + type: PrefetchSchema, + label: 'Prefetch settings' + }, + defaultMouseButtonTools: { + type: MouseButtonToolSchema, + label: 'Default Mouse Button Tools' + } +}); + +export const Servers = new SimpleSchema({ + dicomWeb: { + type: [DICOMWebServer], + label: 'DICOMWeb Servers', + optional: true + }, + dimse: { + type: [DIMSEServer], + label: 'DIMSE Servers', + optional: true + } +}); + +export const ServerConfiguration = new SimpleSchema({ + servers: { + type: Servers, + label: 'Servers' + }, + defaultServiceType: { + type: String, + label: 'Default Service Type', + defaultValue: 'dicomWeb' + }, + dropCollections: { + type: Boolean, + label: 'Drop database collections', + defaultValue: false + }, + public: { + type: PublicServerConfig, + label: 'Public Server Configuration' + }, + origin: { + type: String, + label: 'Origin', + optional: true + } +});*/ diff --git a/platform/core/src/string.js b/platform/core/src/string.js new file mode 100644 index 00000000000..117e16d92bc --- /dev/null +++ b/platform/core/src/string.js @@ -0,0 +1,67 @@ +// TODO: This is duplicated in TypeSafeCollection +function isObject(subject) { + return ( + subject instanceof Object || + (typeof subject === 'object' && subject !== null) + ); +} + +// TODO: This is duplicated in TypeSafeCollection +function isString(subject) { + return typeof subject === 'string'; +} + +// Search for some string inside any object or array +function search(object, query, property = null, result = []) { + // Create the search pattern + const pattern = new RegExp(query.trim(), 'i'); + + Object.keys(object).forEach(key => { + const item = object[key]; + + // Stop here if item is empty + if (!item) { + return; + } + + // Get the value to be compared + const value = isString(property) ? item[property] : item; + + // Check if the value match the pattern + if (isString(value) && pattern.test(value)) { + // Add the current item to the result + result.push(item); + } + + if (isObject(item)) { + // Search recursively the item if the current item is an object + search(item, query, property, result); + } + }); + + // Return the found items + return result; +} + +// Encode any string into a safe format for HTML id attribute +function encodeId(input) { + const string = input && input.toString ? input.toString() : input; + + // Return an underscore if the given string is empty or if it's not a string + if (string === '' || typeof string !== 'string') { + return '_'; + } + + // Create a converter to replace non accepted chars + const converter = match => '_' + match[0].charCodeAt(0).toString(16) + '_'; + + // Encode the given string and return it + return string.replace(/[^a-zA-Z0-9-]/g, converter); +} + +const string = { + search, + encodeId, +}; + +export default string; diff --git a/platform/core/src/studies/getStudyBoxData.js b/platform/core/src/studies/getStudyBoxData.js new file mode 100644 index 00000000000..a67b047ad3a --- /dev/null +++ b/platform/core/src/studies/getStudyBoxData.js @@ -0,0 +1,16 @@ +/** + * Overridable namespace to allow getting study boxes data externally. + * + * The function must handle the first parameter as a studyInformation object containing at least the + * studyInstanceUid attribute. + * + * Shall return a promise that will be resolved with an object containing those attributes: + * - studyInstanceUid {String}: copy of studyInformation.studyInstanceUid + * - modalities {String}: 2 uppercase letters for each modality split by any non-alphabetical char(s) + * - studyDate {String}: date formatted as YYYYMMDD + * - studyDescription {String}: study description string + */ +// TODO: What is this for? +const getStudyBoxData = false; + +export default getStudyBoxData; diff --git a/platform/core/src/studies/index.js b/platform/core/src/studies/index.js new file mode 100644 index 00000000000..86839da726d --- /dev/null +++ b/platform/core/src/studies/index.js @@ -0,0 +1,26 @@ +import { QIDO, WADO } from './services/'; +import { + deleteStudyMetadataPromise, + retrieveStudyMetadata, +} from './retrieveStudyMetadata.js'; + +import getStudyBoxData from './getStudyBoxData'; +import retrieveStudiesMetadata from './retrieveStudiesMetadata.js'; +import searchStudies from './searchStudies'; +import sortStudy from './sortStudy'; + +const studies = { + services: { + QIDO, + WADO, + }, + loadingDict: {}, + retrieveStudyMetadata, + deleteStudyMetadataPromise, + retrieveStudiesMetadata, + getStudyBoxData, + searchStudies, + sortStudy, +}; + +export default studies; diff --git a/platform/core/src/studies/retrieveStudiesMetadata.js b/platform/core/src/studies/retrieveStudiesMetadata.js new file mode 100644 index 00000000000..2e27ac0440c --- /dev/null +++ b/platform/core/src/studies/retrieveStudiesMetadata.js @@ -0,0 +1,41 @@ +import log from '../log.js'; +import { retrieveStudyMetadata } from './retrieveStudyMetadata'; + +/** + * Retrieves metaData for multiple studies at once. + * + * This function calls retrieveStudyMetadata several times, asynchronously, + * and waits for all of the results to be returned. + * + * @param studyInstanceUids The UIDs of the Studies to be retrieved + * @return Promise + */ +export default function retrieveStudiesMetadata( + server, + studyInstanceUids, + seriesInstanceUids +) { + // Create an empty array to store the Promises for each metaData retrieval call + const promises = []; + + // Loop through the array of studyInstanceUids + studyInstanceUids.forEach(function(studyInstanceUid) { + // Send the call and resolve or reject the related promise based on its outcome + const promise = retrieveStudyMetadata( + server, + studyInstanceUid, + seriesInstanceUids + ); + + // Add the current promise to the array of promises + promises.push(promise); + }); + + // When all of the promises are complete, this callback runs + const promise = Promise.all(promises); + + // Warn the error on console if some retrieval failed + promise.catch(error => log.warn(error)); + + return promise; +} diff --git a/platform/core/src/studies/retrieveStudyMetadata.js b/platform/core/src/studies/retrieveStudyMetadata.js new file mode 100644 index 00000000000..8c25f9d934c --- /dev/null +++ b/platform/core/src/studies/retrieveStudyMetadata.js @@ -0,0 +1,57 @@ +import RetrieveMetadata from './services/wado/retrieveMetadata.js'; + +const module = 'RetrieveStudyMetadata'; +// Cache for promises. Prevents unnecessary subsequent calls to the server +const StudyMetaDataPromises = new Map(); + +/** + * Retrieves study metadata + * + * @param {Object} server + * @param {string} studyInstanceUid The UID of the Study to be retrieved + * @returns {Promise} that will be resolved with the metadata or rejected with the error + */ +export function retrieveStudyMetadata(server, studyInstanceUid) { + // @TODO: Whenever a study metadata request has failed, its related promise will be rejected once and for all + // and further requests for that metadata will always fail. On failure, we probably need to remove the + // corresponding promise from the "StudyMetaDataPromises" map... + + if (!server) { + throw new Error(`${module}: Required 'server' parameter not provided.`); + } + if (!studyInstanceUid) { + throw new Error( + `${module}: Required 'studyInstanceUid' parameter not provided.` + ); + } + + // Already waiting on result? Return cached promise + if (StudyMetaDataPromises.has(studyInstanceUid)) { + return StudyMetaDataPromises.get(studyInstanceUid); + } + + // Create a promise to handle the data retrieval + const promise = new Promise((resolve, reject) => { + RetrieveMetadata(server, studyInstanceUid).then(function(data) { + resolve(data); + }, reject); + }); + + // Store the promise in cache + StudyMetaDataPromises.set(studyInstanceUid, promise); + + return promise; +} + +/** + * Delete the cached study metadata retrieval promise to ensure that the browser will + * re-retrieve the study metadata when it is next requested + * + * @param {String} studyInstanceUid The UID of the Study to be removed from cache + * + */ +export function deleteStudyMetadataPromise(studyInstanceUid) { + if (StudyMetaDataPromises.has(studyInstanceUid)) { + StudyMetaDataPromises.delete(studyInstanceUid); + } +} diff --git a/platform/core/src/studies/retrieveStudyMetadata.test.js b/platform/core/src/studies/retrieveStudyMetadata.test.js new file mode 100644 index 00000000000..4c271858773 --- /dev/null +++ b/platform/core/src/studies/retrieveStudyMetadata.test.js @@ -0,0 +1,35 @@ +import { retrieveStudyMetadata } from './retrieveStudyMetadata.js'; + +const fakeDicomWebServer = {}; + +// Testing Promises: https://jestjs.io/docs/en/asynchronous#promises +describe('retrieveStudyMetadata.js', () => { + it('throws an exception if no server parameter is provided', () => { + const callWithNoServer = () => { + retrieveStudyMetadata(null, 'fake-study-instance-uid'); + }; + + expect(callWithNoServer).toThrow(Error); + }); + + it('throws an exception if no studyInstanceUid parameter is provided', () => { + const callWithNoStudyInstanceUid = () => { + retrieveStudyMetadata(fakeDicomWebServer, null); + }; + + expect(callWithNoStudyInstanceUid).toThrow(Error); + }); + + it('caches and returns the same promise for identical studyInstanceUIDs', () => { + const firstPromise = retrieveStudyMetadata( + fakeDicomWebServer, + 'fake-study-instance-uid' + ); + const secondPromise = retrieveStudyMetadata( + fakeDicomWebServer, + 'fake-study-instance-uid' + ); + + expect(firstPromise).toBe(secondPromise); + }); +}); diff --git a/platform/core/src/studies/searchStudies.js b/platform/core/src/studies/searchStudies.js new file mode 100644 index 00000000000..e2169ded8fc --- /dev/null +++ b/platform/core/src/studies/searchStudies.js @@ -0,0 +1,26 @@ +import Studies from './services/qido/studies'; + +const studySearchPromises = new Map(); + +/** + * Search for studies information by the given filter + * + * @param {Object} filter Filter that will be used on search + * @returns {Promise} resolved with an array of studies information or rejected with an error + */ +export default function searchStudies(server, filter) { + const promiseKeyObj = { + qidoRoot: server.qidoRoot, + filter, + }; + const promiseKey = JSON.stringify(promiseKeyObj); + if (studySearchPromises.has(promiseKey)) { + return studySearchPromises.get(promiseKey); + } else { + const promise = Studies(server, filter); + + studySearchPromises.set(promiseKey, promise); + + return promise; + } +} diff --git a/platform/core/src/studies/services/index.js b/platform/core/src/studies/services/index.js new file mode 100644 index 00000000000..c059fefc75a --- /dev/null +++ b/platform/core/src/studies/services/index.js @@ -0,0 +1,15 @@ +// DICOMWeb instance, study, and metadata retrieval +import Instances from './qido/instances.js'; +import Studies from './qido/studies.js'; +import RetrieveMetadata from './wado/retrieveMetadata.js'; + +const WADO = { + RetrieveMetadata, +}; + +const QIDO = { + Studies, + Instances, +}; + +export { QIDO, WADO }; diff --git a/platform/core/src/studies/services/qido/instances.js b/platform/core/src/studies/services/qido/instances.js new file mode 100644 index 00000000000..76d581bbb49 --- /dev/null +++ b/platform/core/src/studies/services/qido/instances.js @@ -0,0 +1,103 @@ +import DICOMWeb from '../../../DICOMWeb/'; +import { api } from 'dicomweb-client'; + +/** + * Parses data returned from a QIDO search and transforms it into + * an array of series that are present in the study + * + * @param server The DICOM server + * @param studyInstanceUid + * @param resultData + * @returns {Array} Series List + */ +function resultDataToStudyMetadata(server, studyInstanceUid, resultData) { + const seriesMap = {}; + const seriesList = []; + + resultData.forEach(function(instance) { + // Use seriesMap to cache series data + // If the series instance UID has already been used to + // process series data, continue using that series + var seriesInstanceUid = DICOMWeb.getString(instance['0020000E']); + var series = seriesMap[seriesInstanceUid]; + + // If no series data exists in the seriesMap cache variable, + // process any available series data + if (!series) { + series = { + seriesInstanceUid: seriesInstanceUid, + seriesNumber: DICOMWeb.getString(instance['00200011']), + instances: [], + }; + + // Save this data in the seriesMap cache variable + seriesMap[seriesInstanceUid] = series; + seriesList.push(series); + } + + // The uri for the dicomweb + // NOTE: DCM4CHEE seems to return the data zipped + // NOTE: Orthanc returns the data with multi-part mime which cornerstoneWADOImageLoader doesn't + // know how to parse yet + //var uri = DICOMWeb.getString(instance['00081190']); + //uri = uri.replace('wado-rs', 'dicom-web'); + + // manually create a WADO-URI from the UIDs + // NOTE: Haven't been able to get Orthanc's WADO-URI to work yet - maybe its not configured? + var sopInstanceUid = DICOMWeb.getString(instance['00080018']); + var uri = + server.wadoUriRoot + + '?requestType=WADO&studyUID=' + + studyInstanceUid + + '&seriesUID=' + + seriesInstanceUid + + '&objectUID=' + + sopInstanceUid + + '&contentType=application%2Fdicom'; + + // Add this instance to the current series + series.instances.push({ + sopClassUid: DICOMWeb.getString(instance['00080016']), + sopInstanceUid: sopInstanceUid, + uri: uri, + instanceNumber: DICOMWeb.getString(instance['00200013']), + }); + }); + return seriesList; +} + +/** + * Retrieve a set of instances using a QIDO call + * @param server + * @param studyInstanceUid + * @throws ECONNREFUSED + * @returns {{wadoUriRoot: String, studyInstanceUid: String, seriesList: Array}} + */ +export default function Instances(server, studyInstanceUid) { + // TODO: Are we using this function anywhere?? Can we remove it? + + const config = { + url: server.qidoRoot, + headers: DICOMWeb.getAuthorizationHeader(server), + }; + const dicomWeb = new api.DICOMwebClient(config); + const queryParams = getQIDOQueryParams( + filter, + server.qidoSupportsIncludeField + ); + const options = { + studyInstanceUID: studyInstanceUid, + }; + + return dicomWeb.searchForInstances(options).then(result => { + return { + wadoUriRoot: server.wadoUriRoot, + studyInstanceUid: studyInstanceUid, + seriesList: resultDataToStudyMetadata( + server, + studyInstanceUid, + result.data + ), + }; + }); +} diff --git a/platform/core/src/studies/services/qido/studies.js b/platform/core/src/studies/services/qido/studies.js new file mode 100644 index 00000000000..defc17433af --- /dev/null +++ b/platform/core/src/studies/services/qido/studies.js @@ -0,0 +1,130 @@ +import { api } from 'dicomweb-client'; +import DICOMWeb from '../../../DICOMWeb/'; + +/** + * Creates a QIDO date string for a date range query + * Assumes the year is positive, at most 4 digits long. + * + * @param date The Date object to be formatted + * @returns {string} The formatted date string + */ +function dateToString(date) { + if (!date) return ''; + let year = date.getFullYear().toString(); + let month = (date.getMonth() + 1).toString(); + let day = date.getDate().toString(); + year = '0'.repeat(4 - year.length).concat(year); + month = '0'.repeat(2 - month.length).concat(month); + day = '0'.repeat(2 - day.length).concat(day); + return ''.concat(year, month, day); +} + +/** + * Produces a QIDO URL given server details and a set of specified search filter + * items + * + * @param filter + * @param serverSupportsQIDOIncludeField + * @returns {string} The URL with encoded filter query data + */ +function getQIDOQueryParams(filter, serverSupportsQIDOIncludeField) { + const commaSeparatedFields = [ + '00081030', // Study Description + '00080060', //Modality + // Add more fields here if you want them in the result + ].join(','); + + const parameters = { + PatientName: filter.patientName, + PatientID: filter.patientId, + AccessionNumber: filter.accessionNumber, + StudyDescription: filter.studyDescription, + ModalitiesInStudy: filter.modalitiesInStudy, + limit: filter.limit, + offset: filter.offset, + fuzzymatching: filter.fuzzymatching, + includefield: serverSupportsQIDOIncludeField ? commaSeparatedFields : 'all', + }; + + // build the StudyDate range parameter + if (filter.studyDateFrom || filter.studyDateTo) { + const dateFrom = dateToString(new Date(filter.studyDateFrom)); + const dateTo = dateToString(new Date(filter.studyDateTo)); + parameters.StudyDate = `${dateFrom}-${dateTo}`; + } + + // Build the StudyInstanceUID parameter + if (filter.studyInstanceUid) { + let studyUids = filter.studyInstanceUid; + studyUids = Array.isArray(studyUids) ? studyUids.join() : studyUids; + studyUids = studyUids.replace(/[^0-9.]+/g, '\\'); + parameters.StudyInstanceUID = studyUids; + } + + // Clean query params of undefined values. + const params = {}; + Object.keys(parameters).forEach(key => { + if (parameters[key] !== undefined && parameters[key] !== '') { + params[key] = parameters[key]; + } + }); + + return params; +} + +/** + * Parses resulting data from a QIDO call into a set of Study MetaData + * + * @param resultData + * @returns {Array} An array of Study MetaData objects + */ +function resultDataToStudies(resultData) { + const studies = []; + + if (!resultData || !resultData.length) return; + + resultData.forEach(study => + studies.push({ + studyInstanceUid: DICOMWeb.getString(study['0020000D']), + // 00080005 = SpecificCharacterSet + studyDate: DICOMWeb.getString(study['00080020']), + studyTime: DICOMWeb.getString(study['00080030']), + accessionNumber: DICOMWeb.getString(study['00080050']), + referringPhysicianName: DICOMWeb.getString(study['00080090']), + // 00081190 = URL + patientName: DICOMWeb.getName(study['00100010']), + patientId: DICOMWeb.getString(study['00100020']), + patientBirthdate: DICOMWeb.getString(study['00100030']), + patientSex: DICOMWeb.getString(study['00100040']), + studyId: DICOMWeb.getString(study['00200010']), + numberOfStudyRelatedSeries: DICOMWeb.getString(study['00201206']), + numberOfStudyRelatedInstances: DICOMWeb.getString(study['00201208']), + studyDescription: DICOMWeb.getString(study['00081030']), + // modality: DICOMWeb.getString(study['00080060']), + // modalitiesInStudy: DICOMWeb.getString(study['00080061']), + modalities: DICOMWeb.getString( + DICOMWeb.getModalities(study['00080060'], study['00080061']) + ), + }) + ); + + return studies; +} + +export default function Studies(server, filter) { + const config = { + url: server.qidoRoot, + headers: DICOMWeb.getAuthorizationHeader(server), + }; + + const dicomWeb = new api.DICOMwebClient(config); + const queryParams = getQIDOQueryParams( + filter, + server.qidoSupportsIncludeField + ); + const options = { + queryParams, + }; + + return dicomWeb.searchForStudies(options).then(resultDataToStudies); +} diff --git a/platform/core/src/studies/services/wado/retrieveMetadata.js b/platform/core/src/studies/services/wado/retrieveMetadata.js new file mode 100644 index 00000000000..4f783981974 --- /dev/null +++ b/platform/core/src/studies/services/wado/retrieveMetadata.js @@ -0,0 +1,469 @@ +import { api } from 'dicomweb-client'; +import DICOMWeb from '../../../DICOMWeb/'; + +const WADOProxy = { + convertURL: (url, server) => { + // TODO: Remove all WADOProxy stuff from this file + return url; + }, +}; + +function parseFloatArray(obj) { + const result = []; + + if (!obj) { + return result; + } + + const objs = obj.split('\\'); + for (let i = 0; i < objs.length; i++) { + result.push(parseFloat(objs[i])); + } + + return result; +} + +/** + * Simple cache schema for retrieved color palettes. + */ +const paletteColorCache = { + count: 0, + maxAge: 24 * 60 * 60 * 1000, // 24h cache? + entries: {}, + isValidUID: function(paletteUID) { + return typeof paletteUID === 'string' && paletteUID.length > 0; + }, + get: function(paletteUID) { + let entry = null; + if (this.entries.hasOwnProperty(paletteUID)) { + entry = this.entries[paletteUID]; + // check how the entry is... + if (Date.now() - entry.time > this.maxAge) { + // entry is too old... remove entry. + delete this.entries[paletteUID]; + this.count--; + entry = null; + } + } + return entry; + }, + add: function(entry) { + if (this.isValidUID(entry.uid)) { + let paletteUID = entry.uid; + if (this.entries.hasOwnProperty(paletteUID) !== true) { + this.count++; // increment cache entry count... + } + entry.time = Date.now(); + this.entries[paletteUID] = entry; + // @TODO: Add logic to get rid of old entries and reduce memory usage... + } + }, +}; + +/** Returns a WADO url for an instance + * + * @param studyInstanceUid + * @param seriesInstanceUid + * @param sopInstanceUid + * @returns {string} + */ +function buildInstanceWadoUrl( + server, + studyInstanceUid, + seriesInstanceUid, + sopInstanceUid +) { + // TODO: This can be removed, since DICOMWebClient has the same function. Not urgent, though + const params = []; + + params.push('requestType=WADO'); + params.push(`studyUID=${studyInstanceUid}`); + params.push(`seriesUID=${seriesInstanceUid}`); + params.push(`objectUID=${sopInstanceUid}`); + params.push('contentType=application/dicom'); + params.push('transferSyntax=*'); + + const paramString = params.join('&'); + + return `${server.wadoUriRoot}?${paramString}`; +} + +function buildInstanceWadoRsUri( + server, + studyInstanceUid, + seriesInstanceUid, + sopInstanceUid +) { + return `${ + server.wadoRoot + }/studies/${studyInstanceUid}/series/${seriesInstanceUid}/instances/${sopInstanceUid}`; +} + +function buildInstanceFrameWadoRsUri( + server, + studyInstanceUid, + seriesInstanceUid, + sopInstanceUid, + frame +) { + const baseWadoRsUri = buildInstanceWadoRsUri( + server, + studyInstanceUid, + seriesInstanceUid, + sopInstanceUid + ); + frame = frame != null || 1; + + return `${baseWadoRsUri}/frames/${frame}`; +} + +/** + * Parses the SourceImageSequence, if it exists, in order + * to return a ReferenceSOPInstanceUID. The ReferenceSOPInstanceUID + * is used to refer to this image in any accompanying DICOM-SR documents. + * + * @param instance + * @returns {String} The ReferenceSOPInstanceUID + */ +function getSourceImageInstanceUid(instance) { + // TODO= Parse the whole Source Image Sequence + // This is a really poor workaround for now. + // Later we should probably parse the whole sequence. + var SourceImageSequence = instance['00082112']; + if ( + SourceImageSequence && + SourceImageSequence.Value && + SourceImageSequence.Value.length + ) { + return SourceImageSequence.Value[0]['00081155'].Value[0]; + } +} + +function getPaletteColor(server, instance, tag, lutDescriptor) { + const numLutEntries = lutDescriptor[0]; + const bits = lutDescriptor[2]; + + let uri = WADOProxy.convertURL(instance[tag].BulkDataURI, server); + + // TODO: Workaround for dcm4chee behind SSL-terminating proxy returning + // incorrect bulk data URIs + if (server.wadoRoot.indexOf('https') === 0 && !uri.includes('https')) { + uri = uri.replace('http', 'https'); + } + + const config = { + url: server.wadoRoot, //BulkDataURI is absolute, so this isn't used + headers: DICOMWeb.getAuthorizationHeader(server), + }; + const dicomWeb = new api.DICOMwebClient(config); + const options = { + BulkDataURI: uri, + }; + + const readUInt16 = (byteArray, position) => { + return byteArray[position] + byteArray[position + 1] * 256; + }; + + const arrayBufferToPaletteColorLUT = result => { + const arraybuffer = result[0] + const byteArray = new Uint8Array(arraybuffer) + const lut = [] + + for (let i = 0; i < numLutEntries; i++) { + if (bits === 16) { + lut[i] = readUInt16(byteArray, i * 2); + } else { + lut[i] = byteArray[i]; + } + } + + return lut; + }; + + return dicomWeb.retrieveBulkData(options).then(arrayBufferToPaletteColorLUT); +} + +/** + * Fetch palette colors for instances with "PALETTE COLOR" photometricInterpretation. + * + * @param server {Object} Current server; + * @param instance {Object} The retrieved instance metadata; + * @returns {String} The ReferenceSOPInstanceUID + */ +async function getPaletteColors(server, instance, lutDescriptor) { + let paletteUID = DICOMWeb.getString(instance['00281199']); + + return new Promise((resolve, reject) => { + let entry; + if (paletteColorCache.isValidUID(paletteUID)) { + entry = paletteColorCache.get(paletteUID); + + if (entry) { + return resolve(entry); + } + } + + // no entry in cache... Fetch remote data. + const r = getPaletteColor(server, instance, '00281201', lutDescriptor); + const g = getPaletteColor(server, instance, '00281202', lutDescriptor); + const b = getPaletteColor(server, instance, '00281203', lutDescriptor); + + const promises = [r, g, b]; + + Promise.all(promises).then(args => { + entry = { + red: args[0], + green: args[1], + blue: args[2], + }; + + // when paletteUID is present, the entry can be cached... + entry.uid = paletteUID; + paletteColorCache.add(entry); + + resolve(entry); + }); + }); +} + +function getFrameIncrementPointer(element) { + const frameIncrementPointerNames = { + '00181065': 'frameTimeVector', + '00181063': 'frameTime', + }; + + if (!element || !element.Value || !element.Value.length) { + return; + } + + const value = element.Value[0]; + return frameIncrementPointerNames[value]; +} + +function getRadiopharmaceuticalInfo(instance) { + const modality = DICOMWeb.getString(instance['00080060']); + + if (modality !== 'PT') { + return; + } + + const radiopharmaceuticalInfo = instance['00540016']; + if ( + radiopharmaceuticalInfo === undefined || + !radiopharmaceuticalInfo.Value || + !radiopharmaceuticalInfo.Value.length + ) { + return; + } + + const firstPetRadiopharmaceuticalInfo = radiopharmaceuticalInfo.Value[0]; + return { + radiopharmaceuticalStartTime: DICOMWeb.getString( + firstPetRadiopharmaceuticalInfo['00181072'] + ), + radionuclideTotalDose: DICOMWeb.getNumber( + firstPetRadiopharmaceuticalInfo['00181074'] + ), + radionuclideHalfLife: DICOMWeb.getNumber( + firstPetRadiopharmaceuticalInfo['00181075'] + ), + }; +} + +/** + * Parses result data from a WADO search into Study MetaData + * Returns an object populated with study metadata, including the + * series list. + * + * @param server + * @param studyInstanceUid + * @param resultData + * @returns {{seriesList: Array, patientName: *, patientId: *, accessionNumber: *, studyDate: *, modalities: *, studyDescription: *, imageCount: *, studyInstanceUid: *}} + */ +async function resultDataToStudyMetadata(server, studyInstanceUid, resultData) { + if (!resultData.length) { + return; + } + + const anInstance = resultData[0]; + if (!anInstance) { + return; + } + + // TODO: Pass a reference ID to the server instead of including the URLs here + const studyData = { + seriesList: [], + studyInstanceUid, + wadoUriRoot: server.wadoUriRoot, + wadoRoot: server.wadoRoot, + qidoRoot: server.qidoRoot, + patientName: DICOMWeb.getName(anInstance['00100010']), + patientId: DICOMWeb.getString(anInstance['00100020']), + patientAge: DICOMWeb.getNumber(anInstance['00101010']), + patientSize: DICOMWeb.getNumber(anInstance['00101020']), + patientWeight: DICOMWeb.getNumber(anInstance['00101030']), + accessionNumber: DICOMWeb.getString(anInstance['00080050']), + studyDate: DICOMWeb.getString(anInstance['00080020']), + modalities: DICOMWeb.getString(anInstance['00080061']), + studyDescription: DICOMWeb.getString(anInstance['00081030']), + imageCount: DICOMWeb.getString(anInstance['00201208']), + studyInstanceUid: DICOMWeb.getString(anInstance['0020000D']), + institutionName: DICOMWeb.getString(anInstance['00080080']), + }; + + const seriesMap = {}; + + await Promise.all( + resultData.map(async function(instance) { + const seriesInstanceUid = DICOMWeb.getString(instance['0020000E']); + let series = seriesMap[seriesInstanceUid]; + + if (!series) { + series = { + seriesDescription: DICOMWeb.getString(instance['0008103E']), + modality: DICOMWeb.getString(instance['00080060']), + seriesInstanceUid: seriesInstanceUid, + seriesNumber: DICOMWeb.getNumber(instance['00200011']), + seriesDate: DICOMWeb.getString(instance['00080021']), + seriesTime: DICOMWeb.getString(instance['00080031']), + instances: [], + }; + seriesMap[seriesInstanceUid] = series; + studyData.seriesList.push(series); + } + + const sopInstanceUid = DICOMWeb.getString(instance['00080018']); + const wadouri = buildInstanceWadoUrl( + server, + studyInstanceUid, + seriesInstanceUid, + sopInstanceUid + ); + const baseWadoRsUri = buildInstanceWadoRsUri( + server, + studyInstanceUid, + seriesInstanceUid, + sopInstanceUid + ); + const wadorsuri = buildInstanceFrameWadoRsUri( + server, + studyInstanceUid, + seriesInstanceUid, + sopInstanceUid + ); + + const instanceSummary = { + imageType: DICOMWeb.getString(instance['00080008']), + sopClassUid: DICOMWeb.getString(instance['00080016']), + modality: DICOMWeb.getString(instance['00080060']), + sopInstanceUid, + instanceNumber: DICOMWeb.getNumber(instance['00200013']), + imagePositionPatient: DICOMWeb.getString(instance['00200032']), + imageOrientationPatient: DICOMWeb.getString(instance['00200037']), + frameOfReferenceUID: DICOMWeb.getString(instance['00200052']), + sliceLocation: DICOMWeb.getNumber(instance['00201041']), + samplesPerPixel: DICOMWeb.getNumber(instance['00280002']), + photometricInterpretation: DICOMWeb.getString(instance['00280004']), + planarConfiguration: DICOMWeb.getNumber(instance['00280006']), + rows: DICOMWeb.getNumber(instance['00280010']), + columns: DICOMWeb.getNumber(instance['00280011']), + pixelSpacing: DICOMWeb.getString(instance['00280030']), + pixelAspectRatio: DICOMWeb.getString(instance['00280034']), + bitsAllocated: DICOMWeb.getNumber(instance['00280100']), + bitsStored: DICOMWeb.getNumber(instance['00280101']), + highBit: DICOMWeb.getNumber(instance['00280102']), + pixelRepresentation: DICOMWeb.getNumber(instance['00280103']), + smallestPixelValue: DICOMWeb.getNumber(instance['00280106']), + largestPixelValue: DICOMWeb.getNumber(instance['00280107']), + windowCenter: DICOMWeb.getString(instance['00281050']), + windowWidth: DICOMWeb.getString(instance['00281051']), + rescaleIntercept: DICOMWeb.getNumber(instance['00281052']), + rescaleSlope: DICOMWeb.getNumber(instance['00281053']), + rescaleType: DICOMWeb.getNumber(instance['00281054']), + sourceImageInstanceUid: getSourceImageInstanceUid(instance), + laterality: DICOMWeb.getString(instance['00200062']), + viewPosition: DICOMWeb.getString(instance['00185101']), + acquisitionDateTime: DICOMWeb.getString(instance['0008002A']), + numberOfFrames: DICOMWeb.getNumber(instance['00280008']), + frameIncrementPointer: getFrameIncrementPointer(instance['00280009']), + frameTime: DICOMWeb.getNumber(instance['00181063']), + frameTimeVector: parseFloatArray( + DICOMWeb.getString(instance['00181065']) + ), + sliceThickness: DICOMWeb.getNumber(instance['00180050']), + spacingBetweenSlices: DICOMWeb.getString(instance['00180088']), + lossyImageCompression: DICOMWeb.getString(instance['00282110']), + derivationDescription: DICOMWeb.getString(instance['00282111']), + lossyImageCompressionRatio: DICOMWeb.getString(instance['00282112']), + lossyImageCompressionMethod: DICOMWeb.getString(instance['00282114']), + echoNumber: DICOMWeb.getString(instance['00180086']), + contrastBolusAgent: DICOMWeb.getString(instance['00180010']), + radiopharmaceuticalInfo: getRadiopharmaceuticalInfo(instance), + baseWadoRsUri: baseWadoRsUri, + wadouri: WADOProxy.convertURL(wadouri, server), + wadorsuri: WADOProxy.convertURL(wadorsuri, server), + imageRendering: server.imageRendering, + thumbnailRendering: server.thumbnailRendering, + }; + + // Get additional information if the instance uses "PALETTE COLOR" photometric interpretation + if (instanceSummary.photometricInterpretation === 'PALETTE COLOR') { + const redPaletteColorLookupTableDescriptor = parseFloatArray( + DICOMWeb.getString(instance['00281101']) + ); + const greenPaletteColorLookupTableDescriptor = parseFloatArray( + DICOMWeb.getString(instance['00281102']) + ); + const bluePaletteColorLookupTableDescriptor = parseFloatArray( + DICOMWeb.getString(instance['00281103']) + ); + const palettes = await getPaletteColors( + server, + instance, + redPaletteColorLookupTableDescriptor + ); + + if (palettes) { + if (palettes.uid) { + instanceSummary.paletteColorLookupTableUID = palettes.uid; + } + + instanceSummary.redPaletteColorLookupTableData = palettes.red; + instanceSummary.greenPaletteColorLookupTableData = palettes.green; + instanceSummary.bluePaletteColorLookupTableData = palettes.blue; + instanceSummary.redPaletteColorLookupTableDescriptor = redPaletteColorLookupTableDescriptor; + instanceSummary.greenPaletteColorLookupTableDescriptor = greenPaletteColorLookupTableDescriptor; + instanceSummary.bluePaletteColorLookupTableDescriptor = bluePaletteColorLookupTableDescriptor; + } + } + + series.instances.push(instanceSummary); + }) + ); + + return studyData; +} + +/** + * Retrieve Study MetaData from a DICOM server using a WADO call + * + * @param server + * @param studyInstanceUid + * @returns {Promise} + */ +async function RetrieveMetadata(server, studyInstanceUid) { + const config = { + url: server.wadoRoot, + headers: DICOMWeb.getAuthorizationHeader(server), + }; + const dicomWeb = new api.DICOMwebClient(config); + const options = { + studyInstanceUID: studyInstanceUid, + }; + + return dicomWeb.retrieveStudyMetadata(options).then(result => { + return resultDataToStudyMetadata(server, studyInstanceUid, result); + }); +} + +export default RetrieveMetadata; diff --git a/platform/core/src/studies/sortStudy.js b/platform/core/src/studies/sortStudy.js new file mode 100644 index 00000000000..b02cbad19fa --- /dev/null +++ b/platform/core/src/studies/sortStudy.js @@ -0,0 +1,17 @@ +/** + * Sorts the series and instances inside a study instance by their series + * and instance numbers in ascending order. + * + * @param {Object} study The study instance + */ +export default function sortStudy(study) { + if (!study || !study.seriesList) { + throw new Error('Insufficient study data was provided to sortStudy'); + } + + study.seriesList.sort((a, b) => a.seriesNumber - b.seriesNumber); + + study.seriesList.forEach(series => { + series.instances.sort((a, b) => a.instanceNumber - b.instanceNumber); + }); +} diff --git a/platform/core/src/ui/getOffset.js b/platform/core/src/ui/getOffset.js new file mode 100644 index 00000000000..773d7525399 --- /dev/null +++ b/platform/core/src/ui/getOffset.js @@ -0,0 +1,21 @@ +/** + * Get the offset for the given element + * + * @param {Object} element DOM element which will have the offser calculated + * @returns {Object} Object containing the top and left offset + */ +export default function getOffset(element) { + let top = 0; + let left = 0; + if (element.offsetParent) { + do { + left += element.offsetLeft; + top += element.offsetTop; + } while ((element = element.offsetParent)); + } + + return { + left, + top, + }; +} diff --git a/platform/core/src/ui/getScrollbarSize.js b/platform/core/src/ui/getScrollbarSize.js new file mode 100644 index 00000000000..16362c638dd --- /dev/null +++ b/platform/core/src/ui/getScrollbarSize.js @@ -0,0 +1,41 @@ +/** + * Get the vertical and horizontal scrollbar sizes + * Got from https://stackoverflow.com/questions/986937/how-can-i-get-the-browsers-scrollbar-sizes + * + * @returns {Array} Array containing the scrollbar horizontal and vertical sizes + */ +export default function getScrollbarSize() { + const inner = document.createElement('p'); + inner.style.width = '100%'; + inner.style.height = '100%'; + + const outer = document.createElement('div'); + outer.style.position = 'absolute'; + outer.style.top = '0px'; + outer.style.left = '0px'; + outer.style.visibility = 'hidden'; + outer.style.width = '100px'; + outer.style.height = '100px'; + outer.style.overflow = 'hidden'; + outer.appendChild(inner); + + document.body.appendChild(outer); + + const w1 = inner.offsetWidth; + const h1 = inner.offsetHeight; + outer.style.overflow = 'scroll'; + let w2 = inner.offsetWidth; + let h2 = inner.offsetHeight; + + if (w1 === w2) { + w2 = outer.clientWidth; + } + + if (h1 === h2) { + h2 = outer.clientHeight; + } + + document.body.removeChild(outer); + + return [w1 - w2, h1 - h2]; +} diff --git a/platform/core/src/ui/handleError.js b/platform/core/src/ui/handleError.js new file mode 100644 index 00000000000..cbfb6f27c2f --- /dev/null +++ b/platform/core/src/ui/handleError.js @@ -0,0 +1,33 @@ +import log from '../log.js'; + +export default function handleError(error) { + let { title, message } = error; + + if (!title) { + if (error instanceof Error) { + title = error.name; + } + } + + if (!message) { + if (error instanceof Error) { + message = error.message; + } + } + + const data = Object.assign( + { + title, + message, + class: 'themed', + hideConfirm: true, + cancelLabel: 'Dismiss', + cancelClass: 'btn-secondary', + }, + error || {} + ); + + log.error(error); + // TODO: Find a better way to handle errors instead of displaying a dialog for all of them. + // OHIF.ui.showDialog('dialogForm', data); +} diff --git a/platform/core/src/ui/index.js b/platform/core/src/ui/index.js new file mode 100644 index 00000000000..942807a6675 --- /dev/null +++ b/platform/core/src/ui/index.js @@ -0,0 +1,14 @@ +import unsavedChanges from './unsavedChanges.js'; +import handleError from './handleError.js'; +import isCharacterKeyPress from './isCharacterKeyPress.js'; +import getOffset from './getOffset.js'; +import getScrollbarSize from './getScrollbarSize.js'; + +const ui = { + getScrollbarSize, + getOffset, + isCharacterKeyPress, + handleError, +}; + +export default ui; diff --git a/platform/core/src/ui/isCharacterKeyPress.js b/platform/core/src/ui/isCharacterKeyPress.js new file mode 100644 index 00000000000..b3c5b91e9c3 --- /dev/null +++ b/platform/core/src/ui/isCharacterKeyPress.js @@ -0,0 +1,21 @@ +/** + * Check if the pressed key combination will result in a character input + * Got from https://stackoverflow.com/questions/4179708/how-to-detect-if-the-pressed-key-will-produce-a-character-inside-an-input-text + * + * @returns {Boolean} Whether the pressed key combination will input a character or not + */ +export default function isCharacterKeyPress(event) { + if (typeof event.which === 'undefined') { + // This is IE, which only fires keypress events for printable keys + return true; + } else if (typeof event.which === 'number' && event.which > 0) { + // In other browsers except old versions of WebKit, event.which is + // only greater than zero if the keypress is a printable key. + // We need to filter out backspace and ctrl/alt/meta key combinations + return ( + !event.ctrlKey && !event.metaKey && !event.altKey && event.which !== 8 + ); + } + + return false; +} diff --git a/platform/core/src/ui/unsavedChanges.js b/platform/core/src/ui/unsavedChanges.js new file mode 100644 index 00000000000..cbc00f9ed6c --- /dev/null +++ b/platform/core/src/ui/unsavedChanges.js @@ -0,0 +1,536 @@ +const FUNCTION = 'function'; +const STRING = 'string'; +const UNDEFINED = 'undefined'; +const WILDCARD = '*'; // "*" is a special name which means "all children". +const SEPARATOR = '.'; + +/** + * Main Namespace Component Class + */ + +class Node { + constructor() { + this.value = 0; + this.children = {}; + this.handlers = {}; + } + + getPathComponents(path) { + return typeof path === STRING ? path.split(SEPARATOR) : null; + } + + getNodeUpToIndex(path, index) { + let node = this; + + for (let i = 0; i < index; ++i) { + let item = path[i]; + if (node.children.hasOwnProperty(item)) { + node = node.children[item]; + } else { + node = null; + break; + } + } + + return node; + } + + append(name, value) { + const children = this.children; + let node = null; + + if (children.hasOwnProperty(name)) { + node = children[name]; + } else if (typeof name === STRING && name !== WILDCARD) { + node = new Node(); + children[name] = node; + } + + if (node !== null) { + node.value += value > 0 ? parseInt(value) : 0; + } + + return node; + } + + probe(recursively) { + let value = this.value; + + // Calculate entire tree value recursively? + if (recursively === true) { + const children = this.children; + for (let item in children) { + if (children.hasOwnProperty(item)) { + value += children[item].probe(recursively); + } + } + } + + return value; + } + + clear(recursively) { + this.value = 0; + + // Clear entire tree recursively? + if (recursively === true) { + const children = this.children; + for (let item in children) { + if (children.hasOwnProperty(item)) { + children[item].clear(recursively); + } + } + } + } + + appendPath(path, value) { + path = this.getPathComponents(path); + + if (path !== null) { + const last = path.length - 1; + let node = this; + for (let i = 0; i < last; ++i) { + node = node.append(path[i], 0); + if (node === null) { + return false; + } + } + + return node.append(path[last], value) !== null; + } + + return false; + } + + clearPath(path, recursively) { + path = this.getPathComponents(path); + + if (path !== null) { + const last = path.length - 1; + let node = this.getNodeUpToIndex(path, last); + if (node !== null) { + let item = path[last]; + if (item !== WILDCARD) { + if (node.children.hasOwnProperty(item)) { + node.children[item].clear(recursively); + return true; + } + } else { + const children = node.children; + for (item in children) { + if (children.hasOwnProperty(item)) { + children[item].clear(recursively); + } + } + + return true; + } + } + } + + return false; + } + + probePath(path, recursively) { + path = this.getPathComponents(path); + + if (path !== null) { + const last = path.length - 1; + let node = this.getNodeUpToIndex(path, last); + if (node !== null) { + let item = path[last]; + if (item !== WILDCARD) { + if (node.children.hasOwnProperty(item)) { + return node.children[item].probe(recursively); + } + } else { + const children = node.children; + let value = 0; + for (item in children) { + if (children.hasOwnProperty(item)) { + value += children[item].probe(recursively); + } + } + + return value; + } + } + } + + return 0; + } + + attachHandler(type, handler) { + let result = false; + + if (typeof type === STRING && typeof handler === FUNCTION) { + const handlers = this.handlers; + const list = handlers.hasOwnProperty(type) + ? handlers[type] + : (handlers[type] = []); + const length = list.length; + + let notFound = true; + + for (let i = 0; i < length; ++i) { + if (handler === list[i]) { + notFound = false; + break; + } + } + + if (notFound) { + list[length] = handler; + result = true; + } + } + + return result; + } + + removeHandler(type, handler) { + let result = false; + + if (typeof type === STRING && typeof handler === FUNCTION) { + const handlers = this.handlers; + if (handlers.hasOwnProperty(type)) { + const list = handlers[type]; + const length = list.length; + for (let i = 0; i < length; ++i) { + if (handler === list[i]) { + list.splice(i, 1); + result = true; + break; + } + } + } + } + + return result; + } + + trigger(type, nonRecursively) { + if (typeof type === STRING) { + const handlers = this.handlers; + + if (handlers.hasOwnProperty(type)) { + const list = handlers[type]; + const length = list.length; + for (let i = 0; i < length; ++i) { + list[i].call(null); + } + } + + if (nonRecursively !== true) { + const children = this.children; + for (let item in children) { + if (children.hasOwnProperty(item)) { + children[item].trigger(type); + } + } + } + } + } + + attachHandlerForPath(path, type, handler) { + path = this.getPathComponents(path); + + if (path !== null) { + let node = this.getNodeUpToIndex(path, path.length); + if (node !== null) { + return node.attachHandler(type, handler); + } + } + + return false; + } + + removeHandlerForPath(path, type, handler) { + path = this.getPathComponents(path); + + if (path !== null) { + let node = this.getNodeUpToIndex(path, path.length); + if (node !== null) { + return node.removeHandler(type, handler); + } + } + + return false; + } + + triggerHandlersForPath(path, type, nonRecursively) { + path = this.getPathComponents(path); + + if (path !== null) { + let node = this.getNodeUpToIndex(path, path.length); + if (node !== null) { + node.trigger(type, nonRecursively); + } + } + } +} + +/** + * Root Namespace Node and API + */ + +const rootNode = new Node(); + +export const unsavedChanges = { + rootNode: rootNode, + + observer: null, //new Tracker.Dependency(), + + hooks: new Map(), + + /** + * Register a reactive dependency on every change any path suffers + */ + depend: function() { + return; // this.observer.depend(); + }, + + /** + * Signal an unsaved change for a given namespace. + * @param {String} path A string (e.g., "viewer.studyViewer.measurements.targets") that identifies the namespace of the signaled changes. + * @return {Boolean} Returns false if the signal could not be saved or the supplied namespace is invalid. Otherwise, true is returned. + */ + set: function(path) { + const result = rootNode.appendPath(path, 1); + //this.observer.changed(); + return result; + }, + + /** + * Clear all signaled unsaved changes for a given namespace. If the supplied namespace is a wildcard, all signals below that namespace + * are cleared. + * @param {String} path A string that identifies the namespace of the signaled changes (e.g., "viewer.studyViewer.measurements.targets" + * for clearing the "targets" item of the "viewer.studyViewer.measurements" namespace or "viewer.studyViewer.*" to specify all signaled + * changes for the "viewer.studyViewer" namespace). + * @param {Boolean} recursively Clear node and all its children recursively. If not specified defaults to true. + * @return {Boolean} Returns false if the signal could not be removed or the supplied namespace is invalid. Otherwise, true is returned. + */ + clear: function(path, recursively) { + const result = rootNode.clearPath( + path, + typeof recursively === UNDEFINED ? true : recursively + ); + //this.observer.changed(); + return result; + }, + + /** + * Count the amount of signaled unsaved changes for a given namespace. If the supplied namespace is a wildcard, all signals below that + * namespace will also be accounted. + * @param {String} path A string that identifies the namespace of the signaled changes (e.g., "viewer.studyViewer.measurements.targets" + * for counting the amount of signals for the "targets" item of the "viewer.studyViewer.measurements" namespace or "viewer.studyViewer.*" + * to count all signaled changes for the "viewer.studyViewer" namespace). + * @param {Boolean} recursively Probe node and all its children recursively. If not specified defaults to true. + * @return {Number} Returns the amount of signaled changes for a given namespace. If the supplied namespace is a wildcard, the sum of all + * changes for that namespace are returned. + */ + probe: function(path, recursively) { + return rootNode.probePath( + path, + typeof recursively === UNDEFINED ? true : recursively + ); + }, + + /** + * Attach an event handler to the specified namespace. + * @param {String} name A string that identifies the namespace to which the event handler will be attached (e.g., + * "viewer.studyViewer.measurements" to attach an event handler for that namespace). + * @param {String} type A string that identifies the event type to which the event handler will be attached. + * @param {Function} handler The handler that will be executed when the specifed event is triggered. + * @return {Boolean} Returns true on success and false on failure. + */ + attachHandler: function(path, type, handler) { + return ( + rootNode.appendPath(path, 0) && + rootNode.attachHandlerForPath(path, type, handler) + ); + }, + + /** + * Detach an event handler from the specified namespace. + * @param {String} name A string that identifies the namespace from which the event handler will be detached (e.g., + * "viewer.studyViewer.measurements" to remove an event handler from that namespace). + * @param {String} type A string that identifies the event type to which the event handler was attached. + * @param {Function} handler The handler that will be removed from execution list. + * @return {Boolean} Returns true on success and false on failure. + */ + removeHandler: function(path, type, handler) { + return rootNode.removeHandlerForPath(path, type, handler); + }, + + /** + * Trigger all event handlers for the specified namespace and type. + * @param {String} name A string that identifies the namespace from which the event handler will be detached (e.g., + * "viewer.studyViewer.measurements" to remove an event handler from that namespace). + * @param {String} type A string that identifies the event type which will be triggered. + * @param {Boolean} nonRecursively If set to true, prevents triggering event handlers from descending tree. + * @return {Void} No value is returned. + */ + trigger: function(path, type, nonRecursively) { + rootNode.triggerHandlersForPath(path, type, nonRecursively); + }, + + /** + * UI utility that presents a confirmation dialog to the user if any unsaved changes where signaled for the given namespace. + * @param {String} path A string that identifies the namespace of the signaled changes (e.g., "viewer.studyViewer.measurements.targets" + * for considering only the signals for the "targets" item of the "viewer.studyViewer.measurements" namespace or "viewer.studyViewer.*" + * to consider all signaled changes for the "viewer.studyViewer" namespace). + * @param {Function} callback A callback function (e.g, function(shouldProceed, hasChanges) { ... }) that will be executed after assessment. + * Upon execution, the callback will receive two boolean arguments (shouldProceed and hasChanges) indicating if the action can be performed + * or not and if changes that need to be cleared exist. + * @param {Object} options (Optional) An object with UI presentation options. + * @param {String} options.title The string that will be used as a title for confirmation dialog. + * @param {String} options.message The string that will be used as a message for confirmation dialog. + * @return {void} No value is returned. + */ + checkBeforeAction: function(path, callback, options) { + let probe, hasChanges, shouldProceed; + + if (typeof callback !== 'function') { + // nothing to do if no callback function is supplied... + return; + } + + probe = this.probe(path); + if (probe > 0) { + // Unsaved changes exist... + hasChanges = true; + let dialogOptions = Object.assign( + { + title: 'You have unsaved changes!', + message: + "Your changes will be lost if you don't save them before leaving the current page... Are you sure you want to proceed?", + }, + options + ); + OHIF.ui.showDialog('dialogConfirm', dialogOptions).then( + function() { + // Unsaved changes exist but user confirms action... + shouldProceed = true; + callback.call(null, shouldProceed, hasChanges); + }, + function() { + // Unsaved changes exist and user does NOT confirm action... + shouldProceed = false; + callback.call(null, shouldProceed, hasChanges); + } + ); + } else { + // No unsaved changes, action can be performed... + hasChanges = false; + shouldProceed = true; + callback.call(null, shouldProceed, hasChanges); + } + }, + + /** + * UI utility that presents a "proactive" dialog (with three options: stay, abandon-changes, save-changes) to the user if any unsaved changes where signaled for the given namespace. + * @param {String} path A string that identifies the namespace of the signaled changes (e.g., "viewer.studyViewer.measurements.targets" + * for considering only the signals for the "targets" item of the "viewer.studyViewer.measurements" namespace or "viewer.studyViewer.*" + * to consider all signaled changes for the "viewer.studyViewer" namespace). + * @param {Function} callback A callback function (e.g, function(hasChanges, userChoice) { ... }) that will be executed after assessment. + * Upon execution, the callback will receive two arguments: one boolean (hasChanges) indicating that unsaved changes exist and one string with the ID of the + * option picked by the user on the dialog ('abort-action', 'abandon-changes' and 'save-changes'). If no unsaved changes exist, the second argument is null. + * @param {Object} options (Optional) An object with UI presentation options. + * @param {Object} options.position An object with optimal position (e.g., { x: ..., y: ... }) for the dialog. + * @return {void} No value is returned. + */ + presentProactiveDialog: function(path, callback, options) { + let probe, hasChanges; + + if (typeof callback !== 'function') { + // nothing to do if no callback function is supplied... + return; + } + + probe = this.probe(path, true); + if (probe > 0) { + // Unsaved changes exist... + hasChanges = true; + OHIF.ui.unsavedChangesDialog(function(choice) { + callback.call(null, hasChanges, choice); + }, options); + } else { + // No unsaved changes, action can be performed... + hasChanges = false; + callback.call(null, hasChanges, null); + } + }, + + addHook(saveCallback, options = {}) { + if (!options.path) { + options.path = '*'; + } + + if (!options.message) { + options.message = 'There are unsaved changes'; + } + + this.hooks.set(saveCallback, options); + }, + + removeHook(saveCallback) { + this.hooks.delete(saveCallback); + }, + + confirmNavigation(navigateCallback, event) { + let dialogPresented = false; + Array.from(this.hooks.keys()).every(saveCallback => { + const options = this.hooks.get(saveCallback); + const probe = this.probe(options.path, true); + if (!probe) return true; + + const dialogOptions = Object.assign({ class: 'themed' }, options); + if (event) { + dialogOptions.position = { + x: event.clientX + 15, + y: event.clientY + 15, + }; + } + + OHIF.ui.unsavedChanges.presentProactiveDialog( + options.path, + (hasChanges, userChoice) => { + if (!hasChanges) return; + + const clear = () => this.clear(options.path, true); + switch (userChoice) { + case 'abort-action': + return; + case 'save-changes': + const result = saveCallback(); + if (result instanceof Promise) { + return result.then(() => { + clear(); + this.confirmNavigation(navigateCallback, event); + }); + } + + clear(); + return this.confirmNavigation(navigateCallback, event); + case 'abandon-changes': + clear(); + break; + } + + navigateCallback(); + }, + dialogOptions + ); + + dialogPresented = true; + return false; + }); + + if (!dialogPresented) { + navigateCallback(); + } + }, +}; + +export default unsavedChanges; diff --git a/platform/core/src/user.js b/platform/core/src/user.js new file mode 100644 index 00000000000..9e5df8d0690 --- /dev/null +++ b/platform/core/src/user.js @@ -0,0 +1,13 @@ +// These should be overridden by the implementation +let user = { + userLoggedIn: () => false, + getUserId: () => null, + getName: () => null, + getAccessToken: () => null, + login: () => new Promise((resolve, reject) => reject()), + logout: () => new Promise((resolve, reject) => reject()), + getData: key => null, + setData: (key, value) => null, +}; + +export default user; diff --git a/platform/core/src/utils/DICOMTagDescriptions.js b/platform/core/src/utils/DICOMTagDescriptions.js new file mode 100644 index 00000000000..32215c5ace1 --- /dev/null +++ b/platform/core/src/utils/DICOMTagDescriptions.js @@ -0,0 +1,3268 @@ +// TODO: Deprecate since we have the same thing in dcmjs? +const NUMBER = 'number'; +const STRING = 'string'; +const REGEX_TAG = /^x[0-9a-fx]{8}$/; + +const DICOMTagDescriptions = Object.create(Object.prototype, { + _descriptions: { + configurable: false, + enumerable: false, + writable: false, + value: Object.create(null), + }, + tagNumberToString: { + configurable: false, + enumerable: true, + writable: false, + value: function tagNumberToString(tag) { + let string; // by default, undefined is returned... + if (this.isValidTagNumber(tag)) { + // if it's a number, build its hexadecimal representation... + string = 'x' + ('00000000' + tag.toString(16)).substr(-8); + } + return string; + }, + }, + isValidTagNumber: { + configurable: false, + enumerable: true, + writable: false, + value: function isValidTagNumber(tag) { + return typeof tag === NUMBER && tag >= 0 && tag <= 0xffffffff; + }, + }, + isValidTag: { + configurable: false, + enumerable: true, + writable: false, + value: function isValidTag(tag) { + return typeof tag === STRING + ? REGEX_TAG.test(tag) + : this.isValidTagNumber(tag); + }, + }, + find: { + configurable: false, + enumerable: true, + writable: false, + value: function find(name) { + let description; // by default, undefined is returned... + if (typeof name !== STRING) { + // if it's a number, a tag string will be returned... + name = this.tagNumberToString(name); + } + if (typeof name === STRING) { + description = this._descriptions[name]; + } + return description; + }, + }, + init: { + configurable: false, + enumerable: true, + writable: false, + value: function init(descriptionMap) { + const _hasOwn = Object.prototype.hasOwnProperty; + const _descriptions = this._descriptions; + for (let tag in descriptionMap) { + if (_hasOwn.call(descriptionMap, tag)) { + if (!this.isValidTag(tag)) { + // Skip in case tag is not valid... + console.info(`DICOMTagDescriptions: Invalid tag "${tag}"...`); + continue; + } + if (tag in _descriptions) { + // Skip in case the tag is duplicated... + console.info(`DICOMTagDescriptions: Duplicated tag "${tag}"...`); + continue; + } + // Save keyword... + const keyword = descriptionMap[tag]; + // Create a description entry and freeze it... + const entry = Object.create(null); + entry.tag = tag; + entry.keyword = keyword; + Object.freeze(entry); + // Add tag references to entry... + _descriptions[tag] = entry; + // Add keyword references to entry (if not present already)... + if (keyword in _descriptions) { + const currentEntry = _descriptions[keyword]; + console.info( + `DICOMTagDescriptions: Using <${currentEntry.tag},${ + currentEntry.keyword + }> instead of <${entry.tag},${ + entry.keyword + }> for keyword "${keyword}"...` + ); + } else { + _descriptions[keyword] = entry; + } + } + } + // Freeze internal description map... + Object.freeze(_descriptions); + // Freeze itself... + Object.freeze(this); + }, + }, +}); + +/** + * Map with DICOM Tag Descriptions + */ +let initialTagDescriptionMap = { + x00020000: 'FileMetaInfoGroupLength', + x00020001: 'FileMetaInfoVersion', + x00020002: 'MediaStorageSOPClassUID', + x00020003: 'MediaStorageSOPInstanceUID', + x00020010: 'TransferSyntaxUID', + x00020012: 'ImplementationClassUID', + x00020013: 'ImplementationVersionName', + x00020016: 'SourceApplicationEntityTitle', + x00020100: 'PrivateInformationCreatorUID', + x00020102: 'PrivateInformation', + x00041130: 'FileSetID', + x00041141: 'FileSetDescriptorFileID', + x00041142: 'SpecificCharacterSetOfFile', + x00041200: 'FirstDirectoryRecordOffset', + x00041202: 'LastDirectoryRecordOffset', + x00041212: 'FileSetConsistencyFlag', + x00041220: 'DirectoryRecordSequence', + x00041400: 'OffsetOfNextDirectoryRecord', + x00041410: 'RecordInUseFlag', + x00041420: 'LowerLevelDirectoryEntityOffset', + x00041430: 'DirectoryRecordType', + x00041432: 'PrivateRecordUID', + x00041500: 'ReferencedFileID', + x00041504: 'MRDRDirectoryRecordOffset', + x00041510: 'ReferencedSOPClassUIDInFile', + x00041511: 'ReferencedSOPInstanceUIDInFile', + x00041512: 'ReferencedTransferSyntaxUIDInFile', + x0004151a: 'ReferencedRelatedSOPClassUIDInFile', + x00041600: 'NumberOfReferences', + x00080000: 'IdentifyingGroupLength', + x00080001: 'LengthToEnd', + x00080005: 'SpecificCharacterSet', + x00080006: 'LanguageCodeSequence', + x00080008: 'ImageType', + x00080010: 'RecognitionCode', + x00080012: 'InstanceCreationDate', + x00080013: 'InstanceCreationTime', + x00080014: 'InstanceCreatorUID', + x00080016: 'SOPClassUID', + x00080018: 'SOPInstanceUID', + x0008001a: 'RelatedGeneralSOPClassUID', + x0008001b: 'OriginalSpecializedSOPClassUID', + x00080020: 'StudyDate', + x00080021: 'SeriesDate', + x00080022: 'AcquisitionDate', + x00080023: 'ContentDate', + x00080024: 'OverlayDate', + x00080025: 'CurveDate', + x0008002a: 'AcquisitionDateTime', + x00080030: 'StudyTime', + x00080031: 'SeriesTime', + x00080032: 'AcquisitionTime', + x00080033: 'ContentTime', + x00080034: 'OverlayTime', + x00080035: 'CurveTime', + x00080040: 'DataSetType', + x00080041: 'DataSetSubtype', + x00080042: 'NuclearMedicineSeriesType', + x00080050: 'AccessionNumber', + x00080052: 'QueryRetrieveLevel', + x00080054: 'RetrieveAETitle', + x00080056: 'InstanceAvailability', + x00080058: 'FailedSOPInstanceUIDList', + x00080060: 'Modality', + x00080061: 'ModalitiesInStudy', + x00080062: 'SOPClassesInStudy', + x00080064: 'ConversionType', + x00080068: 'PresentationIntentType', + x00080070: 'Manufacturer', + x00080080: 'InstitutionName', + x00080081: 'InstitutionAddress', + x00080082: 'InstitutionCodeSequence', + x00080090: 'ReferringPhysicianName', + x00080092: 'ReferringPhysicianAddress', + x00080094: 'ReferringPhysicianTelephoneNumber', + x00080096: 'ReferringPhysicianIDSequence', + x00080100: 'CodeValue', + x00080102: 'CodingSchemeDesignator', + x00080103: 'CodingSchemeVersion', + x00080104: 'CodeMeaning', + x00080105: 'MappingResource', + x00080106: 'ContextGroupVersion', + x00080107: 'ContextGroupLocalVersion', + x0008010b: 'ContextGroupExtensionFlag', + x0008010c: 'CodingSchemeUID', + x0008010d: 'ContextGroupExtensionCreatorUID', + x0008010f: 'ContextIdentifier', + x00080110: 'CodingSchemeIDSequence', + x00080112: 'CodingSchemeRegistry', + x00080114: 'CodingSchemeExternalID', + x00080115: 'CodingSchemeName', + x00080116: 'CodingSchemeResponsibleOrganization', + x00080117: 'ContextUID', + x00080201: 'TimezoneOffsetFromUTC', + x00081000: 'NetworkID', + x00081010: 'StationName', + x00081030: 'StudyDescription', + x00081032: 'ProcedureCodeSequence', + x0008103e: 'SeriesDescription', + x00081040: 'InstitutionalDepartmentName', + x00081048: 'PhysiciansOfRecord', + x00081049: 'PhysiciansOfRecordIDSequence', + x00081050: 'PerformingPhysicianName', + x00081052: 'PerformingPhysicianIDSequence', + x00081060: 'NameOfPhysicianReadingStudy', + x00081062: 'PhysicianReadingStudyIDSequence', + x00081070: 'OperatorsName', + x00081072: 'OperatorIDSequence', + x00081080: 'AdmittingDiagnosesDescription', + x00081084: 'AdmittingDiagnosesCodeSequence', + x00081090: 'ManufacturersModelName', + x00081100: 'ReferencedResultsSequence', + x00081110: 'ReferencedStudySequence', + x00081111: 'ReferencedPerformedProcedureStepSequence', + x00081115: 'ReferencedSeriesSequence', + x00081120: 'ReferencedPatientSequence', + x00081125: 'ReferencedVisitSequence', + x00081130: 'ReferencedOverlaySequence', + x0008113a: 'ReferencedWaveformSequence', + x00081140: 'ReferencedImageSequence', + x00081145: 'ReferencedCurveSequence', + x0008114a: 'ReferencedInstanceSequence', + x00081150: 'ReferencedSOPClassUID', + x00081155: 'ReferencedSOPInstanceUID', + x0008115a: 'SOPClassesSupported', + x00081160: 'ReferencedFrameNumber', + x00081161: 'SimpleFrameList', + x00081162: 'CalculatedFrameList', + x00081163: 'TimeRange', + x00081164: 'FrameExtractionSequence', + x00081195: 'TransactionUID', + x00081197: 'FailureReason', + x00081198: 'FailedSOPSequence', + x00081199: 'ReferencedSOPSequence', + x00081200: 'OtherReferencedStudiesSequence', + x00081250: 'RelatedSeriesSequence', + x00082110: 'LossyImageCompressionRetired', + x00082111: 'DerivationDescription', + x00082112: 'SourceImageSequence', + x00082120: 'StageName', + x00082122: 'StageNumber', + x00082124: 'NumberOfStages', + x00082127: 'ViewName', + x00082128: 'ViewNumber', + x00082129: 'NumberOfEventTimers', + x0008212a: 'NumberOfViewsInStage', + x00082130: 'EventElapsedTimes', + x00082132: 'EventTimerNames', + x00082133: 'EventTimerSequence', + x00082134: 'EventTimeOffset', + x00082135: 'EventCodeSequence', + x00082142: 'StartTrim', + x00082143: 'StopTrim', + x00082144: 'RecommendedDisplayFrameRate', + x00082200: 'TransducerPosition', + x00082204: 'TransducerOrientation', + x00082208: 'AnatomicStructure', + x00082218: 'AnatomicRegionSequence', + x00082220: 'AnatomicRegionModifierSequence', + x00082228: 'PrimaryAnatomicStructureSequence', + x00082229: 'AnatomicStructureOrRegionSequence', + x00082230: 'AnatomicStructureModifierSequence', + x00082240: 'TransducerPositionSequence', + x00082242: 'TransducerPositionModifierSequence', + x00082244: 'TransducerOrientationSequence', + x00082246: 'TransducerOrientationModifierSeq', + x00082253: 'AnatomicEntrancePortalCodeSeqTrial', + x00082255: 'AnatomicApproachDirCodeSeqTrial', + x00082256: 'AnatomicPerspectiveDescrTrial', + x00082257: 'AnatomicPerspectiveCodeSeqTrial', + x00083001: 'AlternateRepresentationSequence', + x00083010: 'IrradiationEventUID', + x00084000: 'IdentifyingComments', + x00089007: 'FrameType', + x00089092: 'ReferencedImageEvidenceSequence', + x00089121: 'ReferencedRawDataSequence', + x00089123: 'CreatorVersionUID', + x00089124: 'DerivationImageSequence', + x00089154: 'SourceImageEvidenceSequence', + x00089205: 'PixelPresentation', + x00089206: 'VolumetricProperties', + x00089207: 'VolumeBasedCalculationTechnique', + x00089208: 'ComplexImageComponent', + x00089209: 'AcquisitionContrast', + x00089215: 'DerivationCodeSequence', + x00089237: 'GrayscalePresentationStateSequence', + x00089410: 'ReferencedOtherPlaneSequence', + x00089458: 'FrameDisplaySequence', + x00089459: 'RecommendedDisplayFrameRateInFloat', + x00089460: 'SkipFrameRangeFlag', + // x00091001: 'FullFidelity', + // x00091002: 'SuiteID', + // x00091004: 'ProductID', + // x00091027: 'ImageActualDate', + // x00091030: 'ServiceID', + // x00091031: 'MobileLocationNumber', + // x000910e3: 'EquipmentUID', + // x000910e6: 'GenesisVersionNow', + // x000910e7: 'ExamRecordChecksum', + // x000910e9: 'ActualSeriesDataTimeStamp', + x00100000: 'PatientGroupLength', + x00100010: 'PatientName', + x00100020: 'PatientID', + x00100021: 'IssuerOfPatientID', + x00100022: 'TypeOfPatientID', + x00100030: 'PatientBirthDate', + x00100032: 'PatientBirthTime', + x00100040: 'PatientSex', + x00100050: 'PatientInsurancePlanCodeSequence', + x00100101: 'PatientPrimaryLanguageCodeSeq', + x00100102: 'PatientPrimaryLanguageCodeModSeq', + x00101000: 'OtherPatientIDs', + x00101001: 'OtherPatientNames', + x00101002: 'OtherPatientIDsSequence', + x00101005: 'PatientBirthName', + x00101010: 'PatientAge', + x00101020: 'PatientSize', + x00101030: 'PatientWeight', + x00101040: 'PatientAddress', + x00101050: 'InsurancePlanIdentification', + x00101060: 'PatientMotherBirthName', + x00101080: 'MilitaryRank', + x00101081: 'BranchOfService', + x00101090: 'MedicalRecordLocator', + x00102000: 'MedicalAlerts', + x00102110: 'Allergies', + x00102150: 'CountryOfResidence', + x00102152: 'RegionOfResidence', + x00102154: 'PatientTelephoneNumbers', + x00102160: 'EthnicGroup', + x00102180: 'Occupation', + x001021a0: 'SmokingStatus', + x001021b0: 'AdditionalPatientHistory', + x001021c0: 'PregnancyStatus', + x001021d0: 'LastMenstrualDate', + x001021f0: 'PatientReligiousPreference', + x00102201: 'PatientSpeciesDescription', + x00102202: 'PatientSpeciesCodeSequence', + x00102203: 'PatientSexNeutered', + x00102210: 'AnatomicalOrientationType', + x00102292: 'PatientBreedDescription', + x00102293: 'PatientBreedCodeSequence', + x00102294: 'BreedRegistrationSequence', + x00102295: 'BreedRegistrationNumber', + x00102296: 'BreedRegistryCodeSequence', + x00102297: 'ResponsiblePerson', + x00102298: 'ResponsiblePersonRole', + x00102299: 'ResponsibleOrganization', + x00104000: 'PatientComments', + x00109431: 'ExaminedBodyThickness', + x00111010: 'PatientStatus', + x00120010: 'ClinicalTrialSponsorName', + x00120020: 'ClinicalTrialProtocolID', + x00120021: 'ClinicalTrialProtocolName', + x00120030: 'ClinicalTrialSiteID', + x00120031: 'ClinicalTrialSiteName', + x00120040: 'ClinicalTrialSubjectID', + x00120042: 'ClinicalTrialSubjectReadingID', + x00120050: 'ClinicalTrialTimePointID', + x00120051: 'ClinicalTrialTimePointDescription', + x00120060: 'ClinicalTrialCoordinatingCenter', + x00120062: 'PatientIdentityRemoved', + x00120063: 'DeidentificationMethod', + x00120064: 'DeidentificationMethodCodeSequence', + x00120071: 'ClinicalTrialSeriesID', + x00120072: 'ClinicalTrialSeriesDescription', + x00120084: 'DistributionType', + x00120085: 'ConsentForDistributionFlag', + x00180000: 'AcquisitionGroupLength', + x00180010: 'ContrastBolusAgent', + x00180012: 'ContrastBolusAgentSequence', + x00180014: 'ContrastBolusAdministrationRoute', + x00180015: 'BodyPartExamined', + x00180020: 'ScanningSequence', + x00180021: 'SequenceVariant', + x00180022: 'ScanOptions', + x00180023: 'MRAcquisitionType', + x00180024: 'SequenceName', + x00180025: 'AngioFlag', + x00180026: 'InterventionDrugInformationSeq', + x00180027: 'InterventionDrugStopTime', + x00180028: 'InterventionDrugDose', + x00180029: 'InterventionDrugSequence', + x0018002a: 'AdditionalDrugSequence', + x00180030: 'Radionuclide', + x00180031: 'Radiopharmaceutical', + x00180032: 'EnergyWindowCenterline', + x00180033: 'EnergyWindowTotalWidth', + x00180034: 'InterventionDrugName', + x00180035: 'InterventionDrugStartTime', + x00180036: 'InterventionSequence', + x00180037: 'TherapyType', + x00180038: 'InterventionStatus', + x00180039: 'TherapyDescription', + x0018003a: 'InterventionDescription', + x00180040: 'CineRate', + x00180042: 'InitialCineRunState', + x00180050: 'SliceThickness', + x00180060: 'KVP', + x00180070: 'CountsAccumulated', + x00180071: 'AcquisitionTerminationCondition', + x00180072: 'EffectiveDuration', + x00180073: 'AcquisitionStartCondition', + x00180074: 'AcquisitionStartConditionData', + x00180075: 'AcquisitionEndConditionData', + x00180080: 'RepetitionTime', + x00180081: 'EchoTime', + x00180082: 'InversionTime', + x00180083: 'NumberOfAverages', + x00180084: 'ImagingFrequency', + x00180085: 'ImagedNucleus', + x00180086: 'EchoNumber', + x00180087: 'MagneticFieldStrength', + x00180088: 'SpacingBetweenSlices', + x00180089: 'NumberOfPhaseEncodingSteps', + x00180090: 'DataCollectionDiameter', + x00180091: 'EchoTrainLength', + x00180093: 'PercentSampling', + x00180094: 'PercentPhaseFieldOfView', + x00180095: 'PixelBandwidth', + x00181000: 'DeviceSerialNumber', + x00181002: 'DeviceUID', + x00181003: 'DeviceID', + x00181004: 'PlateID', + x00181005: 'GeneratorID', + x00181006: 'GridID', + x00181007: 'CassetteID', + x00181008: 'GantryID', + x00181010: 'SecondaryCaptureDeviceID', + x00181011: 'HardcopyCreationDeviceID', + x00181012: 'DateOfSecondaryCapture', + x00181014: 'TimeOfSecondaryCapture', + x00181016: 'SecondaryCaptureDeviceManufacturer', + x00181017: 'HardcopyDeviceManufacturer', + x00181018: 'SecondaryCaptureDeviceModelName', + x00181019: 'SecondaryCaptureDeviceSoftwareVers', + x0018101a: 'HardcopyDeviceSoftwareVersion', + x0018101b: 'HardcopyDeviceModelName', + x00181020: 'SoftwareVersion', + x00181022: 'VideoImageFormatAcquired', + x00181023: 'DigitalImageFormatAcquired', + x00181030: 'ProtocolName', + x00181040: 'ContrastBolusRoute', + x00181041: 'ContrastBolusVolume', + x00181042: 'ContrastBolusStartTime', + x00181043: 'ContrastBolusStopTime', + x00181044: 'ContrastBolusTotalDose', + x00181045: 'SyringeCounts', + x00181046: 'ContrastFlowRate', + x00181047: 'ContrastFlowDuration', + x00181048: 'ContrastBolusIngredient', + x00181049: 'ContrastBolusConcentration', + x00181050: 'SpatialResolution', + x00181060: 'TriggerTime', + x00181061: 'TriggerSourceOrType', + x00181062: 'NominalInterval', + x00181063: 'FrameTime', + x00181064: 'CardiacFramingType', + x00181065: 'FrameTimeVector', + x00181066: 'FrameDelay', + x00181067: 'ImageTriggerDelay', + x00181068: 'MultiplexGroupTimeOffset', + x00181069: 'TriggerTimeOffset', + x0018106a: 'SynchronizationTrigger', + x0018106c: 'SynchronizationChannel', + x0018106e: 'TriggerSamplePosition', + x00181070: 'RadiopharmaceuticalRoute', + x00181071: 'RadiopharmaceuticalVolume', + x00181072: 'RadiopharmaceuticalStartTime', + x00181073: 'RadiopharmaceuticalStopTime', + x00181074: 'RadionuclideTotalDose', + x00181075: 'RadionuclideHalfLife', + x00181076: 'RadionuclidePositronFraction', + x00181077: 'RadiopharmaceuticalSpecActivity', + x00181078: 'RadiopharmaceuticalStartDateTime', + x00181079: 'RadiopharmaceuticalStopDateTime', + x00181080: 'BeatRejectionFlag', + x00181081: 'LowRRValue', + x00181082: 'HighRRValue', + x00181083: 'IntervalsAcquired', + x00181084: 'IntervalsRejected', + x00181085: 'PVCRejection', + x00181086: 'SkipBeats', + x00181088: 'HeartRate', + x00181090: 'CardiacNumberOfImages', + x00181094: 'TriggerWindow', + x00181100: 'ReconstructionDiameter', + x00181110: 'DistanceSourceToDetector', + x00181111: 'DistanceSourceToPatient', + x00181114: 'EstimatedRadiographicMagnification', + x00181120: 'GantryDetectorTilt', + x00181121: 'GantryDetectorSlew', + x00181130: 'TableHeight', + x00181131: 'TableTraverse', + x00181134: 'TableMotion', + x00181135: 'TableVerticalIncrement', + x00181136: 'TableLateralIncrement', + x00181137: 'TableLongitudinalIncrement', + x00181138: 'TableAngle', + x0018113a: 'TableType', + x00181140: 'RotationDirection', + x00181141: 'AngularPosition', + x00181142: 'RadialPosition', + x00181143: 'ScanArc', + x00181144: 'AngularStep', + x00181145: 'CenterOfRotationOffset', + x00181146: 'RotationOffset', + x00181147: 'FieldOfViewShape', + x00181149: 'FieldOfViewDimensions', + x00181150: 'ExposureTime', + x00181151: 'XRayTubeCurrent', + x00181152: 'Exposure', + x00181153: 'ExposureInMicroAmpSec', + x00181154: 'AveragePulseWidth', + x00181155: 'RadiationSetting', + x00181156: 'RectificationType', + x0018115a: 'RadiationMode', + x0018115e: 'ImageAreaDoseProduct', + x00181160: 'FilterType', + x00181161: 'TypeOfFilters', + x00181162: 'IntensifierSize', + x00181164: 'ImagerPixelSpacing', + x00181166: 'Grid', + x00181170: 'GeneratorPower', + x00181180: 'CollimatorGridName', + x00181181: 'CollimatorType', + x00181182: 'FocalDistance', + x00181183: 'XFocusCenter', + x00181184: 'YFocusCenter', + x00181190: 'FocalSpots', + x00181191: 'AnodeTargetMaterial', + x001811a0: 'BodyPartThickness', + x001811a2: 'CompressionForce', + x00181200: 'DateOfLastCalibration', + x00181201: 'TimeOfLastCalibration', + x00181210: 'ConvolutionKernel', + x00181240: 'UpperLowerPixelValues', + x00181242: 'ActualFrameDuration', + x00181243: 'CountRate', + x00181244: 'PreferredPlaybackSequencing', + x00181250: 'ReceiveCoilName', + x00181251: 'TransmitCoilName', + x00181260: 'PlateType', + x00181261: 'PhosphorType', + x00181300: 'ScanVelocity', + x00181301: 'WholeBodyTechnique', + x00181302: 'ScanLength', + x00181310: 'AcquisitionMatrix', + x00181312: 'InPlanePhaseEncodingDirection', + x00181314: 'FlipAngle', + x00181315: 'VariableFlipAngleFlag', + x00181316: 'SAR', + x00181318: 'DB-Dt', + x00181400: 'AcquisitionDeviceProcessingDescr', + x00181401: 'AcquisitionDeviceProcessingCode', + x00181402: 'CassetteOrientation', + x00181403: 'CassetteSize', + x00181404: 'ExposuresOnPlate', + x00181405: 'RelativeXRayExposure', + x00181450: 'ColumnAngulation', + x00181460: 'TomoLayerHeight', + x00181470: 'TomoAngle', + x00181480: 'TomoTime', + x00181490: 'TomoType', + x00181491: 'TomoClass', + x00181495: 'NumberOfTomosynthesisSourceImages', + x00181500: 'PositionerMotion', + x00181508: 'PositionerType', + x00181510: 'PositionerPrimaryAngle', + x00181511: 'PositionerSecondaryAngle', + x00181520: 'PositionerPrimaryAngleIncrement', + x00181521: 'PositionerSecondaryAngleIncrement', + x00181530: 'DetectorPrimaryAngle', + x00181531: 'DetectorSecondaryAngle', + x00181600: 'ShutterShape', + x00181602: 'ShutterLeftVerticalEdge', + x00181604: 'ShutterRightVerticalEdge', + x00181606: 'ShutterUpperHorizontalEdge', + x00181608: 'ShutterLowerHorizontalEdge', + x00181610: 'CenterOfCircularShutter', + x00181612: 'RadiusOfCircularShutter', + x00181620: 'VerticesOfPolygonalShutter', + x00181622: 'ShutterPresentationValue', + x00181623: 'ShutterOverlayGroup', + x00181624: 'ShutterPresentationColorCIELabVal', + x00181700: 'CollimatorShape', + x00181702: 'CollimatorLeftVerticalEdge', + x00181704: 'CollimatorRightVerticalEdge', + x00181706: 'CollimatorUpperHorizontalEdge', + x00181708: 'CollimatorLowerHorizontalEdge', + x00181710: 'CenterOfCircularCollimator', + x00181712: 'RadiusOfCircularCollimator', + x00181720: 'VerticesOfPolygonalCollimator', + x00181800: 'AcquisitionTimeSynchronized', + x00181801: 'TimeSource', + x00181802: 'TimeDistributionProtocol', + x00181803: 'NTPSourceAddress', + x00182001: 'PageNumberVector', + x00182002: 'FrameLabelVector', + x00182003: 'FramePrimaryAngleVector', + x00182004: 'FrameSecondaryAngleVector', + x00182005: 'SliceLocationVector', + x00182006: 'DisplayWindowLabelVector', + x00182010: 'NominalScannedPixelSpacing', + x00182020: 'DigitizingDeviceTransportDirection', + x00182030: 'RotationOfScannedFilm', + x00183100: 'IVUSAcquisition', + x00183101: 'IVUSPullbackRate', + x00183102: 'IVUSGatedRate', + x00183103: 'IVUSPullbackStartFrameNumber', + x00183104: 'IVUSPullbackStopFrameNumber', + x00183105: 'LesionNumber', + x00184000: 'AcquisitionComments', + x00185000: 'OutputPower', + x00185010: 'TransducerData', + x00185012: 'FocusDepth', + x00185020: 'ProcessingFunction', + x00185021: 'PostprocessingFunction', + x00185022: 'MechanicalIndex', + x00185024: 'BoneThermalIndex', + x00185026: 'CranialThermalIndex', + x00185027: 'SoftTissueThermalIndex', + x00185028: 'SoftTissueFocusThermalIndex', + x00185029: 'SoftTissueSurfaceThermalIndex', + x00185030: 'DynamicRange', + x00185040: 'TotalGain', + x00185050: 'DepthOfScanField', + x00185100: 'PatientPosition', + x00185101: 'ViewPosition', + x00185104: 'ProjectionEponymousNameCodeSeq', + x00185210: 'ImageTransformationMatrix', + x00185212: 'ImageTranslationVector', + x00186000: 'Sensitivity', + x00186011: 'SequenceOfUltrasoundRegions', + x00186012: 'RegionSpatialFormat', + x00186014: 'RegionDataType', + x00186016: 'RegionFlags', + x00186018: 'RegionLocationMinX0', + x0018601a: 'RegionLocationMinY0', + x0018601c: 'RegionLocationMaxX1', + x0018601e: 'RegionLocationMaxY1', + x00186020: 'ReferencePixelX0', + x00186022: 'ReferencePixelY0', + x00186024: 'PhysicalUnitsXDirection', + x00186026: 'PhysicalUnitsYDirection', + x00186028: 'ReferencePixelPhysicalValueX', + x0018602a: 'ReferencePixelPhysicalValueY', + x0018602c: 'PhysicalDeltaX', + x0018602e: 'PhysicalDeltaY', + x00186030: 'TransducerFrequency', + x00186031: 'TransducerType', + x00186032: 'PulseRepetitionFrequency', + x00186034: 'DopplerCorrectionAngle', + x00186036: 'SteeringAngle', + x00186038: 'DopplerSampleVolumeXPosRetired', + x00186039: 'DopplerSampleVolumeXPosition', + x0018603a: 'DopplerSampleVolumeYPosRetired', + x0018603b: 'DopplerSampleVolumeYPosition', + x0018603c: 'TMLinePositionX0Retired', + x0018603d: 'TMLinePositionX0', + x0018603e: 'TMLinePositionY0Retired', + x0018603f: 'TMLinePositionY0', + x00186040: 'TMLinePositionX1Retired', + x00186041: 'TMLinePositionX1', + x00186042: 'TMLinePositionY1Retired', + x00186043: 'TMLinePositionY1', + x00186044: 'PixelComponentOrganization', + x00186046: 'PixelComponentMask', + x00186048: 'PixelComponentRangeStart', + x0018604a: 'PixelComponentRangeStop', + x0018604c: 'PixelComponentPhysicalUnits', + x0018604e: 'PixelComponentDataType', + x00186050: 'NumberOfTableBreakPoints', + x00186052: 'TableOfXBreakPoints', + x00186054: 'TableOfYBreakPoints', + x00186056: 'NumberOfTableEntries', + x00186058: 'TableOfPixelValues', + x0018605a: 'TableOfParameterValues', + x00186060: 'RWaveTimeVector', + x00187000: 'DetectorConditionsNominalFlag', + x00187001: 'DetectorTemperature', + x00187004: 'DetectorType', + x00187005: 'DetectorConfiguration', + x00187006: 'DetectorDescription', + x00187008: 'DetectorMode', + x0018700a: 'DetectorID', + x0018700c: 'DateOfLastDetectorCalibration', + x0018700e: 'TimeOfLastDetectorCalibration', + x00187010: 'DetectorExposuresSinceCalibration', + x00187011: 'DetectorExposuresSinceManufactured', + x00187012: 'DetectorTimeSinceLastExposure', + x00187014: 'DetectorActiveTime', + x00187016: 'DetectorActiveOffsetFromExposure', + x0018701a: 'DetectorBinning', + x00187020: 'DetectorElementPhysicalSize', + x00187022: 'DetectorElementSpacing', + x00187024: 'DetectorActiveShape', + x00187026: 'DetectorActiveDimensions', + x00187028: 'DetectorActiveOrigin', + x0018702a: 'DetectorManufacturerName', + x0018702b: 'DetectorManufacturersModelName', + x00187030: 'FieldOfViewOrigin', + x00187032: 'FieldOfViewRotation', + x00187034: 'FieldOfViewHorizontalFlip', + x00187040: 'GridAbsorbingMaterial', + x00187041: 'GridSpacingMaterial', + x00187042: 'GridThickness', + x00187044: 'GridPitch', + x00187046: 'GridAspectRatio', + x00187048: 'GridPeriod', + x0018704c: 'GridFocalDistance', + x00187050: 'FilterMaterial', + x00187052: 'FilterThicknessMinimum', + x00187054: 'FilterThicknessMaximum', + x00187060: 'ExposureControlMode', + x00187062: 'ExposureControlModeDescription', + x00187064: 'ExposureStatus', + x00187065: 'PhototimerSetting', + x00188150: 'ExposureTimeInMicroSec', + x00188151: 'XRayTubeCurrentInMicroAmps', + x00189004: 'ContentQualification', + x00189005: 'PulseSequenceName', + x00189006: 'MRImagingModifierSequence', + x00189008: 'EchoPulseSequence', + x00189009: 'InversionRecovery', + x00189010: 'FlowCompensation', + x00189011: 'MultipleSpinEcho', + x00189012: 'MultiPlanarExcitation', + x00189014: 'PhaseContrast', + x00189015: 'TimeOfFlightContrast', + x00189016: 'Spoiling', + x00189017: 'SteadyStatePulseSequence', + x00189018: 'EchoPlanarPulseSequence', + x00189019: 'TagAngleFirstAxis', + x00189020: 'MagnetizationTransfer', + x00189021: 'T2Preparation', + x00189022: 'BloodSignalNulling', + x00189024: 'SaturationRecovery', + x00189025: 'SpectrallySelectedSuppression', + x00189026: 'SpectrallySelectedExcitation', + x00189027: 'SpatialPresaturation', + x00189028: 'Tagging', + x00189029: 'OversamplingPhase', + x00189030: 'TagSpacingFirstDimension', + x00189032: 'GeometryOfKSpaceTraversal', + x00189033: 'SegmentedKSpaceTraversal', + x00189034: 'RectilinearPhaseEncodeReordering', + x00189035: 'TagThickness', + x00189036: 'PartialFourierDirection', + x00189037: 'CardiacSynchronizationTechnique', + x00189041: 'ReceiveCoilManufacturerName', + x00189042: 'MRReceiveCoilSequence', + x00189043: 'ReceiveCoilType', + x00189044: 'QuadratureReceiveCoil', + x00189045: 'MultiCoilDefinitionSequence', + x00189046: 'MultiCoilConfiguration', + x00189047: 'MultiCoilElementName', + x00189048: 'MultiCoilElementUsed', + x00189049: 'MRTransmitCoilSequence', + x00189050: 'TransmitCoilManufacturerName', + x00189051: 'TransmitCoilType', + x00189052: 'SpectralWidth', + x00189053: 'ChemicalShiftReference', + x00189054: 'VolumeLocalizationTechnique', + x00189058: 'MRAcquisitionFrequencyEncodeSteps', + x00189059: 'Decoupling', + x00189060: 'DecoupledNucleus', + x00189061: 'DecouplingFrequency', + x00189062: 'DecouplingMethod', + x00189063: 'DecouplingChemicalShiftReference', + x00189064: 'KSpaceFiltering', + x00189065: 'TimeDomainFiltering', + x00189066: 'NumberOfZeroFills', + x00189067: 'BaselineCorrection', + x00189069: 'ParallelReductionFactorInPlane', + x00189070: 'CardiacRRIntervalSpecified', + x00189073: 'AcquisitionDuration', + x00189074: 'FrameAcquisitionDateTime', + x00189075: 'DiffusionDirectionality', + x00189076: 'DiffusionGradientDirectionSequence', + x00189077: 'ParallelAcquisition', + x00189078: 'ParallelAcquisitionTechnique', + x00189079: 'InversionTimes', + x00189080: 'MetaboliteMapDescription', + x00189081: 'PartialFourier', + x00189082: 'EffectiveEchoTime', + x00189083: 'MetaboliteMapCodeSequence', + x00189084: 'ChemicalShiftSequence', + x00189085: 'CardiacSignalSource', + x00189087: 'DiffusionBValue', + x00189089: 'DiffusionGradientOrientation', + x00189090: 'VelocityEncodingDirection', + x00189091: 'VelocityEncodingMinimumValue', + x00189093: 'NumberOfKSpaceTrajectories', + x00189094: 'CoverageOfKSpace', + x00189095: 'SpectroscopyAcquisitionPhaseRows', + x00189096: 'ParallelReductFactorInPlaneRetired', + x00189098: 'TransmitterFrequency', + x00189100: 'ResonantNucleus', + x00189101: 'FrequencyCorrection', + x00189103: 'MRSpectroscopyFOV-GeometrySequence', + x00189104: 'SlabThickness', + x00189105: 'SlabOrientation', + x00189106: 'MidSlabPosition', + x00189107: 'MRSpatialSaturationSequence', + x00189112: 'MRTimingAndRelatedParametersSeq', + x00189114: 'MREchoSequence', + x00189115: 'MRModifierSequence', + x00189117: 'MRDiffusionSequence', + x00189118: 'CardiacTriggerSequence', + x00189119: 'MRAveragesSequence', + x00189125: 'MRFOV-GeometrySequence', + x00189126: 'VolumeLocalizationSequence', + x00189127: 'SpectroscopyAcquisitionDataColumns', + x00189147: 'DiffusionAnisotropyType', + x00189151: 'FrameReferenceDateTime', + x00189152: 'MRMetaboliteMapSequence', + x00189155: 'ParallelReductionFactorOutOfPlane', + x00189159: 'SpectroscopyOutOfPlanePhaseSteps', + x00189166: 'BulkMotionStatus', + x00189168: 'ParallelReductionFactSecondInPlane', + x00189169: 'CardiacBeatRejectionTechnique', + x00189170: 'RespiratoryMotionCompTechnique', + x00189171: 'RespiratorySignalSource', + x00189172: 'BulkMotionCompensationTechnique', + x00189173: 'BulkMotionSignalSource', + x00189174: 'ApplicableSafetyStandardAgency', + x00189175: 'ApplicableSafetyStandardDescr', + x00189176: 'OperatingModeSequence', + x00189177: 'OperatingModeType', + x00189178: 'OperatingMode', + x00189179: 'SpecificAbsorptionRateDefinition', + x00189180: 'GradientOutputType', + x00189181: 'SpecificAbsorptionRateValue', + x00189182: 'GradientOutput', + x00189183: 'FlowCompensationDirection', + x00189184: 'TaggingDelay', + x00189185: 'RespiratoryMotionCompTechDescr', + x00189186: 'RespiratorySignalSourceID', + x00189195: 'ChemicalShiftsMinIntegrateLimitHz', + x00189196: 'ChemicalShiftsMaxIntegrateLimitHz', + x00189197: 'MRVelocityEncodingSequence', + x00189198: 'FirstOrderPhaseCorrection', + x00189199: 'WaterReferencedPhaseCorrection', + x00189200: 'MRSpectroscopyAcquisitionType', + x00189214: 'RespiratoryCyclePosition', + x00189217: 'VelocityEncodingMaximumValue', + x00189218: 'TagSpacingSecondDimension', + x00189219: 'TagAngleSecondAxis', + x00189220: 'FrameAcquisitionDuration', + x00189226: 'MRImageFrameTypeSequence', + x00189227: 'MRSpectroscopyFrameTypeSequence', + x00189231: 'MRAcqPhaseEncodingStepsInPlane', + x00189232: 'MRAcqPhaseEncodingStepsOutOfPlane', + x00189234: 'SpectroscopyAcqPhaseColumns', + x00189236: 'CardiacCyclePosition', + x00189239: 'SpecificAbsorptionRateSequence', + x00189240: 'RFEchoTrainLength', + x00189241: 'GradientEchoTrainLength', + x00189295: 'ChemicalShiftsMinIntegrateLimitPPM', + x00189296: 'ChemicalShiftsMaxIntegrateLimitPPM', + x00189301: 'CTAcquisitionTypeSequence', + x00189302: 'AcquisitionType', + x00189303: 'TubeAngle', + x00189304: 'CTAcquisitionDetailsSequence', + x00189305: 'RevolutionTime', + x00189306: 'SingleCollimationWidth', + x00189307: 'TotalCollimationWidth', + x00189308: 'CTTableDynamicsSequence', + x00189309: 'TableSpeed', + x00189310: 'TableFeedPerRotation', + x00189311: 'SpiralPitchFactor', + x00189312: 'CTGeometrySequence', + x00189313: 'DataCollectionCenterPatient', + x00189314: 'CTReconstructionSequence', + x00189315: 'ReconstructionAlgorithm', + x00189316: 'ConvolutionKernelGroup', + x00189317: 'ReconstructionFieldOfView', + x00189318: 'ReconstructionTargetCenterPatient', + x00189319: 'ReconstructionAngle', + x00189320: 'ImageFilter', + x00189321: 'CTExposureSequence', + x00189322: 'ReconstructionPixelSpacing', + x00189323: 'ExposureModulationType', + x00189324: 'EstimatedDoseSaving', + x00189325: 'CTXRayDetailsSequence', + x00189326: 'CTPositionSequence', + x00189327: 'TablePosition', + x00189328: 'ExposureTimeInMilliSec', + x00189329: 'CTImageFrameTypeSequence', + x00189330: 'XRayTubeCurrentInMilliAmps', + x00189332: 'ExposureInMilliAmpSec', + x00189333: 'ConstantVolumeFlag', + x00189334: 'FluoroscopyFlag', + x00189335: 'SourceToDataCollectionCenterDist', + x00189337: 'ContrastBolusAgentNumber', + x00189338: 'ContrastBolusIngredientCodeSeq', + x00189340: 'ContrastAdministrationProfileSeq', + x00189341: 'ContrastBolusUsageSequence', + x00189342: 'ContrastBolusAgentAdministered', + x00189343: 'ContrastBolusAgentDetected', + x00189344: 'ContrastBolusAgentPhase', + x00189345: 'CTDIvol', + x00189346: 'CTDIPhantomTypeCodeSequence', + x00189351: 'CalciumScoringMassFactorPatient', + x00189352: 'CalciumScoringMassFactorDevice', + x00189353: 'EnergyWeightingFactor', + x00189360: 'CTAdditionalXRaySourceSequence', + x00189401: 'ProjectionPixelCalibrationSequence', + x00189402: 'DistanceSourceToIsocenter', + x00189403: 'DistanceObjectToTableTop', + x00189404: 'ObjectPixelSpacingInCenterOfBeam', + x00189405: 'PositionerPositionSequence', + x00189406: 'TablePositionSequence', + x00189407: 'CollimatorShapeSequence', + x00189412: 'XA-XRFFrameCharacteristicsSequence', + x00189417: 'FrameAcquisitionSequence', + x00189420: 'XRayReceptorType', + x00189423: 'AcquisitionProtocolName', + x00189424: 'AcquisitionProtocolDescription', + x00189425: 'ContrastBolusIngredientOpaque', + x00189426: 'DistanceReceptorPlaneToDetHousing', + x00189427: 'IntensifierActiveShape', + x00189428: 'IntensifierActiveDimensions', + x00189429: 'PhysicalDetectorSize', + x00189430: 'PositionOfIsocenterProjection', + x00189432: 'FieldOfViewSequence', + x00189433: 'FieldOfViewDescription', + x00189434: 'ExposureControlSensingRegionsSeq', + x00189435: 'ExposureControlSensingRegionShape', + x00189436: 'ExposureControlSensRegionLeftEdge', + x00189437: 'ExposureControlSensRegionRightEdge', + x00189440: 'CenterOfCircExposControlSensRegion', + x00189441: 'RadiusOfCircExposControlSensRegion', + x00189447: 'ColumnAngulationPatient', + x00189449: 'BeamAngle', + x00189451: 'FrameDetectorParametersSequence', + x00189452: 'CalculatedAnatomyThickness', + x00189455: 'CalibrationSequence', + x00189456: 'ObjectThicknessSequence', + x00189457: 'PlaneIdentification', + x00189461: 'FieldOfViewDimensionsInFloat', + x00189462: 'IsocenterReferenceSystemSequence', + x00189463: 'PositionerIsocenterPrimaryAngle', + x00189464: 'PositionerIsocenterSecondaryAngle', + x00189465: 'PositionerIsocenterDetRotAngle', + x00189466: 'TableXPositionToIsocenter', + x00189467: 'TableYPositionToIsocenter', + x00189468: 'TableZPositionToIsocenter', + x00189469: 'TableHorizontalRotationAngle', + x00189470: 'TableHeadTiltAngle', + x00189471: 'TableCradleTiltAngle', + x00189472: 'FrameDisplayShutterSequence', + x00189473: 'AcquiredImageAreaDoseProduct', + x00189474: 'CArmPositionerTabletopRelationship', + x00189476: 'XRayGeometrySequence', + x00189477: 'IrradiationEventIDSequence', + x00189504: 'XRay3DFrameTypeSequence', + x00189506: 'ContributingSourcesSequence', + x00189507: 'XRay3DAcquisitionSequence', + x00189508: 'PrimaryPositionerScanArc', + x00189509: 'SecondaryPositionerScanArc', + x00189510: 'PrimaryPositionerScanStartAngle', + x00189511: 'SecondaryPositionerScanStartAngle', + x00189514: 'PrimaryPositionerIncrement', + x00189515: 'SecondaryPositionerIncrement', + x00189516: 'StartAcquisitionDateTime', + x00189517: 'EndAcquisitionDateTime', + x00189524: 'ApplicationName', + x00189525: 'ApplicationVersion', + x00189526: 'ApplicationManufacturer', + x00189527: 'AlgorithmType', + x00189528: 'AlgorithmDescription', + x00189530: 'XRay3DReconstructionSequence', + x00189531: 'ReconstructionDescription', + x00189538: 'PerProjectionAcquisitionSequence', + x00189601: 'DiffusionBMatrixSequence', + x00189602: 'DiffusionBValueXX', + x00189603: 'DiffusionBValueXY', + x00189604: 'DiffusionBValueXZ', + x00189605: 'DiffusionBValueYY', + x00189606: 'DiffusionBValueYZ', + x00189607: 'DiffusionBValueZZ', + x00189701: 'DecayCorrectionDateTime', + x00189715: 'StartDensityThreshold', + x00189722: 'TerminationTimeThreshold', + x00189725: 'DetectorGeometry', + x00189727: 'AxialDetectorDimension', + x00189735: 'PETPositionSequence', + x00189739: 'NumberOfIterations', + x00189740: 'NumberOfSubsets', + x00189751: 'PETFrameTypeSequence', + x00189756: 'ReconstructionType', + x00189758: 'DecayCorrected', + x00189759: 'AttenuationCorrected', + x00189760: 'ScatterCorrected', + x00189761: 'DeadTimeCorrected', + x00189762: 'GantryMotionCorrected', + x00189763: 'PatientMotionCorrected', + x00189765: 'RandomsCorrected', + x00189767: 'SensitivityCalibrated', + x00189801: 'DepthsOfFocus', + x00189804: 'ExclusionStartDatetime', + x00189805: 'ExclusionDuration', + x00189807: 'ImageDataTypeSequence', + x00189808: 'DataType', + x0018980b: 'AliasedDataType', + x0018a001: 'ContributingEquipmentSequence', + x0018a002: 'ContributionDateTime', + x0018a003: 'ContributionDescription', + // x00191002: 'NumberOfCellsIInDetector', + // x00191003: 'CellNumberAtTheta', + // x00191004: 'CellSpacing', + // x0019100f: 'HorizFrameOfRef', + // x00191011: 'SeriesContrast', + // x00191012: 'LastPseq', + // x00191013: 'StartNumberForBaseline', + // x00191014: 'EndNumberForBaseline', + // x00191015: 'StartNumberForEnhancedScans', + // x00191016: 'EndNumberForEnhancedScans', + // x00191017: 'SeriesPlane', + // x00191018: 'FirstScanRas', + // x00191019: 'FirstScanLocation', + // x0019101a: 'LastScanRas', + // x0019101b: 'LastScanLoc', + // x0019101e: 'DisplayFieldOfView', + // x00191023: 'TableSpeed', + // x00191024: 'MidScanTime', + // x00191025: 'MidScanFlag', + // x00191026: 'DegreesOfAzimuth', + // x00191027: 'GantryPeriod', + // x0019102a: 'XRayOnPosition', + // x0019102b: 'XRayOffPosition', + // x0019102c: 'NumberOfTriggers', + // x0019102e: 'AngleOfFirstView', + // x0019102f: 'TriggerFrequency', + // x00191039: 'ScanFOVType', + // x00191040: 'StatReconFlag', + // x00191041: 'ComputeType', + // x00191042: 'SegmentNumber', + // x00191043: 'TotalSegmentsRequested', + // x00191044: 'InterscanDelay', + // x00191047: 'ViewCompressionFactor', + // x0019104a: 'TotalNoOfRefChannels', + // x0019104b: 'DataSizeForScanData', + // x00191052: 'ReconPostProcflag', + // x00191057: 'CTWaterNumber', + // x00191058: 'CTBoneNumber', + // x0019105a: 'AcquisitionDuration', + // x0019105e: 'NumberOfChannels', + // x0019105f: 'IncrementBetweenChannels', + // x00191060: 'StartingView', + // x00191061: 'NumberOfViews', + // x00191062: 'IncrementBetweenViews', + // x0019106a: 'DependantOnNoViewsProcessed', + // x0019106b: 'FieldOfViewInDetectorCells', + // x00191070: 'ValueOfBackProjectionButton', + // x00191071: 'SetIfFatqEstimatesWereUsed', + // x00191072: 'ZChanAvgOverViews', + // x00191073: 'AvgOfLeftRefChansOverViews', + // x00191074: 'MaxLeftChanOverViews', + // x00191075: 'AvgOfRightRefChansOverViews', + // x00191076: 'MaxRightChanOverViews', + // x0019107d: 'SecondEcho', + // x0019107e: 'NumberOfEchoes', + // x0019107f: 'TableDelta', + // x00191081: 'Contiguous', + // x00191084: 'PeakSAR', + // x00191085: 'MonitorSAR', + // x00191087: 'CardiacRepetitionTime', + // x00191088: 'ImagesPerCardiacCycle', + // x0019108a: 'ActualReceiveGainAnalog', + // x0019108b: 'ActualReceiveGainDigital', + // x0019108d: 'DelayAfterTrigger', + // x0019108f: 'Swappf', + // x00191090: 'PauseInterval', + // x00191091: 'PulseTime', + // x00191092: 'SliceOffsetOnFreqAxis', + // x00191093: 'CenterFrequency', + // x00191094: 'TransmitGain', + // x00191095: 'AnalogReceiverGain', + // x00191096: 'DigitalReceiverGain', + // x00191097: 'BitmapDefiningCVs', + // x00191098: 'CenterFreqMethod', + // x0019109b: 'PulseSeqMode', + // x0019109c: 'PulseSeqName', + // x0019109d: 'PulseSeqDate', + // x0019109e: 'InternalPulseSeqName', + // x0019109f: 'TransmittingCoil', + // x001910a0: 'SurfaceCoilType', + // x001910a1: 'ExtremityCoilFlag', + // x001910a2: 'RawDataRunNumber', + // x001910a3: 'CalibratedFieldStrength', + // x001910a4: 'SATFatWaterBone', + // x001910a5: 'ReceiveBandwidth', + // x001910a7: 'UserData01', + // x001910a8: 'UserData02', + // x001910a9: 'UserData03', + // x001910aa: 'UserData04', + // x001910ab: 'UserData05', + // x001910ac: 'UserData06', + // x001910ad: 'UserData07', + // x001910ae: 'UserData08', + // x001910af: 'UserData09', + // x001910b0: 'UserData10', + // x001910b1: 'UserData11', + // x001910b2: 'UserData12', + // x001910b3: 'UserData13', + // x001910b4: 'UserData14', + // x001910b5: 'UserData15', + // x001910b6: 'UserData16', + // x001910b7: 'UserData17', + // x001910b8: 'UserData18', + // x001910b9: 'UserData19', + // x001910ba: 'UserData20', + // x001910bb: 'UserData21', + // x001910bc: 'UserData22', + // x001910bd: 'UserData23', + // x001910be: 'ProjectionAngle', + // x001910c0: 'SaturationPlanes', + // x001910c1: 'SurfaceCoilIntensity', + // x001910c2: 'SATLocationR', + // x001910c3: 'SATLocationL', + // x001910c4: 'SATLocationA', + // x001910c5: 'SATLocationP', + // x001910c6: 'SATLocationH', + // x001910c7: 'SATLocationF', + // x001910c8: 'SATThicknessR-L', + // x001910c9: 'SATThicknessA-P', + // x001910ca: 'SATThicknessH-F', + // x001910cb: 'PrescribedFlowAxis', + // x001910cc: 'VelocityEncoding', + // x001910cd: 'ThicknessDisclaimer', + // x001910ce: 'PrescanType', + // x001910cf: 'PrescanStatus', + // x001910d0: 'RawDataType', + // x001910d2: 'ProjectionAlgorithm', + // x001910d3: 'ProjectionAlgorithm', + // x001910d5: 'FractionalEcho', + // x001910d6: 'PrepPulse', + // x001910d7: 'CardiacPhases', + // x001910d8: 'VariableEchoflag', + // x001910d9: 'ConcatenatedSAT', + // x001910da: 'ReferenceChannelUsed', + // x001910db: 'BackProjectorCoefficient', + // x001910dc: 'PrimarySpeedCorrectionUsed', + // x001910dd: 'OverrangeCorrectionUsed', + // x001910de: 'DynamicZAlphaValue', + // x001910df: 'UserData', + // x001910e0: 'UserData', + // x001910e2: 'VelocityEncodeScale', + // x001910f2: 'FastPhases', + // x001910f9: 'TransmissionGain', + x00200000: 'RelationshipGroupLength', + x0020000d: 'StudyInstanceUID', + x0020000e: 'SeriesInstanceUID', + x00200010: 'StudyID', + x00200011: 'SeriesNumber', + x00200012: 'AcquisitionNumber', + x00200013: 'InstanceNumber', + x00200014: 'IsotopeNumber', + x00200015: 'PhaseNumber', + x00200016: 'IntervalNumber', + x00200017: 'TimeSlotNumber', + x00200018: 'AngleNumber', + x00200019: 'ItemNumber', + x00200020: 'PatientOrientation', + x00200022: 'OverlayNumber', + x00200024: 'CurveNumber', + x00200026: 'LookupTableNumber', + x00200030: 'ImagePosition', + x00200032: 'ImagePositionPatient', + x00200035: 'ImageOrientation', + x00200037: 'ImageOrientationPatient', + x00200050: 'Location', + x00200052: 'FrameOfReferenceUID', + x00200060: 'Laterality', + x00200062: 'ImageLaterality', + x00200070: 'ImageGeometryType', + x00200080: 'MaskingImage', + x00200100: 'TemporalPositionIdentifier', + x00200105: 'NumberOfTemporalPositions', + x00200110: 'TemporalResolution', + x00200200: 'SynchronizationFrameOfReferenceUID', + x00201000: 'SeriesInStudy', + x00201001: 'AcquisitionsInSeries', + x00201002: 'ImagesInAcquisition', + x00201003: 'ImagesInSeries', + x00201004: 'AcquisitionsInStudy', + x00201005: 'ImagesInStudy', + x00201020: 'Reference', + x00201040: 'PositionReferenceIndicator', + x00201041: 'SliceLocation', + x00201070: 'OtherStudyNumbers', + x00201200: 'NumberOfPatientRelatedStudies', + x00201202: 'NumberOfPatientRelatedSeries', + x00201204: 'NumberOfPatientRelatedInstances', + x00201206: 'NumberOfStudyRelatedSeries', + x00201208: 'NumberOfStudyRelatedInstances', + x00201209: 'NumberOfSeriesRelatedInstances', + x002031xx: 'SourceImageIDs', + x00203401: 'ModifyingDeviceID', + x00203402: 'ModifiedImageID', + x00203403: 'ModifiedImageDate', + x00203404: 'ModifyingDeviceManufacturer', + x00203405: 'ModifiedImageTime', + x00203406: 'ModifiedImageDescription', + x00204000: 'ImageComments', + x00205000: 'OriginalImageIdentification', + x00205002: 'OriginalImageIdentNomenclature', + x00209056: 'StackID', + x00209057: 'InStackPositionNumber', + x00209071: 'FrameAnatomySequence', + x00209072: 'FrameLaterality', + x00209111: 'FrameContentSequence', + x00209113: 'PlanePositionSequence', + x00209116: 'PlaneOrientationSequence', + x00209128: 'TemporalPositionIndex', + x00209153: 'TriggerDelayTime', + x00209156: 'FrameAcquisitionNumber', + x00209157: 'DimensionIndexValues', + x00209158: 'FrameComments', + x00209161: 'ConcatenationUID', + x00209162: 'InConcatenationNumber', + x00209163: 'InConcatenationTotalNumber', + x00209164: 'DimensionOrganizationUID', + x00209165: 'DimensionIndexPointer', + x00209167: 'FunctionalGroupPointer', + x00209213: 'DimensionIndexPrivateCreator', + x00209221: 'DimensionOrganizationSequence', + x00209222: 'DimensionIndexSequence', + x00209228: 'ConcatenationFrameOffsetNumber', + x00209238: 'FunctionalGroupPrivateCreator', + x00209241: 'NominalPercentageOfCardiacPhase', + x00209245: 'NominalPercentOfRespiratoryPhase', + x00209246: 'StartingRespiratoryAmplitude', + x00209247: 'StartingRespiratoryPhase', + x00209248: 'EndingRespiratoryAmplitude', + x00209249: 'EndingRespiratoryPhase', + x00209250: 'RespiratoryTriggerType', + x00209251: 'RRIntervalTimeNominal', + x00209252: 'ActualCardiacTriggerDelayTime', + x00209253: 'RespiratorySynchronizationSequence', + x00209254: 'RespiratoryIntervalTime', + x00209255: 'NominalRespiratoryTriggerDelayTime', + x00209256: 'RespiratoryTriggerDelayThreshold', + x00209257: 'ActualRespiratoryTriggerDelayTime', + x00209301: 'ImagePositionVolume', + x00209302: 'ImageOrientationVolume', + x00209308: 'ApexPosition', + x00209421: 'DimensionDescriptionLabel', + x00209450: 'PatientOrientationInFrameSequence', + x00209453: 'FrameLabel', + x00209518: 'AcquisitionIndex', + x00209529: 'ContributingSOPInstancesRefSeq', + x00209536: 'ReconstructionIndex', + // x00211003: 'SeriesFromWhichPrescribed', + // x00211005: 'GenesisVersionNow', + // x00211007: 'SeriesRecordChecksum', + // x00211018: 'GenesisVersionNow', + // x00211019: 'AcqreconRecordChecksum', + // x00211020: 'TableStartLocation', + // x00211035: 'SeriesFromWhichPrescribed', + // x00211036: 'ImageFromWhichPrescribed', + // x00211037: 'ScreenFormat', + // x0021104a: 'AnatomicalReferenceForScout', + // x0021104f: 'LocationsInAcquisition', + // x00211050: 'GraphicallyPrescribed', + // x00211051: 'RotationFromSourceXRot', + // x00211052: 'RotationFromSourceYRot', + // x00211053: 'RotationFromSourceZRot', + // x00211054: 'ImagePosition', + // x00211055: 'ImageOrientation', + // x00211056: 'IntegerSlop', + // x00211057: 'IntegerSlop', + // x00211058: 'IntegerSlop', + // x00211059: 'IntegerSlop', + // x0021105a: 'IntegerSlop', + // x0021105b: 'FloatSlop', + // x0021105c: 'FloatSlop', + // x0021105d: 'FloatSlop', + // x0021105e: 'FloatSlop', + // x0021105f: 'FloatSlop', + // x00211081: 'AutoWindowLevelAlpha', + // x00211082: 'AutoWindowLevelBeta', + // x00211083: 'AutoWindowLevelWindow', + // x00211084: 'ToWindowLevelLevel', + // x00211090: 'TubeFocalSpotPosition', + // x00211091: 'BiopsyPosition', + // x00211092: 'BiopsyTLocation', + // x00211093: 'BiopsyRefLocation', + x00220001: 'LightPathFilterPassThroughWavelen', + x00220002: 'LightPathFilterPassBand', + x00220003: 'ImagePathFilterPassThroughWavelen', + x00220004: 'ImagePathFilterPassBand', + x00220005: 'PatientEyeMovementCommanded', + x00220006: 'PatientEyeMovementCommandCodeSeq', + x00220007: 'SphericalLensPower', + x00220008: 'CylinderLensPower', + x00220009: 'CylinderAxis', + x0022000a: 'EmmetropicMagnification', + x0022000b: 'IntraOcularPressure', + x0022000c: 'HorizontalFieldOfView', + x0022000d: 'PupilDilated', + x0022000e: 'DegreeOfDilation', + x00220010: 'StereoBaselineAngle', + x00220011: 'StereoBaselineDisplacement', + x00220012: 'StereoHorizontalPixelOffset', + x00220013: 'StereoVerticalPixelOffset', + x00220014: 'StereoRotation', + x00220015: 'AcquisitionDeviceTypeCodeSequence', + x00220016: 'IlluminationTypeCodeSequence', + x00220017: 'LightPathFilterTypeStackCodeSeq', + x00220018: 'ImagePathFilterTypeStackCodeSeq', + x00220019: 'LensesCodeSequence', + x0022001a: 'ChannelDescriptionCodeSequence', + x0022001b: 'RefractiveStateSequence', + x0022001c: 'MydriaticAgentCodeSequence', + x0022001d: 'RelativeImagePositionCodeSequence', + x00220020: 'StereoPairsSequence', + x00220021: 'LeftImageSequence', + x00220022: 'RightImageSequence', + x00220030: 'AxialLengthOfTheEye', + x00220031: 'OphthalmicFrameLocationSequence', + x00220032: 'ReferenceCoordinates', + x00220035: 'DepthSpatialResolution', + x00220036: 'MaximumDepthDistortion', + x00220037: 'AlongScanSpatialResolution', + x00220038: 'MaximumAlongScanDistortion', + x00220039: 'OphthalmicImageOrientation', + x00220041: 'DepthOfTransverseImage', + x00220042: 'MydriaticAgentConcUnitsSeq', + x00220048: 'AcrossScanSpatialResolution', + x00220049: 'MaximumAcrossScanDistortion', + x0022004e: 'MydriaticAgentConcentration', + x00220055: 'IlluminationWaveLength', + x00220056: 'IlluminationPower', + x00220057: 'IlluminationBandwidth', + x00220058: 'MydriaticAgentSequence', + // x00231001: 'NumberOfSeriesInStudy', + // x00231002: 'NumberOfUnarchivedSeries', + // x00231010: 'ReferenceImageField', + // x00231050: 'SummaryImage', + // x00231070: 'StartTimeSecsInFirstAxial', + // x00231074: 'NoofUpdatesToHeader', + // x0023107d: 'IndicatesIfTheStudyHasCompleteInfo', + // x00251006: 'LastPulseSequenceUsed', + // x00251007: 'ImagesInSeries', + // x00251010: 'LandmarkCounter', + // x00251011: 'NumberOfAcquisitions', + // x00251014: 'IndicatesNoofUpdatesToHeader', + // x00251017: 'SeriesCompleteFlag', + // x00251018: 'NumberOfImagesArchived', + // x00251019: 'LastImageNumberUsed', + // x0025101a: 'PrimaryReceiverSuiteAndHost', + // x00271006: 'ImageArchiveFlag', + // x00271010: 'ScoutType', + // x0027101c: 'VmaMamp', + // x0027101d: 'VmaPhase', + // x0027101e: 'VmaMod', + // x0027101f: 'VmaClip', + // x00271020: 'SmartScanOnOffFlag', + // x00271030: 'ForeignImageRevision', + // x00271031: 'ImagingMode', + // x00271032: 'PulseSequence', + // x00271033: 'ImagingOptions', + // x00271035: 'PlaneType', + // x00271036: 'ObliquePlane', + // x00271040: 'RASLetterOfImageLocation', + // x00271041: 'ImageLocation', + // x00271042: 'CenterRCoordOfPlaneImage', + // x00271043: 'CenterACoordOfPlaneImage', + // x00271044: 'CenterSCoordOfPlaneImage', + // x00271045: 'NormalRCoord', + // x00271046: 'NormalACoord', + // x00271047: 'NormalSCoord', + // x00271048: 'RCoordOfTopRightCorner', + // x00271049: 'ACoordOfTopRightCorner', + // x0027104a: 'SCoordOfTopRightCorner', + // x0027104b: 'RCoordOfBottomRightCorner', + // x0027104c: 'ACoordOfBottomRightCorner', + // x0027104d: 'SCoordOfBottomRightCorner', + // x00271050: 'TableStartLocation', + // x00271051: 'TableEndLocation', + // x00271052: 'RASLetterForSideOfImage', + // x00271053: 'RASLetterForAnteriorPosterior', + // x00271054: 'RASLetterForScoutStartLoc', + // x00271055: 'RASLetterForScoutEndLoc', + // x00271060: 'ImageDimensionX', + // x00271061: 'ImageDimensionY', + // x00271062: 'NumberOfExcitations', + x00280000: 'ImagePresentationGroupLength', + x00280002: 'SamplesPerPixel', + x00280003: 'SamplesPerPixelUsed', + x00280004: 'PhotometricInterpretation', + x00280005: 'ImageDimensions', + x00280006: 'PlanarConfiguration', + x00280008: 'NumberOfFrames', + x00280009: 'FrameIncrementPointer', + x0028000a: 'FrameDimensionPointer', + x00280010: 'Rows', + x00280011: 'Columns', + x00280012: 'Planes', + x00280014: 'UltrasoundColorDataPresent', + x00280030: 'PixelSpacing', + x00280031: 'ZoomFactor', + x00280032: 'ZoomCenter', + x00280034: 'PixelAspectRatio', + x00280040: 'ImageFormat', + x00280050: 'ManipulatedImage', + x00280051: 'CorrectedImage', + x0028005f: 'CompressionRecognitionCode', + x00280060: 'CompressionCode', + x00280061: 'CompressionOriginator', + x00280062: 'CompressionLabel', + x00280063: 'CompressionDescription', + x00280065: 'CompressionSequence', + x00280066: 'CompressionStepPointers', + x00280068: 'RepeatInterval', + x00280069: 'BitsGrouped', + x00280070: 'PerimeterTable', + x00280071: 'PerimeterValue', + x00280080: 'PredictorRows', + x00280081: 'PredictorColumns', + x00280082: 'PredictorConstants', + x00280090: 'BlockedPixels', + x00280091: 'BlockRows', + x00280092: 'BlockColumns', + x00280093: 'RowOverlap', + x00280094: 'ColumnOverlap', + x00280100: 'BitsAllocated', + x00280101: 'BitsStored', + x00280102: 'HighBit', + x00280103: 'PixelRepresentation', + x00280104: 'SmallestValidPixelValue', + x00280105: 'LargestValidPixelValue', + x00280106: 'SmallestImagePixelValue', + x00280107: 'LargestImagePixelValue', + x00280108: 'SmallestPixelValueInSeries', + x00280109: 'LargestPixelValueInSeries', + x00280110: 'SmallestImagePixelValueInPlane', + x00280111: 'LargestImagePixelValueInPlane', + x00280120: 'PixelPaddingValue', + x00280121: 'PixelPaddingRangeLimit', + x00280200: 'ImageLocation', + x00280300: 'QualityControlImage', + x00280301: 'BurnedInAnnotation', + x00280400: 'TransformLabel', + x00280401: 'TransformVersionNumber', + x00280402: 'NumberOfTransformSteps', + x00280403: 'SequenceOfCompressedData', + x00280404: 'DetailsOfCoefficients', + x002804x2: 'CoefficientCoding', + x002804x3: 'CoefficientCodingPointers', + x00280700: 'DCTLabel', + x00280701: 'DataBlockDescription', + x00280702: 'DataBlock', + x00280710: 'NormalizationFactorFormat', + x00280720: 'ZonalMapNumberFormat', + x00280721: 'ZonalMapLocation', + x00280722: 'ZonalMapFormat', + x00280730: 'AdaptiveMapFormat', + x00280740: 'CodeNumberFormat', + x002808x0: 'CodeLabel', + x002808x2: 'NumberOfTables', + x002808x3: 'CodeTableLocation', + x002808x4: 'BitsForCodeWord', + x002808x8: 'ImageDataLocation', + x00280a02: 'PixelSpacingCalibrationType', + x00280a04: 'PixelSpacingCalibrationDescription', + x00281040: 'PixelIntensityRelationship', + x00281041: 'PixelIntensityRelationshipSign', + x00281050: 'WindowCenter', + x00281051: 'WindowWidth', + x00281052: 'RescaleIntercept', + x00281053: 'RescaleSlope', + x00281054: 'RescaleType', + x00281055: 'WindowCenterAndWidthExplanation', + x00281056: 'VOI_LUTFunction', + x00281080: 'GrayScale', + x00281090: 'RecommendedViewingMode', + x00281100: 'GrayLookupTableDescriptor', + x00281101: 'RedPaletteColorTableDescriptor', + x00281102: 'GreenPaletteColorTableDescriptor', + x00281103: 'BluePaletteColorTableDescriptor', + x00281111: 'LargeRedPaletteColorTableDescr', + x00281112: 'LargeGreenPaletteColorTableDescr', + x00281113: 'LargeBluePaletteColorTableDescr', + x00281199: 'PaletteColorTableUID', + x00281200: 'GrayLookupTableData', + x00281201: 'RedPaletteColorTableData', + x00281202: 'GreenPaletteColorTableData', + x00281203: 'BluePaletteColorTableData', + x00281211: 'LargeRedPaletteColorTableData', + x00281212: 'LargeGreenPaletteColorTableData', + x00281213: 'LargeBluePaletteColorTableData', + x00281214: 'LargePaletteColorLookupTableUID', + x00281221: 'SegmentedRedColorTableData', + x00281222: 'SegmentedGreenColorTableData', + x00281223: 'SegmentedBlueColorTableData', + x00281300: 'BreastImplantPresent', + x00281350: 'PartialView', + x00281351: 'PartialViewDescription', + x00281352: 'PartialViewCodeSequence', + x0028135a: 'SpatialLocationsPreserved', + x00281402: 'DataPathAssignment', + x00281404: 'BlendingLUT1Sequence', + x00281406: 'BlendingWeightConstant', + x00281408: 'BlendingLookupTableData', + x0028140c: 'BlendingLUT2Sequence', + x0028140e: 'DataPathID', + x0028140f: 'RGBLUTTransferFunction', + x00281410: 'AlphaLUTTransferFunction', + x00282000: 'ICCProfile', + x00282110: 'LossyImageCompression', + x00282112: 'LossyImageCompressionRatio', + x00282114: 'LossyImageCompressionMethod', + x00283000: 'ModalityLUTSequence', + x00283002: 'LUTDescriptor', + x00283003: 'LUTExplanation', + x00283004: 'ModalityLUTType', + x00283006: 'LUTData', + x00283010: 'VOILUTSequence', + x00283110: 'SoftcopyVOILUTSequence', + x00284000: 'ImagePresentationComments', + x00285000: 'BiPlaneAcquisitionSequence', + x00286010: 'RepresentativeFrameNumber', + x00286020: 'FrameNumbersOfInterest', + x00286022: 'FrameOfInterestDescription', + x00286023: 'FrameOfInterestType', + x00286030: 'MaskPointers', + x00286040: 'RWavePointer', + x00286100: 'MaskSubtractionSequence', + x00286101: 'MaskOperation', + x00286102: 'ApplicableFrameRange', + x00286110: 'MaskFrameNumbers', + x00286112: 'ContrastFrameAveraging', + x00286114: 'MaskSubPixelShift', + x00286120: 'TIDOffset', + x00286190: 'MaskOperationExplanation', + x00287fe0: 'PixelDataProviderURL', + x00289001: 'DataPointRows', + x00289002: 'DataPointColumns', + x00289003: 'SignalDomainColumns', + x00289099: 'LargestMonochromePixelValue', + x00289108: 'DataRepresentation', + x00289110: 'PixelMeasuresSequence', + x00289132: 'FrameVOILUTSequence', + x00289145: 'PixelValueTransformationSequence', + x00289235: 'SignalDomainRows', + x00289411: 'DisplayFilterPercentage', + x00289415: 'FramePixelShiftSequence', + x00289416: 'SubtractionItemID', + x00289422: 'PixelIntensityRelationshipLUTSeq', + x00289443: 'FramePixelDataPropertiesSequence', + x00289444: 'GeometricalProperties', + x00289445: 'GeometricMaximumDistortion', + x00289446: 'ImageProcessingApplied', + x00289454: 'MaskSelectionMode', + x00289474: 'LUTFunction', + x00289478: 'MaskVisibilityPercentage', + x00289501: 'PixelShiftSequence', + x00289502: 'RegionPixelShiftSequence', + x00289503: 'VerticesOfTheRegion', + x00289506: 'PixelShiftFrameRange', + x00289507: 'LUTFrameRange', + x00289520: 'ImageToEquipmentMappingMatrix', + x00289537: 'EquipmentCoordinateSystemID', + // x00291004: 'LowerRangeOfPixels1a', + // x00291005: 'LowerRangeOfPixels1b', + // x00291006: 'LowerRangeOfPixels1c', + // x00291007: 'LowerRangeOfPixels1d', + // x00291008: 'LowerRangeOfPixels1e', + // x00291009: 'LowerRangeOfPixels1f', + // x0029100a: 'LowerRangeOfPixels1g', + // x00291015: 'LowerRangeOfPixels1h', + // x00291016: 'LowerRangeOfPixels1i', + // x00291017: 'LowerRangeOfPixels2', + // x00291018: 'UpperRangeOfPixels2', + // x0029101a: 'LenOfTotHdrInBytes', + // x00291026: 'VersionOfTheHdrStruct', + // x00291034: 'AdvantageCompOverflow', + // x00291035: 'AdvantageCompUnderflow', + x00320000: 'StudyGroupLength', + x0032000a: 'StudyStatusID', + x0032000c: 'StudyPriorityID', + x00320012: 'StudyIDIssuer', + x00320032: 'StudyVerifiedDate', + x00320033: 'StudyVerifiedTime', + x00320034: 'StudyReadDate', + x00320035: 'StudyReadTime', + x00321000: 'ScheduledStudyStartDate', + x00321001: 'ScheduledStudyStartTime', + x00321010: 'ScheduledStudyStopDate', + x00321011: 'ScheduledStudyStopTime', + x00321020: 'ScheduledStudyLocation', + x00321021: 'ScheduledStudyLocationAETitle', + x00321030: 'ReasonForStudy', + x00321031: 'RequestingPhysicianIDSequence', + x00321032: 'RequestingPhysician', + x00321033: 'RequestingService', + x00321040: 'StudyArrivalDate', + x00321041: 'StudyArrivalTime', + x00321050: 'StudyCompletionDate', + x00321051: 'StudyCompletionTime', + x00321055: 'StudyComponentStatusID', + x00321060: 'RequestedProcedureDescription', + x00321064: 'RequestedProcedureCodeSequence', + x00321070: 'RequestedContrastAgent', + x00324000: 'StudyComments', + x00380004: 'ReferencedPatientAliasSequence', + x00380008: 'VisitStatusID', + x00380010: 'AdmissionID', + x00380011: 'IssuerOfAdmissionID', + x00380016: 'RouteOfAdmissions', + x0038001a: 'ScheduledAdmissionDate', + x0038001b: 'ScheduledAdmissionTime', + x0038001c: 'ScheduledDischargeDate', + x0038001d: 'ScheduledDischargeTime', + x0038001e: 'ScheduledPatientInstitResidence', + x00380020: 'AdmittingDate', + x00380021: 'AdmittingTime', + x00380030: 'DischargeDate', + x00380032: 'DischargeTime', + x00380040: 'DischargeDiagnosisDescription', + x00380044: 'DischargeDiagnosisCodeSequence', + x00380050: 'SpecialNeeds', + x00380060: 'ServiceEpisodeID', + x00380061: 'IssuerOfServiceEpisodeID', + x00380062: 'ServiceEpisodeDescription', + x00380100: 'PertinentDocumentsSequence', + x00380300: 'CurrentPatientLocation', + x00380400: 'PatientInstitutionResidence', + x00380500: 'PatientState', + x00380502: 'PatientClinicalTrialParticipSeq', + x00384000: 'VisitComments', + x003a0004: 'WaveformOriginality', + x003a0005: 'NumberOfWaveformChannels', + x003a0010: 'NumberOfWaveformSamples', + x003a001a: 'SamplingFrequency', + x003a0020: 'MultiplexGroupLabel', + x003a0200: 'ChannelDefinitionSequence', + x003a0202: 'WaveformChannelNumber', + x003a0203: 'ChannelLabel', + x003a0205: 'ChannelStatus', + x003a0208: 'ChannelSourceSequence', + x003a0209: 'ChannelSourceModifiersSequence', + x003a020a: 'SourceWaveformSequence', + x003a020c: 'ChannelDerivationDescription', + x003a0210: 'ChannelSensitivity', + x003a0211: 'ChannelSensitivityUnitsSequence', + x003a0212: 'ChannelSensitivityCorrectionFactor', + x003a0213: 'ChannelBaseline', + x003a0214: 'ChannelTimeSkew', + x003a0215: 'ChannelSampleSkew', + x003a0218: 'ChannelOffset', + x003a021a: 'WaveformBitsStored', + x003a0220: 'FilterLowFrequency', + x003a0221: 'FilterHighFrequency', + x003a0222: 'NotchFilterFrequency', + x003a0223: 'NotchFilterBandwidth', + x003a0230: 'WaveformDataDisplayScale', + x003a0231: 'WaveformDisplayBkgCIELabValue', + x003a0240: 'WaveformPresentationGroupSequence', + x003a0241: 'PresentationGroupNumber', + x003a0242: 'ChannelDisplaySequence', + x003a0244: 'ChannelRecommendDisplayCIELabValue', + x003a0245: 'ChannelPosition', + x003a0246: 'DisplayShadingFlag', + x003a0247: 'FractionalChannelDisplayScale', + x003a0248: 'AbsoluteChannelDisplayScale', + x003a0300: 'MultiplexAudioChannelsDescrCodeSeq', + x003a0301: 'ChannelIdentificationCode', + x003a0302: 'ChannelMode', + x00400001: 'ScheduledStationAETitle', + x00400002: 'ScheduledProcedureStepStartDate', + x00400003: 'ScheduledProcedureStepStartTime', + x00400004: 'ScheduledProcedureStepEndDate', + x00400005: 'ScheduledProcedureStepEndTime', + x00400006: 'ScheduledPerformingPhysiciansName', + x00400007: 'ScheduledProcedureStepDescription', + x00400008: 'ScheduledProtocolCodeSequence', + x00400009: 'ScheduledProcedureStepID', + x0040000a: 'StageCodeSequence', + x0040000b: 'ScheduledPerformingPhysicianIDSeq', + x00400010: 'ScheduledStationName', + x00400011: 'ScheduledProcedureStepLocation', + x00400012: 'PreMedication', + x00400020: 'ScheduledProcedureStepStatus', + x00400031: 'LocalNamespaceEntityID', + x00400032: 'UniversalEntityID', + x00400033: 'UniversalEntityIDType', + x00400035: 'IdentifierTypeCode', + x00400036: 'AssigningFacilitySequence', + x00400100: 'ScheduledProcedureStepSequence', + x00400220: 'ReferencedNonImageCompositeSOPSeq', + x00400241: 'PerformedStationAETitle', + x00400242: 'PerformedStationName', + x00400243: 'PerformedLocation', + x00400244: 'PerformedProcedureStepStartDate', + x00400245: 'PerformedProcedureStepStartTime', + x00400250: 'PerformedProcedureStepEndDate', + x00400251: 'PerformedProcedureStepEndTime', + x00400252: 'PerformedProcedureStepStatus', + x00400253: 'PerformedProcedureStepID', + x00400254: 'PerformedProcedureStepDescription', + x00400255: 'PerformedProcedureTypeDescription', + x00400260: 'PerformedProtocolCodeSequence', + x00400261: 'PerformedProtocolType', + x00400270: 'ScheduledStepAttributesSequence', + x00400275: 'RequestAttributesSequence', + x00400280: 'CommentsOnPerformedProcedureStep', + x00400281: 'ProcStepDiscontinueReasonCodeSeq', + x00400293: 'QuantitySequence', + x00400294: 'Quantity', + x00400295: 'MeasuringUnitsSequence', + x00400296: 'BillingItemSequence', + x00400300: 'TotalTimeOfFluoroscopy', + x00400301: 'TotalNumberOfExposures', + x00400302: 'EntranceDose', + x00400303: 'ExposedArea', + x00400306: 'DistanceSourceToEntrance', + x00400307: 'DistanceSourceToSupport', + x0040030e: 'ExposureDoseSequence', + x00400310: 'CommentsOnRadiationDose', + x00400312: 'XRayOutput', + x00400314: 'HalfValueLayer', + x00400316: 'OrganDose', + x00400318: 'OrganExposed', + x00400320: 'BillingProcedureStepSequence', + x00400321: 'FilmConsumptionSequence', + x00400324: 'BillingSuppliesAndDevicesSequence', + x00400330: 'ReferencedProcedureStepSequence', + x00400340: 'PerformedSeriesSequence', + x00400400: 'CommentsOnScheduledProcedureStep', + x00400440: 'ProtocolContextSequence', + x00400441: 'ContentItemModifierSequence', + x0040050a: 'SpecimenAccessionNumber', + x00400512: 'ContainerIdentifier', + x0040051a: 'ContainerDescription', + x00400550: 'SpecimenSequence', + x00400551: 'SpecimenIdentifier', + x00400552: 'SpecimenDescriptionSequenceTrial', + x00400553: 'SpecimenDescriptionTrial', + x00400554: 'SpecimenUID', + x00400555: 'AcquisitionContextSequence', + x00400556: 'AcquisitionContextDescription', + x0040059a: 'SpecimenTypeCodeSequence', + x00400600: 'SpecimenShortDescription', + x004006fa: 'SlideIdentifier', + x0040071a: 'ImageCenterPointCoordinatesSeq', + x0040072a: 'XOffsetInSlideCoordinateSystem', + x0040073a: 'YOffsetInSlideCoordinateSystem', + x0040074a: 'ZOffsetInSlideCoordinateSystem', + x004008d8: 'PixelSpacingSequence', + x004008da: 'CoordinateSystemAxisCodeSequence', + x004008ea: 'MeasurementUnitsCodeSequence', + x004009f8: 'VitalStainCodeSequenceTrial', + x00401001: 'RequestedProcedureID', + x00401002: 'ReasonForRequestedProcedure', + x00401003: 'RequestedProcedurePriority', + x00401004: 'PatientTransportArrangements', + x00401005: 'RequestedProcedureLocation', + x00401006: 'PlacerOrderNumber-Procedure', + x00401007: 'FillerOrderNumber-Procedure', + x00401008: 'ConfidentialityCode', + x00401009: 'ReportingPriority', + x0040100a: 'ReasonForRequestedProcedureCodeSeq', + x00401010: 'NamesOfIntendedRecipientsOfResults', + x00401011: 'IntendedRecipientsOfResultsIDSeq', + x00401101: 'PersonIdentificationCodeSequence', + x00401102: 'PersonAddress', + x00401103: 'PersonTelephoneNumbers', + x00401400: 'RequestedProcedureComments', + x00402001: 'ReasonForImagingServiceRequest', + x00402004: 'IssueDateOfImagingServiceRequest', + x00402005: 'IssueTimeOfImagingServiceRequest', + x00402006: 'PlacerOrderNumberImagingServiceRequestRetired', + x00402007: 'FillerOrderNumberImagingServiceRequestRetired', + x00402008: 'OrderEnteredBy', + x00402009: 'OrderEntererLocation', + x00402010: 'OrderCallbackPhoneNumber', + x00402016: 'PlacerOrderNum-ImagingServiceReq', + x00402017: 'FillerOrderNum-ImagingServiceReq', + x00402400: 'ImagingServiceRequestComments', + x00403001: 'ConfidentialityOnPatientDataDescr', + x00404001: 'GenPurposeScheduledProcStepStatus', + x00404002: 'GenPurposePerformedProcStepStatus', + x00404003: 'GenPurposeSchedProcStepPriority', + x00404004: 'SchedProcessingApplicationsCodeSeq', + x00404005: 'SchedProcedureStepStartDateAndTime', + x00404006: 'MultipleCopiesFlag', + x00404007: 'PerformedProcessingAppsCodeSeq', + x00404009: 'HumanPerformerCodeSequence', + x00404010: 'SchedProcStepModificationDateTime', + x00404011: 'ExpectedCompletionDateAndTime', + x00404015: 'ResultingGenPurposePerfProcStepSeq', + x00404016: 'RefGenPurposeSchedProcStepSeq', + x00404018: 'ScheduledWorkitemCodeSequence', + x00404019: 'PerformedWorkitemCodeSequence', + x00404020: 'InputAvailabilityFlag', + x00404021: 'InputInformationSequence', + x00404022: 'RelevantInformationSequence', + x00404023: 'RefGenPurSchedProcStepTransUID', + x00404025: 'ScheduledStationNameCodeSequence', + x00404026: 'ScheduledStationClassCodeSequence', + x00404027: 'SchedStationGeographicLocCodeSeq', + x00404028: 'PerformedStationNameCodeSequence', + x00404029: 'PerformedStationClassCodeSequence', + x00404030: 'PerformedStationGeogLocCodeSeq', + x00404031: 'RequestedSubsequentWorkItemCodeSeq', + x00404032: 'NonDICOMOutputCodeSequence', + x00404033: 'OutputInformationSequence', + x00404034: 'ScheduledHumanPerformersSequence', + x00404035: 'ActualHumanPerformersSequence', + x00404036: 'HumanPerformersOrganization', + x00404037: 'HumanPerformerName', + x00404040: 'RawDataHandling', + x00408302: 'EntranceDoseInMilliGy', + x00409094: 'RefImageRealWorldValueMappingSeq', + x00409096: 'RealWorldValueMappingSequence', + x00409098: 'PixelValueMappingCodeSequence', + x00409210: 'LUTLabel', + x00409211: 'RealWorldValueLastValueMapped', + x00409212: 'RealWorldValueLUTData', + x00409216: 'RealWorldValueFirstValueMapped', + x00409224: 'RealWorldValueIntercept', + x00409225: 'RealWorldValueSlope', + x0040a010: 'RelationshipType', + x0040a027: 'VerifyingOrganization', + x0040a030: 'VerificationDateTime', + x0040a032: 'ObservationDateTime', + x0040a040: 'ValueType', + x0040a043: 'ConceptNameCodeSequence', + x0040a050: 'ContinuityOfContent', + x0040a073: 'VerifyingObserverSequence', + x0040a075: 'VerifyingObserverName', + x0040a078: 'AuthorObserverSequence', + x0040a07a: 'ParticipantSequence', + x0040a07c: 'CustodialOrganizationSequence', + x0040a080: 'ParticipationType', + x0040a082: 'ParticipationDateTime', + x0040a084: 'ObserverType', + x0040a088: 'VerifyingObserverIdentCodeSequence', + x0040a090: 'EquivalentCDADocumentSequence', + x0040a0b0: 'ReferencedWaveformChannels', + x0040a120: 'DateTime', + x0040a121: 'Date', + x0040a122: 'Time', + x0040a123: 'PersonName', + x0040a124: 'UID', + x0040a130: 'TemporalRangeType', + x0040a132: 'ReferencedSamplePositions', + x0040a136: 'ReferencedFrameNumbers', + x0040a138: 'ReferencedTimeOffsets', + x0040a13a: 'ReferencedDateTime', + x0040a160: 'TextValue', + x0040a168: 'ConceptCodeSequence', + x0040a170: 'PurposeOfReferenceCodeSequence', + x0040a180: 'AnnotationGroupNumber', + x0040a195: 'ModifierCodeSequence', + x0040a300: 'MeasuredValueSequence', + x0040a301: 'NumericValueQualifierCodeSequence', + x0040a30a: 'NumericValue', + x0040a353: 'AddressTrial', + x0040a354: 'TelephoneNumberTrial', + x0040a360: 'PredecessorDocumentsSequence', + x0040a370: 'ReferencedRequestSequence', + x0040a372: 'PerformedProcedureCodeSequence', + x0040a375: 'CurrentRequestedProcEvidenceSeq', + x0040a385: 'PertinentOtherEvidenceSequence', + x0040a390: 'HL7StructuredDocumentRefSeq', + x0040a491: 'CompletionFlag', + x0040a492: 'CompletionFlagDescription', + x0040a493: 'VerificationFlag', + x0040a494: 'ArchiveRequested', + x0040a496: 'PreliminaryFlag', + x0040a504: 'ContentTemplateSequence', + x0040a525: 'IdenticalDocumentsSequence', + x0040a730: 'ContentSequence', + x0040b020: 'AnnotationSequence', + x0040db00: 'TemplateIdentifier', + x0040db06: 'TemplateVersion', + x0040db07: 'TemplateLocalVersion', + x0040db0b: 'TemplateExtensionFlag', + x0040db0c: 'TemplateExtensionOrganizationUID', + x0040db0d: 'TemplateExtensionCreatorUID', + x0040db73: 'ReferencedContentItemIdentifier', + x0040e001: 'HL7InstanceIdentifier', + x0040e004: 'HL7DocumentEffectiveTime', + x0040e006: 'HL7DocumentTypeCodeSequence', + x0040e010: 'RetrieveURI', + x0040e011: 'RetrieveLocationUID', + x00420010: 'DocumentTitle', + x00420011: 'EncapsulatedDocument', + x00420012: 'MIMETypeOfEncapsulatedDocument', + x00420013: 'SourceInstanceSequence', + x00420014: 'ListOfMIMETypes', + // x00431001: 'BitmapOfPrescanOptions', + // x00431002: 'GradientOffsetInX', + // x00431003: 'GradientOffsetInY', + // x00431004: 'GradientOffsetInZ', + // x00431005: 'ImgIsOriginalOrUnoriginal', + // x00431006: 'NumberOfEPIShots', + // x00431007: 'ViewsPerSegment', + // x00431008: 'RespiratoryRateBpm', + // x00431009: 'RespiratoryTriggerPoint', + // x0043100a: 'TypeOfReceiverUsed', + // x0043100b: 'PeakRateOfChangeOfGradientField', + // x0043100c: 'LimitsInUnitsOfPercent', + // x0043100d: 'PSDEstimatedLimit', + // x0043100e: 'PSDEstimatedLimitInTeslaPerSecond', + // x0043100f: 'Saravghead', + // x00431010: 'WindowValue', + // x00431011: 'TotalInputViews', + // x00431012: 'X-RayChain', + // x00431013: 'DeconKernelParameters', + // x00431014: 'CalibrationParameters', + // x00431015: 'TotalOutputViews', + // x00431016: 'NumberOfOverranges', + // x00431017: 'IBHImageScaleFactors', + // x00431018: 'BBHCoefficients', + // x00431019: 'NumberOfBBHChainsToBlend', + // x0043101a: 'StartingChannelNumber', + // x0043101b: 'PpscanParameters', + // x0043101c: 'GEImageIntegrity', + // x0043101d: 'LevelValue', + // x0043101e: 'DeltaStartTime', + // x0043101f: 'MaxOverrangesInAView', + // x00431020: 'AvgOverrangesAllViews', + // x00431021: 'CorrectedAfterGlowTerms', + // x00431025: 'ReferenceChannels', + // x00431026: 'NoViewsRefChansBlocked', + // x00431027: 'ScanPitchRatio', + // x00431028: 'UniqueImageIden', + // x00431029: 'HistogramTables', + // x0043102a: 'UserDefinedData', + // x0043102b: 'PrivateScanOptions', + // x0043102c: 'EffectiveEchoSpacing', + // x0043102d: 'StringSlopField1', + // x0043102e: 'StringSlopField2', + // x0043102f: 'RawDataType', + // x00431030: 'RawDataType', + // x00431031: 'RACordOfTargetReconCenter', + // x00431032: 'RawDataType', + // x00431033: 'NegScanspacing', + // x00431034: 'OffsetFrequency', + // x00431035: 'UserUsageTag', + // x00431036: 'UserFillMapMSW', + // x00431037: 'UserFillMapLSW', + // x00431038: 'User25-48', + // x00431039: 'SlopInt6-9', + // x00431040: 'TriggerOnPosition', + // x00431041: 'DegreeOfRotation', + // x00431042: 'DASTriggerSource', + // x00431043: 'DASFpaGain', + // x00431044: 'DASOutputSource', + // x00431045: 'DASAdInput', + // x00431046: 'DASCalMode', + // x00431047: 'DASCalFrequency', + // x00431048: 'DASRegXm', + // x00431049: 'DASAutoZero', + // x0043104a: 'StartingChannelOfView', + // x0043104b: 'DASXmPattern', + // x0043104c: 'TGGCTriggerMode', + // x0043104d: 'StartScanToXrayOnDelay', + // x0043104e: 'DurationOfXrayOn', + // x00431060: 'SlopInt10-17', + // x00431061: 'ScannerStudyEntityUID', + // x00431062: 'ScannerStudyID', + // x0043106f: 'ScannerTableEntry', + x00440001: 'ProductPackageIdentifier', + x00440002: 'SubstanceAdministrationApproval', + x00440003: 'ApprovalStatusFurtherDescription', + x00440004: 'ApprovalStatusDateTime', + x00440007: 'ProductTypeCodeSequence', + x00440008: 'ProductName', + x00440009: 'ProductDescription', + x0044000a: 'ProductLotIdentifier', + x0044000b: 'ProductExpirationDateTime', + x00440010: 'SubstanceAdministrationDateTime', + x00440011: 'SubstanceAdministrationNotes', + x00440012: 'SubstanceAdministrationDeviceID', + x00440013: 'ProductParameterSequence', + x00440019: 'SubstanceAdminParameterSeq', + // x00451001: 'NumberOfMacroRowsInDetector', + // x00451002: 'MacroWidthAtISOCenter', + // x00451003: 'DASType', + // x00451004: 'DASGain', + // x00451005: 'DASTemperature', + // x00451006: 'TableDirectionInOrOut', + // x00451007: 'ZSmoothingFactor', + // x00451008: 'ViewWeightingMode', + // x00451009: 'SigmaRowNumberWhichRowsWereUsed', + // x0045100a: 'MinimumDasValueFoundInTheScanData', + // x0045100b: 'MaximumOffsetShiftValueUsed', + // x0045100c: 'NumberOfViewsShifted', + // x0045100d: 'ZTrackingFlag', + // x0045100e: 'MeanZError', + // x0045100f: 'ZTrackingMaximumError', + // x00451010: 'StartingViewForRow2a', + // x00451011: 'NumberOfViewsInRow2a', + // x00451012: 'StartingViewForRow1a', + // x00451013: 'SigmaMode', + // x00451014: 'NumberOfViewsInRow1a', + // x00451015: 'StartingViewForRow2b', + // x00451016: 'NumberOfViewsInRow2b', + // x00451017: 'StartingViewForRow1b', + // x00451018: 'NumberOfViewsInRow1b', + // x00451019: 'AirFilterCalibrationDate', + // x0045101a: 'AirFilterCalibrationTime', + // x0045101b: 'PhantomCalibrationDate', + // x0045101c: 'PhantomCalibrationTime', + // x0045101d: 'ZSlopeCalibrationDate', + // x0045101e: 'ZSlopeCalibrationTime', + // x0045101f: 'CrosstalkCalibrationDate', + // x00451020: 'CrosstalkCalibrationTime', + // x00451021: 'IterboneOptionFlag', + // x00451022: 'PeristalticFlagOption', + x00460012: 'LensDescription', + x00460014: 'RightLensSequence', + x00460015: 'LeftLensSequence', + x00460018: 'CylinderSequence', + x00460028: 'PrismSequence', + x00460030: 'HorizontalPrismPower', + x00460032: 'HorizontalPrismBase', + x00460034: 'VerticalPrismPower', + x00460036: 'VerticalPrismBase', + x00460038: 'LensSegmentType', + x00460040: 'OpticalTransmittance', + x00460042: 'ChannelWidth', + x00460044: 'PupilSize', + x00460046: 'CornealSize', + x00460060: 'DistancePupillaryDistance', + x00460062: 'NearPupillaryDistance', + x00460064: 'OtherPupillaryDistance', + x00460075: 'RadiusOfCurvature', + x00460076: 'KeratometricPower', + x00460077: 'KeratometricAxis', + x00460092: 'BackgroundColor', + x00460094: 'Optotype', + x00460095: 'OptotypePresentation', + x00460100: 'AddNearSequence', + x00460101: 'AddIntermediateSequence', + x00460102: 'AddOtherSequence', + x00460104: 'AddPower', + x00460106: 'ViewingDistance', + x00460125: 'ViewingDistanceType', + x00460135: 'VisualAcuityModifiers', + x00460137: 'DecimalVisualAcuity', + x00460139: 'OptotypeDetailedDefinition', + x00460146: 'SpherePower', + x00460147: 'CylinderPower', + x00500004: 'CalibrationImage', + x00500010: 'DeviceSequence', + x00500014: 'DeviceLength', + x00500015: 'ContainerComponentWidth', + x00500016: 'DeviceDiameter', + x00500017: 'DeviceDiameterUnits', + x00500018: 'DeviceVolume', + x00500019: 'InterMarkerDistance', + x0050001b: 'ContainerComponentID', + x00500020: 'DeviceDescription', + x00540010: 'EnergyWindowVector', + x00540011: 'NumberOfEnergyWindows', + x00540012: 'EnergyWindowInformationSequence', + x00540013: 'EnergyWindowRangeSequence', + x00540014: 'EnergyWindowLowerLimit', + x00540015: 'EnergyWindowUpperLimit', + x00540016: 'RadiopharmaceuticalInformationSeq', + x00540017: 'ResidualSyringeCounts', + x00540018: 'EnergyWindowName', + x00540020: 'DetectorVector', + x00540021: 'NumberOfDetectors', + x00540022: 'DetectorInformationSequence', + x00540030: 'PhaseVector', + x00540031: 'NumberOfPhases', + x00540032: 'PhaseInformationSequence', + x00540033: 'NumberOfFramesInPhase', + x00540036: 'PhaseDelay', + x00540038: 'PauseBetweenFrames', + x00540039: 'PhaseDescription', + x00540050: 'RotationVector', + x00540051: 'NumberOfRotations', + x00540052: 'RotationInformationSequence', + x00540053: 'NumberOfFramesInRotation', + x00540060: 'RRIntervalVector', + x00540061: 'NumberOfRRIntervals', + x00540062: 'GatedInformationSequence', + x00540063: 'DataInformationSequence', + x00540070: 'TimeSlotVector', + x00540071: 'NumberOfTimeSlots', + x00540072: 'TimeSlotInformationSequence', + x00540073: 'TimeSlotTime', + x00540080: 'SliceVector', + x00540081: 'NumberOfSlices', + x00540090: 'AngularViewVector', + x00540100: 'TimeSliceVector', + x00540101: 'NumberOfTimeSlices', + x00540200: 'StartAngle', + x00540202: 'TypeOfDetectorMotion', + x00540210: 'TriggerVector', + x00540211: 'NumberOfTriggersInPhase', + x00540220: 'ViewCodeSequence', + x00540222: 'ViewModifierCodeSequence', + x00540300: 'RadionuclideCodeSequence', + x00540302: 'AdministrationRouteCodeSequence', + x00540304: 'RadiopharmaceuticalCodeSequence', + x00540306: 'CalibrationDataSequence', + x00540308: 'EnergyWindowNumber', + x00540400: 'ImageID', + x00540410: 'PatientOrientationCodeSequence', + x00540412: 'PatientOrientationModifierCodeSeq', + x00540414: 'PatientGantryRelationshipCodeSeq', + x00540500: 'SliceProgressionDirection', + x00541000: 'SeriesType', + x00541001: 'Units', + x00541002: 'CountsSource', + x00541004: 'ReprojectionMethod', + x00541100: 'RandomsCorrectionMethod', + x00541101: 'AttenuationCorrectionMethod', + x00541102: 'DecayCorrection', + x00541103: 'ReconstructionMethod', + x00541104: 'DetectorLinesOfResponseUsed', + x00541105: 'ScatterCorrectionMethod', + x00541200: 'AxialAcceptance', + x00541201: 'AxialMash', + x00541202: 'TransverseMash', + x00541203: 'DetectorElementSize', + x00541210: 'CoincidenceWindowWidth', + x00541220: 'SecondaryCountsType', + x00541300: 'FrameReferenceTime', + x00541310: 'PrimaryCountsAccumulated', + x00541311: 'SecondaryCountsAccumulated', + x00541320: 'SliceSensitivityFactor', + x00541321: 'DecayFactor', + x00541322: 'DoseCalibrationFactor', + x00541323: 'ScatterFractionFactor', + x00541324: 'DeadTimeFactor', + x00541330: 'ImageIndex', + x00541400: 'CountsIncluded', + x00541401: 'DeadTimeCorrectionFlag', + x00603000: 'HistogramSequence', + x00603002: 'HistogramNumberOfBins', + x00603004: 'HistogramFirstBinValue', + x00603006: 'HistogramLastBinValue', + x00603008: 'HistogramBinWidth', + x00603010: 'HistogramExplanation', + x00603020: 'HistogramData', + x00620001: 'SegmentationType', + x00620002: 'SegmentSequence', + x00620003: 'SegmentedPropertyCategoryCodeSeq', + x00620004: 'SegmentNumber', + x00620005: 'SegmentLabel', + x00620006: 'SegmentDescription', + x00620008: 'SegmentAlgorithmType', + x00620009: 'SegmentAlgorithmName', + x0062000a: 'SegmentIdentificationSequence', + x0062000b: 'ReferencedSegmentNumber', + x0062000c: 'RecommendedDisplayGrayscaleValue', + x0062000d: 'RecommendedDisplayCIELabValue', + x0062000e: 'MaximumFractionalValue', + x0062000f: 'SegmentedPropertyTypeCodeSequence', + x00620010: 'SegmentationFractionalType', + x00640002: 'DeformableRegistrationSequence', + x00640003: 'SourceFrameOfReferenceUID', + x00640005: 'DeformableRegistrationGridSequence', + x00640007: 'GridDimensions', + x00640008: 'GridResolution', + x00640009: 'VectorGridData', + x0064000f: 'PreDeformationMatrixRegistSeq', + x00640010: 'PostDeformationMatrixRegistSeq', + x00660001: 'NumberOfSurfaces', + x00660002: 'SurfaceSequence', + x00660003: 'SurfaceNumber', + x00660004: 'SurfaceComments', + x00660009: 'SurfaceProcessing', + x0066000a: 'SurfaceProcessingRatio', + x0066000e: 'FiniteVolume', + x00660010: 'Manifold', + x00660011: 'SurfacePointsSequence', + x00660015: 'NumberOfSurfacePoints', + x00660016: 'PointCoordinatesData', + x00660017: 'PointPositionAccuracy', + x00660018: 'MeanPointDistance', + x00660019: 'MaximumPointDistance', + x0066001b: 'AxisOfRotation', + x0066001c: 'CenterOfRotation', + x0066001e: 'NumberOfVectors', + x0066001f: 'VectorDimensionality', + x00660020: 'VectorAccuracy', + x00660021: 'VectorCoordinateData', + x00660023: 'TrianglePointIndexList', + x00660024: 'EdgePointIndexList', + x00660025: 'VertexPointIndexList', + x00660026: 'TriangleStripSequence', + x00660027: 'TriangleFanSequence', + x00660028: 'LineSequence', + x00660029: 'PrimitivePointIndexList', + x0066002a: 'SurfaceCount', + x0066002f: 'AlgorithmFamilyCodeSequ', + x00660031: 'AlgorithmVersion', + x00660032: 'AlgorithmParameters', + x00660034: 'FacetSequence', + x00660036: 'AlgorithmName', + x00700001: 'GraphicAnnotationSequence', + x00700002: 'GraphicLayer', + x00700003: 'BoundingBoxAnnotationUnits', + x00700004: 'AnchorPointAnnotationUnits', + x00700005: 'GraphicAnnotationUnits', + x00700006: 'UnformattedTextValue', + x00700008: 'TextObjectSequence', + x00700009: 'GraphicObjectSequence', + x00700010: 'BoundingBoxTopLeftHandCorner', + x00700011: 'BoundingBoxBottomRightHandCorner', + x00700012: 'BoundingBoxTextHorizJustification', + x00700014: 'AnchorPoint', + x00700015: 'AnchorPointVisibility', + x00700020: 'GraphicDimensions', + x00700021: 'NumberOfGraphicPoints', + x00700022: 'GraphicData', + x00700023: 'GraphicType', + x00700024: 'GraphicFilled', + x00700040: 'ImageRotationRetired', + x00700041: 'ImageHorizontalFlip', + x00700042: 'ImageRotation', + x00700050: 'DisplayedAreaTopLeftTrial', + x00700051: 'DisplayedAreaBottomRightTrial', + x00700052: 'DisplayedAreaTopLeft', + x00700053: 'DisplayedAreaBottomRight', + x0070005a: 'DisplayedAreaSelectionSequence', + x00700060: 'GraphicLayerSequence', + x00700062: 'GraphicLayerOrder', + x00700066: 'GraphicLayerRecDisplayGraysclValue', + x00700067: 'GraphicLayerRecDisplayRGBValue', + x00700068: 'GraphicLayerDescription', + x00700080: 'ContentLabel', + x00700081: 'ContentDescription', + x00700082: 'PresentationCreationDate', + x00700083: 'PresentationCreationTime', + x00700084: 'ContentCreatorName', + x00700086: 'ContentCreatorIDCodeSequence', + x00700100: 'PresentationSizeMode', + x00700101: 'PresentationPixelSpacing', + x00700102: 'PresentationPixelAspectRatio', + x00700103: 'PresentationPixelMagRatio', + x00700306: 'ShapeType', + x00700308: 'RegistrationSequence', + x00700309: 'MatrixRegistrationSequence', + x0070030a: 'MatrixSequence', + x0070030c: 'FrameOfRefTransformationMatrixType', + x0070030d: 'RegistrationTypeCodeSequence', + x0070030f: 'FiducialDescription', + x00700310: 'FiducialIdentifier', + x00700311: 'FiducialIdentifierCodeSequence', + x00700312: 'ContourUncertaintyRadius', + x00700314: 'UsedFiducialsSequence', + x00700318: 'GraphicCoordinatesDataSequence', + x0070031a: 'FiducialUID', + x0070031c: 'FiducialSetSequence', + x0070031e: 'FiducialSequence', + x00700401: 'GraphicLayerRecomDisplayCIELabVal', + x00700402: 'BlendingSequence', + x00700403: 'RelativeOpacity', + x00700404: 'ReferencedSpatialRegistrationSeq', + x00700405: 'BlendingPosition', + x00720002: 'HangingProtocolName', + x00720004: 'HangingProtocolDescription', + x00720006: 'HangingProtocolLevel', + x00720008: 'HangingProtocolCreator', + x0072000a: 'HangingProtocolCreationDateTime', + x0072000c: 'HangingProtocolDefinitionSequence', + x0072000e: 'HangingProtocolUserIDCodeSequence', + x00720010: 'HangingProtocolUserGroupName', + x00720012: 'SourceHangingProtocolSequence', + x00720014: 'NumberOfPriorsReferenced', + x00720020: 'ImageSetsSequence', + x00720022: 'ImageSetSelectorSequence', + x00720024: 'ImageSetSelectorUsageFlag', + x00720026: 'SelectorAttribute', + x00720028: 'SelectorValueNumber', + x00720030: 'TimeBasedImageSetsSequence', + x00720032: 'ImageSetNumber', + x00720034: 'ImageSetSelectorCategory', + x00720038: 'RelativeTime', + x0072003a: 'RelativeTimeUnits', + x0072003c: 'AbstractPriorValue', + x0072003e: 'AbstractPriorCodeSequence', + x00720040: 'ImageSetLabel', + x00720050: 'SelectorAttributeVR', + x00720052: 'SelectorSequencePointer', + x00720054: 'SelectorSeqPointerPrivateCreator', + x00720056: 'SelectorAttributePrivateCreator', + x00720060: 'SelectorATValue', + x00720062: 'SelectorCSValue', + x00720064: 'SelectorISValue', + x00720066: 'SelectorLOValue', + x00720068: 'SelectorLTValue', + x0072006a: 'SelectorPNValue', + x0072006c: 'SelectorSHValue', + x0072006e: 'SelectorSTValue', + x00720070: 'SelectorUTValue', + x00720072: 'SelectorDSValue', + x00720074: 'SelectorFDValue', + x00720076: 'SelectorFLValue', + x00720078: 'SelectorULValue', + x0072007a: 'SelectorUSValue', + x0072007c: 'SelectorSLValue', + x0072007e: 'SelectorSSValue', + x00720080: 'SelectorCodeSequenceValue', + x00720100: 'NumberOfScreens', + x00720102: 'NominalScreenDefinitionSequence', + x00720104: 'NumberOfVerticalPixels', + x00720106: 'NumberOfHorizontalPixels', + x00720108: 'DisplayEnvironmentSpatialPosition', + x0072010a: 'ScreenMinimumGrayscaleBitDepth', + x0072010c: 'ScreenMinimumColorBitDepth', + x0072010e: 'ApplicationMaximumRepaintTime', + x00720200: 'DisplaySetsSequence', + x00720202: 'DisplaySetNumber', + x00720203: 'DisplaySetLabel', + x00720204: 'DisplaySetPresentationGroup', + x00720206: 'DisplaySetPresentationGroupDescr', + x00720208: 'PartialDataDisplayHandling', + x00720210: 'SynchronizedScrollingSequence', + x00720212: 'DisplaySetScrollingGroup', + x00720214: 'NavigationIndicatorSequence', + x00720216: 'NavigationDisplaySet', + x00720218: 'ReferenceDisplaySets', + x00720300: 'ImageBoxesSequence', + x00720302: 'ImageBoxNumber', + x00720304: 'ImageBoxLayoutType', + x00720306: 'ImageBoxTileHorizontalDimension', + x00720308: 'ImageBoxTileVerticalDimension', + x00720310: 'ImageBoxScrollDirection', + x00720312: 'ImageBoxSmallScrollType', + x00720314: 'ImageBoxSmallScrollAmount', + x00720316: 'ImageBoxLargeScrollType', + x00720318: 'ImageBoxLargeScrollAmount', + x00720320: 'ImageBoxOverlapPriority', + x00720330: 'CineRelativeToRealTime', + x00720400: 'FilterOperationsSequence', + x00720402: 'FilterByCategory', + x00720404: 'FilterByAttributePresence', + x00720406: 'FilterByOperator', + x00720432: 'SynchronizedImageBoxList', + x00720434: 'TypeOfSynchronization', + x00720500: 'BlendingOperationType', + x00720510: 'ReformattingOperationType', + x00720512: 'ReformattingThickness', + x00720514: 'ReformattingInterval', + x00720516: 'ReformattingOpInitialViewDir', + x00720520: 'RenderingType3D', + x00720600: 'SortingOperationsSequence', + x00720602: 'SortByCategory', + x00720604: 'SortingDirection', + x00720700: 'DisplaySetPatientOrientation', + x00720702: 'VOIType', + x00720704: 'PseudoColorType', + x00720706: 'ShowGrayscaleInverted', + x00720710: 'ShowImageTrueSizeFlag', + x00720712: 'ShowGraphicAnnotationFlag', + x00720714: 'ShowPatientDemographicsFlag', + x00720716: 'ShowAcquisitionTechniquesFlag', + x00720717: 'DisplaySetHorizontalJustification', + x00720718: 'DisplaySetVerticalJustification', + x00741000: 'UnifiedProcedureStepState', + x00741002: 'UPSProgressInformationSequence', + x00741004: 'UnifiedProcedureStepProgress', + x00741006: 'UnifiedProcedureStepProgressDescr', + x00741008: 'UnifiedProcedureStepComURISeq', + x0074100a: 'ContactURI', + x0074100c: 'ContactDisplayName', + x00741020: 'BeamTaskSequence', + x00741022: 'BeamTaskType', + x00741024: 'BeamOrderIndex', + x00741030: 'DeliveryVerificationImageSequence', + x00741032: 'VerificationImageTiming', + x00741034: 'DoubleExposureFlag', + x00741036: 'DoubleExposureOrdering', + x00741038: 'DoubleExposureMeterset', + x0074103a: 'DoubleExposureFieldDelta', + x00741040: 'RelatedReferenceRTImageSequence', + x00741042: 'GeneralMachineVerificationSequence', + x00741044: 'ConventionalMachineVerificationSeq', + x00741046: 'IonMachineVerificationSequence', + x00741048: 'FailedAttributesSequence', + x0074104a: 'OverriddenAttributesSequence', + x0074104c: 'ConventionalControlPointVerifySeq', + x0074104e: 'IonControlPointVerificationSeq', + x00741050: 'AttributeOccurrenceSequence', + x00741052: 'AttributeOccurrencePointer', + x00741054: 'AttributeItemSelector', + x00741056: 'AttributeOccurrencePrivateCreator', + x00741200: 'ScheduledProcedureStepPriority', + x00741202: 'StudyListLabel', + x00741204: 'ProcedureStepLabel', + x00741210: 'ScheduledProcessingParametersSeq', + x00741212: 'PerformedProcessingParametersSeq', + x00741216: 'UPSPerformedProcedureSequence', + x00741220: 'RelatedProcedureStepSequence', + x00741222: 'ProcedureStepRelationshipType', + x00741230: 'DeletionLock', + x00741234: 'ReceivingAE', + x00741236: 'RequestingAE', + x00741238: 'ReasonForCancellation', + x00741242: 'SCPStatus', + x00741244: 'SubscriptionListStatus', + x00741246: 'UPSListStatus', + x00880130: 'StorageMediaFileSetID', + x00880140: 'StorageMediaFileSetUID', + x00880200: 'IconImageSequence', + x00880904: 'TopicTitle', + x00880906: 'TopicSubject', + x00880910: 'TopicAuthor', + x00880912: 'TopicKeywords', + x01000410: 'SOPInstanceStatus', + x01000420: 'SOPAuthorizationDateAndTime', + x01000424: 'SOPAuthorizationComment', + x01000426: 'AuthorizationEquipmentCertNumber', + x04000005: 'MACIDNumber', + x04000010: 'MACCalculationTransferSyntaxUID', + x04000015: 'MACAlgorithm', + x04000020: 'DataElementsSigned', + x04000100: 'DigitalSignatureUID', + x04000105: 'DigitalSignatureDateTime', + x04000110: 'CertificateType', + x04000115: 'CertificateOfSigner', + x04000120: 'Signature', + x04000305: 'CertifiedTimestampType', + x04000310: 'CertifiedTimestamp', + x04000401: 'DigitalSignaturePurposeCodeSeq', + x04000402: 'ReferencedDigitalSignatureSeq', + x04000403: 'ReferencedSOPInstanceMACSeq', + x04000404: 'MAC', + x04000500: 'EncryptedAttributesSequence', + x04000510: 'EncryptedContentTransferSyntaxUID', + x04000520: 'EncryptedContent', + x04000550: 'ModifiedAttributesSequence', + x04000561: 'OriginalAttributesSequence', + x04000562: 'AttributeModificationDateTime', + x04000563: 'ModifyingSystem', + x04000564: 'SourceOfPreviousValues', + x04000565: 'ReasonForTheAttributeModification', + x1000xxx0: 'EscapeTriplet', + x1000xxx1: 'RunLengthTriplet', + x1000xxx2: 'HuffmanTableSize', + x1000xxx3: 'HuffmanTableTriplet', + x1000xxx4: 'ShiftTableSize', + x1000xxx5: 'ShiftTableTriplet', + x1010xxxx: 'ZonalMap', + x20000010: 'NumberOfCopies', + x2000001e: 'PrinterConfigurationSequence', + x20000020: 'PrintPriority', + x20000030: 'MediumType', + x20000040: 'FilmDestination', + x20000050: 'FilmSessionLabel', + x20000060: 'MemoryAllocation', + x20000061: 'MaximumMemoryAllocation', + x20000062: 'ColorImagePrintingFlag', + x20000063: 'CollationFlag', + x20000065: 'AnnotationFlag', + x20000067: 'ImageOverlayFlag', + x20000069: 'PresentationLUTFlag', + x2000006a: 'ImageBoxPresentationLUTFlag', + x200000a0: 'MemoryBitDepth', + x200000a1: 'PrintingBitDepth', + x200000a2: 'MediaInstalledSequence', + x200000a4: 'OtherMediaAvailableSequence', + x200000a8: 'SupportedImageDisplayFormatSeq', + x20000500: 'ReferencedFilmBoxSequence', + x20000510: 'ReferencedStoredPrintSequence', + x20100010: 'ImageDisplayFormat', + x20100030: 'AnnotationDisplayFormatID', + x20100040: 'FilmOrientation', + x20100050: 'FilmSizeID', + x20100052: 'PrinterResolutionID', + x20100054: 'DefaultPrinterResolutionID', + x20100060: 'MagnificationType', + x20100080: 'SmoothingType', + x201000a6: 'DefaultMagnificationType', + x201000a7: 'OtherMagnificationTypesAvailable', + x201000a8: 'DefaultSmoothingType', + x201000a9: 'OtherSmoothingTypesAvailable', + x20100100: 'BorderDensity', + x20100110: 'EmptyImageDensity', + x20100120: 'MinDensity', + x20100130: 'MaxDensity', + x20100140: 'Trim', + x20100150: 'ConfigurationInformation', + x20100152: 'ConfigurationInformationDescr', + x20100154: 'MaximumCollatedFilms', + x2010015e: 'Illumination', + x20100160: 'ReflectedAmbientLight', + x20100376: 'PrinterPixelSpacing', + x20100500: 'ReferencedFilmSessionSequence', + x20100510: 'ReferencedImageBoxSequence', + x20100520: 'ReferencedBasicAnnotationBoxSeq', + x20200010: 'ImageBoxPosition', + x20200020: 'Polarity', + x20200030: 'RequestedImageSize', + x20200040: 'RequestedDecimate-CropBehavior', + x20200050: 'RequestedResolutionID', + x202000a0: 'RequestedImageSizeFlag', + x202000a2: 'DecimateCropResult', + x20200110: 'BasicGrayscaleImageSequence', + x20200111: 'BasicColorImageSequence', + x20200130: 'ReferencedImageOverlayBoxSequence', + x20200140: 'ReferencedVOILUTBoxSequence', + x20300010: 'AnnotationPosition', + x20300020: 'TextString', + x20400010: 'ReferencedOverlayPlaneSequence', + x20400011: 'ReferencedOverlayPlaneGroups', + x20400020: 'OverlayPixelDataSequence', + x20400060: 'OverlayMagnificationType', + x20400070: 'OverlaySmoothingType', + x20400072: 'OverlayOrImageMagnification', + x20400074: 'MagnifyToNumberOfColumns', + x20400080: 'OverlayForegroundDensity', + x20400082: 'OverlayBackgroundDensity', + x20400090: 'OverlayMode', + x20400100: 'ThresholdDensity', + x20400500: 'ReferencedImageBoxSequenceRetired', + x20500010: 'PresentationLUTSequence', + x20500020: 'PresentationLUTShape', + x20500500: 'ReferencedPresentationLUTSequence', + x21000010: 'PrintJobID', + x21000020: 'ExecutionStatus', + x21000030: 'ExecutionStatusInfo', + x21000040: 'CreationDate', + x21000050: 'CreationTime', + x21000070: 'Originator', + x21000140: 'DestinationAE', + x21000160: 'OwnerID', + x21000170: 'NumberOfFilms', + x21000500: 'ReferencedPrintJobSequencePullStoredPrint', + x21100010: 'PrinterStatus', + x21100020: 'PrinterStatusInfo', + x21100030: 'PrinterName', + x21100099: 'PrintQueueID', + x21200010: 'QueueStatus', + x21200050: 'PrintJobDescriptionSequence', + x21200070: 'ReferencedPrintJobSequence', + x21300010: 'PrintManagementCapabilitiesSeq', + x21300015: 'PrinterCharacteristicsSequence', + x21300030: 'FilmBoxContentSequence', + x21300040: 'ImageBoxContentSequence', + x21300050: 'AnnotationContentSequence', + x21300060: 'ImageOverlayBoxContentSequence', + x21300080: 'PresentationLUTContentSequence', + x213000a0: 'ProposedStudySequence', + x213000c0: 'OriginalImageSequence', + x22000001: 'LabelFromInfoExtractedFromInstance', + x22000002: 'LabelText', + x22000003: 'LabelStyleSelection', + x22000004: 'MediaDisposition', + x22000005: 'BarcodeValue', + x22000006: 'BarcodeSymbology', + x22000007: 'AllowMediaSplitting', + x22000008: 'IncludeNonDICOMObjects', + x22000009: 'IncludeDisplayApplication', + x2200000a: 'SaveCompInstancesAfterMediaCreate', + x2200000b: 'TotalNumberMediaPiecesCreated', + x2200000c: 'RequestedMediaApplicationProfile', + x2200000d: 'ReferencedStorageMediaSequence', + x2200000e: 'FailureAttributes', + x2200000f: 'AllowLossyCompression', + x22000020: 'RequestPriority', + x30020002: 'RTImageLabel', + x30020003: 'RTImageName', + x30020004: 'RTImageDescription', + x3002000a: 'ReportedValuesOrigin', + x3002000c: 'RTImagePlane', + x3002000d: 'XRayImageReceptorTranslation', + x3002000e: 'XRayImageReceptorAngle', + x30020010: 'RTImageOrientation', + x30020011: 'ImagePlanePixelSpacing', + x30020012: 'RTImagePosition', + x30020020: 'RadiationMachineName', + x30020022: 'RadiationMachineSAD', + x30020024: 'RadiationMachineSSD', + x30020026: 'RTImageSID', + x30020028: 'SourceToReferenceObjectDistance', + x30020029: 'FractionNumber', + x30020030: 'ExposureSequence', + x30020032: 'MetersetExposure', + x30020034: 'DiaphragmPosition', + x30020040: 'FluenceMapSequence', + x30020041: 'FluenceDataSource', + x30020042: 'FluenceDataScale', + x30020051: 'FluenceMode', + x30020052: 'FluenceModeID', + x30040001: 'DVHType', + x30040002: 'DoseUnits', + x30040004: 'DoseType', + x30040006: 'DoseComment', + x30040008: 'NormalizationPoint', + x3004000a: 'DoseSummationType', + x3004000c: 'GridFrameOffsetVector', + x3004000e: 'DoseGridScaling', + x30040010: 'RTDoseROISequence', + x30040012: 'DoseValue', + x30040014: 'TissueHeterogeneityCorrection', + x30040040: 'DVHNormalizationPoint', + x30040042: 'DVHNormalizationDoseValue', + x30040050: 'DVHSequence', + x30040052: 'DVHDoseScaling', + x30040054: 'DVHVolumeUnits', + x30040056: 'DVHNumberOfBins', + x30040058: 'DVHData', + x30040060: 'DVHReferencedROISequence', + x30040062: 'DVHROIContributionType', + x30040070: 'DVHMinimumDose', + x30040072: 'DVHMaximumDose', + x30040074: 'DVHMeanDose', + x30060002: 'StructureSetLabel', + x30060004: 'StructureSetName', + x30060006: 'StructureSetDescription', + x30060008: 'StructureSetDate', + x30060009: 'StructureSetTime', + x30060010: 'ReferencedFrameOfReferenceSequence', + x30060012: 'RTReferencedStudySequence', + x30060014: 'RTReferencedSeriesSequence', + x30060016: 'ContourImageSequence', + x30060020: 'StructureSetROISequence', + x30060022: 'ROINumber', + x30060024: 'ReferencedFrameOfReferenceUID', + x30060026: 'ROIName', + x30060028: 'ROIDescription', + x3006002a: 'ROIDisplayColor', + x3006002c: 'ROIVolume', + x30060030: 'RTRelatedROISequence', + x30060033: 'RTROIRelationship', + x30060036: 'ROIGenerationAlgorithm', + x30060038: 'ROIGenerationDescription', + x30060039: 'ROIContourSequence', + x30060040: 'ContourSequence', + x30060042: 'ContourGeometricType', + x30060044: 'ContourSlabThickness', + x30060045: 'ContourOffsetVector', + x30060046: 'NumberOfContourPoints', + x30060048: 'ContourNumber', + x30060049: 'AttachedContours', + x30060050: 'ContourData', + x30060080: 'RTROIObservationsSequence', + x30060082: 'ObservationNumber', + x30060084: 'ReferencedROINumber', + x30060085: 'ROIObservationLabel', + x30060086: 'RTROIIdentificationCodeSequence', + x30060088: 'ROIObservationDescription', + x300600a0: 'RelatedRTROIObservationsSequence', + x300600a4: 'RTROIInterpretedType', + x300600a6: 'ROIInterpreter', + x300600b0: 'ROIPhysicalPropertiesSequence', + x300600b2: 'ROIPhysicalProperty', + x300600b4: 'ROIPhysicalPropertyValue', + x300600b6: 'ROIElementalCompositionSequence', + x300600b7: 'ROIElementalCompAtomicNumber', + x300600b8: 'ROIElementalCompAtomicMassFraction', + x300600c0: 'FrameOfReferenceRelationshipSeq', + x300600c2: 'RelatedFrameOfReferenceUID', + x300600c4: 'FrameOfReferenceTransformType', + x300600c6: 'FrameOfReferenceTransformMatrix', + x300600c8: 'FrameOfReferenceTransformComment', + x30080010: 'MeasuredDoseReferenceSequence', + x30080012: 'MeasuredDoseDescription', + x30080014: 'MeasuredDoseType', + x30080016: 'MeasuredDoseValue', + x30080020: 'TreatmentSessionBeamSequence', + x30080021: 'TreatmentSessionIonBeamSequence', + x30080022: 'CurrentFractionNumber', + x30080024: 'TreatmentControlPointDate', + x30080025: 'TreatmentControlPointTime', + x3008002a: 'TreatmentTerminationStatus', + x3008002b: 'TreatmentTerminationCode', + x3008002c: 'TreatmentVerificationStatus', + x30080030: 'ReferencedTreatmentRecordSequence', + x30080032: 'SpecifiedPrimaryMeterset', + x30080033: 'SpecifiedSecondaryMeterset', + x30080036: 'DeliveredPrimaryMeterset', + x30080037: 'DeliveredSecondaryMeterset', + x3008003a: 'SpecifiedTreatmentTime', + x3008003b: 'DeliveredTreatmentTime', + x30080040: 'ControlPointDeliverySequence', + x30080041: 'IonControlPointDeliverySequence', + x30080042: 'SpecifiedMeterset', + x30080044: 'DeliveredMeterset', + x30080045: 'MetersetRateSet', + x30080046: 'MetersetRateDelivered', + x30080047: 'ScanSpotMetersetsDelivered', + x30080048: 'DoseRateDelivered', + x30080050: 'TreatmentSummaryCalcDoseRefSeq', + x30080052: 'CumulativeDoseToDoseReference', + x30080054: 'FirstTreatmentDate', + x30080056: 'MostRecentTreatmentDate', + x3008005a: 'NumberOfFractionsDelivered', + x30080060: 'OverrideSequence', + x30080061: 'ParameterSequencePointer', + x30080062: 'OverrideParameterPointer', + x30080063: 'ParameterItemIndex', + x30080064: 'MeasuredDoseReferenceNumber', + x30080065: 'ParameterPointer', + x30080066: 'OverrideReason', + x30080068: 'CorrectedParameterSequence', + x3008006a: 'CorrectionValue', + x30080070: 'CalculatedDoseReferenceSequence', + x30080072: 'CalculatedDoseReferenceNumber', + x30080074: 'CalculatedDoseReferenceDescription', + x30080076: 'CalculatedDoseReferenceDoseValue', + x30080078: 'StartMeterset', + x3008007a: 'EndMeterset', + x30080080: 'ReferencedMeasuredDoseReferenceSeq', + x30080082: 'ReferencedMeasuredDoseReferenceNum', + x30080090: 'ReferencedCalculatedDoseRefSeq', + x30080092: 'ReferencedCalculatedDoseRefNumber', + x300800a0: 'BeamLimitingDeviceLeafPairsSeq', + x300800b0: 'RecordedWedgeSequence', + x300800c0: 'RecordedCompensatorSequence', + x300800d0: 'RecordedBlockSequence', + x300800e0: 'TreatmentSummaryMeasuredDoseRefSeq', + x300800f0: 'RecordedSnoutSequence', + x300800f2: 'RecordedRangeShifterSequence', + x300800f4: 'RecordedLateralSpreadingDeviceSeq', + x300800f6: 'RecordedRangeModulatorSequence', + x30080100: 'RecordedSourceSequence', + x30080105: 'SourceSerialNumber', + x30080110: 'TreatmentSessionAppSetupSeq', + x30080116: 'ApplicationSetupCheck', + x30080120: 'RecordedBrachyAccessoryDeviceSeq', + x30080122: 'ReferencedBrachyAccessoryDeviceNum', + x30080130: 'RecordedChannelSequence', + x30080132: 'SpecifiedChannelTotalTime', + x30080134: 'DeliveredChannelTotalTime', + x30080136: 'SpecifiedNumberOfPulses', + x30080138: 'DeliveredNumberOfPulses', + x3008013a: 'SpecifiedPulseRepetitionInterval', + x3008013c: 'DeliveredPulseRepetitionInterval', + x30080140: 'RecordedSourceApplicatorSequence', + x30080142: 'ReferencedSourceApplicatorNumber', + x30080150: 'RecordedChannelShieldSequence', + x30080152: 'ReferencedChannelShieldNumber', + x30080160: 'BrachyControlPointDeliveredSeq', + x30080162: 'SafePositionExitDate', + x30080164: 'SafePositionExitTime', + x30080166: 'SafePositionReturnDate', + x30080168: 'SafePositionReturnTime', + x30080200: 'CurrentTreatmentStatus', + x30080202: 'TreatmentStatusComment', + x30080220: 'FractionGroupSummarySequence', + x30080223: 'ReferencedFractionNumber', + x30080224: 'FractionGroupType', + x30080230: 'BeamStopperPosition', + x30080240: 'FractionStatusSummarySequence', + x30080250: 'TreatmentDate', + x30080251: 'TreatmentTime', + x300a0002: 'RTPlanLabel', + x300a0003: 'RTPlanName', + x300a0004: 'RTPlanDescription', + x300a0006: 'RTPlanDate', + x300a0007: 'RTPlanTime', + x300a0009: 'TreatmentProtocols', + x300a000a: 'PlanIntent', + x300a000b: 'TreatmentSites', + x300a000c: 'RTPlanGeometry', + x300a000e: 'PrescriptionDescription', + x300a0010: 'DoseReferenceSequence', + x300a0012: 'DoseReferenceNumber', + x300a0013: 'DoseReferenceUID', + x300a0014: 'DoseReferenceStructureType', + x300a0015: 'NominalBeamEnergyUnit', + x300a0016: 'DoseReferenceDescription', + x300a0018: 'DoseReferencePointCoordinates', + x300a001a: 'NominalPriorDose', + x300a0020: 'DoseReferenceType', + x300a0021: 'ConstraintWeight', + x300a0022: 'DeliveryWarningDose', + x300a0023: 'DeliveryMaximumDose', + x300a0025: 'TargetMinimumDose', + x300a0026: 'TargetPrescriptionDose', + x300a0027: 'TargetMaximumDose', + x300a0028: 'TargetUnderdoseVolumeFraction', + x300a002a: 'OrganAtRiskFullVolumeDose', + x300a002b: 'OrganAtRiskLimitDose', + x300a002c: 'OrganAtRiskMaximumDose', + x300a002d: 'OrganAtRiskOverdoseVolumeFraction', + x300a0040: 'ToleranceTableSequence', + x300a0042: 'ToleranceTableNumber', + x300a0043: 'ToleranceTableLabel', + x300a0044: 'GantryAngleTolerance', + x300a0046: 'BeamLimitingDeviceAngleTolerance', + x300a0048: 'BeamLimitingDeviceToleranceSeq', + x300a004a: 'BeamLimitingDevicePositionTol', + x300a004b: 'SnoutPositionTolerance', + x300a004c: 'PatientSupportAngleTolerance', + x300a004e: 'TableTopEccentricAngleTolerance', + x300a004f: 'TableTopPitchAngleTolerance', + x300a0050: 'TableTopRollAngleTolerance', + x300a0051: 'TableTopVerticalPositionTolerance', + x300a0052: 'TableTopLongitudinalPositionTol', + x300a0053: 'TableTopLateralPositionTolerance', + x300a0055: 'RTPlanRelationship', + x300a0070: 'FractionGroupSequence', + x300a0071: 'FractionGroupNumber', + x300a0072: 'FractionGroupDescription', + x300a0078: 'NumberOfFractionsPlanned', + x300a0079: 'NumberFractionPatternDigitsPerDay', + x300a007a: 'RepeatFractionCycleLength', + x300a007b: 'FractionPattern', + x300a0080: 'NumberOfBeams', + x300a0082: 'BeamDoseSpecificationPoint', + x300a0084: 'BeamDose', + x300a0086: 'BeamMeterset', + x300a0088: 'BeamDosePointDepth', + x300a0089: 'BeamDosePointEquivalentDepth', + x300a008a: 'BeamDosePointSSD', + x300a00a0: 'NumberOfBrachyApplicationSetups', + x300a00a2: 'BrachyAppSetupDoseSpecPoint', + x300a00a4: 'BrachyApplicationSetupDose', + x300a00b0: 'BeamSequence', + x300a00b2: 'TreatmentMachineName', + x300a00b3: 'PrimaryDosimeterUnit', + x300a00b4: 'SourceAxisDistance', + x300a00b6: 'BeamLimitingDeviceSequence', + x300a00b8: 'RTBeamLimitingDeviceType', + x300a00ba: 'SourceToBeamLimitingDeviceDistance', + x300a00bb: 'IsocenterToBeamLimitingDeviceDist', + x300a00bc: 'NumberOfLeafJawPairs', + x300a00be: 'LeafPositionBoundaries', + x300a00c0: 'BeamNumber', + x300a00c2: 'BeamName', + x300a00c3: 'BeamDescription', + x300a00c4: 'BeamType', + x300a00c6: 'RadiationType', + x300a00c7: 'HighDoseTechniqueType', + x300a00c8: 'ReferenceImageNumber', + x300a00ca: 'PlannedVerificationImageSequence', + x300a00cc: 'ImagingDeviceSpecificAcqParams', + x300a00ce: 'TreatmentDeliveryType', + x300a00d0: 'NumberOfWedges', + x300a00d1: 'WedgeSequence', + x300a00d2: 'WedgeNumber', + x300a00d3: 'WedgeType', + x300a00d4: 'WedgeID', + x300a00d5: 'WedgeAngle', + x300a00d6: 'WedgeFactor', + x300a00d7: 'TotalWedgeTrayWaterEquivThickness', + x300a00d8: 'WedgeOrientation', + x300a00d9: 'IsocenterToWedgeTrayDistance', + x300a00da: 'SourceToWedgeTrayDistance', + x300a00db: 'WedgeThinEdgePosition', + x300a00dc: 'BolusID', + x300a00dd: 'BolusDescription', + x300a00e0: 'NumberOfCompensators', + x300a00e1: 'MaterialID', + x300a00e2: 'TotalCompensatorTrayFactor', + x300a00e3: 'CompensatorSequence', + x300a00e4: 'CompensatorNumber', + x300a00e5: 'CompensatorID', + x300a00e6: 'SourceToCompensatorTrayDistance', + x300a00e7: 'CompensatorRows', + x300a00e8: 'CompensatorColumns', + x300a00e9: 'CompensatorPixelSpacing', + x300a00ea: 'CompensatorPosition', + x300a00eb: 'CompensatorTransmissionData', + x300a00ec: 'CompensatorThicknessData', + x300a00ed: 'NumberOfBoli', + x300a00ee: 'CompensatorType', + x300a00f0: 'NumberOfBlocks', + x300a00f2: 'TotalBlockTrayFactor', + x300a00f3: 'TotalBlockTrayWaterEquivThickness', + x300a00f4: 'BlockSequence', + x300a00f5: 'BlockTrayID', + x300a00f6: 'SourceToBlockTrayDistance', + x300a00f7: 'IsocenterToBlockTrayDistance', + x300a00f8: 'BlockType', + x300a00f9: 'AccessoryCode', + x300a00fa: 'BlockDivergence', + x300a00fb: 'BlockMountingPosition', + x300a00fc: 'BlockNumber', + x300a00fe: 'BlockName', + x300a0100: 'BlockThickness', + x300a0102: 'BlockTransmission', + x300a0104: 'BlockNumberOfPoints', + x300a0106: 'BlockData', + x300a0107: 'ApplicatorSequence', + x300a0108: 'ApplicatorID', + x300a0109: 'ApplicatorType', + x300a010a: 'ApplicatorDescription', + x300a010c: 'CumulativeDoseReferenceCoefficient', + x300a010e: 'FinalCumulativeMetersetWeight', + x300a0110: 'NumberOfControlPoints', + x300a0111: 'ControlPointSequence', + x300a0112: 'ControlPointIndex', + x300a0114: 'NominalBeamEnergy', + x300a0115: 'DoseRateSet', + x300a0116: 'WedgePositionSequence', + x300a0118: 'WedgePosition', + x300a011a: 'BeamLimitingDevicePositionSequence', + x300a011c: 'LeafJawPositions', + x300a011e: 'GantryAngle', + x300a011f: 'GantryRotationDirection', + x300a0120: 'BeamLimitingDeviceAngle', + x300a0121: 'BeamLimitingDeviceRotateDirection', + x300a0122: 'PatientSupportAngle', + x300a0123: 'PatientSupportRotationDirection', + x300a0124: 'TableTopEccentricAxisDistance', + x300a0125: 'TableTopEccentricAngle', + x300a0126: 'TableTopEccentricRotateDirection', + x300a0128: 'TableTopVerticalPosition', + x300a0129: 'TableTopLongitudinalPosition', + x300a012a: 'TableTopLateralPosition', + x300a012c: 'IsocenterPosition', + x300a012e: 'SurfaceEntryPoint', + x300a0130: 'SourceToSurfaceDistance', + x300a0134: 'CumulativeMetersetWeight', + x300a0140: 'TableTopPitchAngle', + x300a0142: 'TableTopPitchRotationDirection', + x300a0144: 'TableTopRollAngle', + x300a0146: 'TableTopRollRotationDirection', + x300a0148: 'HeadFixationAngle', + x300a014a: 'GantryPitchAngle', + x300a014c: 'GantryPitchRotationDirection', + x300a014e: 'GantryPitchAngleTolerance', + x300a0180: 'PatientSetupSequence', + x300a0182: 'PatientSetupNumber', + x300a0183: 'PatientSetupLabel', + x300a0184: 'PatientAdditionalPosition', + x300a0190: 'FixationDeviceSequence', + x300a0192: 'FixationDeviceType', + x300a0194: 'FixationDeviceLabel', + x300a0196: 'FixationDeviceDescription', + x300a0198: 'FixationDevicePosition', + x300a0199: 'FixationDevicePitchAngle', + x300a019a: 'FixationDeviceRollAngle', + x300a01a0: 'ShieldingDeviceSequence', + x300a01a2: 'ShieldingDeviceType', + x300a01a4: 'ShieldingDeviceLabel', + x300a01a6: 'ShieldingDeviceDescription', + x300a01a8: 'ShieldingDevicePosition', + x300a01b0: 'SetupTechnique', + x300a01b2: 'SetupTechniqueDescription', + x300a01b4: 'SetupDeviceSequence', + x300a01b6: 'SetupDeviceType', + x300a01b8: 'SetupDeviceLabel', + x300a01ba: 'SetupDeviceDescription', + x300a01bc: 'SetupDeviceParameter', + x300a01d0: 'SetupReferenceDescription', + x300a01d2: 'TableTopVerticalSetupDisplacement', + x300a01d4: 'TableTopLongitudinalSetupDisplace', + x300a01d6: 'TableTopLateralSetupDisplacement', + x300a0200: 'BrachyTreatmentTechnique', + x300a0202: 'BrachyTreatmentType', + x300a0206: 'TreatmentMachineSequence', + x300a0210: 'SourceSequence', + x300a0212: 'SourceNumber', + x300a0214: 'SourceType', + x300a0216: 'SourceManufacturer', + x300a0218: 'ActiveSourceDiameter', + x300a021a: 'ActiveSourceLength', + x300a0222: 'SourceEncapsulationNomThickness', + x300a0224: 'SourceEncapsulationNomTransmission', + x300a0226: 'SourceIsotopeName', + x300a0228: 'SourceIsotopeHalfLife', + x300a0229: 'SourceStrengthUnits', + x300a022a: 'ReferenceAirKermaRate', + x300a022b: 'SourceStrength', + x300a022c: 'SourceStrengthReferenceDate', + x300a022e: 'SourceStrengthReferenceTime', + x300a0230: 'ApplicationSetupSequence', + x300a0232: 'ApplicationSetupType', + x300a0234: 'ApplicationSetupNumber', + x300a0236: 'ApplicationSetupName', + x300a0238: 'ApplicationSetupManufacturer', + x300a0240: 'TemplateNumber', + x300a0242: 'TemplateType', + x300a0244: 'TemplateName', + x300a0250: 'TotalReferenceAirKerma', + x300a0260: 'BrachyAccessoryDeviceSequence', + x300a0262: 'BrachyAccessoryDeviceNumber', + x300a0263: 'BrachyAccessoryDeviceID', + x300a0264: 'BrachyAccessoryDeviceType', + x300a0266: 'BrachyAccessoryDeviceName', + x300a026a: 'BrachyAccessoryDeviceNomThickness', + x300a026c: 'BrachyAccessoryDevNomTransmission', + x300a0280: 'ChannelSequence', + x300a0282: 'ChannelNumber', + x300a0284: 'ChannelLength', + x300a0286: 'ChannelTotalTime', + x300a0288: 'SourceMovementType', + x300a028a: 'NumberOfPulses', + x300a028c: 'PulseRepetitionInterval', + x300a0290: 'SourceApplicatorNumber', + x300a0291: 'SourceApplicatorID', + x300a0292: 'SourceApplicatorType', + x300a0294: 'SourceApplicatorName', + x300a0296: 'SourceApplicatorLength', + x300a0298: 'SourceApplicatorManufacturer', + x300a029c: 'SourceApplicatorWallNomThickness', + x300a029e: 'SourceApplicatorWallNomTrans', + x300a02a0: 'SourceApplicatorStepSize', + x300a02a2: 'TransferTubeNumber', + x300a02a4: 'TransferTubeLength', + x300a02b0: 'ChannelShieldSequence', + x300a02b2: 'ChannelShieldNumber', + x300a02b3: 'ChannelShieldID', + x300a02b4: 'ChannelShieldName', + x300a02b8: 'ChannelShieldNominalThickness', + x300a02ba: 'ChannelShieldNominalTransmission', + x300a02c8: 'FinalCumulativeTimeWeight', + x300a02d0: 'BrachyControlPointSequence', + x300a02d2: 'ControlPointRelativePosition', + x300a02d4: 'ControlPoint3DPosition', + x300a02d6: 'CumulativeTimeWeight', + x300a02e0: 'CompensatorDivergence', + x300a02e1: 'CompensatorMountingPosition', + x300a02e2: 'SourceToCompensatorDistance', + x300a02e3: 'TotalCompTrayWaterEquivThickness', + x300a02e4: 'IsocenterToCompensatorTrayDistance', + x300a02e5: 'CompensatorColumnOffset', + x300a02e6: 'IsocenterToCompensatorDistances', + x300a02e7: 'CompensatorRelStoppingPowerRatio', + x300a02e8: 'CompensatorMillingToolDiameter', + x300a02ea: 'IonRangeCompensatorSequence', + x300a02eb: 'CompensatorDescription', + x300a0302: 'RadiationMassNumber', + x300a0304: 'RadiationAtomicNumber', + x300a0306: 'RadiationChargeState', + x300a0308: 'ScanMode', + x300a030a: 'VirtualSourceAxisDistances', + x300a030c: 'SnoutSequence', + x300a030d: 'SnoutPosition', + x300a030f: 'SnoutID', + x300a0312: 'NumberOfRangeShifters', + x300a0314: 'RangeShifterSequence', + x300a0316: 'RangeShifterNumber', + x300a0318: 'RangeShifterID', + x300a0320: 'RangeShifterType', + x300a0322: 'RangeShifterDescription', + x300a0330: 'NumberOfLateralSpreadingDevices', + x300a0332: 'LateralSpreadingDeviceSequence', + x300a0334: 'LateralSpreadingDeviceNumber', + x300a0336: 'LateralSpreadingDeviceID', + x300a0338: 'LateralSpreadingDeviceType', + x300a033a: 'LateralSpreadingDeviceDescription', + x300a033c: 'LateralSpreadingDevWaterEquivThick', + x300a0340: 'NumberOfRangeModulators', + x300a0342: 'RangeModulatorSequence', + x300a0344: 'RangeModulatorNumber', + x300a0346: 'RangeModulatorID', + x300a0348: 'RangeModulatorType', + x300a034a: 'RangeModulatorDescription', + x300a034c: 'BeamCurrentModulationID', + x300a0350: 'PatientSupportType', + x300a0352: 'PatientSupportID', + x300a0354: 'PatientSupportAccessoryCode', + x300a0356: 'FixationLightAzimuthalAngle', + x300a0358: 'FixationLightPolarAngle', + x300a035a: 'MetersetRate', + x300a0360: 'RangeShifterSettingsSequence', + x300a0362: 'RangeShifterSetting', + x300a0364: 'IsocenterToRangeShifterDistance', + x300a0366: 'RangeShifterWaterEquivThickness', + x300a0370: 'LateralSpreadingDeviceSettingsSeq', + x300a0372: 'LateralSpreadingDeviceSetting', + x300a0374: 'IsocenterToLateralSpreadingDevDist', + x300a0380: 'RangeModulatorSettingsSequence', + x300a0382: 'RangeModulatorGatingStartValue', + x300a0384: 'RangeModulatorGatingStopValue', + x300a038a: 'IsocenterToRangeModulatorDistance', + x300a0390: 'ScanSpotTuneID', + x300a0392: 'NumberOfScanSpotPositions', + x300a0394: 'ScanSpotPositionMap', + x300a0396: 'ScanSpotMetersetWeights', + x300a0398: 'ScanningSpotSize', + x300a039a: 'NumberOfPaintings', + x300a03a0: 'IonToleranceTableSequence', + x300a03a2: 'IonBeamSequence', + x300a03a4: 'IonBeamLimitingDeviceSequence', + x300a03a6: 'IonBlockSequence', + x300a03a8: 'IonControlPointSequence', + x300a03aa: 'IonWedgeSequence', + x300a03ac: 'IonWedgePositionSequence', + x300a0401: 'ReferencedSetupImageSequence', + x300a0402: 'SetupImageComment', + x300a0410: 'MotionSynchronizationSequence', + x300a0412: 'ControlPointOrientation', + x300a0420: 'GeneralAccessorySequence', + x300a0421: 'GeneralAccessoryID', + x300a0422: 'GeneralAccessoryDescription', + x300a0423: 'GeneralAccessoryType', + x300a0424: 'GeneralAccessoryNumber', + x300c0002: 'ReferencedRTPlanSequence', + x300c0004: 'ReferencedBeamSequence', + x300c0006: 'ReferencedBeamNumber', + x300c0007: 'ReferencedReferenceImageNumber', + x300c0008: 'StartCumulativeMetersetWeight', + x300c0009: 'EndCumulativeMetersetWeight', + x300c000a: 'ReferencedBrachyAppSetupSeq', + x300c000c: 'ReferencedBrachyAppSetupNumber', + x300c000e: 'ReferencedSourceNumber', + x300c0020: 'ReferencedFractionGroupSequence', + x300c0022: 'ReferencedFractionGroupNumber', + x300c0040: 'ReferencedVerificationImageSeq', + x300c0042: 'ReferencedReferenceImageSequence', + x300c0050: 'ReferencedDoseReferenceSequence', + x300c0051: 'ReferencedDoseReferenceNumber', + x300c0055: 'BrachyReferencedDoseReferenceSeq', + x300c0060: 'ReferencedStructureSetSequence', + x300c006a: 'ReferencedPatientSetupNumber', + x300c0080: 'ReferencedDoseSequence', + x300c00a0: 'ReferencedToleranceTableNumber', + x300c00b0: 'ReferencedBolusSequence', + x300c00c0: 'ReferencedWedgeNumber', + x300c00d0: 'ReferencedCompensatorNumber', + x300c00e0: 'ReferencedBlockNumber', + x300c00f0: 'ReferencedControlPointIndex', + x300c00f2: 'ReferencedControlPointSequence', + x300c00f4: 'ReferencedStartControlPointIndex', + x300c00f6: 'ReferencedStopControlPointIndex', + x300c0100: 'ReferencedRangeShifterNumber', + x300c0102: 'ReferencedLateralSpreadingDevNum', + x300c0104: 'ReferencedRangeModulatorNumber', + x300e0002: 'ApprovalStatus', + x300e0004: 'ReviewDate', + x300e0005: 'ReviewTime', + x300e0008: 'ReviewerName', + x40000000: 'TextGroupLength', + x40000010: 'Arbitrary', + x40004000: 'TextComments', + x40080040: 'ResultsID', + x40080042: 'ResultsIDIssuer', + x40080050: 'ReferencedInterpretationSequence', + x40080100: 'InterpretationRecordedDate', + x40080101: 'InterpretationRecordedTime', + x40080102: 'InterpretationRecorder', + x40080103: 'ReferenceToRecordedSound', + x40080108: 'InterpretationTranscriptionDate', + x40080109: 'InterpretationTranscriptionTime', + x4008010a: 'InterpretationTranscriber', + x4008010b: 'InterpretationText', + x4008010c: 'InterpretationAuthor', + x40080111: 'InterpretationApproverSequence', + x40080112: 'InterpretationApprovalDate', + x40080113: 'InterpretationApprovalTime', + x40080114: 'PhysicianApprovingInterpretation', + x40080115: 'InterpretationDiagnosisDescription', + x40080117: 'InterpretationDiagnosisCodeSeq', + x40080118: 'ResultsDistributionListSequence', + x40080119: 'DistributionName', + x4008011a: 'DistributionAddress', + x40080200: 'InterpretationID', + x40080202: 'InterpretationIDIssuer', + x40080210: 'InterpretationTypeID', + x40080212: 'InterpretationStatusID', + x40080300: 'Impressions', + x40084000: 'ResultsComments', + x4ffe0001: 'MACParametersSequence', + x50xx0005: 'CurveDimensions', + x50xx0010: 'NumberOfPoints', + x50xx0020: 'TypeOfData', + x50xx0022: 'CurveDescription', + x50xx0030: 'AxisUnits', + x50xx0040: 'AxisLabels', + x50xx0103: 'DataValueRepresentation', + x50xx0104: 'MinimumCoordinateValue', + x50xx0105: 'MaximumCoordinateValue', + x50xx0106: 'CurveRange', + x50xx0110: 'CurveDataDescriptor', + x50xx0112: 'CoordinateStartValue', + x50xx0114: 'CoordinateStepValue', + x50xx1001: 'CurveActivationLayer', + x50xx2000: 'AudioType', + x50xx2002: 'AudioSampleFormat', + x50xx2004: 'NumberOfChannels', + x50xx2006: 'NumberOfSamples', + x50xx2008: 'SampleRate', + x50xx200a: 'TotalTime', + x50xx200c: 'AudioSampleData', + x50xx200e: 'AudioComments', + x50xx2500: 'CurveLabel', + x50xx2600: 'CurveReferencedOverlaySequence', + x50xx2610: 'ReferencedOverlayGroup', + x50xx3000: 'CurveData', + x52009229: 'SharedFunctionalGroupsSequence', + x52009230: 'PerFrameFunctionalGroupsSequence', + x54000100: 'WaveformSequence', + x54000110: 'ChannelMinimumValue', + x54000112: 'ChannelMaximumValue', + x54001004: 'WaveformBitsAllocated', + x54001006: 'WaveformSampleInterpretation', + x5400100a: 'WaveformPaddingValue', + x54001010: 'WaveformData', + x56000010: 'FirstOrderPhaseCorrectionAngle', + x56000020: 'SpectroscopyData', + x60000000: 'OverlayGroupLength', + x60xx0010: 'OverlayRows', + x60xx0011: 'OverlayColumns', + x60xx0012: 'OverlayPlanes', + x60xx0015: 'NumberOfFramesInOverlay', + x60xx0022: 'OverlayDescription', + x60xx0040: 'OverlayType', + x60xx0045: 'OverlaySubtype', + x60xx0050: 'OverlayOrigin', + x60xx0051: 'ImageFrameOrigin', + x60xx0052: 'OverlayPlaneOrigin', + x60xx0060: 'OverlayCompressionCode', + x60xx0061: 'OverlayCompressionOriginator', + x60xx0062: 'OverlayCompressionLabel', + x60xx0063: 'OverlayCompressionDescription', + x60xx0066: 'OverlayCompressionStepPointers', + x60xx0068: 'OverlayRepeatInterval', + x60xx0069: 'OverlayBitsGrouped', + x60xx0100: 'OverlayBitsAllocated', + x60xx0102: 'OverlayBitPosition', + x60xx0110: 'OverlayFormat', + x60xx0200: 'OverlayLocation', + x60xx0800: 'OverlayCodeLabel', + x60xx0802: 'OverlayNumberOfTables', + x60xx0803: 'OverlayCodeTableLocation', + x60xx0804: 'OverlayBitsForCodeWord', + x60xx1001: 'OverlayActivationLayer', + x60xx1100: 'OverlayDescriptorGray', + x60xx1101: 'OverlayDescriptorRed', + x60xx1102: 'OverlayDescriptorGreen', + x60xx1103: 'OverlayDescriptorBlue', + x60xx1200: 'OverlaysGray', + x60xx1201: 'OverlaysRed', + x60xx1202: 'OverlaysGreen', + x60xx1203: 'OverlaysBlue', + x60xx1301: 'ROIArea', + x60xx1302: 'ROIMean', + x60xx1303: 'ROIStandardDeviation', + x60xx1500: 'OverlayLabel', + x60xx3000: 'OverlayData', + x60xx4000: 'OverlayComments', + x7fxx0000: 'PixelDataGroupLength', + x7fxx0010: 'PixelData', + x7fxx0011: 'VariableNextDataGroup', + x7fxx0020: 'VariableCoefficientsSDVN', + x7fxx0030: 'VariableCoefficientsSDHN', + x7fxx0040: 'VariableCoefficientsSDDN', + xfffafffa: 'DigitalSignaturesSequence', + xfffcfffc: 'DataSetTrailingPadding', + xfffee000: 'StartOfItem', + xfffee00d: 'EndOfItems', + xfffee0dd: 'EndOfSequence', +}; + +DICOMTagDescriptions.init(initialTagDescriptionMap); + +// Discard original map... +initialTagDescriptionMap = null; + +export { DICOMTagDescriptions }; diff --git a/platform/core/src/utils/StackManager.js b/platform/core/src/utils/StackManager.js new file mode 100644 index 00000000000..4a675a19c1a --- /dev/null +++ b/platform/core/src/utils/StackManager.js @@ -0,0 +1,174 @@ +import OHIFError from '../classes/OHIFError.js'; +import getImageId from './getImageId'; + +let stackMap = {}; +let configuration = {}; +let stackManagerMetaDataProvider; +const stackUpdatedCallbacks = []; + +/** + * Loop through the current series and add metadata to the + * Cornerstone meta data provider. This will be used to fill information + * into the viewport overlays, and to calculate reference lines and orientation markers + * @param {Object} stackMap stackMap object + * @param {Object} study Study object + * @param {Object} displaySet The set of images to make the stack from + * @return {Array} Array with image IDs + */ +function createAndAddStack( + stackMap, + study, + displaySet, + stackUpdatedCallbacks, + metadataProvider +) { + const images = displaySet.images; + if (!images) { + return; + } + + const numImages = images.length; + const imageIds = []; + let imageId; + + displaySet.images.forEach((instance, imageIndex) => { + const image = instance.getData(); + const metaData = { + instance: image, // in this context, instance will be the data of the InstanceMetadata object... + series: displaySet, // TODO: Check this + study, + numImages, + imageIndex: imageIndex + 1, + }; + + const numberOfFrames = image.numberOfFrames; + if (numberOfFrames > 1) { + for (let i = 0; i < numberOfFrames; i++) { + metaData.frameNumber = i; + imageId = getImageId(image, i); + imageIds.push(imageId); + metadataProvider.addMetadata(imageId, metaData); + } + } else { + metaData.frameNumber = 1; + imageId = getImageId(image); + imageIds.push(imageId); + metadataProvider.addMetadata(imageId, metaData); + } + }); + + const stack = { + studyInstanceUid: study.studyInstanceUid, + displaySetInstanceUid: displaySet.displaySetInstanceUid, + imageIds, + frameRate: displaySet.frameRate, + isClip: displaySet.isClip, + }; + + stackMap[displaySet.displaySetInstanceUid] = stack; + + return stack; +} + +configuration = { + createAndAddStack, +}; + +/** + * This object contains all the functions needed for interacting with the stack manager. + * Generally, findStack is the only function used. If you want to know when new stacks + * come in, you can register a callback with addStackUpdatedCallback. + */ +const StackManager = { + setMetadataProvider(provider) { + stackManagerMetaDataProvider = provider; + }, + /** + * Removes all current stacks + */ + clearStacks() { + stackMap = {}; + }, + /** + * Create a stack from an image set, as well as add in the metadata on a per image bases. + * @param study The study who's metadata will be added + * @param displaySet The set of images to make the stack from + * @return {Array} Array with image IDs + */ + makeAndAddStack(study, displaySet) { + if (!stackManagerMetaDataProvider) { + throw new Error( + 'Please call StackManager.setMetadataProvider(provider) first.' + ); + } + + return configuration.createAndAddStack( + stackMap, + study, + displaySet, + stackUpdatedCallbacks, + stackManagerMetaDataProvider + ); + }, + /** + * Find a stack from the currently created stacks. + * @param displaySetInstanceUid The UID of the stack to find. + * @returns {*} undefined if not found, otherwise the stack object is returned. + */ + findStack(displaySetInstanceUid) { + return stackMap[displaySetInstanceUid]; + }, + /** + * Find a stack or reate one if it has not been created yet + * @param study The study who's metadata will be added + * @param displaySet The set of images to make the stack from + * @return {Array} Array with image IDs + */ + findOrCreateStack(study, displaySet) { + let stack = this.findStack(displaySet.displaySetInstanceUid); + + if (!stack || !stack.imageIds) { + stack = this.makeAndAddStack(study, displaySet); + } + + return stack; + }, + /** + * Gets the underlying map of displaySetInstanceUid to stack object. + * WARNING: Do not change this object. It directly affects the manager. + * @returns {{}} map of displaySetInstanceUid -> stack. + */ + getAllStacks() { + return stackMap; + }, + /** + * Adds in a callback to be called on a stack being added / updated. + * @param callback must accept at minimum one argument, + * which is the stack that was added / updated. + */ + addStackUpdatedCallback(callback) { + if (typeof callback !== 'function') { + throw new OHIFError('callback must be provided as a function'); + } + stackUpdatedCallbacks.push(callback); + }, + /** + * Return configuration + */ + getConfiguration() { + return configuration; + }, + /** + * Set configuration, in order to provide compatibility + * with other systems by overriding this functions + * @param {Object} config object with functions to be overrided + * + * For now, only makeAndAddStack can be overrided + */ + setConfiguration(config) { + configuration = config; + }, +}; + +export { StackManager }; +export default StackManager; diff --git a/platform/core/src/utils/absoluteUrl.js b/platform/core/src/utils/absoluteUrl.js new file mode 100644 index 00000000000..faf2369be7c --- /dev/null +++ b/platform/core/src/utils/absoluteUrl.js @@ -0,0 +1,20 @@ +const absoluteUrl = path => { + let absolutePath = '/'; + + if (!path) return absolutePath; + + // TODO: Find another way to get root url + const absoluteUrl = window.location.origin; + const absoluteUrlParts = absoluteUrl.split('/'); + + if (absoluteUrlParts.length > 4) { + const rootUrlPrefixIndex = absoluteUrl.indexOf(absoluteUrlParts[3]); + absolutePath += absoluteUrl.substring(rootUrlPrefixIndex) + path; + } else { + absolutePath += path; + } + + return absolutePath.replace(/\/\/+/g, '/'); +}; + +export default absoluteUrl; diff --git a/platform/core/src/utils/absoluteUrl.test.js b/platform/core/src/utils/absoluteUrl.test.js new file mode 100644 index 00000000000..7e69f69b213 --- /dev/null +++ b/platform/core/src/utils/absoluteUrl.test.js @@ -0,0 +1,51 @@ +import absoluteUrl from './absoluteUrl'; + +describe('absoluteUrl', () => { + test('should return /path_1/path_2/path_3/path_to_destination when the window.location.origin is http://dummy.com/path_1/path_2 and the path is /path_3/path_to_destination', () => { + let global = { + window: Object.create(window), + }; + const url = 'http://dummy.com/path_1/path_2'; + Object.defineProperty(window, 'location', { + value: { + origin: url, + }, + writable: true, + }); + const absoluteUrlOutput = absoluteUrl('/path_3/path_to_destination'); + expect(absoluteUrlOutput).toEqual( + '/path_1/path_2/path_3/path_to_destination' + ); + }); + + test('should return / when the path is not defined', () => { + const absoluteUrlOutput = absoluteUrl(undefined); + expect(absoluteUrlOutput).toBe('/'); + }); + + test('should return the original path when there path in the window.origin after the domain and port', () => { + global.window = Object.create(window); + const url = 'http://dummy.com'; + Object.defineProperty(window, 'location', { + value: { + origin: url, + }, + writable: true, + }); + const absoluteUrlOutput = absoluteUrl('path_1/path_2/path_3'); + expect(absoluteUrlOutput).toEqual('/path_1/path_2/path_3'); + }); + + test('should be able to return the absolute path even when the path contains duplicates', () => { + global.window = Object.create(window); + const url = 'http://dummy.com'; + Object.defineProperty(window, 'location', { + value: { + origin: url, + }, + writable: true, + }); + const absoluteUrlOutput = absoluteUrl('path_1/path_1/path_1'); + expect(absoluteUrlOutput).toEqual('/path_1/path_1/path_1'); + }); +}); diff --git a/platform/core/src/utils/addServer.test.js b/platform/core/src/utils/addServer.test.js new file mode 100644 index 00000000000..c5981bb4b40 --- /dev/null +++ b/platform/core/src/utils/addServer.test.js @@ -0,0 +1,82 @@ +import addServers from './addServers'; + +describe('addServers', () => { + const servers = { + dicomWeb: [ + { + name: 'DCM4CHEE', + wadoUriRoot: 'https://server.dcmjs.org/dcm4chee-arc/aets/DCM4CHEE/wado', + qidoRoot: 'https://server.dcmjs.org/dcm4chee-arc/aets/DCM4CHEE/rs', + wadoRoot: 'https://server.dcmjs.org/dcm4chee-arc/aets/DCM4CHEE/rs', + qidoSupportsIncludeField: true, + imageRendering: 'wadors', + thumbnailRendering: 'wadors', + requestOptions: { + requestFromBrowser: true, + }, + }, + ], + oidc: [ + { + authority: 'http://127.0.0.1/auth/realms/ohif', + client_id: 'ohif-viewer', + redirect_uri: 'http://127.0.0.1/callback', + response_type: 'code', + scope: 'openid', + post_logout_redirect_uri: '/logout-redirect.html', + }, + ], + }; + + const store = { + dispatch: jest.fn(), + }; + + test('should be able to add a server and dispatch to the store successfuly', () => { + addServers(servers, store); + expect(store.dispatch).toBeCalledWith({ + server: { + authority: 'http://127.0.0.1/auth/realms/ohif', + client_id: 'ohif-viewer', + post_logout_redirect_uri: '/logout-redirect.html', + redirect_uri: 'http://127.0.0.1/callback', + response_type: 'code', + scope: 'openid', + type: 'oidc', + }, + type: 'ADD_SERVER', + }); + expect(store.dispatch).toBeCalledWith({ + server: { + imageRendering: 'wadors', + name: 'DCM4CHEE', + qidoRoot: 'https://server.dcmjs.org/dcm4chee-arc/aets/DCM4CHEE/rs', + qidoSupportsIncludeField: true, + requestOptions: { requestFromBrowser: true }, + thumbnailRendering: 'wadors', + type: 'dicomWeb', + wadoRoot: 'https://server.dcmjs.org/dcm4chee-arc/aets/DCM4CHEE/rs', + wadoUriRoot: 'https://server.dcmjs.org/dcm4chee-arc/aets/DCM4CHEE/wado', + }, + type: 'ADD_SERVER', + }); + }); + + test('should throw an error if servers list is not defined', () => { + expect(() => addServers(undefined, store)).toThrowError( + new Error('The servers and store must be defined') + ); + }); + + test('should throw an error if store is not defined', () => { + expect(() => addServers(servers, undefined)).toThrowError( + new Error('The servers and store must be defined') + ); + }); + + test('should throw an error when both server and store are not defined', () => { + expect(() => addServers(undefined, undefined)).toThrowError( + new Error('The servers and store must be defined') + ); + }); +}); diff --git a/platform/core/src/utils/addServers.js b/platform/core/src/utils/addServers.js new file mode 100644 index 00000000000..c8252433778 --- /dev/null +++ b/platform/core/src/utils/addServers.js @@ -0,0 +1,21 @@ +// TODO: figure out where else to put this function +const addServers = (servers, store) => { + if (!servers || !store) { + throw new Error('The servers and store must be defined'); + } + + Object.keys(servers).forEach(serverType => { + const endpoints = servers[serverType]; + endpoints.forEach(endpoint => { + const server = Object.assign({}, endpoint); + server.type = serverType; + + store.dispatch({ + type: 'ADD_SERVER', + server, + }); + }); + }); +}; + +export default addServers; diff --git a/platform/core/src/utils/createStacks.draft-test.js b/platform/core/src/utils/createStacks.draft-test.js new file mode 100644 index 00000000000..b8a29b06ea6 --- /dev/null +++ b/platform/core/src/utils/createStacks.draft-test.js @@ -0,0 +1,33 @@ +// Leaving here as a starting point +// import createStacks from './createStacks.js'; + +// describe('createStacks.js', () => { +// const seriesMetadatas = [ +// { +// getInstanceCount: jest.fn().mockReturnValue(1), +// getData: jest.fn().mockReturnValue({ +// seriesDate: '2019-06-04', +// }), +// }, +// { +// getInstanceCount: jest.fn().mockReturnValue(1), +// getData: jest.fn().mockReturnValue({ +// seriesDate: '2018-06-04', +// }), +// }, +// ]; +// const studyMetadata = { +// getSeriesCount: jest.fn().mockReturnValue(2), +// forEachSeries: jest.fn().mockImplementation(callback => { +// callback(seriesMetadatas[0], 0); +// callback(seriesMetadatas[1], 1); +// }), +// getStudyInstanceUID: jest.fn(), +// }; + +// it('sorts displaySets by seriesNumber, then by seriesDate', () => { +// const displaySets = createStacks(studyMetadata); + +// expect(displaySets.length).toBe(2); +// }); +// }); diff --git a/platform/core/src/utils/getImageId.js b/platform/core/src/utils/getImageId.js new file mode 100644 index 00000000000..ccd5e39171d --- /dev/null +++ b/platform/core/src/utils/getImageId.js @@ -0,0 +1,55 @@ +import getWADORSImageId from './getWADORSImageId'; + +// https://stackoverflow.com/a/6021027/3895126 +function updateQueryStringParameter(uri, key, value) { + const regex = new RegExp('([?&])' + key + '=.*?(&|$)', 'i'); + const separator = uri.indexOf('?') !== -1 ? '&' : '?'; + if (uri.match(regex)) { + return uri.replace(regex, '$1' + key + '=' + value + '$2'); + } else { + return uri + separator + key + '=' + value; + } +} + +/** + * Obtain an imageId for Cornerstone from an image instance + * + * @param instance + * @param frame + * @param thumbnail + * @returns {string} The imageId to be used by Cornerstone + */ +export default function getImageId(instance, frame, thumbnail = false) { + if (!instance) { + return; + } + + if (typeof instance.getImageId === 'function') { + return instance.getImageId(); + } + + if (instance.url) { + if (frame !== undefined) { + instance.url = updateQueryStringParameter(instance.url, 'frame', frame); + } + + return instance.url; + } + + const renderingAttr = thumbnail ? 'thumbnailRendering' : 'imageRendering'; + + if ( + !instance[renderingAttr] || + instance[renderingAttr] === 'wadouri' || + !instance.wadorsuri + ) { + let imageId = 'dicomweb:' + instance.wadouri; + if (frame !== undefined) { + imageId += '&frame=' + frame; + } + + return imageId; + } else { + return getWADORSImageId(instance, frame, thumbnail); // WADO-RS Retrieve Frame + } +} diff --git a/platform/core/src/utils/getWADORSImageId.js b/platform/core/src/utils/getWADORSImageId.js new file mode 100644 index 00000000000..56dd6ab0d7a --- /dev/null +++ b/platform/core/src/utils/getWADORSImageId.js @@ -0,0 +1,32 @@ +function getWADORSImageUrl(instance, frame) { + let wadorsuri = instance.wadorsuri; + + if (!wadorsuri) { + return; + } + + // We need to sum 1 because WADO-RS frame number is 1-based + frame = frame ? parseInt(frame) + 1 : 1; + + // Replaces /frame/1 by /frame/{frame} + wadorsuri = wadorsuri.replace(/frames\/(\d+)/, `frames/${frame}`); + + return wadorsuri; +} + +/** + * Obtain an imageId for Cornerstone based on the WADO-RS scheme + * + * @param {object} instanceMetada metadata object (InstanceMetadata) + * @param {(string\|number)} [frame] the frame number + * @returns {string} The imageId to be used by Cornerstone + */ +export default function getWADORSImageId(instance, frame) { + const uri = getWADORSImageUrl(instance, frame); + + if (!uri) { + return; + } + + return `wadors:${uri}`; +} diff --git a/platform/core/src/utils/getWADORSImageId.test.js b/platform/core/src/utils/getWADORSImageId.test.js new file mode 100644 index 00000000000..6eeb78d25ae --- /dev/null +++ b/platform/core/src/utils/getWADORSImageId.test.js @@ -0,0 +1,65 @@ +import getWADORSImageId from './getWADORSImageId'; + +describe('getWADORSImageId', () => { + it('should always return undefined if the instance has no `wadorsuri` property', () => { + const frame = '42'; + const instance = {}; + + expect(getWADORSImageId(instance)).toBeUndefined(); + expect(getWADORSImageId(instance, frame)).toBeUndefined(); + }); + + it('should always prepend the `wadorsuri` with `wadors:`', () => { + const frame = '42'; + const instance = { + wadorsuri: 'wadorsuri', + }; + + expect(getWADORSImageId(instance)).toEqual('wadors:wadorsuri'); + expect(getWADORSImageId(instance, frame)).toEqual('wadors:wadorsuri'); + }); + + describe('with no frame provided', () => { + it('should replace `frames/:number` with `frames/1`', () => { + const instance = { + wadorsuri: 'frames/42', + }; + + expect(getWADORSImageId(instance)).toEqual('wadors:frames/1'); + }); + + it('should work on a real wadorsuri', () => { + const instance = { + wadorsuri: + 'https://server.dcmjs.org/dcm4chee-arc/aets/DCM4CHEE/rs/studies/1.3.6.1.4.1.25403.52237031786.3872.20100510032220.1/series/1.3.6.1.4.1.25403.52237031786.3872.20100510032220.2/instances/1.3.6.1.4.1.25403.52237031786.3872.20100510032220.8/frames/22', + }; + + expect(getWADORSImageId(instance)).toEqual( + 'wadors:https://server.dcmjs.org/dcm4chee-arc/aets/DCM4CHEE/rs/studies/1.3.6.1.4.1.25403.52237031786.3872.20100510032220.1/series/1.3.6.1.4.1.25403.52237031786.3872.20100510032220.2/instances/1.3.6.1.4.1.25403.52237031786.3872.20100510032220.8/frames/1' + ); + }); + }); + + describe('with a frame provided', () => { + it('should replace `frames/:number` with the argument frame plus one', () => { + const frame = '42'; + const instance = { + wadorsuri: 'frames/1', + }; + + expect(getWADORSImageId(instance, frame)).toEqual('wadors:frames/43'); + }); + + it('should work on a real wadorsuri', () => { + const frame = '42'; + const instance = { + wadorsuri: + 'https://server.dcmjs.org/dcm4chee-arc/aets/DCM4CHEE/rs/studies/1.3.6.1.4.1.25403.52237031786.3872.20100510032220.1/series/1.3.6.1.4.1.25403.52237031786.3872.20100510032220.2/instances/1.3.6.1.4.1.25403.52237031786.3872.20100510032220.8/frames/22', + }; + + expect(getWADORSImageId(instance, frame)).toEqual( + 'wadors:https://server.dcmjs.org/dcm4chee-arc/aets/DCM4CHEE/rs/studies/1.3.6.1.4.1.25403.52237031786.3872.20100510032220.1/series/1.3.6.1.4.1.25403.52237031786.3872.20100510032220.2/instances/1.3.6.1.4.1.25403.52237031786.3872.20100510032220.8/frames/43' + ); + }); + }); +}); diff --git a/platform/core/src/utils/guid.js b/platform/core/src/utils/guid.js new file mode 100644 index 00000000000..6ec6f829ef6 --- /dev/null +++ b/platform/core/src/utils/guid.js @@ -0,0 +1,28 @@ +/** + * Create a random GUID + * + * @return {string} + */ +const guid = () => { + const getFourRandomValues = () => { + return Math.floor((1 + Math.random()) * 0x10000) + .toString(16) + .substring(1); + }; + return ( + getFourRandomValues() + + getFourRandomValues() + + '-' + + getFourRandomValues() + + '-' + + getFourRandomValues() + + '-' + + getFourRandomValues() + + '-' + + getFourRandomValues() + + getFourRandomValues() + + getFourRandomValues() + ); +}; + +export default guid; diff --git a/platform/core/src/utils/guid.test.js b/platform/core/src/utils/guid.test.js new file mode 100644 index 00000000000..25d0d75dbb1 --- /dev/null +++ b/platform/core/src/utils/guid.test.js @@ -0,0 +1,46 @@ +import guid from './guid'; + +describe('guid', () => { + Math.random = jest.fn(() => 0.4677647565236618); + const guidValue = guid(); + + afterAll(() => { + jest.clearAllMocks(); + }); + + test('should return 77bf77bf-77bf-77bf-77bf-77bf77bf77bf when the random value is fixed on 0.4677647565236618', () => { + expect(guidValue).toBe('77bf77bf-77bf-77bf-77bf-77bf77bf77bf'); + }); + + test('should always return a guid of size 36', () => { + expect(guidValue.length).toBe(36); + }); + + test('should always return a guid with five sequences', () => { + expect(guidValue.split('-').length).toBe(5); + }); + + test('should always return a guid with four dashes', () => { + expect(guidValue.split('-').length - 1).toBe(4); + }); + + test('should return the first sequence with length of eigth', () => { + expect(guidValue.split('-')[0].length).toBe(8); + }); + + test('should return the second sequence with length of four', () => { + expect(guidValue.split('-')[1].length).toBe(4); + }); + + test('should return the third sequence with length of four', () => { + expect(guidValue.split('-')[2].length).toBe(4); + }); + + test('should return the fourth sequence with length of four', () => { + expect(guidValue.split('-')[3].length).toBe(4); + }); + + test('should return the last sequence with length of twelve', () => { + expect(guidValue.split('-')[4].length).toBe(12); + }); +}); diff --git a/platform/core/src/utils/index.js b/platform/core/src/utils/index.js new file mode 100644 index 00000000000..5d18a51fa6e --- /dev/null +++ b/platform/core/src/utils/index.js @@ -0,0 +1,40 @@ +import { DICOMTagDescriptions } from './DICOMTagDescriptions'; +import ObjectPath from './objectPath'; +import StackManager from './StackManager.js'; +import absoluteUrl from './absoluteUrl'; +import addServers from './addServers'; +import guid from './guid'; +import sortBy from './sortBy.js'; +import studyMetadataManager from './studyMetadataManager'; +import updateMetaDataManager from './updateMetaDataManager.js'; +import writeScript from './writeScript.js'; + +const utils = { + guid, + ObjectPath, + absoluteUrl, + addServers, + sortBy, + writeScript, + StackManager, + studyMetadataManager, + // Updates WADO-RS metaDataManager + updateMetaDataManager, + DICOMTagDescriptions, +}; + +export { + guid, + ObjectPath, + absoluteUrl, + addServers, + sortBy, + writeScript, + StackManager, + studyMetadataManager, + // Updates WADO-RS metaDataManager + updateMetaDataManager, + DICOMTagDescriptions, +}; + +export default utils; diff --git a/platform/core/src/utils/index.test.js b/platform/core/src/utils/index.test.js new file mode 100644 index 00000000000..a9d1d5b728c --- /dev/null +++ b/platform/core/src/utils/index.test.js @@ -0,0 +1,23 @@ +import * as utils from './index.js'; + +describe('Top level exports', () => { + test('should export the modules ', () => { + const expectedExports = [ + 'guid', + 'ObjectPath', + 'absoluteUrl', + 'addServers', + 'sortBy', + 'writeScript', + 'StackManager', + 'studyMetadataManager', + // Updates WADO-RS metaDataManager + 'updateMetaDataManager', + 'DICOMTagDescriptions', + ].sort(); + + const exports = Object.keys(utils.default).sort(); + + expect(exports).toEqual(expectedExports); + }); +}); diff --git a/platform/core/src/utils/isImage.js b/platform/core/src/utils/isImage.js new file mode 100644 index 00000000000..db1f79dc67e --- /dev/null +++ b/platform/core/src/utils/isImage.js @@ -0,0 +1,62 @@ +import { sopClassDictionary } from './sopClassDictionary'; + +const imagesTypes = [ + sopClassDictionary.ComputedRadiographyImageStorage, + sopClassDictionary.DigitalXRayImageStorageForPresentation, + sopClassDictionary.DigitalXRayImageStorageForProcessing, + sopClassDictionary.DigitalMammographyXRayImageStorageForPresentation, + sopClassDictionary.DigitalMammographyXRayImageStorageForProcessing, + sopClassDictionary.DigitalIntraOralXRayImageStorageForPresentation, + sopClassDictionary.DigitalIntraOralXRayImageStorageForProcessing, + sopClassDictionary.CTImageStorage, + sopClassDictionary.EnhancedCTImageStorage, + sopClassDictionary.LegacyConvertedEnhancedCTImageStorage, + sopClassDictionary.UltrasoundMultiframeImageStorage, + sopClassDictionary.MRImageStorage, + sopClassDictionary.EnhancedMRImageStorage, + sopClassDictionary.EnhancedMRColorImageStorage, + sopClassDictionary.LegacyConvertedEnhancedMRImageStorage, + sopClassDictionary.UltrasoundImageStorage, + sopClassDictionary.SecondaryCaptureImageStorage, + sopClassDictionary.MultiframeSingleBitSecondaryCaptureImageStorage, + sopClassDictionary.MultiframeGrayscaleByteSecondaryCaptureImageStorage, + sopClassDictionary.MultiframeGrayscaleWordSecondaryCaptureImageStorage, + sopClassDictionary.MultiframeTrueColorSecondaryCaptureImageStorage, + sopClassDictionary.XRayAngiographicImageStorage, + sopClassDictionary.EnhancedXAImageStorage, + sopClassDictionary.XRayRadiofluoroscopicImageStorage, + sopClassDictionary.EnhancedXRFImageStorage, + sopClassDictionary.XRay3DAngiographicImageStorage, + sopClassDictionary.XRay3DCraniofacialImageStorage, + sopClassDictionary.BreastTomosynthesisImageStorage, + sopClassDictionary.BreastProjectionXRayImageStorageForPresentation, + sopClassDictionary.BreastProjectionXRayImageStorageForProcessing, + sopClassDictionary.IntravascularOpticalCoherenceTomographyImageStorageForPresentation, + sopClassDictionary.IntravascularOpticalCoherenceTomographyImageStorageForProcessing, + sopClassDictionary.NuclearMedicineImageStorage, + sopClassDictionary.VLEndoscopicImageStorage, + sopClassDictionary.VideoEndoscopicImageStorage, + sopClassDictionary.VLMicroscopicImageStorage, + sopClassDictionary.VideoMicroscopicImageStorage, + sopClassDictionary.VLSlideCoordinatesMicroscopicImageStorage, + sopClassDictionary.VLPhotographicImageStorage, + sopClassDictionary.VideoPhotographicImageStorage, + sopClassDictionary.OphthalmicPhotography8BitImageStorage, + sopClassDictionary.OphthalmicPhotography16BitImageStorage, + sopClassDictionary.OphthalmicTomographyImageStorage, + sopClassDictionary.VLWholeSlideMicroscopyImageStorage, + sopClassDictionary.PositronEmissionTomographyImageStorage, + sopClassDictionary.EnhancedPETImageStorage, + sopClassDictionary.LegacyConvertedEnhancedPETImageStorage, + sopClassDictionary.RTImageStorage, +]; + +/** + * Checks whether dicom files with specified SOP Class UID have image data + * @param {string} sopClassUid - SOP Class UID to be checked + * @returns {boolean} - true if it has image data + */ +export const isImage = sopClassUid => { + if (!sopClassUid) return false; + return imagesTypes.indexOf(sopClassUid) !== -1; +}; diff --git a/platform/core/src/utils/isImage.test.js b/platform/core/src/utils/isImage.test.js new file mode 100644 index 00000000000..1f53ccea177 --- /dev/null +++ b/platform/core/src/utils/isImage.test.js @@ -0,0 +1,333 @@ +import { sopClassDictionary } from './sopClassDictionary'; +import { isImage } from './isImage'; + +describe('isImage', () => { + test('should return true when the image is of type sopClassDictionary.ComputedRadiographyImageStorage', () => { + const isImageStatus = isImage( + sopClassDictionary.ComputedRadiographyImageStorage + ); + expect(isImageStatus).toBe(true); + }); + + test('should return true when the image is of type sopClassDictionary.DigitalXRayImageStorageForPresentation', () => { + const isImageStatus = isImage( + sopClassDictionary.DigitalXRayImageStorageForPresentation + ); + expect(isImageStatus).toBe(true); + }); + + test('should return true when the image is of type sopClassDictionary.DigitalXRayImageStorageForProcessing', () => { + const isImageStatus = isImage( + sopClassDictionary.DigitalXRayImageStorageForProcessing + ); + expect(isImageStatus).toBe(true); + }); + + test('should return true when the image is of type sopClassDictionary.DigitalMammographyXRayImageStorageForPresentation', () => { + const isImageStatus = isImage( + sopClassDictionary.DigitalMammographyXRayImageStorageForPresentation + ); + expect(isImageStatus).toBe(true); + }); + + test('should return true when the image is of type sopClassDictionary.DigitalMammographyXRayImageStorageForProcessing', () => { + const isImageStatus = isImage( + sopClassDictionary.DigitalMammographyXRayImageStorageForProcessing + ); + expect(isImageStatus).toBe(true); + }); + + test('should return true when the image is of type sopClassDictionary.DigitalIntraOralXRayImageStorageForPresentation', () => { + const isImageStatus = isImage( + sopClassDictionary.DigitalIntraOralXRayImageStorageForPresentation + ); + expect(isImageStatus).toBe(true); + }); + + test('should return true when the image is of type sopClassDictionary.DigitalIntraOralXRayImageStorageForProcessing', () => { + const isImageStatus = isImage( + sopClassDictionary.DigitalIntraOralXRayImageStorageForProcessing + ); + expect(isImageStatus).toBe(true); + }); + + test('should return true when the image is of type sopClassDictionary.CTImageStorage', () => { + const isImageStatus = isImage(sopClassDictionary.CTImageStorage); + expect(isImageStatus).toBe(true); + }); + + test('should return true when the image is of type sopClassDictionary.EnhancedCTImageStorage', () => { + const isImageStatus = isImage(sopClassDictionary.EnhancedCTImageStorage); + expect(isImageStatus).toBe(true); + }); + + test('should return true when the image is of type sopClassDictionary.LegacyConvertedEnhancedCTImageStorage', () => { + const isImageStatus = isImage( + sopClassDictionary.LegacyConvertedEnhancedCTImageStorage + ); + expect(isImageStatus).toBe(true); + }); + + test('should return true when the image is of type sopClassDictionary.UltrasoundMultiframeImageStorage', () => { + const isImageStatus = isImage( + sopClassDictionary.UltrasoundMultiframeImageStorage + ); + expect(isImageStatus).toBe(true); + }); + + test('should return true when the image is of type sopClassDictionary.MRImageStorage', () => { + const isImageStatus = isImage(sopClassDictionary.MRImageStorage); + expect(isImageStatus).toBe(true); + }); + + test('should return true when the image is of type sopClassDictionary.EnhancedMRImageStorage', () => { + const isImageStatus = isImage(sopClassDictionary.EnhancedMRImageStorage); + expect(isImageStatus).toBe(true); + }); + + test('should return true when the image is of type sopClassDictionary.EnhancedMRColorImageStorage', () => { + const isImageStatus = isImage( + sopClassDictionary.EnhancedMRColorImageStorage + ); + expect(isImageStatus).toBe(true); + }); + + test('should return true when the image is of type sopClassDictionary.LegacyConvertedEnhancedMRImageStorage', () => { + const isImageStatus = isImage( + sopClassDictionary.LegacyConvertedEnhancedMRImageStorage + ); + expect(isImageStatus).toBe(true); + }); + + test('should return true when the image is of type sopClassDictionary.UltrasoundImageStorage', () => { + const isImageStatus = isImage(sopClassDictionary.UltrasoundImageStorage); + expect(isImageStatus).toBe(true); + }); + + test('should return true when the image is of type sopClassDictionary.SecondaryCaptureImageStorage', () => { + const isImageStatus = isImage( + sopClassDictionary.SecondaryCaptureImageStorage + ); + expect(isImageStatus).toBe(true); + }); + + test('should return true when the image is of type sopClassDictionary.MultiframeSingleBitSecondaryCaptureImageStorage', () => { + const isImageStatus = isImage( + sopClassDictionary.MultiframeSingleBitSecondaryCaptureImageStorage + ); + expect(isImageStatus).toBe(true); + }); + + test('should return true when the image is of type sopClassDictionary.MultiframeGrayscaleByteSecondaryCaptureImageStorage', () => { + const isImageStatus = isImage( + sopClassDictionary.MultiframeGrayscaleByteSecondaryCaptureImageStorage + ); + expect(isImageStatus).toBe(true); + }); + + test('should return true when the image is of type sopClassDictionary.MultiframeGrayscaleWordSecondaryCaptureImageStorage', () => { + const isImageStatus = isImage( + sopClassDictionary.MultiframeGrayscaleWordSecondaryCaptureImageStorage + ); + expect(isImageStatus).toBe(true); + }); + + test('should return true when the image is of type sopClassDictionary.MultiframeTrueColorSecondaryCaptureImageStorage', () => { + const isImageStatus = isImage( + sopClassDictionary.MultiframeTrueColorSecondaryCaptureImageStorage + ); + expect(isImageStatus).toBe(true); + }); + + test('should return true when the image is of type sopClassDictionary.XRayAngiographicImageStorage', () => { + const isImageStatus = isImage( + sopClassDictionary.XRayAngiographicImageStorage + ); + expect(isImageStatus).toBe(true); + }); + + test('should return true when the image is of type sopClassDictionary.EnhancedXAImageStorage', () => { + const isImageStatus = isImage(sopClassDictionary.EnhancedXAImageStorage); + expect(isImageStatus).toBe(true); + }); + + test('should return true when the image is of type sopClassDictionary.XRayRadiofluoroscopicImageStorage', () => { + const isImageStatus = isImage( + sopClassDictionary.XRayRadiofluoroscopicImageStorage + ); + expect(isImageStatus).toBe(true); + }); + + test('should return true when the image is of type sopClassDictionary.EnhancedXRFImageStorage', () => { + const isImageStatus = isImage(sopClassDictionary.EnhancedXRFImageStorage); + expect(isImageStatus).toBe(true); + }); + + test('should return true when the image is of type sopClassDictionary.XRay3DAngiographicImageStorage', () => { + const isImageStatus = isImage( + sopClassDictionary.XRay3DAngiographicImageStorage + ); + expect(isImageStatus).toBe(true); + }); + + test('should return true when the image is of type sopClassDictionary.XRay3DCraniofacialImageStorage', () => { + const isImageStatus = isImage( + sopClassDictionary.XRay3DCraniofacialImageStorage + ); + expect(isImageStatus).toBe(true); + }); + + test('should return true when the image is of type sopClassDictionary.BreastTomosynthesisImageStorage', () => { + const isImageStatus = isImage( + sopClassDictionary.BreastTomosynthesisImageStorage + ); + expect(isImageStatus).toBe(true); + }); + + test('should return true when the image is of type sopClassDictionary.BreastProjectionXRayImageStorageForPresentation', () => { + const isImageStatus = isImage( + sopClassDictionary.BreastProjectionXRayImageStorageForPresentation + ); + expect(isImageStatus).toBe(true); + }); + + test('should return true when the image is of type sopClassDictionary.BreastProjectionXRayImageStorageForProcessing', () => { + const isImageStatus = isImage( + sopClassDictionary.BreastProjectionXRayImageStorageForProcessing + ); + expect(isImageStatus).toBe(true); + }); + + test('should return true when the image is of type sopClassDictionary.IntravascularOpticalCoherenceTomographyImageStorageForPresentation', () => { + const isImageStatus = isImage( + sopClassDictionary.IntravascularOpticalCoherenceTomographyImageStorageForPresentation + ); + expect(isImageStatus).toBe(true); + }); + + test('should return true when the image is of type sopClassDictionary.IntravascularOpticalCoherenceTomographyImageStorageForProcessing', () => { + const isImageStatus = isImage( + sopClassDictionary.IntravascularOpticalCoherenceTomographyImageStorageForProcessing + ); + expect(isImageStatus).toBe(true); + }); + + test('should return true when the image is of type sopClassDictionary.NuclearMedicineImageStorage', () => { + const isImageStatus = isImage( + sopClassDictionary.NuclearMedicineImageStorage + ); + expect(isImageStatus).toBe(true); + }); + + test('should return true when the image is of type sopClassDictionary.VLEndoscopicImageStorage', () => { + const isImageStatus = isImage(sopClassDictionary.VLEndoscopicImageStorage); + expect(isImageStatus).toBe(true); + }); + + test('should return true when the image is of type sopClassDictionary.VideoEndoscopicImageStorage', () => { + const isImageStatus = isImage( + sopClassDictionary.VideoEndoscopicImageStorage + ); + expect(isImageStatus).toBe(true); + }); + + test('should return true when the image is of type sopClassDictionary.VLMicroscopicImageStorage', () => { + const isImageStatus = isImage(sopClassDictionary.VLMicroscopicImageStorage); + expect(isImageStatus).toBe(true); + }); + + test('should return true when the image is of type sopClassDictionary.VideoMicroscopicImageStorage', () => { + const isImageStatus = isImage( + sopClassDictionary.VideoMicroscopicImageStorage + ); + expect(isImageStatus).toBe(true); + }); + + test('should return true when the image is of type sopClassDictionary.VLSlideCoordinatesMicroscopicImageStorage', () => { + const isImageStatus = isImage( + sopClassDictionary.VLSlideCoordinatesMicroscopicImageStorage + ); + expect(isImageStatus).toBe(true); + }); + + test('should return true when the image is of type sopClassDictionary.VLPhotographicImageStorage', () => { + const isImageStatus = isImage( + sopClassDictionary.VLPhotographicImageStorage + ); + expect(isImageStatus).toBe(true); + }); + + test('should return true when the image is of type sopClassDictionary.VideoPhotographicImageStorage', () => { + const isImageStatus = isImage( + sopClassDictionary.VideoPhotographicImageStorage + ); + expect(isImageStatus).toBe(true); + }); + + test('should return true when the image is of type sopClassDictionary.OphthalmicPhotography8BitImageStorage', () => { + const isImageStatus = isImage( + sopClassDictionary.OphthalmicPhotography8BitImageStorage + ); + expect(isImageStatus).toBe(true); + }); + + test('should return true when the image is of type sopClassDictionary.OphthalmicPhotography16BitImageStorage', () => { + const isImageStatus = isImage( + sopClassDictionary.OphthalmicPhotography16BitImageStorage + ); + expect(isImageStatus).toBe(true); + }); + + test('should return true when the image is of type sopClassDictionary.OphthalmicTomographyImageStorage', () => { + const isImageStatus = isImage( + sopClassDictionary.OphthalmicTomographyImageStorage + ); + expect(isImageStatus).toBe(true); + }); + + test('should return true when the image is of type sopClassDictionary.VLWholeSlideMicroscopyImageStorage', () => { + const isImageStatus = isImage( + sopClassDictionary.VLWholeSlideMicroscopyImageStorage + ); + expect(isImageStatus).toBe(true); + }); + + test('should return true when the image is of type sopClassDictionary.PositronEmissionTomographyImageStorage', () => { + const isImageStatus = isImage( + sopClassDictionary.PositronEmissionTomographyImageStorage + ); + expect(isImageStatus).toBe(true); + }); + + test('should return true when the image is of type sopClassDictionary.EnhancedPETImageStorage', () => { + const isImageStatus = isImage(sopClassDictionary.EnhancedPETImageStorage); + expect(isImageStatus).toBe(true); + }); + + test('should return true when the image is of type sopClassDictionary.LegacyConvertedEnhancedPETImageStorage', () => { + const isImageStatus = isImage( + sopClassDictionary.LegacyConvertedEnhancedPETImageStorage + ); + expect(isImageStatus).toBe(true); + }); + + test('should return true when the image is of type sopClassDictionary.RTImageStorage', () => { + const isImageStatus = isImage(sopClassDictionary.RTImageStorage); + expect(isImageStatus).toBe(true); + }); + + test('should return false when the image is of type sopClassDictionary.SpatialFiducialsStorage', () => { + const isImageStatus = isImage(sopClassDictionary.SpatialFiducialsStorage); + expect(isImageStatus).toBe(false); + }); + + test('should return false when the image is undefined', () => { + const isImageStatus = isImage(undefined); + expect(isImageStatus).toBe(false); + }); + + test('should return false when the image is null', () => { + const isImageStatus = isImage(null); + expect(isImageStatus).toBe(false); + }); +}); diff --git a/platform/core/src/utils/objectPath.js b/platform/core/src/utils/objectPath.js new file mode 100644 index 00000000000..5727267d564 --- /dev/null +++ b/platform/core/src/utils/objectPath.js @@ -0,0 +1,98 @@ +export class ObjectPath { + /** + * Set an object property based on "path" (namespace) supplied creating + * ... intermediary objects if they do not exist. + * @param object {Object} An object where the properties specified on path should be set. + * @param path {String} A string representing the property to be set, e.g. "user.study.series.timepoint". + * @param value {Any} The value of the property that will be set. + * @return {Boolean} Returns "true" on success, "false" if any intermediate component of the supplied path + * ... is not a valid Object, in which case the property cannot be set. No excpetions are thrown. + */ + static set(object, path, value) { + let components = ObjectPath.getPathComponents(path), + length = components !== null ? components.length : 0, + result = false; + + if (length > 0 && ObjectPath.isValidObject(object)) { + let i = 0, + last = length - 1, + currentObject = object; + + while (i < last) { + let field = components[i]; + + if (field in currentObject) { + if (!ObjectPath.isValidObject(currentObject[field])) { + break; + } + } else { + currentObject[field] = {}; + } + + currentObject = currentObject[field]; + i++; + } + + if (i === last) { + currentObject[components[last]] = value; + result = true; + } + } + + return result; + } + + /** + * Get an object property based on "path" (namespace) supplied traversing the object + * ... tree as necessary. + * @param object {Object} An object where the properties specified might exist. + * @param path {String} A string representing the property to be searched for, e.g. "user.study.series.timepoint". + * @return {Any} The value of the property if found. By default, returns the special type "undefined". + */ + static get(object, path) { + let found, // undefined by default + components = ObjectPath.getPathComponents(path), + length = components !== null ? components.length : 0; + + if (length > 0 && ObjectPath.isValidObject(object)) { + let i = 0, + last = length - 1, + currentObject = object; + + while (i < last) { + let field = components[i]; + + const isValid = ObjectPath.isValidObject(currentObject[field]); + if (field in currentObject && isValid) { + currentObject = currentObject[field]; + i++; + } else { + break; + } + } + + if (i === last && components[last] in currentObject) { + found = currentObject[components[last]]; + } + } + + return found; + } + + /** + * Check if the supplied argument is a real JavaScript Object instance. + * @param object {Any} The subject to be tested. + * @return {Boolean} Returns "true" if the object is a real Object instance and "false" otherwise. + */ + static isValidObject(object) { + return ( + typeof object === 'object' && object !== null && object instanceof Object + ); + } + + static getPathComponents(path) { + return typeof path === 'string' ? path.split('.') : null; + } +} + +export default ObjectPath; diff --git a/platform/core/src/utils/objectPath.test.js b/platform/core/src/utils/objectPath.test.js new file mode 100644 index 00000000000..49cd4cde48e --- /dev/null +++ b/platform/core/src/utils/objectPath.test.js @@ -0,0 +1,99 @@ +import objectPath from './objectPath'; + +describe('objectPath', () => { + test('should return false when the supplied argument is not a real JavaScript Object instance such as undefined', () => { + expect(objectPath.isValidObject(undefined)).toBe(false); + }); + + test('should return false when the supplied argument is not a real JavaScript Object instance such as null', () => { + expect(objectPath.isValidObject(null)).toBe(false); + }); + + test('should return true when the supplied argument is a real JavaScript Object instance', () => { + expect(objectPath.isValidObject({})).toBe(true); + }); + + test('should return [path1, path2, path3] when the path is path1.path2.path3', () => { + const path = 'path1.path2.path3'; + const expectedPathComponents = objectPath.getPathComponents(path); + expect(expectedPathComponents).toEqual(['path1', 'path2', 'path3']); + }); + + test('should return null when the path is not a string', () => { + const path = 20; + const expectedPathComponents = objectPath.getPathComponents(path); + expect(expectedPathComponents).toEqual(null); + }); + + test('should return [path1path2path3] when the path is path1path2path3', () => { + const path = 'path1path2path3'; + const expectedPathComponents = objectPath.getPathComponents(path); + expect(expectedPathComponents).toEqual(['path1path2path3']); + }); + + test('should return the property obj.myProperty when the object contains myProperty', () => { + const searchObject = { + obj: { + myProperty: 'MOCK_VALUE', + }, + }; + const path = 'obj.myProperty'; + const expectedPathComponents = objectPath.get(searchObject, path); + expect(expectedPathComponents).toEqual(searchObject.obj.myProperty); + }); + + test('should return undefined when the object does not contain a property', () => { + const searchObject = { + obj: { + myProperty: 'MOCK_VALUE', + }, + }; + const path = 'obj.unknownProperty'; + const expectedPathComponents = objectPath.get(searchObject, path); + expect(expectedPathComponents).toEqual(undefined); + }); + + test('should return undefined when the object is not a valid object', () => { + const searchObject = undefined; + const path = 'obj.unknownProperty'; + const expectedPathComponents = objectPath.get(searchObject, path); + expect(expectedPathComponents).toEqual(undefined); + }); + + test('should return undefined when the inner object is not a valid object', () => { + const searchObject = { + obj: { + myProperty: null, + }, + }; + const path = 'obj.unknownProperty'; + const expectedPathComponents = objectPath.get(searchObject, path); + expect(expectedPathComponents).toEqual(undefined); + }); + + test('should set the property obj.myProperty when the object does not contain myProperty', () => { + const searchObject = { + obj: { + anyProperty: 'MOCK_VALUE', + }, + }; + const newValue = 'NEW_VALUE'; + const path = 'obj.myProperty'; + const output = objectPath.set(searchObject, path, newValue); + expect(output).toBe(true); + expect(searchObject.obj.myProperty).toEqual(newValue); + }); + + test('should return false when the object which is being set is not in a valid path', () => { + const searchObject = { + obj: { + myProperty: 'MOCK_VALUE', + }, + }; + const path = undefined; + const newValue = 'NEW_VALUE'; + + const output = objectPath.set(searchObject, path, newValue); + expect(output).toEqual(false); + }); +}); diff --git a/platform/core/src/utils/sopClassDictionary.js b/platform/core/src/utils/sopClassDictionary.js new file mode 100644 index 00000000000..f4a7cb6c75a --- /dev/null +++ b/platform/core/src/utils/sopClassDictionary.js @@ -0,0 +1,130 @@ +// TODO: Deprecate since we have the same thing in dcmjs? +export const sopClassDictionary = { + ComputedRadiographyImageStorage: '1.2.840.10008.5.1.4.1.1.1', + DigitalXRayImageStorageForPresentation: '1.2.840.10008.5.1.4.1.1.1.1', + DigitalXRayImageStorageForProcessing: '1.2.840.10008.5.1.4.1.1.1.1.1', + DigitalMammographyXRayImageStorageForPresentation: + '1.2.840.10008.5.1.4.1.1.1.2', + DigitalMammographyXRayImageStorageForProcessing: + '1.2.840.10008.5.1.4.1.1.1.2.1', + DigitalIntraOralXRayImageStorageForPresentation: + '1.2.840.10008.5.1.4.1.1.1.3', + DigitalIntraOralXRayImageStorageForProcessing: + '1.2.840.10008.5.1.4.1.1.1.3.1', + CTImageStorage: '1.2.840.10008.5.1.4.1.1.2', + EnhancedCTImageStorage: '1.2.840.10008.5.1.4.1.1.2.1', + LegacyConvertedEnhancedCTImageStorage: '1.2.840.10008.5.1.4.1.1.2.2', + UltrasoundMultiframeImageStorage: '1.2.840.10008.5.1.4.1.1.3.1', + MRImageStorage: '1.2.840.10008.5.1.4.1.1.4', + EnhancedMRImageStorage: '1.2.840.10008.5.1.4.1.1.4.1', + MRSpectroscopyStorage: '1.2.840.10008.5.1.4.1.1.4.2', + EnhancedMRColorImageStorage: '1.2.840.10008.5.1.4.1.1.4.3', + LegacyConvertedEnhancedMRImageStorage: '1.2.840.10008.5.1.4.1.1.4.4', + UltrasoundImageStorage: '1.2.840.10008.5.1.4.1.1.6.1', + EnhancedUSVolumeStorage: '1.2.840.10008.5.1.4.1.1.6.2', + SecondaryCaptureImageStorage: '1.2.840.10008.5.1.4.1.1.7', + MultiframeSingleBitSecondaryCaptureImageStorage: + '1.2.840.10008.5.1.4.1.1.7.1', + MultiframeGrayscaleByteSecondaryCaptureImageStorage: + '1.2.840.10008.5.1.4.1.1.7.2', + MultiframeGrayscaleWordSecondaryCaptureImageStorage: + '1.2.840.10008.5.1.4.1.1.7.3', + MultiframeTrueColorSecondaryCaptureImageStorage: + '1.2.840.10008.5.1.4.1.1.7.4', + Sop12LeadECGWaveformStorage: '1.2.840.10008.5.1.4.1.1.9.1.1', + GeneralECGWaveformStorage: '1.2.840.10008.5.1.4.1.1.9.1.2', + AmbulatoryECGWaveformStorage: '1.2.840.10008.5.1.4.1.1.9.1.3', + HemodynamicWaveformStorage: '1.2.840.10008.5.1.4.1.1.9.2.1', + CardiacElectrophysiologyWaveformStorage: '1.2.840.10008.5.1.4.1.1.9.3.1', + BasicVoiceAudioWaveformStorage: '1.2.840.10008.5.1.4.1.1.9.4.1', + GeneralAudioWaveformStorage: '1.2.840.10008.5.1.4.1.1.9.4.2', + ArterialPulseWaveformStorage: '1.2.840.10008.5.1.4.1.1.9.5.1', + RespiratoryWaveformStorage: '1.2.840.10008.5.1.4.1.1.9.6.1', + GrayscaleSoftcopyPresentationStateStorage: '1.2.840.10008.5.1.4.1.1.11.1', + ColorSoftcopyPresentationStateStorage: '1.2.840.10008.5.1.4.1.1.11.2', + PseudoColorSoftcopyPresentationStateStorage: '1.2.840.10008.5.1.4.1.1.11.3', + BlendingSoftcopyPresentationStateStorage: '1.2.840.10008.5.1.4.1.1.11.4', + XAXRFGrayscaleSoftcopyPresentationStateStorage: + '1.2.840.10008.5.1.4.1.1.11.5', + XRayAngiographicImageStorage: '1.2.840.10008.5.1.4.1.1.12.1', + EnhancedXAImageStorage: '1.2.840.10008.5.1.4.1.1.12.1.1', + XRayRadiofluoroscopicImageStorage: '1.2.840.10008.5.1.4.1.1.12.2', + EnhancedXRFImageStorage: '1.2.840.10008.5.1.4.1.1.12.2.1', + XRay3DAngiographicImageStorage: '1.2.840.10008.5.1.4.1.1.13.1.1', + XRay3DCraniofacialImageStorage: '1.2.840.10008.5.1.4.1.1.13.1.2', + BreastTomosynthesisImageStorage: '1.2.840.10008.5.1.4.1.1.13.1.3', + BreastProjectionXRayImageStorageForPresentation: + '1.2.840.10008.5.1.4.1.1.13.1.4', + BreastProjectionXRayImageStorageForProcessing: + '1.2.840.10008.5.1.4.1.1.13.1.5', + IntravascularOpticalCoherenceTomographyImageStorageForPresentation: + '1.2.840.10008.5.1.4.1.1.14.1', + IntravascularOpticalCoherenceTomographyImageStorageForProcessing: + '1.2.840.10008.5.1.4.1.1.14.2', + NuclearMedicineImageStorage: '1.2.840.10008.5.1.4.1.1.20', + RawDataStorage: '1.2.840.10008.5.1.4.1.1.66', + SpatialRegistrationStorage: '1.2.840.10008.5.1.4.1.1.66.1', + SpatialFiducialsStorage: '1.2.840.10008.5.1.4.1.1.66.2', + DeformableSpatialRegistrationStorage: '1.2.840.10008.5.1.4.1.1.66.3', + SegmentationStorage: '1.2.840.10008.5.1.4.1.1.66.4', + SurfaceSegmentationStorage: '1.2.840.10008.5.1.4.1.1.66.5', + RealWorldValueMappingStorage: '1.2.840.10008.5.1.4.1.1.67', + SurfaceScanMeshStorage: '1.2.840.10008.5.1.4.1.1.68.1', + SurfaceScanPointCloudStorage: '1.2.840.10008.5.1.4.1.1.68.2', + VLEndoscopicImageStorage: '1.2.840.10008.5.1.4.1.1.77.1.1', + VideoEndoscopicImageStorage: '1.2.840.10008.5.1.4.1.1.77.1.1.1', + VLMicroscopicImageStorage: '1.2.840.10008.5.1.4.1.1.77.1.2', + VideoMicroscopicImageStorage: '1.2.840.10008.5.1.4.1.1.77.1.2.1', + VLSlideCoordinatesMicroscopicImageStorage: '1.2.840.10008.5.1.4.1.1.77.1.3', + VLPhotographicImageStorage: '1.2.840.10008.5.1.4.1.1.77.1.4', + VideoPhotographicImageStorage: '1.2.840.10008.5.1.4.1.1.77.1.4.1', + OphthalmicPhotography8BitImageStorage: '1.2.840.10008.5.1.4.1.1.77.1.5.1', + OphthalmicPhotography16BitImageStorage: '1.2.840.10008.5.1.4.1.1.77.1.5.2', + StereometricRelationshipStorage: '1.2.840.10008.5.1.4.1.1.77.1.5.3', + OphthalmicTomographyImageStorage: '1.2.840.10008.5.1.4.1.1.77.1.5.4', + VLWholeSlideMicroscopyImageStorage: '1.2.840.10008.5.1.4.1.1.77.1.6', + LensometryMeasurementsStorage: '1.2.840.10008.5.1.4.1.1.78.1', + AutorefractionMeasurementsStorage: '1.2.840.10008.5.1.4.1.1.78.2', + KeratometryMeasurementsStorage: '1.2.840.10008.5.1.4.1.1.78.3', + SubjectiveRefractionMeasurementsStorage: '1.2.840.10008.5.1.4.1.1.78.4', + VisualAcuityMeasurementsStorage: '1.2.840.10008.5.1.4.1.1.78.5', + SpectaclePrescriptionReportStorage: '1.2.840.10008.5.1.4.1.1.78.6', + OphthalmicAxialMeasurementsStorage: '1.2.840.10008.5.1.4.1.1.78.7', + IntraocularLensCalculationsStorage: '1.2.840.10008.5.1.4.1.1.78.8', + MacularGridThicknessandVolumeReport: '1.2.840.10008.5.1.4.1.1.79.1', + OphthalmicVisualFieldStaticPerimetryMeasurementsStorage: + '1.2.840.10008.5.1.4.1.1.80.1', + OphthalmicThicknessMapStorage: '1.2.840.10008.5.1.4.1.1.81.1', + CornealTopographyMapStorage: '1.2.840.10008.5.1.4.1.1.82.1', + BasicTextSR: '1.2.840.10008.5.1.4.1.1.88.11', + EnhancedSR: '1.2.840.10008.5.1.4.1.1.88.22', + ComprehensiveSR: '1.2.840.10008.5.1.4.1.1.88.33', + Comprehensive3DSR: '1.2.840.10008.5.1.4.1.1.88.34', + ProcedureLog: '1.2.840.10008.5.1.4.1.1.88.40', + MammographyCADSR: '1.2.840.10008.5.1.4.1.1.88.50', + KeyObjectSelection: '1.2.840.10008.5.1.4.1.1.88.59', + ChestCADSR: '1.2.840.10008.5.1.4.1.1.88.65', + XRayRadiationDoseSR: '1.2.840.10008.5.1.4.1.1.88.67', + RadiopharmaceuticalRadiationDoseSR: '1.2.840.10008.5.1.4.1.1.88.68', + ColonCADSR: '1.2.840.10008.5.1.4.1.1.88.69', + ImplantationPlanSRDocumentStorage: '1.2.840.10008.5.1.4.1.1.88.70', + EncapsulatedPDFStorage: '1.2.840.10008.5.1.4.1.1.104.1', + EncapsulatedCDAStorage: '1.2.840.10008.5.1.4.1.1.104.2', + PositronEmissionTomographyImageStorage: '1.2.840.10008.5.1.4.1.1.128', + EnhancedPETImageStorage: '1.2.840.10008.5.1.4.1.1.130', + LegacyConvertedEnhancedPETImageStorage: '1.2.840.10008.5.1.4.1.1.128.1', + BasicStructuredDisplayStorage: '1.2.840.10008.5.1.4.1.1.131', + RTImageStorage: '1.2.840.10008.5.1.4.1.1.481.1', + RTDoseStorage: '1.2.840.10008.5.1.4.1.1.481.2', + RTStructureSetStorage: '1.2.840.10008.5.1.4.1.1.481.3', + RTBeamsTreatmentRecordStorage: '1.2.840.10008.5.1.4.1.1.481.4', + RTPlanStorage: '1.2.840.10008.5.1.4.1.1.481.5', + RTBrachyTreatmentRecordStorage: '1.2.840.10008.5.1.4.1.1.481.6', + RTTreatmentSummaryRecordStorage: '1.2.840.10008.5.1.4.1.1.481.7', + RTIonPlanStorage: '1.2.840.10008.5.1.4.1.1.481.8', + RTIonBeamsTreatmentRecordStorage: '1.2.840.10008.5.1.4.1.1.481.9', + RTBeamsDeliveryInstructionStorage: '1.2.840.10008.5.1.4.34.7', + GenericImplantTemplateStorage: '1.2.840.10008.5.1.4.43.1', + ImplantAssemblyTemplateStorage: '1.2.840.10008.5.1.4.44.1', + ImplantTemplateGroupStorage: '1.2.840.10008.5.1.4.45.1', +}; diff --git a/platform/core/src/utils/sortBy.js b/platform/core/src/utils/sortBy.js new file mode 100644 index 00000000000..39f21ef245b --- /dev/null +++ b/platform/core/src/utils/sortBy.js @@ -0,0 +1,40 @@ +// Return the array sorting function for its object's properties +export default function sortBy() { + var fields = [].slice.call(arguments), + n_fields = fields.length; + + return function(A, B) { + var a, b, field, key, reverse, result, i; + + for (i = 0; i < n_fields; i++) { + result = 0; + field = fields[i]; + + key = typeof field === 'string' ? field : field.name; + + a = A[key]; + b = B[key]; + + if (typeof field.primer !== 'undefined') { + a = field.primer(a); + b = field.primer(b); + } + + reverse = field.reverse ? -1 : 1; + + if (a < b) { + result = reverse * -1; + } + + if (a > b) { + result = reverse * 1; + } + + if (result !== 0) { + break; + } + } + + return result; + }; +} diff --git a/platform/core/src/utils/studyMetadataManager.js b/platform/core/src/utils/studyMetadataManager.js new file mode 100644 index 00000000000..79da423263e --- /dev/null +++ b/platform/core/src/utils/studyMetadataManager.js @@ -0,0 +1,31 @@ +import { TypeSafeCollection } from '../classes/TypeSafeCollection'; + +const studyMetadataList = new TypeSafeCollection(); + +function add(studyMetadata) { + studyMetadataList.insert(studyMetadata); +} + +function get(studyInstanceUID) { + return studyMetadataList.findBy({ studyInstanceUID }); +} + +function all(options) { + return studyMetadataList.all(options); +} + +function remove(studyInstanceUID) { + studyMetadataList.remove({ studyInstanceUID }); +} + +function purge() { + studyMetadataList.removeAll(); +} + +export default { + add, + get, + all, + remove, + purge, +}; diff --git a/platform/core/src/utils/updateMetaDataManager.js b/platform/core/src/utils/updateMetaDataManager.js new file mode 100644 index 00000000000..e4e60a40d5d --- /dev/null +++ b/platform/core/src/utils/updateMetaDataManager.js @@ -0,0 +1,101 @@ +import { WadoRsMetaDataBuilder } from '../classes/metadata/WadoRsMetaDataBuilder'; +import cornerstoneWADOImageLoader from 'cornerstone-wado-image-loader'; +import getWADORSImageId from './getWADORSImageId'; + +function getRadiopharmaceuticalInfoMetaData(instance) { + const radiopharmaceuticalInfo = instance.radiopharmaceuticalInfo; + + if (instance.modality !== 'PT' || !radiopharmaceuticalInfo) { + return; + } + + return new WadoRsMetaDataBuilder() + .addTag('00181072', radiopharmaceuticalInfo.radiopharmaceuticalStartTime) + .addTag('00181074', radiopharmaceuticalInfo.radionuclideTotalDose) + .addTag('00181075', radiopharmaceuticalInfo.radionuclideHalfLife) + .toJSON(); +} + +const getWadoRsInstanceMetaData = (study, series, instance) => { + return new WadoRsMetaDataBuilder() + .addTag('00080016', instance.sopClassUid) + .addTag('00080018', instance.sopInstanceUid) + .addTag('00080021', series.seriesDate) + .addTag('00080031', series.seriesTime) + .addTag('0008103e', series.seriesDescription) + .addTag('00080060', series.modality) + .addTag('00101010', study.patientAge) + .addTag('00101020', study.patientSize) + .addTag('00101030', study.patientWeight) + .addTag('0020000d', study.studyInstanceUid) + .addTag('00081030', study.studyDescription) + .addTag('00100010', study.patientName) + .addTag('00100020', study.patientId) + .addTag('00080020', study.studyDate) + .addTag('00080030', study.studyTime) + .addTag('00080050', study.accessionNumber) + .addTag('00200013', instance.instanceNumber) + .addTag('00180050', instance.sliceThickness) + .addTag('0020000e', series.seriesInstanceUid) + .addTag('00200011', series.seriesNumber) + .addTag('00200032', instance.imagePositionPatient, true) + .addTag('00200037', instance.imageOrientationPatient, true) + .addTag('00200052', instance.frameOfReferenceUID) + .addTag('00201041', instance.sliceLocation) + .addTag('00280002', instance.samplesPerPixel) + .addTag('00280004', instance.photometricInterpretation) + .addTag('00280006', instance.planarConfiguration) + .addTag('00280010', instance.rows) + .addTag('00280011', instance.columns) + .addTag('00280030', instance.pixelSpacing, true) + .addTag('00280034', instance.pixelAspectRatio, true) + .addTag('00280100', instance.bitsAllocated) + .addTag('00280101', instance.bitsStored) + .addTag('00280102', instance.highBit) + .addTag('00280103', instance.pixelRepresentation) + .addTag('00280106', instance.smallestPixelValue) + .addTag('00280107', instance.largestPixelValue) + .addTag('00281050', instance.windowCenter, true) + .addTag('00281051', instance.windowWidth, true) + .addTag('00281052', instance.rescaleIntercept) + .addTag('00281053', instance.rescaleSlope) + .addTag('00281054', instance.rescaleType) + .addTag('00281101', instance.redPaletteColorLookupTableDescriptor) + .addTag('00281102', instance.greenPaletteColorLookupTableDescriptor) + .addTag('00281103', instance.bluePaletteColorLookupTableDescriptor) + .addTag('00281201', instance.redPaletteColorLookupTableData) + .addTag('00281202', instance.greenPaletteColorLookupTableData) + .addTag('00281203', instance.bluePaletteColorLookupTableData) + .addTag('00540016', getRadiopharmaceuticalInfoMetaData(instance)) + .toJSON(); +}; + +export default function updateMetaDataManager(study) { + study.seriesList.forEach(series => { + series.instances.forEach(instance => { + // Cache just images that are going to be loaded via WADO-RS + if ( + instance.imageRendering !== 'wadors' && + instance.thumbnailRendering !== 'wadors' + ) { + return; + } + + const metaData = getWadoRsInstanceMetaData(study, series, instance); + const numberOfFrames = instance.numberOfFrames || 1; + + // We can share the same metaData with all frames because it doesn't have + // any frame specific data, such as frameNumber, pixelData, offset, etc. + // WADO-RS frame number is 1-based + for (let frameNumber = 0; frameNumber < numberOfFrames; frameNumber++) { + const imageId = getWADORSImageId(instance, frameNumber); + + // TODO Drop dependency on this + cornerstoneWADOImageLoader.wadors.metaDataManager.add( + imageId, + metaData + ); + } + }); + }); +} diff --git a/platform/core/src/utils/writeScript.js b/platform/core/src/utils/writeScript.js new file mode 100644 index 00000000000..6bd5b0d53ee --- /dev/null +++ b/platform/core/src/utils/writeScript.js @@ -0,0 +1,14 @@ +/* jshint -W060 */ +import absoluteUrl from './absoluteUrl'; + +export default function writeScript(fileName, callback) { + const script = document.createElement('script'); + script.src = absoluteUrl(fileName); + script.onload = () => { + if (typeof callback === 'function') { + callback(script); + } + }; + + document.body.appendChild(script); +} diff --git a/platform/i18n/.webpack/webpack.dev.js b/platform/i18n/.webpack/webpack.dev.js new file mode 100644 index 00000000000..180994fd663 --- /dev/null +++ b/platform/i18n/.webpack/webpack.dev.js @@ -0,0 +1,16 @@ +const path = require('path'); +const merge = require('webpack-merge'); +const webpackCommon = require('./../../../.webpack/webpack.common.js'); + +// +const SRC_DIR = path.join(__dirname, '../src'); +const DIST_DIR = path.join(__dirname, '../dist'); + +module.exports = (env, argv) => { + const commonConfig = webpackCommon(env, argv, { SRC_DIR, DIST_DIR }); + + return merge(commonConfig, { + // https://webpack.js.org/configuration/mode/#mode-development + mode: 'development', + }); +}; diff --git a/platform/i18n/.webpack/webpack.prod.js b/platform/i18n/.webpack/webpack.prod.js new file mode 100644 index 00000000000..ed1926af1a4 --- /dev/null +++ b/platform/i18n/.webpack/webpack.prod.js @@ -0,0 +1,39 @@ +const merge = require('webpack-merge'); +const path = require('path'); +const webpackCommon = require('./../../../.webpack/webpack.common.js'); +const pkg = require('./../package.json'); + +const ROOT_DIR = path.join(__dirname, './..'); +const SRC_DIR = path.join(__dirname, '../src'); +const DIST_DIR = path.join(__dirname, '../dist'); + +module.exports = (env, argv) => { + const commonConfig = webpackCommon(env, argv, { SRC_DIR, DIST_DIR }); + + return merge(commonConfig, { + // https://webpack.js.org/configuration/mode/#mode-production + mode: 'production', + devtool: 'source-map', + stats: { + colors: true, + hash: true, + timings: true, + assets: true, + chunks: false, + chunkModules: false, + modules: false, + children: false, + warnings: true, + }, + optimization: { + minimize: true, + sideEffects: true, + }, + output: { + path: ROOT_DIR, + library: 'ohifI18n', + libraryTarget: 'umd', + filename: pkg.main, + }, + }); +}; diff --git a/platform/i18n/CHANGELOG.md b/platform/i18n/CHANGELOG.md new file mode 100644 index 00000000000..2058d957af2 --- /dev/null +++ b/platform/i18n/CHANGELOG.md @@ -0,0 +1,61 @@ +# Change Log + +All notable changes to this project will be documented in this file. See +[Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +## [0.2.3-alpha.7](https://github.com/OHIF/Viewers/compare/@ohif/i18n@0.2.3-alpha.6...@ohif/i18n@0.2.3-alpha.7) (2019-08-08) + +**Note:** Version bump only for package @ohif/i18n + +# Change Log + +All notable changes to this project will be documented in this file. See +[Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +## [0.2.3-alpha.6](https://github.com/OHIF/Viewers/compare/@ohif/i18n@0.2.3-alpha.5...@ohif/i18n@0.2.3-alpha.6) (2019-08-08) + +**Note:** Version bump only for package @ohif/i18n + +# Change Log + +All notable changes to this project will be documented in this file. See +[Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +## [0.2.3-alpha.5](https://github.com/OHIF/Viewers/compare/@ohif/i18n@0.2.3-alpha.4...@ohif/i18n@0.2.3-alpha.5) (2019-08-08) + +**Note:** Version bump only for package @ohif/i18n + +# Change Log + +All notable changes to this project will be documented in this file. See +[Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +## [0.2.3-alpha.4](https://github.com/OHIF/Viewers/compare/@ohif/i18n@0.2.3-alpha.3...@ohif/i18n@0.2.3-alpha.4) (2019-08-08) + +**Note:** Version bump only for package @ohif/i18n + +# Change Log + +All notable changes to this project will be documented in this file. See +[Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +## [0.2.3-alpha.3](https://github.com/OHIF/Viewers/compare/@ohif/i18n@0.2.3-alpha.2...@ohif/i18n@0.2.3-alpha.3) (2019-08-08) + +**Note:** Version bump only for package @ohif/i18n + +# Change Log + +All notable changes to this project will be documented in this file. See +[Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +## [0.2.3-alpha.2](https://github.com/OHIF/Viewers/compare/@ohif/i18n@0.2.3-alpha.1...@ohif/i18n@0.2.3-alpha.2) (2019-08-07) + +**Note:** Version bump only for package @ohif/i18n + +## [0.2.3-alpha.1](https://github.com/OHIF/Viewers/compare/@ohif/i18n@0.2.3-alpha.0...@ohif/i18n@0.2.3-alpha.1) (2019-08-07) + +**Note:** Version bump only for package @ohif/i18n + +## 0.2.3-alpha.0 (2019-08-05) + +**Note:** Version bump only for package @ohif/i18n diff --git a/platform/i18n/LICENSE b/platform/i18n/LICENSE new file mode 100644 index 00000000000..19e20dd35ca --- /dev/null +++ b/platform/i18n/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2018 Open Health Imaging Foundation + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/extensions/ohif-i18n/README.md b/platform/i18n/README.md similarity index 100% rename from extensions/ohif-i18n/README.md rename to platform/i18n/README.md diff --git a/platform/i18n/babel.config.js b/platform/i18n/babel.config.js new file mode 100644 index 00000000000..fed6f05fecd --- /dev/null +++ b/platform/i18n/babel.config.js @@ -0,0 +1 @@ +module.exports = require("../../babel.config.js"); diff --git a/platform/i18n/package.json b/platform/i18n/package.json new file mode 100644 index 00000000000..f703158ae41 --- /dev/null +++ b/platform/i18n/package.json @@ -0,0 +1,52 @@ +{ + "name": "@ohif/i18n", + "version": "0.2.3-alpha.7", + "description": "Internationalization library for The OHIF Viewer", + "author": "OHIF", + "license": "MIT", + "repository": "OHIF/Viewers", + "main": "dist/index.umd.js", + "module": "src/index.js", + "engines": { + "node": ">=8", + "npm": ">=5" + }, + "files": [ + "dist", + "README.md" + ], + "publishConfig": { + "access": "public" + }, + "scripts": { + "dev": "webpack --config .webpack/webpack.dev.js --watch --debug --output-pathinfo", + "dev:i18n": "yarn run dev", + "build": "webpack --config .webpack/webpack.prod.js", + "build:package": "yarn run build", + "prepublishOnly": "yarn run build", + "pullTranslations": "./pullTranslations.sh", + "test:unit": "echo 'platform/i18n: missing unit tests'", + "test:unit:ci": "echo 'platform/i18n: missing unit tests'" + }, + "peerDependencies": { + "i18next": "^17.0.3", + "i18next-browser-languagedetector": "^3.0.1", + "react": "^16.0.0", + "react-dom": "^16.0.0", + "react-i18next": "^10.11.0" + }, + "dependencies": { + "@babel/runtime": "^7.5.5", + "classnames": "^2.2.6", + "i18next-locize-backend": "^2.0.0", + "locize-editor": "^2.0.0", + "locize-lastused": "^1.1.0", + "rollup-plugin-json": "^4.0.0" + }, + "devDependencies": { + "i18next": "^15.1.3", + "i18next-browser-languagedetector": "^3.0.1", + "locize-cli": "^4.8.0", + "react-i18next": "^10.11.0" + } +} diff --git a/extensions/ohif-i18n/pullTranslations.sh b/platform/i18n/pullTranslations.sh old mode 100755 new mode 100644 similarity index 100% rename from extensions/ohif-i18n/pullTranslations.sh rename to platform/i18n/pullTranslations.sh diff --git a/extensions/ohif-i18n/src/config.js b/platform/i18n/src/config.js similarity index 100% rename from extensions/ohif-i18n/src/config.js rename to platform/i18n/src/config.js diff --git a/extensions/ohif-i18n/src/debugger.js b/platform/i18n/src/debugger.js similarity index 100% rename from extensions/ohif-i18n/src/debugger.js rename to platform/i18n/src/debugger.js diff --git a/extensions/ohif-i18n/src/index.js b/platform/i18n/src/index.js old mode 100755 new mode 100644 similarity index 100% rename from extensions/ohif-i18n/src/index.js rename to platform/i18n/src/index.js diff --git a/extensions/ohif-i18n/src/locales/en-US/Buttons.json b/platform/i18n/src/locales/en-US/Buttons.json similarity index 100% rename from extensions/ohif-i18n/src/locales/en-US/Buttons.json rename to platform/i18n/src/locales/en-US/Buttons.json diff --git a/extensions/ohif-i18n/src/locales/en-US/CineDialog.json b/platform/i18n/src/locales/en-US/CineDialog.json similarity index 100% rename from extensions/ohif-i18n/src/locales/en-US/CineDialog.json rename to platform/i18n/src/locales/en-US/CineDialog.json diff --git a/extensions/ohif-i18n/src/locales/en-US/Common.json b/platform/i18n/src/locales/en-US/Common.json similarity index 100% rename from extensions/ohif-i18n/src/locales/en-US/Common.json rename to platform/i18n/src/locales/en-US/Common.json diff --git a/extensions/ohif-i18n/src/locales/en-US/Header.json b/platform/i18n/src/locales/en-US/Header.json similarity index 100% rename from extensions/ohif-i18n/src/locales/en-US/Header.json rename to platform/i18n/src/locales/en-US/Header.json diff --git a/extensions/ohif-i18n/src/locales/en-US/MeasurementTable.json b/platform/i18n/src/locales/en-US/MeasurementTable.json similarity index 100% rename from extensions/ohif-i18n/src/locales/en-US/MeasurementTable.json rename to platform/i18n/src/locales/en-US/MeasurementTable.json diff --git a/extensions/ohif-i18n/src/locales/en-US/StudyList.json b/platform/i18n/src/locales/en-US/StudyList.json similarity index 100% rename from extensions/ohif-i18n/src/locales/en-US/StudyList.json rename to platform/i18n/src/locales/en-US/StudyList.json diff --git a/extensions/ohif-i18n/src/locales/en-US/UserPreferencesModal.json b/platform/i18n/src/locales/en-US/UserPreferencesModal.json similarity index 100% rename from extensions/ohif-i18n/src/locales/en-US/UserPreferencesModal.json rename to platform/i18n/src/locales/en-US/UserPreferencesModal.json diff --git a/extensions/ohif-i18n/src/locales/en-US/index.js b/platform/i18n/src/locales/en-US/index.js similarity index 100% rename from extensions/ohif-i18n/src/locales/en-US/index.js rename to platform/i18n/src/locales/en-US/index.js diff --git a/extensions/ohif-i18n/src/locales/es/Buttons.json b/platform/i18n/src/locales/es/Buttons.json similarity index 100% rename from extensions/ohif-i18n/src/locales/es/Buttons.json rename to platform/i18n/src/locales/es/Buttons.json diff --git a/extensions/ohif-i18n/src/locales/es/CineDialog.json b/platform/i18n/src/locales/es/CineDialog.json similarity index 100% rename from extensions/ohif-i18n/src/locales/es/CineDialog.json rename to platform/i18n/src/locales/es/CineDialog.json diff --git a/extensions/ohif-i18n/src/locales/es/Common.json b/platform/i18n/src/locales/es/Common.json similarity index 100% rename from extensions/ohif-i18n/src/locales/es/Common.json rename to platform/i18n/src/locales/es/Common.json diff --git a/extensions/ohif-i18n/src/locales/es/Header.json b/platform/i18n/src/locales/es/Header.json similarity index 100% rename from extensions/ohif-i18n/src/locales/es/Header.json rename to platform/i18n/src/locales/es/Header.json diff --git a/extensions/ohif-i18n/src/locales/es/MeasurementTable.json b/platform/i18n/src/locales/es/MeasurementTable.json similarity index 100% rename from extensions/ohif-i18n/src/locales/es/MeasurementTable.json rename to platform/i18n/src/locales/es/MeasurementTable.json diff --git a/extensions/ohif-i18n/src/locales/es/StudyList.json b/platform/i18n/src/locales/es/StudyList.json similarity index 100% rename from extensions/ohif-i18n/src/locales/es/StudyList.json rename to platform/i18n/src/locales/es/StudyList.json diff --git a/extensions/ohif-i18n/src/locales/es/UserPreferencesModal.json b/platform/i18n/src/locales/es/UserPreferencesModal.json similarity index 100% rename from extensions/ohif-i18n/src/locales/es/UserPreferencesModal.json rename to platform/i18n/src/locales/es/UserPreferencesModal.json diff --git a/extensions/ohif-i18n/src/locales/es/index.js b/platform/i18n/src/locales/es/index.js similarity index 100% rename from extensions/ohif-i18n/src/locales/es/index.js rename to platform/i18n/src/locales/es/index.js diff --git a/extensions/ohif-i18n/src/locales/index.js b/platform/i18n/src/locales/index.js similarity index 100% rename from extensions/ohif-i18n/src/locales/index.js rename to platform/i18n/src/locales/index.js diff --git a/extensions/ohif-i18n/src/locales/nl/Buttons.json b/platform/i18n/src/locales/nl/Buttons.json similarity index 100% rename from extensions/ohif-i18n/src/locales/nl/Buttons.json rename to platform/i18n/src/locales/nl/Buttons.json diff --git a/extensions/ohif-i18n/src/locales/nl/Common.json b/platform/i18n/src/locales/nl/Common.json similarity index 100% rename from extensions/ohif-i18n/src/locales/nl/Common.json rename to platform/i18n/src/locales/nl/Common.json diff --git a/extensions/ohif-i18n/src/locales/nl/Header.json b/platform/i18n/src/locales/nl/Header.json similarity index 100% rename from extensions/ohif-i18n/src/locales/nl/Header.json rename to platform/i18n/src/locales/nl/Header.json diff --git a/extensions/ohif-i18n/src/locales/nl/index.js b/platform/i18n/src/locales/nl/index.js similarity index 100% rename from extensions/ohif-i18n/src/locales/nl/index.js rename to platform/i18n/src/locales/nl/index.js diff --git a/extensions/ohif-i18n/src/locales/pt-BR/Buttons.json b/platform/i18n/src/locales/pt-BR/Buttons.json similarity index 100% rename from extensions/ohif-i18n/src/locales/pt-BR/Buttons.json rename to platform/i18n/src/locales/pt-BR/Buttons.json diff --git a/extensions/ohif-i18n/src/locales/pt-BR/CineDialog.json b/platform/i18n/src/locales/pt-BR/CineDialog.json similarity index 100% rename from extensions/ohif-i18n/src/locales/pt-BR/CineDialog.json rename to platform/i18n/src/locales/pt-BR/CineDialog.json diff --git a/extensions/ohif-i18n/src/locales/pt-BR/Common.json b/platform/i18n/src/locales/pt-BR/Common.json similarity index 100% rename from extensions/ohif-i18n/src/locales/pt-BR/Common.json rename to platform/i18n/src/locales/pt-BR/Common.json diff --git a/extensions/ohif-i18n/src/locales/pt-BR/Header.json b/platform/i18n/src/locales/pt-BR/Header.json similarity index 100% rename from extensions/ohif-i18n/src/locales/pt-BR/Header.json rename to platform/i18n/src/locales/pt-BR/Header.json diff --git a/extensions/ohif-i18n/src/locales/pt-BR/UserPreferencesModal.json b/platform/i18n/src/locales/pt-BR/UserPreferencesModal.json similarity index 100% rename from extensions/ohif-i18n/src/locales/pt-BR/UserPreferencesModal.json rename to platform/i18n/src/locales/pt-BR/UserPreferencesModal.json diff --git a/extensions/ohif-i18n/src/locales/pt-BR/index.js b/platform/i18n/src/locales/pt-BR/index.js similarity index 100% rename from extensions/ohif-i18n/src/locales/pt-BR/index.js rename to platform/i18n/src/locales/pt-BR/index.js diff --git a/extensions/ohif-i18n/src/locales/vi/Buttons.json b/platform/i18n/src/locales/vi/Buttons.json similarity index 100% rename from extensions/ohif-i18n/src/locales/vi/Buttons.json rename to platform/i18n/src/locales/vi/Buttons.json diff --git a/extensions/ohif-i18n/src/locales/vi/CineDialog.json b/platform/i18n/src/locales/vi/CineDialog.json similarity index 100% rename from extensions/ohif-i18n/src/locales/vi/CineDialog.json rename to platform/i18n/src/locales/vi/CineDialog.json diff --git a/extensions/ohif-i18n/src/locales/vi/Common.json b/platform/i18n/src/locales/vi/Common.json similarity index 100% rename from extensions/ohif-i18n/src/locales/vi/Common.json rename to platform/i18n/src/locales/vi/Common.json diff --git a/extensions/ohif-i18n/src/locales/vi/Header.json b/platform/i18n/src/locales/vi/Header.json similarity index 100% rename from extensions/ohif-i18n/src/locales/vi/Header.json rename to platform/i18n/src/locales/vi/Header.json diff --git a/extensions/ohif-i18n/src/locales/vi/StudyList.json b/platform/i18n/src/locales/vi/StudyList.json similarity index 100% rename from extensions/ohif-i18n/src/locales/vi/StudyList.json rename to platform/i18n/src/locales/vi/StudyList.json diff --git a/extensions/ohif-i18n/src/locales/vi/UserPreferencesModal.json b/platform/i18n/src/locales/vi/UserPreferencesModal.json similarity index 100% rename from extensions/ohif-i18n/src/locales/vi/UserPreferencesModal.json rename to platform/i18n/src/locales/vi/UserPreferencesModal.json diff --git a/extensions/ohif-i18n/src/locales/vi/index.js b/platform/i18n/src/locales/vi/index.js similarity index 100% rename from extensions/ohif-i18n/src/locales/vi/index.js rename to platform/i18n/src/locales/vi/index.js diff --git a/extensions/ohif-i18n/src/locales/zh/Buttons.json b/platform/i18n/src/locales/zh/Buttons.json similarity index 100% rename from extensions/ohif-i18n/src/locales/zh/Buttons.json rename to platform/i18n/src/locales/zh/Buttons.json diff --git a/extensions/ohif-i18n/src/locales/zh/CineDialog.json b/platform/i18n/src/locales/zh/CineDialog.json similarity index 100% rename from extensions/ohif-i18n/src/locales/zh/CineDialog.json rename to platform/i18n/src/locales/zh/CineDialog.json diff --git a/extensions/ohif-i18n/src/locales/zh/Common.json b/platform/i18n/src/locales/zh/Common.json similarity index 100% rename from extensions/ohif-i18n/src/locales/zh/Common.json rename to platform/i18n/src/locales/zh/Common.json diff --git a/extensions/ohif-i18n/src/locales/zh/Header.json b/platform/i18n/src/locales/zh/Header.json similarity index 100% rename from extensions/ohif-i18n/src/locales/zh/Header.json rename to platform/i18n/src/locales/zh/Header.json diff --git a/extensions/ohif-i18n/src/locales/zh/MeasurementTable.json b/platform/i18n/src/locales/zh/MeasurementTable.json similarity index 100% rename from extensions/ohif-i18n/src/locales/zh/MeasurementTable.json rename to platform/i18n/src/locales/zh/MeasurementTable.json diff --git a/extensions/ohif-i18n/src/locales/zh/StudyList.json b/platform/i18n/src/locales/zh/StudyList.json similarity index 100% rename from extensions/ohif-i18n/src/locales/zh/StudyList.json rename to platform/i18n/src/locales/zh/StudyList.json diff --git a/extensions/ohif-i18n/src/locales/zh/UserPreferencesModal.json b/platform/i18n/src/locales/zh/UserPreferencesModal.json similarity index 100% rename from extensions/ohif-i18n/src/locales/zh/UserPreferencesModal.json rename to platform/i18n/src/locales/zh/UserPreferencesModal.json diff --git a/extensions/ohif-i18n/src/locales/zh/index.js b/platform/i18n/src/locales/zh/index.js similarity index 100% rename from extensions/ohif-i18n/src/locales/zh/index.js rename to platform/i18n/src/locales/zh/index.js diff --git a/extensions/ohif-i18n/writeLocaleIndexFiles.js b/platform/i18n/writeLocaleIndexFiles.js similarity index 100% rename from extensions/ohif-i18n/writeLocaleIndexFiles.js rename to platform/i18n/writeLocaleIndexFiles.js diff --git a/platform/ui/.all-contributorsrc b/platform/ui/.all-contributorsrc new file mode 100644 index 00000000000..c90301bbb43 --- /dev/null +++ b/platform/ui/.all-contributorsrc @@ -0,0 +1,135 @@ +{ + "projectName": "@ohif/ui", + "projectOwner": "OHIF", + "repoType": "github", + "repoHost": "https://github.com", + "files": [ + "README.md" + ], + "imageSize": 100, + "commit": true, + "commitConvention": "none", + "contributors": [ + { + "login": "swederik", + "name": "Erik Ziegler", + "avatar_url": "https://avatars3.githubusercontent.com/u/607793?v=4", + "profile": "https://github.com/swederik", + "contributions": [ + "code", + "maintenance" + ] + }, + { + "login": "dannyrb", + "name": "Danny Brown", + "avatar_url": "https://avatars1.githubusercontent.com/u/5797588?v=4", + "profile": "http://dannyrb.com/", + "contributions": [ + "code", + "maintenance" + ] + }, + { + "login": "galelis", + "name": "Gustavo AndrΓ© Lelis", + "avatar_url": "https://avatars3.githubusercontent.com/u/2378326?v=4", + "profile": "https://github.com/galelis", + "contributions": [ + "code", + "maintenance" + ] + }, + { + "login": "maltempi", + "name": "Thiago Maltempi", + "avatar_url": "https://avatars3.githubusercontent.com/u/7017182?v=4", + "profile": "https://github.com/maltempi", + "contributions": [ + "code" + ] + }, + { + "login": "EsrefDurna", + "name": "Esref Durna", + "avatar_url": "https://avatars0.githubusercontent.com/u/1230575?v=4", + "profile": "https://www.linkedin.com/in/siliconvalleynextgeneration/", + "contributions": [ + "code" + ] + }, + { + "login": "pieper", + "name": "Steve Pieper", + "avatar_url": "https://avatars0.githubusercontent.com/u/126077?v=4", + "profile": "http://www.isomics.com", + "contributions": [ + "code" + ] + }, + { + "login": "biharck", + "name": "Biharck Araujo", + "avatar_url": "https://avatars0.githubusercontent.com/u/1713255?v=4", + "profile": "http://www.biharck.com.br", + "contributions": [ + "code" + ] + }, + { + "login": "rodrigolabs", + "name": "Rodrigo Antinarelli", + "avatar_url": "https://avatars3.githubusercontent.com/u/1905961?v=4", + "profile": "https://rodrigoea.com/", + "contributions": [ + "code" + ] + }, + { + "login": "jfmedeiros1820", + "name": "JoΓ£o Felipe de Medeiros Moreira", + "avatar_url": "https://avatars1.githubusercontent.com/u/2211708?v=4", + "profile": "https://github.com/jfmedeiros1820", + "contributions": [ + "code" + ] + }, + { + "login": "jamesg1", + "name": "James Gosbell", + "avatar_url": "https://avatars3.githubusercontent.com/u/3621147?v=4", + "profile": "https://github.com/jamesg1", + "contributions": [ + "code" + ] + }, + { + "login": "evren217", + "name": "Evren Ozkan", + "avatar_url": "https://avatars1.githubusercontent.com/u/4920551?v=4", + "profile": "https://github.com/evren217", + "contributions": [ + "code" + ] + }, + { + "login": "zsaltzman", + "name": "Zach S.", + "avatar_url": "https://avatars1.githubusercontent.com/u/19156530?v=4", + "profile": "https://github.com/zsaltzman", + "contributions": [ + "code" + ] + }, + { + "login": "muakdogan", + "name": "Mete Ugur Akdogan", + "avatar_url": "https://avatars0.githubusercontent.com/u/19971240?v=4", + "profile": "https://github.com/muakdogan", + "contributions": [ + "code" + ] + } + ], + "contributorsPerLine": 7 +} diff --git a/platform/ui/.env b/platform/ui/.env new file mode 100644 index 00000000000..0708aefacdf --- /dev/null +++ b/platform/ui/.env @@ -0,0 +1,11 @@ +#### +## +## We need to pin WebPack's version for docz to work. See this issue: +## https://github.com/pedronauck/docz/issues/704#issuecomment-480295032 +## +## react-scripts checks that dependency versions match before running +## Our top level webpack version causes the preflight check to fail +## This prevents that check +## +#### +SKIP_PREFLIGHT_CHECK=true diff --git a/platform/ui/.webpack/webpack.prod.js b/platform/ui/.webpack/webpack.prod.js new file mode 100644 index 00000000000..6b7e20bdb53 --- /dev/null +++ b/platform/ui/.webpack/webpack.prod.js @@ -0,0 +1,39 @@ +const merge = require('webpack-merge'); +const path = require('path'); +const webpackCommon = require('./../../../.webpack/webpack.common.js'); +const pkg = require('./../package.json'); + +const ROOT_DIR = path.join(__dirname, './..'); +const SRC_DIR = path.join(__dirname, '../src'); +const DIST_DIR = path.join(__dirname, '../dist'); + +module.exports = (env, argv) => { + const commonConfig = webpackCommon(env, argv, { SRC_DIR, DIST_DIR }); + + return merge(commonConfig, { + // https://webpack.js.org/configuration/mode/#mode-production + mode: 'production', + devtool: 'source-map', + stats: { + colors: true, + hash: true, + timings: true, + assets: true, + chunks: false, + chunkModules: false, + modules: false, + children: false, + warnings: true, + }, + optimization: { + minimize: true, + sideEffects: true, + }, + output: { + path: ROOT_DIR, + library: 'ohifUi', + libraryTarget: 'umd', + filename: pkg.main, + }, + }); +}; diff --git a/platform/ui/CHANGELOG.md b/platform/ui/CHANGELOG.md new file mode 100644 index 00000000000..4f61cf44905 --- /dev/null +++ b/platform/ui/CHANGELOG.md @@ -0,0 +1,61 @@ +# Change Log + +All notable changes to this project will be documented in this file. See +[Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +## [0.2.18-alpha.7](https://github.com/OHIF/Viewers/compare/@ohif/ui@0.2.18-alpha.6...@ohif/ui@0.2.18-alpha.7) (2019-08-08) + +**Note:** Version bump only for package @ohif/ui + +# Change Log + +All notable changes to this project will be documented in this file. See +[Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +## [0.2.18-alpha.6](https://github.com/OHIF/Viewers/compare/@ohif/ui@0.2.18-alpha.5...@ohif/ui@0.2.18-alpha.6) (2019-08-08) + +**Note:** Version bump only for package @ohif/ui + +# Change Log + +All notable changes to this project will be documented in this file. See +[Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +## [0.2.18-alpha.5](https://github.com/OHIF/Viewers/compare/@ohif/ui@0.2.18-alpha.4...@ohif/ui@0.2.18-alpha.5) (2019-08-08) + +**Note:** Version bump only for package @ohif/ui + +# Change Log + +All notable changes to this project will be documented in this file. See +[Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +## [0.2.18-alpha.4](https://github.com/OHIF/Viewers/compare/@ohif/ui@0.2.18-alpha.3...@ohif/ui@0.2.18-alpha.4) (2019-08-08) + +**Note:** Version bump only for package @ohif/ui + +# Change Log + +All notable changes to this project will be documented in this file. See +[Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +## [0.2.18-alpha.3](https://github.com/OHIF/Viewers/compare/@ohif/ui@0.2.18-alpha.2...@ohif/ui@0.2.18-alpha.3) (2019-08-08) + +**Note:** Version bump only for package @ohif/ui + +# Change Log + +All notable changes to this project will be documented in this file. See +[Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +## [0.2.18-alpha.2](https://github.com/OHIF/Viewers/compare/@ohif/ui@0.2.18-alpha.1...@ohif/ui@0.2.18-alpha.2) (2019-08-07) + +**Note:** Version bump only for package @ohif/ui + +## [0.2.18-alpha.1](https://github.com/OHIF/Viewers/compare/@ohif/ui@0.2.18-alpha.0...@ohif/ui@0.2.18-alpha.1) (2019-08-07) + +**Note:** Version bump only for package @ohif/ui + +## 0.2.18-alpha.0 (2019-08-05) + +**Note:** Version bump only for package @ohif/ui diff --git a/platform/ui/LICENSE b/platform/ui/LICENSE new file mode 100644 index 00000000000..19e20dd35ca --- /dev/null +++ b/platform/ui/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2018 Open Health Imaging Foundation + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/platform/ui/README.md b/platform/ui/README.md new file mode 100644 index 00000000000..284ca4991eb --- /dev/null +++ b/platform/ui/README.md @@ -0,0 +1,126 @@ + + +
+

@ohif/ui

+ +

@ohif/ui is a collection of components and utilities that power OHIF's zero-footprint DICOM viewer.

+
+ + + +
+ +[![NPM version][npm-version-image]][npm-url] +[![NPM downloads][npm-downloads-image]][npm-url] +[![All Contributors](https://img.shields.io/badge/all_contributors-13-orange.svg?style=flat-square)](#contributors) +[![MIT License][license-image]][license-url] + + + +This set of "Medical Imaging Viewer" React components are maintained separately +to: + +- Decouple presentation from business logic +- Test and develop components in isolation +- Provide well documented, reusable components +- Aid rapid application development for context specific viewers + +## Install + +> This component library is pre- v1.0. All realeases until a v1.0 have the +> possibility of introducing breaking changes. Please depend on an "exact" +> version in your projects to prevent issues caused by loose versioning. + +For full installation instructions, be sure to check out our +[getting started](https://react.ohif.org/getting-started#installation) guide. + +```bash +// with npm +npm i @ohif/ui --save-exact + +// with yarn +yarn add @ohif/ui --exact +``` + +## Usage + +```jsx +import React, { Component } from "react"; +import { LayoutButton } from "@ohif/ui"; + +class Example extends Component { + constructor(props) { + super(props); + + this.state = { + selectedCell: { + className: "hover", + col: 1, + row: 1 + } + }; + } + + render() { + return ( + this.setState({ selectedCell: cell })} + /> + ); + } +} +``` + +## Developing Locally + +_Restore dependencies after cloning:_ + +```bash +# Restore workspace dependencies (from repository root) +yarn install + +# From project root +yarn run dev:ui + +# OR from this project's directory +yarn run dev + +``` + +## Contributors ✨ + +Thanks goes to these wonderful people +([emoji key](https://allcontributors.org/docs/en/emoji-key)): + + + +
Erik Ziegler
Erik Ziegler

πŸ’» 🚧
Danny Brown
Danny Brown

πŸ’» 🚧
Gustavo AndrΓ© Lelis
Gustavo AndrΓ© Lelis

πŸ’» 🚧
Thiago Maltempi
Thiago Maltempi

πŸ’»
Esref Durna
Esref Durna

πŸ’»
Steve Pieper
Steve Pieper

πŸ’»
Biharck Araujo
Biharck Araujo

πŸ’»
Rodrigo Antinarelli
Rodrigo Antinarelli

πŸ’»
JoΓ£o Felipe de Medeiros Moreira
JoΓ£o Felipe de Medeiros Moreira

πŸ’»
James Gosbell
James Gosbell

πŸ’»
Evren Ozkan
Evren Ozkan

πŸ’»
Zach S.
Zach S.

πŸ’»
Mete Ugur Akdogan
Mete Ugur Akdogan

πŸ’»
+ + + +This project follows the +[all-contributors](https://github.com/all-contributors/all-contributors) +specification. Contributions of any kind welcome! + +## License + +MIT Β© [OHIF](https://github.com/OHIF) + + + + +[all-contributors-image]: https://img.shields.io/badge/all_contributors-0-orange.svg?style=flat-square +[contributing-url]: https://github.com/OHIF/react-viewerbase/blob/master/CONTRIBUTING.md +[npm-url]: https://npmjs.org/package/react-viewerbase +[npm-downloads-image]: https://img.shields.io/npm/dm/react-viewerbase.svg?style=flat-square +[npm-version-image]: https://img.shields.io/npm/v/react-viewerbase.svg?style=flat-square +[license-image]: https://img.shields.io/badge/license-MIT-blue.svg?style=flat-square +[license-url]: LICENSE + diff --git a/platform/ui/app.css b/platform/ui/app.css new file mode 100644 index 00000000000..96f3a6db2ea --- /dev/null +++ b/platform/ui/app.css @@ -0,0 +1,12 @@ +.ExampleDropTarget{display:-webkit-box;display:flex;-webkit-box-pack:center;justify-content:center;-webkit-box-orient:vertical;-webkit-box-direction:normal;flex-direction:column;min-height:100px;border:2px dashed #000;padding:20px;-webkit-transition:all .2s ease;transition:all .2s ease}.ExampleDropTarger p,.ExampleDropTarget h4{text-align:center;word-break:break-word}.ExampleDropTarget.can-drop{border:2px dashed #20a5d6;background-color:#fafafa;color:#000}.ExampleDropTarget.hovered{border:2px dashed #20a5d6;background-color:#000;color:#91b9cd;cursor:copy} +.animated{-webkit-animation-duration:1s;animation-duration:1s;-webkit-animation-fill-mode:both;animation-fill-mode:both}@-webkit-keyframes shake{0%,to{-webkit-transform:translateX(0)}10%,30%,50%,70%,90%{-webkit-transform:translateX(-10px)}20%,40%,60%,80%{-webkit-transform:translateX(10px)}}@keyframes shake{0%,to{-webkit-transform:translateX(0);transform:translateX(0)}10%,30%,50%,70%,90%{-webkit-transform:translateX(-10px);transform:translateX(-10px)}20%,40%,60%,80%{-webkit-transform:translateX(10px);transform:translateX(10px)}}.shake{-webkit-animation-name:shake;animation-name:shake}.modal{display:block}.modal-content>.close{position:absolute;top:10px;right:10px}@media (min-width:768px){.modal-sm>.modal-dialog{width:300px}}@media (min-width:992px){.modal-lg>.modal-dialog{width:900px}} +.RoundedButtonGroup{--height:25px;position:relative;z-index:0}.roundedButtonWrapper{cursor:pointer;display:inline-block;float:left;margin-left:-2px;text-decoration:none;text-align:center}.roundedButtonWrapper.disabled{opacity:.5;cursor:not-allowed}.RoundedButtonGroup .roundedButtonWrapper .roundedButton{-webkit-box-align:center;align-items:center;background-color:var(--ui-gray-dark);border:2px solid var(--ui-border-color-dark);color:var(--text-secondary-color);display:-webkit-box;display:flex;font-size:15px;font-weight:500;-webkit-box-pack:center;justify-content:center;height:var(--height);line-height:var(--height);padding:0 22px;position:relative;text-transform:uppercase;-webkit-transition:var(--sidebar-transition);transition:var(--sidebar-transition);z-index:1}.roundedButtonWrapper .roundedButton svg .roundedButtonWrapper .roundedButton span{margin:0 2px}.roundedButtonWrapper .roundedButton i{line-height:15px;font-size:15px}.bottomLabel{color:var(--text-secondary-color);font-size:12px;font-weight:500;line-height:12px;margin-top:8px}.roundedButtonWrapper:first-child{margin-left:0}.RoundedButtonGroup .roundedButtonWrapper:first-child .roundedButton{border-bottom-left-radius:var(--height);border-top-left-radius:var(--height)}.RoundedButtonGroup .roundedButtonWrapper:last-child .roundedButton{border-bottom-right-radius:var(--height);border-top-right-radius:var(--height)}.roundedButtonWrapper:hover .roundedButton{background-color:var(--box-background-color);color:var(--ui-gray-dark)}.roundedButtonWrapper.active .roundedButton{background-color:var(--active-color);border-color:var(--ui-border-color-active);color:var(--ui-gray-dark);z-index:2} +.PresetDateRangePicker_panel{padding:0 22px 11px}.PresetDateRangePicker_button{position:relative;height:100%;text-align:center;background:0 0;border:2px solid #00a699;color:#00a699;padding:4px 12px;margin-right:8px;font:inherit;font-weight:700;line-height:normal;overflow:visible;box-sizing:border-box;cursor:pointer}.PresetDateRangePicker_button:active{outline:0}.PresetDateRangePicker_button__selected{color:#fff;background:#00a699}.SingleDatePickerInput{display:inline-block;background-color:#fff}.SingleDatePickerInput__withBorder{border-radius:2px;border:1px solid #dbdbdb}.SingleDatePickerInput__rtl{direction:rtl}.SingleDatePickerInput__disabled{background-color:#f2f2f2}.SingleDatePickerInput__block{display:block}.SingleDatePickerInput__showClearDate{padding-right:30px}.SingleDatePickerInput_clearDate{background:0 0;border:0;color:inherit;font:inherit;line-height:normal;overflow:visible;cursor:pointer;padding:10px;margin:0 10px 0 5px;position:absolute;right:0;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.SingleDatePickerInput_clearDate__default:focus,.SingleDatePickerInput_clearDate__default:hover{background:#dbdbdb;border-radius:50%}.SingleDatePickerInput_clearDate__small{padding:6px}.SingleDatePickerInput_clearDate__hide{visibility:hidden}.SingleDatePickerInput_clearDate_svg{fill:#82888a;height:12px;width:15px;vertical-align:middle}.SingleDatePickerInput_clearDate_svg__small{height:9px}.SingleDatePickerInput_calendarIcon{background:0 0;border:0;color:inherit;font:inherit;line-height:normal;overflow:visible;cursor:pointer;display:inline-block;vertical-align:middle;padding:10px;margin:0 5px 0 10px}.SingleDatePickerInput_calendarIcon_svg{fill:#82888a;height:15px;width:14px;vertical-align:middle}.SingleDatePicker{position:relative;display:inline-block}.SingleDatePicker__block{display:block}.SingleDatePicker_picker{z-index:1;background-color:#fff;position:absolute}.SingleDatePicker_picker__rtl{direction:rtl}.SingleDatePicker_picker__directionLeft{left:0}.SingleDatePicker_picker__directionRight{right:0}.SingleDatePicker_picker__portal{background-color:rgba(0,0,0,.3);position:fixed;top:0;left:0;height:100%;width:100%}.SingleDatePicker_picker__fullScreenPortal{background-color:#fff}.SingleDatePicker_closeButton{background:0 0;border:0;color:inherit;font:inherit;line-height:normal;overflow:visible;cursor:pointer;position:absolute;top:0;right:0;padding:15px;z-index:2}.SingleDatePicker_closeButton:focus,.SingleDatePicker_closeButton:hover{color:darken(#cacccd,10%);text-decoration:none}.SingleDatePicker_closeButton_svg{height:15px;width:15px;fill:#cacccd}.DayPickerKeyboardShortcuts_buttonReset{background:0 0;border:0;border-radius:0;color:inherit;font:inherit;line-height:normal;overflow:visible;padding:0;cursor:pointer;font-size:14px}.DayPickerKeyboardShortcuts_buttonReset:active{outline:0}.DayPickerKeyboardShortcuts_show{width:33px;height:26px;position:absolute;z-index:2}.DayPickerKeyboardShortcuts_show:before{content:"";display:block;position:absolute}.DayPickerKeyboardShortcuts_show__bottomRight{bottom:0;right:0}.DayPickerKeyboardShortcuts_show__bottomRight:before{border-top:26px solid transparent;border-right:33px solid #00a699;bottom:0;right:0}.DayPickerKeyboardShortcuts_show__bottomRight:hover:before{border-right:33px solid #008489}.DayPickerKeyboardShortcuts_show__topRight{top:0;right:0}.DayPickerKeyboardShortcuts_show__topRight:before{border-bottom:26px solid transparent;border-right:33px solid #00a699;top:0;right:0}.DayPickerKeyboardShortcuts_show__topRight:hover:before{border-right:33px solid #008489}.DayPickerKeyboardShortcuts_show__topLeft{top:0;left:0}.DayPickerKeyboardShortcuts_show__topLeft:before{border-bottom:26px solid transparent;border-left:33px solid #00a699;top:0;left:0}.DayPickerKeyboardShortcuts_show__topLeft:hover:before{border-left:33px solid #008489}.DayPickerKeyboardShortcuts_showSpan{color:#fff;position:absolute}.DayPickerKeyboardShortcuts_showSpan__bottomRight{bottom:0;right:5px}.DayPickerKeyboardShortcuts_showSpan__topRight{top:1px;right:5px}.DayPickerKeyboardShortcuts_showSpan__topLeft{top:1px;left:5px}.DayPickerKeyboardShortcuts_panel{overflow:auto;background:#fff;border:1px solid #dbdbdb;border-radius:2px;position:absolute;top:0;bottom:0;right:0;left:0;z-index:2;padding:22px;margin:33px;text-align:left}.DayPickerKeyboardShortcuts_title{font-size:16px;font-weight:700;margin:0}.DayPickerKeyboardShortcuts_list{list-style:none;padding:0;font-size:14px}.DayPickerKeyboardShortcuts_close{position:absolute;right:22px;top:22px;z-index:2}.DayPickerKeyboardShortcuts_close:active{outline:0}.DayPickerKeyboardShortcuts_closeSvg{height:15px;width:15px;fill:#cacccd}.DayPickerKeyboardShortcuts_closeSvg:focus,.DayPickerKeyboardShortcuts_closeSvg:hover{fill:#82888a}.CalendarDay{box-sizing:border-box;cursor:pointer;font-size:14px;text-align:center}.CalendarDay:active{outline:0}.CalendarDay__defaultCursor{cursor:default}.CalendarDay__default{border:1px solid #e4e7e7;color:#484848;background:#fff}.CalendarDay__default:hover{background:#e4e7e7;border:1px solid #e4e7e7;color:inherit}.CalendarDay__hovered_offset{background:#f4f5f5;border:1px double #e4e7e7;color:inherit}.CalendarDay__outside{border:0;background:#fff;color:#484848}.CalendarDay__outside:hover{border:0}.CalendarDay__blocked_minimum_nights{background:#fff;border:1px solid #eceeee;color:#cacccd}.CalendarDay__blocked_minimum_nights:active,.CalendarDay__blocked_minimum_nights:hover{background:#fff;color:#cacccd}.CalendarDay__highlighted_calendar{background:#ffe8bc;color:#484848}.CalendarDay__highlighted_calendar:active,.CalendarDay__highlighted_calendar:hover{background:#ffce71;color:#484848}.CalendarDay__selected_span{background:#66e2da;border:1px double #33dacd;color:#fff}.CalendarDay__selected_span:active,.CalendarDay__selected_span:hover{background:#33dacd;border:1px double #33dacd;color:#fff}.CalendarDay__last_in_range,.CalendarDay__last_in_range:hover{border-style:solid}.CalendarDay__selected,.CalendarDay__selected:active,.CalendarDay__selected:hover{background:#00a699;border:1px double #00a699;color:#fff}.CalendarDay__hovered_span,.CalendarDay__hovered_span:hover{background:#b2f1ec;border:1px double #80e8e0;color:#007a87}.CalendarDay__hovered_span:active{background:#80e8e0;border:1px double #80e8e0;color:#007a87}.CalendarDay__blocked_calendar,.CalendarDay__blocked_calendar:active,.CalendarDay__blocked_calendar:hover{background:#cacccd;border:1px solid #cacccd;color:#82888a}.CalendarDay__blocked_out_of_range,.CalendarDay__blocked_out_of_range:active,.CalendarDay__blocked_out_of_range:hover{background:#fff;border:1px solid #e4e7e7;color:#cacccd}.CalendarMonth{background:#fff;text-align:center;vertical-align:top;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.CalendarMonth_table{border-collapse:collapse;border-spacing:0}.CalendarMonth_verticalSpacing{border-collapse:initial}.CalendarMonth_caption{color:#484848;font-size:18px;text-align:center;padding-top:22px;padding-bottom:37px;caption-side:top}.CalendarMonth_caption__verticalScrollable{padding-top:12px;padding-bottom:7px}.CalendarMonthGrid{background:#fff;text-align:left;z-index:0}.CalendarMonthGrid__animating{z-index:1}.CalendarMonthGrid__horizontal{position:absolute;left:9px}.CalendarMonthGrid__vertical{margin:0 auto}.CalendarMonthGrid__vertical_scrollable{margin:0 auto;overflow-y:scroll}.CalendarMonthGrid_month__horizontal{display:inline-block;vertical-align:top;min-height:100%}.CalendarMonthGrid_month__hideForAnimation{position:absolute;z-index:-1;opacity:0;pointer-events:none}.CalendarMonthGrid_month__hidden{visibility:hidden}.DayPickerNavigation{position:relative;z-index:2}.DayPickerNavigation__horizontal{height:0}.DayPickerNavigation__verticalDefault{position:absolute;width:100%;height:52px;bottom:0;left:0}.DayPickerNavigation__verticalScrollableDefault{position:relative}.DayPickerNavigation_button{cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;border:0;padding:0;margin:0}.DayPickerNavigation_button__default{border:1px solid #e4e7e7;background-color:#fff;color:#757575}.DayPickerNavigation_button__default:focus,.DayPickerNavigation_button__default:hover{border:1px solid #c4c4c4}.DayPickerNavigation_button__default:active{background:#f2f2f2}.DayPickerNavigation_button__disabled{cursor:default;border:1px solid #f2f2f2}.DayPickerNavigation_button__disabled:focus,.DayPickerNavigation_button__disabled:hover{border:1px solid #f2f2f2}.DayPickerNavigation_button__disabled:active{background:0 0}.DayPickerNavigation_button__horizontalDefault{position:absolute;top:18px;line-height:.78;border-radius:3px;padding:6px 9px}.DayPickerNavigation_leftButton__horizontalDefault{left:22px}.DayPickerNavigation_rightButton__horizontalDefault{right:22px}.DayPickerNavigation_button__verticalDefault{padding:5px;background:#fff;box-shadow:0 0 5px 2px rgba(0,0,0,.1);position:relative;display:inline-block;text-align:center;height:100%;width:50%}.DayPickerNavigation_nextButton__verticalDefault{border-left:0}.DayPickerNavigation_nextButton__verticalScrollableDefault{width:100%}.DayPickerNavigation_svg__horizontal{height:19px;width:19px;fill:#82888a;display:block}.DayPickerNavigation_svg__vertical{height:42px;width:42px;fill:#484848}.DayPickerNavigation_svg__disabled{fill:#f2f2f2}.DayPicker{position:relative;text-align:left}.DayPicker,.DayPicker__horizontal{background:#fff}.DayPicker__verticalScrollable{height:100%}.DayPicker__hidden{visibility:hidden}.DayPicker__withBorder{box-shadow:0 2px 6px rgba(0,0,0,.05),0 0 0 1px rgba(0,0,0,.07);border-radius:3px}.DayPicker_portal__horizontal{box-shadow:none;position:absolute;left:50%;top:50%}.DayPicker_portal__vertical{position:static}.DayPicker_focusRegion{outline:0}.DayPicker_calendarInfo__horizontal,.DayPicker_wrapper__horizontal{display:inline-block;vertical-align:top}.DayPicker_weekHeaders{position:relative}.DayPicker_weekHeaders__horizontal{margin-left:9px}.DayPicker_weekHeader{color:#757575;position:absolute;top:62px;z-index:2;text-align:left}.DayPicker_weekHeader__vertical{left:50%}.DayPicker_weekHeader__verticalScrollable{top:0;display:table-row;border-bottom:1px solid #dbdbdb;background:#fff;margin-left:0;left:0;width:100%;text-align:center}.DayPicker_weekHeader_ul{list-style:none;margin:1px 0;padding-left:0;padding-right:0;font-size:14px}.DayPicker_weekHeader_li{display:inline-block;text-align:center}.DayPicker_transitionContainer{position:relative;overflow:hidden;border-radius:3px}.DayPicker_transitionContainer__horizontal{-webkit-transition:height .2s ease-in-out;transition:height .2s ease-in-out}.DayPicker_transitionContainer__vertical{width:100%}.DayPicker_transitionContainer__verticalScrollable{padding-top:20px;height:100%;position:absolute;top:0;bottom:0;right:0;left:0;overflow-y:scroll}.DateInput{margin:0;padding:0;background:#fff;position:relative;display:inline-block;width:130px;vertical-align:middle}.DateInput__small{width:97px}.DateInput__block{width:100%}.DateInput__disabled{background:#f2f2f2;color:#dbdbdb}.DateInput_input{font-weight:200;font-size:19px;line-height:24px;color:#484848;background-color:#fff;width:100%;padding:11px 11px 9px;border:0;border-bottom:2px solid transparent;border-radius:0}.DateInput_input__small{font-size:15px;line-height:18px;letter-spacing:.2px;padding:7px 7px 5px}.DateInput_input__regular{font-weight:auto}.DateInput_input__readOnly{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.DateInput_input__focused{outline:0;background:#fff;border:0;border-bottom:2px solid #008489}.DateInput_input__disabled{background:#f2f2f2;font-style:italic}.DateInput_screenReaderMessage{border:0;clip:rect(0,0,0,0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.DateInput_fang{position:absolute;width:20px;height:10px;left:22px;z-index:2}.DateInput_fangShape{fill:#fff}.DateInput_fangStroke{stroke:#dbdbdb;fill:transparent}.DateRangePickerInput{background-color:#fff;display:inline-block}.DateRangePickerInput__disabled{background:#f2f2f2}.DateRangePickerInput__withBorder{border-radius:2px;border:1px solid #dbdbdb}.DateRangePickerInput__rtl{direction:rtl}.DateRangePickerInput__block{display:block}.DateRangePickerInput__showClearDates{padding-right:30px}.DateRangePickerInput_arrow{display:inline-block;vertical-align:middle;color:#484848}.DateRangePickerInput_arrow_svg{vertical-align:middle;fill:#484848;height:24px;width:24px}.DateRangePickerInput_clearDates{background:0 0;border:0;color:inherit;font:inherit;line-height:normal;overflow:visible;cursor:pointer;padding:10px;margin:0 10px 0 5px;position:absolute;right:0;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.DateRangePickerInput_clearDates__small{padding:6px}.DateRangePickerInput_clearDates_default:focus,.DateRangePickerInput_clearDates_default:hover{background:#dbdbdb;border-radius:50%}.DateRangePickerInput_clearDates__hide{visibility:hidden}.DateRangePickerInput_clearDates_svg{fill:#82888a;height:12px;width:15px;vertical-align:middle}.DateRangePickerInput_clearDates_svg__small{height:9px}.DateRangePickerInput_calendarIcon{background:0 0;border:0;color:inherit;font:inherit;line-height:normal;overflow:visible;cursor:pointer;display:inline-block;vertical-align:middle;padding:10px;margin:0 5px 0 10px}.DateRangePickerInput_calendarIcon_svg{fill:#82888a;height:15px;width:14px;vertical-align:middle}.DateRangePicker{position:relative;display:inline-block}.DateRangePicker__block{display:block}.DateRangePicker_picker{z-index:1;background-color:#fff;position:absolute}.DateRangePicker_picker__rtl{direction:rtl}.DateRangePicker_picker__directionLeft{left:0}.DateRangePicker_picker__directionRight{right:0}.DateRangePicker_picker__portal{background-color:rgba(0,0,0,.3);position:fixed;top:0;left:0;height:100%;width:100%}.DateRangePicker_picker__fullScreenPortal{background-color:#fff}.DateRangePicker_closeButton{background:0 0;border:0;color:inherit;font:inherit;line-height:normal;overflow:visible;cursor:pointer;position:absolute;top:0;right:0;padding:15px;z-index:2}.DateRangePicker_closeButton:focus,.DateRangePicker_closeButton:hover{color:darken(#cacccd,10%);text-decoration:none}.DateRangePicker_closeButton_svg{height:15px;width:15px;fill:#cacccd} +.select-ohif{display:block;font-family:Roboto,Oxygen,Ubuntu,Cantarell,Open Sans,Helvetica Neue,sans-serif;font-size:.8em;font-weight:600;color:#444;line-height:1.3;padding:.6em 1.4em .5em .8em;width:100%;max-width:100%;box-sizing:border-box;margin:0;border:1px solid #aaa;box-shadow:0 1px 0 1px rgba(0,0,0,.04);border-radius:.5em;-moz-appearance:none;-webkit-appearance:none;appearance:none;background-color:#fff;background-image:url("data:image/svg+xml;charset=US-ASCII,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22292.4%22%20height%3D%22292.4%22%3E%3Cpath%20fill%3D%22%23007CB2%22%20d%3D%22M287%2069.4a17.6%2017.6%200%200%200-13-5.4H18.4c-5%200-9.3%201.8-12.9%205.4A17.6%2017.6%200%200%200%200%2082.2c0%205%201.8%209.3%205.4%2012.9l128%20127.9c3.6%203.6%207.8%205.4%2012.8%205.4s9.2-1.8%2012.8-5.4L287%2095c3.5-3.5%205.4-7.8%205.4-12.8%200-5-1.9-9.2-5.5-12.8z%22%2F%3E%3C%2Fsvg%3E"),-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e5e5e5));background-image:url("data:image/svg+xml;charset=US-ASCII,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22292.4%22%20height%3D%22292.4%22%3E%3Cpath%20fill%3D%22%23007CB2%22%20d%3D%22M287%2069.4a17.6%2017.6%200%200%200-13-5.4H18.4c-5%200-9.3%201.8-12.9%205.4A17.6%2017.6%200%200%200%200%2082.2c0%205%201.8%209.3%205.4%2012.9l128%20127.9c3.6%203.6%207.8%205.4%2012.8%205.4s9.2-1.8%2012.8-5.4L287%2095c3.5-3.5%205.4-7.8%205.4-12.8%200-5-1.9-9.2-5.5-12.8z%22%2F%3E%3C%2Fsvg%3E"),linear-gradient(180deg,#fff 0,#e5e5e5);background-repeat:no-repeat,repeat;background-position:right .7em top 50%,0 0;background-size:.65em auto,100%}.select-ohif::-ms-expand{display:none}.select-ohif:hover{border-color:#888}.select-ohif:focus{border-color:#aaa;box-shadow:0 0 1px 3px rgba(59,153,252,.7);box-shadow:0 0 0 3px -moz-mac-focusring;color:#222;outline:none}.select-ohif option{font-weight:400} +.label-ohif{font-size:1em;color:#fff}.label-example{background-color:var(--ui-gray-darker)} +.range{margin:0;width:100%;-webkit-appearance:none}.range:focus{outline:none}.range::-webkit-slider-runnable-track{width:100%;height:2px;cursor:pointer;box-shadow:none;background-color:var(--ui-border-color-dark);border-radius:0;border:0 solid var(--ui-border-color-dark)}.range::-moz-range-track{width:100%;height:2px;cursor:pointer;box-shadow:none;background-color:var(--ui-border-color-dark);border-radius:0;border:0 solid var(--ui-border-color-dark)}.range::-webkit-slider-thumb{box-shadow:none;border:0 solid var(--active-color);box-shadow:0 10px 10px rgba(0,0,0,.25);height:21px;width:11px;border-radius:11px;background:var(--active-color);cursor:pointer;-webkit-appearance:none;margin-top:-10px}.range::-moz-range-thumb{box-shadow:none;border:0 solid var(--active-color);box-shadow:0 10px 10px rgba(0,0,0,.25);height:21px;width:11px;border-radius:11px;background:var(--active-color);cursor:pointer;-webkit-appearance:none;margin-top:-10px}.range::-moz-focus-outer{border:0}.range-example{background:#000;height:2em} +.textarea-ohif{background-color:#b6b6b6;border-color:#b6b6b6;font-family:Roboto,Oxygen,Ubuntu,Cantarell,Open Sans,Helvetica Neue,sans-serif;font-size:1em} +.input-ohif{background-color:#b6b6b6;border-color:#b6b6b6;font-family:Roboto,Oxygen,Ubuntu,Cantarell,Open Sans,Helvetica Neue,sans-serif;font-size:1em} +.dd-menu{float:left;margin-right:10px;cursor:pointer;position:relative;z-index:999}.dd-title{font-size:13px}.dd-caret-down,.dd-menu-toggle{display:inline-block}.dd-caret-down{width:0;height:0;margin-top:.5rem;margin-left:.5rem;border-top:5px solid;border-right:5px solid transparent;border-left:5px solid transparent}.dd-menu-list{position:absolute;top:100%;margin-top:10px;background:#fff;border-radius:5px;-webkit-border-radius:5px;-moz-border-radius:5px;-ms-border-radius:5px;-o-border-radius:5px;overflow:hidden;transition:all .3s ease;-webkit-transition:all .3s ease;-moz-transition:all .3s ease;-ms-transition:all .3s ease;-o-transition:all .3s ease}.dd-menu-list.open{display:inline-block}.dd-menu-list.left{left:0}.dd-menu-list.right{right:0}.dd-menu-list.center{left:50%;transform:translateX(-50%);-webkit-transform:translateX(-50%);-moz-transform:translateX(-50%);-ms-transform:translateX(-50%);-o-transform:translateX(-50%)}.dd-item{display:-webkit-box;display:flex;color:var(--text-color-active);padding:10px 15px;border-bottom:1px solid #ccc}.dd-item:hover{text-decoration:none;background:#eee}.dd-item:last-child{border-bottom:none}.dd-item-icon{margin-right:10px;margin-top:2px} +.viewport-container{float:left;position:relative;border:var(--viewport-border-thickness) solid var(--ui-border-color)}.viewport-container.active{border:var(--viewport-border-thickness) solid var(--active-color)}.EmptyViewport{display:-webkit-box;display:flex;-webkit-box-pack:center;justify-content:center;-webkit-box-align:center;align-items:center;height:100%;color:var(--text-secondary-color)}.LayoutPanel{width:100%;height:100%} +.LayoutPanelDropTarget{width:100%;height:100%;opacity:1;-webkit-transition:all .3s ease;transition:all .3s ease}.LayoutPanelDropTarget.hovered{opacity:.5;cursor:copy} diff --git a/platform/ui/babel.config.js b/platform/ui/babel.config.js new file mode 100644 index 00000000000..fed6f05fecd --- /dev/null +++ b/platform/ui/babel.config.js @@ -0,0 +1 @@ +module.exports = require("../../babel.config.js"); diff --git a/platform/ui/doczrc.js b/platform/ui/doczrc.js new file mode 100644 index 00000000000..b3abf4cd3e7 --- /dev/null +++ b/platform/ui/doczrc.js @@ -0,0 +1,75 @@ +/** + * Docz Configuration File: + * https://www.docz.site/docs/project-configuration + */ + +import { css } from "docz-plugin-css"; + +export default { + dest: "example/build", + public: "/public", + wrapper: "src/__docs__/wrapper", + indexHtml: "src/__docs__/index.html", + // Limited support for importing `.styl` files + codeSandbox: false, + // https://github.com/pedronauck/docz/pull/849/files + // Because we re-export using `index.js` files + notUseSpecifiers: true, + menu: [ + "Introduction", + "Getting Started", + { name: "Elements", menu: ["Form / Select"] }, + { + name: "Components", + menu: [ + "CINE Dialog", + "Layout Button", + "Measurement Table", + "Overlay Trigger", + "Quick Switch", + "Rounded Button Group", + "Select Tree", + "Simple Dialog", + "Study Browser", + "Study List", + "Table List", + "Toolbar Section", + "About Modal", + "User Preferences Modal" + ] + }, + "Styling & Theming", + "Translating", + "Compatibility" + ], + // Rollup Aliases? + // https://github.com/pedronauck/docz/issues/373 + plugins: [ + // CSS + css(), + // Stylus + css({ + preprocessor: "stylus", + cssmodules: false + }) + ], + // `docz` uses file-loader to pull in SVGs. This kills our icons before + // They can be picked up by our `babel-plugin-inline-react-svg` dependency + // You can see where it's configured here: + // https://github.com/pedronauck/docz/blob/f72624d0aa5231dab17e1770e8d36be920f590a2/core/docz-core/src/bundler/loaders.ts#L135-L144 + // How we delete our rule: + // https://github.com/neutrinojs/webpack-chain/issues/48 + onCreateWebpackChain: config => { + config.module.rules.delete("svg"); + }, + modifyBabelRc: babelrc => { + const newBabelRc = { + ...babelrc, + plugins: [ + ...babelrc.plugins, + require.resolve("babel-plugin-inline-react-svg") + ] + }; + return newBabelRc; + } +}; diff --git a/platform/ui/jest.config.js b/platform/ui/jest.config.js new file mode 100644 index 00000000000..78c435aa343 --- /dev/null +++ b/platform/ui/jest.config.js @@ -0,0 +1,10 @@ +const base = require("../../jest.config.base.js"); +const pkg = require("./package"); + +const esModules = ["react-dnd"]; + +module.exports = { + ...base, + name: pkg.name, + displayName: pkg.name +}; diff --git a/platform/ui/package.json b/platform/ui/package.json new file mode 100644 index 00000000000..f3c3b25dfbe --- /dev/null +++ b/platform/ui/package.json @@ -0,0 +1,65 @@ +{ + "name": "@ohif/ui", + "version": "0.2.18-alpha.7", + "description": "A set of React components for Medical Imaging Viewers", + "author": "OHIF Contributors", + "license": "MIT", + "repository": "OHIF/Viewers", + "main": "dist/index.umd.js", + "module": "src/index.js", + "publishConfig": { + "access": "public" + }, + "engines": { + "node": ">=8", + "npm": ">=5" + }, + "files": [ + "dist", + "README.md" + ], + "scripts": { + "dev": "docz dev", + "dev:ui": "yarn run dev", + "docs": "docz build", + "build": "webpack --config .webpack/webpack.prod.js", + "build:package": "yarn run build", + "prepublishOnly": "yarn run build", + "test:unit": "jest --watchAll", + "test:unit:ci": "jest --ci --runInBand --collectCoverage --passWithNoTests" + }, + "peerDependencies": { + "@ohif/i18n": "^0.2.3", + "i18next": "^17.0.3", + "react": "^16.8.6", + "react-dom": "^16.8.6", + "react-i18next": "^10.11.0" + }, + "dependencies": { + "@babel/runtime": "^7.5.5", + "@ohif/i18n": "^0.2.3", + "classnames": "2.2.6", + "i18next": "^17.0.3", + "i18next-browser-languagedetector": "^3.0.1", + "lodash.debounce": "^4.0.8", + "lodash.isequal": "4.5.0", + "moment": "2.24.0", + "prop-types": "15.6.2", + "react-bootstrap-modal": "4.2.0", + "react-dates": "18.4.1", + "react-dnd": "8.0.3", + "react-dnd-touch-backend": "^0.8.3", + "react-i18next": "^10.11.0", + "react-with-direction": "1.3.0" + }, + "devDependencies": { + "@mdx-js/tag": "^0.20.3", + "autoprefixer": "^9.6.0", + "docz": "1.2.0", + "docz-core": "1.2.0", + "docz-plugin-css": "0.11.0", + "docz-theme-default": "1.2.0", + "lodash.clonedeep": "^4.5.0", + "react-powerplug": "1.0.0" + } +} diff --git a/platform/ui/postcss.config.js b/platform/ui/postcss.config.js new file mode 100644 index 00000000000..6402436e4a6 --- /dev/null +++ b/platform/ui/postcss.config.js @@ -0,0 +1 @@ +module.exports = require("../../postcss.config.js"); diff --git a/platform/ui/public/docz.css b/platform/ui/public/docz.css new file mode 100644 index 00000000000..1c45c19aac2 --- /dev/null +++ b/platform/ui/public/docz.css @@ -0,0 +1,44 @@ +/* Tip & Success "Call outs" */ + +p.tip { + border-left-color: #f66; +} +p.success { + border-left-color: #42b983; +} +p.tip::before { + content: '!'; + background-color: #f66; +} +p.success::before { + content: '\f00c'; + font-family: FontAwesome; + background-color: #42b983; +} +p.tip, +p.success { + padding: 12px 24px 12px 30px; + margin: 2em 0; + line-height: 1.6em; + border-left-width: 4px; + border-left-style: solid; + background-color: #f8f8f8; + position: relative; + border-bottom-right-radius: 2px; + border-top-right-radius: 2px; +} +p.tip::before, +p.success::before { + position: absolute; + top: 14px; + left: -12px; + color: #fff; + width: 20px; + height: 20px; + border-radius: 100%; + text-align: center; + line-height: 20px; + font-weight: bold; + font-family: 'Dosis', 'Source Sans Pro', 'Helvetica Neue', Arial, sans-serif; + font-size: 14px; +} diff --git a/platform/ui/src/LayoutChooser/LayoutManager.css b/platform/ui/src/LayoutChooser/LayoutManager.css new file mode 100644 index 00000000000..0b568e259c7 --- /dev/null +++ b/platform/ui/src/LayoutChooser/LayoutManager.css @@ -0,0 +1,22 @@ +.viewport-container { + float: left; + position: relative; + border: var(--viewport-border-thickness) solid var(--ui-border-color); +} + +.viewport-container.active { + border: var(--viewport-border-thickness) solid var(--active-color); +} + +.EmptyViewport { + display: flex; + justify-content: center; + align-items: center; + height: 100%; + color: var(--text-secondary-color); +} + +.LayoutPanel { + width: 100%; + height: 100%; +} diff --git a/platform/ui/src/LayoutChooser/LayoutManager.js b/platform/ui/src/LayoutChooser/LayoutManager.js new file mode 100644 index 00000000000..6ec9f65f089 --- /dev/null +++ b/platform/ui/src/LayoutChooser/LayoutManager.js @@ -0,0 +1,162 @@ +import './LayoutManager.css'; + +import React, { Component } from 'react'; + +import LayoutPanelDropTarget from './LayoutPanelDropTarget.js'; +import PropTypes from 'prop-types'; + +function defaultViewportPlugin(props) { + return
{JSON.stringify(props)}
; +} + +function EmptyViewport() { + return ( +
+

Please drag a stack here to view images.

+
+ ); +} + +export class LayoutManager extends Component { + static className = 'LayoutManager'; + static defaultProps = { + viewportData: [], + layout: { + viewports: [ + { + top: 0, + left: 0, + height: '100%', + width: '100%', + }, + ], + }, + activeViewportIndex: 0, + supportsDragAndDrop: true, + availablePlugins: { + defaultViewportPlugin, + }, + defaultPlugin: 'defaultViewportPlugin', + }; + + static propTypes = { + viewportData: PropTypes.array.isRequired, + supportsDragAndDrop: PropTypes.bool.isRequired, + activeViewportIndex: PropTypes.number.isRequired, + layout: PropTypes.object.isRequired, + availablePlugins: PropTypes.object.isRequired, + setViewportData: PropTypes.func, + studies: PropTypes.array, + children: PropTypes.node, + }; + + onDrop = ({ viewportIndex, item }) => { + if (this.props.setViewportData) { + this.props.setViewportData({ viewportIndex, item }); + } + }; + + getPluginComponent = plugin => { + const pluginComponent = this.props.availablePlugins[ + plugin || this.props.defaultPlugin + ]; + + if (!pluginComponent) { + throw new Error( + `No Viewport Plugin available for plugin ${plugin}. Available plugins: ${JSON.stringify( + this.props.availablePlugins + )}` + ); + } + + return pluginComponent; + }; + + getChildComponent(plugin, data, viewportIndex, children) { + if (data.displaySet) { + const PluginComponent = this.getPluginComponent(plugin); + + return ( + + ); + } + + return ; + } + + getContent(childComponent, supportsDragAndDrop, viewportIndex) { + if (supportsDragAndDrop) { + return ( + + {childComponent} + + ); + } + + return
{childComponent}
; + } + + render() { + if (!this.props.viewportData.length) { + return ''; + } + + const { supportsDragAndDrop, studies, viewportData } = this.props; + const viewports = this.props.layout.viewports; + const viewportElements = viewports.map((layout, viewportIndex) => { + const displaySet = viewportData[viewportIndex]; + const data = { + displaySet, + studies, + }; + + // Use whichever plugin is currently in use in the panel + // unless nothing is specified. If nothing is specified + // and the display set has a plugin specified, use that. + // + // TODO: Change this logic to: + // - Plugins define how capable they are of displaying a SopClass + // - When updating a panel, ensure that the currently enabled plugin + // in the viewport is capable of rendering this display set. If not + // then use the most capable available plugin + let plugin = layout.plugin; + if (!layout.plugin && displaySet && displaySet.plugin) { + plugin = displaySet.plugin; + } + + const childComponent = this.getChildComponent( + plugin, + data, + viewportIndex, + this.props.children + ); + const content = this.getContent( + childComponent, + supportsDragAndDrop, + viewportIndex + ); + + let className = 'viewport-container'; + if (this.props.activeViewportIndex === viewportIndex) { + className += ' active'; + } + + return ( +
+ {content} +
+ ); + }); + + return
{viewportElements}
; + } +} + +export default LayoutManager; diff --git a/platform/ui/src/LayoutChooser/LayoutPanelDropTarget.css b/platform/ui/src/LayoutChooser/LayoutPanelDropTarget.css new file mode 100644 index 00000000000..7c629feaffb --- /dev/null +++ b/platform/ui/src/LayoutChooser/LayoutPanelDropTarget.css @@ -0,0 +1,12 @@ +.LayoutPanelDropTarget { + width: 100%; + height: 100%; + + opacity: 1; + transition: 0.3s all ease; +} + +.LayoutPanelDropTarget.hovered { + opacity: 0.5; + cursor: copy; +} diff --git a/platform/ui/src/LayoutChooser/LayoutPanelDropTarget.js b/platform/ui/src/LayoutChooser/LayoutPanelDropTarget.js new file mode 100644 index 00000000000..96355b51900 --- /dev/null +++ b/platform/ui/src/LayoutChooser/LayoutPanelDropTarget.js @@ -0,0 +1,74 @@ +import PropTypes from 'prop-types'; +import React, { Component } from 'react'; +import { DropTarget } from 'react-dnd'; +import './LayoutPanelDropTarget.css'; + +// Drag sources and drop targets only interact +// if they have the same string type. +const Types = { + THUMBNAIL: 'thumbnail', +}; + +const divTarget = { + drop(props, monitor, component) { + const item = monitor.getItem(); + + if (props.onDrop) { + props.onDrop({ + viewportIndex: props.viewportIndex, + item, + }); + } + + return { + id: `LayoutPanelDropTarget-${props.viewportIndex}`, + viewportIndex: props.viewportIndex, + item, + }; + }, +}; + +// TODO: Find out why we can't move this into the Example app instead. +// It looks like the context isn't properly shared. +class LayoutPanelDropTarget extends Component { + static className = 'LayoutPanelDropTarget'; + + static defaultProps = { + isOver: false, + canDrop: false, + }; + + static propTypes = { + connectDropTarget: PropTypes.func.isRequired, + canDrop: PropTypes.bool.isRequired, + isOver: PropTypes.bool.isRequired, + viewportComponent: PropTypes.object, + }; + + render() { + const { canDrop, isOver, connectDropTarget } = this.props; + const isActive = canDrop && isOver; + + let className = LayoutPanelDropTarget.className; + + if (isActive) { + className += ' hovered'; + } else if (canDrop) { + className += ' can-drop'; + } + + return connectDropTarget( +
{this.props.children}
+ ); + } +} + +const collect = (connect, monitor) => ({ + connectDropTarget: connect.dropTarget(), + canDrop: monitor.canDrop(), + isOver: monitor.isOver(), +}); + +export default DropTarget(Types.THUMBNAIL, divTarget, collect)( + LayoutPanelDropTarget +); diff --git a/platform/ui/src/ScrollableArea/ScrollableArea.js b/platform/ui/src/ScrollableArea/ScrollableArea.js new file mode 100644 index 00000000000..0a76c63e57b --- /dev/null +++ b/platform/ui/src/ScrollableArea/ScrollableArea.js @@ -0,0 +1,152 @@ +import './ScrollableArea.styl'; + +import React, { Component } from 'react'; + +import { Icon } from './../elements/Icon'; +import PropTypes from 'prop-types'; +import getScrollbarSize from '../utils/getScrollbarSize.js'; +import throttled from '../utils/throttled.js'; + +export class ScrollableArea extends Component { + static propTypes = { + children: PropTypes.node.isRequired, + class: PropTypes.string, + scrollableClass: PropTypes.string, + scrollX: PropTypes.bool, + scrollY: PropTypes.bool, + hideScrollbar: PropTypes.bool, + scrollStep: PropTypes.number, + }; + + static defaultProps = { + hideScrollbar: true, + class: 'flex-grow fit', + scrollY: true, + scrollX: false, + scrollStep: 100, + }; + + constructor(props) { + super(props); + + this.state = { + scrollAreaClasses: '', + }; + + this.scrollHandlerThrottled = throttled(150, this.scrollHandler); + } + + render() { + let scrollableClass = 'scrollable'; + if (this.props.scrollableClass) { + scrollableClass += ` ${this.props.scrollableClass}`; + } + if (this.props.scrollX) { + scrollableClass += ` scrollX`; + } + if (this.props.scrollY) { + scrollableClass += ` scrollY`; + } + + return ( +
+
{ + this.scrollableElement = element; + }} + onScroll={this.scrollHandlerThrottled} + onMouseEnter={this.scrollHandlerThrottled} + onTransitionEnd={this.scrollHandlerThrottled} + > + {this.props.children} +
+
+ {/* */} + +
+
+ +
+
+ ); + } + + componentDidMount() { + this.adjustMargins(); + this.scrollHandler(); + window.addEventListener('resize', this.adjustMargins); + } + + componentDidUpdate() { + this.adjustMargins(); + this.scrollHandler(); + } + + componentWillUnmount() { + window.removeEventListener('resize', this.adjustMargins); + } + + scrollNavDown = event => { + const { + scrollTop: currentTop, + offsetHeight: height, + scrollHeight, + } = this.scrollableElement; + + const limit = scrollHeight - height; + let scrollTop = currentTop + this.props.scrollStep; + scrollTop = scrollTop > limit ? limit : scrollTop; + this.scrollableElement.scrollTop = scrollTop; + }; + + scrollNavUp = event => { + const { scrollTop: currentTop } = this.scrollableElement; + + let scrollTop = currentTop - this.props.scrollStep; + scrollTop = scrollTop < 0 ? 0 : scrollTop; + + this.scrollableElement.scrollTop = scrollTop; + }; + + adjustMargins = () => { + if (this.props.hideScrollbar) { + const x = this.props.scrollX ? 1 : 0; + const y = this.props.scrollY ? 1 : 0; + const scrollbarSize = getScrollbarSize(); + this.scrollableElement.style.marginRight = `${0 - + scrollbarSize[0] * y}px`; + this.scrollableElement.style.marginBottom = `${0 - + scrollbarSize[1] * x}px`; + } + }; + + scrollHandler = () => { + const { + offsetHeight: height, + scrollTop: scrollTop, + scrollHeight, + } = this.scrollableElement; + let scrollAreaClasses = ''; + + // Check if can scroll up + if (scrollTop) { + scrollAreaClasses += 'canScrollUp'; + } + + // Check if can scroll down + if (scrollTop + height < scrollHeight) { + scrollAreaClasses += ' canScrollDown'; + } + + if (this.state.scrollAreaClasses !== scrollAreaClasses) { + this.setState({ + scrollAreaClasses, + }); + } + }; +} diff --git a/platform/ui/src/ScrollableArea/ScrollableArea.styl b/platform/ui/src/ScrollableArea/ScrollableArea.styl new file mode 100644 index 00000000000..6c49f81972b --- /dev/null +++ b/platform/ui/src/ScrollableArea/ScrollableArea.styl @@ -0,0 +1,69 @@ +.scrollArea + overflow: hidden + position: relative + + .scrollable + max-height: inherit + overflow: hidden + zoom: 1 + + &.scrollX + overflow-x: scroll + + &.scrollY + overflow-y: scroll + + &.fit + height: 100% + width: 100% + + .scrollable + bottom: 0 + left: 0 + max-height: none + position: absolute + right: 0 + top: 0 + + .scrollNav + background-color: rgba(0, 0, 0, 0.75) + box-shadow: 0 0 10px 10px rgba(0, 0, 0, 0.75) + cursor: pointer + height: 24px + left: 10px + opacity: 0 + position: absolute + right: 10px + transition: all 0.3s ease + + .scrollNavIcon + color: var(--active-color); + display: block; + width: 18px; + height: 18px; + margin: 0 auto; + transition: color 0.3s ease; + + &:hover + background-color: rgba(0, 0, 0, 0.9) + box-shadow: 0 0 10px 10px rgba(0, 0, 0, 0.9) + + .scrollNavIcon + color: var(--hover-color) + + .scrollNavUp + border-bottom-left-radius: 12px + border-bottom-right-radius: 12px + top: 0 + transform: translateY(-24px) + + .scrollNavDown + border-top-left-radius: 12px + border-top-right-radius: 12px + bottom: 0 + transform: translateY(24px) + + &.canScrollUp .scrollNavUp, + &.canScrollDown .scrollNavDown + opacity: 1 + transform: translateY(0) diff --git a/platform/ui/src/__docs__/NameSpace.js b/platform/ui/src/__docs__/NameSpace.js new file mode 100644 index 00000000000..81e1bfa3439 --- /dev/null +++ b/platform/ui/src/__docs__/NameSpace.js @@ -0,0 +1,17 @@ +import React, { Fragment } from 'react'; +import { Link } from 'docz'; +import PropTypes from 'prop-types'; + +const NameSpace = ({ name }) => ( + + The namespace used on this component was:
{name}
Check the{' '} + translation docs{' '} + to see how to override it. +
+); + +NameSpace.propTypes = { + name: PropTypes.string.isRequired, +}; + +export default NameSpace; diff --git a/platform/ui/src/__docs__/assets/github.png b/platform/ui/src/__docs__/assets/github.png new file mode 100644 index 00000000000..7db0aaceca3 Binary files /dev/null and b/platform/ui/src/__docs__/assets/github.png differ diff --git a/platform/ui/src/__docs__/assets/npm.png b/platform/ui/src/__docs__/assets/npm.png new file mode 100644 index 00000000000..4fbd0761bb4 Binary files /dev/null and b/platform/ui/src/__docs__/assets/npm.png differ diff --git a/platform/ui/src/__docs__/assets/react.png b/platform/ui/src/__docs__/assets/react.png new file mode 100644 index 00000000000..e307be82272 Binary files /dev/null and b/platform/ui/src/__docs__/assets/react.png differ diff --git a/platform/ui/src/__docs__/assets/typescript.png b/platform/ui/src/__docs__/assets/typescript.png new file mode 100644 index 00000000000..69a60783dd7 Binary files /dev/null and b/platform/ui/src/__docs__/assets/typescript.png differ diff --git a/platform/ui/src/__docs__/compatibility.mdx b/platform/ui/src/__docs__/compatibility.mdx new file mode 100644 index 00000000000..cd95c68d17f --- /dev/null +++ b/platform/ui/src/__docs__/compatibility.mdx @@ -0,0 +1,15 @@ +--- +name: Compatibility +route: /compatibility +--- + +# Compatibility + +## Browser Support + +React Viewerbase relies on +[browsers supported by Styled Components](https://www.styled-components.com/docs/faqs#which-browsers-are-supported) +or browsers supported by emotion. + +Supported Browsers: IE11, IE 9+ (with Map + Set polyfills), Chrome, Firefox (and +derivatives), Edge, and Safari. diff --git a/docker/Nginx-Dcm4che/etc/localtime b/platform/ui/src/__docs__/config/Wrapper.js similarity index 100% rename from docker/Nginx-Dcm4che/etc/localtime rename to platform/ui/src/__docs__/config/Wrapper.js diff --git a/platform/ui/src/__docs__/docs-settings.mdx b/platform/ui/src/__docs__/docs-settings.mdx new file mode 100644 index 00000000000..200133a85b6 --- /dev/null +++ b/platform/ui/src/__docs__/docs-settings.mdx @@ -0,0 +1,13 @@ +--- +name: Docs Settings +route: /docs-settings +--- + +import LanguageSwitcher from '../components/languageSwitcher'; + +# Components Language + +You can change the language of the components displayed in this documentation by +choosing an option in the selector below: + + diff --git a/platform/ui/src/__docs__/getting-started.mdx b/platform/ui/src/__docs__/getting-started.mdx new file mode 100644 index 00000000000..dd3cc7900e7 --- /dev/null +++ b/platform/ui/src/__docs__/getting-started.mdx @@ -0,0 +1,76 @@ +--- +name: Getting Started +route: /getting-started +--- + +# Getting Started + +## Installation + +> This component library is pre- v1.0. All realeases until a v1.0 have the +> possibility of introducing breaking changes. Please depend on an "exact" +> version in your projects to prevent issues caused by loose versioning. + +Install `react-viewerbase` from npm: + +```shell +// with npm +npm i react-viewerbase --save-exact + +// with yarn +yarn add react-viewerbase --exact +``` + +## Usage + +There is some setup required for `react-viewerbase`. We are working to eliminate +these requirements with the goal of providing ready to use components. + +### External Dependencies + +We have tried to keep the number of external dependencies limited to make setup +as easy as possible. You will, however, need to include either the default font +or the font you set for your theme: + +```js +// Google Fonts, Sanchez & Roboto +'https://fonts.googleapis.com/css?family=Roboto:100,300,400,500,700|Sanchez&display=swap'; +``` + +React Viewerbase also looks for theme CSS variabled defined on `:root`. You can +find a list of variables [on the theming page](/styling-and-theming) + +### Import & Use + +You can use components in your React app: + +```js +import React, { Component } from 'react'; +import { LayoutButton } from 'react-viewerbase'; + +class Example extends Component { + constructor(props) { + super(props); + + this.state = { + selectedCell: { + className: 'hover', + col: 1, + row: 1, + }, + }; + } + + render() { + return ( + this.setState({ selectedCell: cell })} + /> + ); + } +} +``` + +> NOTE: It is heavily recommended that you use a CSS reset or normalize. As well +> as the following style: `* { Box-sizing: Border-box }` diff --git a/platform/ui/src/__docs__/index.html b/platform/ui/src/__docs__/index.html new file mode 100644 index 00000000000..263c5b2f163 --- /dev/null +++ b/platform/ui/src/__docs__/index.html @@ -0,0 +1,80 @@ + + + + + + + + + {{ title }} + + + + + + + {{ head }} + + +
+ {{ footer }} + + diff --git a/platform/ui/src/__docs__/introduction.mdx b/platform/ui/src/__docs__/introduction.mdx new file mode 100644 index 00000000000..efdde28a17b --- /dev/null +++ b/platform/ui/src/__docs__/introduction.mdx @@ -0,0 +1,76 @@ +--- +name: Introduction +route: / +--- + +import { Playground, Props } from 'docz' +import { State } from 'react-powerplug' +import { TableList, TableListItem } from './../index.js' + +# Introduction + +**React Viewerbase is a collection of components and utilities** that power +OHIF's [zero-footprint DICOM viewer](https://github.com/OHIF/Viewers) +([demo][demo-url]). We maintain them as a separate component library to: + +- Decouple presentation from business logic +- Test and develop components in isolation +- Provide well documented, reusable components +- Aid rapid application development for context specific viewers + +## Quick Example + +> This component library is pre- v1.0. All realeases until a v1.0 have the +> possibility of introducing breaking changes. Please depend on an "exact" +> version in your projects to prevent issues caused by loose versioning. + +```js +// Add 'react-viewerbase' as a dependency +yarn add react-viewerbase + +// Import and use components +import { TableList } from 'react-viewerbase' +``` + + + + {({ state, setState }) => ( + + {state.listItems.map((item, index) => { + return ( + alert('item clicked')} + > + + + ) + })} + + )} + + + +## FAQ + +... + + + + +[demo-url]: https://docs.ohif.org/demo/ + diff --git a/platform/ui/src/__docs__/styling-and-theming.mdx b/platform/ui/src/__docs__/styling-and-theming.mdx new file mode 100644 index 00000000000..ce98dcde0a8 --- /dev/null +++ b/platform/ui/src/__docs__/styling-and-theming.mdx @@ -0,0 +1,56 @@ +--- +name: Styling & Theming +route: /styling-and-theming +--- + +# Styling & Theming + +```css +:root { + /* Interface UI Colors */ + --default-color: #9ccef9; + --hover-color: #ffffff; + --active-color: #20a5d6; + --ui-border-color: #44626f; + --ui-border-color-dark: #3c5d80; + --ui-border-color-active: #00a4d9; + --primary-background-color: #000000; + --box-background-color: #3e5975; + + --text-primary-color: #ffffff; + --text-secondary-color: #91b9cd; + --input-background-color: #2c363f; + --input-placeholder-color: #d3d3d3; + + --table-hover-color: #2c363f; + --table-text-primary-color: #ffffff; + --table-text-secondary-color: #91b9cd; + + --large-numbers-color: #6fbde2; + + --state-error: #ffcccc; + --state-error-border: #ffcccc; + --state-error-text: #ffcccc; + + /* Common palette */ + --ui-yellow: #e29e4a; + --ui-sky-blue: #6fbde2; + + /* State palette */ + --ui-state-error: #ffcccc; + --ui-state-error-border: #993333; + --ui-state-error-text: #661111; + --ui-gray-lighter: #436270; + --ui-gray-light: #516873; + --ui-gray: #263340; + --ui-gray-dark: #16202b; + --ui-gray-darker: #151a1f; + --ui-gray-darkest: #14202a; + + --calendar-day-color: #d3d3d3; + --calendar-day-border-color: #d3d3d3; + --calendar-day-active-hover-background-color: #516873; + --calendar-main-color: #263340; + --viewport-border-thickness: 1px; +} +``` diff --git a/platform/ui/src/__docs__/translating.mdx b/platform/ui/src/__docs__/translating.mdx new file mode 100644 index 00000000000..44e810751f7 --- /dev/null +++ b/platform/ui/src/__docs__/translating.mdx @@ -0,0 +1,87 @@ +--- +name: Translating +route: /translating +--- + +# Translating + +**React Viewerbase** supports internationalization using +[i18next](https://www.i18next.com/) through the npm package +[@ohif/i18n](https://www.npmjs.com/package/@ohif/i18n), where is the main +instance of i18n containing several languages and tools. + +## How to translate components + +All you need is to use the internal custom superset of +[withTranslation HOC](https://react.i18next.com/latest/withtranslation-hoc), +available at `src/utils/LanguageProvider.js` + +e.g.: + +```js +import React from 'react'; +import { withTranslation } from '../utils/LanguageProvider.js'; + +function MyComponent({ t }) { + return

{t('my translated text')}

; +} + +export default withTranslation('MyNameSpace')(MyComponent); +``` + +--- + +## Namespaces + +For further information about namespaces and how they work, please visit +[OHIF Namespaces docs](https://docs.ohif.org/essentials/translating.html#namespaces). + +### How to get right the Name Space of a react-viewerbase component? + +Check the component's page in this site, the NameSpace information should be on +the bottom line. + +Also, a nameSpace is defined when exporting a component, this information can be +found on exports trough the code, in case of missing in docs. + +E.g. + +``` +export default withTranslation('TheNamespaceYouAreLookingFor')(TheComponentYouWantToUse); +``` + +### How to use another NameSpace inside the current NameSpace? + +i18next provides a parsing feature able to get translations strings from any +NameSpace, like this following example getting data from `InnerSpace` NameSpace: + +``` +$t(InnerSpace:Reset) +export default withTranslation('OuterSpace')(TheComponent); +``` + +--- + +## I18next Provider + +**React Viewerbase** pass down the `t` function trough the custom +[withTranslation HOC](https://github.com/OHIF/react-viewerbase/blob/master/src/utils/LanguageProvider.js). + +--- + +## Extending and Overriding languages + +[How to Extend languages with @ohif/i18n](https://docs.ohif.org/essentials/translating.html#extending-languages-in-ohifi18n) + +## Changing the language + +The language choosing method is the same implemented in +[OHIF Viewers](https://docs.ohif.org/essentials/translating.html#changing-the-language) + +> You can also change the language of the components displayed in this +> documentation by choosing an option in the +> [Docs Settings](https://react.ohif.org/docs-settings) section. + +## Debugging translations + +[How to Debug @ohif/i18n](https://docs.ohif.org/essentials/translating.html#debugging-translations) diff --git a/platform/ui/src/__docs__/wrapper.js b/platform/ui/src/__docs__/wrapper.js new file mode 100644 index 00000000000..0e94c5559a9 --- /dev/null +++ b/platform/ui/src/__docs__/wrapper.js @@ -0,0 +1,22 @@ +import React from 'react'; + +import PropTypes from 'prop-types'; +import LanguageSwitcher from '../components/languageSwitcher'; + +import './wrapper.styl'; + +const Wrapper = ({ children }) => ( + +
+ Display components in: + +
+ {children} +
+); + +Wrapper.propTypes = { + children: PropTypes.node.isRequired, +}; + +export default Wrapper; diff --git a/platform/ui/src/__docs__/wrapper.styl b/platform/ui/src/__docs__/wrapper.styl new file mode 100644 index 00000000000..b1a4dae6d97 --- /dev/null +++ b/platform/ui/src/__docs__/wrapper.styl @@ -0,0 +1,15 @@ +[class*="Sidebar__Menus"] + @media (min-width: 1120px) + margin-top: 80px + +.sidebarLanguageSwitcher + position: fixed + top: 155px + left 0 + z-index: 1049 + padding: 0 24px 20px + border-bottom: 1px dotted #CED4DE + background: #F5F6F7 + transition: all 200ms ease + @media (max-width: 1119px) + left -100% diff --git a/platform/ui/src/components/checkbox/__docs__/checkbox.mdx b/platform/ui/src/components/checkbox/__docs__/checkbox.mdx new file mode 100644 index 00000000000..dd74a6af5c2 --- /dev/null +++ b/platform/ui/src/components/checkbox/__docs__/checkbox.mdx @@ -0,0 +1,42 @@ +--- +name: Checkbox +menu: Elements +route: /components/checkbox +--- + +import { Playground, Props } from 'docz' +import { State } from 'react-powerplug' +import { Checkbox } from './../index' +import NameSpace from '../../../__docs__/NameSpace' + +# Checkbox + +## Basic usage + + + + {({ state, setState }) => ( + +
+
{JSON.stringify(state, null, 2)}
+
+
+ +
+
+ )} +
+
+ +## API + + + +## Translation Namespace + + \ No newline at end of file diff --git a/platform/ui/src/components/checkbox/checkbox.css b/platform/ui/src/components/checkbox/checkbox.css new file mode 100644 index 00000000000..96311b6fd2e --- /dev/null +++ b/platform/ui/src/components/checkbox/checkbox.css @@ -0,0 +1,56 @@ +.ohif-check-container { + --check-button-dim: 15px; +} + +.ohif-check-container input { + position: absolute; + opacity: 0; + height: inherit; + width: inherit; + cursor: default; +} + +.ohif-check-container { + display: block; + position: relative; + padding-left: 35px; + margin-bottom: 12px; + cursor: pointer; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.ohif-checkbox { + width: var(--check-button-dim); + height: var(--check-button-dim); + position: absolute; + top: 20%; + left: 5%; + cursor: pointer; + background-color: var(--ui-gray-lighter); +} + +.ohif-checkbox:hover { + background-color: var(--default-color); +} + +.ohif-checkbox:after { + content: ''; + position: absolute; + width: 70%; + height: 70%; +} + +.ohif-checkbox.ohif-checked:after { + display: block; + top: 14%; + left: 14%; + background: white; +} + +.ohif-check-label { + font-size: 12px; + font-weight: 500; +} diff --git a/platform/ui/src/components/checkbox/checkbox.js b/platform/ui/src/components/checkbox/checkbox.js new file mode 100644 index 00000000000..5f1f16ea30f --- /dev/null +++ b/platform/ui/src/components/checkbox/checkbox.js @@ -0,0 +1,46 @@ +import React, { Component } from 'react'; +import PropTypes from 'prop-types'; +import './checkbox.css'; + +export class Checkbox extends Component { + static propTypes = { + label: PropTypes.string.isRequired, + checked: PropTypes.bool, + }; + + constructor(props) { + super(props); + this.state = { checked: props.checked, label: props.label }; + } + + handleChange(e) { + this.setState({ checked: e.target.checked }); + } + + render() { + let checkbox; + if (this.state.checked) { + checkbox = ; + } else { + checkbox = ; + } + + return ( +
+
+ +
+
+ ); + } +} diff --git a/platform/ui/src/components/checkbox/index.js b/platform/ui/src/components/checkbox/index.js new file mode 100644 index 00000000000..9d151417588 --- /dev/null +++ b/platform/ui/src/components/checkbox/index.js @@ -0,0 +1 @@ +export { Checkbox } from './checkbox.js'; diff --git a/platform/ui/src/components/cineDialog/CineDialog.js b/platform/ui/src/components/cineDialog/CineDialog.js new file mode 100644 index 00000000000..854f8069577 --- /dev/null +++ b/platform/ui/src/components/cineDialog/CineDialog.js @@ -0,0 +1,202 @@ +import './CineDialog.styl'; + +import React, { PureComponent } from 'react'; +import { withTranslation } from '../../utils/LanguageProvider'; +import { Icon } from './../../elements/Icon'; +import PropTypes from 'prop-types'; + +class CineDialog extends PureComponent { + constructor(props) { + super(props); + + this.state = { + cineFrameRate: props.cineFrameRate, + isPlaying: props.isPlaying, + }; + } + + static propTypes = { + /** Minimum value for range slider */ + cineMinFrameRate: PropTypes.number.isRequired, + /** Maximum value for range slider */ + cineMaxFrameRate: PropTypes.number.isRequired, + /** Increment range slider can "step" in either direction. */ + cineStepFrameRate: PropTypes.number.isRequired, + cineFrameRate: PropTypes.number.isRequired, + /** 'True' if playing, 'False' if paused. */ + isPlaying: PropTypes.bool.isRequired, + onPlayPauseChanged: PropTypes.func, + onFrameRateChanged: PropTypes.func, + onClickNextButton: PropTypes.func, + onClickBackButton: PropTypes.func, + onClickSkipToStart: PropTypes.func, + onClickSkipToEnd: PropTypes.func, + /** i18next translation function */ + t: PropTypes.func.isRequired, + }; + + static defaultProps = { + cineMinFrameRate: 1, + cineMaxFrameRate: 90, + cineStepFrameRate: 1, + cineFrameRate: 24, + isPlaying: false, + }; + + componentDidUpdate(prevProps) { + // TODO: Not sure if we should just switch this to a stateless + // fully-controlled component instead + if ( + this.props.isPlaying !== prevProps.isPlaying || + this.props.isPlaying !== this.state.isPlaying + ) { + this.setState({ + isPlaying: this.props.isPlaying, + }); + } + + if ( + this.props.cineFrameRate !== prevProps.cineFrameRate || + this.props.cineFrameRate !== this.state.cineFrameRate + ) { + this.setState({ + cineFrameRate: this.props.cineFrameRate, + }); + } + } + + handleInputChange = event => { + const target = event.target; + + let value = target.value; + + if (target.type === 'range') { + value = parseFloat(target.value); + } + + const name = target.name; + + this.setState({ + [name]: value, + }); + + if (name === 'cineFrameRate' && this.props.onFrameRateChanged) { + this.props.onFrameRateChanged(parseFloat(value)); + } + }; + + onClickPlayPause = () => { + const value = !this.state.isPlaying; + + this.setState({ + isPlaying: value, + }); + + if (this.props.onPlayPauseChanged) { + this.props.onPlayPauseChanged(value); + } + }; + + onClickNextButton = event => { + if (this.props.onClickNextButton) { + this.props.onClickNextButton(event); + } + }; + + onClickBackButton = event => { + if (this.props.onClickBackButton) { + this.props.onClickBackButton(event); + } + }; + + onClickSkipToStart = event => { + if (this.props.onClickSkipToStart) { + this.props.onClickSkipToStart(event); + } + }; + + onClickSkipToEnd = event => { + if (this.props.onClickSkipToEnd) { + this.props.onClickSkipToEnd(event); + } + }; + + // TODO: + // - Add next / previous display set buttons which just call + // onClickNextDisplaySet and onClickPreviousDisplaySet which are passed in as props. + // See https://github.com/OHIF/Viewers/blob/master/Packages/ohif-viewerbase/client/components/viewer/cineDialog/cineDialog.html#L38 + // - Add 'isEnabled' prop: https://github.com/OHIF/Viewers/blob/master/Packages/ohif-viewerbase/client/components/viewer/cineDialog/cineDialog.js#L301 + render() { + const { t } = this.props; + return ( +
+
+
+
+ + + + + +
+
+
+
+ +
+ + {this.state.cineFrameRate.toFixed(1)} {t('fps')} + +
+
+
+ ); + } +} + +const connectedComponent = withTranslation('CineDialog')(CineDialog); +export { connectedComponent as CineDialog }; +export default connectedComponent; diff --git a/platform/ui/src/components/cineDialog/CineDialog.styl b/platform/ui/src/components/cineDialog/CineDialog.styl new file mode 100644 index 00000000000..67b59cff33b --- /dev/null +++ b/platform/ui/src/components/cineDialog/CineDialog.styl @@ -0,0 +1,172 @@ +@import './../../design/styles/common/global.styl' +@import './../../design/styles/common/form.styl' + +.CineDialog + background: var(--ui-gray-darkest); + color: var(--text-secondary-color); + filter: drop-shadow(0 0 3px var(--ui-gray-darkest)) + border: none + border-radius: 8px + width: inherit; + + h5 + font-size: 20px + line-height: 35px + margin: 0 + + h5, label + font-weight: 400 + + .cine-navigation, .cine-controls, .cine-options + cursor: default + + .fps-section + input[type="range"] + background-color: transparent + border: 0 none + outline: 0 none + + &::-ms-tooltip + display: none + + .double-row-style + box-sizing: border-box + width: 290px + height: 70px + padding: 10px + top: 2% + left: 35% + + .cine-navigation + position: absolute + right: 16px + top: 10px + + .btn + padding: 0 4px + + i + font-size: 32px + line-height: 32px + + .cine-controls + left: 0px + + .cine-options + padding: 0px 0 + + .fps-section + width: 175px + float: left + + .fps + float: right + + + .single-row-style + box-sizing: content-box + width: 425px + height: 45px + padding: 4px 8px + top: 2% + left: 35% + + .cine-navigation + float: right + overflow: hidden + padding-right: 12px + position: relative + + .btn + padding: 0 2px + margin: 0 0 0 2px + border: 0 none + &:first-of-type + margin-left: 0 + + i + font-size: 32px + line-height: 45px + + .cine-controls + position: relative + float: left + overflow: hidden + + .btn + font-size: 22px + line-height: 45px + min-width: 28px + padding: 0 0px + margin: 0 4px + border: 0 none + + .cine-options + display: block + position: relative + width: 150px + float: left + overflow: hidden + padding: 0 + margin: 0 0 0 10px + + .fps-section + display: block + float: left + width: 80px + input[type="range"] + line-height: 45px + height: 45px + + .fps + display: block + width: 68px + float: left + padding: 0 + margin: 0 0 0 2px + text-align: center + line-height: 45px + font-size: 14px; + line-height: 1.42857143; + + .btn + color: var(--text-secondary-color); + background-color: transparent + border: 0 + border-radius: 4px + font-size: 15px + width: 45px + font-weight: normal + height: 37px + line-height: 37px + padding: 0 12px + + &:hover, &:active, &.active + color: var(--hover-color); + + &[disabled] + &:hover + color: inherit + &:active + color: var(--text-secondary-color); + + &.btn-primary, &.btn-secondary, &.btn-danger + transition: background-color 0.3s ease + + &:hover, &:active, &:focus + opacity: 0.8 + + &.btn-primary + background-color: var(--active-color); + color: var(--primary-background-color) + + &.btn-secondary + background-color: var(--text-secondary-color); + color: var(--primary-background-color) + + &.btn-danger + background-color: var(--text-destructive-color); + color: var(--text-primary-color); + + &.active + box-shadow: inset 1px 1px 2px var(--ui-gray-darkest) diff --git a/platform/ui/src/components/cineDialog/__docs__/cineDialog.mdx b/platform/ui/src/components/cineDialog/__docs__/cineDialog.mdx new file mode 100644 index 00000000000..48ecfa0fd78 --- /dev/null +++ b/platform/ui/src/components/cineDialog/__docs__/cineDialog.mdx @@ -0,0 +1,57 @@ +--- +name: CINE Dialog +menu: Components +route: /components/cine-dialog +--- + +import { Playground, Props } from 'docz' +import { State } from 'react-powerplug' +import { CineDialog } from './../index' +import NameSpace from '../../../__docs__/NameSpace' + +# CINE Dialog + +## Basic usage + + + + {({ state, setState }) => ( + +
+
{JSON.stringify(state, null, 2)}
+
+
+ + setState({ lastChange: 'Clicked SkipToStart' }) + } + onClickSkipToEnd={() => + setState({ lastChange: 'Clicked SkipToEnd' }) + } + onClickNextButton={() => setState({ lastChange: 'Clicked Next' })} + onClickBackButton={() => setState({ lastChange: 'Clicked Back' })} + onLoopChanged={value => setState({ isLoopEnabled: value })} + onFrameRateChanged={value => setState({ cineFrameRate: value })} + onPlayPauseChanged={() => setState({ isPlaying: !state.isPlaying })} + /> +
+
+ )} +
+
+ +## API + + + +## Translation Namespace + + diff --git a/platform/ui/src/components/cineDialog/index.js b/platform/ui/src/components/cineDialog/index.js new file mode 100644 index 00000000000..5827ce58810 --- /dev/null +++ b/platform/ui/src/components/cineDialog/index.js @@ -0,0 +1,2 @@ +import CineDialog from './CineDialog'; +export { CineDialog }; diff --git a/platform/ui/src/components/index.js b/platform/ui/src/components/index.js new file mode 100644 index 00000000000..bc9beb74a23 --- /dev/null +++ b/platform/ui/src/components/index.js @@ -0,0 +1,48 @@ +import { + ExampleDropTarget, + StudyBrowser, + ThumbnailEntry, +} from './studyBrowser'; +import { LayoutButton, LayoutChooser } from './layoutButton'; +import { MeasurementTable, MeasurementTableItem } from './measurementTable'; +import { Overlay, OverlayTrigger } from './overlayTrigger'; +import { TableList, TableListItem } from './tableList'; +import { + AboutModal, + UserPreferences, + UserPreferencesModal, +} from './userPreferencesModal'; + +import { CineDialog } from './cineDialog'; +import { QuickSwitch } from './quickSwitch'; +import { RoundedButtonGroup } from './roundedButtonGroup'; +import { SelectTree } from './selectTree'; +import { SimpleDialog } from './simpleDialog'; +import { StudyList } from './studyList'; +import { ToolbarSection } from './toolbarSection'; +import { Tooltip } from './tooltip'; + +export { + CineDialog, + ExampleDropTarget, + LayoutButton, + LayoutChooser, + MeasurementTable, + MeasurementTableItem, + Overlay, + OverlayTrigger, + QuickSwitch, + RoundedButtonGroup, + SelectTree, + SimpleDialog, + StudyBrowser, + StudyList, + TableList, + TableListItem, + ThumbnailEntry, + ToolbarSection, + Tooltip, + AboutModal, + UserPreferences, + UserPreferencesModal, +}; diff --git a/platform/ui/src/components/languageSwitcher/LanguageSwitcher.js b/platform/ui/src/components/languageSwitcher/LanguageSwitcher.js new file mode 100644 index 00000000000..2d17305bd3f --- /dev/null +++ b/platform/ui/src/components/languageSwitcher/LanguageSwitcher.js @@ -0,0 +1,66 @@ +import React, { useState, useEffect } from 'react'; +import i18n from '@ohif/i18n'; + +import './LanguageSwitcher.styl'; +import { withTranslation } from '../../utils/LanguageProvider'; + +const LanguageSwitcher = () => { + const getCurrentLanguage = (language = i18n.language) => + language.split('-')[0]; + + const [currentLanguage, setCurrentLanguage] = useState(getCurrentLanguage()); + const languages = [ + // TODO: list of available languages should come from i18n.options.resources + { + value: 'en', + label: 'English', + }, + { + value: 'es', + label: 'Spanish', + }, + ]; + + const onChange = () => { + const { value } = event.target; + const language = getCurrentLanguage(value); + setCurrentLanguage(language); + + i18n.init({ + fallbackLng: language, + lng: language, + }); + }; + + useEffect(() => { + let mounted = true; + + i18n.on('languageChanged', () => { + if (mounted) { + setCurrentLanguage(getCurrentLanguage()); + } + }); + + return () => { + mounted = false; + }; + }, []); + + return ( + + ); +}; + +export default withTranslation('UserPreferencesModal')(LanguageSwitcher); diff --git a/platform/ui/src/components/languageSwitcher/LanguageSwitcher.styl b/platform/ui/src/components/languageSwitcher/LanguageSwitcher.styl new file mode 100644 index 00000000000..51284c8740f --- /dev/null +++ b/platform/ui/src/components/languageSwitcher/LanguageSwitcher.styl @@ -0,0 +1,4 @@ +.language-select + color: var(--primary-background-color) + display: block + min-width: 150px diff --git a/platform/ui/src/components/languageSwitcher/index.js b/platform/ui/src/components/languageSwitcher/index.js new file mode 100644 index 00000000000..31505c03bfd --- /dev/null +++ b/platform/ui/src/components/languageSwitcher/index.js @@ -0,0 +1 @@ +export { default } from './LanguageSwitcher'; diff --git a/platform/ui/src/components/layoutButton/LayoutButton.js b/platform/ui/src/components/layoutButton/LayoutButton.js new file mode 100644 index 00000000000..fd6bdee6a61 --- /dev/null +++ b/platform/ui/src/components/layoutButton/LayoutButton.js @@ -0,0 +1,64 @@ +import React, { PureComponent } from 'react'; + +import { LayoutChooser } from './LayoutChooser.js'; +import PropTypes from 'prop-types'; +import ToolbarButton from '../../viewer/ToolbarButton'; + +export class LayoutButton extends PureComponent { + static defaultProps = { + dropdownVisible: false, + }; + + static propTypes = { + dropdownVisible: PropTypes.bool.isRequired, + /** Called with the selectedCell number when grid sell is selected */ + onChange: PropTypes.func, + /** The cell to show as selected */ + selectedCell: PropTypes.object, + }; + + state = { + dropdownVisible: this.props.dropdownVisible, + }; + + componentDidUpdate(prevProps) { + if (this.props.dropdownVisible !== prevProps.dropdownVisible) { + this.setState({ + dropdownVisible: this.props.dropdownVisible, + }); + } + } + + onClick = () => { + this.setState({ + dropdownVisible: !this.state.dropdownVisible, + }); + }; + + onChange = selectedCell => { + if (this.props.onChange) { + this.props.onChange(selectedCell); + } + }; + + render() { + return ( +
+ + +
+ ); + } +} + +export default LayoutButton; diff --git a/platform/ui/src/components/layoutButton/LayoutChooser.js b/platform/ui/src/components/layoutButton/LayoutChooser.js new file mode 100644 index 00000000000..a1ff454124b --- /dev/null +++ b/platform/ui/src/components/layoutButton/LayoutChooser.js @@ -0,0 +1,129 @@ +import React, { PureComponent } from 'react'; +import PropTypes from 'prop-types'; +import './LayoutChooser.styl'; + +/** + * Adds the 'hover' class to cells above and to the left of the current cell + * This is used to "fill in" the grid that the user will change the layout to, + * if they click on a specific table cell. + **/ + +class LayoutChooser extends PureComponent { + static propTypes = { + rows: PropTypes.number.isRequired, + columns: PropTypes.number.isRequired, + visible: PropTypes.bool.isRequired, + selectedCell: PropTypes.object, + boxSize: PropTypes.number.isRequired, + cellBorder: PropTypes.number.isRequired, + onClick: PropTypes.func, + onChange: PropTypes.func, + }; + + static defaultProps = { + rows: 3, + columns: 3, + visible: true, + boxSize: 20, + cellBorder: 1, + selectedCell: { + row: -1, + col: -1, + }, + }; + + constructor(props) { + super(props); + this.emptyCell = { + row: -1, + column: -1, + }; + this.state = { + table: [[]], + selectedCell: this.props.selectedCell, + }; + } + componentDidMount() { + this.highlightCells(this.emptyCell); + } + onClick(currentCell) { + this.setState({ + selectedCell: currentCell, + }); + this.highlightCells(currentCell); + if (this.props.onClick) { + this.props.onClick(currentCell); + } + if (this.props.onChange) { + this.props.onChange(currentCell); + } + } + isRange = (cell, parentCell) => { + return cell.row <= parentCell.row && cell.col <= parentCell.col; + }; + highlightCells = currentCell => { + let table = []; + for (let row = 0; row < this.props.rows; row++) { + let newRow = []; + for (let col = 0; col < this.props.columns; col++) { + let cell = { row: row, col: col }; + if (this.isRange(cell, currentCell)) { + cell.className = 'hover'; + } else if ( + this.isRange(currentCell, this.emptyCell) && + this.isRange(cell, this.state.selectedCell) + ) { + cell.className = 'selectedBefore'; + } + newRow.push(cell); + } + table.push(newRow); + } + this.setState({ table: table }); + }; + + render() { + let columns = this.props.columns; + const style = { + display: this.props.visible ? 'block' : 'none', + minWidth: + columns * this.props.boxSize + (columns + 5) * this.props.cellBorder, + }; + return ( +
+ + + {this.state.table.map((row, i) => { + return ( + + {row.map((cell, j) => { + return ( + + ); + })} + +
this.highlightCells(cell)} + onMouseLeave={() => this.highlightCells(this.emptyCell)} + onClick={() => this.onClick(cell)} + /> + ); + })} +
+
+ ); + } +} + +export { LayoutChooser }; diff --git a/platform/ui/src/components/layoutButton/LayoutChooser.styl b/platform/ui/src/components/layoutButton/LayoutChooser.styl new file mode 100644 index 00000000000..aeb77018da1 --- /dev/null +++ b/platform/ui/src/components/layoutButton/LayoutChooser.styl @@ -0,0 +1,47 @@ +@import './../../design/styles/common/button.styl' +@import './../../design/styles/common/global.styl' + +$borderColor = rgba(77, 99, 110, 0.81) + +.layoutChooser-dropdown-menu + position: absolute; + top: 100%; + left: 0; + z-index: 1000; + display: none; + float: left; + min-width: 160px; + padding: 5px 0; + margin: 2px 0 0; + font-size: 14px; + text-align: left; + list-style: none; + background-color: #fff; + -webkit-background-clip: padding-box; + background-clip: padding-box; + border: 1px solid #ccc; + border: 1px solid rgba(0,0,0,.15); + border-radius: 4px; + -webkit-box-shadow: 0 6px 12px rgba(0,0,0,.175); + box-shadow: 0 6px 12px rgba(0,0,0,.175); + +.layoutChooser + .selectedBefore + background-color: #5cc3eb + + border: 1px solid $borderColor; + border-radius: 8px + padding: 5px 0; + position: absolute; + z-index: 5000 + + table + margin: 0 auto + border-spacing: 0; + border-collapse: collapse; + td + cursor: pointer + transition(background-color 0.1s ease) + + &:hover, &.hover // Add the hover class here to be triggered by mouseenter/mouseleave + background-color: #209ac9 diff --git a/platform/ui/src/components/layoutButton/__docs__/layoutButton.css b/platform/ui/src/components/layoutButton/__docs__/layoutButton.css new file mode 100644 index 00000000000..21ec59d7e51 --- /dev/null +++ b/platform/ui/src/components/layoutButton/__docs__/layoutButton.css @@ -0,0 +1,10 @@ +.LayoutExample { + background-color: var(--primary-background-color); + width: 160px; + height: 160px; +} + +.GridLayout td { + padding: 5px; + border: 1px solid black; +} diff --git a/platform/ui/src/components/layoutButton/__docs__/layoutButton.mdx b/platform/ui/src/components/layoutButton/__docs__/layoutButton.mdx new file mode 100644 index 00000000000..fc6a5a6ac47 --- /dev/null +++ b/platform/ui/src/components/layoutButton/__docs__/layoutButton.mdx @@ -0,0 +1,49 @@ +--- +name: Layout Button +menu: Components +route: /components/layout-button +--- + +import { Playground, Props } from 'docz' +import { State } from 'react-powerplug' +import { LayoutButton } from './../index.js' +import './layoutButton.css' +import NameSpace from '../../../__docs__/NameSpace' + +# Layout Button + +## Basic usage + + + + {({ state, setState }) => ( + + {/* STATE */} +
{JSON.stringify(state, null, 2) }
+ + {/* COMPONENT */} +
+ setState({ selectedCell: cell })} + /> +
+
+ )} +
+ +
+ +## API + + + +## Translation Namespace + + diff --git a/platform/ui/src/components/layoutButton/index.js b/platform/ui/src/components/layoutButton/index.js new file mode 100644 index 00000000000..b7615590a10 --- /dev/null +++ b/platform/ui/src/components/layoutButton/index.js @@ -0,0 +1,2 @@ +export { LayoutButton } from './LayoutButton.js'; +export { LayoutChooser } from './LayoutChooser.js'; diff --git a/platform/ui/src/components/measurementTable/MeasurementTable.js b/platform/ui/src/components/measurementTable/MeasurementTable.js new file mode 100644 index 00000000000..7b78dfdcef9 --- /dev/null +++ b/platform/ui/src/components/measurementTable/MeasurementTable.js @@ -0,0 +1,178 @@ +import './MeasurementTable.styl'; + +import React, { Component } from 'react'; +import { withTranslation } from '../../utils/LanguageProvider'; + +import { Icon } from './../../elements/Icon'; +import { MeasurementTableItem } from './MeasurementTableItem.js'; +import { OverlayTrigger } from './../overlayTrigger'; +import PropTypes from 'prop-types'; +import { ScrollableArea } from './../../ScrollableArea/ScrollableArea.js'; +import { TableList } from './../tableList'; +import { Tooltip } from './../tooltip'; + +class MeasurementTable extends Component { + static propTypes = { + measurementCollection: PropTypes.array.isRequired, + timepoints: PropTypes.array.isRequired, + overallWarnings: PropTypes.object.isRequired, + readOnly: PropTypes.bool, + onItemClick: PropTypes.func, + onRelabelClick: PropTypes.func, + onDeleteClick: PropTypes.func, + onEditDescriptionClick: PropTypes.func, + selectedMeasurementNumber: PropTypes.number, + overwallWarnings: PropTypes.object, + t: PropTypes.func, + }; + + static defaultProps = { + overallWarnings: { + warningList: [], + }, + readOnly: false, + }; + + state = { + selectedKey: null, + }; + + render() { + const hasOverallWarnings = + this.props.overallWarnings.warningList.length > 0; + return ( +
+
+ {hasOverallWarnings && ( + +
+ {this.props.t('Criteria nonconformities')} +
+
+ {this.getWarningContent()} +
+ + } + > + + + + + +
+ )} + {this.getTimepointsHeader()} +
+ +
{this.getMeasurementsGroups()}
+
+
+ ); + } + + getMeasurementsGroups = () => { + return this.props.measurementCollection.map((measureGroup, index) => { + return ( + + {this.getMeasurements(measureGroup)} + + ); + }); + }; + + getMeasurements = measureGroup => { + const selectedKey = this.props.selectedMeasurementNumber + ? this.props.selectedMeasurementNumber + : this.state.selectedKey; + return measureGroup.measurements.map((measurement, index) => { + const key = measurement.measurementNumber; + const itemIndex = measurement.itemNumber || index + 1; + const itemClass = + selectedKey === key && !this.props.readOnly ? 'selected' : ''; + + return ( + + ); + }); + }; + + onItemClick = (event, measurementData) => { + if (this.props.readOnly) return; + + this.setState({ + selectedKey: measurementData.measurementNumber, + }); + + if (this.props.onItemClick) { + this.props.onItemClick(event, measurementData); + } + }; + + getCustomHeader = measureGroup => { + return ( + +
+ {this.props.t(measureGroup.groupName)} +
+ {measureGroup.maxMeasurements && ( +
+ {this.props.t('MAX')} {measureGroup.maxMeasurements} +
+ )} +
{measureGroup.measurements.length}
+
+ ); + }; + + getTimepointsHeader = () => { + return this.props.timepoints.map((timepoint, index) => { + return ( +
+
{this.props.t(timepoint.key)}
+
{timepoint.date}
+
+ ); + }); + }; + + getWarningContent = () => { + const { warningList = '' } = this.props.overwallWarnings; + + if (Array.isArray(warningList)) { + const listedWarnings = warningList.map((warn, index) => { + return
  • {warn}
  • ; + }); + + return
      {listedWarnings}
    ; + } else { + return {warningList}; + } + }; +} + +const connectedComponent = withTranslation(['MeasurementTable', 'Common'])( + MeasurementTable +); +export { connectedComponent as MeasurementTable }; +export default connectedComponent; diff --git a/platform/ui/src/components/measurementTable/MeasurementTable.styl b/platform/ui/src/components/measurementTable/MeasurementTable.styl new file mode 100644 index 00000000000..14cf50e4d04 --- /dev/null +++ b/platform/ui/src/components/measurementTable/MeasurementTable.styl @@ -0,0 +1,92 @@ +.measurementTable + background-color: var(--primary-background-color) + height: 100%; + width: 100%; + display: flex; + flex-direction: column; + + .maxMeasurements + border-radius: 3px; + color: var(--primary-background-color); + font-size: 12px; + font-weight: 500; + height: 19px; + line-height: 17px; + margin-top: 22px; + margin-right: 15px; + padding: 2px 6px 0; + text-transform: uppercase; + transition: all 0.3s ease; + background-color: var(--default-color); + + .measurementTableHeader + padding-left: 45px; + + .measurementTableHeaderItem + display: inline-block; + margin-top: 9px; + margin-left: 9px; + padding-left: 9px; + width: 90px; + font-size: 14px; + line-height: 20px; + border-left: 1px solid var(--text-secondary-color); + color: var(--text-primary-color); + + .timepointLabel + color: var(--text-secondary-color); + font-size: 12px; + + .warning-status + display: block; + position: absolute; + width: 50px; + height: 40px; + padding-left: 7px; + left: 15px; + top: 7px; + + .warning-border + display: block; + border: 2px solid #e29e4a; + border-radius: 36px; + padding: 6px 7px; + width: 40px; + height: 40px; + + svg + color: #e29e4a; + width: 22px; + height: 20px; + pointer-events: inherit; + +.tooltip-warning + &.in + opacity 1; + + .tooltip-inner + padding: 0 + + .warningTitle + text-align: left + background-color: var(--ui-gray-darkest); + padding: 7px 15px; + border-top-left-radius: 7px; + border-top-right-radius: 7px; + + .warningContent + text-align center + background-color: var(--ui-gray); + border-bottom-left-radius: 7px; + border-bottom-right-radius: 7px; + + ol + margin-top: auto; + padding-inline-start: 20px; + padding-top: 10px; + padding-bottom: 10px; + padding-left: 25px; + text-align: left; + + li + padding-right: 10px; diff --git a/platform/ui/src/components/measurementTable/MeasurementTableItem.js b/platform/ui/src/components/measurementTable/MeasurementTableItem.js new file mode 100644 index 00000000000..a09820cb2b0 --- /dev/null +++ b/platform/ui/src/components/measurementTable/MeasurementTableItem.js @@ -0,0 +1,165 @@ +import React, { Component } from 'react'; +import PropTypes from 'prop-types'; +import { withTranslation } from '../../utils/LanguageProvider'; + +import { Icon } from './../../elements/Icon'; +import { OverlayTrigger } from './../overlayTrigger'; +import { Tooltip } from './../tooltip'; +import { TableListItem } from './../tableList/TableListItem.js'; + +import './MeasurementTableItem.styl'; + +class MeasurementTableItem extends Component { + static propTypes = { + measurementData: PropTypes.object.isRequired, + onItemClick: PropTypes.func.isRequired, + onRelabel: PropTypes.func, + onDelete: PropTypes.func, + onEditDescription: PropTypes.func, + itemClass: PropTypes.string, + itemIndex: PropTypes.number, + t: PropTypes.func, + }; + + render() { + const { warningTitle = '', hasWarnings } = this.props.measurementData; + + return ( + + {hasWarnings ? ( + +
    {this.props.t(warningTitle)}
    +
    {this.getWarningContent()}
    + + } + > +
    {this.getTableListItem()}
    +
    + ) : ( + {this.getTableListItem()} + )} +
    + ); + } + + getActionButton = (btnLabel, onClickCallback) => { + return ( + + ); + }; + + getTableListItem = () => { + const hasWarningClass = this.props.measurementData.hasWarnings + ? 'hasWarnings' + : ''; + + const actionButtons = []; + + if (typeof this.props.onRelabel === 'function') { + const relabelButton = this.getActionButton( + 'Relabel', + this.onRelabelClick + ); + actionButtons.push(relabelButton); + } + if (typeof this.props.onEditDescription === 'function') { + const descriptionButton = this.getActionButton( + 'Description', + this.onEditDescriptionClick + ); + actionButtons.push(descriptionButton); + } + if (typeof this.props.onDelete === 'function') { + const deleteButton = this.getActionButton('Delete', this.onDeleteClick); + actionButtons.push(deleteButton); + } + + return ( + +
    +
    + {this.props.t(this.props.measurementData.label, { + keySeparator: '>', + nsSeparator: '|', + })} +
    +
    {this.getDataDisplayText()}
    +
    {actionButtons}
    +
    +
    + ); + }; + + onItemClick = event => { + this.props.onItemClick(event, this.props.measurementData); + }; + + onRelabelClick = event => { + // Prevent onItemClick from firing + event.stopPropagation(); + + this.props.onRelabel(event, this.props.measurementData); + }; + + onEditDescriptionClick = event => { + // Prevent onItemClick from firing + event.stopPropagation(); + + this.props.onEditDescription(event, this.props.measurementData); + }; + + onDeleteClick = event => { + // Prevent onItemClick from firing + event.stopPropagation(); + + this.props.onDelete(event, this.props.measurementData); + }; + + getDataDisplayText = () => { + return this.props.measurementData.data.map((data, index) => { + return ( +
    + {data.displayText ? data.displayText : '...'} +
    + ); + }); + }; + + getWarningContent = () => { + const { warningList = '' } = this.props.measurementData; + + if (Array.isArray(warningList)) { + const listedWarnings = warningList.map((warn, index) => { + return
  • {warn}
  • ; + }); + + return
      {listedWarnings}
    ; + } else { + return {warningList}; + } + }; +} + +const connectedComponent = withTranslation('MeasurementTable')( + MeasurementTableItem +); +export { connectedComponent as MeasurementTableItem }; +export default connectedComponent; diff --git a/platform/ui/src/components/measurementTable/MeasurementTableItem.styl b/platform/ui/src/components/measurementTable/MeasurementTableItem.styl new file mode 100644 index 00000000000..8f1e07bef8d --- /dev/null +++ b/platform/ui/src/components/measurementTable/MeasurementTableItem.styl @@ -0,0 +1,61 @@ +.measurementItem + .rowActions + background-color: var(--ui-gray-darker) + height: 0 + overflow: hidden + transition: all 0.3s ease + visibility: hidden + padding-left: 14px + + .btnAction + background-color: transparent; + border: none; + color: var(--default-color) + cursor: pointer + line-height: 35px + height: 35px + transition: all 0.3s ease + + &:hover, &:active + color: var(--text-primary-color) + + i + margin-right: 4px; + + &.selected + .rowActions + height: 35px + visibility: visible + + .measurementLocation + margin-left: 9px; + margin-top: 9px; + + .measurementDisplayText + display: inline-block; + margin-top: 9px; + margin-left: 9px; + padding-left: 9px; + width: 90px; + border-left: 1px solid var(--text-secondary-color); + color: var(--text-primary-color); + + .itemIndex + -webkit-box-sizing: initial; + -moz-box-sizing: initial; + box-sizing: initial; + + &.hasWarnings + .itemIndex + opacity: 1 + background-color: #e29e4a; + color: #fff; + + .warning-icon + display: block; + margin: 7px auto 0; + + svg + width: 22px; + height: 20px; + pointer-events: inherit; diff --git a/platform/ui/src/components/measurementTable/__docs__/measurementTable.mdx b/platform/ui/src/components/measurementTable/__docs__/measurementTable.mdx new file mode 100644 index 00000000000..d85d87490cf --- /dev/null +++ b/platform/ui/src/components/measurementTable/__docs__/measurementTable.mdx @@ -0,0 +1,49 @@ +--- +name: Measurement Table +menu: Components +route: /components/measurement-table +--- + +import { Playground, Props } from 'docz' +import { State } from 'react-powerplug' +import { MeasurementTable } from './../index.js' +import NameSpace from '../../../__docs__/NameSpace' +// +import measurements from './measurements.js' +import timepoints from './timepoints.js' +import warnings from './warnings.js' + +# Measurement Table + +## Basic usage + + + + {({ state, setState }) => ( +
    + alert('onItemClick')} + onRelabelClick={() => alert('onRelabelClick')} + onDeleteClick={() => alert('onDeleteClick')} + onEditDescriptionClick={() => alert('onEditDescriptionClick')} + /> +
    + )} +
    +
    + +## API + + + +## Translation Namespace + + diff --git a/platform/ui/src/components/measurementTable/__docs__/measurements.js b/platform/ui/src/components/measurementTable/__docs__/measurements.js new file mode 100644 index 00000000000..2a0507902ab --- /dev/null +++ b/platform/ui/src/components/measurementTable/__docs__/measurements.js @@ -0,0 +1,93 @@ +export default [ + { + maxMeasurements: 5, + groupName: 'Targets', + measurements: [ + { + measurementId: '123', + measurementNumber: '123', + itemNumber: 1, + label: 'Chest Wall Posterior', + hasWarnings: true, + warningTitle: 'Criteria nonconformities', + isSplitLesion: false, + warningList: [ + 'All measurements should have a location', + 'Nodal lesions must be >= 15mm short axis AND >= double the acquisition slice thickness by CT and MR', + ], + data: [ + { + displayText: '25.7 x 12.9', + }, + { + displayText: '24.7 x 11.5', + }, + {}, + ], + }, + { + measurementId: '124', + measurementNumber: '124', + itemNumber: 2, + label: 'Bone Extremity', + data: [ + { + displayText: '24.7 x 11.1', + }, + { + displayText: '21.2 x 10.9', + }, + {}, + ], + }, + ], + }, + { + maxMeasurements: 3, + groupName: 'NonTargets', + measurements: [ + { + measurementId: '125', + measurementNumber: '125', + itemNumber: 1, + label: 'Chest Wall Single Site', + data: [ + { + displayText: 'MD', + }, + { + displayText: 'NM', + }, + {}, + ], + }, + { + measurementId: '126', + measurementNumber: '126', + itemNumber: 2, + label: 'Extremity Multiple Sites', + data: [ + { + displayText: 'CR', + }, + {}, + {}, + ], + }, + { + measurementId: '127', + measurementNumber: '127', + label: 'Extremity Site', + data: [ + { + displayText: 'CR', + }, + {}, + { + displayText: 'NM', + }, + ], + }, + ], + }, +]; diff --git a/platform/ui/src/components/measurementTable/__docs__/timepoints.js b/platform/ui/src/components/measurementTable/__docs__/timepoints.js new file mode 100644 index 00000000000..e42b4415606 --- /dev/null +++ b/platform/ui/src/components/measurementTable/__docs__/timepoints.js @@ -0,0 +1,14 @@ +export default [ + { + label: 'Follow-up 2', + date: '20-Dec-18', + }, + { + label: 'Follow-up 1', + date: '15-Jun-18', + }, + { + label: 'Baseline', + date: '10-Apr-18', + }, +]; diff --git a/platform/ui/src/components/measurementTable/__docs__/warnings.js b/platform/ui/src/components/measurementTable/__docs__/warnings.js new file mode 100644 index 00000000000..a2da7f90df9 --- /dev/null +++ b/platform/ui/src/components/measurementTable/__docs__/warnings.js @@ -0,0 +1,6 @@ +export default { + warningList: [ + 'All measurements should have a location', + 'Nodal lesions must be >= 15mm short axis AND >= double the acquisition slice thickness by CT and MR', + ], +}; diff --git a/platform/ui/src/components/measurementTable/index.js b/platform/ui/src/components/measurementTable/index.js new file mode 100644 index 00000000000..e70bd51eb68 --- /dev/null +++ b/platform/ui/src/components/measurementTable/index.js @@ -0,0 +1,2 @@ +export { MeasurementTable } from './MeasurementTable.js'; +export { MeasurementTableItem } from './MeasurementTableItem.js'; diff --git a/platform/ui/src/components/overlayTrigger/Fade.js b/platform/ui/src/components/overlayTrigger/Fade.js new file mode 100644 index 00000000000..34a5cad791b --- /dev/null +++ b/platform/ui/src/components/overlayTrigger/Fade.js @@ -0,0 +1,102 @@ +import classNames from 'classnames'; +import React from 'react'; +import PropTypes from 'prop-types'; +import Transition, { + ENTERED, + ENTERING, +} from 'react-transition-group/Transition'; + +const propTypes = { + /** + * Show the component; triggers the fade in or fade out animation + */ + in: PropTypes.bool, + + /** + * Wait until the first "enter" transition to mount the component (add it to the DOM) + */ + mountOnEnter: PropTypes.bool, + + /** + * Unmount the component (remove it from the DOM) when it is faded out + */ + unmountOnExit: PropTypes.bool, + + /** + * Run the fade in animation when the component mounts, if it is initially + * shown + */ + appear: PropTypes.bool, + + /** + * Duration of the fade animation in milliseconds, to ensure that finishing + * callbacks are fired even if the original browser transition end events are + * canceled + */ + timeout: PropTypes.number, + + /** + * Callback fired before the component fades in + */ + onEnter: PropTypes.func, + /** + * Callback fired after the component starts to fade in + */ + onEntering: PropTypes.func, + /** + * Callback fired after the has component faded in + */ + onEntered: PropTypes.func, + /** + * Callback fired before the component fades out + */ + onExit: PropTypes.func, + /** + * Callback fired after the component starts to fade out + */ + onExiting: PropTypes.func, + /** + * Callback fired after the component has faded out + */ + onExited: PropTypes.func, +}; + +const defaultProps = { + in: false, + timeout: 300, + mountOnEnter: false, + unmountOnExit: false, + appear: false, +}; + +const fadeStyles = { + [ENTERING]: 'in', + [ENTERED]: 'in', +}; + +class Fade extends React.Component { + render() { + const { className, children, ...props } = this.props; + + return ( + + {(status, innerProps) => + React.cloneElement(children, { + ...innerProps, + className: classNames( + 'fade', + className, + children.props.className, + fadeStyles[status] + ), + }) + } + + ); + } +} + +Fade.propTypes = propTypes; +Fade.defaultProps = defaultProps; + +export default Fade; diff --git a/platform/ui/src/components/overlayTrigger/Overlay.js b/platform/ui/src/components/overlayTrigger/Overlay.js new file mode 100644 index 00000000000..e824045d53b --- /dev/null +++ b/platform/ui/src/components/overlayTrigger/Overlay.js @@ -0,0 +1,102 @@ +import classNames from 'classnames'; +import React, { cloneElement } from 'react'; +import PropTypes from 'prop-types'; +import { Overlay as BaseOverlay } from 'react-overlays'; +import elementType from 'prop-types-extra/lib/elementType'; +import { withTranslation } from '../../utils/LanguageProvider'; + +import Fade from './Fade'; + +const propTypes = { + /** + * Set the visibility of the Overlay + */ + show: PropTypes.bool, + /** + * Specify whether the overlay should trigger onHide when the user clicks outside the overlay + */ + rootClose: PropTypes.bool, + /** + * A callback invoked by the overlay when it wishes to be hidden. Required if + * `rootClose` is specified. + */ + onHide: PropTypes.func, + + /** + * Use animation + */ + animation: PropTypes.oneOfType([PropTypes.bool, elementType]), + + /** + * Callback fired before the Overlay transitions in + */ + onEnter: PropTypes.func, + + /** + * Callback fired as the Overlay begins to transition in + */ + onEntering: PropTypes.func, + + /** + * Callback fired after the Overlay finishes transitioning in + */ + onEntered: PropTypes.func, + + /** + * Callback fired right before the Overlay transitions out + */ + onExit: PropTypes.func, + + /** + * Callback fired as the Overlay begins to transition out + */ + onExiting: PropTypes.func, + + /** + * Callback fired after the Overlay finishes transitioning out + */ + onExited: PropTypes.func, + + /** + * Sets the direction of the Overlay. + */ + placement: PropTypes.oneOf(['top', 'right', 'bottom', 'left']), +}; + +const defaultProps = { + animation: Fade, + rootClose: false, + show: false, + placement: 'right', +}; + +class Overlay extends React.Component { + render() { + const { animation, children, ...props } = this.props; + + const transition = animation === true ? Fade : animation || null; + + let child; + + if (!transition) { + child = cloneElement(children, { + className: classNames(children.props.className, 'in'), + }); + } else { + child = children; + } + + return ( + + {child} + + ); + } +} + +Overlay.propTypes = propTypes; +Overlay.defaultProps = defaultProps; + +const connectedComponent = withTranslation()(Overlay); +export { connectedComponent as Overlay }; +export default connectedComponent; diff --git a/platform/ui/src/components/overlayTrigger/OverlayTrigger.js b/platform/ui/src/components/overlayTrigger/OverlayTrigger.js new file mode 100644 index 00000000000..b9216fcb363 --- /dev/null +++ b/platform/ui/src/components/overlayTrigger/OverlayTrigger.js @@ -0,0 +1,330 @@ +import contains from 'dom-helpers/query/contains'; +import React, { cloneElement } from 'react'; +import PropTypes from 'prop-types'; +import ReactDOM from 'react-dom'; +import warning from 'warning'; + +import { Overlay } from './Overlay'; + +import createChainedFunction from './createChainedFunction'; + +/** + * Check if value one is inside or equal to the of value + * + * @param {string} one + * @param {string|array} of + * @returns {boolean} + */ +function isOneOf(one, of) { + if (Array.isArray(of)) { + return of.indexOf(one) >= 0; + } + return one === of; +} + +const triggerType = PropTypes.oneOf(['click', 'hover', 'focus']); + +const propTypes = { + /** + * Specify which action or actions trigger Overlay visibility + */ + trigger: PropTypes.oneOfType([triggerType, PropTypes.arrayOf(triggerType)]), + + /** + * A millisecond delay amount to show and hide the Overlay once triggered + */ + delay: PropTypes.number, + /** + * A millisecond delay amount before showing the Overlay once triggered. + */ + delayShow: PropTypes.number, + /** + * A millisecond delay amount before hiding the Overlay once triggered. + */ + delayHide: PropTypes.number, + + // FIXME: This should be `defaultShow`. + /** + * The initial visibility state of the Overlay. For more nuanced visibility + * control, consider using the Overlay component directly. + */ + defaultOverlayShown: PropTypes.bool, + + /** + * An element or text to overlay next to the target. + */ + overlay: PropTypes.node.isRequired, + + /** + * A function to be called once the hide is triggered + */ + handleHide: PropTypes.func, + + /** + * @private + */ + onBlur: PropTypes.func, + /** + * @private + */ + onClick: PropTypes.func, + /** + * @private + */ + onFocus: PropTypes.func, + /** + * @private + */ + onMouseOut: PropTypes.func, + /** + * @private + */ + onMouseOver: PropTypes.func, + + // Overridden props from ``. + /** + * @private + */ + target: PropTypes.oneOf([null]), + /** + * @private + */ + onHide: PropTypes.oneOf([null]), + /** + * @private + */ + show: PropTypes.oneOf([null]), +}; + +const defaultProps = { + defaultOverlayShown: false, + trigger: ['hover', 'focus'], +}; + +class OverlayTrigger extends React.Component { + constructor(props, context) { + super(props, context); + + this.handleToggle = this.handleToggle.bind(this); + this.handleDelayedShow = this.handleDelayedShow.bind(this); + this.handleDelayedHide = this.handleDelayedHide.bind(this); + this.handleHide = createChainedFunction( + this.handleHide.bind(this), + props.handleHide + ); + + this.handleMouseOver = e => + this.handleMouseOverOut(this.handleDelayedShow, e, 'fromElement'); + this.handleMouseOut = e => + this.handleMouseOverOut(this.handleDelayedHide, e, 'toElement'); + + this._mountNode = null; + + this.state = { + show: props.defaultOverlayShown, + }; + } + + componentDidMount() { + this._mountNode = document.createElement('div'); + this.renderOverlay(); + } + + componentDidUpdate() { + this.renderOverlay(); + } + + componentWillUnmount() { + ReactDOM.unmountComponentAtNode(this._mountNode); + this._mountNode = null; + + clearTimeout(this._hoverShowDelay); + clearTimeout(this._hoverHideDelay); + } + + handleDelayedHide() { + if (this._hoverShowDelay != null) { + clearTimeout(this._hoverShowDelay); + this._hoverShowDelay = null; + return; + } + + if (!this.state.show || this._hoverHideDelay != null) { + return; + } + + const delay = + this.props.delayHide != null ? this.props.delayHide : this.props.delay; + + if (!delay) { + this.hide(); + return; + } + + this._hoverHideDelay = setTimeout(() => { + this._hoverHideDelay = null; + this.hide(); + }, delay); + } + + handleDelayedShow() { + if (this._hoverHideDelay != null) { + clearTimeout(this._hoverHideDelay); + this._hoverHideDelay = null; + return; + } + + if (this.state.show || this._hoverShowDelay != null) { + return; + } + + const delay = + this.props.delayShow != null ? this.props.delayShow : this.props.delay; + + if (!delay) { + this.show(); + return; + } + + this._hoverShowDelay = setTimeout(() => { + this._hoverShowDelay = null; + this.show(); + }, delay); + } + + handleHide() { + this.hide(); + } + + // Simple implementation of mouseEnter and mouseLeave. + // React's built version is broken: https://github.com/facebook/react/issues/4251 + // for cases when the trigger is disabled and mouseOut/Over can cause flicker + // moving from one child element to another. + handleMouseOverOut(handler, e, relatedNative) { + const target = e.currentTarget; + const related = e.relatedTarget || e.nativeEvent[relatedNative]; + + if ((!related || related !== target) && !contains(target, related)) { + handler(e); + } + } + + handleToggle() { + if (this.state.show) { + this.hide(); + } else { + this.show(); + } + } + + hide() { + this.setState({ show: false }); + } + + makeOverlay(overlay, props) { + return ( + + {overlay} + + ); + } + + show() { + this.setState({ show: true }); + } + + renderOverlay() { + ReactDOM.unstable_renderSubtreeIntoContainer( + this, + this._overlay, + this._mountNode + ); + } + + render() { + const { + trigger, + overlay, + children, + onBlur, + onClick, + onFocus, + onMouseOut, + onMouseOver, + ...props + } = this.props; + + delete props.delay; + delete props.delayShow; + delete props.delayHide; + delete props.defaultOverlayShown; + + const child = React.Children.only(children); + const childProps = child.props; + const triggerProps = {}; + + if (this.state.show) { + triggerProps['aria-describedby'] = overlay.props.id; + } + + // FIXME: The logic here for passing through handlers on this component is + // inconsistent. We shouldn't be passing any of these props through. + + triggerProps.onClick = createChainedFunction(childProps.onClick, onClick); + + if (isOneOf('click', trigger)) { + triggerProps.onClick = createChainedFunction( + triggerProps.onClick, + this.handleToggle + ); + } + + if (isOneOf('hover', trigger)) { + warning( + !(trigger === 'hover'), + '[react-bootstrap] Specifying only the `"hover"` trigger limits the ' + + 'visibility of the overlay to just mouse users. Consider also ' + + 'including the `"focus"` trigger so that touch and keyboard only ' + + 'users can see the overlay as well.' + ); + + triggerProps.onMouseOver = createChainedFunction( + childProps.onMouseOver, + onMouseOver, + this.handleMouseOver + ); + triggerProps.onMouseOut = createChainedFunction( + childProps.onMouseOut, + onMouseOut, + this.handleMouseOut + ); + } + + if (isOneOf('focus', trigger)) { + triggerProps.onFocus = createChainedFunction( + childProps.onFocus, + onFocus, + this.handleDelayedShow + ); + triggerProps.onBlur = createChainedFunction( + childProps.onBlur, + onBlur, + this.handleDelayedHide + ); + } + + this._overlay = this.makeOverlay(overlay, props); + + return cloneElement(child, triggerProps); + } +} + +OverlayTrigger.propTypes = propTypes; +OverlayTrigger.defaultProps = defaultProps; + +export { OverlayTrigger }; diff --git a/platform/ui/src/components/overlayTrigger/__docs__/OverlayTrigger.mdx b/platform/ui/src/components/overlayTrigger/__docs__/OverlayTrigger.mdx new file mode 100644 index 00000000000..4fc48ee56a6 --- /dev/null +++ b/platform/ui/src/components/overlayTrigger/__docs__/OverlayTrigger.mdx @@ -0,0 +1,84 @@ +--- +name: Overlay Trigger +menu: Components +route: /components/overlay-trigger +--- + +import { Playground, Props } from 'docz' +import { Tooltip } from './../../tooltip' +import { OverlayTrigger } from './../index.js' + +# Overlay Trigger + +## Basic usage + +### On Hover + + + +
    + { + ['right', 'left', 'bottom', 'top'].map((placement) => { + return ( + + + Here I am! + + } + > + + + + ) + }) + } +
    + +
    + +### On Click + + +
    + {['right', 'left', 'bottom', 'top'].map(placement => { + return ( + + Here I am! + + } + > + + + ) + })} +
    +
    + +## API + + diff --git a/platform/ui/src/components/overlayTrigger/createChainedFunction.js b/platform/ui/src/components/overlayTrigger/createChainedFunction.js new file mode 100644 index 00000000000..c5e231bc64c --- /dev/null +++ b/platform/ui/src/components/overlayTrigger/createChainedFunction.js @@ -0,0 +1,31 @@ +/** + * Safe chained function + * + * Will only create a new function if needed, + * otherwise will pass back existing functions or null. + * + * @param {function} functions to chain + * @returns {function|null} + */ +function createChainedFunction(...funcs) { + return funcs + .filter(f => f != null) + .reduce((acc, f) => { + if (typeof f !== 'function') { + throw new Error( + 'Invalid Argument Type, must only provide functions, undefined, or null.' + ); + } + + if (acc === null) { + return f; + } + + return function chainedFunction(...args) { + acc.apply(this, args); + f.apply(this, args); + }; + }, null); +} + +export default createChainedFunction; diff --git a/platform/ui/src/components/overlayTrigger/index.js b/platform/ui/src/components/overlayTrigger/index.js new file mode 100644 index 00000000000..68a4d087412 --- /dev/null +++ b/platform/ui/src/components/overlayTrigger/index.js @@ -0,0 +1,2 @@ +export { Overlay } from './Overlay.js'; +export { OverlayTrigger } from './OverlayTrigger.js'; diff --git a/platform/ui/src/components/quickSwitch/QuickSwitch.js b/platform/ui/src/components/quickSwitch/QuickSwitch.js new file mode 100644 index 00000000000..a29e57438ac --- /dev/null +++ b/platform/ui/src/components/quickSwitch/QuickSwitch.js @@ -0,0 +1,153 @@ +import React, { Component } from 'react'; +import PropTypes from 'prop-types'; + +import { StudiesList } from './StudiesList.js'; +import { ScrollableArea } from './../../ScrollableArea/ScrollableArea.js'; +import { SeriesList } from './SeriesList.js'; + +import './QuickSwitch.styl'; + +export class QuickSwitch extends Component { + static propTypes = { + side: PropTypes.string, + studyListData: PropTypes.array.isRequired, + onSeriesSelected: PropTypes.func.isRequired, + seriesListData: PropTypes.array, + onStudySelected: PropTypes.func, + activeStudyInstanceUid: PropTypes.string, + activeDisplaySetInstanceUid: PropTypes.string, + }; + + constructor(props) { + super(props); + + this.state = { + seriesQuickSwitchOpen: false, + sideClass: this.props.side || '', + activeStudyInstanceUid: this.props.activeStudyInstanceUid, + activeDisplaySetInstanceUid: this.props.activeDisplaySetInstanceUid, + }; + } + + componentDidUpdate(prevProps) { + const props = this.props; + + if (props.activeStudyInstanceUid !== prevProps.activeStudyInstanceUid) { + this.setState({ + activeStudyInstanceUid: props.activeStudyInstanceUid, + }); + } + + if ( + props.activeDisplaySetInstanceUid !== + prevProps.activeDisplaySetInstanceUid + ) { + this.setState({ + activeDisplaySetInstanceUid: props.activeDisplaySetInstanceUid, + }); + } + } + + render() { + const quickSwitchClass = this.state.seriesQuickSwitchOpen + ? 'series-triggered' + : ''; + + return ( +
    +
    +
    Series
    +
    + {this.getSmallListItems()} + + + +
    +
    +
    +
    Study
    +
    + + + +
    +
    +
    + ); + } + + getSeriesItems = () => { + let seriesListData; + + if (this.props.seriesListData) { + seriesListData = this.props.seriesListData; + } else if (this.state.activeStudyInstanceUid) { + const study = this.props.studyListData.find( + study => study.studyInstanceUid === this.state.activeStudyInstanceUid + ); + + seriesListData = study.thumbnails; + } else { + seriesListData = this.props.studyListData[0].thumbnails; + } + + return seriesListData || []; + }; + + getSmallListItems = () => { + const seriesItems = this.getSeriesItems() || []; + return seriesItems.map((seriesData, index) => { + const active = + seriesData.displaySetInstanceUid === + this.state.activeDisplaySetInstanceUid; + return ( +
    + ); + }); + }; + + onStudyClick = studyDataSelected => { + if (this.props.onStudySelected) { + this.props.onStudySelected(studyDataSelected); + } + this.setState({ + activeStudyInstanceUid: studyDataSelected.studyInstanceUid, + seriesQuickSwitchOpen: true, + }); + }; + + onSeriesClick = seriesDataSelected => { + this.setState({ + activeDisplaySetInstanceUid: seriesDataSelected.displaySetInstanceUid, + }); + + this.props.onSeriesSelected(seriesDataSelected); + }; + + showSeriesSwitch = () => { + this.setState({ + seriesQuickSwitchOpen: true, + }); + }; + + hideSeriesSwitch = () => { + this.setState({ + seriesQuickSwitchOpen: false, + }); + }; +} diff --git a/platform/ui/src/components/quickSwitch/QuickSwitch.styl b/platform/ui/src/components/quickSwitch/QuickSwitch.styl new file mode 100644 index 00000000000..b24314b1417 --- /dev/null +++ b/platform/ui/src/components/quickSwitch/QuickSwitch.styl @@ -0,0 +1,209 @@ +.series-quick-switch + position: relative; + + &:before + box-shadow: 0 0 0 5000px rgba(0, 0, 0, 0.8) + transition: opacity 0.3s ease + opacity: 0 + content: '' + + &:hover + z-index: 50 + + &:before + display: table; + opacity: 1 + content: '' + + &:not(.left):not(.right) + left: 50% + transform: translateX(-50%) + + &.left + border-right: 1px solid var(--ui-border-color) + right: 0 + + &.right + left: 0 + + .series-switch + float: right + + .study-switch + float: left + + .study-browser + left: auto + right: 0 + transform-origin: calc(100% - 1em) calc(1em + 17px) + + .series-browser + left: 0 + right: auto + transform-origin: 1em calc(1em + 15px) + + .thumbnails-wrapper + transform-origin: 0% 0% + + .ThumbnailEntry + float: left + + .series-item + float: left + + .title-label + color: var(--text-secondary-color) + font-size: 12px + font-weight: 500 + line-height: 12px + opacity: 1 + padding-bottom: 3px + text-align: center + transition: opacity 0.3s ease + + .series-switch + padding-right: 10px; + + .series-switch, + .study-switch + float: left + position: relative + + .study-switch:hover:after + content: '' + display: block + height: 100px + left: 0 + position: absolute + top: 0 + width: 300px + + .study-browser + left: 0 + padding-top: 60px; + max-height: calc(100vh - 60px); + transform-origin: 1em calc(1em + 17px) + width: 300px + + .study-browser-list + padding: 0 10px + + .series-browser + max-height: 100vh + max-width: 720px + right: 0 + transform-origin: calc(100% - 1em) calc(1em + 15px) + + .thumbnails-wrapper + transition: transform 0.3s ease + transform-origin: 100% 0% + + .ThumbnailEntry + float: right + + .series-details + opacity: 0 + transform: translateY(-100%) + transition: transform 0.3s ease, opacity 0.3s ease + + .scrollable + padding-top: 15px + transition: padding-bottom 0.3s ease + + .study-browser-series { + overflow hidden + } + + .series-browser, + .study-browser + min-height: 120px + opacity: 0 + position: absolute + top: 0 + transform: scale(0) + transition: transform 0.3s ease , opacity 0.3s ease + z-index: 3 + + .series-box, + .study-box + height: 57px + width: 57px + + .study-box + background-color: var(--ui-gray-dark) + border: solid 2px var(--ui-border-color-dark) + border-radius: 11px + + .series-item + background-color: var(--box-background-color) + border-radius: 3px + float: right + height: 15px + margin: 2px + transition: opacity 0.3s ease + width: 15px + + &.count + color: var(--text-primary-color) + background-color: transparent + font-size: 12px + font-weight: 500 + line-height: 17px + text-align: center + + &.active + background-color: var(--active-color) + + &.series-triggered .series-browser, + .series-switch:hover .series-browser, + .study-switch:hover .study-browser + opacity: 1 + transform: scale(1) + + &.series-triggered .series-item, + .series-switch:hover .title-label + opacity: 0 + + &.series-triggered + .thumbnails-wrapper + transform: scale(0.9) translateY(80px) + + .series-browser:not(:hover) + &>.scrollable + padding-bottom: 80px + + &>.scrollNav + opacity: 0 + + .series-switch:hover .series-browser + .thumbnails-wrapper + transform: scale(1) translateY(0) + + .ThumbnailEntry .series-details + opacity: 1 + transform: translateY(0) + transition-delay: 0.3s + + .study-browser-item.active .study-item-box + box-shadow: inset 0 0 0 3px var(--active-color) + +@media screen and (max-width: 1599px) + .series-quick-switch + + .series-box, + .study-box + width: 36px + height: 36px + + .study-box + border-radius: 7px + + .series-item + height: 10px + margin: 1px + width: 10px + + &.count + font-size: 10px + font-weight: 300 + line-height: 10px diff --git a/platform/ui/src/components/quickSwitch/SeriesList.js b/platform/ui/src/components/quickSwitch/SeriesList.js new file mode 100644 index 00000000000..f38d95d63de --- /dev/null +++ b/platform/ui/src/components/quickSwitch/SeriesList.js @@ -0,0 +1,40 @@ +import React, { Component } from 'react'; +import PropTypes from 'prop-types'; + +import { ThumbnailEntry } from './../studyBrowser'; +import './SeriesList.styl'; + +export class SeriesList extends Component { + static propTypes = { + seriesItems: PropTypes.array.isRequired, + onClick: PropTypes.func.isRequired, + activeDisplaySetInstanceUid: PropTypes.string, + }; + + render() { + return ( + +
    +
    {this.getSeriesItems()}
    +
    +
    + ); + } + + getSeriesItems = () => { + return this.props.seriesItems.map((seriesData, index) => { + return ( + this.props.onClick(seriesData)} + /> + ); + }); + }; +} diff --git a/docker/Nginx-Orthanc/volumes/orthanc-db/.githold b/platform/ui/src/components/quickSwitch/SeriesList.styl similarity index 100% rename from docker/Nginx-Orthanc/volumes/orthanc-db/.githold rename to platform/ui/src/components/quickSwitch/SeriesList.styl diff --git a/platform/ui/src/components/quickSwitch/StudiesItem.js b/platform/ui/src/components/quickSwitch/StudiesItem.js new file mode 100644 index 00000000000..c43fe281c01 --- /dev/null +++ b/platform/ui/src/components/quickSwitch/StudiesItem.js @@ -0,0 +1,60 @@ +import React, { Component } from 'react'; +import PropTypes from 'prop-types'; + +import './StudiesItem.styl'; + +export class StudiesItem extends Component { + static propTypes = { + onClick: PropTypes.func.isRequired, + studyData: PropTypes.object.isRequired, + active: PropTypes.bool, + }; + + render() { + const { + studyDate, + studyDescription, + modalities, + studyAvailable, + } = this.props.studyData; + const activeClass = this.props.active ? ' active' : ''; + const hasDescriptionAndDate = studyDate && studyDescription; + return ( +
    +
    +
    +
    + {modalities} +
    +
    +
    + {hasDescriptionAndDate ? ( + +
    {studyDate}
    +
    {studyDescription}
    +
    + ) : ( +
    + {studyAvailable ? ( + N/A + ) : ( + Click to load + )} +
    + )} +
    +
    +
    + ); + } + + getModalitiesStyle = () => { + return {}; + }; +} diff --git a/platform/ui/src/components/quickSwitch/StudiesItem.styl b/platform/ui/src/components/quickSwitch/StudiesItem.styl new file mode 100644 index 00000000000..98c4948441b --- /dev/null +++ b/platform/ui/src/components/quickSwitch/StudiesItem.styl @@ -0,0 +1,133 @@ +$boxHoverBackgroundColor = #14191E +$boxHoverBorderColor = #2d4660 +$boxActiveBorderColor = #131D29 +$boxWidth = 50px +$borderThickness = 2px +$boxBorderRadius = 8px +$nestingMargin = 6px +$spacerX = 7px +$spacerY = 12px + +.studyBrowseItem + margin-bottom: 10px; + position: relative + // required transformation to make inner fixed elements relative to this one + transform: scale(1) + + &.active + .studyItemBox + border-color: var(--active-color) + + .studyModality + color: var(--primary-background-color) + & + &:before + &:after + background-color: var(--active-color) + border-color: $boxActiveBorderColor + + &:not(.active) .studyBrowserSeries + max-height: 0 !important + + .studySeriesContainer + opacity: 0 + transform: translateY(-100%) + + .studyBrowserSeries + overflow: hidden + transition: max-height 0.3s ease + + .studySeriesContainer + opacity: 1 + transition: opacity 0.3s ease, transform 0.3s ease + transform: translateY(0) + transform-origin: 50% 0% + +.studyItemBox + border: 3px solid var(--ui-border-color-dark) + border-radius: 12px + cursor: pointer + padding: $spacerY $spacerX ($spacerY - 1) + position: relative + transition: $sidebarTransition + background-color: $boxHoverBackgroundColor + z-index: 0 + + &:hover + border-color: var(--active-color) + + &.additional + color: var(--text-secondary-color) + + .studyModality + color: var(--primary-background-color) + & + &:before + &:after + background-color: var(--active-color) + + &.additional + color: var(--text-primary-color) + font-size: 16px + font-weight: normal + height: 91px + line-height: 91px + padding: 0 + text-align: center + + .studyText + font-size: 13px + left: ($spacerX * 3) + $boxWidth + ($nestingMargin * 3) + line-height: 14px + position: absolute + right: $spacerX + top: $spacerY + .studyDate + margin-top: 8px + color: var(--text-secondary-color) + .studyDescription + margin-top: 8px + color: var(--text-primary-color) + .studyAvailability + margin-top: 24px + color: var(--text-primary-color) + + .studyModality + color: var(--text-secondary-color) + font-size: 20px + line-height: $boxWidth + margin-left: $nestingMargin * 2 + margin-top: $nestingMargin * 2 + position: relative + + .studyModalityText + height: 100% + overflow: hidden + text-align: center + text-transform: uppercase + + & + &:before + &:after + border: $borderThickness solid var(--primary-background-color) + background-color: var(--box-background-color) + border-radius: $boxBorderRadius + height: $boxWidth + ($borderThickness * 2) + transition($sidebarTransition) + width: $boxWidth + ($borderThickness * 2) + + &:before + &:after + display: block + content: '' + position: absolute + + &:before + top: -($borderThickness + $nestingMargin) + left: -($borderThickness + $nestingMargin) + z-index: -1 + + &:after + top: -($borderThickness + ($nestingMargin * 2)) + left: -($borderThickness + ($nestingMargin * 2)) + z-index: -2 diff --git a/platform/ui/src/components/quickSwitch/StudiesList.js b/platform/ui/src/components/quickSwitch/StudiesList.js new file mode 100644 index 00000000000..414b46944db --- /dev/null +++ b/platform/ui/src/components/quickSwitch/StudiesList.js @@ -0,0 +1,37 @@ +import React, { Component } from 'react'; +import PropTypes from 'prop-types'; + +import { StudiesItem } from './StudiesItem.js'; +import './StudiesList.styl'; + +export class StudiesList extends Component { + static propTypes = { + class: PropTypes.string, + studyListData: PropTypes.array.isRequired, + onClick: PropTypes.func.isRequired, + activeStudyInstanceUid: PropTypes.string, + }; + + render() { + return ( +
    + {this.getBrowserItems()} +
    + ); + } + + getBrowserItems = () => { + return this.props.studyListData.map((studyData, index) => { + return ( + this.props.onClick(studyData)} + /> + ); + }); + }; +} diff --git a/docker/OpenResty-Orthanc-Keycloak/volumes/keycloak-themes/ohif/account/.githold b/platform/ui/src/components/quickSwitch/StudiesList.styl similarity index 100% rename from docker/OpenResty-Orthanc-Keycloak/volumes/keycloak-themes/ohif/account/.githold rename to platform/ui/src/components/quickSwitch/StudiesList.styl diff --git a/platform/ui/src/components/quickSwitch/__docs__/quickSwitch.mdx b/platform/ui/src/components/quickSwitch/__docs__/quickSwitch.mdx new file mode 100644 index 00000000000..c14670d9dd2 --- /dev/null +++ b/platform/ui/src/components/quickSwitch/__docs__/quickSwitch.mdx @@ -0,0 +1,61 @@ +--- +name: Quick Switch +menu: Components +route: /components/quick-switch +--- + +import { Playground, Props } from 'docz' +import { State } from 'react-powerplug' +import { QuickSwitch } from './../index.js' +// +import studies from './studies.js' + +# Quick Switch + +## Basic usage + + + + {({ state, setState }) => ( + { + return !!study.active; + }).thumbnails} + onSeriesSelected={(selectedSeries) => { + const { studyListData } = state; + const selectedId = selectedSeries.displaySetInstanceUid; + + studyListData.forEach(study => { + study.thumbnails.forEach(series => { + series.active = series.displaySetInstanceUid === selectedId; + }) + }); + + setState({ studyListData }); + }} + onStudySelected={(selectedStudy) => { + const { studyListData } = state; + const selectedId = selectedStudy.studyInstanceUid; + + studyListData.forEach(study => { + study.active = study.studyInstanceUid === selectedId; + }); + + setState({ studyListData }); + }} + /> + )} + + + + + +## API + + diff --git a/platform/ui/src/components/quickSwitch/__docs__/studies.js b/platform/ui/src/components/quickSwitch/__docs__/studies.js new file mode 100644 index 00000000000..c4c5250d9ad --- /dev/null +++ b/platform/ui/src/components/quickSwitch/__docs__/studies.js @@ -0,0 +1,76 @@ +export default [ + { + studyInstanceUid: '10001', + studyDescription: 'Anti-PD-1', + modalities: 'CT', + studyDate: '18-nov-2018', + active: false, + thumbnails: [ + { + imageSrc: + 'https://raw.githubusercontent.com/crowds-cure/cancer/master/public/screenshots/Anti-PD-1_Lung.jpg', + seriesDescription: 'Anti-PD-1_Lung', + seriesNumber: '2', + numImageFrames: 512, + displaySetInstanceUid: '10001-1', + stackPercentComplete: 30, + }, + { + imageSrc: + 'https://raw.githubusercontent.com/crowds-cure/cancer/master/public/screenshots/Anti-PD-1_MELANOMA.jpg', + seriesDescription: 'Anti-PD-1_MELANOMA', + seriesNumber: '2', + instanceNumber: '1', + numImageFrames: 256, + displaySetInstanceUid: '10001-2', + stackPercentComplete: 70, + }, + ], + }, + { + studyInstanceUid: '10002', + studyDescription: 'CPTAC', + modalities: 'CT', + studyDate: '16-aug-2017', + active: true, + thumbnails: [ + { + imageSrc: + 'https://raw.githubusercontent.com/crowds-cure/cancer/master/public/screenshots/CPTAC-GBM.jpg', + seriesDescription: 'CPTAC-GBM', + active: true, + seriesNumber: '2', + numImageFrames: 512, + displaySetInstanceUid: '10002-1', + stackPercentComplete: 100, + }, + { + imageSrc: + 'https://raw.githubusercontent.com/crowds-cure/cancer/master/public/screenshots/CPTAC-CM.jpg', + seriesDescription: 'CPTAC-CM', + seriesNumber: '2', + instanceNumber: '1', + displaySetInstanceUid: '10002-2', + numImageFrames: 256, + }, + { + imageSrc: + 'https://raw.githubusercontent.com/crowds-cure/cancer/master/public/screenshots/CPTAC-HNSCC.jpg', + seriesDescription: 'CPTAC-HNSCC', + seriesNumber: '2', + instanceNumber: '1', + displaySetInstanceUid: '10002-3', + numImageFrames: 256, + }, + { + imageSrc: + 'https://raw.githubusercontent.com/crowds-cure/cancer/master/public/screenshots/CPTAC-LSCC.jpg', + seriesDescription: 'CPTAC-LSCC', + seriesNumber: '2', + instanceNumber: '1', + displaySetInstanceUid: '10002-4', + numImageFrames: 256, + }, + ], + }, +]; diff --git a/platform/ui/src/components/quickSwitch/index.js b/platform/ui/src/components/quickSwitch/index.js new file mode 100644 index 00000000000..c92ec79d560 --- /dev/null +++ b/platform/ui/src/components/quickSwitch/index.js @@ -0,0 +1 @@ +export { QuickSwitch } from './QuickSwitch.js'; diff --git a/platform/ui/src/components/radioButtonList/RadioButtonList.css b/platform/ui/src/components/radioButtonList/RadioButtonList.css new file mode 100644 index 00000000000..d7c6305dca8 --- /dev/null +++ b/platform/ui/src/components/radioButtonList/RadioButtonList.css @@ -0,0 +1,62 @@ +.ohif-radio-button-container { + --radio-button-dim: 20px; +} + +.ohif-radio-button-container input { + position: absolute; + opacity: 0; + z-index: 10000; + cursor: pointer; + height: inherit; + width: inherit; +} + +.ohif-radio-button-container { + display: block; + position: relative; + padding-left: 35px; + margin-bottom: 12px; + cursor: pointer; + font-size: 22px; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.ohif-radio-button { + width: var(--radio-button-dim); + height: var(--radio-button-dim); + position: absolute; + top: 25%; + left: 0; + background-color: var(--ui-gray-lighter); + border-radius: 50%; + z-index: 1; +} + +.ohif-radio-button:hover { + background-color: var(--default-color); + border-radius: 100%; +} + +.ohif-radio-button:after { + content: ''; + position: absolute; + display: none; + width: 70%; + height: 70%; +} + +.ohif-radio-button-container .ohif-radio-button.ohif-selected:after { + display: block; + top: 14%; + left: 14%; + border-radius: 50%; + background: white; +} + +.ohif-radio-button-label { + font-size: 12px; + font-weight: 500; +} diff --git a/platform/ui/src/components/radioButtonList/RadioButtonList.js b/platform/ui/src/components/radioButtonList/RadioButtonList.js new file mode 100644 index 00000000000..0bbcf8b5949 --- /dev/null +++ b/platform/ui/src/components/radioButtonList/RadioButtonList.js @@ -0,0 +1,74 @@ +import React, { Component } from 'react'; +import PropTypes from 'prop-types'; +import './RadioButtonList.css'; + +export class RadioButtonList extends Component { + static className = 'RadioButtonList'; + + //TODO: Add fields to propTypes.description? + //These would be label (required), id (required), and checked (optional). + static propTypes = { + description: PropTypes.arrayOf( + PropTypes.shape({ + label: PropTypes.string.isRequired, + id: PropTypes.string.isRequired, + checked: PropTypes.bool, + }) + ), + }; + + constructor(props) { + super(props); + this.state = {}; + + for (let button of props.description) { + if (button.checked) { + this.state.checked = button.id; + } + } + } + + handleChange(e) { + this.setState({ checked: e.target.value }); + } + + render() { + let buttons = this.props.description.map(button => { + let input = ( + { + this.handleChange(e); + }} + value={button.id} + /> + ); + + //needed to style the custom radio check + let inputSpan; + if (this.state.checked === button.id) { + inputSpan = ( + {input} + ); + } else { + inputSpan = {input}; + } + + return ( + + + + ); + }); + + return ( +
    +
    {buttons}
    +
    + ); + } +} diff --git a/platform/ui/src/components/radioButtonList/__docs__/radioButtonList.mdx b/platform/ui/src/components/radioButtonList/__docs__/radioButtonList.mdx new file mode 100644 index 00000000000..2ad2b205d26 --- /dev/null +++ b/platform/ui/src/components/radioButtonList/__docs__/radioButtonList.mdx @@ -0,0 +1,74 @@ +--- +name: Radio Button List +menu: Elements +route: /components/radio-button-list +--- + +import { Playground, Props } from 'docz' +import { State } from 'react-powerplug' +import { RadioButtonList } from './../index' +import NameSpace from '../../../__docs__/NameSpace' + +#Radio Button List + +## Basic usage + + + + {({ state, setState }) => ( + +
    +
    {JSON.stringify(state, null, 2)}
    +
    +
    + +
    +
    + )} +
    +
    + +## API + + + +## Translation Namespace + + \ No newline at end of file diff --git a/platform/ui/src/components/radioButtonList/index.js b/platform/ui/src/components/radioButtonList/index.js new file mode 100644 index 00000000000..f8361a3b074 --- /dev/null +++ b/platform/ui/src/components/radioButtonList/index.js @@ -0,0 +1 @@ +export { RadioButtonList } from './RadioButtonList.js'; diff --git a/platform/ui/src/components/roundedButtonGroup/RoundedButtonGroup.css b/platform/ui/src/components/roundedButtonGroup/RoundedButtonGroup.css new file mode 100644 index 00000000000..fc0e7e5098c --- /dev/null +++ b/platform/ui/src/components/roundedButtonGroup/RoundedButtonGroup.css @@ -0,0 +1,86 @@ +.RoundedButtonGroup { + --height: 25px; + + position: relative; + z-index: 0; +} + +.roundedButtonWrapper { + cursor: pointer; + display: inline-block; + float: left; + margin-left: -2px; + text-decoration: none; + text-align: center; +} + +.roundedButtonWrapper.disabled { + opacity: 0.5; + cursor: not-allowed; +} + +.RoundedButtonGroup .roundedButtonWrapper .roundedButton { + align-items: center; + background-color: var(--ui-gray-dark); + border: 2px solid var(--ui-border-color-dark); + color: var(--text-secondary-color); + display: flex; + font-size: 15px; + font-weight: 500; + justify-content: center; + height: var(--height); + line-height: var(--height); + padding: 0 22px; + position: relative; + text-transform: uppercase; + transition: var(--sidebar-transition); + z-index: 1; +} + +.roundedButtonWrapper + .roundedButton + svg + .roundedButtonWrapper + .roundedButton + span { + margin: 0 2px; +} + +.roundedButtonWrapper .roundedButton i { + line-height: 15px; + font-size: 15px; +} + +.bottomLabel { + color: var(--text-secondary-color); + font-size: 12px; + font-weight: 500; + line-height: 12px; + margin-top: 8px; +} + +.roundedButtonWrapper:first-child { + margin-left: 0; +} + +.RoundedButtonGroup .roundedButtonWrapper:first-child .roundedButton { + border-bottom-left-radius: var(--height); + border-top-left-radius: var(--height); +} + +.RoundedButtonGroup .roundedButtonWrapper:last-child .roundedButton { + border-bottom-right-radius: var(--height); + border-top-right-radius: var(--height); +} + +.roundedButtonWrapper:hover .roundedButton { + background-color: var(--box-background-color); + color: var(--ui-gray-dark); +} + +.roundedButtonWrapper.active .roundedButton { + background-color: var(--active-color); + border-color: var(--ui-border-color-active); + color: var(--ui-gray-dark); + z-index: 2; +} diff --git a/platform/ui/src/components/roundedButtonGroup/RoundedButtonGroup.js b/platform/ui/src/components/roundedButtonGroup/RoundedButtonGroup.js new file mode 100644 index 00000000000..cd861f146bc --- /dev/null +++ b/platform/ui/src/components/roundedButtonGroup/RoundedButtonGroup.js @@ -0,0 +1,84 @@ +import React, { Component } from 'react'; +import PropTypes from 'prop-types'; +import classnames from 'classnames'; +import { Icon } from './../../elements/Icon'; +import './RoundedButtonGroup.css'; + +// TODO: Rename to Toggle? +class RoundedButtonGroup extends Component { + static className = 'RoundedButtonGroup'; + + static propTypes = { + options: PropTypes.arrayOf( + PropTypes.shape({ + value: PropTypes.any, + label: PropTypes.string, + icon: PropTypes.oneOfType([ + PropTypes.string, + PropTypes.shape({ + name: PropTypes.string.isRequired, + }), + ]), + }) + ), + value: PropTypes.string, + onValueChanged: PropTypes.func, + }; + + static defaultProps = { + options: [], + value: null, + }; + + onClickOption = value => { + let newValue = value; + if (this.props.value === value) { + newValue = null; + } + + if (this.props.onValueChanged) { + this.props.onValueChanged(newValue); + } + }; + + render() { + let className = classnames( + RoundedButtonGroup.className, + 'clearfix center-table' + ); + + const buttons = this.props.options.map((option, index) => { + const className = classnames({ + roundedButtonWrapper: true, + noselect: true, + active: this.props.value === option.value, + }); + + const optionText = option.label && {option.label}; + const iconProps = + typeof option.icon === 'string' ? { name: option.icon } : option.icon; + + const bottomLabel = option.bottomLabel && ( +
    {option.bottomLabel}
    + ); + + return ( +
    this.onClickOption(option.value)} + > +
    + {optionText} + {iconProps && } +
    + {bottomLabel} +
    + ); + }); + + return
    {buttons}
    ; + } +} + +export { RoundedButtonGroup }; diff --git a/platform/ui/src/components/roundedButtonGroup/__docs__/roundedButtonGroup.mdx b/platform/ui/src/components/roundedButtonGroup/__docs__/roundedButtonGroup.mdx new file mode 100644 index 00000000000..5d00b32fcef --- /dev/null +++ b/platform/ui/src/components/roundedButtonGroup/__docs__/roundedButtonGroup.mdx @@ -0,0 +1,51 @@ +--- +name: Rounded Button Group +menu: Components +route: /components/rounded-button-group +--- + +import { Playground, Props } from 'docz'; +import { State } from 'react-powerplug'; +import { RoundedButtonGroup } from './../index.js'; + +# Rounded Button Group + +A basic styled toggle switch + +## Basic usage + + + + {({ state, setState }) => ( + +
    +
    value: {JSON.stringify(state.value, null, 2)}
    +
    + setState({ value })} + /> +
    + )} +
    +
    + +## API + + diff --git a/platform/ui/src/components/roundedButtonGroup/index.js b/platform/ui/src/components/roundedButtonGroup/index.js new file mode 100644 index 00000000000..e33e0490c6d --- /dev/null +++ b/platform/ui/src/components/roundedButtonGroup/index.js @@ -0,0 +1 @@ +export { RoundedButtonGroup } from './RoundedButtonGroup.js'; diff --git a/platform/ui/src/components/selectTree/InputRadio.js b/platform/ui/src/components/selectTree/InputRadio.js new file mode 100644 index 00000000000..e4de02a06d9 --- /dev/null +++ b/platform/ui/src/components/selectTree/InputRadio.js @@ -0,0 +1,37 @@ +import { Component } from 'react'; +import React from 'react'; +import PropTypes from 'prop-types'; + +export default class InputRadio extends Component { + static propTypes = { + value: PropTypes.string, + label: PropTypes.string.isRequired, + itemData: PropTypes.object.isRequired, + labelClass: PropTypes.string, + id: PropTypes.string.isRequired, + onSelected: PropTypes.func.isRequired, + }; + + render() { + const labelClass = this.props.labelClass ? this.props.labelClass : ''; + return ( + + ); + } + + onSelected = evt => { + this.props.onSelected(evt, this.props.itemData); + }; +} diff --git a/platform/ui/src/components/selectTree/SelectTree.js b/platform/ui/src/components/selectTree/SelectTree.js new file mode 100644 index 00000000000..708a29e9965 --- /dev/null +++ b/platform/ui/src/components/selectTree/SelectTree.js @@ -0,0 +1,192 @@ +import './SelectTree.styl'; + +import React, { Component } from 'react'; + +import { Icon } from './../../elements/Icon'; +import InputRadio from './InputRadio.js'; +import PropTypes from 'prop-types'; +import SelectTreeBreadcrumb from './SelectTreeBreadcrumb.js'; +import cloneDeep from 'lodash.clonedeep'; + +export class SelectTree extends Component { + static propTypes = { + autoFocus: PropTypes.bool, + searchEnabled: PropTypes.bool, + selectTreeFirstTitle: PropTypes.string, + selectTreeSecondTitle: PropTypes.string, + /** Called when 'componentDidUpdate' is triggered */ + onComponentChange: PropTypes.func, + /** [{ label, value, items[]}] - An array of items than can be expanded to show child items */ + items: PropTypes.array.isRequired, + /** fn(evt, item) - Called when a child item is selected; receives event and selected item */ + onSelected: PropTypes.func.isRequired, + }; + + static defaultProps = { + searchEnabled: true, + autoFocus: true, + selectTreeFirstTitle: 'First Level itens', + items: [], + }; + + constructor(props) { + super(props); + + this.state = { + searchTerm: null, + currentNode: null, + value: null, + }; + } + + render() { + const treeItems = this.getTreeItems(); + + return ( +
    +
    + {this.headerItem()} +
    + {this.state.currentNode && ( + + )} +
    +
    {treeItems}
    +
    +
    +
    +
    + ); + } + + componentDidUpdate = () => { + if (this.props.onComponentChange) { + this.props.onComponentChange(); + } + }; + + isLeafSelected = item => item && !Array.isArray(item.items); + + getLabelClass = item => { + let labelClass = 'treeLeaf'; + if (this.state.searchTerm || Array.isArray(item.items)) { + labelClass = 'treeNode'; + } + return labelClass; + }; + + filterItems() { + const filteredItems = []; + const rawItems = cloneDeep(this.props.items); + rawItems.forEach(item => { + if (Array.isArray(item.items)) { + item.items.forEach(item => { + const label = item.label.toLowerCase(); + const searchTerm = this.state.searchTerm.toLowerCase(); + if (label.indexOf(searchTerm) !== -1) { + filteredItems.push(item); + } + }); + } else { + const label = item.label.toLowerCase(); + const searchTerm = this.state.searchTerm.toLowerCase(); + if (label.indexOf(searchTerm) !== -1) { + filteredItems.push(item); + } + } + }); + return filteredItems; + } + + getTreeItems() { + const storageKey = 'SelectTree'; + let treeItems; + + if (this.state.searchTerm) { + treeItems = this.filterItems(); + } else if (this.state.currentNode) { + treeItems = cloneDeep(this.state.currentNode.items); + } else { + treeItems = cloneDeep(this.props.items); + } + + return treeItems.map((item, index) => { + let itemKey = index; + if (this.state.currentNode) { + itemKey += `_${this.state.currentNode.value}`; + } + return ( + + ); + }); + } + + headerItem = () => { + let title = this.props.selectTreeFirstTitle; + if (this.state.currentNode && this.props.selectTreeSecondTitle) { + title = this.props.selectTreeSecondTitle; + } + + return ( +
    +
    {title}
    + {this.props.searchEnabled && ( +
    +
    + +
    + +
    + )} +
    + ); + }; + + searchLocations = evt => { + this.setState({ + currentNode: null, + searchTerm: evt.currentTarget.value, + }); + }; + + onSelected = (event, item) => { + if (this.isLeafSelected(item)) { + this.setState({ + searchTerm: null, + currentNode: null, + value: null, + }); + } else { + this.setState({ + currentNode: item, + }); + } + return this.props.onSelected(event, item); + }; + + onBreadcrumbSelected = () => { + this.setState({ + currentNode: null, + }); + }; +} diff --git a/platform/ui/src/components/selectTree/SelectTree.styl b/platform/ui/src/components/selectTree/SelectTree.styl new file mode 100644 index 00000000000..adb1ddba56a --- /dev/null +++ b/platform/ui/src/components/selectTree/SelectTree.styl @@ -0,0 +1,108 @@ +@import './../../design/styles/common/global.styl' + +.selectTreeRoot + text-align: initial; + width: 320px; + max-height: inherit; + font-size: 14px; + line-height: 26px; + + .treeContent + max-height: inherit; + overflow: hidden; + border: 1px solid #c4c4c4; + border-radius: 5px; + background-color: #ffffff; + display: flex; + flex-direction: column; + + .treeHeader + background-color: #c0c0c0; + border-bottom: 1px solid #c4c4c4; + color: #303030; + padding: 5px; + text-align: center; + + .wrapperText + font-weight: bold; + padding-bottom: 2px; + + .wrapperSearch + width: 100%; + + .searchIcon + position: absolute; + width: 18px; + height: 15px; + margin: 7px 10px 13px 10px; + color: #a3a3a3; + + .searchInput + width: 100%; + padding: 6px 12px 6px 35px; + background-color: #fff; + background-image: none; + border: 1px solid #9b9b9b; + border-radius: 4px; + font-size: 14px; + line-height: 1.42857143; + color: #555; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; + + &:focus + outline: 0; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), + 0 0 8px rgba(102, 175, 233, 0.6); + + .wrapperText + white-space: nowrap; + cursor: pointer; + + .selectTreeBreadcrumb + .wrapperLabel + cursor: pointer; + padding: 0 12px; + height: 41px; + width: 100%; + line-height: 41px; + + .backIcon + padding-right: 10px; + + svg + width: 14px; + height: 14px; + position: relative; + top: 2px; + color: #457fb0; + + .treeOptions + overflow: auto; + height: 100%; + + .selectTreeBreadcrumb + .treeInputsWrapper .treeInputs .treeLeaf + border: none; + height: initial; + line-height: 26px; + + & > .treeInputsWrapper > .treeInputs .treeLeaf + border-bottom: 1px solid #ccc; + height: 41px; + line-height: 41px; + + .treeNode, .treeLeaf + cursor: pointer; + display: block; + overflow: hidden; + font-weight: normal; + box-shadow: 0 0 0 200px transparent; + padding: 0 12px; + + .treeNode + border-bottom: 1px solid #ccc; + height: 41px; + line-height: 41px; + + .radioLabel .radioInput + display: none; diff --git a/platform/ui/src/components/selectTree/SelectTreeBreadcrumb.js b/platform/ui/src/components/selectTree/SelectTreeBreadcrumb.js new file mode 100644 index 00000000000..1bcb5ea20f8 --- /dev/null +++ b/platform/ui/src/components/selectTree/SelectTreeBreadcrumb.js @@ -0,0 +1,37 @@ +import { Component } from 'react'; +import React from 'react'; +import PropTypes from 'prop-types'; +import { Icon } from './../../elements/Icon'; + +export default class SelectTreeBreadcrumb extends Component { + static propTypes = { + label: PropTypes.string.isRequired, + value: PropTypes.string.isRequired, + onSelected: PropTypes.func.isRequired, + }; + + render() { + return ( +
    + +
    + ); + } +} diff --git a/platform/ui/src/components/selectTree/__docs__/selectTree.mdx b/platform/ui/src/components/selectTree/__docs__/selectTree.mdx new file mode 100644 index 00000000000..68ee9882ed7 --- /dev/null +++ b/platform/ui/src/components/selectTree/__docs__/selectTree.mdx @@ -0,0 +1,42 @@ +--- +name: Select Tree +menu: Components +route: /components/select-tree +--- + +import { Playground, Props } from 'docz' +import { State } from 'react-powerplug' +import { SelectTree } from './../index.js' + +import selectTreeItems from './selectTreeItems.js' + +# SelectTree + +## Basic usage + + + + {({ state, setState }) => ( + +
    +                {JSON.stringify(state.items, null, 2)}
    +            
    + + setState({ itemLabelSelected: item.label }) } + selectTreeFirstTitle="Select Tree Example Header" + autoFocus={false} + /> +
    + )} + +
    + +
    + +## API + + diff --git a/platform/ui/src/components/selectTree/__docs__/selectTreeItems.js b/platform/ui/src/components/selectTree/__docs__/selectTreeItems.js new file mode 100644 index 00000000000..0c7466966a4 --- /dev/null +++ b/platform/ui/src/components/selectTree/__docs__/selectTreeItems.js @@ -0,0 +1,30 @@ +export default [ + { + label: 'A', + value: 'A', + items: [ + { + label: 'Abdominal Wall', + value: 'AbdominalWall', + }, + { + label: 'Adrenal Left', + value: 'AdrenalLeft', + }, + ], + }, + { + label: 'B', + value: 'B', + items: [ + { + label: 'Brain', + value: 'Brain', + }, + { + label: 'Breast', + value: 'Breast', + }, + ], + }, +]; diff --git a/platform/ui/src/components/selectTree/index.js b/platform/ui/src/components/selectTree/index.js new file mode 100644 index 00000000000..58dad49978c --- /dev/null +++ b/platform/ui/src/components/selectTree/index.js @@ -0,0 +1 @@ +export { SelectTree } from './SelectTree'; diff --git a/platform/ui/src/components/simpleDialog/SimpleDialog.js b/platform/ui/src/components/simpleDialog/SimpleDialog.js new file mode 100644 index 00000000000..2c8ce887d27 --- /dev/null +++ b/platform/ui/src/components/simpleDialog/SimpleDialog.js @@ -0,0 +1,69 @@ +import React, { Component } from 'react'; +import PropTypes from 'prop-types'; + +import './SimpleDialog.styl'; + +class SimpleDialog extends Component { + static propTypes = { + children: PropTypes.node, + componentRef: PropTypes.any, + componentStyle: PropTypes.object, + rootClass: PropTypes.string, + isOpen: PropTypes.bool, + headerTitle: PropTypes.string.isRequired, + onClose: PropTypes.func.isRequired, + onConfirm: PropTypes.func.isRequired, + }; + + static defaultProps = { + isOpen: true, + componentStyle: {}, + rootClass: '', + }; + + render() { + return ( + + {this.props.isOpen && ( +
    +
    +
    + + x + +

    {this.props.headerTitle}

    +
    +
    {this.props.children}
    +
    + + +
    +
    +
    + )} +
    + ); + } + + onClose = event => { + event.preventDefault(); + event.stopPropagation(); + this.props.onClose(); + }; + + onConfirm = event => { + event.preventDefault(); + event.stopPropagation(); + this.props.onConfirm(); + }; +} + +export { SimpleDialog }; diff --git a/platform/ui/src/components/simpleDialog/SimpleDialog.styl b/platform/ui/src/components/simpleDialog/SimpleDialog.styl new file mode 100644 index 00000000000..0b014702249 --- /dev/null +++ b/platform/ui/src/components/simpleDialog/SimpleDialog.styl @@ -0,0 +1,108 @@ +@import './../../design/styles/common/button.styl' +@import './../../design/styles/common/global.styl' + +.simpleDialog + position: fixed; + top: 0px; + left: 0px; + z-index: 1000; + border: 0; + border-radius: 6px; + background-color: var(--ui-gray-darker); + + .header + border-bottom: 3px solid var(--primary-background-color); + padding: 19px 22px 17px; + position: relative; + + .title + font-size: 20px; + font-weight: 600; + line-height: 24px; + padding-right: 40px; + color: var(--text-secondary-color); + margin: 0; + + .closeBtn + -webkit-transform: translateY(-50%); + color: var(--text-secondary-color); + height: 20px; + opacity: 1; + overflow: hidden; + padding: 2px; + position: absolute; + right: 21px; + text-align: center; + text-shadow: none; + top: 50%; + transform: translateY(-50%); + transition: color 0.3s ease; + width: 20px; + + .closeIcon + color: transparent; + display: block; + font-size: 0; + height: 100%; + line-height: 0; + overflow: hidden; + position: relative; + width: 100%; + + &:after, &:before + content: ' '; + display: block; + height: 2px; + transition: background-color 0.3s ease; + width: 19px; + background-color: var(--text-secondary-color); + + &:before + left: 1px; + position: absolute; + top: 1px; + -webkit-transform: rotate(45deg); + transform: rotate(45deg); + -webkit-transform-origin: 1px 50%; + transform-origin: 1px 50%; + + &:after + right: 1px; + position: absolute; + top: 1px; + -webkit-transform: rotate(-45deg); + transform: rotate(-45deg); + -webkit-transform-origin: calc(100% - 1px) 50%; + transform-origin: calc(100% - 1px) 50%; + + .content + padding: 16px 22px 25px; + position: relative; + color: var(--text-primary-color); + + .simpleDialogSelect, .simpleDialogInput + background-color: var(--input-background-color); + color: var(--text-primary-color); + border: 0; + border-radius: 2px; + font-size: 14px; + height: 30px; + width: 100%; + line-height: 16px; + padding: 8px 9px 6px; + margin-top: 10px; + display: block; + + .simpleDialogLabelFor + font-size: 14px; + font-weight: 700; + line-height: 16px; + margin: 10px 0 0 0; + color: var(--text-primary-color); + + .footer + padding: 15px; + text-align: right; + + .btn + margin-left: 5px; diff --git a/platform/ui/src/components/simpleDialog/__docs__/simpleDialog.mdx b/platform/ui/src/components/simpleDialog/__docs__/simpleDialog.mdx new file mode 100644 index 00000000000..764074b1004 --- /dev/null +++ b/platform/ui/src/components/simpleDialog/__docs__/simpleDialog.mdx @@ -0,0 +1,83 @@ +--- +name: Simple Dialog +menu: Components +route: /components/simple-dialog +--- + +import { Playground, Props } from 'docz' +import { State } from 'react-powerplug' +import { SimpleDialog } from './../index.js' + +# Simple Dialog + +Its similar to a modal but we can pass its style as props and manipulate it as +we want. Initially used to display tool data changes in our Viewport. + +## Basic usage + + + + {({ state, setState }) => ( + +
    {JSON.stringify(state, null, 2) }
    + + {/* Toggle Dialog */} + + + setState({ isDialogOpen: false })} + onConfirm={() => setState({ + isDialogOpen: false, + // If you don't want to update external state until complete, + // This is where you could grab current field values and update parent + // With setState + // + // inputValue: this.input.value, + // selectValue: this.select.value + })} + componentStyle={state.dialogStyle} + onValueChanged={(value) => setState({value}) } + > + + setState({inputValue: e.target.value})} + /> + + + +
    + )} +
    + +
    + +## API + + diff --git a/platform/ui/src/components/simpleDialog/index.js b/platform/ui/src/components/simpleDialog/index.js new file mode 100644 index 00000000000..df83278659b --- /dev/null +++ b/platform/ui/src/components/simpleDialog/index.js @@ -0,0 +1 @@ +export { SimpleDialog } from './SimpleDialog.js'; diff --git a/platform/ui/src/components/studyBrowser/DragPreview.js b/platform/ui/src/components/studyBrowser/DragPreview.js new file mode 100644 index 00000000000..0334e34832f --- /dev/null +++ b/platform/ui/src/components/studyBrowser/DragPreview.js @@ -0,0 +1,85 @@ +import React, { PureComponent, memo } from 'react'; +import { DragLayer } from 'react-dnd'; +import PropTypes from 'prop-types'; +import { ThumbnailEntry } from './ThumbnailEntry'; +import './DragPreview.styl'; + +let subscribedToOffsetChange = false; +let dragPreviewRef = null; + +const collector = monitor => { + if (!subscribedToOffsetChange) { + monitor.subscribeToOffsetChange(onOffsetChange(monitor)); + subscribedToOffsetChange = true; + } + + if (dragPreviewRef) { + const offset = + monitor.getSourceClientOffset() || monitor.getInitialSourceClientOffset(); + + if (offset) { + const transform = `translate(${offset.x}px, ${offset.y}px)`; + dragPreviewRef.style['transform'] = transform; + dragPreviewRef.style['-webkit-transform'] = transform; + } + } + + const item = monitor.getItem(); + let newItem = {}; + if (item) { + newItem = { + active: item.active, + altImageText: item.altImageText, + id: item.id, + imageSrc: item.imageSrc, + imageId: item.imageId, + instanceNumber: item.instanceNumber, + error: item.error, + numImageFrames: item.numImageFrames, + seriesDescription: item.seriesDescription, + seriesNumber: item.seriesNumber, + stackPercentComplete: item.stackPercentComplete, + }; + } + + return { + ...newItem, + isDragging: monitor.isDragging(), + }; +}; + +const onOffsetChange = monitor => () => { + if (!dragPreviewRef) return; + + const offset = + monitor.getSourceClientOffset() || monitor.getInitialSourceClientOffset(); + if (!offset) return; + + const transform = `translate(${offset.x}px, ${offset.y}px)`; + dragPreviewRef.style['transform'] = transform; + dragPreviewRef.style['-webkit-transform'] = transform; +}; + +const updateRef = ref => { + dragPreviewRef = ref; +}; + +class DragPreview extends PureComponent { + render() { + const { isDragging } = this.props; + if (!isDragging) return null; + return ( +
    +
    + +
    +
    + ); + } +} + +DragPreview.propTypes = { + isDragging: PropTypes.bool, +}; + +export default DragLayer(collector)(memo(DragPreview)); diff --git a/platform/ui/src/components/studyBrowser/DragPreview.styl b/platform/ui/src/components/studyBrowser/DragPreview.styl new file mode 100644 index 00000000000..4866733d4bb --- /dev/null +++ b/platform/ui/src/components/studyBrowser/DragPreview.styl @@ -0,0 +1,14 @@ +.DragPreview + + .source-preview { + border-radius: 5px; + background-color: rgba(0, 0, 0, 0.5); + position: fixed; + opacity: 0.5; + z-index: 9999; + left: 0; + top: 0; + transition: none; + pointer-events: none; + -webkit-touch-callout: none; + } diff --git a/platform/ui/src/components/studyBrowser/ExampleDropTarget.css b/platform/ui/src/components/studyBrowser/ExampleDropTarget.css new file mode 100644 index 00000000000..3d5fc34c6d6 --- /dev/null +++ b/platform/ui/src/components/studyBrowser/ExampleDropTarget.css @@ -0,0 +1,30 @@ +.ExampleDropTarget { + display: flex; + justify-content: center; + flex-direction: column; + + min-height: 100px; + + border: 2px dashed black; + padding: 20px; + transition: 0.2s all ease; +} + +.ExampleDropTarget h4, +.ExampleDropTarger p { + text-align: center; + word-break: break-word; +} + +.ExampleDropTarget.can-drop { + border: 2px dashed #20a5d6; + background-color: #fafafa; + color: black; +} + +.ExampleDropTarget.hovered { + border: 2px dashed #20a5d6; + background-color: black; + color: #91b9cd; + cursor: copy; +} diff --git a/platform/ui/src/components/studyBrowser/ExampleDropTarget.js b/platform/ui/src/components/studyBrowser/ExampleDropTarget.js new file mode 100644 index 00000000000..a8ce6327fb9 --- /dev/null +++ b/platform/ui/src/components/studyBrowser/ExampleDropTarget.js @@ -0,0 +1,84 @@ +import React, { Component } from 'react'; +import { DropTarget } from 'react-dnd'; +import PropTypes from 'prop-types'; +import './ExampleDropTarget.css'; + +// Drag sources and drop targets only interact +// if they have the same string type. +const Types = { + THUMBNAIL: 'thumbnail', +}; + +const divTarget = { + drop(props, monitor, component) { + // Note: For this example we use setState, but in + // OHIF we will update the redux store instead + const item = monitor.getItem(); + + component.setState({ + item: { + id: item.id, + seriesDescription: item.seriesDescription, + }, + }); + return { id: 'ExampleDropTarget' }; + }, +}; + +// TODO: Find out why we can't move this into the Example app instead. +// It looks like the context isn't properly shared. +class CustomDropTarget extends Component { + static className = 'ExampleDropTarget'; + + state = { + item: null, + }; + + static defaultProps = { + isOver: false, + }; + + static propTypes = { + connectDropTarget: PropTypes.func.isRequired, + canDrop: PropTypes.bool.isRequired, + isOver: PropTypes.bool.isRequired, + }; + + render() { + const { canDrop, isOver, connectDropTarget } = this.props; + const isActive = canDrop && isOver; + + let className = ExampleDropTarget.className; + + if (isActive) { + className += ' hovered'; + } else if (canDrop) { + className += ' can-drop'; + } + + return connectDropTarget( +
    +

    + {isActive + ? 'Release to drop' + : 'Drag / Drop something from the Study Browser here'} +

    +

    + {this.state.item && JSON.stringify(this.state.item)} +

    +
    + ); + } +} + +const collect = (connect, monitor) => ({ + connectDropTarget: connect.dropTarget(), + isOver: monitor.isOver(), + canDrop: monitor.canDrop(), +}); + +const ExampleDropTarget = DropTarget(Types.THUMBNAIL, divTarget, collect)( + CustomDropTarget +); + +export { ExampleDropTarget }; diff --git a/platform/ui/src/components/studyBrowser/ImageThumbnail.js b/platform/ui/src/components/studyBrowser/ImageThumbnail.js new file mode 100644 index 00000000000..95a5e34a81f --- /dev/null +++ b/platform/ui/src/components/studyBrowser/ImageThumbnail.js @@ -0,0 +1,136 @@ +import './ImageThumbnail.styl'; + +import React, { PureComponent } from 'react'; + +import PropTypes from 'prop-types'; +import ViewportErrorIndicator from '../../viewer/ViewportErrorIndicator'; +import ViewportLoadingIndicator from '../../viewer/ViewportLoadingIndicator'; + +// TODO: How should we have this component depend on Cornerstone? +// - Passed in as a prop? +// - Set as external dependency? +// - Pass in the entire load and render function as a prop? +//import cornerstone from 'cornerstone-core'; + +/** + * Asynchronous wrapper around Cornerstone's renderToCanvas method. + * + * @param {HTMLElement} canvasElement An HTML element + * @param {Image} image A Cornerstone Image + * + * @return {Promise} A promise tracking the progress of the rendering. Resolves empty. + */ +function renderAsync(canvasElement, image) { + return new Promise((resolve, reject) => { + try { + cornerstone.renderToCanvas(canvasElement, image); + resolve(); + } catch (error) { + reject(error); + } + }); +} + +export default class ImageThumbnail extends PureComponent { + static propTypes = { + imageSrc: PropTypes.string, + imageId: PropTypes.string, + error: PropTypes.bool.isRequired, + width: PropTypes.number.isRequired, + height: PropTypes.number.isRequired, + stackPercentComplete: PropTypes.number.isRequired, + }; + + static defaultProps = { + error: false, + stackPercentComplete: 0, + width: 217, + height: 123, + }; + + constructor(props) { + super(props); + + this.canvas = React.createRef(); + + const renderIntoCanvas = this.props.imageId && !this.props.imageSrc; + + this.state = { + loading: renderIntoCanvas, + }; + } + + componentDidMount() { + const renderIntoCanvas = this.props.imageId && !this.props.imageSrc; + + if (renderIntoCanvas) { + const { imageId } = this.props; + const canvas = this.canvas.current; + + cornerstone.loadAndCacheImage(imageId).then( + image => { + renderAsync(canvas, image).then( + () => { + this.setState({ + loading: false, + }); + }, + error => { + // TODO: Set state? + throw new Error(error); + } + ); + }, + error => { + // TODO: Set state? + throw new Error(error); + } + ); + } + } + + render() { + let loadingOrError; + if (this.props.error) { + loadingOrError = ; + } else if (this.state.loading) { + loadingOrError = ; + } + + const showStackLoadingProgressBar = + this.props.stackPercentComplete !== undefined; + + const renderIntoCanvas = this.props.imageId && !this.props.imageSrc; + + return ( +
    +
    + {renderIntoCanvas ? ( + + ) : ( + {''} + )} +
    + {loadingOrError} + {showStackLoadingProgressBar && ( +
    +
    +
    + )} +
    + ); + } +} diff --git a/platform/ui/src/components/studyBrowser/ImageThumbnail.styl b/platform/ui/src/components/studyBrowser/ImageThumbnail.styl new file mode 100644 index 00000000000..606ffb9d199 --- /dev/null +++ b/platform/ui/src/components/studyBrowser/ImageThumbnail.styl @@ -0,0 +1,70 @@ +:root { + --text-secondary-color: #91B9CD; + --active-color: #20A5D6; + --primary-background-color: black; + --ui-border-color-dark: #3C5D80 + --sidebar-transition: all 0.3s ease; +} + +.ThumbnailEntry.active .ImageThumbnail + border-color: var(--active-color); + box-shadow: none + transition: var(--sidebar-transition); + +.ImageThumbnail + background-color: var(--primary-background-color); + box-shadow: inset 0 0 0 1px var(--ui-border-color-dark); + border: 5px solid transparent + border-radius: 12px + height: 135px + margin: 0 auto + padding 5px + position: relative + transition: var(--sidebar-transition); + width: 217px + -moz-background-clip: padding + -webkit-background-clip: padding + background-clip: padding-box + +.image-thumbnail-canvas + height: 100% + overflow: hidden + display: flex + justify-content: center + + img + -webkit-user-drag: none + pointer-events: none + + +.thumbnailLoadingIndicator + display: none + pointer-events: none + color: var(--text-secondary-color); + height: 20px + width: 100% + top: 0 + left: 0 + right: 0 + bottom: 0 + margin: auto + position: absolute + + &.d-block + display: block; + + p + text-align: center + font-size: 10pt + +.image-thumbnail-progress-bar + position: relative + width: 100% + height: 3px + top: -5px + + .image-thumbnail-progress-bar-inner + height: 100% + width: 0 + border-radius: 5px + background-color: var(--active-color); diff --git a/platform/ui/src/components/studyBrowser/StudyBrowser.js b/platform/ui/src/components/studyBrowser/StudyBrowser.js new file mode 100644 index 00000000000..59cda8c1741 --- /dev/null +++ b/platform/ui/src/components/studyBrowser/StudyBrowser.js @@ -0,0 +1,62 @@ +import React, { Component } from 'react'; +import PropTypes from 'prop-types'; +import { ThumbnailEntry } from './ThumbnailEntry'; +import ThumbnailEntryDragSource from './ThumbnailEntryDragSource.js'; +import './StudyBrowser.styl'; + +class StudyBrowser extends Component { + static defaultProps = { + studies: [], + supportsDragAndDrop: true, + }; + + static propTypes = { + studies: PropTypes.array.isRequired, + supportsDragAndDrop: PropTypes.bool.isRequired, + onThumbnailClick: PropTypes.func, + onThumbnailDoubleClick: PropTypes.func, + }; + + render() { + const studies = this.props.studies; + + const thumbnails = studies.map((study, studyIndex) => { + return study.thumbnails.map((thumb, thumbIndex) => { + if (this.props.supportsDragAndDrop) { + return ( + + ); + } else { + return ( +
    + +
    + ); + } + }); + }); + + const components = thumbnails.flat(); + return ( +
    +
    {components}
    +
    + ); + } +} + +export { StudyBrowser }; diff --git a/platform/ui/src/components/studyBrowser/StudyBrowser.styl b/platform/ui/src/components/studyBrowser/StudyBrowser.styl new file mode 100644 index 00000000000..7fe1a0f6c4a --- /dev/null +++ b/platform/ui/src/components/studyBrowser/StudyBrowser.styl @@ -0,0 +1,40 @@ +.StudyBrowser + float: left + height: 100% + width: 100% + overflow: hidden + background-color: black + padding-bottom: 20px + padding-top: 10px + + .scrollable-study-thumbnails + height: 100% + overflow-y: auto + overflow-x: hidden + padding-bottom: 50px + padding-right: 16px + padding-left: 4px + margin-right: -16px + + display: flex; + flex-direction: column; + + &::-webkit-scrollbar + display: none + + .ThumbnailEntryContainer + margin: 0 auto; + padding-bottom: 1.5rem; + + .noselect + -moz-user-select: none; /* Firefox */ + -ms-user-select: none; /* Internet Explorer */ + -khtml-user-select: none; /* KHTML browsers (e.g. Konqueror) */ + -webkit-user-select: none; /* Chrome, Safari, and Opera */ + -webkit-touch-callout: none; /* Disable Android and iOS callouts*/ + + +.draggable + cursor: copy + cursor: -webkit-grab + cursor: -moz-grab diff --git a/platform/ui/src/components/studyBrowser/ThumbnailEntry.js b/platform/ui/src/components/studyBrowser/ThumbnailEntry.js new file mode 100644 index 00000000000..8756dc542ec --- /dev/null +++ b/platform/ui/src/components/studyBrowser/ThumbnailEntry.js @@ -0,0 +1,113 @@ +import React, { Component } from 'react'; +import PropTypes from 'prop-types'; +import ImageThumbnail from './ImageThumbnail'; +import './ThumbnailEntry.styl'; +import classnames from 'classnames'; + +class ThumbnailEntry extends Component { + static defaultProps = { + active: false, + error: false, + stackPercentComplete: 0, + }; + + static propTypes = { + id: PropTypes.string.isRequired, + imageSrc: PropTypes.string, + imageId: PropTypes.string, + error: PropTypes.bool.isRequired, + active: PropTypes.bool.isRequired, + stackPercentComplete: PropTypes.number, + /** + altImageText will be used when no imageId or imageSrc is provided. + It will be displayed inside the
    . This is useful when it is difficult + to make a preview for a type of DICOM series (e.g. DICOM-SR) + */ + altImageText: PropTypes.string, + seriesDescription: PropTypes.string, + seriesNumber: PropTypes.oneOfType([PropTypes.string, PropTypes.number]), + instanceNumber: PropTypes.oneOfType([PropTypes.string, PropTypes.number]), + numImageFrames: PropTypes.number, + onDoubleClick: PropTypes.func, + onClick: PropTypes.func, + }; + + render() { + const hasInstanceNumber = this.props.instanceNumber !== undefined; + + let className = classnames('ThumbnailEntry noselect', { + active: this.props.active, + }); + const infoOnly = false; + + let contents = null; + if (this.props.imageSrc || this.props.imageId) { + contents = ( +
    + +
    + ); + } else if (this.props.altImageText) { + contents = ( +
    +

    {this.props.altImageText}

    +
    + ); + } + + return ( +
    + {contents} +
    +
    + {this.props.seriesDescription} +
    +
    +
    +
    S:
    +
    {this.props.seriesNumber}
    +
    + {hasInstanceNumber && ( +
    +
    I:
    +
    {this.props.instanceNumber}
    +
    + )} +
    +
    +
    +
    +
    {this.props.numImageFrames}
    +
    +
    +
    +
    + ); + } + + onClick = () => { + if (this.props.onClick) { + this.props.onClick(); + } + }; + + onDoubleClick = () => { + if (this.props.onDoubleClick) { + this.props.onDoubleClick(); + } + }; +} + +export { ThumbnailEntry }; diff --git a/platform/ui/src/components/studyBrowser/ThumbnailEntry.styl b/platform/ui/src/components/studyBrowser/ThumbnailEntry.styl new file mode 100644 index 00000000000..d51a035a7da --- /dev/null +++ b/platform/ui/src/components/studyBrowser/ThumbnailEntry.styl @@ -0,0 +1,127 @@ +@import './../../design/styles/common/global.styl' + +:root { + --series-count-background-color: #678696; +} + +.ThumbnailEntry + cursor: pointer + display: table + + .p-x-1 + padding: 0 1rem + + .alt-image-text + align-items: center; + justify-content: center; + background-color: var(--primary-background-color); + box-shadow: inset 0 0 0 1px var(--ui-border-color-dark); + border: 5px solid transparent; + border-radius: 12px; + height: 135px; + margin: 0 auto; + padding: 5px; + position: relative; + transition: var(--sidebar-transition); + width: 217px; + display: flex; + + h1 + text-align: center + color: var(--text-primary-color); + + .series-details + display: flex; + flex-direction: row; + color: var(--text-primary-color); + font-size: 14px + line-height: 1.3em + margin-top: 5px + margin-left: 1rem + margin-right: 0.5rem + max-width: 217px + min-height: 36px + position: relative + word-wrap: break-word + + .series-description + flex-grow: 1 + + &.info-only + .series-description + display: none + + .series-information + display: flex + flex-grow: 1 + float: none + max-width: none + padding-right: 0 + + .item + flex: 1 + text-align: center + + .icon, .value + display: inline + float: none + line-height: 25px + + .value + margin-left: 0 + width: auto + + .series-information + padding-right: 4px + max-width: 50px + + .item-frames .icon + height: 18px + + .value + color: var(--text-secondary-color); + display: inline-block + float: right + font-size: 12px + margin-left: 4px + overflow: hidden + text-overflow: ellipsis + white-space: nowrap + width: calc(100% - 15px) + + .icon + color: var(--active-color); + display: inline-block + float: left + font-size: 10px + font-weight: 900 + text-align: right + width: 11px + + div + background-color: var(--series-count-background-color); + margin-top: 6px + position: relative + + &:after + background-color: var(--active-color); + box-shadow: 1px 1px rgba(0, 0, 0, .115) + left: -4px + position: absolute + top: -4px + + & + &:after + border: 0px solid var(--series-count-background-color) + content: '' + display: inline-block + height: 11px + width: 11px + +.image-thumbnail-clone + z-index: 100000 + pointer-events: none + + &:hover + border-color: var(--hover-color); + box-shadow: none diff --git a/platform/ui/src/components/studyBrowser/ThumbnailEntryDragSource.js b/platform/ui/src/components/studyBrowser/ThumbnailEntryDragSource.js new file mode 100644 index 00000000000..35146a275d8 --- /dev/null +++ b/platform/ui/src/components/studyBrowser/ThumbnailEntryDragSource.js @@ -0,0 +1,64 @@ +import React, { Component } from 'react'; +import PropTypes from 'prop-types'; +import { DragSource } from 'react-dnd'; +import DragPreview from './DragPreview'; +import { ThumbnailEntry } from './ThumbnailEntry.js'; + +// Drag sources and drop targets only interact +// if they have the same string type. +const Types = { + THUMBNAIL: 'thumbnail', +}; + +const thumbnailSource = { + /*canDrag(props) { + return props.error === false; + },*/ + + beginDrag(props) { + return props; + }, + + endDrag(props, monitor) { + //const item = monitor.getItem(); + const dropResult = monitor.getDropResult(); + + if (dropResult) { + //console.log(`You dropped ${item.id} into ${dropResult.id}!`); + //console.log(item); + } + }, +}; + +class ThumbnailEntryDragSource extends Component { + static propTypes = { + connectDragSource: PropTypes.func.isRequired, + isDragging: PropTypes.bool.isRequired, + }; + + static defaultProps = { + isDragging: false, + }; + + render() { + const { connectDragSource } = this.props; + const dropEffect = 'copy'; + + return connectDragSource( +
    + + +
    , + { dropEffect } + ); + } +} + +const collect = (connect, monitor) => ({ + connectDragSource: connect.dragSource(), + isDragging: monitor.isDragging(), +}); + +export default DragSource(Types.THUMBNAIL, thumbnailSource, collect)( + ThumbnailEntryDragSource +); diff --git a/platform/ui/src/components/studyBrowser/__docs__/exampleStudies.js b/platform/ui/src/components/studyBrowser/__docs__/exampleStudies.js new file mode 100644 index 00000000000..ee6a6d3210a --- /dev/null +++ b/platform/ui/src/components/studyBrowser/__docs__/exampleStudies.js @@ -0,0 +1,75 @@ +export const studies = [ + { + thumbnails: [ + { + imageSrc: + 'https://raw.githubusercontent.com/crowds-cure/cancer/master/public/screenshots/Anti-PD-1_Lung.jpg', + seriesDescription: 'Anti-PD-1_Lung', + active: true, + seriesNumber: '2', + numImageFrames: 512, + stackPercentComplete: 30, + }, + { + imageSrc: + 'https://raw.githubusercontent.com/crowds-cure/cancer/master/public/screenshots/Anti-PD-1_MELANOMA.jpg', + seriesDescription: 'Anti-PD-1_MELANOMA', + seriesNumber: '2', + instanceNumber: '1', + numImageFrames: 256, + stackPercentComplete: 70, + }, + { + altImageText: 'SR', + seriesDescription: 'Imaging Measurement Report', + seriesNumber: '3', + stackPercentComplete: 100, + }, + ], + }, + { + thumbnails: [ + { + imageSrc: + 'https://raw.githubusercontent.com/crowds-cure/cancer/master/public/screenshots/CPTAC-GBM.jpg', + seriesDescription: 'CPTAC-GBM', + active: true, + seriesNumber: '2', + numImageFrames: 512, + stackPercentComplete: 100, + }, + { + imageSrc: + 'https://raw.githubusercontent.com/crowds-cure/cancer/master/public/screenshots/CPTAC-CM.jpg', + seriesDescription: 'CPTAC-CM', + seriesNumber: '2', + instanceNumber: '1', + numImageFrames: 256, + }, + { + imageSrc: + 'https://raw.githubusercontent.com/crowds-cure/cancer/master/public/screenshots/CPTAC-HNSCC.jpg', + seriesDescription: 'CPTAC-HNSCC', + seriesNumber: '2', + instanceNumber: '1', + numImageFrames: 256, + }, + { + imageSrc: + 'https://raw.githubusercontent.com/crowds-cure/cancer/master/public/screenshots/CPTAC-LSCC.jpg', + seriesDescription: 'CPTAC-LSCC', + seriesNumber: '2', + instanceNumber: '1', + numImageFrames: 256, + }, + ], + }, +]; + +export function onThumbnailClick() { + console.warn('onThumbnailClick'); +} + +export function onThumbnailDoubleClick() { + console.warn('onThumbnailDoubleClick'); +} diff --git a/platform/ui/src/components/studyBrowser/__docs__/studyBrowser.mdx b/platform/ui/src/components/studyBrowser/__docs__/studyBrowser.mdx new file mode 100644 index 00000000000..f9606fe8475 --- /dev/null +++ b/platform/ui/src/components/studyBrowser/__docs__/studyBrowser.mdx @@ -0,0 +1,22 @@ +--- +name: Study Browser +menu: Components +route: /components/study-browser +--- + +import { Playground, Props } from 'docz' +import { State } from 'react-powerplug' +import { WrappedStudyBrowser } from './wrappedStudyBrowser.js' +import { StudyBrowser } from './../index.js' + +# Study Browser + +## Basic usage + + + + + +## API + + diff --git a/platform/ui/src/components/studyBrowser/__docs__/wrappedStudyBrowser.js b/platform/ui/src/components/studyBrowser/__docs__/wrappedStudyBrowser.js new file mode 100644 index 00000000000..9d2c2903731 --- /dev/null +++ b/platform/ui/src/components/studyBrowser/__docs__/wrappedStudyBrowser.js @@ -0,0 +1,40 @@ +import React, { Component } from 'react'; +import { DragDropContext } from 'react-dnd'; +import TouchBackend from 'react-dnd-touch-backend'; + +// +import { + studies, + onThumbnailClick, + onThumbnailDoubleClick, +} from './exampleStudies.js'; +import { ExampleDropTarget, StudyBrowser } from './../index.js'; + +class StudyBrowserContainer extends Component { + render() { + //const viewportData = [null, null, null, null]; + + return ( + + + + + ); + } +} + +// Note: +// Normally, the top level APP component is wrapped with the DragDropContext +// We wrap this component to create a simple/local example. +const WrappedStudyBrowser = DragDropContext( + TouchBackend({ enableMouseEvents: true }), + null, + true +)(StudyBrowserContainer); + +// http://react-dnd.github.io/react-dnd/docs/api/drag-drop-context +export { WrappedStudyBrowser }; diff --git a/platform/ui/src/components/studyBrowser/index.js b/platform/ui/src/components/studyBrowser/index.js new file mode 100644 index 00000000000..9ed1c3194c7 --- /dev/null +++ b/platform/ui/src/components/studyBrowser/index.js @@ -0,0 +1,3 @@ +export { ExampleDropTarget } from './ExampleDropTarget.js'; +export { StudyBrowser } from './StudyBrowser.js'; +export { ThumbnailEntry } from './ThumbnailEntry.js'; diff --git a/platform/ui/src/components/studyList/CustomDateRangePicker.js b/platform/ui/src/components/studyList/CustomDateRangePicker.js new file mode 100644 index 00000000000..b850685e1f3 --- /dev/null +++ b/platform/ui/src/components/studyList/CustomDateRangePicker.js @@ -0,0 +1,99 @@ +// If you want to continue using CSS stylesheets and classes... +// https://github.com/airbnb/react-dates#initialize +import 'react-dates/initialize'; +import 'react-dates/lib/css/_datepicker.css'; + +import React from 'react'; +import PropTypes from 'prop-types'; +import { DateRangePicker } from 'react-dates'; + +import './CustomDateRangePicker.styl'; + +export default class CustomDateRangePicker extends React.Component { + static propTypes = { + presets: PropTypes.arrayOf( + PropTypes.shape({ + text: PropTypes.string, + start: PropTypes.required, + end: PropTypes.required, + }) + ), + }; + + constructor(props) { + super(props); + this.state = { + startDate: this.props.startDate, + endDate: this.props.endDate, + }; + + this.renderDatePresets = this.renderDatePresets.bind(this); + this.onDatesChange = this.onDatesChange.bind(this); + } + + onDatesChange({ startDate, endDate, preset }) { + this.setState({ startDate, endDate }); + if (this.props.onDatesChange) { + this.props.onDatesChange({ startDate, endDate, preset }); + } + } + + renderDatePresets() { + const { presets } = this.props; + const { startDate, endDate } = this.state; + + return ( +
    + {presets.map(({ text, start, end }) => { + const isSelected = startDate === start && endDate === end; + + return ( + + ); + })} +
    + ); + } + + render() { + let { + autoFocus, + autoFocusEndDate, + initialStartDate, + initialEndDate, + stateDateWrapper, + onDatesChange, + startDate, + endDate, + presets, + ...dateRangePickerProps + } = this.props; + + return ( +
    + +
    + ); + } +} diff --git a/platform/ui/src/components/studyList/CustomDateRangePicker.styl b/platform/ui/src/components/studyList/CustomDateRangePicker.styl new file mode 100644 index 00000000000..1112a0c90a6 --- /dev/null +++ b/platform/ui/src/components/studyList/CustomDateRangePicker.styl @@ -0,0 +1,84 @@ +.CalendarDay__selected_span { + background: var(--calendar-main-color); + color: var(--calendar-day-color); + border: 1px solid; + border-color: var(--calendar-day-border-color); +} + +.CalendarDay__default:hover { + color: var(--calendar-main-color); +} + +.CalendarDay__selected_span:active, .CalendarDay__selected_span:hover { + background: var(--calendar-day-active-hover-background-color); + border-color: var(--calendar-day-border-color); + color: var(--calendar-day-color); +} + +.CalendarDay__selected { + background: var(--calendar-main-color); + color: var(--calendar-day-color); + border-color: var(--calendar-day-border-color); +} + +.CalendarDay__selected:hover { + background: var(--calendar-main-color); + color: var(--calendar-day-color); + border-color: var(--calendar-day-border-color); +} + +.CalendarDay__hovered_span:hover, +.CalendarDay__hovered_span { + background: var(--calendar-main-color); + color: var(--calendar-day-color); + border-color:var(--calendar-day-color); +} + +.DateInput { + width: 97px +} + +.DateInput_input { + background-color: var(--input-background-color) + border-color: var(--input-background-color) + color: var(--input-placeholder-color) + height: 38px + font-size: 10pt +} + +.DateRangePickerInput { + background-color: var(--input-background-color) + border-color: var(--input-background-color) + color: var(--input-placeholder-color) + height: 40px +} + +.PresetDateRangePicker_panel: { + padding: 0 22px 11px 22px; +} + +.PresetDateRangePicker_button { + position: relative; + height: 100%; + textAlign: center; + background: none; + border: 2px solid var(--calendar-main-color); + color: var(--calendar-main-color); + padding: 4px 12px; + marginRight: 8; + font: inherit; + fontWeight: 700; + lineHeight: normal; + overflow: visible; + boxSizing: border-box; + cursor: pointer; + + :active: { + outline: 0; + } +} + +.PresetDateRangePicker_button__selected: { + color: var(--calendar-day-color); + background: var(--calendar-main-color); +}; diff --git a/platform/ui/src/components/studyList/PaginationArea.js b/platform/ui/src/components/studyList/PaginationArea.js new file mode 100644 index 00000000000..85a7f581f6a --- /dev/null +++ b/platform/ui/src/components/studyList/PaginationArea.js @@ -0,0 +1,111 @@ +import React, { PureComponent } from 'react'; +import PropTypes from 'prop-types'; +import './PaginationArea.styl'; +import { withTranslation } from '../../utils/LanguageProvider'; + +class PaginationArea extends PureComponent { + static defaultProps = { + pageOptions: [5, 10, 25, 50, 100], + rowsPerPage: 25, + currentPage: 0, + }; + + static propTypes = { + pageOptions: PropTypes.array.isRequired, + rowsPerPage: PropTypes.number.isRequired, + currentPage: PropTypes.number.isRequired, + nextPageFunc: PropTypes.func, + prevPageFunc: PropTypes.func, + onRowsPerPageChange: PropTypes.func, + recordCount: PropTypes.number.isRequired, + }; + + nextPage = () => { + this.props.nextPageFunc(this.props.currentPage); + }; + + prevPage = () => { + this.props.prevPageFunc(this.props.currentPage); + }; + + onRowsPerPageChange = event => { + this.props.onRowsPerPageChange(parseInt(event.target.value)); + }; + + renderPaginationButtons() { + return ( +
    +
    + +
      +
    • + +
    • +
    • + +
    • +
    +
    +
    +
    + ); + } + + renderRowsPerPageDropdown() { + return ( +
    + {this.props.t('Show')} + + {this.props.t('RowsPerPage')} +
    + ); + } + + render() { + return ( +
    +
    +
    +
    + {this.renderRowsPerPageDropdown()} +
    +
    +
    + {this.renderPaginationButtons()} +
    +
    +
    +
    +
    + ); + } +} + +const connectedComponent = withTranslation('Common')(PaginationArea); +export { connectedComponent as PaginationArea }; diff --git a/platform/ui/src/components/studyList/PaginationArea.styl b/platform/ui/src/components/studyList/PaginationArea.styl new file mode 100644 index 00000000000..deb89b373a0 --- /dev/null +++ b/platform/ui/src/components/studyList/PaginationArea.styl @@ -0,0 +1,64 @@ +.pagination-area + color: var(--text-secondary-color); + font-size: 13px + font-weight: normal !important + + label + font-weight: normal + + select + margin: 5px + background-color: var(--primary-background-color) + color: white + + .row + display: flex; + + .rows-dropdown + width: 25%; + padding-right: 15px; + padding-left: 15px; + + .pagination-buttons + width: 75%; + padding-right: 15px; + padding-left: 15px; + + .form-group + margin-bottom: 15px; + + .rows-per-page label.wrapperLabel + display: inline-table !important + margin: 0 4px + + select + margin: 0px 4px 0px 4px + width: 42px + + .page-buttons + margin: 0 + text-align: right + font-weight: normal + ul.pagination-control + margin: 0 + + li + display: table-cell + padding: 5px 2px + + button + padding: 4px 8px + background-color: var(--primary-background-color) + border-color: var(--ui-gray) + color: var(--ui-gray-darkest) + color: white + text-decoration: none + + &:hover:enabled + color: var(--active-color) + + .active + button + background-color: var(--ui-gray) + border-color: #ddd + color: white diff --git a/platform/ui/src/components/studyList/StudyList.js b/platform/ui/src/components/studyList/StudyList.js new file mode 100644 index 00000000000..d3a8d475143 --- /dev/null +++ b/platform/ui/src/components/studyList/StudyList.js @@ -0,0 +1,428 @@ +import './StudyList.styl'; + +import React, { Component } from 'react'; + +import CustomDateRangePicker from './CustomDateRangePicker.js'; +import { Icon } from './../../elements/Icon'; +import { PaginationArea } from './PaginationArea.js'; +import PropTypes from 'prop-types'; +import { StudyListLoadingText } from './StudyListLoadingText.js'; +import { StudylistToolbar } from './StudyListToolbar.js'; +import { isInclusivelyBeforeDay } from 'react-dates'; +import moment from 'moment'; +import debounce from 'lodash.debounce'; +import { withTranslation } from '../../utils/LanguageProvider'; + +const today = moment(); +const lastWeek = moment().subtract(7, 'day'); +const lastMonth = moment().subtract(1, 'month'); + +class StudyList extends Component { + static propTypes = { + studies: PropTypes.array.isRequired, + onSelectItem: PropTypes.func.isRequired, + onSearch: PropTypes.func.isRequired, + currentPage: PropTypes.number, + rowsPerPage: PropTypes.number, + studyListDateFilterNumDays: PropTypes.number, + studyListFunctionsEnabled: PropTypes.bool, + defaultSort: PropTypes.shape({ + field: PropTypes.string.isRequired, + order: PropTypes.oneOf(['desc', 'asc']).isRequired, + }), + onImport: PropTypes.func, + pageOptions: PropTypes.array, + }; + + static defaultProps = { + currentPage: 0, + rowsPerPage: 25, + studyListDateFilterNumDays: 7, + }; + + static studyDatePresets = [ + { + text: 'Today', + start: today, + end: today, + }, + { + text: 'Last 7 days', + start: lastWeek, + end: today, + }, + { + text: 'Last 30 days', + start: lastMonth, + end: today, + }, + ]; + + constructor(props) { + super(props); + + const sortData = { + field: undefined, + order: undefined, + }; + + // init from props + if (props.defaultSort) { + sortData.field = props.defaultSort.field; + // todo: -1, 0, 1? + sortData.order = props.defaultSort.order; // asc, desc + } + + this.defaultStartDate = moment().subtract( + this.props.studyListDateFilterNumDays, + 'days' + ); + this.defaultEndDate = moment(); + + this.state = { + loading: false, + error: false, + searchData: { + sortData, + currentPage: this.props.currentPage, + rowsPerPage: this.props.rowsPerPage, + studyDateFrom: this.defaultStartDate, + studyDateTo: this.defaultEndDate, + }, + highlightedItem: '', + }; + + this.getChangeHandler = this.getChangeHandler.bind(this); + this.getBlurHandler = this.getBlurHandler.bind(this); + this.onInputKeydown = this.onInputKeydown.bind(this); + this.nextPage = this.nextPage.bind(this); + this.prevPage = this.prevPage.bind(this); + this.onRowsPerPageChange = this.onRowsPerPageChange.bind(this); + this.delayedSearch = debounce(this.search, 250); + } + + getChangeHandler(key) { + return event => { + this.delayedSearch.cancel(); + this.setSearchData(key, event.target.value, this.delayedSearch); + }; + } + + getBlurHandler(key) { + return event => { + this.delayedSearch.cancel(); + this.setSearchData(key, event.target.value, this.search); + }; + } + + setSearchData(key, value, callback) { + const searchData = this.state.searchData; + searchData[key] = value; + this.setState({ searchData }, callback); + } + + setSearchDataBatch(keyValues, callback) { + const searchData = this.state.searchData; + + Object.keys(keyValues).forEach(key => { + searchData[key] = keyValues[key]; + }); + + this.setState({ searchData }, callback); + } + + async onInputKeydown(event) { + if (event.key === 'Enter') { + event.preventDefault(); + event.stopPropagation(); + + this.delayedSearch.cancel(); + // reset the page because user is doing a new search + this.setSearchData('currentPage', 0, this.search); + } + } + + async search() { + try { + this.setState({ loading: true, error: false }); + await this.props.onSearch(this.state.searchData); + } catch (error) { + this.setState({ error: true }); + throw new Error(error); + } finally { + this.setState({ loading: false }); + } + } + + renderNoMachingResults() { + if (!this.props.studies.length && !this.state.error) { + return
    No matching results
    ; + } + } + + renderHasError() { + if (this.state.error) { + return ( +
    There was an error fetching studies
    + ); + } + } + + renderIsLoading() { + if (this.state.loading) { + return ( +
    + +
    + ); + } + } + + nextPage(currentPage) { + currentPage = currentPage + 1; + this.delayedSearch.cancel(); + this.setSearchData('currentPage', currentPage, this.search); + } + + prevPage(currentPage) { + currentPage = currentPage - 1; + this.delayedSearch.cancel(); + this.setSearchData('currentPage', currentPage, this.search); + } + + onRowsPerPageChange(rowsPerPage) { + this.delayedSearch.cancel(); + this.setSearchDataBatch({ rowsPerPage, currentPage: 0 }, this.search); + } + + onSortClick(field) { + return () => { + let order; + const sort = this.state.searchData.sortData; + const isSortedField = sort.field === field; + + if (isSortedField) { + if (sort.order === 'asc') { + order = 'desc'; + } else { + order = undefined; + field = undefined; + } + } else { + order = 'asc'; + } + + this.delayedSearch.cancel(); + this.setSearchData('sortData', { field, order }, this.search); + }; + } + + onHighlightItem(studyItemUid) { + this.setState({ highlightedItem: studyItemUid }); + } + + renderTableRow(study) { + return ( + { + // middle/wheel click + if (event.button === 1) { + this.props.onSelectItem(study.studyInstanceUid); + } + }} + onClick={() => { + this.onHighlightItem(study.studyInstanceUid); + this.props.onSelectItem(study.studyInstanceUid); + }} + > + + {study.patientName || `(${this.props.t('Empty')})`} + + + {study.patientId} + {study.accessionNumber} + {study.studyDate} + {study.modalities} + {study.studyDescription} + + ); + } + + render() { + const tableMeta = { + patientName: { + displayText: this.props.t('PatientName'), + sort: 0, + }, + patientId: { + displayText: this.props.t('MRN'), + sort: 0, + }, + accessionNumber: { + displayText: this.props.t('AccessionNumber'), + sort: 0, + }, + studyDate: { + displayText: this.props.t('StudyDate'), + inputType: 'date-range', + sort: 0, + }, + modalities: { + displayText: this.props.t('Modality'), + sort: 0, + }, + studyDescription: { + displayText: this.props.t('StudyDescription'), + sort: 0, + }, + }; + + // Apply sort + const sortedFieldName = this.state.searchData.sortData.field; + const sortedField = tableMeta[sortedFieldName]; + + if (sortedField) { + const sortOrder = this.state.searchData.sortData.order; + sortedField.sort = sortOrder === 'asc' ? 1 : 2; + } + + // Sort Icons + const sortIcons = ['sort', 'sort-up', 'sort-down']; + + return ( +
    +
    +
    {this.props.t('StudyList')}
    +
    + {this.props.studies.length} +
    +
    + {this.props.studyListFunctionsEnabled ? ( + + ) : null} +
    + {this.props.children} +
    +
    +
    + + + + {Object.keys(tableMeta).map((fieldName, i) => { + const field = tableMeta[fieldName]; + + return ( + + + + ); + })} + + + + {this.props.studies.map(study => { + return this.renderTableRow(study); + })} + +
    +
    + {field.displayText} + +
    + {!field.inputType && ( + + )} + {field.inputType === 'date-range' && ( +
    + + !isInclusivelyBeforeDay(day, moment()) + } + onDatesChange={({ + startDate, + endDate, + preset = false, + }) => { + if ( + startDate && + endDate && + (this.state.focusedInput === 'endDate' || + preset) + ) { + this.setSearchDataBatch( + { + studyDateFrom: startDate.toDate(), + studyDateTo: endDate.toDate(), + }, + this.search + ); + this.setState({ focusedInput: false }); + } else if (!startDate && !endDate) { + this.setSearchDataBatch( + { + studyDateFrom: null, + studyDateTo: null, + }, + this.search + ); + } + }} + focusedInput={this.state.focusedInput} + onFocusChange={focusedInput => { + this.setState({ focusedInput }); + }} + /> +
    + )} +
    + + {this.renderIsLoading()} + {this.renderHasError()} + {this.renderNoMachingResults()} + + +
    +
    + ); + } +} + +const connectedComponent = withTranslation('StudyList')(StudyList); +export { connectedComponent as StudyList }; diff --git a/platform/ui/src/components/studyList/StudyList.styl b/platform/ui/src/components/studyList/StudyList.styl new file mode 100644 index 00000000000..9cefa7a5d65 --- /dev/null +++ b/platform/ui/src/components/studyList/StudyList.styl @@ -0,0 +1,282 @@ +@import './../../design/styles/common/form.styl' +@import './../../design/styles/common/global.styl' + +$study-list-padding = 8%; +$study-list-toolbar-height = 75px; +$body-cell-height = 40px; + +$tablePaddingMediumScreen = 5px +$tablePaddingBigScreen = 3% +$tablePaddingLargeScreen = 5% + +// TODO: move this to a common mixin files +placeholder-color(c) + &::-webkit-input-placeholder + color: c + &:-moz-placeholder + color: c + &::-moz-placeholder + color: c + &:-ms-input-placeholder + color: c + +.DateRangePicker + height: 40px + margin: 0 5px 20px 5px + cursor: pointer + border: none + position: block + +.studyListToolbar + background-color: var(--ui-gray-darker) + height: $study-list-toolbar-height + margin-bottom: 2px + padding: 0 $study-list-padding + + &>div + display: inline-block + + .header + font-size: 22px + font-weight: 300 + color: var(--table-text-secondary-color) + line-height: $study-list-toolbar-height + + .studylistToolbar + height: $study-list-toolbar-height + line-height: $study-list-toolbar-height + + .studyCount + color: var(--large-numbers-color) + font-size: 40px + font-weight: 100 + line-height: $study-list-toolbar-height + +.theadBackground + height: 121px + position: absolute + width: 100% + + &:before, &:after + content: '' + display: block + left: 0 + position: absolute + width: 100% + + &:before + background-color: var(--ui-gray-darker) + height: 100% + top: 0 + z-index: 1 + + &:after + background-color: var(--ui-border-color-active) + bottom: -1px + height: 1px + z-index: 2 + +#studyListContainer + width: 100% + padding: 0 $study-list-padding + position: absolute + z-index: 2 + + .loading-text + color: var(--table-text-secondary-color) + font-size: 30px + + .notFound + color: var(--table-text-secondary-color) + font-size: 30px + font-weight: 200 + text-align: center + + table#tblStudyList + width: 100%; + max-width: 100%; + margin-bottom: 20px; + border-spacing: 0; + border-collapse: collapse; + + > tr + height: 20px + + > thead + white-space: nowrap + + tr + th + padding: 0 + border-bottom: 1px solid var(--ui-border-color-active); + width: 100%; + text-align: left; + border-top: 0; + + &.studyDate + min-width: 230px + + .display-text + display: inline-block + cursor: pointer + width: 100% + min-width: 95px + margin: 0 auto + color: var(--table-text-primary-color) + font-weight: 400 + padding: 20px + -webkit-user-select: none + -moz-user-select: none + -ms-user-select: none + user-select: none + + span + font-size: 15px + float: left + + i + margin: 0 5px + + &:hover + color: var(--active-color) + + &.active, &:active + color: var(--active-color) + + input.studylist-search + height: 40px + margin: 0 5px 20px 5px + padding: 0 20px + cursor: pointer + border: none + background-color: var(--input-background-color) + color: var(--input-placeholder-color) + font-size: 10pt + font-weight: normal + width: calc(100% - 10px) + border-radius: 4px + + transition(all 0.15s ease) + placeholder-color(var(--input-placeholder-color)) + + &.invisible + visibility: hidden + + &:active, &:hover + background-color: var(--input-background-color) + + ::-webkit-datetime-edit-year-field:not([aria-valuenow]), + ::-webkit-datetime-edit-month-field:not([aria-valuenow]), + ::-webkit-datetime-edit-day-field:not([aria-valuenow]) + color: transparent + + > tbody + tr + padding: 5px + background-color: black + + &:nth-child(even) + background-color: var(--ui-gray-darker) + + td + padding: 8px; + height: $body-cell-height + line-height: $body-cell-height + color: var(--table-text-primary-color) + font-weight: 300 + border-top: 1px solid var(--ui-gray-lighter) + border-bottom: 1px solid var(--ui-gray-lighter) + white-space: nowrap + transition(all 0.1s ease) + + &.emptyCell + color: #516873 + + &.emptyValue + color: var(--ui-gray-light) + + &:hover, &:active, &.active + background-color: var(--table-hover-color) + color: var(--text-primary-color) + + td + // This selector is necessary to override bootstrap's 'table' class + border-top: 1px solid var(--ui-gray-lighter) + border-bottom: 1px solid var(--ui-gray-lighter) + background-color: var(--table-hover-color) + +@media only screen and (max-width: 1362px) + #studyListContainer + padding: 0 $tablePaddingLargeScreen + + table#tblStudyList + thead, + tbody + tr + th, + td + &:first-child + padding-left: $tablePaddingLargeScreen + + &:last-child + padding-right: $tablePaddingLargeScreen + +@media only screen and (max-width: 1161px) + #studyListContainer + padding: 0 $tablePaddingBigWidth + + table#tblStudyList + thead, + tbody + tr + th, + td + &:first-child + padding-left: $tablePaddingBigScreen + + &:last-child + padding-right: $tablePaddingBigScreen + +@media only screen and (max-width: 1069px) + .theadBackground + height: 101px + + .studylist-pagination > .row + margin-right: 0; + + .studyListToolbar + padding: 0 $tablePaddingMediumScreen + + #studyListContainer + padding: 0 + + table#tblStudyList + thead > tr > th + + &:first-child + padding-left: $tablePaddingMediumScreen + + &:last-child + padding-right: $tablePaddingMediumScreen + + input.worklist-search + padding: 10px + + .display-text + padding: 10px 5px + + i + width: auto + + tbody > tr > td + + &:first-child + padding-left: $tablePaddingMediumScreen + + &:last-child + padding-right: $tablePaddingMediumScreen + + .worklistPagination + .row + margin-left: 0 + margin-right: 0 diff --git a/platform/ui/src/components/studyList/StudyListLoadingText.js b/platform/ui/src/components/studyList/StudyListLoadingText.js new file mode 100644 index 00000000000..deab2e331ca --- /dev/null +++ b/platform/ui/src/components/studyList/StudyListLoadingText.js @@ -0,0 +1,12 @@ +import { Icon } from './../../elements/Icon'; +import React from 'react'; + +function StudyListLoadingText() { + return ( +
    + Loading... +
    + ); +} + +export { StudyListLoadingText }; diff --git a/platform/ui/src/components/studyList/StudyListToolbar.js b/platform/ui/src/components/studyList/StudyListToolbar.js new file mode 100644 index 00000000000..ee6fd5900d4 --- /dev/null +++ b/platform/ui/src/components/studyList/StudyListToolbar.js @@ -0,0 +1,40 @@ +import './StudyListToolbar.styl'; + +import React, { PureComponent } from 'react'; + +import { Icon } from './../../elements/Icon'; +import PropTypes from 'prop-types'; + +class StudylistToolbar extends PureComponent { + static propTypes = { + onImport: PropTypes.func, + }; + + onImport = event => { + if (this.props.onImport) { + this.props.onImport(event); + } + }; + + getImportTool() { + if (this.props.onImport) { + return ( +
    + +
    + ); + } + } + + render() { + return
    {this.getImportTool()}
    ; + } +} + +export { StudylistToolbar }; diff --git a/platform/ui/src/components/studyList/StudyListToolbar.styl b/platform/ui/src/components/studyList/StudyListToolbar.styl new file mode 100644 index 00000000000..c810bdb3146 --- /dev/null +++ b/platform/ui/src/components/studyList/StudyListToolbar.styl @@ -0,0 +1,26 @@ +.studyListToolbar + .addNewStudy + margin: 0 10px + + label + font-weight: 400 + cursor: pointer + display: inline-block; + max-width: 100%; + margin-bottom: 5px; + + input + width: 0.1px; + height: 0.1px + opacity: 0 + overflow: hidden + position: absolute + z-index: -1 + + color: var(--text-secondary-color) + + &:hover + color: var(--hover-color) + + &:active + color: var(--active-color) diff --git a/platform/ui/src/components/studyList/__docs__/onSearch.js b/platform/ui/src/components/studyList/__docs__/onSearch.js new file mode 100644 index 00000000000..1101e76c992 --- /dev/null +++ b/platform/ui/src/components/studyList/__docs__/onSearch.js @@ -0,0 +1,72 @@ +import moment from 'moment'; + +export default function(searchData) { + this.setState({ searchData }); + + const filter = (key, searchData, study) => { + if (key === 'studyDateFrom' && searchData[key] && study['studyDate']) { + const studyDate = moment(study['studyDate'], 'YYYYMMDD'); + return studyDate.isBetween( + searchData['studyDateFrom'], + searchData['studyDateTo'], + 'days', + '[]' + ); + } else if (searchData[key] && !study[key].includes(searchData[key])) { + return false; + } else { + return true; + } + }; + + const { field, order } = searchData.sortData; + + // just a example of local filtering + let filteredStudies = this.defaultStudies + .filter(function(study) { + const all = [ + 'patientName', + 'patientId', + 'accessionNumber', + 'modalities', + 'studyDescription', + 'studyDateFrom', + ].every(key => { + return filter(key, searchData, study); + }); + + return all; + }) + .sort(function(a, b) { + if (order === 'desc') { + if (a[field] < b[field]) { + return -1; + } + if (a[field] > b[field]) { + return 1; + } + return 0; + } else { + if (a[field] > b[field]) { + return -1; + } + if (a[field] < b[field]) { + return 1; + } + return 0; + } + }); + + // User can notice the loading icon + return new Promise(resolve => { + setTimeout(() => { + const first = searchData.currentPage * searchData.rowsPerPage; + let last = + searchData.currentPage * searchData.rowsPerPage + + searchData.rowsPerPage; + last = last >= filteredStudies.length ? filteredStudies.length : last; + this.setState({ studies: filteredStudies.slice(first, last) }); + resolve(); + }, 500); + }); +} diff --git a/platform/ui/src/components/studyList/__docs__/studies.js b/platform/ui/src/components/studyList/__docs__/studies.js new file mode 100644 index 00000000000..5538d634b4a --- /dev/null +++ b/platform/ui/src/components/studyList/__docs__/studies.js @@ -0,0 +1,87 @@ +import moment from 'moment'; + +const studies = [ + { + studyInstanceUid: '11111.111111.111111.11111', + patientName: 'John Doe', + patientId: '1', + accessionNumber: '1234567', + studyDate: '19930201', + modalities: 'MR', + studyDescription: 'BRAIN', + }, + { + studyInstanceUid: '2222.222222.22222.22222', + patientName: 'JosΓ© Silva', + patientId: '2', + accessionNumber: '7654321', + studyDate: moment().format('YYYYMMDD'), + modalities: 'CT', + studyDescription: 'PET CT STANDARD', + }, + { + studyInstanceUid: '3333.333333.33333.33333', + patientName: 'AntΓ΄nio Jefferson', + patientId: '3', + accessionNumber: '732311', + studyDate: moment() + .subtract(14, 'days') + .format('YYYYMMDD'), + modalities: 'US', + studyDescription: '0', + }, + { + studyInstanceUid: '444444.44444.44444.4444', + patientName: 'Antonio da Silva', + patientId: '4', + accessionNumber: '732311', + studyDate: moment() + .subtract(1, 'months') + .format('YYYYMMDD'), + modalities: 'US', + studyDescription: '0', + }, + { + studyInstanceUid: '55555.55555.55555.55555', + patientName: 'Bezerra Souza', + patientId: '5', + accessionNumber: '5134543', + studyDate: moment() + .subtract(6, 'days') + .format('YYYYMMDD'), + modalities: 'US', + studyDescription: '0', + }, + { + studyInstanceUid: '66666.66666.66666.6666', + patientName: 'Geraldo Roger', + patientId: '6', + accessionNumber: '5315135', + studyDate: moment() + .subtract(7, 'days') + .format('YYYYMMDD'), + modalities: 'US', + studyDescription: 'US', + }, + { + studyInstanceUid: '77777.77777.77777.77777', + patientName: '', + patientId: '7', + accessionNumber: '5315136', + studyDate: moment() + .subtract(5, 'days') + .format('YYYYMMDD'), + modalities: 'US', + studyDescription: 'US', + }, +].sort(function(a, b) { + if (a.patientName < b.patientName) { + return -1; + } + if (a.patientName > b.patientName) { + return 1; + } + return 0; +}); + +export default studies; diff --git a/platform/ui/src/components/studyList/__docs__/studyList.mdx b/platform/ui/src/components/studyList/__docs__/studyList.mdx new file mode 100644 index 00000000000..86c33f68640 --- /dev/null +++ b/platform/ui/src/components/studyList/__docs__/studyList.mdx @@ -0,0 +1,53 @@ +--- +name: Study List +menu: Components +route: /components/study-list +--- + +import { Playground, Props } from 'docz' +import { State } from 'react-powerplug' +import { StudyList } from './../index.js' +// Data +import defaultStudies from './studies.js' +import onSearch from './onSearch.js' +import moment from 'moment' + +# Study List + +## Basic usage + + + { + const studyDate = moment(study['studyDate'], 'YYYYMMDD'); + const startDate = moment().subtract(5, 'days'); + const endDate = moment(); + + return studyDate.isBetween(startDate, endDate, 'days', '[]'); + }).slice(0, 5) + }}> + {({ state, setState }) => ( +
    +
    + alert('Import study mock ' + e)} + onSelectItem={(studyInstanceUid) => { alert(studyInstanceUid + ' has selected! Now you can open your study.'); }} + rowsPerPage={5} + defaultSort={{ field: 'patientName', order: 'desc', }} + studyListDateFilterNumDays={7} + onSearch={onSearch.bind({ setState, defaultStudies })} + /> +
    +
    + )} +
    + +
    + +## API + + diff --git a/platform/ui/src/components/studyList/index.js b/platform/ui/src/components/studyList/index.js new file mode 100644 index 00000000000..45f24409284 --- /dev/null +++ b/platform/ui/src/components/studyList/index.js @@ -0,0 +1 @@ +export { StudyList } from './StudyList.js'; diff --git a/platform/ui/src/components/tableList/TableList.js b/platform/ui/src/components/tableList/TableList.js new file mode 100644 index 00000000000..dab927b0a4c --- /dev/null +++ b/platform/ui/src/components/tableList/TableList.js @@ -0,0 +1,37 @@ +import React, { Component } from 'react'; +import PropTypes from 'prop-types'; + +import './TableList.styl'; + +export class TableList extends Component { + static propTypes = { + customHeader: PropTypes.node, + defaultItems: PropTypes.object, + children: PropTypes.node.isRequired, + headerTitle: PropTypes.string, + }; + + render() { + return ( +
    +
    + {this.getHeader()} +
    +
    {this.props.children}
    +
    + ); + } + + getHeader = () => { + if (this.props.customHeader) { + return this.props.customHeader; + } else { + return ( + +
    {this.props.headerTitle}
    +
    {this.props.children.length}
    +
    + ); + } + }; +} diff --git a/platform/ui/src/components/tableList/TableList.styl b/platform/ui/src/components/tableList/TableList.styl new file mode 100644 index 00000000000..f62c7444d77 --- /dev/null +++ b/platform/ui/src/components/tableList/TableList.styl @@ -0,0 +1,36 @@ + +$headerRowHeight = 63px + +.tableList + background-color: var(--primary-background-color) + height: 100%; + width: 100%; + + .tableListHeader + background-color: var(--ui-gray-darker) + color: var(--text-secondary-color) + display: flex + height: $headerRowHeight + line-height: $headerRowHeight + margin-top: 2px + overflow: hidden + width: 100% + + .tableListHeaderTitle + color: var(--text-secondary-color) + font-size: 22px + font-weight: 300 + line-height: $headerRowHeight + padding: 0 10px + text-align: left + flex: 1; + + .numberOfItems + color: var(--ui-sky-blue) + float: right + font-weight: 300 + font-size: 40px + max-width: 54px + height: $headerRowHeight + line-height: 66px + flex: 1; diff --git a/platform/ui/src/components/tableList/TableListItem.js b/platform/ui/src/components/tableList/TableListItem.js new file mode 100644 index 00000000000..719ed6e8298 --- /dev/null +++ b/platform/ui/src/components/tableList/TableListItem.js @@ -0,0 +1,42 @@ +import './TableListItem.styl'; + +import { Component } from 'react'; +import { Icon } from './../../elements/Icon'; +import PropTypes from 'prop-types'; +import React from 'react'; + +export class TableListItem extends Component { + static propTypes = { + children: PropTypes.node, + itemClass: PropTypes.string, + itemIndex: PropTypes.number, + itemKey: PropTypes.oneOfType(['number', 'string']), + onItemClick: PropTypes.func.isRequired, + }; + + render() { + return ( +
    +
    + {this.props.itemIndex} + + + +
    +
    {this.props.children}
    +
    + ); + } + + onItemClick = event => { + if (this.props.onItemClick) { + event.preventDefault(); + event.stopPropagation(); + + this.props.onItemClick(event, this.props.itemKey); + } + }; +} diff --git a/platform/ui/src/components/tableList/TableListItem.styl b/platform/ui/src/components/tableList/TableListItem.styl new file mode 100644 index 00000000000..a471d134edf --- /dev/null +++ b/platform/ui/src/components/tableList/TableListItem.styl @@ -0,0 +1,46 @@ +.tableListItem + display: flex + margin-left: -6px + margin-top: 2px + padding-left: 6px + opacity: 0.7 + cursor: pointer; + width: calc(100% + 6px) + + &:hover + opacity 1 + + &.selected + opacity 1 + .itemIndex + color: $activeColor + + &.hasWarning + .warning + display: block + + .itemIndex + background-color: var(--ui-gray) + color: var(--text-secondary-color) + cursor: pointer + flex: 1 + max-width: 25px + transition(all 0.3s ease) + font-size: 14px + font-weight: 400 + margin-right: 5px + padding: 10px + text-align: center + -webkit-box-sizing: initial; + -moz-box-sizing: initial; + box-sizing: initial; + + .itemContent + flex: 1 + color: var(--text-secondary-color) + font-weight: 400 + margin-left: 9px; + margin-top: 9px; + + .warning-icon + display: none diff --git a/platform/ui/src/components/tableList/__docs__/tableList.mdx b/platform/ui/src/components/tableList/__docs__/tableList.mdx new file mode 100644 index 00000000000..bea1c7db5b3 --- /dev/null +++ b/platform/ui/src/components/tableList/__docs__/tableList.mdx @@ -0,0 +1,48 @@ +--- +name: Table List +menu: Components +route: /components/table-list +--- + +import { Playground, Props } from 'docz' +import { State } from 'react-powerplug' +import { TableList, TableListItem } from './../index.js' + +# Table List + +## Basic usage + + + + {({ state, setState }) => ( + + {state.listItems.map( (item, index) => { + return ( + alert('item clicked')} + > + + + )} + )} + + )} + + + + + +## API + + diff --git a/platform/ui/src/components/tableList/index.js b/platform/ui/src/components/tableList/index.js new file mode 100644 index 00000000000..5a19d8d71a4 --- /dev/null +++ b/platform/ui/src/components/tableList/index.js @@ -0,0 +1,2 @@ +export { TableList } from './TableList'; +export { TableListItem } from './TableListItem'; diff --git a/platform/ui/src/components/toolbarSection/ToolbarSection.js b/platform/ui/src/components/toolbarSection/ToolbarSection.js new file mode 100644 index 00000000000..e1fdbf21385 --- /dev/null +++ b/platform/ui/src/components/toolbarSection/ToolbarSection.js @@ -0,0 +1,65 @@ +import './ToolbarSection.styl'; + +import React, { PureComponent } from 'react'; + +import ExpandableToolMenu from '../../viewer/ExpandableToolMenu'; +import PropTypes from 'prop-types'; +import ToolbarButton from '../../viewer/ToolbarButton'; +import classnames from 'classnames'; + +class ToolbarSection extends PureComponent { + static defaultProps = { + className: '', + }; + + static propTypes = { + buttons: PropTypes.arrayOf( + PropTypes.shape({ + id: PropTypes.string, + label: PropTypes.string.isRequired, + icon: PropTypes.oneOfType([ + PropTypes.string, + PropTypes.shape({ + name: PropTypes.string.isRequired, + }), + ]), + /** Optional: Expandable Tool Menu */ + buttons: PropTypes.arrayOf(PropTypes.shape({})), + }) + ).isRequired, + /** Array of string button ids that should show as active */ + activeButtons: PropTypes.arrayOf(PropTypes.string).isRequired, + /** Class for toolbar section container */ + className: PropTypes.string, + }; + + render() { + const items = this.props.buttons.map((button, index) => { + if (button.buttons && Array.isArray(button.buttons)) { + return ( + + ); + } else { + return ( + + ); + } + }); + + return ( +
    + {items} +
    + ); + } +} + +export { ToolbarSection }; diff --git a/platform/ui/src/components/toolbarSection/ToolbarSection.styl b/platform/ui/src/components/toolbarSection/ToolbarSection.styl new file mode 100644 index 00000000000..1e008acca3f --- /dev/null +++ b/platform/ui/src/components/toolbarSection/ToolbarSection.styl @@ -0,0 +1,4 @@ +.ToolbarSection + float: left; + background-color: var(--primary-background-color); + border-radius: 8px; diff --git a/platform/ui/src/components/toolbarSection/__docs__/exampleButtons.js b/platform/ui/src/components/toolbarSection/__docs__/exampleButtons.js new file mode 100644 index 00000000000..74e08b6a28d --- /dev/null +++ b/platform/ui/src/components/toolbarSection/__docs__/exampleButtons.js @@ -0,0 +1,41 @@ +export default [ + { + id: 'Pan', + label: 'Pan', + icon: 'arrows', + }, + { + label: 'Zoom', + icon: 'search', + }, + { + label: 'Bidirectional', + icon: 'measure-target', + }, + { + label: 'Stack Scroll', + icon: 'bars', + }, + { + label: 'Reset', + icon: 'reset', + }, + { + label: 'Manual', + icon: 'level', + }, + { + label: 'More', + icon: 'ellipse-circle', + buttons: [ + { + label: 'Reset 2', + icon: 'reset', + }, + { + label: 'Manual 2', + icon: 'adjust', + }, + ], + }, +]; diff --git a/platform/ui/src/components/toolbarSection/__docs__/toolbarSection.docs.mdx b/platform/ui/src/components/toolbarSection/__docs__/toolbarSection.docs.mdx new file mode 100644 index 00000000000..a246a2dd5aa --- /dev/null +++ b/platform/ui/src/components/toolbarSection/__docs__/toolbarSection.docs.mdx @@ -0,0 +1,39 @@ +--- +name: Toolbar Section +menu: Components +route: /components/toolbar-section +--- + +import { Playground, Props } from 'docz'; +import { State } from 'react-powerplug'; +import { ToolbarSection } from './../index.js'; +import exampleButtons from './exampleButtons.js'; +import NameSpace from '../../../__docs__/NameSpace'; + +# ToolbarSection + +A basic row of buttons for a toolbar. Active command is `WwwcTool` + +## Basic usage + + + { + alert('pressed'); + }, + }} + > + {({ state, setState }) => } + + + +## API + + + +## Translation Namespace + + diff --git a/platform/ui/src/components/toolbarSection/index.js b/platform/ui/src/components/toolbarSection/index.js new file mode 100644 index 00000000000..5dad8395188 --- /dev/null +++ b/platform/ui/src/components/toolbarSection/index.js @@ -0,0 +1 @@ +export { ToolbarSection } from './ToolbarSection.js'; diff --git a/platform/ui/src/components/tooltip/Tooltip.js b/platform/ui/src/components/tooltip/Tooltip.js new file mode 100644 index 00000000000..237d2cb2209 --- /dev/null +++ b/platform/ui/src/components/tooltip/Tooltip.js @@ -0,0 +1,66 @@ +import './Tooltip.styl'; + +import classNames from 'classnames'; +import React from 'react'; +import PropTypes from 'prop-types'; + +const propTypes = { + /** Sets the direction the Tooltip is positioned towards. */ + placement: PropTypes.oneOf(['top', 'right', 'bottom', 'left']), + + /** The "top" position value for the Tooltip. */ + positionTop: PropTypes.oneOfType([PropTypes.number, PropTypes.string]), + /** The "left" position value for the Tooltip. */ + positionLeft: PropTypes.oneOfType([PropTypes.number, PropTypes.string]), + + /** The "top" position value for the Tooltip arrow. */ + arrowOffsetTop: PropTypes.oneOfType([PropTypes.number, PropTypes.string]), + /** The "left" position value for the Tooltip arrow. */ + arrowOffsetLeft: PropTypes.oneOfType([PropTypes.number, PropTypes.string]), +}; + +const defaultProps = { + placement: 'right', +}; + +class Tooltip extends React.Component { + render() { + const { + placement, + positionTop, + positionLeft, + arrowOffsetTop, + arrowOffsetLeft, + className, + style, + children, + } = this.props; + + const outerStyle = { + top: positionTop, + left: positionLeft, + ...style, + }; + + const arrowStyle = { + top: arrowOffsetTop, + left: arrowOffsetLeft, + }; + + return ( +
    +
    +
    {children}
    +
    + ); + } +} + +Tooltip.propTypes = propTypes; +Tooltip.defaultProps = defaultProps; + +export { Tooltip }; diff --git a/platform/ui/src/components/tooltip/Tooltip.styl b/platform/ui/src/components/tooltip/Tooltip.styl new file mode 100644 index 00000000000..ab0822ab941 --- /dev/null +++ b/platform/ui/src/components/tooltip/Tooltip.styl @@ -0,0 +1,92 @@ +@import './../../design/styles/common/global.styl' + +.tooltip + position: absolute; + z-index: 1070; + display: block; + font-family: "Helvetica Neue",Helvetica,Arial,sans-serif; + font-size: 12px; + font-style: normal; + font-weight: 400; + line-height: 1.42857143; + text-align: left; + text-align: start; + text-decoration: none; + text-shadow: none; + text-transform: none; + letter-spacing: normal; + word-break: normal; + word-spacing: normal; + word-wrap: normal; + white-space: normal; + opacity: 0; + line-break: auto; + + &.in + opacity: .9; + + &.top + margin-top: -3px; + padding: 5px 0; + + &.right + margin-left: 3px; + padding: 0 5px; + + &.bottom + margin-top: 3px; + padding: 5px 0; + + &.left + margin-left: -3px; + padding: 0 5px; + + &.top .tooltip-arrow { + bottom: 0; + left: 50%; + margin-left: -5px; + border-width: 5px 5px 0; + border-top-color: #000; + } + + &.right .tooltip-arrow { + top: 50%; + left: 0; + margin-top: -5px; + border-width: 5px 5px 5px 0; + border-right-color: #000; + } + &.left .tooltip-arrow { + top: 50%; + right: 0; + margin-top: -5px; + border-width: 5px 0 5px 5px; + border-left-color: #000; + } + &.bottom .tooltip-arrow { + top: 0; + left: 50%; + margin-left: -5px; + border-width: 0 5px 5px; + border-bottom-color: #000; + } + +.tooltip-inner { + max-width: 200px; + padding: 3px 8px; + color: #fff; + text-align: center; + background-color: #000; + border-radius: 4px; +} + +.tooltip-arrow { + position: absolute; + width: 0; + height: 0; + border-color: transparent; + border-style: solid; +} + +.tooltip.in + opacity: .9; diff --git a/platform/ui/src/components/tooltip/__docs__/tooltip.noshow-mdx b/platform/ui/src/components/tooltip/__docs__/tooltip.noshow-mdx new file mode 100644 index 00000000000..e5adad98434 --- /dev/null +++ b/platform/ui/src/components/tooltip/__docs__/tooltip.noshow-mdx @@ -0,0 +1,20 @@ +--- +name: Tooltip +menu: Components +route: /components/tooltip +--- + +import { Playground, Props } from 'docz' +import { Tooltip } from './../index.js' + +# Tooltip + +## Basic usage + + + + + +## API + + diff --git a/docker/OpenResty-Orthanc-Keycloak/volumes/keycloak-themes/ohif/admin/.githold b/platform/ui/src/components/tooltip/__tests__/.githold similarity index 100% rename from docker/OpenResty-Orthanc-Keycloak/volumes/keycloak-themes/ohif/admin/.githold rename to platform/ui/src/components/tooltip/__tests__/.githold diff --git a/platform/ui/src/components/tooltip/index.js b/platform/ui/src/components/tooltip/index.js new file mode 100644 index 00000000000..40ede0d6770 --- /dev/null +++ b/platform/ui/src/components/tooltip/index.js @@ -0,0 +1 @@ +export { Tooltip } from './Tooltip.js'; diff --git a/platform/ui/src/components/userPreferencesModal/AboutModal.js b/platform/ui/src/components/userPreferencesModal/AboutModal.js new file mode 100644 index 00000000000..3d1b5380a2e --- /dev/null +++ b/platform/ui/src/components/userPreferencesModal/AboutModal.js @@ -0,0 +1,105 @@ +import React, { Component } from 'react'; +import PropTypes from 'prop-types'; +import Modal from 'react-bootstrap-modal'; +import './AboutModal.styl'; + +import 'react-bootstrap-modal/lib/css/rbm-patch.css'; + +// TODO: Is this the only component importing these? +import './../../design/styles/common/modal.styl'; + +export class AboutModal extends Component { + constructor(props) { + super(props); + } + // TODO: Make this component more generic to allow things other than W/L and hotkeys... + static propTypes = { + isOpen: PropTypes.bool.isRequired, + onCancel: PropTypes.func, + }; + + static itemsPreset = [ + { + name: 'Repository URL', + value: 'https://github.com/OHIF/Viewers/', + }, + { + name: 'Latest Master Commits', + value: 'https://github.com/OHIF/Viewers/commits/master', + }, + ]; + + static defaultProps = { + isOpen: false, + }; + + renderTableRow(item) { + return ( + + {item.name} + + + {item.value} + + + + ); + } + + render() { + return ( + + + About + + + +
    +

    Version Information

    + + + + + + + + + {AboutModal.itemsPreset.map(item => this.renderTableRow(item))} + +
    NameValue
    +
    +
    +
    + ); + } +} diff --git a/platform/ui/src/components/userPreferencesModal/AboutModal.styl b/platform/ui/src/components/userPreferencesModal/AboutModal.styl new file mode 100644 index 00000000000..b808e2cca26 --- /dev/null +++ b/platform/ui/src/components/userPreferencesModal/AboutModal.styl @@ -0,0 +1,20 @@ +@import './../../design/styles/common/button.styl' +@import './../../design/styles/common/table.styl' + +.AboutModal + .btn + border-color: #ccc; + + .table + thead:first-child + tr:first-child + th, td + border-top: 0; + + thead, tbody, tfoot + tr + th, td + padding: 8px; + line-height: 1.42857143; + vertical-align: top; + border-top: 1px solid #ddd; diff --git a/platform/ui/src/components/userPreferencesModal/GeneralPreferences.js b/platform/ui/src/components/userPreferencesModal/GeneralPreferences.js new file mode 100644 index 00000000000..51d68344e48 --- /dev/null +++ b/platform/ui/src/components/userPreferencesModal/GeneralPreferences.js @@ -0,0 +1,17 @@ +import React, { Component } from 'react'; +import LanguageSwitcher from '../languageSwitcher'; + +export class GeneralPreferences extends Component { + render() { + return ( +
    +
    + + +
    +
    + ); + } +} diff --git a/platform/ui/src/components/userPreferencesModal/HotKeysPreferences.js b/platform/ui/src/components/userPreferencesModal/HotKeysPreferences.js new file mode 100644 index 00000000000..ea97a144b1f --- /dev/null +++ b/platform/ui/src/components/userPreferencesModal/HotKeysPreferences.js @@ -0,0 +1,277 @@ +import './HotKeysPreferences.styl'; +import React, { Component } from 'react'; +import { + allowedKeys, + disallowedCombinations, + specialKeys, +} from './hotKeysConfig.js'; + +import PropTypes from 'prop-types'; + +export class HotKeysPreferences extends Component { + static propTypes = { + hotKeysData: PropTypes.objectOf( + PropTypes.shape({ + keys: PropTypes.arrayOf(PropTypes.string).isRequired, + label: PropTypes.string.isRequired, + }) + ).isRequired, + onChange: PropTypes.func, + }; + + constructor(props) { + super(props); + + const hotkeyCommands = Object.keys(this.props.hotKeysData); + const localHotKeys = hotkeyCommands.map(commandName => { + const definition = this.props.hotKeysData[commandName]; + + return { + commandName, + keys: definition.keys, + label: definition.label, + }; + }); + + this.state = { + hotKeys: localHotKeys, + errorMessages: {}, + }; + + this.onInputKeyDown = this.onInputKeyDown.bind(this); + } + + /** + * Normalizes the keys used in a KeyPress event and returns an array of the + * keys pressed + * + * @param {KeyDownEvent} keyDownEvent + * @returns {string[]} + */ + getKeysPressedArray(keyDownEvent) { + const keysPressedArray = []; + const { ctrlKey, altKey, shiftKey } = keyDownEvent; + + if (ctrlKey && !altKey) { + keysPressedArray.push('CTRL'); + } + + if (shiftKey && !altKey) { + keysPressedArray.push('SHIFT'); + } + + if (altKey && !ctrlKey) { + keysPressedArray.push('ALT'); + } + + return keysPressedArray; + } + + getConflictingCommand(currentToolKey, hotKeyCommand) { + return Object.keys(this.state.hotKeys).find(tool => { + const value = this.state.hotKeys[tool].command; + return value && value === hotKeyCommand && tool !== currentToolKey; + }); + } + + /** + * + * @param {String} commandName + * @param {KeyDownEvent} keyDownEvent + * @param {Boolean} [displayPressedKey=false] + */ + updateInputText(commandName, keyDownEvent, displayPressedKey = false) { + const pressedKeys = this.getKeysPressedArray(keyDownEvent); + + if (displayPressedKey) { + const specialKeyName = specialKeys[keyDownEvent.which]; + const keyName = + specialKeyName || + keyDownEvent.key || + String.fromCharCode(keyDownEvent.keyCode); + pressedKeys.push(keyName.toUpperCase()); + } + + this.updateHotKeysState(commandName, pressedKeys.join('+')); + } + + updateHotKeysState(commandName, keys) { + const hotKeys = this.state.hotKeys; + const hotKeyIndex = this.state.hotKeys.findIndex( + x => x.commandName === commandName + ); + hotKeys[hotKeyIndex].keys[0] = keys; + this.setState({ hotKeys }); + } + + updateErrorsState(toolKey, errorMessage) { + const errorMessages = this.state.errorMessages; + errorMessages[toolKey] = errorMessage; + this.setState({ errorMessages }); + } + + onInputKeyDown(event, commandName) { + // Prevent ESC key from propagating and closing the modal + if (event.key === 'Escape') { + event.stopPropagation(); + } + + if (allowedKeys.includes(event.keyCode)) { + this.updateInputText(commandName, event, true); + } else { + this.updateInputText(commandName, event, false); + } + + event.preventDefault(); + } + + onChange(event, commandName) { + if (event.ctrlKey || event.altKey || event.shiftKey) { + return; + } + + const hotKeyIndex = this.state.hotKeys.findIndex( + x => x.commandName === commandName + ); + const hotKey = this.state.hotKeys[hotKeyIndex]; + const keys = hotKey.keys[0]; + const pressedKeys = keys.split('+'); + const lastPressedKey = pressedKeys[pressedKeys.length - 1].toUpperCase(); + + // clear the prior errors + this.setState({ errorMessages: {} }, () => { + // Check if it has a valid modifier + const isModifier = ['CTRL', 'ALT', 'SHIFT'].includes(lastPressedKey); + if (isModifier) { + this.updateHotKeysState(commandName, ''); + this.updateErrorsState( + commandName, + "It's not possible to define only modifier keys (CTRL, ALT and SHIFT) as a shortcut" + ); + return; + } + + /* + * Check if it has some conflict + */ + const conflictedCommandKey = this.getConflictingCommand( + commandName, + keys + ); + if (conflictedCommandKey) { + const conflictedCommand = this.state.hotKeys[conflictedCommandKey]; + + this.updateErrorsState( + commandName, + `"${conflictedCommand.label}" is already using the "${ + conflictedCommand.command + }" shortcut.` + ); + this.updateErrorsState(conflictedCommandKey, ''); + this.updateHotKeysState(commandName, ''); + return; + } + + /* + * Check if is a valid combination + */ + const modifierCommand = pressedKeys + .slice(0, pressedKeys.length - 1) + .join('+') + .toUpperCase(); + + const disallowedCombination = disallowedCombinations[modifierCommand]; + const hasDisallowedCombinations = disallowedCombination + ? disallowedCombination.includes(lastPressedKey) + : false; + + if (hasDisallowedCombinations) { + this.updateHotKeysState(commandName, ''); + this.updateErrorsState( + commandName, + "It's not possible to define only modifier keys (CTRL, ALT and SHIFT) as a shortcut" + ); + return; + } + }); + } + + renderRow({ commandName, label, keys }) { + return ( + + {label} + + + + + ); + } + + render() { + const halfWayThough = Math.floor(this.state.hotKeys.length / 2); + const firstHalfHotkeys = this.state.hotKeys.slice(0, halfWayThough); + const secondHalfHotkeys = this.state.hotKeys.slice( + halfWayThough, + this.state.hotKeys.length + ); + + return ( +
    + {/* */} +
    + + + + + + + + + {firstHalfHotkeys.map(hotkeyDefinition => + this.renderRow(hotkeyDefinition) + )} + +
    FunctionShortcut
    +
    + {/* */} +
    + + + + + + + + + {secondHalfHotkeys.map(hotkeyDefinition => + this.renderRow(hotkeyDefinition) + )} + +
    FunctionShortcut
    +
    +
    + ); + } +} diff --git a/platform/ui/src/components/userPreferencesModal/HotKeysPreferences.styl b/platform/ui/src/components/userPreferencesModal/HotKeysPreferences.styl new file mode 100644 index 00000000000..98db2e52ee0 --- /dev/null +++ b/platform/ui/src/components/userPreferencesModal/HotKeysPreferences.styl @@ -0,0 +1,14 @@ +.HotKeysPreferences + display: flex; + margin-right: -15px; + margin-left: -15px; + + .column + width: 50%; + padding-right: 15px; + padding-left: 15px; + + .column-full + width: 100%; + padding-right: 15px; + padding-left: 15px; diff --git a/platform/ui/src/components/userPreferencesModal/UserPreferences.js b/platform/ui/src/components/userPreferencesModal/UserPreferences.js new file mode 100644 index 00000000000..584137e4cc6 --- /dev/null +++ b/platform/ui/src/components/userPreferencesModal/UserPreferences.js @@ -0,0 +1,118 @@ +import React, { Component } from 'react'; +import PropTypes from 'prop-types'; + +import { HotKeysPreferences } from './HotKeysPreferences'; +import { WindowLevelPreferences } from './WindowLevelPreferences'; +import { GeneralPreferences } from './GeneralPreferences'; +import './UserPreferences.styl'; + +export class UserPreferences extends Component { + static defaultProps = { + hotKeysData: {}, + windowLevelData: {}, + generalData: {}, + }; + + // TODO: Make this more generic. Tabs should not be restricted to these entries + static propTypes = { + hotKeysData: PropTypes.object.isRequired, + windowLevelData: PropTypes.object.isRequired, + generalData: PropTypes.object.isRequired, + }; + + state = { + tabIndex: 0, + }; + + tabClick(tabIndex) { + this.setState({ tabIndex }); + } + + renderHotkeysTab() { + return ( +
    +
    + +
    +
    + ); + } + + renderWindowLevelTab() { + if (this.props.windowLevelData) { + return ( +
    +
    + +
    +
    + ); + } + } + + renderGeneralTab() { + return ( +
    +
    + +
    +
    + ); + } + + renderTabs(tabIndex) { + switch (tabIndex) { + case 0: + return this.renderHotkeysTab(); + case 1: + return this.renderWindowLevelTab(); + case 2: + return this.renderGeneralTab(); + + default: + break; + } + } + + getTabClass(tabIndex) { + return tabIndex === this.state.tabIndex ? 'nav-link active' : 'nav-link'; + } + + render() { + return ( +
    +
    +
      +
    • { + this.tabClick(0); + }} + className={this.getTabClass(0)} + > + +
    • +
    • { + this.tabClick(1); + }} + className={this.getTabClass(1)} + > + +
    • +
    • { + this.tabClick(2); + }} + className={this.getTabClass(2)} + > + +
    • +
    +
    + {this.renderTabs(this.state.tabIndex)} +
    + ); + } +} diff --git a/platform/ui/src/components/userPreferencesModal/UserPreferences.styl b/platform/ui/src/components/userPreferencesModal/UserPreferences.styl new file mode 100644 index 00000000000..f62578e8847 --- /dev/null +++ b/platform/ui/src/components/userPreferencesModal/UserPreferences.styl @@ -0,0 +1,25 @@ +@import './../../design/styles/common/form.styl' +@import './../../design/styles/common/navbar.styl' +@import './../../design/styles/common/state.styl' +@import './../../design/styles/common/global.styl' + +.modal-body + overflow: hidden + +.errorMessage + color: var(--state-error-text) + font-size: 10px + text-transform: uppercase; + +.form-content + border-bottom: 3px solid var(--primary-background-color) + margin-bottom: 20px + margin-left: -22px + margin-right: -22px + max-height: 70vh + overflow-y: auto + padding: 22px + min-height: 500px + +.popover + width: 300px diff --git a/platform/ui/src/components/userPreferencesModal/UserPreferencesModal.js b/platform/ui/src/components/userPreferencesModal/UserPreferencesModal.js new file mode 100644 index 00000000000..0b54504dd78 --- /dev/null +++ b/platform/ui/src/components/userPreferencesModal/UserPreferencesModal.js @@ -0,0 +1,107 @@ +import './UserPreferencesModal.styl'; + +import React, { Component } from 'react'; +import PropTypes from 'prop-types'; +import Modal from 'react-bootstrap-modal'; +import { withTranslation } from '../../utils/LanguageProvider'; + +import 'react-bootstrap-modal/lib/css/rbm-patch.css'; +import cloneDeep from 'lodash.clonedeep'; +import isEqual from 'lodash.isequal'; +import { UserPreferences } from './UserPreferences'; + +// TODO: Is this the only component importing these? +import './../../design/styles/common/modal.styl'; + +class UserPreferencesModal extends Component { + // TODO: Make this component more generic to allow things other than W/L and hotkeys... + static propTypes = { + isOpen: PropTypes.bool.isRequired, + onCancel: PropTypes.func, + onSave: PropTypes.func, + onResetToDefaults: PropTypes.func, + windowLevelData: PropTypes.object, + hotKeysData: PropTypes.object, + t: PropTypes.func, + }; + + constructor(props) { + super(props); + + this.state = { + windowLevelData: cloneDeep(props.windowLevelData), + hotKeysData: cloneDeep(props.hotKeysData), + }; + } + + static defaultProps = { + isOpen: false, + }; + + save = () => { + this.props.onSave({ + windowLevelData: this.state.windowLevelData, + hotKeysData: this.state.hotKeysData, + }); + }; + + componentDidUpdate(prev, next) { + const newStateData = {}; + + if (!isEqual(prev.windowLevelData, next.windowLevelData)) { + newStateData.windowLevelData = prev.windowLevelData; + } + + if (!isEqual(prev.hotKeysData, next.hotKeysData)) { + newStateData.hotKeysData = prev.hotKeysData; + } + + if (newStateData.hotKeysData || newStateData.windowLevelData) { + this.setState(newStateData); + } + } + + render() { + return ( + + + {this.props.t('User Preferences')} + + + + + + + + {this.props.t('Cancel')} + + + + + ); + } +} + +const connectedComponent = withTranslation('UserPreferencesModal')( + UserPreferencesModal +); +export { connectedComponent as UserPreferencesModal }; +export default connectedComponent; diff --git a/platform/ui/src/components/userPreferencesModal/UserPreferencesModal.styl b/platform/ui/src/components/userPreferencesModal/UserPreferencesModal.styl new file mode 100644 index 00000000000..0dea62f53bd --- /dev/null +++ b/platform/ui/src/components/userPreferencesModal/UserPreferencesModal.styl @@ -0,0 +1,17 @@ +@import './../../design/styles/common/navbar.styl' +@import './../../design/styles/common/global.styl' +@import './../../design/styles/common/modal.styl' +@import './../../design/styles/common/button.styl' + +.close + float: right; + font-size: 21px; + font-weight: 700; + line-height: 1; + color: #000; + text-shadow: 0 1px 0 #fff; + opacity: .2; + +.ModalHeader + ol, ul + margin-top: 0; diff --git a/platform/ui/src/components/userPreferencesModal/WindowLevelPreferences.js b/platform/ui/src/components/userPreferencesModal/WindowLevelPreferences.js new file mode 100644 index 00000000000..45e931b3e69 --- /dev/null +++ b/platform/ui/src/components/userPreferencesModal/WindowLevelPreferences.js @@ -0,0 +1,94 @@ +import React, { Component } from 'react'; +import PropTypes from 'prop-types'; +import './WindowLevelPreferences.styl'; + +export class WindowLevelPreferences extends Component { + constructor(props) { + super(props); + + this.state = { + data: this.props.windowLevelData, + }; + } + + static propTypes = { + windowLevelData: PropTypes.object.isRequired, + onChange: PropTypes.func, + }; + + onChange(event, key, field) { + const data = this.state.data; + const entry = data[key]; + entry[field] = event.target.value; + this.setState({ data }); + + if (this.props.onChange) { + this.props.onChange(data); + } + } + + getWLPreferencesRows(key) { + const entry = this.state.data[key]; + return ( + + {key} + + + + + + + + + + + ); + } + + render() { + return ( + + + + + + + + + + + {Object.keys(this.state.data).map(key => { + return this.getWLPreferencesRows(key); + })} + +
    PresetDescriptionWindowLevel
    + ); + } +} diff --git a/platform/ui/src/components/userPreferencesModal/WindowLevelPreferences.styl b/platform/ui/src/components/userPreferencesModal/WindowLevelPreferences.styl new file mode 100644 index 00000000000..78864357bb9 --- /dev/null +++ b/platform/ui/src/components/userPreferencesModal/WindowLevelPreferences.styl @@ -0,0 +1,4 @@ +@import './UserPreferences.styl' + +.presetIndex + padding: 0px 10px 0px 10px \ No newline at end of file diff --git a/platform/ui/src/components/userPreferencesModal/__docs__/about.mdx b/platform/ui/src/components/userPreferencesModal/__docs__/about.mdx new file mode 100644 index 00000000000..819648ff013 --- /dev/null +++ b/platform/ui/src/components/userPreferencesModal/__docs__/about.mdx @@ -0,0 +1,42 @@ +--- +name: About Modal +menu: Components +route: /components/about-modal +--- + +import { Playground, Props } from 'docz' +import { State } from 'react-powerplug' +import { AboutModal } from './../index.js' + +# About Modal + +## Basic usage + + + + + {({ state, setState }) => ( + + + setState({ isOpen: false })} + /> + + )} + + + + + +## API + + diff --git a/platform/ui/src/components/userPreferencesModal/__docs__/generalDefaults.js b/platform/ui/src/components/userPreferencesModal/__docs__/generalDefaults.js new file mode 100644 index 00000000000..40f7e3387de --- /dev/null +++ b/platform/ui/src/components/userPreferencesModal/__docs__/generalDefaults.js @@ -0,0 +1,14 @@ +export default { + currentLanguage: 'en', + languages: [ + { + value: 'en', + label: 'English', + }, + { + value: 'es', + label: 'Spanish', + }, + ], + onChange: language => {}, +}; diff --git a/platform/ui/src/components/userPreferencesModal/__docs__/hotkeyDefaults.js b/platform/ui/src/components/userPreferencesModal/__docs__/hotkeyDefaults.js new file mode 100644 index 00000000000..1c839997701 --- /dev/null +++ b/platform/ui/src/components/userPreferencesModal/__docs__/hotkeyDefaults.js @@ -0,0 +1,80 @@ +export default { + defaultTool: { label: 'Default Tool', keys: ['ESC'], column: 0 }, + zoom: { label: 'Zoom', keys: ['Z'], column: 0 }, + wwwc: { label: 'W/L', keys: ['W'], column: 0 }, + pan: { label: 'Pan', keys: ['P'], column: 0 }, + angle: { label: 'Angle measurement', keys: ['A'], column: 0 }, + stackScroll: { label: 'Scroll stack', keys: ['S'], column: 0 }, + magnify: { label: 'Magnify', keys: ['M'], column: 0 }, + length: { label: 'Length measurement', keys: [''], column: 0 }, + annotate: { label: 'Annotate', keys: [''], column: 0 }, + dragProbe: { label: 'Pixel probe', keys: [''], column: 0 }, + ellipticalRoi: { label: 'Elliptical ROI', keys: [''], column: 0 }, + rectangleRoi: { label: 'Rectangle ROI', keys: [''], column: 0 }, + + // Viewport hotkeys + flipH: { label: 'Flip Horizontally', keys: ['H'], column: 0 }, + flipV: { label: 'Flip Vertically', keys: ['V'], column: 0 }, + rotateR: { label: 'Rotate Right', keys: ['R'], column: 0 }, + rotateL: { label: 'Rotate Left', keys: ['L'], column: 0 }, + invert: { label: 'Invert', keys: ['I'], column: 0 }, + zoomIn: { label: 'Zoom In', keys: [''], column: 0 }, + zoomOut: { label: 'Zoom Out', keys: [''], column: 0 }, + zoomToFit: { label: 'Zoom to Fit', keys: [''], column: 0 }, + resetViewport: { label: 'Reset', keys: [''], column: 0 }, + clearTools: { label: 'Clear Tools', keys: [''], column: 0 }, + + // 2nd column + + // Viewport navigation hotkeys + scrollDown: { label: 'Scroll Down', keys: ['DOWN'], column: 1 }, + scrollUp: { label: 'Scroll Up', keys: ['UP'], column: 1 }, + scrollLastImage: { label: 'Scroll to Last Image', keys: ['END'], column: 1 }, + scrollFirstImage: { + label: 'Scroll to First Image', + keys: ['HOME'], + column: 1, + }, + previousDisplaySet: { + label: 'Previous Series', + keys: ['PAGEUP'], + column: 1, + }, + nextDisplaySet: { label: 'Next Series', keys: ['PAGEDOWN'], column: 1 }, + nextPanel: { label: 'Next Image Viewport', keys: ['RIGHT'], column: 1 }, + previousPanel: { + label: 'Previous Image Viewport', + keys: ['LEFT'], + column: 1, + }, + + // Miscellaneous hotkeys + toggleOverlayTags: { + label: 'Toggle Image Info Overlay', + keys: ['O'], + column: 1, + }, + toggleCinePlay: { label: 'Play/Pause Cine', keys: ['SPACE'], column: 1 }, + toggleCineDialog: { + label: 'Show/Hide Cine Controls', + keys: [''], + column: 1, + }, + toggleDownloadDialog: { + label: 'Show/Hide Download Dialog', + keys: [''], + column: 1, + }, + + // Preset hotkeys + WLPreset0: { label: 'W/L Preset 0 (Soft Tissue)', keys: ['1'], column: 1 }, + WLPreset1: { label: 'W/L Preset 1 (Lung)', keys: ['2'], column: 1 }, + WLPreset2: { label: 'W/L Preset 2 (Liver)', keys: ['3'], column: 1 }, + WLPreset3: { label: 'W/L Preset 3 (Bone)', keys: ['4'], column: 1 }, + WLPreset4: { label: 'W/L Preset 4 (Brain)', keys: ['5'], column: 1 }, + WLPreset5: { label: 'W/L Preset 5', keys: ['6'], column: 1 }, + WLPreset6: { label: 'W/L Preset 6', keys: ['7'], column: 1 }, + WLPreset7: { label: 'W/L Preset 7', keys: ['8'], column: 1 }, + WLPreset8: { label: 'W/L Preset 8', keys: ['9'], column: 1 }, + WLPreset9: { label: 'W/L Preset 0', keys: ['0'], column: 1 }, +}; diff --git a/platform/ui/src/components/userPreferencesModal/__docs__/userPreferences.mdx b/platform/ui/src/components/userPreferencesModal/__docs__/userPreferences.mdx new file mode 100644 index 00000000000..60b5ff69f8b --- /dev/null +++ b/platform/ui/src/components/userPreferencesModal/__docs__/userPreferences.mdx @@ -0,0 +1,54 @@ +--- +name: User Preferences Modal +menu: Components +route: /components/user-preferences-modal +--- + +import { Playground, Props } from 'docz' +import { State } from 'react-powerplug' +import { UserPreferencesModal } from './../index.js' +import NameSpace from '../../../__docs__/NameSpace' +// +import windowLevelDefaults from './windowLevelDefaults.js' +import hotkeyDefaults from './hotkeyDefaults.js' + +# User Preferences Modal + +## Basic usage + + + + + {({ state, setState }) => ( + + + setState({ isOpen: false })} + onSave={() => alert('on save')} + onResetToDefaults={() => alert('on reset')} + /> + + )} + + + + + +## API + + + +## Translation Namespace + + diff --git a/platform/ui/src/components/userPreferencesModal/__docs__/windowLevelDefaults.js b/platform/ui/src/components/userPreferencesModal/__docs__/windowLevelDefaults.js new file mode 100644 index 00000000000..ba1990c84b4 --- /dev/null +++ b/platform/ui/src/components/userPreferencesModal/__docs__/windowLevelDefaults.js @@ -0,0 +1,13 @@ +export default { + 0: { description: 'Soft tissue', window: 400, level: 40 }, + 1: { description: 'Lung', window: 1500, level: -600 }, + 2: { description: 'Liver', window: 150, level: 90 }, + 3: { description: 'Bone', window: 2500, level: 480 }, + 4: { description: 'Brain', window: 80, level: 40 }, + 5: { description: '', window: '', level: '' }, + 6: { description: '', window: '', level: '' }, + 7: { description: '', window: '', level: '' }, + 8: { description: '', window: '', level: '' }, + 9: { description: '', window: '', level: '' }, + 10: { description: '', window: '', level: '' }, +}; diff --git a/platform/ui/src/components/userPreferencesModal/hotKeysConfig.js b/platform/ui/src/components/userPreferencesModal/hotKeysConfig.js new file mode 100644 index 00000000000..cb3cd51f8c5 --- /dev/null +++ b/platform/ui/src/components/userPreferencesModal/hotKeysConfig.js @@ -0,0 +1,100 @@ +const range = (start, end) => { + return new Array(end - start).fill().map((d, i) => i + start); +}; + +export const disallowedCombinations = { + '': [], + ALT: ['SPACE'], + SHIFT: [], + CTRL: [ + 'F4', + 'F5', + 'F11', + 'W', + 'R', + 'T', + 'O', + 'P', + 'A', + 'D', + 'F', + 'G', + 'H', + 'J', + 'L', + 'Z', + 'X', + 'C', + 'V', + 'B', + 'N', + 'PAGEDOWN', + 'PAGEUP', + ], + 'CTRL+SHIFT': ['Q', 'W', 'R', 'T', 'P', 'A', 'H', 'V', 'B', 'N'], +}; + +export const allowedKeys = [ + ...[8, 13, 27, 32, 46], // BACKSPACE, ENTER, ESCAPE, SPACE, DELETE + ...[12, 106, 107, 109, 110, 111], // Numpad keys + ...range(218, 220), // [\] + ...range(185, 190), // ;=,-./ + ...range(111, 131), // F1-F19 + ...range(32, 41), // arrow keys, home/end, pg dn/up + ...range(47, 58), // 0-9 + ...range(64, 91), // A-Z +]; + +export const specialKeys = { + 8: 'backspace', + 9: 'tab', + 13: 'return', + 16: 'shift', + 17: 'ctrl', + 18: 'alt', + 19: 'pause', + 20: 'capslock', + 27: 'esc', + 32: 'space', + 33: 'pageup', + 34: 'pagedown', + 35: 'end', + 36: 'home', + 37: 'left', + 38: 'up', + 39: 'right', + 40: 'down', + 45: 'insert', + 46: 'del', + 96: '0', + 97: '1', + 98: '2', + 99: '3', + 100: '4', + 101: '5', + 102: '6', + 103: '7', + 104: '8', + 105: '9', + 106: '*', + 107: '+', + 109: '-', + 110: '.', + 111: '/', + 112: 'f1', + 113: 'f2', + 114: 'f3', + 115: 'f4', + 116: 'f5', + 117: 'f6', + 118: 'f7', + 119: 'f8', + 120: 'f9', + 121: 'f10', + 122: 'f11', + 123: 'f12', + 144: 'numlock', + 145: 'scroll', + 191: '/', + 224: 'meta', +}; diff --git a/platform/ui/src/components/userPreferencesModal/index.js b/platform/ui/src/components/userPreferencesModal/index.js new file mode 100644 index 00000000000..fa7580d5e0a --- /dev/null +++ b/platform/ui/src/components/userPreferencesModal/index.js @@ -0,0 +1,4 @@ +export { UserPreferences } from './UserPreferences.js'; +export { AboutModal } from './AboutModal.js'; +export { UserPreferencesModal } from './UserPreferencesModal.js'; +export { GeneralPreferences } from './GeneralPreferences.js'; diff --git a/platform/ui/src/design/styles/common/button.styl b/platform/ui/src/design/styles/common/button.styl new file mode 100644 index 00000000000..ea3f0b1eb60 --- /dev/null +++ b/platform/ui/src/design/styles/common/button.styl @@ -0,0 +1,53 @@ +.btn-danger + color: #fff; + background-color: #d9534f; + border-color: #d43f3a; + +.btn-primary + color: #fff; + background-color: #337ab7; + border-color: #2e6da4; + +.btn-default + color: #333; + background-color: #fff; + border-color: #ccc; + +.btn + display: inline-block; + padding: 6px 12px; + margin-bottom: 0; + font-size: 14px; + font-weight: 400; + line-height: 1.42857143; + text-align: center; + white-space: nowrap; + vertical-align: middle; + -ms-touch-action: manipulation; + touch-action: manipulation; + cursor: pointer; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + background-image: none; + border: 1px solid transparent; + border-radius: 4px; + +.btn.disabled, .btn[disabled], fieldset[disabled] .btn + cursor: not-allowed; + -webkit-box-shadow: none; + box-shadow: none; + opacity: .65; + +button.close + -webkit-appearance: none; + padding: 0; + cursor: pointer; + background: 0 0; + border: 0; + +.btn-group, .btn-group-vertical + position: relative; + display: inline-block; + vertical-align: middle; diff --git a/platform/ui/src/design/styles/common/form.styl b/platform/ui/src/design/styles/common/form.styl new file mode 100644 index 00000000000..230c7b4d4da --- /dev/null +++ b/platform/ui/src/design/styles/common/form.styl @@ -0,0 +1,121 @@ +.form-themed + + table + color: var(--text-primary-color) + + th, td + font-size: 15px + font-weight: normal + + th + line-height: 60px + + td + line-height: 18px + padding: 0; + + // TODO: imported this from merged-styles.css + .p-r-1 + padding-right: 1rem !important; + + label + margin-bottom: 5px + // end TODO + + label.wrapperLabel + cursor: pointer + + label.wrapperLabel:not(.checkboxLabel) + cursor: pointer + display: flex + flex-direction: column + + .wrapperText + display: block + order: -1 + transition(color 0.3s ease) + + .btn, input[type=text], input[type=password], input[type=number] + &[disabled], &.disabled + &, &:hover, &:active + background-color: var(--ui-gray-darker) + border-color: var(--ui-gray-light) + color: var(--text-primary-color) + + & + .wrapperText + color: var(--text-primary-color) + cursor: auto + + input[type=text], input[type=password], input[type=number] + background-color: var(--ui-gray) + border-color: var(--ui-border-color) + color: var(--text-primary-color) + font-weight: normal + transition(background-color 0.3s ease\, border-color 0.3s ease) + + &:active, &:focus + background-color: var(--ui-gray-dark) + border: 2px solid var(--active-color) + box-shadow: none + + & + .wrapperText + color: var(--active-color) + + .btn-primary + background-color: var(--active-color) + border-collapse: var(--ui-border-color-active) + color: var(--ui-text-color-active) + transition(background-color 0.3s ease\, border-color 0.3s ease) + + &:hover, &:active, &:focus, &:focus:active + // TODO: 0.8 opacity + background-color: var(--ui-active-color) + border-collapse: var(--ui-border-color-active) + color: var(--ui-text-color-active) + + .form-control + background-color: #FFFFFF + border: 0 + border-radius(2px) + font-size: 14px + height: 30px + line-height: 16px + padding: 8px 9px 6px + +.form-control + display: block; + width: 100%; + height: 34px; + padding: 6px 12px; + font-size: 14px; + line-height: 1.42857143; + color: #555; + background-color: #fff; + background-image: none; + border: 1px solid #ccc; + border-radius: 4px; + box-shadow: inset 0 1px 1px rgba(0,0,0,.075); + + &:focus + border-color: #66afe9; + outline: 0; + -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102,175,233,.6); + box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102,175,233,.6); + + &::-ms-expand + border: 0; + background-color: transparent; + + &[disabled], + &[readonly], + fieldset[disabled] & + background-color: @input-bg-disabled; + opacity: 1; + + &[disabled], + fieldset[disabled] & + cursor: @cursor-disabled; + +input[type=range] + display: block; + width: 100%; diff --git a/platform/ui/src/design/styles/common/global.styl b/platform/ui/src/design/styles/common/global.styl new file mode 100644 index 00000000000..a0576f86bba --- /dev/null +++ b/platform/ui/src/design/styles/common/global.styl @@ -0,0 +1,84 @@ +* + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + +.full-width + width: 100% + +.full-height + height: 100% + +.flex-h + display: flex + flex-direction: row + +.flex-v + display: flex + flex-direction: column + +.flex-grow + flex-grow: 1 + +.nowrap + white-space: nowrap + +.text-right + text-align: right; + +.text-center + text-align: center; + +.text-left + text-align: left; + +h1 + font-size: 36px; + +h3, h1 + font-family: inherit; + font-weight: 500; + line-height: 1.1; + margin-top: 20px; + margin-bottom: 10px; + +pre + display: block; + padding: 9.5px; + margin: 0 0 10px; + font-size: 13px; + line-height: 1.42857143; + color: #333; + word-break: break-all; + word-wrap: break-word; + background-color: #f5f5f5; + border: 1px solid #ccc; + border-radius: 4px; + +button, input, select, textarea + font-family: inherit; + font-size: inherit; + line-height: inherit; + +.row + margin-right: -15px; + margin-left: -15px; + +.pull-left + float: left!important; + +.pull-right + float: right!important; + +.fade + opacity: 0; + -webkit-transition: opacity .15s linear; + -o-transition: opacity .15s linear; + transition: opacity .15s linear; + +.fade.in + opacity: 1; + +a + color: #337ab7; + text-decoration: none; diff --git a/platform/ui/src/design/styles/common/modal.styl b/platform/ui/src/design/styles/common/modal.styl new file mode 100644 index 00000000000..d409eee320a --- /dev/null +++ b/platform/ui/src/design/styles/common/modal.styl @@ -0,0 +1,202 @@ + +.modal-open + overflow: hidden; + +.modal + overflow: hidden; + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 1050; + -webkit-overflow-scrolling: touch; + outline: 0; + + .modal-dialog + + .modal-content + background-color: var(--ui-gray-darker) + border-color: var(--ui-border-color) + color: var(--text-secondary-color) + border-radius(6px) + border: 0 + + .modal-header, .modal-footer + border-color: var(--ui-border-color) + + .dialog-separator, + .dialog-separator-before, + .dialog-separator-after + position: relative + height: 40px; + + .dialog-separator:before, + .dialog-separator:after, + .dialog-separator-before:before, + .dialog-separator-after:after + background-color: #000000 + box-shadow(-50px 0 0 #000000\, 50px 0 0 #000000) + content: ' ' + display: block + height: 3px + left: 0 + position: absolute + width: 100% + + .dialog-separator:before, + .dialog-separator-before:before + top: -3px + + .dialog-separator:after, + .dialog-separator-after:after + bottom: -3px + + .modal-body + color: var(--text-primary-color) + padding: 16px 22px 0px + position: relative + + ::-webkit-scrollbar { + width: 6px; + background-color: var(--ui-gray-dark); + } + + ::-webkit-scrollbar-thumb { + background-color: var(--ui-gray-light); + border-radius: 5px; + } + + .modal-header + border-bottom-width: 3px + border-bottom-style: solid + border-bottom-color: #000000 + padding: 19px 22px 17px + position: relative + + h4 + color: var(--text-secondary-color) + font-size: 20px + font-weight: 500 + line-height: 24px + padding-right: 24px + + .modal-footer + border-top: 0 + padding-top: 0 + + .card-round + background-color: var(--ui-gray-dark) + border-radius(5px) + padding: 10px + + .modal-header + position: relative + + // When fading in the modal, animate it to slide down + &.fade .modal-dialog + -webkit-transition: transform .3s ease-out; + -o-transition: transform .3s ease-out; + transition: transform .3s ease-out; + -webkit-transform: translate(0,-25%); + -ms-transform: translate(0,-25%); + -o-transform: translate(0,-25%); + transform: translate(0,-25%); + + &.in .modal-dialog + transform: translate(0,0) + +.modal-open .modal + overflow-x: hidden; + overflow-y: auto; + +.modal-dialog + position: relative; + width: auto; + margin: 10px; + +.modal-content + position: relative; + background-color: #fff; + border: 1px solid rgba(0,0,0,.2); + border-radius: 6px; + -webkit-box-shadow: 0 3px 9px rgba(0,0,0,.5); + box-shadow: 0 3px 9px rgba(0,0,0,.5); + background-clip: padding-box; + outline: 0; + +.modal-backdrop + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 1050; + background-color: #fff; + + &.fade + opacity: 0; + + &.in + opacity: 0; + +.modal-header + padding: 15px; + border-bottom: 1px solid #e5e5e5; + +.modal-header .close + margin-top: -2px; + +.modal-title + margin: 0; + line-height: 1.42857143; + +.modal-body + position: relative; + padding: 15px; + +.modal-footer + padding: 15px; + text-align: right; + border-top: 1px solid #e5e5e5; + + .btn+.btn + margin-left: 5px; + margin-bottom: 0; + + .btn-group .btn+.btn + margin-left: -1px; + + .btn-block+.btn-block + margin-left: 0; + +.modal-scrollbar-measure + position: absolute; + top: -9999px; + width: 50px; + height: 50px; + overflow: scroll; + +@media (min-width: 768px) + .modal-dialog + width: 600px; + margin: 30px auto; + + .modal-content + -webkit-box-shadow: 0 5px 15px rgba(0,0,0,.5); + box-shadow: 0 5px 15px rgba(0,0,0,.5); + +@media (min-width: 992px) + .modal-lg + width: 900px; + +.button-close, .modal-dialog button.close + color: var(--text-secondary-color) + height: 25px + opacity: 1 + overflow: hidden + text-align: center + text-shadow: none + width: 25px + font-size:25px + font-weight: lighter diff --git a/platform/ui/src/design/styles/common/navbar.styl b/platform/ui/src/design/styles/common/navbar.styl new file mode 100644 index 00000000000..dda831789f2 --- /dev/null +++ b/platform/ui/src/design/styles/common/navbar.styl @@ -0,0 +1,57 @@ +.nav-tabs + border-bottom: 0 + margin-bottom: 3px + position: relative + z-index: 1 + + :hover + cursor: pointer + + &>li + font-size: 14px + font-weight: normal + height: 40px + line-height: 40px + margin-bottom: 0 + + &>button + display: block + width: 100% + line-height: inherit + margin: 0 + height: inherit + padding: 0 10px 0 10px + outline: none + + &:after + background-color: transparent + bottom: -3px + content: ' ' + display: block + height: 3px + transition(background-color 0.3s ease) + width: 100% + + &>button, &.active>button + &, &:hover, &:active, &:focus + color: var(--active-color) + background-color: transparent + border: 0 + + &.active>button + font-weight: bold + + &:after + background-color: var(--active-color) + +.nav + padding-left: 0; + list-style: none; + + > li + position: relative; + display: block; + + > li + float: left; + margin-bottom: -1px; diff --git a/platform/ui/src/design/styles/common/state.styl b/platform/ui/src/design/styles/common/state.styl new file mode 100644 index 00000000000..8c438f741f4 --- /dev/null +++ b/platform/ui/src/design/styles/common/state.styl @@ -0,0 +1,25 @@ +.form-themed .state-error, .state-error + + &.wrapperLabel input + .wrapperText + color: var(--state-error-text) + + &+.tooltip + + .tooltip-inner + color: white + background-color: var(--state-error-border) + + &.top .tooltip-arrow + border-top-color: var(--state-error-border) + &.right .tooltip-arrow + border-right-color: var(--state-error-border) + &.bottom .tooltip-arrow + border-bottom-color: var(--state-error-border) + &.left .tooltip-arrow + border-left-color: var(--state-error-border) + + + &:not(.component-group) + &.form-control, .form-control + background-color: var(--state-error-border) + border-color: var(--state-error-border) diff --git a/platform/ui/src/design/styles/common/table.styl b/platform/ui/src/design/styles/common/table.styl new file mode 100644 index 00000000000..26485d4e737 --- /dev/null +++ b/platform/ui/src/design/styles/common/table.styl @@ -0,0 +1,15 @@ +.table-responsive + min-height: .01%; + overflow-x: auto; + +.table + width: 100%; + max-width: 100%; + margin-bottom: 20px; + +table + border-spacing: 0; + border-collapse: collapse; + +th + text-align: left; diff --git a/platform/ui/src/elements/Icon/Icon.js b/platform/ui/src/elements/Icon/Icon.js new file mode 100644 index 00000000000..5791fee687a --- /dev/null +++ b/platform/ui/src/elements/Icon/Icon.js @@ -0,0 +1,15 @@ +import './Icon.styl'; + +import PropTypes from 'prop-types'; +import getIcon from './getIcon.js'; + +const Icon = props => { + return getIcon(props.name, props); +}; + +Icon.propTypes = { + /** The string name of the icon to display */ + name: PropTypes.string.isRequired, +}; + +export default Icon; diff --git a/platform/ui/src/elements/Icon/Icon.styl b/platform/ui/src/elements/Icon/Icon.styl new file mode 100644 index 00000000000..2d7949a0e87 --- /dev/null +++ b/platform/ui/src/elements/Icon/Icon.styl @@ -0,0 +1,7 @@ +.icon-pulse + fa-spin 1s infinite steps(8) + +@keyframes fa-spin{ + 0%{ transform:rotate(0deg) } + to{ transform:rotate(1turn) } +} diff --git a/platform/ui/src/elements/Icon/__docs__/icon.mdx b/platform/ui/src/elements/Icon/__docs__/icon.mdx new file mode 100644 index 00000000000..c5b8f07a33e --- /dev/null +++ b/platform/ui/src/elements/Icon/__docs__/icon.mdx @@ -0,0 +1,84 @@ +--- +name: Icon +menu: Elements +route: /elements/icon +--- + +import { Playground, Props } from 'docz'; +import { State } from 'react-powerplug'; +import { Icon, ICONS } from './../index.js'; + +# Icon + +## Basic usage + + +
    + {Object.keys(ICONS) + .sort() + .map((name, i) => { + return ( + +
    + +
    + {name} +
    +
    +
    + ); + })} +
    +
    + +The `` component inherits the color of its parent, and sizing is based +on its parent's `font-size`. Each icon has an `aria-labelledby` to assist screen +readers. + +We use `airbnb`'s [`babel-plugin-inline-react-svg`][airbnb] to automate +optimizing SVG files with [SVGO][svgo] and to create animatable React SVG +components that can be requested asynchronously. You can configure SVGO's +plugins [by following the advice laid out here][svgo-configure] + +## API + + + +The `Icon` component takes a single prop of `name`, which indicates which Icon +should be displayed. Again, the icon responds to contextual text/font styles. + +## Attribution + +A large number of these icons are from [Font Awesome 5's free set.][fa-license] +Some attribution is likely required, depending on your usage. Sometimes as +little as a comment included side-by-side with the accompanying SVG icon. + + + + +[fa-license]: https://fontawesome.com/license +[airbnb]: https://github.com/airbnb/babel-plugin-inline-react-svg +[svgo]: https://github.com/svg/svgo/ +[svgo-configure]: https://github.com/airbnb/babel-plugin-inline-react-svg/issues/9#issuecomment-310178317) + diff --git a/platform/ui/src/elements/Icon/getIcon.js b/platform/ui/src/elements/Icon/getIcon.js new file mode 100644 index 00000000000..15c85c397e3 --- /dev/null +++ b/platform/ui/src/elements/Icon/getIcon.js @@ -0,0 +1,178 @@ +import React from 'react'; +import adjust from './icons/adjust.svg'; +// Icons +import angleDoubleDown from './icons/angle-double-down.svg'; +import angleDoubleUp from './icons/angle-double-up.svg'; +import angleLeft from './icons/angle-left.svg'; +import arrows from './icons/arrows.svg'; +import arrowsAltH from './icons/arrows-alt-h.svg'; +import arrowsAltV from './icons/arrows-alt-v.svg'; +import bars from './icons/bars.svg'; +import brain from './icons/brain.svg'; +import caretDown from './icons/caret-down.svg'; +import caretUp from './icons/caret-up.svg'; +import check from './icons/check.svg'; +import checkCircle from './icons/check-circle.svg'; +import checkCircleO from './icons/check-circle-o.svg'; +import chevronDown from './icons/chevron-down.svg'; +import circle from './icons/circle.svg'; +import circleNotch from './icons/circle-notch.svg'; +import circleO from './icons/circle-o.svg'; +import cog from './icons/cog.svg'; +import createComment from './icons/create-comment.svg'; +import createScreenCapture from './icons/create-screen-capture.svg'; +import crosshairs from './icons/crosshairs.svg'; +import cube from './icons/cube.svg'; +import d3Rotate from './icons/3d-rotate.svg'; +import database from './icons/database.svg'; +import dotCircle from './icons/dot-circle.svg'; +import edit from './icons/edit.svg'; +import ellipseCircle from './icons/ellipse-circle.svg'; +import ellipseH from './icons/ellipse-h.svg'; +import ellipseV from './icons/ellipse-v.svg'; +import exclamationCircle from './icons/exclamation-circle.svg'; +import exclamationTriangle from './icons/exclamation-triangle.svg'; +import fastBackward from './icons/fast-backward.svg'; +import fastForward from './icons/fast-forward.svg'; +import info from './icons/info.svg'; +import inlineEdit from './icons/inline-edit.svg'; +import level from './icons/level.svg'; +import link from './icons/link.svg'; +import linkCircles from './icons/link-circles.svg'; +import list from './icons/list.svg'; +import liver from './icons/liver.svg'; +import lock from './icons/lock.svg'; +import lockAlt from './icons/lock-alt.svg'; +import lung from './icons/lung.svg'; +import measureNonTarget from './icons/measure-non-target.svg'; +import measureTarget from './icons/measure-target.svg'; +import measureTargetCr from './icons/measure-target-cr.svg'; +import measureTargetNe from './icons/measure-target-ne.svg'; +import measureTargetUn from './icons/measure-target-un.svg'; +import measureTemp from './icons/measure-temp.svg'; +import objectGroup from './icons/object-group.svg'; +import ohifLogo from './icons/ohif-logo.svg'; +import oval from './icons/oval.svg'; +import palette from './icons/palette.svg'; +import play from './icons/play.svg'; +import plus from './icons/plus.svg'; +import powerOff from './icons/power-off.svg'; +import reset from './icons/reset.svg'; +import rotate from './icons/rotate.svg'; +import rotateRight from './icons/rotate-right.svg'; +import search from './icons/search.svg'; +import searchPlus from './icons/search-plus.svg'; +import softTissue from './icons/soft-tissue.svg'; +import sort from './icons/sort.svg'; +import sortDown from './icons/sort-down.svg'; +import sortUp from './icons/sort-up.svg'; +import squareO from './icons/square-o.svg'; +import star from './icons/star.svg'; +import stepBackward from './icons/step-backward.svg'; +import stepForward from './icons/step-forward.svg'; +import stop from './icons/stop.svg'; +import sun from './icons/sun.svg'; +import th from './icons/th.svg'; +import thLarge from './icons/th-large.svg'; +import thList from './icons/th-list.svg'; +import times from './icons/times.svg'; +import trash from './icons/trash.svg'; +import user from './icons/user.svg'; +import youtube from './icons/youtube.svg'; + +const ICONS = { + user, + sort, + th, + star, + 'sort-up': sortUp, + 'sort-down': sortDown, + info, + cube, + crosshairs, + 'dot-circle': dotCircle, + 'angle-left': angleLeft, + '3d-rotate': d3Rotate, + plus, + 'chevron-down': chevronDown, + 'angle-double-down': angleDoubleDown, + 'angle-double-up': angleDoubleUp, + 'arrows-alt-h': arrowsAltH, + 'arrows-alt-v': arrowsAltV, + bars, + 'caret-down': caretDown, + 'caret-up': caretUp, + 'check-circle-o': checkCircleO, + check, + circle, + 'circle-o': circleO, + times, + 'create-comment': createComment, + 'create-screen-capture': createScreenCapture, + edit, + 'fast-backward': fastBackward, + 'fast-forward': fastForward, + 'object-group': objectGroup, + search, + 'power-off': powerOff, + 'inline-edit': inlineEdit, + list, + 'ohif-logo': ohifLogo, + lock, + play, + database, + cog, + 'circle-notch': circleNotch, + 'square-o': squareO, + 'check-circle': checkCircle, + 'lock-alt': lockAlt, + 'step-backward': stepBackward, + 'step-forward': stepForward, + stop, + 'th-large': thLarge, + 'th-list': thList, + sun, + palette, + youtube, + oval, + 'ellipse-h': ellipseH, + 'ellipse-v': ellipseV, + adjust, + level, + 'link-circles': linkCircles, + 'search-plus': searchPlus, + 'measure-non-target': measureNonTarget, + 'measure-target': measureTarget, + 'measure-target-cr': measureTargetCr, + 'measure-target-un': measureTargetUn, + 'measure-target-ne': measureTargetNe, + 'measure-temp': measureTemp, + 'ellipse-circle': ellipseCircle, + arrows, + reset, + rotate, + 'rotate-right': rotateRight, + trash, + 'exclamation-circle': exclamationCircle, + link, + 'exclamation-triangle': exclamationTriangle, + brain, + 'soft-tissue': softTissue, + lung, + liver, +}; + +/** + * Return the matching SVG Icon as a React Component. + * Results in an inlined SVG Element. If there's no match, + * return `null` + */ +export default function getIcon(key, props) { + if (!key || !ICONS[key]) { + return React.createElement('div', null, 'Missing Icon'); + } + + return React.createElement(ICONS[key], props); +} + +export { ICONS }; diff --git a/platform/ui/src/elements/Icon/icons/3d-rotate.svg b/platform/ui/src/elements/Icon/icons/3d-rotate.svg new file mode 100644 index 00000000000..f9d2daadb49 --- /dev/null +++ b/platform/ui/src/elements/Icon/icons/3d-rotate.svg @@ -0,0 +1,13 @@ + + 3D Rotate + + + + diff --git a/platform/ui/src/elements/Icon/icons/adjust.svg b/platform/ui/src/elements/Icon/icons/adjust.svg new file mode 100644 index 00000000000..ae27476444a --- /dev/null +++ b/platform/ui/src/elements/Icon/icons/adjust.svg @@ -0,0 +1,11 @@ + + Adjust + + diff --git a/platform/ui/src/elements/Icon/icons/angle-double-down.svg b/platform/ui/src/elements/Icon/icons/angle-double-down.svg new file mode 100644 index 00000000000..04d9d9fcf54 --- /dev/null +++ b/platform/ui/src/elements/Icon/icons/angle-double-down.svg @@ -0,0 +1,11 @@ + + Angle Double Down + + diff --git a/platform/ui/src/elements/Icon/icons/angle-double-up.svg b/platform/ui/src/elements/Icon/icons/angle-double-up.svg new file mode 100644 index 00000000000..07419bb65ba --- /dev/null +++ b/platform/ui/src/elements/Icon/icons/angle-double-up.svg @@ -0,0 +1,11 @@ + + Angle Double Up + + diff --git a/platform/ui/src/elements/Icon/icons/angle-left.svg b/platform/ui/src/elements/Icon/icons/angle-left.svg new file mode 100644 index 00000000000..15fb36b077c --- /dev/null +++ b/platform/ui/src/elements/Icon/icons/angle-left.svg @@ -0,0 +1,11 @@ + + Angle Left + + diff --git a/platform/ui/src/elements/Icon/icons/arrows-alt-h.svg b/platform/ui/src/elements/Icon/icons/arrows-alt-h.svg new file mode 100644 index 00000000000..c96cb738cf7 --- /dev/null +++ b/platform/ui/src/elements/Icon/icons/arrows-alt-h.svg @@ -0,0 +1,11 @@ + + Arrows Alt H + + diff --git a/platform/ui/src/elements/Icon/icons/arrows-alt-v.svg b/platform/ui/src/elements/Icon/icons/arrows-alt-v.svg new file mode 100644 index 00000000000..f1e777dddf7 --- /dev/null +++ b/platform/ui/src/elements/Icon/icons/arrows-alt-v.svg @@ -0,0 +1,11 @@ + + Arrows Alt V + + diff --git a/platform/ui/src/elements/Icon/icons/arrows.svg b/platform/ui/src/elements/Icon/icons/arrows.svg new file mode 100644 index 00000000000..4aca49cff18 --- /dev/null +++ b/platform/ui/src/elements/Icon/icons/arrows.svg @@ -0,0 +1,22 @@ + + Arrows + + + + + + + + + diff --git a/platform/ui/src/elements/Icon/icons/bars.svg b/platform/ui/src/elements/Icon/icons/bars.svg new file mode 100644 index 00000000000..3b735f90ebb --- /dev/null +++ b/platform/ui/src/elements/Icon/icons/bars.svg @@ -0,0 +1,11 @@ + + Bars + + diff --git a/platform/ui/src/elements/Icon/icons/brain.svg b/platform/ui/src/elements/Icon/icons/brain.svg new file mode 100644 index 00000000000..f03f67ace85 --- /dev/null +++ b/platform/ui/src/elements/Icon/icons/brain.svg @@ -0,0 +1,24 @@ + + Brain + + + + + + + + + + diff --git a/platform/ui/src/elements/Icon/icons/caret-down.svg b/platform/ui/src/elements/Icon/icons/caret-down.svg new file mode 100644 index 00000000000..cdebbd8f5b2 --- /dev/null +++ b/platform/ui/src/elements/Icon/icons/caret-down.svg @@ -0,0 +1,11 @@ + + Caret Down + + diff --git a/platform/ui/src/elements/Icon/icons/caret-up.svg b/platform/ui/src/elements/Icon/icons/caret-up.svg new file mode 100644 index 00000000000..611ca870eee --- /dev/null +++ b/platform/ui/src/elements/Icon/icons/caret-up.svg @@ -0,0 +1,11 @@ + + Caret Up + + diff --git a/platform/ui/src/elements/Icon/icons/check-circle-o.svg b/platform/ui/src/elements/Icon/icons/check-circle-o.svg new file mode 100644 index 00000000000..98b24731985 --- /dev/null +++ b/platform/ui/src/elements/Icon/icons/check-circle-o.svg @@ -0,0 +1,11 @@ + + Check Circle + + diff --git a/platform/ui/src/elements/Icon/icons/check-circle.svg b/platform/ui/src/elements/Icon/icons/check-circle.svg new file mode 100644 index 00000000000..7f54493fe8b --- /dev/null +++ b/platform/ui/src/elements/Icon/icons/check-circle.svg @@ -0,0 +1,11 @@ + + Check Circle + + diff --git a/platform/ui/src/elements/Icon/icons/check.svg b/platform/ui/src/elements/Icon/icons/check.svg new file mode 100644 index 00000000000..22d93a1fb11 --- /dev/null +++ b/platform/ui/src/elements/Icon/icons/check.svg @@ -0,0 +1,11 @@ + + Check + + diff --git a/platform/ui/src/elements/Icon/icons/chevron-down.svg b/platform/ui/src/elements/Icon/icons/chevron-down.svg new file mode 100644 index 00000000000..1c28b051232 --- /dev/null +++ b/platform/ui/src/elements/Icon/icons/chevron-down.svg @@ -0,0 +1,14 @@ + + Chevron Down + + diff --git a/platform/ui/src/elements/Icon/icons/circle-notch.svg b/platform/ui/src/elements/Icon/icons/circle-notch.svg new file mode 100644 index 00000000000..1a9429bdaf5 --- /dev/null +++ b/platform/ui/src/elements/Icon/icons/circle-notch.svg @@ -0,0 +1,11 @@ + + Circle Notch + + diff --git a/platform/ui/src/elements/Icon/icons/circle-o.svg b/platform/ui/src/elements/Icon/icons/circle-o.svg new file mode 100644 index 00000000000..c921f15347e --- /dev/null +++ b/platform/ui/src/elements/Icon/icons/circle-o.svg @@ -0,0 +1,11 @@ + + Circle Outline + + diff --git a/platform/ui/src/elements/Icon/icons/circle.svg b/platform/ui/src/elements/Icon/icons/circle.svg new file mode 100644 index 00000000000..99b9995b3ad --- /dev/null +++ b/platform/ui/src/elements/Icon/icons/circle.svg @@ -0,0 +1,11 @@ + + Circle + + diff --git a/platform/ui/src/elements/Icon/icons/cog.svg b/platform/ui/src/elements/Icon/icons/cog.svg new file mode 100644 index 00000000000..017fc0e6d86 --- /dev/null +++ b/platform/ui/src/elements/Icon/icons/cog.svg @@ -0,0 +1,11 @@ + + Cog + + diff --git a/platform/ui/src/elements/Icon/icons/create-comment.svg b/platform/ui/src/elements/Icon/icons/create-comment.svg new file mode 100644 index 00000000000..aec47a3ae39 --- /dev/null +++ b/platform/ui/src/elements/Icon/icons/create-comment.svg @@ -0,0 +1,12 @@ + + Create Comment + + + diff --git a/platform/ui/src/elements/Icon/icons/create-screen-capture.svg b/platform/ui/src/elements/Icon/icons/create-screen-capture.svg new file mode 100644 index 00000000000..cf7d8433de3 --- /dev/null +++ b/platform/ui/src/elements/Icon/icons/create-screen-capture.svg @@ -0,0 +1,15 @@ + + Create Screen Capture + + + + + + diff --git a/platform/ui/src/elements/Icon/icons/crosshairs.svg b/platform/ui/src/elements/Icon/icons/crosshairs.svg new file mode 100644 index 00000000000..4d53a10420c --- /dev/null +++ b/platform/ui/src/elements/Icon/icons/crosshairs.svg @@ -0,0 +1,15 @@ + + Crosshairs + + + diff --git a/platform/ui/src/elements/Icon/icons/cube.svg b/platform/ui/src/elements/Icon/icons/cube.svg new file mode 100644 index 00000000000..6026cdf6300 --- /dev/null +++ b/platform/ui/src/elements/Icon/icons/cube.svg @@ -0,0 +1,12 @@ + + + Cube + + diff --git a/platform/ui/src/elements/Icon/icons/database.svg b/platform/ui/src/elements/Icon/icons/database.svg new file mode 100644 index 00000000000..323d566e20a --- /dev/null +++ b/platform/ui/src/elements/Icon/icons/database.svg @@ -0,0 +1,11 @@ + + Database + + diff --git a/platform/ui/src/elements/Icon/icons/dot-circle.svg b/platform/ui/src/elements/Icon/icons/dot-circle.svg new file mode 100644 index 00000000000..3533dde76e1 --- /dev/null +++ b/platform/ui/src/elements/Icon/icons/dot-circle.svg @@ -0,0 +1,11 @@ + + Dot Circle + + diff --git a/platform/ui/src/elements/Icon/icons/edit.svg b/platform/ui/src/elements/Icon/icons/edit.svg new file mode 100644 index 00000000000..c7554488df5 --- /dev/null +++ b/platform/ui/src/elements/Icon/icons/edit.svg @@ -0,0 +1,11 @@ + + Edit + + diff --git a/platform/ui/src/elements/Icon/icons/ellipse-circle.svg b/platform/ui/src/elements/Icon/icons/ellipse-circle.svg new file mode 100644 index 00000000000..a0c591c2ba2 --- /dev/null +++ b/platform/ui/src/elements/Icon/icons/ellipse-circle.svg @@ -0,0 +1,11 @@ + + Ellipse Circle + + diff --git a/platform/ui/src/elements/Icon/icons/ellipse-h.svg b/platform/ui/src/elements/Icon/icons/ellipse-h.svg new file mode 100644 index 00000000000..1dbb783316a --- /dev/null +++ b/platform/ui/src/elements/Icon/icons/ellipse-h.svg @@ -0,0 +1,11 @@ + + Ellipse Horizontal + + diff --git a/platform/ui/src/elements/Icon/icons/ellipse-v.svg b/platform/ui/src/elements/Icon/icons/ellipse-v.svg new file mode 100644 index 00000000000..01a0d719a98 --- /dev/null +++ b/platform/ui/src/elements/Icon/icons/ellipse-v.svg @@ -0,0 +1,11 @@ + + Ellipse Vertical + + diff --git a/platform/ui/src/elements/Icon/icons/exclamation-circle.svg b/platform/ui/src/elements/Icon/icons/exclamation-circle.svg new file mode 100644 index 00000000000..f3a1d4146b3 --- /dev/null +++ b/platform/ui/src/elements/Icon/icons/exclamation-circle.svg @@ -0,0 +1,13 @@ + + Exclamation Circle + + diff --git a/platform/ui/src/elements/Icon/icons/exclamation-triangle.svg b/platform/ui/src/elements/Icon/icons/exclamation-triangle.svg new file mode 100644 index 00000000000..65da6f8e822 --- /dev/null +++ b/platform/ui/src/elements/Icon/icons/exclamation-triangle.svg @@ -0,0 +1,11 @@ + + Exclamation Triangle + + diff --git a/platform/ui/src/elements/Icon/icons/fast-backward.svg b/platform/ui/src/elements/Icon/icons/fast-backward.svg new file mode 100644 index 00000000000..c1696b98ff9 --- /dev/null +++ b/platform/ui/src/elements/Icon/icons/fast-backward.svg @@ -0,0 +1,10 @@ + + + diff --git a/platform/ui/src/elements/Icon/icons/fast-forward.svg b/platform/ui/src/elements/Icon/icons/fast-forward.svg new file mode 100644 index 00000000000..cd6bb9b7c01 --- /dev/null +++ b/platform/ui/src/elements/Icon/icons/fast-forward.svg @@ -0,0 +1,10 @@ + + + diff --git a/platform/ui/src/elements/Icon/icons/info.svg b/platform/ui/src/elements/Icon/icons/info.svg new file mode 100644 index 00000000000..9e802a69f78 --- /dev/null +++ b/platform/ui/src/elements/Icon/icons/info.svg @@ -0,0 +1,11 @@ + + Info + + diff --git a/platform/ui/src/elements/Icon/icons/inline-edit.svg b/platform/ui/src/elements/Icon/icons/inline-edit.svg new file mode 100644 index 00000000000..12c111b2c50 --- /dev/null +++ b/platform/ui/src/elements/Icon/icons/inline-edit.svg @@ -0,0 +1,11 @@ + + Inline Edit + + diff --git a/platform/ui/src/elements/Icon/icons/level.svg b/platform/ui/src/elements/Icon/icons/level.svg new file mode 100644 index 00000000000..c79ffc2f6db --- /dev/null +++ b/platform/ui/src/elements/Icon/icons/level.svg @@ -0,0 +1,13 @@ + + Level + + + diff --git a/platform/ui/src/elements/Icon/icons/link-circles.svg b/platform/ui/src/elements/Icon/icons/link-circles.svg new file mode 100644 index 00000000000..fd980320a5d --- /dev/null +++ b/platform/ui/src/elements/Icon/icons/link-circles.svg @@ -0,0 +1,15 @@ + + Link Circles + + + + + diff --git a/platform/ui/src/elements/Icon/icons/link.svg b/platform/ui/src/elements/Icon/icons/link.svg new file mode 100644 index 00000000000..28faa4853f4 --- /dev/null +++ b/platform/ui/src/elements/Icon/icons/link.svg @@ -0,0 +1,12 @@ + + Link + + + diff --git a/platform/ui/src/elements/Icon/icons/list.svg b/platform/ui/src/elements/Icon/icons/list.svg new file mode 100644 index 00000000000..15e7a6c953e --- /dev/null +++ b/platform/ui/src/elements/Icon/icons/list.svg @@ -0,0 +1,11 @@ + + List + + diff --git a/platform/ui/src/elements/Icon/icons/liver.svg b/platform/ui/src/elements/Icon/icons/liver.svg new file mode 100644 index 00000000000..a099709f499 --- /dev/null +++ b/platform/ui/src/elements/Icon/icons/liver.svg @@ -0,0 +1,16 @@ + + Liver + + + + diff --git a/platform/ui/src/elements/Icon/icons/lock-alt.svg b/platform/ui/src/elements/Icon/icons/lock-alt.svg new file mode 100644 index 00000000000..570a16de6af --- /dev/null +++ b/platform/ui/src/elements/Icon/icons/lock-alt.svg @@ -0,0 +1,11 @@ + + Lock + + diff --git a/platform/ui/src/elements/Icon/icons/lock.svg b/platform/ui/src/elements/Icon/icons/lock.svg new file mode 100644 index 00000000000..6a43ae317db --- /dev/null +++ b/platform/ui/src/elements/Icon/icons/lock.svg @@ -0,0 +1,11 @@ + + Lock + + diff --git a/platform/ui/src/elements/Icon/icons/lung.svg b/platform/ui/src/elements/Icon/icons/lung.svg new file mode 100644 index 00000000000..2de91333c40 --- /dev/null +++ b/platform/ui/src/elements/Icon/icons/lung.svg @@ -0,0 +1,25 @@ + + Lung + + + + + + + diff --git a/platform/ui/src/elements/Icon/icons/measure-non-target.svg b/platform/ui/src/elements/Icon/icons/measure-non-target.svg new file mode 100644 index 00000000000..6c6c55f6103 --- /dev/null +++ b/platform/ui/src/elements/Icon/icons/measure-non-target.svg @@ -0,0 +1,29 @@ + + Measure Non-Target + + + + diff --git a/platform/ui/src/elements/Icon/icons/measure-target-cr.svg b/platform/ui/src/elements/Icon/icons/measure-target-cr.svg new file mode 100644 index 00000000000..474136ac76c --- /dev/null +++ b/platform/ui/src/elements/Icon/icons/measure-target-cr.svg @@ -0,0 +1,23 @@ + + Measure Target CR + + CR + + + diff --git a/platform/ui/src/elements/Icon/icons/measure-target-ne.svg b/platform/ui/src/elements/Icon/icons/measure-target-ne.svg new file mode 100644 index 00000000000..492a880e790 --- /dev/null +++ b/platform/ui/src/elements/Icon/icons/measure-target-ne.svg @@ -0,0 +1,16 @@ + + Measure Target NE + NE + + diff --git a/platform/ui/src/elements/Icon/icons/measure-target-un.svg b/platform/ui/src/elements/Icon/icons/measure-target-un.svg new file mode 100644 index 00000000000..5ba5eb223b5 --- /dev/null +++ b/platform/ui/src/elements/Icon/icons/measure-target-un.svg @@ -0,0 +1,23 @@ + + Measure Target UN + + UN + + + diff --git a/platform/ui/src/elements/Icon/icons/measure-target.svg b/platform/ui/src/elements/Icon/icons/measure-target.svg new file mode 100644 index 00000000000..19596906a5e --- /dev/null +++ b/platform/ui/src/elements/Icon/icons/measure-target.svg @@ -0,0 +1,13 @@ + + Measure Target + + + diff --git a/platform/ui/src/elements/Icon/icons/measure-temp.svg b/platform/ui/src/elements/Icon/icons/measure-temp.svg new file mode 100644 index 00000000000..fb2e2b98b54 --- /dev/null +++ b/platform/ui/src/elements/Icon/icons/measure-temp.svg @@ -0,0 +1,16 @@ + + Measure Temp + + + + + + diff --git a/platform/ui/src/elements/Icon/icons/object-group.svg b/platform/ui/src/elements/Icon/icons/object-group.svg new file mode 100644 index 00000000000..edd4bc189ad --- /dev/null +++ b/platform/ui/src/elements/Icon/icons/object-group.svg @@ -0,0 +1,20 @@ + + Object Group + + + + + diff --git a/platform/ui/src/elements/Icon/icons/ohif-logo.svg b/platform/ui/src/elements/Icon/icons/ohif-logo.svg new file mode 100644 index 00000000000..f6525ab9082 --- /dev/null +++ b/platform/ui/src/elements/Icon/icons/ohif-logo.svg @@ -0,0 +1,17 @@ + + OHIF Logo + + + + + diff --git a/platform/ui/src/elements/Icon/icons/oval.svg b/platform/ui/src/elements/Icon/icons/oval.svg new file mode 100644 index 00000000000..0a69e6b1190 --- /dev/null +++ b/platform/ui/src/elements/Icon/icons/oval.svg @@ -0,0 +1,11 @@ + + Oval + + diff --git a/platform/ui/src/elements/Icon/icons/palette.svg b/platform/ui/src/elements/Icon/icons/palette.svg new file mode 100644 index 00000000000..04f596ba1dc --- /dev/null +++ b/platform/ui/src/elements/Icon/icons/palette.svg @@ -0,0 +1,11 @@ + + Pallete + + diff --git a/platform/ui/src/elements/Icon/icons/play.svg b/platform/ui/src/elements/Icon/icons/play.svg new file mode 100644 index 00000000000..64ca7a5e30a --- /dev/null +++ b/platform/ui/src/elements/Icon/icons/play.svg @@ -0,0 +1,10 @@ + + + diff --git a/platform/ui/src/elements/Icon/icons/plus.svg b/platform/ui/src/elements/Icon/icons/plus.svg new file mode 100644 index 00000000000..6512e11168f --- /dev/null +++ b/platform/ui/src/elements/Icon/icons/plus.svg @@ -0,0 +1,11 @@ + + Add + + diff --git a/platform/ui/src/elements/Icon/icons/power-off.svg b/platform/ui/src/elements/Icon/icons/power-off.svg new file mode 100644 index 00000000000..3dd5dcf20df --- /dev/null +++ b/platform/ui/src/elements/Icon/icons/power-off.svg @@ -0,0 +1,11 @@ + + Power Off + + diff --git a/platform/ui/src/elements/Icon/icons/reset.svg b/platform/ui/src/elements/Icon/icons/reset.svg new file mode 100644 index 00000000000..8b2c9aa531d --- /dev/null +++ b/platform/ui/src/elements/Icon/icons/reset.svg @@ -0,0 +1,11 @@ + + Reset + + diff --git a/platform/ui/src/elements/Icon/icons/rotate-right.svg b/platform/ui/src/elements/Icon/icons/rotate-right.svg new file mode 100644 index 00000000000..106284fa0e7 --- /dev/null +++ b/platform/ui/src/elements/Icon/icons/rotate-right.svg @@ -0,0 +1,11 @@ + + Rotate Right + + diff --git a/platform/ui/src/elements/Icon/icons/rotate.svg b/platform/ui/src/elements/Icon/icons/rotate.svg new file mode 100644 index 00000000000..2dded38c4c4 --- /dev/null +++ b/platform/ui/src/elements/Icon/icons/rotate.svg @@ -0,0 +1,11 @@ + + Rotate + + diff --git a/platform/ui/src/elements/Icon/icons/search-plus.svg b/platform/ui/src/elements/Icon/icons/search-plus.svg new file mode 100644 index 00000000000..f130654c541 --- /dev/null +++ b/platform/ui/src/elements/Icon/icons/search-plus.svg @@ -0,0 +1,14 @@ + + Search Plus + + + + + diff --git a/platform/ui/src/elements/Icon/icons/search.svg b/platform/ui/src/elements/Icon/icons/search.svg new file mode 100644 index 00000000000..a313de17d08 --- /dev/null +++ b/platform/ui/src/elements/Icon/icons/search.svg @@ -0,0 +1,11 @@ + + Search + + diff --git a/platform/ui/src/elements/Icon/icons/soft-tissue.svg b/platform/ui/src/elements/Icon/icons/soft-tissue.svg new file mode 100644 index 00000000000..730c69450fb --- /dev/null +++ b/platform/ui/src/elements/Icon/icons/soft-tissue.svg @@ -0,0 +1,16 @@ + + Soft Tissue + + diff --git a/platform/ui/src/elements/Icon/icons/sort-down.svg b/platform/ui/src/elements/Icon/icons/sort-down.svg new file mode 100644 index 00000000000..6306b48847a --- /dev/null +++ b/platform/ui/src/elements/Icon/icons/sort-down.svg @@ -0,0 +1,11 @@ + + Sort Down + + diff --git a/platform/ui/src/elements/Icon/icons/sort-up.svg b/platform/ui/src/elements/Icon/icons/sort-up.svg new file mode 100644 index 00000000000..ab5e0a8362e --- /dev/null +++ b/platform/ui/src/elements/Icon/icons/sort-up.svg @@ -0,0 +1,11 @@ + + Sort Up + + diff --git a/platform/ui/src/elements/Icon/icons/sort.svg b/platform/ui/src/elements/Icon/icons/sort.svg new file mode 100644 index 00000000000..1ade701826d --- /dev/null +++ b/platform/ui/src/elements/Icon/icons/sort.svg @@ -0,0 +1,11 @@ + + Sort + + diff --git a/platform/ui/src/elements/Icon/icons/square-o.svg b/platform/ui/src/elements/Icon/icons/square-o.svg new file mode 100644 index 00000000000..16d36444cc3 --- /dev/null +++ b/platform/ui/src/elements/Icon/icons/square-o.svg @@ -0,0 +1,11 @@ + + Square Outline + + diff --git a/platform/ui/src/elements/Icon/icons/star.svg b/platform/ui/src/elements/Icon/icons/star.svg new file mode 100644 index 00000000000..265a0e6bb62 --- /dev/null +++ b/platform/ui/src/elements/Icon/icons/star.svg @@ -0,0 +1,11 @@ + + Star + + diff --git a/platform/ui/src/elements/Icon/icons/step-backward.svg b/platform/ui/src/elements/Icon/icons/step-backward.svg new file mode 100644 index 00000000000..78a15fa7db9 --- /dev/null +++ b/platform/ui/src/elements/Icon/icons/step-backward.svg @@ -0,0 +1,10 @@ + + + diff --git a/platform/ui/src/elements/Icon/icons/step-forward.svg b/platform/ui/src/elements/Icon/icons/step-forward.svg new file mode 100644 index 00000000000..c42eabf6541 --- /dev/null +++ b/platform/ui/src/elements/Icon/icons/step-forward.svg @@ -0,0 +1,10 @@ + + + diff --git a/platform/ui/src/elements/Icon/icons/stop.svg b/platform/ui/src/elements/Icon/icons/stop.svg new file mode 100644 index 00000000000..9d124d32556 --- /dev/null +++ b/platform/ui/src/elements/Icon/icons/stop.svg @@ -0,0 +1,11 @@ + + Stop + + diff --git a/platform/ui/src/elements/Icon/icons/sun.svg b/platform/ui/src/elements/Icon/icons/sun.svg new file mode 100644 index 00000000000..08158098d0d --- /dev/null +++ b/platform/ui/src/elements/Icon/icons/sun.svg @@ -0,0 +1,11 @@ + + Sun + + diff --git a/platform/ui/src/elements/Icon/icons/th-large.svg b/platform/ui/src/elements/Icon/icons/th-large.svg new file mode 100644 index 00000000000..876289bc4ab --- /dev/null +++ b/platform/ui/src/elements/Icon/icons/th-large.svg @@ -0,0 +1,12 @@ + + TH Large + + diff --git a/platform/ui/src/elements/Icon/icons/th-list.svg b/platform/ui/src/elements/Icon/icons/th-list.svg new file mode 100644 index 00000000000..e69919bf833 --- /dev/null +++ b/platform/ui/src/elements/Icon/icons/th-list.svg @@ -0,0 +1,11 @@ + + TH List + + diff --git a/platform/ui/src/elements/Icon/icons/th.svg b/platform/ui/src/elements/Icon/icons/th.svg new file mode 100644 index 00000000000..b1df15afab9 --- /dev/null +++ b/platform/ui/src/elements/Icon/icons/th.svg @@ -0,0 +1,11 @@ + + TH + + diff --git a/platform/ui/src/elements/Icon/icons/times.svg b/platform/ui/src/elements/Icon/icons/times.svg new file mode 100644 index 00000000000..27f875dce4e --- /dev/null +++ b/platform/ui/src/elements/Icon/icons/times.svg @@ -0,0 +1,12 @@ + + Times + + diff --git a/platform/ui/src/elements/Icon/icons/trash.svg b/platform/ui/src/elements/Icon/icons/trash.svg new file mode 100644 index 00000000000..20bca7e22e1 --- /dev/null +++ b/platform/ui/src/elements/Icon/icons/trash.svg @@ -0,0 +1,11 @@ + + Trash + + diff --git a/platform/ui/src/elements/Icon/icons/user.svg b/platform/ui/src/elements/Icon/icons/user.svg new file mode 100644 index 00000000000..c55700132ae --- /dev/null +++ b/platform/ui/src/elements/Icon/icons/user.svg @@ -0,0 +1,11 @@ + + User + + diff --git a/platform/ui/src/elements/Icon/icons/youtube.svg b/platform/ui/src/elements/Icon/icons/youtube.svg new file mode 100644 index 00000000000..00db81c232d --- /dev/null +++ b/platform/ui/src/elements/Icon/icons/youtube.svg @@ -0,0 +1,11 @@ + + YouTube Logo + + diff --git a/platform/ui/src/elements/Icon/index.js b/platform/ui/src/elements/Icon/index.js new file mode 100644 index 00000000000..3d83dbf3eda --- /dev/null +++ b/platform/ui/src/elements/Icon/index.js @@ -0,0 +1,4 @@ +import { ICONS } from './getIcon.js'; +import Icon from './Icon.js'; + +export { Icon, ICONS }; diff --git a/platform/ui/src/elements/Svg/Svg.js b/platform/ui/src/elements/Svg/Svg.js new file mode 100644 index 00000000000..41ea577f5f1 --- /dev/null +++ b/platform/ui/src/elements/Svg/Svg.js @@ -0,0 +1,14 @@ +import './Svg.styl'; + +import PropTypes from 'prop-types'; +import getSvg from './getSvg.js'; + +const Svg = props => { + return getSvg(props.name, props); +}; + +Svg.propTypes = { + name: PropTypes.string.isRequired, +}; + +export { Svg }; diff --git a/docker/OpenResty-Orthanc-Keycloak/volumes/keycloak-themes/ohif/email/.githold b/platform/ui/src/elements/Svg/Svg.styl similarity index 100% rename from docker/OpenResty-Orthanc-Keycloak/volumes/keycloak-themes/ohif/email/.githold rename to platform/ui/src/elements/Svg/Svg.styl diff --git a/platform/ui/src/elements/Svg/__docs__/svg.mdx b/platform/ui/src/elements/Svg/__docs__/svg.mdx new file mode 100644 index 00000000000..6fe66a7ee75 --- /dev/null +++ b/platform/ui/src/elements/Svg/__docs__/svg.mdx @@ -0,0 +1,57 @@ +--- +name: Svg +menu: Elements +route: /elements/svg +--- + +import { Playground, Props } from 'docz'; +import { State } from 'react-powerplug'; +import { Svg, SVGS } from './../index.js'; + +# Svg + +## Basic usage + + +
    + {Object.keys(SVGS) + .sort() + .map((name, i) => { + return ( + +
    + +
    + {name} +
    +
    +
    + ); + })} +
    +
    + +## API + + diff --git a/platform/ui/src/elements/Svg/getSvg.js b/platform/ui/src/elements/Svg/getSvg.js new file mode 100644 index 00000000000..4933fc1218b --- /dev/null +++ b/platform/ui/src/elements/Svg/getSvg.js @@ -0,0 +1,24 @@ +import React from 'react'; +// Svgs +import ohifLogoText from './svgs/ohif-logo-text.svg'; +import ohifLogoWrappedText from './svgs/ohif-logo-wrapped-text.svg'; + +const SVGS = { + 'ohif-logo-wrapped-text': ohifLogoWrappedText, + 'ohif-logo-text': ohifLogoText, +}; + +/** + * Return the matching SVG as a React Component. + * Results in an inlined SVG Element. If there's no match, + * return `null` + */ +export default function getSvg(key, props) { + if (!key || !SVGS[key]) { + return React.createElement('div', null, 'Missing SVG'); + } + + return React.createElement(SVGS[key], props); +} + +export { SVGS }; diff --git a/platform/ui/src/elements/Svg/index.js b/platform/ui/src/elements/Svg/index.js new file mode 100644 index 00000000000..54a598b1700 --- /dev/null +++ b/platform/ui/src/elements/Svg/index.js @@ -0,0 +1,2 @@ +export { Svg } from './Svg.js'; +export { SVGS } from './getSvg.js'; diff --git a/platform/ui/src/elements/Svg/svgs/ohif-logo-text.svg b/platform/ui/src/elements/Svg/svgs/ohif-logo-text.svg new file mode 100644 index 00000000000..ffc43c74831 --- /dev/null +++ b/platform/ui/src/elements/Svg/svgs/ohif-logo-text.svg @@ -0,0 +1,3 @@ + + + diff --git a/platform/ui/src/elements/Svg/svgs/ohif-logo-wrapped-text.svg b/platform/ui/src/elements/Svg/svgs/ohif-logo-wrapped-text.svg new file mode 100644 index 00000000000..d9c2cb6b6d4 --- /dev/null +++ b/platform/ui/src/elements/Svg/svgs/ohif-logo-wrapped-text.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/platform/ui/src/elements/form/DropdownMenu.css b/platform/ui/src/elements/form/DropdownMenu.css new file mode 100644 index 00000000000..cc02defe12f --- /dev/null +++ b/platform/ui/src/elements/form/DropdownMenu.css @@ -0,0 +1,86 @@ +.dd-menu { + float: left; + margin-right: 10px; + cursor: pointer; + position: relative; +} + +.dd-title { + font-size: 13px; +} + +.dd-menu-toggle { + display: inline-block; +} + +.dd-caret-down { + display: inline-block; + width: 0; + height: 0; + margin-top: 0.5rem; + margin-left: 0.5rem; + border-top: 5px solid; + border-right: 5px solid transparent; + border-left: 5px solid transparent; +} + +.dd-menu-list { + position: absolute; + top: 100%; + margin-top: 10px; + background: white; + z-index: 999; + border-radius: 5px; + -webkit-border-radius: 5px; + -moz-border-radius: 5px; + -ms-border-radius: 5px; + -o-border-radius: 5px; + overflow: hidden; + transition: all 300ms ease; + -webkit-transition: all 300ms ease; + -moz-transition: all 300ms ease; + -ms-transition: all 300ms ease; + -o-transition: all 300ms ease; +} + +.dd-menu-list.open { + display: inline-block; +} + +.dd-menu-list.left { + left: 0; +} + +.dd-menu-list.right { + right: 0; +} + +.dd-menu-list.center { + left: 50%; + transform: translateX(-50%); + -webkit-transform: translateX(-50%); + -moz-transform: translateX(-50%); + -ms-transform: translateX(-50%); + -o-transform: translateX(-50%); +} + +.dd-item { + display: flex; + color: var(--text-color-active); + padding: 10px 15px; + border-bottom: 1px solid #ccc; +} + +.dd-item:hover { + text-decoration: none; + background: #eee; +} + +.dd-item:last-child { + border-bottom: none; +} + +.dd-item-icon { + margin-right: 10px; + margin-top: 2px; +} diff --git a/platform/ui/src/elements/form/DropdownMenu.js b/platform/ui/src/elements/form/DropdownMenu.js new file mode 100644 index 00000000000..6a40f4088ee --- /dev/null +++ b/platform/ui/src/elements/form/DropdownMenu.js @@ -0,0 +1,133 @@ +import './DropdownMenu.css'; + +import React, { Component } from 'react'; + +import { Icon } from '../Icon'; +import PropTypes from 'prop-types'; + +class DropdownMenu extends Component { + state = { + open: false, + }; + + static propTypes = { + titleElement: PropTypes.node, + title: PropTypes.string, + align: PropTypes.oneOf(['left', 'center', 'right']), + /** Items to render in the select's drop down */ + list: PropTypes.arrayOf( + PropTypes.shape({ + title: PropTypes.string.isRequired, + icon: PropTypes.object, + onClick: PropTypes.func, + link: PropTypes.string, + }) + ), + }; + + getListItems = () => { + const { list, align } = this.props; + + return list.map(({ icon, title, link, onClick }, key) => { + if (link) { + return ( + this.handleOnClick(onClick)} + > + {icon && } + {title} + + ); + } else { + return ( + + ); + } + }); + }; + + renderList = () => { + const { align } = this.props; + + if (!this.state.open) { + return null; + } + + return ( +
    + {this.getListItems()} +
    + ); + }; + + handleOnClick = onClick => { + this.toggleList(); + + if (onClick) { + onClick(); + } + }; + + handleMouseClick = e => { + if (this.node.contains(e.target)) { + return; + } + + this.toggleList(); + }; + + renderTitleElement = () => { + const { titleElement, title } = this.props; + + if (titleElement) { + return titleElement; + } + + return ( + + {title} + + + ); + }; + + toggleList = () => { + const { open } = this.state; + let state = true; + + document.addEventListener('mousedown', this.handleMouseClick, false); + + if (open) { + document.removeEventListener('mousedown', this.handleMouseClick, false); + state = false; + } + + this.setState({ + open: state, + }); + }; + + render() { + return ( +
    (this.node = node)}> +
    + {this.renderTitleElement()} +
    + + {this.renderList()} +
    + ); + } +} + +export { DropdownMenu }; diff --git a/platform/ui/src/elements/form/Label.css b/platform/ui/src/elements/form/Label.css new file mode 100644 index 00000000000..6d0a170b1c1 --- /dev/null +++ b/platform/ui/src/elements/form/Label.css @@ -0,0 +1,8 @@ +.label-ohif { + font-size: 1em; + color: #ffffff; +} + +.label-example { + background-color: var(--ui-gray-darker); +} diff --git a/platform/ui/src/elements/form/Label.js b/platform/ui/src/elements/form/Label.js new file mode 100644 index 00000000000..06086fbd673 --- /dev/null +++ b/platform/ui/src/elements/form/Label.js @@ -0,0 +1,27 @@ +import './Label.css'; + +import React from 'react'; + +import PropTypes from 'prop-types'; + +class Label extends React.Component { + constructor(props) { + super(props); + this.state = { value: this.props.text }; + } + + render() { + return ( + + ); + } +} + +Label.propTypes = { + text: PropTypes.string.isRequired, + for: PropTypes.string, +}; + +export { Label }; diff --git a/platform/ui/src/elements/form/Range.css b/platform/ui/src/elements/form/Range.css new file mode 100644 index 00000000000..434a8486f45 --- /dev/null +++ b/platform/ui/src/elements/form/Range.css @@ -0,0 +1,64 @@ +.range { + margin: 0; + width: 100%; + -webkit-appearance: none; +} + +.range:focus { + outline: none; +} + +.range::-webkit-slider-runnable-track { + width: 100%; + height: 2px; + cursor: pointer; + box-shadow: none; + background-color: var(--ui-border-color-dark); + border-radius: 0px; + border: 0px solid var(--ui-border-color-dark); +} + +.range::-moz-range-track { + width: 100%; + height: 2px; + cursor: pointer; + box-shadow: none; + background-color: var(--ui-border-color-dark); + border-radius: 0px; + border: 0px solid var(--ui-border-color-dark); +} + +.range::-webkit-slider-thumb { + box-shadow: none; + border: 0px solid var(--active-color); + box-shadow: 0px 10px 10px rgba(0, 0, 0, 0.25); + height: 21px; + width: 11px; + border-radius: 11px; + background: var(--active-color); + cursor: pointer; + -webkit-appearance: none; + margin-top: -10px; +} + +.range::-moz-range-thumb { + box-shadow: none; + border: 0px solid var(--active-color); + box-shadow: 0px 10px 10px rgba(0, 0, 0, 0.25); + height: 21px; + width: 11px; + border-radius: 11px; + background: var(--active-color); + cursor: pointer; + -webkit-appearance: none; + margin-top: -10px; +} + +.range::-moz-focus-outer { + border: 0; +} + +.range-example { + background: black; + height: 2em; +} diff --git a/platform/ui/src/elements/form/Range.js b/platform/ui/src/elements/form/Range.js new file mode 100644 index 00000000000..a8647a8fa09 --- /dev/null +++ b/platform/ui/src/elements/form/Range.js @@ -0,0 +1,40 @@ +import './Range.css'; + +import React, { Component } from 'react'; +import PropTypes from 'prop-types'; + +class Range extends React.Component { + constructor(props) { + super(props); + this.state = { value: props.value }; + } + + handleChange = event => { + this.setState({ value: event.target.value }); + if (this.props.onChange) this.props.onChange(); + }; + + render() { + return ( + + ); + } +} + +Range.propTypes = { + value: PropTypes.number, + min: PropTypes.number.isRequired, + max: PropTypes.number.isRequired, + id: PropTypes.string, + onChange: PropTypes.func, +}; + +export { Range }; diff --git a/platform/ui/src/elements/form/Select.css b/platform/ui/src/elements/form/Select.css new file mode 100644 index 00000000000..0ea43c5a9cf --- /dev/null +++ b/platform/ui/src/elements/form/Select.css @@ -0,0 +1,46 @@ +.select-ohif { + display: block; + font-family: Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', + sans-serif; + font-size: 0.8em; + font-weight: 600; + color: #444; + line-height: 1.3; + padding: 0.6em 1.4em 0.5em 0.8em; + width: 100%; + max-width: 100%; + box-sizing: border-box; + margin: 0; + border: 1px solid #aaa; + box-shadow: 0 1px 0 1px rgba(0, 0, 0, 0.04); + border-radius: 0.5em; + -moz-appearance: none; + -webkit-appearance: none; + appearance: none; + background-color: #fff; + background-image: url('data:image/svg+xml;charset=US-ASCII,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22292.4%22%20height%3D%22292.4%22%3E%3Cpath%20fill%3D%22%23007CB2%22%20d%3D%22M287%2069.4a17.6%2017.6%200%200%200-13-5.4H18.4c-5%200-9.3%201.8-12.9%205.4A17.6%2017.6%200%200%200%200%2082.2c0%205%201.8%209.3%205.4%2012.9l128%20127.9c3.6%203.6%207.8%205.4%2012.8%205.4s9.2-1.8%2012.8-5.4L287%2095c3.5-3.5%205.4-7.8%205.4-12.8%200-5-1.9-9.2-5.5-12.8z%22%2F%3E%3C%2Fsvg%3E'), + linear-gradient(to bottom, #ffffff 0%, #e5e5e5 100%); + background-repeat: no-repeat, repeat; + background-position: right 0.7em top 50%, 0 0; + background-size: 0.65em auto, 100%; +} + +.select-ohif::-ms-expand { + display: none; +} + +.select-ohif:hover { + border-color: #888; +} + +.select-ohif:focus { + border-color: #aaa; + box-shadow: 0 0 1px 3px rgba(59, 153, 252, 0.7); + box-shadow: 0 0 0 3px -moz-mac-focusring; + color: #222; + outline: none; +} + +.select-ohif option { + font-weight: normal; +} diff --git a/platform/ui/src/elements/form/Select.js b/platform/ui/src/elements/form/Select.js new file mode 100644 index 00000000000..5652f9a8cc7 --- /dev/null +++ b/platform/ui/src/elements/form/Select.js @@ -0,0 +1,48 @@ +import './Select.css'; + +import React, { Component } from 'react'; + +import PropTypes from 'prop-types'; + +class Select extends Component { + constructor(props) { + super(props); + this.state = { value: this.props.value }; + } + + handleChange = event => { + this.setState({ value: event.target.value }); + if (this.props.onChange) this.props.onChange(); + }; + + render() { + return ( + + ); + } +} + +Select.propTypes = { + options: PropTypes.arrayOf( + PropTypes.shape({ + key: PropTypes.string.isRequired, + value: PropTypes.string.isRequired, + }) + ), + value: PropTypes.string, + onChange: PropTypes.func, +}; + +export { Select }; diff --git a/platform/ui/src/elements/form/TextArea.css b/platform/ui/src/elements/form/TextArea.css new file mode 100644 index 00000000000..72e8b2860d1 --- /dev/null +++ b/platform/ui/src/elements/form/TextArea.css @@ -0,0 +1,7 @@ +.textarea-ohif { + background-color: #b6b6b6; + border-color: #b6b6b6; + font-family: Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', + sans-serif; + font-size: 1em; +} diff --git a/platform/ui/src/elements/form/TextArea.js b/platform/ui/src/elements/form/TextArea.js new file mode 100644 index 00000000000..7f132f2677d --- /dev/null +++ b/platform/ui/src/elements/form/TextArea.js @@ -0,0 +1,39 @@ +import './TextArea.css'; + +import React from 'react'; +import PropTypes from 'prop-types'; + +class TextArea extends React.Component { + constructor(props) { + super(props); + this.state = { value: this.props.value }; + } + + handleChange = event => { + this.setState({ value: event.target.value }); + if (this.props.onChange) this.props.onChange(); + }; + + render() { + return ( +