diff --git a/.babelrc b/.babelrc deleted file mode 100644 index 18e32e5b9d..0000000000 --- a/.babelrc +++ /dev/null @@ -1,24 +0,0 @@ -{ - "presets": [ - [ - "@babel/preset-env", - { - "loose": true, - "modules": false, - "targets": ">1%, not dead, not ie 11, not op_mini all" - } - ], - "@babel/preset-react", - "@babel/preset-typescript" - ], - "plugins": [ - ["@babel/proposal-class-properties", { "loose": true }], - ["@babel/plugin-proposal-object-rest-spread", { "loose": true }], - ["transform-react-remove-prop-types", { "removeImport": true }] - ], - "env": { - "test": { - "plugins": ["@babel/transform-modules-commonjs"] - } - } -} diff --git a/.codesandbox/ci.json b/.codesandbox/ci.json new file mode 100644 index 0000000000..8692f3a107 --- /dev/null +++ b/.codesandbox/ci.json @@ -0,0 +1,5 @@ +{ + "packages": ["packages/*", "targets/*"], + "sandboxes": ["/demo/src/sandboxes/card", "/demo/src/sandboxes/gooBlobs"], + "node": "14" +} diff --git a/.github/ISSUE_TEMPLATE/question.md b/.github/ISSUE_TEMPLATE/question.md index ef23df4133..cd6caea346 100644 --- a/.github/ISSUE_TEMPLATE/question.md +++ b/.github/ISSUE_TEMPLATE/question.md @@ -6,4 +6,4 @@ about: Ask the maintainers (as a last resort) ## 🤓 Question -(You _must_ search the issues before asking your question. Please consider asking in [the official Spectrum community](https://spectrum.chat/react-spring) and/or [Stack Overflow](https://stackoverflow.com) first.) +(You _must_ search the issues before asking your question. Please consider asking in [the Discussions tab](https://github.com/pmndrs/react-spring/discussions) and/or [Stack Overflow](https://stackoverflow.com) first.) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml new file mode 100644 index 0000000000..4f04256beb --- /dev/null +++ b/.github/workflows/main.yml @@ -0,0 +1,23 @@ +name: release +on: + push: {} + pull_request: {} +jobs: + main: + runs-on: ubuntu-latest + steps: + - name: Cancel Previous Runs + uses: styfle/cancel-workflow-action@0.6.0 + with: + access_token: ${{ secrets.GITHUB_TOKEN }} + - name: Checkout repo + uses: actions/checkout@v2 + - name: Setup node + uses: actions/setup-node@v2 + with: + node-version: '14.x' + - name: Install deps + # this runs a build script so there is no dedicated build + run: yarn install + - name: Run tests + run: yarn test:ts && yarn test diff --git a/.gitignore b/.gitignore index 68d5b34e39..421d8e6afc 100644 --- a/.gitignore +++ b/.gitignore @@ -1,13 +1,16 @@ +dist/ +.bic_cache +.rpt2_cache/ node_modules/ coverage/ -dist/ Thumbs.db ehthumbs.db Desktop.ini $RECYCLE.BIN/ .DS_Store -.vscode -.docz/ package-lock.json -coverage/ +report.*.json .idea +*.log +/docs/ +/examples/ diff --git a/.meta b/.meta new file mode 100644 index 0000000000..c64d50981c --- /dev/null +++ b/.meta @@ -0,0 +1,6 @@ +{ + "projects": { + "docs": "https://github.com/react-spring/react-spring.io.git", + "examples": "https://github.com/react-spring/react-spring-examples.git" + } +} \ No newline at end of file diff --git a/.npmignore b/.npmignore new file mode 100644 index 0000000000..397b4a7624 --- /dev/null +++ b/.npmignore @@ -0,0 +1 @@ +*.log diff --git a/.prettierrc b/.prettierrc new file mode 100644 index 0000000000..431bd54b58 --- /dev/null +++ b/.prettierrc @@ -0,0 +1,9 @@ +{ + "arrowParens": "avoid", + "jsxBracketSameLine": true, + "printWidth": 80, + "semi": false, + "singleQuote": true, + "tabWidth": 2, + "trailingComma": "es5" +} diff --git a/.size-snapshot.json b/.size-snapshot.json deleted file mode 100644 index 3e4bc5ebaa..0000000000 --- a/.size-snapshot.json +++ /dev/null @@ -1,261 +0,0 @@ -{ - "dist/addons.js": { - "bundled": 9443, - "minified": 5181, - "gzipped": 1800, - "treeshaked": { - "rollup": { - "code": 4695, - "import_statements": 279 - }, - "webpack": { - "code": 5869 - } - } - }, - "dist/addons.umd.js": { - "bundled": 11277, - "minified": 5334, - "gzipped": 1999 - }, - "dist/web.js": { - "bundled": 63554, - "minified": 30170, - "gzipped": 10988, - "treeshaked": { - "rollup": { - "code": 11571, - "import_statements": 242 - }, - "webpack": { - "code": 12733 - } - } - }, - "dist/web.umd.js": { - "bundled": 82763, - "minified": 32482, - "gzipped": 11641 - }, - "dist/native.js": { - "bundled": 60686, - "minified": 28249, - "gzipped": 10010, - "treeshaked": { - "rollup": { - "code": 8256, - "import_statements": 180 - }, - "webpack": { - "code": 10881 - } - } - }, - "dist/universal.js": { - "bundled": 48123, - "minified": 21539, - "gzipped": 7195, - "treeshaked": { - "rollup": { - "code": 1235, - "import_statements": 128 - }, - "webpack": { - "code": 4733 - } - } - }, - "dist/konva.js": { - "bundled": 59176, - "minified": 27394, - "gzipped": 9921, - "treeshaked": { - "rollup": { - "code": 9090, - "import_statements": 242 - }, - "webpack": { - "code": 10246 - } - } - }, - "dist/hooks.js": { - "bundled": 71628, - "minified": 33389, - "gzipped": 11200, - "treeshaked": { - "rollup": { - "code": 12806, - "import_statements": 362 - }, - "webpack": { - "code": 14060 - } - } - }, - "dist/hooks.umd.js": { - "bundled": 89934, - "minified": 35216, - "gzipped": 12303 - }, - "dist/native-hooks.js": { - "bundled": 73025, - "minified": 34369, - "gzipped": 10627, - "treeshaked": { - "rollup": { - "code": 10032, - "import_statements": 345 - }, - "webpack": { - "code": 25161 - } - } - }, - "dist/web-hooks.js": { - "bundled": 71543, - "minified": 33114, - "gzipped": 11122, - "treeshaked": { - "rollup": { - "code": 12742, - "import_statements": 362 - }, - "webpack": { - "code": 13996 - } - } - }, - "dist/renderprops.js": { - "bundled": 66797, - "minified": 32950, - "gzipped": 11394 - }, - "dist/renderprops-addons.js": { - "bundled": 8318, - "minified": 5069, - "gzipped": 1763 - }, - "dist/renderprops-addons.umd.js": { - "bundled": 11301, - "minified": 5358, - "gzipped": 2008 - }, - "dist/renderprops-native.js": { - "bundled": 61366, - "minified": 29741, - "gzipped": 9942 - }, - "dist/renderprops-universal.js": { - "bundled": 49087, - "minified": 23177, - "gzipped": 7220 - }, - "dist/renderprops-konva.js": { - "bundled": 60176, - "minified": 29110, - "gzipped": 9928 - }, - "dist/web.cjs.js": { - "bundled": 71882, - "minified": 33885, - "gzipped": 11553 - }, - "dist/native.cjs.js": { - "bundled": 69495, - "minified": 32150, - "gzipped": 10560 - }, - "dist/renderprops.cjs.js": { - "bundled": 77392, - "minified": 36683, - "gzipped": 11921 - }, - "dist/renderprops-addons.cjs.js": { - "bundled": 9833, - "minified": 5495, - "gzipped": 1892 - }, - "dist/renderprops-native.cjs.js": { - "bundled": 72258, - "minified": 33567, - "gzipped": 10465 - }, - "dist/renderprops-universal.cjs.js": { - "bundled": 59263, - "minified": 26748, - "gzipped": 7733 - }, - "dist/renderprops-konva.cjs.js": { - "bundled": 70422, - "minified": 32717, - "gzipped": 10442 - }, - "dist/universal.cjs.js": { - "bundled": 56122, - "minified": 25121, - "gzipped": 7750 - }, - "dist/test.js": { - "bundled": 32365, - "minified": 14259, - "gzipped": 4783, - "treeshaked": { - "rollup": { - "code": 523, - "import_statements": 128 - }, - "webpack": { - "code": 2095 - } - } - }, - "dist/test.cjs.js": { - "bundled": 40723, - "minified": 17987, - "gzipped": 5405 - }, - "dist/konva.cjs.js": { - "bundled": 67216, - "minified": 31007, - "gzipped": 10463 - }, - "dist/three.js": { - "bundled": 59525, - "minified": 27361, - "gzipped": 9830, - "treeshaked": { - "rollup": { - "code": 10499, - "import_statements": 344 - }, - "webpack": { - "code": 11711 - } - } - }, - "dist/three.cjs.js": { - "bundled": 67628, - "minified": 31022, - "gzipped": 10369 - }, - "dist/zdog.js": { - "bundled": 60089, - "minified": 27582, - "gzipped": 9886, - "treeshaked": { - "rollup": { - "code": 10633, - "import_statements": 354 - }, - "webpack": { - "code": 11762 - } - } - }, - "dist/zdog.cjs.js": { - "bundled": 68132, - "minified": 31183, - "gzipped": 10438 - } -} diff --git a/.travis.yml b/.travis.yml index 98d32a7e7e..d5ed9bc783 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,3 +1,6 @@ language: node_js node_js: - - stable \ No newline at end of file + - stable +script: + - yarn test:ts + - yarn test diff --git a/.vscode/react-spring.code-workspace b/.vscode/react-spring.code-workspace new file mode 100644 index 0000000000..f3952db213 --- /dev/null +++ b/.vscode/react-spring.code-workspace @@ -0,0 +1,27 @@ +{ + "folders": [ + { + "name": "targets", + "path": "../targets" + }, + { + "name": "packages", + "path": "../packages" + }, + { + "name": "examples", + "path": "../examples" + }, + { + "name": "docs", + "path": "../docs" + } + ], + "settings": { + "typescript.tsdk": "node_modules/typescript/lib", + "files.exclude": { + "**/.bic_cache": true, + "**/.rpt2_cache": true + } + } +} diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000000..b008494a2f --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,7 @@ +{ + "typescript.tsdk": "node_modules/typescript/lib", + "files.exclude": { + "**/.bic_cache": true, + "**/.rpt2_cache": true + } +} diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 0000000000..6fac19dcea --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,82 @@ +# How to Contribute + +1. Clone this repository: + +```sh +git clone https://github.com/react-spring/react-spring -b v9 +cd react-spring +``` + +2. Install `yarn` (https://yarnpkg.com/en/docs/install) + +3. Bootstrap the packages: + +```sh +yarn + +# Clone the docs and examples (optional) +yarn meta git update +``` + +4. Link the packages: + +```sh +# Use the .js bundles +yarn lerna exec 'cd dist && yarn link || exit 0' + +# Or use the uncompiled .ts packages +yarn lerna exec 'yarn link' +``` + +5. Link `react-spring` to your project: + +```sh +cd ~/my-project +yarn link react-spring +``` + +6. Let's get cooking! 👨🏻‍🍳🥓 + +## Guidelines + +Be sure your commit messages follow this specification: https://www.conventionalcommits.org/en/v1.0.0-beta.4/ + +### Duplicate `react` errors + +React 16.8+ has global state to support its "hooks" feature, so you need to ensure only one copy of `react` exists in your program. Otherwise, you'll most likely see [this error](https://reactjs.org/warnings/invalid-hook-call-warning.html). Please try the following solutions, and let us know if it still doesn't work for you. + +- **For `create-react-app` users:** Follow this guide: https://github.com/facebook/react/issues/13991#issuecomment-496383268 + +- **For `webpack` users:** Add an alias to `webpack.config.js` like this: + + ```js + alias: { + react: path.resolve('node_modules/react'), + } + ``` + +- **For `gatsby` users:** Install `gatsby-plugin-alias-imports` and add this to your `gatsby-config.js` module: + ```js + { + resolve: `gatsby-plugin-alias-imports`, + options: { + alias: { + react: path.resolve('node_modules/react'), + }, + }, + }, + ``` + +# Publishing + +To publish a new version: + +``` +yarn release +``` + +To publish a **canary** version: + +``` +yarn release --canary +``` diff --git a/LICENSE b/LICENSE index cf07ab9d07..a926771a85 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,6 @@ MIT License -Copyright (c) 2018 Paul Henschel +Copyright (c) 2018-present Paul Henschel, react-spring, all contributors 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 similarity index 83% rename from readme.md rename to README.md index 4cf9259538..0fb6fe1310 100644 --- a/readme.md +++ b/README.md @@ -10,7 +10,7 @@ This library represents a modern approach to animation. It is very much inspired by Christopher Chedeau's [animated](https://github.com/animatedjs/animated) and Cheng Lou's [react-motion](https://github.com/chenglou/react-motion). It inherits animated's powerful interpolations and performance, as well as react-motion's ease of use. But while animated is mostly imperative and react-motion mostly declarative, react-spring bridges both. You will be surprised how easy static data is cast into motion with small, explicit utility functions that don't necessarily affect how you form your views. -[![npm version](https://badge.fury.io/js/react-spring.svg)](https://badge.fury.io/js/react-spring) [![Join the community on Spectrum](https://withspectrum.github.io/badge/badge.svg)](https://spectrum.chat/react-spring) [![Discord Shield](https://discordapp.com/api/guilds/740090768164651008/widget.png?style=shield)](https://discord.gg/ZZjjNvJ) [![Backers on Open Collective](https://opencollective.com/react-spring/backers/badge.svg)](#backers) [![Sponsors on Open Collective](https://opencollective.com/react-spring/sponsors/badge.svg)](#sponsors) +[![Build](https://github.com/pmndrs/react-spring/actions/workflows/main.yml/badge.svg?style=flat&colorA=000000&colorB=000000)](https://github.com/pmndrs/react-spring/actions/workflows/main.yml) [![npm version](https://badge.fury.io/js/react-spring.svg)](https://badge.fury.io/js/react-spring) [![Discord Shield](https://discordapp.com/api/guilds/740090768164651008/widget.png?style=shield)](https://discord.gg/ZZjjNvJ) [![Backers on Open Collective](https://opencollective.com/react-spring/backers/badge.svg)](#backers) [![Sponsors on Open Collective](https://opencollective.com/react-spring/sponsors/badge.svg)](#sponsors) ### Installation @@ -54,7 +54,7 @@ Springs change that, animation becomes easy and approachable, everything you do

-And [many others](https://github.com/drcmda/react-spring/network/dependents) ... +And [many others](https://github.com/react-spring/react-spring/network/dependents) ... ## Funding @@ -93,6 +93,6 @@ Thank you to all our backers! 🙏 This project exists thanks to all the people who contribute. - + diff --git a/demo/.gitignore b/demo/.gitignore new file mode 100644 index 0000000000..d451ff16c1 --- /dev/null +++ b/demo/.gitignore @@ -0,0 +1,5 @@ +node_modules +.DS_Store +dist +dist-ssr +*.local diff --git a/demo/favicon.svg b/demo/favicon.svg new file mode 100644 index 0000000000..1c0427d032 --- /dev/null +++ b/demo/favicon.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/demo/index.html b/demo/index.html new file mode 100644 index 0000000000..9949a0bc7d --- /dev/null +++ b/demo/index.html @@ -0,0 +1,13 @@ + + + + + + + react-spring example + + +
+ + + diff --git a/demo/package.json b/demo/package.json new file mode 100644 index 0000000000..d288d7f9ea --- /dev/null +++ b/demo/package.json @@ -0,0 +1,26 @@ +{ + "name": "demo-react-spring-sandbox", + "version": "1.0.0", + "description": "a sandbox for react-spring (probably will be replaced with something in the future)", + "main": "null", + "author": "Josh Ellis", + "license": "MIT", + "private": false, + "scripts": { + "dev": "vite", + "serve": "vite preview" + }, + "dependencies": { + "react": "^17.0.1", + "react-dom": "^17.0.1", + "wouter": "^2.7.4" + }, + "devDependencies": { + "@types/react": "^17.0.3", + "@types/react-dom": "^17.0.2", + "@vitejs/plugin-react-refresh": "^1.3.1", + "typescript": "^4.2.3", + "vite": "^2.1.2" + }, + "bic": false +} diff --git a/demo/src/App.tsx b/demo/src/App.tsx new file mode 100644 index 0000000000..5ebea413ef --- /dev/null +++ b/demo/src/App.tsx @@ -0,0 +1,43 @@ +import * as React from 'react' +import { Link, Route } from 'wouter' + +import GooBlobs from './sandboxes/gooBlobs/src/App' +import Card from './sandboxes/card/src/App' + +const links: { + [key: string]: () => JSX.Element +} = { + 'goo-blobs': GooBlobs, + card: Card, +} + +const Example = ({ link }: { link: string }) => { + const Component = links[link] + return ( +
+ + ← Back + + +
+ ) +} + +export default function App() { + return ( + <> + +

Spring demos

+

Sandboxes

+
+ {Object.keys(links).map(link => ( + + {link} + + ))} +
+
+ {params => } + + ) +} diff --git a/demo/src/index.tsx b/demo/src/index.tsx new file mode 100644 index 0000000000..d8c7239ceb --- /dev/null +++ b/demo/src/index.tsx @@ -0,0 +1,6 @@ +import * as React from 'react' +import ReactDOM from 'react-dom' +import './styles.css' +import App from './App' + +ReactDOM.render(, document.getElementById('root')) diff --git a/demo/src/sandboxes/card/package.json b/demo/src/sandboxes/card/package.json new file mode 100644 index 0000000000..4765527706 --- /dev/null +++ b/demo/src/sandboxes/card/package.json @@ -0,0 +1,25 @@ +{ + "name": "spring-card", + "version": "1.0.0", + "main": "src/index.tsx", + "dependencies": { + "@react-spring/web": "*", + "react": "^17.0.1", + "react-dom": "^17.0.1", + "react-scripts": "4.0.3" + }, + "scripts": { + "start": "react-scripts start", + "build": "react-scripts build", + "test": "react-scripts test --env=jsdom", + "eject": "react-scripts eject" + }, + "browserslist": [ + ">0.2%", + "not dead", + "not ie <= 11", + "not op_mini all" + ], + "bic": false, + "devDependencies": {} +} diff --git a/demo/src/sandboxes/card/public/index.html b/demo/src/sandboxes/card/public/index.html new file mode 100644 index 0000000000..2a1959d610 --- /dev/null +++ b/demo/src/sandboxes/card/public/index.html @@ -0,0 +1,42 @@ + + + + + + + + + + + React Spring Sandbox + + + + +
+ + + diff --git a/demo/src/sandboxes/card/src/App.tsx b/demo/src/sandboxes/card/src/App.tsx new file mode 100644 index 0000000000..09929a3fb9 --- /dev/null +++ b/demo/src/sandboxes/card/src/App.tsx @@ -0,0 +1,27 @@ +import React from 'react' +import { useSpring, animated } from '@react-spring/web' + +import './index.css' + +const calc = (x: number, y: number) => [ + -(y - window.innerHeight / 2) / 20, + (x - window.innerWidth / 2) / 20, + 1.1, +] +const trans = (x: number, y: number, s: number) => + `perspective(600px) rotateX(${x}deg) rotateY(${y}deg) scale(${s})` + +export default function App() { + const [props, set] = useSpring(() => ({ + xys: [0, 0, 1], + config: { mass: 5, tension: 350, friction: 40 }, + })) + return ( + set({ xys: calc(x, y) })} + onMouseLeave={() => set({ xys: [0, 0, 1] })} + style={{ transform: props.xys.to(trans) }} + /> + ) +} diff --git a/demo/src/sandboxes/card/src/index.css b/demo/src/sandboxes/card/src/index.css new file mode 100644 index 0000000000..1a2702a6a5 --- /dev/null +++ b/demo/src/sandboxes/card/src/index.css @@ -0,0 +1,48 @@ +html, +body, +#root { + width: 100%; + height: 100%; + margin: 0; + padding: 0; + background-color: white; +} + +body { + font-family: -apple-system, BlinkMacSystemFont, avenir next, avenir, + helvetica neue, helvetica, ubuntu, roboto, noto, segoe ui, arial, sans-serif; + background: transparent; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + cursor: default; +} + +#root { + display: flex; + align-items: center; + justify-content: center; + overflow: hidden; + background: #f0f0f0; +} + +.card { + width: 45ch; + height: 45ch; + background: grey; + border-radius: 5px; + background-image: url(https://drscdn.500px.org/photo/435236/q%3D80_m%3D1500/v2?webp=true&sig=67031bdff6f582f3e027311e2074be452203ab637c0bd21d89128844becf8e40); + background-size: cover; + background-position: center center; + box-shadow: 0px 10px 30px -5px rgba(0, 0, 0, 0.3); + transition: box-shadow 0.5s; + will-change: transform; + border: 15px solid white; +} + +.card:hover { + box-shadow: 0px 30px 100px -10px rgba(0, 0, 0, 0.4); +} diff --git a/demo/src/sandboxes/card/src/index.tsx b/demo/src/sandboxes/card/src/index.tsx new file mode 100644 index 0000000000..32680e24e6 --- /dev/null +++ b/demo/src/sandboxes/card/src/index.tsx @@ -0,0 +1,11 @@ +import React from 'react' +import ReactDOM from 'react-dom' +import App from './App' + +const rootElement = document.getElementById('root') +ReactDOM.render( + + + , + rootElement +) diff --git a/demo/src/sandboxes/gooBlobs/package.json b/demo/src/sandboxes/gooBlobs/package.json new file mode 100644 index 0000000000..71582c69c5 --- /dev/null +++ b/demo/src/sandboxes/gooBlobs/package.json @@ -0,0 +1,25 @@ +{ + "name": "spring-goo-blobs", + "version": "1.0.0", + "main": "src/index.tsx", + "dependencies": { + "@react-spring/web": "*", + "react": "^17.0.1", + "react-dom": "^17.0.1", + "react-scripts": "4.0.3" + }, + "scripts": { + "start": "react-scripts start", + "build": "react-scripts build", + "test": "react-scripts test --env=jsdom", + "eject": "react-scripts eject" + }, + "browserslist": [ + ">0.2%", + "not dead", + "not ie <= 11", + "not op_mini all" + ], + "bic": false, + "devDependencies": {} +} diff --git a/demo/src/sandboxes/gooBlobs/public/index.html b/demo/src/sandboxes/gooBlobs/public/index.html new file mode 100644 index 0000000000..2a1959d610 --- /dev/null +++ b/demo/src/sandboxes/gooBlobs/public/index.html @@ -0,0 +1,42 @@ + + + + + + + + + + + React Spring Sandbox + + + + +
+ + + diff --git a/demo/src/sandboxes/gooBlobs/src/App.tsx b/demo/src/sandboxes/gooBlobs/src/App.tsx new file mode 100644 index 0000000000..c12649fbca --- /dev/null +++ b/demo/src/sandboxes/gooBlobs/src/App.tsx @@ -0,0 +1,36 @@ +import React from 'react' +import { useTrail, animated } from '@react-spring/web' + +import './index.css' + +const fast = { tension: 1200, friction: 40 } +const slow = { mass: 10, tension: 200, friction: 50 } +const trans = (x: number, y: number) => + `translate3d(${x}px,${y}px,0) translate3d(-50%,-50%,0)` + +export default function App() { + const [trail, set] = useTrail(3, () => ({ + xy: [0, 0], + config: i => (i === 0 ? fast : slow), + })) + return ( + <> + + + + + + +
set({ xy: [e.clientX, e.clientY] })}> + {trail.map((props, index) => ( + + ))} +
+ + ) +} diff --git a/demo/src/sandboxes/gooBlobs/src/index.css b/demo/src/sandboxes/gooBlobs/src/index.css new file mode 100644 index 0000000000..67124f5b87 --- /dev/null +++ b/demo/src/sandboxes/gooBlobs/src/index.css @@ -0,0 +1,94 @@ +body { + font-family: system-ui; + margin: 0; +} + +*, +*:after, +*:before { + box-sizing: border-box; +} + +html, +body, +#root { + width: 100%; + height: 100%; + margin: 0; + padding: 0; + background-color: white; +} + +body { + font-family: -apple-system, BlinkMacSystemFont, avenir next, avenir, + helvetica neue, helvetica, ubuntu, roboto, noto, segoe ui, arial, sans-serif; + background: transparent; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + cursor: default; +} + +.hooks-main > svg { + display: none; +} + +.hooks-main > div { + position: absolute; + will-change: transform; + border-radius: 50%; + background: lightcoral; + box-shadow: 10px 10px 5px 0px rgba(0, 0, 0, 0.75); + opacity: 0.6; +} + +.hooks-main > div:nth-child(1) { + width: 120px; + height: 120px; +} + +.hooks-main > div:nth-child(2) { + width: 250px; + height: 250px; +} + +.hooks-main > div:nth-child(3) { + width: 150px; + height: 150px; +} + +.hooks-main > div::after { + content: ''; + position: absolute; + top: 20px; + left: 20px; + width: 40px; + height: 40px; + border-radius: 50%; + background: rgba(255, 255, 255, 0.8); +} + +.hooks-main > div:nth-child(2)::after { + top: 70px; + left: 70px; + width: 70px; + height: 70px; +} + +.hooks-main > div:nth-child(3)::after { + top: 50px; + left: 50px; + width: 50px; + height: 50px; +} + +.hooks-main { + position: absolute; + width: 100%; + height: 100%; + filter: url('#goo'); + overflow: hidden; +} diff --git a/demo/src/sandboxes/gooBlobs/src/index.tsx b/demo/src/sandboxes/gooBlobs/src/index.tsx new file mode 100644 index 0000000000..32680e24e6 --- /dev/null +++ b/demo/src/sandboxes/gooBlobs/src/index.tsx @@ -0,0 +1,11 @@ +import React from 'react' +import ReactDOM from 'react-dom' +import App from './App' + +const rootElement = document.getElementById('root') +ReactDOM.render( + + + , + rootElement +) diff --git a/demo/src/styles.css b/demo/src/styles.css new file mode 100644 index 0000000000..4cdf759260 --- /dev/null +++ b/demo/src/styles.css @@ -0,0 +1,46 @@ +* { + box-sizing: border-box; +} + +html, +body { + margin: 0; + padding: 0; + width: 100%; + height: 100%; + overflow: hidden; +} + +.main { + position: relative; + width: 200px; + height: 50px; + background: #272727; + cursor: pointer; + border-radius: 5px; + border: 2px solid white; + overflow: hidden; +} + +.fill { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + background: hotpink; +} + +.content { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + display: flex; + align-items: center; + justify-content: center; + color: white; + font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, + Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif; +} diff --git a/demo/tsconfig.json b/demo/tsconfig.json new file mode 100644 index 0000000000..8f2c75f758 --- /dev/null +++ b/demo/tsconfig.json @@ -0,0 +1,23 @@ +{ + "compilerOptions": { + "target": "ESNext", + "lib": ["DOM", "DOM.Iterable", "ESNext"], + "types": ["vite/client"], + "allowJs": false, + "skipLibCheck": false, + "esModuleInterop": false, + "allowSyntheticDefaultImports": true, + "strict": true, + "forceConsistentCasingInFileNames": true, + "module": "ESNext", + "moduleResolution": "Node", + "resolveJsonModule": true, + "isolatedModules": true, + "noEmit": true, + "jsx": "react", + "paths": { + "@react-spring/web": ["../targets/web/src/index.ts"] + } + }, + "include": ["./src"] +} diff --git a/demo/vite.config.ts b/demo/vite.config.ts new file mode 100644 index 0000000000..2fb34ae8ae --- /dev/null +++ b/demo/vite.config.ts @@ -0,0 +1,12 @@ +import path from 'path' +import { defineConfig } from 'vite' +import reactRefresh from '@vitejs/plugin-react-refresh' + +export default defineConfig({ + resolve: { + alias: { + '@react-spring/web': path.resolve('../targets/web/src/index.ts'), + }, + }, + plugins: [reactRefresh()], +}) diff --git a/demo/yarn.lock b/demo/yarn.lock new file mode 100644 index 0000000000..e9435209af --- /dev/null +++ b/demo/yarn.lock @@ -0,0 +1,547 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@babel/code-frame@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.12.13.tgz#dcfc826beef65e75c50e21d3837d7d95798dd658" + integrity sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g== + dependencies: + "@babel/highlight" "^7.12.13" + +"@babel/compat-data@^7.13.8": + version "7.13.11" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.13.11.tgz#9c8fe523c206979c9a81b1e12fe50c1254f1aa35" + integrity sha512-BwKEkO+2a67DcFeS3RLl0Z3Gs2OvdXewuWjc1Hfokhb5eQWP9YRYH1/+VrVZvql2CfjOiNGqSAFOYt4lsqTHzg== + +"@babel/core@^7.12.13": + version "7.13.10" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.13.10.tgz#07de050bbd8193fcd8a3c27918c0890613a94559" + integrity sha512-bfIYcT0BdKeAZrovpMqX2Mx5NrgAckGbwT982AkdS5GNfn3KMGiprlBAtmBcFZRUmpaufS6WZFP8trvx8ptFDw== + dependencies: + "@babel/code-frame" "^7.12.13" + "@babel/generator" "^7.13.9" + "@babel/helper-compilation-targets" "^7.13.10" + "@babel/helper-module-transforms" "^7.13.0" + "@babel/helpers" "^7.13.10" + "@babel/parser" "^7.13.10" + "@babel/template" "^7.12.13" + "@babel/traverse" "^7.13.0" + "@babel/types" "^7.13.0" + convert-source-map "^1.7.0" + debug "^4.1.0" + gensync "^1.0.0-beta.2" + json5 "^2.1.2" + lodash "^4.17.19" + semver "^6.3.0" + source-map "^0.5.0" + +"@babel/generator@^7.13.0", "@babel/generator@^7.13.9": + version "7.13.9" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.13.9.tgz#3a7aa96f9efb8e2be42d38d80e2ceb4c64d8de39" + integrity sha512-mHOOmY0Axl/JCTkxTU6Lf5sWOg/v8nUa+Xkt4zMTftX0wqmb6Sh7J8gvcehBw7q0AhrhAR+FDacKjCZ2X8K+Sw== + dependencies: + "@babel/types" "^7.13.0" + jsesc "^2.5.1" + source-map "^0.5.0" + +"@babel/helper-compilation-targets@^7.13.10": + version "7.13.10" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.13.10.tgz#1310a1678cb8427c07a753750da4f8ce442bdd0c" + integrity sha512-/Xju7Qg1GQO4mHZ/Kcs6Au7gfafgZnwm+a7sy/ow/tV1sHeraRUHbjdat8/UvDor4Tez+siGKDk6zIKtCPKVJA== + dependencies: + "@babel/compat-data" "^7.13.8" + "@babel/helper-validator-option" "^7.12.17" + browserslist "^4.14.5" + semver "^6.3.0" + +"@babel/helper-function-name@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.12.13.tgz#93ad656db3c3c2232559fd7b2c3dbdcbe0eb377a" + integrity sha512-TZvmPn0UOqmvi5G4vvw0qZTpVptGkB1GL61R6lKvrSdIxGm5Pky7Q3fpKiIkQCAtRCBUwB0PaThlx9vebCDSwA== + dependencies: + "@babel/helper-get-function-arity" "^7.12.13" + "@babel/template" "^7.12.13" + "@babel/types" "^7.12.13" + +"@babel/helper-get-function-arity@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.13.tgz#bc63451d403a3b3082b97e1d8b3fe5bd4091e583" + integrity sha512-DjEVzQNz5LICkzN0REdpD5prGoidvbdYk1BVgRUOINaWJP2t6avB27X1guXK1kXNrX0WMfsrm1A/ZBthYuIMQg== + dependencies: + "@babel/types" "^7.12.13" + +"@babel/helper-member-expression-to-functions@^7.13.0": + version "7.13.0" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.13.0.tgz#6aa4bb678e0f8c22f58cdb79451d30494461b091" + integrity sha512-yvRf8Ivk62JwisqV1rFRMxiSMDGnN6KH1/mDMmIrij4jztpQNRoHqqMG3U6apYbGRPJpgPalhva9Yd06HlUxJQ== + dependencies: + "@babel/types" "^7.13.0" + +"@babel/helper-module-imports@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.12.13.tgz#ec67e4404f41750463e455cc3203f6a32e93fcb0" + integrity sha512-NGmfvRp9Rqxy0uHSSVP+SRIW1q31a7Ji10cLBcqSDUngGentY4FRiHOFZFE1CLU5eiL0oE8reH7Tg1y99TDM/g== + dependencies: + "@babel/types" "^7.12.13" + +"@babel/helper-module-transforms@^7.13.0": + version "7.13.0" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.13.0.tgz#42eb4bd8eea68bab46751212c357bfed8b40f6f1" + integrity sha512-Ls8/VBwH577+pw7Ku1QkUWIyRRNHpYlts7+qSqBBFCW3I8QteB9DxfcZ5YJpOwH6Ihe/wn8ch7fMGOP1OhEIvw== + dependencies: + "@babel/helper-module-imports" "^7.12.13" + "@babel/helper-replace-supers" "^7.13.0" + "@babel/helper-simple-access" "^7.12.13" + "@babel/helper-split-export-declaration" "^7.12.13" + "@babel/helper-validator-identifier" "^7.12.11" + "@babel/template" "^7.12.13" + "@babel/traverse" "^7.13.0" + "@babel/types" "^7.13.0" + lodash "^4.17.19" + +"@babel/helper-optimise-call-expression@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.13.tgz#5c02d171b4c8615b1e7163f888c1c81c30a2aaea" + integrity sha512-BdWQhoVJkp6nVjB7nkFWcn43dkprYauqtk++Py2eaf/GRDFm5BxRqEIZCiHlZUGAVmtwKcsVL1dC68WmzeFmiA== + dependencies: + "@babel/types" "^7.12.13" + +"@babel/helper-plugin-utils@^7.12.13": + version "7.13.0" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz#806526ce125aed03373bc416a828321e3a6a33af" + integrity sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ== + +"@babel/helper-replace-supers@^7.13.0": + version "7.13.0" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.13.0.tgz#6034b7b51943094cb41627848cb219cb02be1d24" + integrity sha512-Segd5me1+Pz+rmN/NFBOplMbZG3SqRJOBlY+mA0SxAv6rjj7zJqr1AVr3SfzUVTLCv7ZLU5FycOM/SBGuLPbZw== + dependencies: + "@babel/helper-member-expression-to-functions" "^7.13.0" + "@babel/helper-optimise-call-expression" "^7.12.13" + "@babel/traverse" "^7.13.0" + "@babel/types" "^7.13.0" + +"@babel/helper-simple-access@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.12.13.tgz#8478bcc5cacf6aa1672b251c1d2dde5ccd61a6c4" + integrity sha512-0ski5dyYIHEfwpWGx5GPWhH35j342JaflmCeQmsPWcrOQDtCN6C1zKAVRFVbK53lPW2c9TsuLLSUDf0tIGJ5hA== + dependencies: + "@babel/types" "^7.12.13" + +"@babel/helper-split-export-declaration@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.13.tgz#e9430be00baf3e88b0e13e6f9d4eaf2136372b05" + integrity sha512-tCJDltF83htUtXx5NLcaDqRmknv652ZWCHyoTETf1CXYJdPC7nohZohjUgieXhv0hTJdRf2FjDueFehdNucpzg== + dependencies: + "@babel/types" "^7.12.13" + +"@babel/helper-validator-identifier@^7.12.11": + version "7.12.11" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz#c9a1f021917dcb5ccf0d4e453e399022981fc9ed" + integrity sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw== + +"@babel/helper-validator-option@^7.12.17": + version "7.12.17" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.12.17.tgz#d1fbf012e1a79b7eebbfdc6d270baaf8d9eb9831" + integrity sha512-TopkMDmLzq8ngChwRlyjR6raKD6gMSae4JdYDB8bByKreQgG0RBTuKe9LRxW3wFtUnjxOPRKBDwEH6Mg5KeDfw== + +"@babel/helpers@^7.13.10": + version "7.13.10" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.13.10.tgz#fd8e2ba7488533cdeac45cc158e9ebca5e3c7df8" + integrity sha512-4VO883+MWPDUVRF3PhiLBUFHoX/bsLTGFpFK/HqvvfBZz2D57u9XzPVNFVBTc0PW/CWR9BXTOKt8NF4DInUHcQ== + dependencies: + "@babel/template" "^7.12.13" + "@babel/traverse" "^7.13.0" + "@babel/types" "^7.13.0" + +"@babel/highlight@^7.12.13": + version "7.13.10" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.13.10.tgz#a8b2a66148f5b27d666b15d81774347a731d52d1" + integrity sha512-5aPpe5XQPzflQrFwL1/QoeHkP2MsA4JCntcXHRhEsdsfPVkvPi2w7Qix4iV7t5S/oC9OodGrggd8aco1g3SZFg== + dependencies: + "@babel/helper-validator-identifier" "^7.12.11" + chalk "^2.0.0" + js-tokens "^4.0.0" + +"@babel/parser@^7.12.13", "@babel/parser@^7.13.0", "@babel/parser@^7.13.10": + version "7.13.11" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.13.11.tgz#f93ebfc99d21c1772afbbaa153f47e7ce2f50b88" + integrity sha512-PhuoqeHoO9fc4ffMEVk4qb/w/s2iOSWohvbHxLtxui0eBg3Lg5gN1U8wp1V1u61hOWkPQJJyJzGH6Y+grwkq8Q== + +"@babel/plugin-transform-react-jsx-self@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.12.13.tgz#422d99d122d592acab9c35ea22a6cfd9bf189f60" + integrity sha512-FXYw98TTJ125GVCCkFLZXlZ1qGcsYqNQhVBQcZjyrwf8FEUtVfKIoidnO8S0q+KBQpDYNTmiGo1gn67Vti04lQ== + dependencies: + "@babel/helper-plugin-utils" "^7.12.13" + +"@babel/plugin-transform-react-jsx-source@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.12.13.tgz#051d76126bee5c9a6aa3ba37be2f6c1698856bcb" + integrity sha512-O5JJi6fyfih0WfDgIJXksSPhGP/G0fQpfxYy87sDc+1sFmsCS6wr3aAn+whbzkhbjtq4VMqLRaSzR6IsshIC0Q== + dependencies: + "@babel/helper-plugin-utils" "^7.12.13" + +"@babel/template@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.12.13.tgz#530265be8a2589dbb37523844c5bcb55947fb327" + integrity sha512-/7xxiGA57xMo/P2GVvdEumr8ONhFOhfgq2ihK3h1e6THqzTAkHbkXgB0xI9yeTfIUoH3+oAeHhqm/I43OTbbjA== + dependencies: + "@babel/code-frame" "^7.12.13" + "@babel/parser" "^7.12.13" + "@babel/types" "^7.12.13" + +"@babel/traverse@^7.13.0": + version "7.13.0" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.13.0.tgz#6d95752475f86ee7ded06536de309a65fc8966cc" + integrity sha512-xys5xi5JEhzC3RzEmSGrs/b3pJW/o87SypZ+G/PhaE7uqVQNv/jlmVIBXuoh5atqQ434LfXV+sf23Oxj0bchJQ== + dependencies: + "@babel/code-frame" "^7.12.13" + "@babel/generator" "^7.13.0" + "@babel/helper-function-name" "^7.12.13" + "@babel/helper-split-export-declaration" "^7.12.13" + "@babel/parser" "^7.13.0" + "@babel/types" "^7.13.0" + debug "^4.1.0" + globals "^11.1.0" + lodash "^4.17.19" + +"@babel/types@^7.12.13", "@babel/types@^7.13.0": + version "7.13.0" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.13.0.tgz#74424d2816f0171b4100f0ab34e9a374efdf7f80" + integrity sha512-hE+HE8rnG1Z6Wzo+MhaKE5lM5eMx71T4EHJgku2E3xIfaULhDcxiiRxUYgwX8qwP1BBSlag+TdGOt6JAidIZTA== + dependencies: + "@babel/helper-validator-identifier" "^7.12.11" + lodash "^4.17.19" + to-fast-properties "^2.0.0" + +"@types/prop-types@*": + version "15.7.3" + resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.3.tgz#2ab0d5da2e5815f94b0b9d4b95d1e5f243ab2ca7" + integrity sha512-KfRL3PuHmqQLOG+2tGpRO26Ctg+Cq1E01D2DMriKEATHgWLfeNDmq9e29Q9WIky0dQ3NPkd1mzYH8Lm936Z9qw== + +"@types/react-dom@^17.0.2": + version "17.0.2" + resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-17.0.2.tgz#35654cf6c49ae162d5bc90843d5437dc38008d43" + integrity sha512-Icd9KEgdnFfJs39KyRyr0jQ7EKhq8U6CcHRMGAS45fp5qgUvxL3ujUCfWFttUK2UErqZNj97t9gsVPNAqcwoCg== + dependencies: + "@types/react" "*" + +"@types/react@*", "@types/react@^17.0.3": + version "17.0.3" + resolved "https://registry.yarnpkg.com/@types/react/-/react-17.0.3.tgz#ba6e215368501ac3826951eef2904574c262cc79" + integrity sha512-wYOUxIgs2HZZ0ACNiIayItyluADNbONl7kt8lkLjVK8IitMH5QMyAh75Fwhmo37r1m7L2JaFj03sIfxBVDvRAg== + dependencies: + "@types/prop-types" "*" + "@types/scheduler" "*" + csstype "^3.0.2" + +"@types/scheduler@*": + version "0.16.1" + resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.16.1.tgz#18845205e86ff0038517aab7a18a62a6b9f71275" + integrity sha512-EaCxbanVeyxDRTQBkdLb3Bvl/HK7PBK6UJjsSixB0iHKoWxE5uu2Q/DgtpOhPIojN0Zl1whvOd7PoHs2P0s5eA== + +"@vitejs/plugin-react-refresh@^1.3.1": + version "1.3.1" + resolved "https://registry.yarnpkg.com/@vitejs/plugin-react-refresh/-/plugin-react-refresh-1.3.1.tgz#dfdb17e9924ba57fc4951ac882e39628051a30f4" + integrity sha512-VxHkrvOOTnMGWq9BveEN5ufmfDfaGxfawCymlKdF+X0RApCr0jQFzOyewhmSSCgGHjqnpRj+7TTDebjBkB3qhg== + dependencies: + "@babel/core" "^7.12.13" + "@babel/plugin-transform-react-jsx-self" "^7.12.13" + "@babel/plugin-transform-react-jsx-source" "^7.12.13" + react-refresh "^0.9.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" + +browserslist@^4.14.5: + version "4.16.3" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.16.3.tgz#340aa46940d7db878748567c5dea24a48ddf3717" + integrity sha512-vIyhWmIkULaq04Gt93txdh+j02yX/JzlyhLYbV3YQCn/zvES3JnY7TifHHvvr1w5hTDluNKMkV05cs4vy8Q7sw== + dependencies: + caniuse-lite "^1.0.30001181" + colorette "^1.2.1" + electron-to-chromium "^1.3.649" + escalade "^3.1.1" + node-releases "^1.1.70" + +caniuse-lite@^1.0.30001181: + version "1.0.30001203" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001203.tgz#a7a34df21a387d9deffcd56c000b8cf5ab540580" + integrity sha512-/I9tvnzU/PHMH7wBPrfDMSuecDeUKerjCPX7D0xBbaJZPxoT9m+yYxt0zCTkcijCkjTdim3H56Zm0i5Adxch4w== + +chalk@^2.0.0: + 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" + +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= + +colorette@^1.2.1, colorette@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.2.2.tgz#cbcc79d5e99caea2dbf10eb3a26fd8b3e6acfa94" + integrity sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w== + +convert-source-map@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.7.0.tgz#17a2cb882d7f77d3490585e2ce6c524424a3a442" + integrity sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA== + dependencies: + safe-buffer "~5.1.1" + +csstype@^3.0.2: + version "3.0.7" + resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.0.7.tgz#2a5fb75e1015e84dd15692f71e89a1450290950b" + integrity sha512-KxnUB0ZMlnUWCsx2Z8MUsr6qV6ja1w9ArPErJaJaF8a5SOWoHLIszeCTKGRGRgtLgYrs1E8CHkNSP1VZTTPc9g== + +debug@^4.1.0: + version "4.3.1" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.1.tgz#f0d229c505e0c6d8c49ac553d1b13dc183f6b2ee" + integrity sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ== + dependencies: + ms "2.1.2" + +electron-to-chromium@^1.3.649: + version "1.3.693" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.693.tgz#5089c506a925c31f93fcb173a003a22e341115dd" + integrity sha512-vUdsE8yyeu30RecppQtI+XTz2++LWLVEIYmzeCaCRLSdtKZ2eXqdJcrs85KwLiPOPVc6PELgWyXBsfqIvzGZag== + +esbuild@^0.9.3: + version "0.9.5" + resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.9.5.tgz#200e7836580c0a78849ee257656efd40dbf0b4df" + integrity sha512-ZBOtZX9HxgSdwkAroVifEUgylWqbOjqbu1i1ohRvhoaYt6aj81dxbizODx419gwDAupqut44ehFVwUq7WRN/OA== + +escalade@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" + integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== + +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= + +fsevents@~2.3.1: + version "2.3.2" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" + integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== + +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== + +gensync@^1.0.0-beta.2: + version "1.0.0-beta.2" + resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" + integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== + +globals@^11.1.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== + +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@^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" + +is-core-module@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.2.0.tgz#97037ef3d52224d85163f5597b2b63d9afed981a" + integrity sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ== + dependencies: + has "^1.0.3" + +"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== + +jsesc@^2.5.1: + version "2.5.2" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" + integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== + +json5@^2.1.2: + version "2.2.0" + resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.0.tgz#2dfefe720c6ba525d9ebd909950f0515316c89a3" + integrity sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA== + dependencies: + minimist "^1.2.5" + +lodash@^4.17.19: + version "4.17.21" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" + integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== + +loose-envify@^1.1.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" + +minimist@^1.2.5: + version "1.2.5" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" + integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== + +ms@2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + +nanoid@^3.1.20: + version "3.1.22" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.1.22.tgz#b35f8fb7d151990a8aebd5aa5015c03cf726f844" + integrity sha512-/2ZUaJX2ANuLtTvqTlgqBQNJoQO398KyJgZloL0PZkC0dpysjncRUPsFe3DUPzz/y3h+u7C46np8RMuvF3jsSQ== + +node-releases@^1.1.70: + version "1.1.71" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.71.tgz#cb1334b179896b1c89ecfdd4b725fb7bbdfc7dbb" + integrity sha512-zR6HoT6LrLCRBwukmrVbHv0EpEQjksO6GmFcZQQuCAy139BEsoVKPYnf3jongYW83fAa1torLGYwxxky/p28sg== + +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= + +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== + +postcss@^8.2.1: + version "8.2.8" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.2.8.tgz#0b90f9382efda424c4f0f69a2ead6f6830d08ece" + integrity sha512-1F0Xb2T21xET7oQV9eKuctbM9S7BC0fetoHCc4H13z0PT6haiRLP4T0ZY4XWh7iLP0usgqykT6p9B2RtOf4FPw== + dependencies: + colorette "^1.2.2" + nanoid "^3.1.20" + source-map "^0.6.1" + +react-dom@^17.0.1: + version "17.0.1" + resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-17.0.1.tgz#1de2560474ec9f0e334285662ede52dbc5426fc6" + integrity sha512-6eV150oJZ9U2t9svnsspTMrWNyHc6chX0KzDeAOXftRa8bNeOKTTfCJ7KorIwenkHd2xqVTBTCZd79yk/lx/Ug== + dependencies: + loose-envify "^1.1.0" + object-assign "^4.1.1" + scheduler "^0.20.1" + +react-refresh@^0.9.0: + version "0.9.0" + resolved "https://registry.yarnpkg.com/react-refresh/-/react-refresh-0.9.0.tgz#71863337adc3e5c2f8a6bfddd12ae3bfe32aafbf" + integrity sha512-Gvzk7OZpiqKSkxsQvO/mbTN1poglhmAV7gR/DdIrRrSMXraRQQlfikRJOr3Nb9GTMPC5kof948Zy6jJZIFtDvQ== + +react@^17.0.1: + version "17.0.1" + resolved "https://registry.yarnpkg.com/react/-/react-17.0.1.tgz#6e0600416bd57574e3f86d92edba3d9008726127" + integrity sha512-lG9c9UuMHdcAexXtigOZLX8exLWkW0Ku29qPRU8uhF2R9BN96dLCt0psvzPLlHc5OWkgymP3qwTRgbnw5BKx3w== + dependencies: + loose-envify "^1.1.0" + object-assign "^4.1.1" + +resolve@^1.19.0: + version "1.20.0" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.20.0.tgz#629a013fb3f70755d6f0b7935cc1c2c5378b1975" + integrity sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A== + dependencies: + is-core-module "^2.2.0" + path-parse "^1.0.6" + +rollup@^2.38.5: + version "2.42.1" + resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.42.1.tgz#6d675b7971e3bee510935326a0f7e556bb7d43de" + integrity sha512-/y7M2ULg06JOXmMpPzhTeQroJSchy8lX8q6qrjqil0jmLz6ejCWbQzVnWTsdmMQRhfU0QcwtiW8iZlmrGXWV4g== + optionalDependencies: + fsevents "~2.3.1" + +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== + +scheduler@^0.20.1: + version "0.20.1" + resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.20.1.tgz#da0b907e24026b01181ecbc75efdc7f27b5a000c" + integrity sha512-LKTe+2xNJBNxu/QhHvDR14wUXHRQbVY5ZOYpOGWRzhydZUqrLb2JBvLPY7cAqFmqrWuDED0Mjk7013SZiOz6Bw== + dependencies: + loose-envify "^1.1.0" + object-assign "^4.1.1" + +semver@^6.3.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" + integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== + +source-map@^0.5.0: + 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== + +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" + +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= + +typescript@^4.2.3: + version "4.2.3" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.2.3.tgz#39062d8019912d43726298f09493d598048c1ce3" + integrity sha512-qOcYwxaByStAWrBf4x0fibwZvMRG+r4cQoTjbPtUlrWjBHbmCAww1i448U0GJ+3cNNEtebDteo/cHOR3xJ4wEw== + +vite@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/vite/-/vite-2.1.2.tgz#0aecaf6d34112b24536df1a14cd8d74fdcab6e20" + integrity sha512-K96k5Nb1kywggFwZNGf/NQVZIrjMSvjebYWFIEQRu8AQWtzxatMF8/reExFXebmrfWAT3PTUk6l4zJBkpMtyVg== + dependencies: + esbuild "^0.9.3" + postcss "^8.2.1" + resolve "^1.19.0" + rollup "^2.38.5" + optionalDependencies: + fsevents "~2.3.1" + +wouter@^2.7.4: + version "2.7.4" + resolved "https://registry.yarnpkg.com/wouter/-/wouter-2.7.4.tgz#d528122cacf6e9805d7b953bbddfb90226850977" + integrity sha512-shJIsHR+gcn69L2zR+0eKquOvAcjfIEdhzf8iAP502DlrAwg5lO2Q90DqIvXryNz/mk1fe2crTB40ZHXjoF1Bg== diff --git a/jest.config.js b/jest.config.js new file mode 100644 index 0000000000..d2fd25047d --- /dev/null +++ b/jest.config.js @@ -0,0 +1,59 @@ +const fs = require('fs-extra') +const path = require('path') +const { recrawl } = require('recrawl-sync') + +const testMatch = ['**/*.test.*'] +const ignoredPaths = ['.*', 'node_modules'] +const findTests = recrawl({ + only: testMatch, + skip: ignoredPaths, +}) + +const PJ = 'package.json' +const { packages } = fs.readJsonSync(PJ).workspaces +const findProjects = recrawl({ + only: packages.map(glob => path.join(glob, PJ)), + skip: ignoredPaths, +}) + +module.exports = { + projects: getProjects(), + watchPlugins: [ + 'jest-watch-typeahead/filename', + 'jest-watch-typeahead/testname', + ], +} + +function getProjects() { + return findProjects('.') + .map(jsonPath => path.resolve(jsonPath, '..')) + .filter(dir => findTests(dir).length > 0) + .map(createConfig) +} + +function createConfig(rootDir) { + const { compilerOptions } = fs.readJsonSync( + path.join(rootDir, 'tsconfig.json') + ) + return { + rootDir, + setupFilesAfterEnv: + rootDir.indexOf('shared') < 0 + ? [path.join(__dirname, 'packages/core/test/setup.ts')] + : [], + testMatch, + testEnvironment: 'jsdom', + testPathIgnorePatterns: ['.+/(types|__snapshots__)/.+'], + modulePathIgnorePatterns: ['dist'], + moduleNameMapper: { + '^react$': '/../../node_modules/react', + }, + transform: { + '^.+\\.tsx?$': 'esbuild-jest', + }, + collectCoverageFrom: ['src/**/*'], + coverageDirectory: './coverage', + coverageReporters: ['json', 'html', 'text'], + timers: 'fake', + } +} diff --git a/lerna.json b/lerna.json new file mode 100644 index 0000000000..997915c380 --- /dev/null +++ b/lerna.json @@ -0,0 +1,24 @@ +{ + "version": "9.0.0-rc.4", + "npmClient": "yarn", + "useWorkspaces": true, + "registry": "https://registry.npmjs.org", + "ignoreChanges": [ + "**/__tests__/**", + "**/__snapshots__/**", + "**/*.test.*", + "**/*.md" + ], + "command": { + "version": { + "changelog": false, + "conventionalCommits": true, + "message": "%v", + "push": false + }, + "publish": { + "contents": "dist", + "ignoreScripts": true + } + } +} diff --git a/package.json b/package.json index 5e13334239..90d687f20d 100644 --- a/package.json +++ b/package.json @@ -1,134 +1,98 @@ { - "name": "react-spring", - "version": "8.0.27", - "description": "A set of spring-physics based animation primitives", - "main": "web.cjs.js", - "module": "web.js", - "react-native": "native.js", + "name": "@react-spring/lerna", "private": true, - "sideEffects": false, + "description": "Cross-platform animation engine for React", + "repository": "pmndrs/react-spring", + "homepage": "https://github.com/pmndrs/react-spring#readme", + "keywords": [ + "animated", + "animation", + "hooks", + "motion", + "react", + "react-native", + "spring", + "typescript", + "velocity" + ], + "license": "MIT", + "author": "Paul Henschel", + "maintainers": [], + "workspaces": { + "packages": [ + "packages/*", + "targets/*" + ], + "nohoist": [ + "**" + ] + }, "scripts": { - "prebuild": "rimraf dist", - "docz": "docz dev", - "docz:build": "docz build && cp .docz/dist/index.html .docz/dist/200.html && cp examples/CNAME .docz/dist/CNAME", - "build": "npm-run-all --parallel copy rollup", - "copy": "copyfiles -f package.json readme.md LICENSE.md \"types/*\" dist && json -I -f dist/package.json -e \"this.private=false; this.devDependencies=undefined; this.optionalDependencies=undefined; this.scripts=undefined; this.husky=undefined; this.prettier=undefined; this.jest=undefined;\"", - "rollup": "rollup -c", - "prepare": "npm run build", + "build": "bic", + "clean": "lerna exec --parallel --no-bail -- rimraf node_modules dist .rpt2_cache .bic_cache", + "prepare": "yarn build && node ./scripts/prepare.js", + "release": "node ./scripts/release.js", "test": "jest", - "test:dev": "jest --watch --no-coverage", - "test:coverage:watch": "jest --watch", - "test:ts": "tsc --noEmit", - "postinstall": "node -e \"console.log('\\u001b[35m\\u001b[1mEnjoy react-spring? You can now donate to our open collective:\\u001b[22m\\u001b[39m\\n > \\u001b[34mhttps://opencollective.com/react-spring/donate\\u001b[0m')\"" + "test:cov": "jest --coverage", + "test:ts": "cd packages/react-spring && tsc -p . --noEmit" + }, + "commitlint": { + "extends": [ + "@commitlint/config-conventional" + ], + "rules": { + "body-max-line-length": [ + 0 + ] + } }, "husky": { "hooks": { + "commit-msg": "commitlint -E HUSKY_GIT_PARAMS", "pre-commit": "pretty-quick --staged" } }, - "prettier": { - "semi": false, - "trailingComma": "es5", - "singleQuote": true, - "jsxBracketSameLine": true, - "tabWidth": 2, - "printWidth": 80 - }, - "repository": { - "type": "git", - "url": "git+https://github.com/drcmda/react-spring.git" - }, - "keywords": [ - "react", - "motion", - "animated", - "animation", - "spring" - ], - "author": "Paul Henschel", - "contributors": [ - "Alec Larson (https://github.com/aleclarson)" - ], - "license": "MIT", - "bugs": { - "url": "https://github.com/drcmda/react-spring/issues" - }, - "homepage": "https://github.com/drcmda/react-spring#readme", "devDependencies": { - "@babel/core": "7.2.2", - "@babel/plugin-proposal-class-properties": "7.3.0", - "@babel/plugin-proposal-do-expressions": "7.2.0", - "@babel/plugin-proposal-object-rest-spread": "7.3.2", - "@babel/plugin-transform-modules-commonjs": "7.2.0", - "@babel/plugin-transform-parameters": "7.2.0", - "@babel/plugin-transform-runtime": "7.2.0", - "@babel/plugin-transform-template-literals": "7.2.0", - "@babel/preset-env": "7.3.1", - "@babel/preset-react": "7.0.0", - "@babel/preset-typescript": "^7.1.0", - "@types/jest": "^24.0.0", - "@types/mock-raf": "^1.0.2", - "@types/react": "16.8.2", - "babel-core": "7.0.0-bridge.0", - "babel-jest": "24.1.0", - "babel-plugin-transform-react-remove-prop-types": "0.4.24", - "babel-polyfill": "6.26.0", - "copyfiles": "2.1.0", - "enzyme": "3.8.0", - "enzyme-adapter-react-16": "1.9.1", + "@babel/core": "^7.11.6", + "@babel/preset-env": "^7.11.5", + "@commitlint/cli": "^11.0.0", + "@commitlint/config-conventional": "^11.0.0", + "@rollup/plugin-babel": "^5.2.1", + "@rollup/plugin-commonjs": "^11.1.0", + "@rollup/plugin-node-resolve": "^7.1.3", + "@types/jest": "^24.0.13", + "@types/react": "^16.8.19", + "build-if-changed": "^1.5.0", + "chalk": "^2.4.2", + "copyfiles": "^2.4.1", + "enquirer": "^2.3.2", + "esbuild": "^0.8.0", + "esbuild-jest": "^0.2.2", + "execa": "^2.0.4", + "flush-microtasks": "^1.0.1", + "fs-extra": "7.0.1", "husky": "1.3.1", - "jest": "24.1.0", - "json": "9.0.6", - "konva": "^2.6.0", - "mock-raf": "1.0.1", - "npm-run-all": "4.1.5", - "prettier": "1.16.4", + "jest": "^25.1.0", + "jest-watch-typeahead": "^0.3.1", + "lerna": "3.15.0", + "meta": "^1.2.19", + "mock-raf": "npm:@react-spring/mock-raf", + "prettier": "^2.0.5", "pretty-quick": "1.10.0", - "react": "16.8.1", - "react-dom": "16.8.1", - "react-konva": "^16.8.0", - "react-native": "^0.58.4", - "react-test-renderer": "16.8.1", - "react-testing-library": "5.6.1", + "react": "~16.9.0", + "recrawl-sync": "^1.2.2", "rimraf": "2.6.3", - "rollup": "1.1.2", - "rollup-plugin-babel": "4.3.2", - "rollup-plugin-commonjs": "9.2.0", - "rollup-plugin-node-resolve": "4.0.0", - "rollup-plugin-size-snapshot": "0.8.0", - "rollup-plugin-uglify": "6.0.2", - "typescript": "3.3.3" - }, - "peerDependencies": { - "react": ">= 16.8.0", - "react-dom": ">= 16.8.0" - }, - "dependencies": { - "@babel/runtime": "^7.3.1", - "prop-types": "^15.5.8" + "rollup": "^2.7.6", + "rollup-plugin-dts": "^1.4.11", + "rollup-plugin-esbuild": "^2.5.0", + "sade": "^1.6.1", + "sort-package-json": "1.22.1", + "spec.ts": "1.1.3", + "typescript": "^4.0.0", + "typescript-rewrite-paths": "^1.2.0" }, - "jest": { - "testPathIgnorePatterns": [ - "/node_modules/", - "jest", - "legacy" - ], - "testRegex": "test.(js|ts|tsx)$", - "coverageDirectory": "./coverage/", - "collectCoverage": true, - "coverageReporters": [ - "json", - "html", - "text", - "text-summary" - ], - "collectCoverageFrom": [ - "src/**/*.js", - "!test/" - ], - "setupFilesAfterEnv": [ - "/setupTests.js" - ] + "publishConfig": { + "access": "public" }, "collective": { "type": "opencollective", diff --git a/src/animated/LICENSE b/packages/animated/LICENSE similarity index 99% rename from src/animated/LICENSE rename to packages/animated/LICENSE index 5930f2b8d8..188fb2b0bd 100644 --- a/src/animated/LICENSE +++ b/packages/animated/LICENSE @@ -18,4 +18,4 @@ 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. \ No newline at end of file +SOFTWARE. diff --git a/packages/animated/README.md b/packages/animated/README.md new file mode 100644 index 0000000000..8a91ac8058 --- /dev/null +++ b/packages/animated/README.md @@ -0,0 +1,3 @@ +# @react-spring/animated + +Fork of [animated](https://github.com/animatedjs/animated) diff --git a/packages/animated/package.json b/packages/animated/package.json new file mode 100644 index 0000000000..78085a7ad2 --- /dev/null +++ b/packages/animated/package.json @@ -0,0 +1,20 @@ +{ + "name": "@react-spring/animated", + "version": "9.0.0-rc.4", + "description": "Animated component props for React", + "main": "src/index.ts", + "scripts": { + "build": "rollup -c" + }, + "dependencies": { + "@react-spring/shared": "link:../shared", + "@react-spring/types": "link:../types", + "react-layout-effect": "^1.0.1" + }, + "peerDependencies": { + "react": ">=16.8" + }, + "publishConfig": { + "directory": "dist" + } +} diff --git a/packages/animated/rollup.config.js b/packages/animated/rollup.config.js new file mode 100644 index 0000000000..66cee09cf3 --- /dev/null +++ b/packages/animated/rollup.config.js @@ -0,0 +1,3 @@ +import { bundle } from '../../rollup.config' + +export default bundle() diff --git a/packages/animated/src/Animated.ts b/packages/animated/src/Animated.ts new file mode 100644 index 0000000000..14c02ffa8d --- /dev/null +++ b/packages/animated/src/Animated.ts @@ -0,0 +1,45 @@ +import { defineHidden } from '@react-spring/shared' +import { AnimatedValue } from './AnimatedValue' + +const $node: any = Symbol.for('Animated:node') + +export const isAnimated = (value: any): value is Animated => + !!value && value[$node] === value + +/** Get the owner's `Animated` node. */ +export const getAnimated = (owner: any): Animated | undefined => + owner && owner[$node] + +/** Set the owner's `Animated` node. */ +export const setAnimated = (owner: any, node: Animated) => + defineHidden(owner, $node, node) + +/** Get every `AnimatedValue` in the owner's `Animated` node. */ +export const getPayload = (owner: any): AnimatedValue[] | undefined => + owner && owner[$node] && owner[$node].getPayload() + +export abstract class Animated { + /** The cache of animated values */ + protected payload?: Payload + + constructor() { + // This makes "isAnimated" return true. + setAnimated(this, this) + } + + /** Get the current value. Pass `true` for only animated values. */ + abstract getValue(animated?: boolean): T + + /** Set the current value. Returns `true` if the value changed. */ + abstract setValue(value: T): boolean | void + + /** Reset any animation state. */ + abstract reset(goal?: T): void + + /** Get every `AnimatedValue` used by this node. */ + getPayload(): Payload { + return this.payload || [] + } +} + +export type Payload = readonly AnimatedValue[] diff --git a/packages/animated/src/AnimatedArray.ts b/packages/animated/src/AnimatedArray.ts new file mode 100644 index 0000000000..ef96877118 --- /dev/null +++ b/packages/animated/src/AnimatedArray.ts @@ -0,0 +1,42 @@ +import { isAnimatedString } from '@react-spring/shared' +import { AnimatedObject } from './AnimatedObject' +import { AnimatedString } from './AnimatedString' +import { AnimatedValue } from './AnimatedValue' + +type Value = number | string +type Source = AnimatedValue[] + +/** An array of animated nodes */ +export class AnimatedArray< + T extends ReadonlyArray = Value[] +> extends AnimatedObject { + protected source!: Source + constructor(source: T) { + super(source) + } + + /** @internal */ + static create>(source: T) { + return new AnimatedArray(source) + } + + getValue(): T { + return this.source.map(node => node.getValue()) as any + } + + setValue(source: T) { + const payload = this.getPayload() + // Reuse the payload when lengths are equal. + if (source.length == payload.length) { + return payload.some((node, i) => node.setValue(source[i])) + } + // Remake the payload when length changes. + super.setValue(source.map(makeAnimated)) + return true + } +} + +function makeAnimated(value: any) { + const nodeType = isAnimatedString(value) ? AnimatedString : AnimatedValue + return nodeType.create(value) +} diff --git a/packages/animated/src/AnimatedObject.ts b/packages/animated/src/AnimatedObject.ts new file mode 100644 index 0000000000..c7c069c1a7 --- /dev/null +++ b/packages/animated/src/AnimatedObject.ts @@ -0,0 +1,64 @@ +import { Lookup } from '@react-spring/types' +import { + each, + eachProp, + getFluidValue, + hasFluidValue, +} from '@react-spring/shared' +import { Animated, isAnimated, getPayload } from './Animated' +import { AnimatedValue } from './AnimatedValue' +import { TreeContext } from './context' + +/** An object containing `Animated` nodes */ +export class AnimatedObject extends Animated { + constructor(protected source: Lookup) { + super() + this.setValue(source) + } + + getValue(animated?: boolean) { + const values: Lookup = {} + eachProp(this.source, (source, key) => { + if (isAnimated(source)) { + values[key] = source.getValue(animated) + } else if (hasFluidValue(source)) { + values[key] = getFluidValue(source) + } else if (!animated) { + values[key] = source + } + }) + return values + } + + /** Replace the raw object data */ + setValue(source: Lookup) { + this.source = source + this.payload = this._makePayload(source) + } + + reset() { + if (this.payload) { + each(this.payload, node => node.reset()) + } + } + + /** Create a payload set. */ + protected _makePayload(source: Lookup) { + if (source) { + const payload = new Set() + eachProp(source, this._addToPayload, payload) + return Array.from(payload) + } + } + + /** Add to a payload set. */ + protected _addToPayload(this: Set, source: any) { + if (TreeContext.dependencies && hasFluidValue(source)) { + TreeContext.dependencies.add(source) + } + const payload = getPayload(source) + if (payload) { + each(payload, node => this.add(node)) + } + } +} diff --git a/packages/animated/src/AnimatedString.ts b/packages/animated/src/AnimatedString.ts new file mode 100644 index 0000000000..1419cf12ff --- /dev/null +++ b/packages/animated/src/AnimatedString.ts @@ -0,0 +1,52 @@ +import { AnimatedValue } from './AnimatedValue' +import { is, createInterpolator } from '@react-spring/shared' + +type Value = string | number + +export class AnimatedString extends AnimatedValue { + protected _value!: number + protected _string: string | null = null + protected _toString: (input: number) => string + + constructor(value: string) { + super(0) + this._toString = createInterpolator({ + output: [value, value], + }) + } + + /** @internal */ + static create(value: string) { + return new AnimatedString(value) + } + + getValue() { + let value = this._string + return value == null ? (this._string = this._toString(this._value)) : value + } + + setValue(value: Value) { + if (is.str(value)) { + if (value == this._string) { + return false + } + this._string = value + this._value = 1 + } else if (super.setValue(value)) { + this._string = null + } else { + return false + } + return true + } + + reset(goal?: string) { + if (goal) { + this._toString = createInterpolator({ + output: [this.getValue(), goal], + }) + } + this._value = 0 + super.reset() + } +} diff --git a/packages/animated/src/AnimatedValue.ts b/packages/animated/src/AnimatedValue.ts new file mode 100644 index 0000000000..49ead6c484 --- /dev/null +++ b/packages/animated/src/AnimatedValue.ts @@ -0,0 +1,59 @@ +import { is } from '@react-spring/shared' +import { Animated, Payload } from './Animated' + +/** An animated number or a native attribute value */ +export class AnimatedValue extends Animated { + done = true + elapsedTime!: number + lastPosition!: number + lastVelocity?: number | null + v0?: number | null + + constructor(protected _value: T) { + super() + if (is.num(this._value)) { + this.lastPosition = this._value + } + } + + /** @internal */ + static create(value: any) { + return new AnimatedValue(value) + } + + getPayload(): Payload { + return [this] + } + + getValue() { + return this._value + } + + setValue(value: T, step?: number) { + if (is.num(value)) { + this.lastPosition = value + if (step) { + value = (Math.round(value / step) * step) as any + if (this.done) { + this.lastPosition = value as any + } + } + } + if (this._value === value) { + return false + } + this._value = value + return true + } + + reset() { + const { done } = this + this.done = false + if (is.num(this._value)) { + this.elapsedTime = 0 + this.lastPosition = this._value + if (done) this.lastVelocity = null + this.v0 = null + } + } +} diff --git a/packages/animated/src/context.ts b/packages/animated/src/context.ts new file mode 100644 index 0000000000..57ae0436b6 --- /dev/null +++ b/packages/animated/src/context.ts @@ -0,0 +1,11 @@ +import { FluidValue } from '@react-spring/shared' + +export type TreeContext = { + /** + * Any animated values found when updating the payload of an `AnimatedObject` + * are also added to this `Set` to be observed by an animated component. + */ + dependencies: Set | null +} + +export const TreeContext: TreeContext = { dependencies: null } diff --git a/packages/animated/src/createHost.ts b/packages/animated/src/createHost.ts new file mode 100644 index 0000000000..96b230fcdf --- /dev/null +++ b/packages/animated/src/createHost.ts @@ -0,0 +1,73 @@ +import { Lookup } from '@react-spring/types' +import { is, eachProp } from '@react-spring/shared' +import { AnimatableComponent, withAnimated } from './withAnimated' +import { Animated } from './Animated' +import { AnimatedObject } from './AnimatedObject' + +export interface HostConfig { + /** Provide custom logic for native updates */ + applyAnimatedValues: (node: any, props: Lookup) => boolean | void + /** Wrap the `style` prop with an animated node */ + createAnimatedStyle: (style: Lookup) => Animated + /** Intercept props before they're passed to an animated component */ + getComponentProps: (props: Lookup) => typeof props +} + +// A stub type that gets replaced by @react-spring/web and others. +type WithAnimated = { + (Component: AnimatableComponent): any + [key: string]: any +} + +// For storing the animated version on the original component +const cacheKey = Symbol.for('AnimatedComponent') + +export const createHost = ( + components: AnimatableComponent[] | { [key: string]: AnimatableComponent }, + { + applyAnimatedValues = () => false, + createAnimatedStyle = style => new AnimatedObject(style), + getComponentProps = props => props, + }: Partial = {} +) => { + const hostConfig: HostConfig = { + applyAnimatedValues, + createAnimatedStyle, + getComponentProps, + } + + const animated: WithAnimated = (Component: any) => { + const displayName = getDisplayName(Component) || 'Anonymous' + + if (is.str(Component)) { + Component = + animated[Component] || + (animated[Component] = withAnimated(Component, hostConfig)) + } else { + Component = + Component[cacheKey] || + (Component[cacheKey] = withAnimated(Component, hostConfig)) + } + + Component.displayName = `Animated(${displayName})` + return Component + } + + eachProp(components, (Component, key) => { + if (is.arr(components)) { + key = getDisplayName(Component)! + } + animated[key] = animated(Component) + }) + + return { + animated, + } +} + +const getDisplayName = (arg: AnimatableComponent) => + is.str(arg) + ? arg + : arg && is.str(arg.displayName) + ? arg.displayName + : (is.fun(arg) && arg.name) || null diff --git a/packages/animated/src/getAnimatedType.ts b/packages/animated/src/getAnimatedType.ts new file mode 100644 index 0000000000..7d712a067d --- /dev/null +++ b/packages/animated/src/getAnimatedType.ts @@ -0,0 +1,18 @@ +import { is, isAnimatedString } from '@react-spring/shared' +import { AnimatedType } from './types' +import { AnimatedArray } from './AnimatedArray' +import { AnimatedString } from './AnimatedString' +import { AnimatedValue } from './AnimatedValue' +import { getAnimated } from './Animated' + +/** Return the `Animated` node constructor for a given value */ +export function getAnimatedType(value: any): AnimatedType { + const parentNode = getAnimated(value) + return parentNode + ? (parentNode.constructor as any) + : is.arr(value) + ? AnimatedArray + : isAnimatedString(value) + ? AnimatedString + : AnimatedValue +} diff --git a/packages/animated/src/index.ts b/packages/animated/src/index.ts new file mode 100644 index 0000000000..bc292797bd --- /dev/null +++ b/packages/animated/src/index.ts @@ -0,0 +1,8 @@ +export * from './Animated' +export * from './AnimatedValue' +export * from './AnimatedString' +export * from './AnimatedArray' +export * from './AnimatedObject' +export * from './getAnimatedType' +export * from './createHost' +export * from './types' diff --git a/packages/animated/src/types.ts b/packages/animated/src/types.ts new file mode 100644 index 0000000000..04d086d41e --- /dev/null +++ b/packages/animated/src/types.ts @@ -0,0 +1,11 @@ +import { AnimatedArray } from './AnimatedArray' +import { AnimatedValue } from './AnimatedValue' + +export type AnimatedType = Function & { + create: ( + from: any, + goal?: any + ) => T extends ReadonlyArray + ? AnimatedArray + : AnimatedValue +} diff --git a/packages/animated/src/withAnimated.tsx b/packages/animated/src/withAnimated.tsx new file mode 100644 index 0000000000..cce57d3c7f --- /dev/null +++ b/packages/animated/src/withAnimated.tsx @@ -0,0 +1,130 @@ +import * as React from 'react' +import { forwardRef, useRef, Ref, useCallback, useEffect } from 'react' +import { useLayoutEffect } from 'react-layout-effect' +import { + is, + each, + raf, + useForceUpdate, + useOnce, + FluidEvent, + FluidValue, + addFluidObserver, + removeFluidObserver, +} from '@react-spring/shared' +import { ElementType } from '@react-spring/types' + +import { AnimatedObject } from './AnimatedObject' +import { TreeContext } from './context' +import { HostConfig } from './createHost' + +export type AnimatableComponent = string | Exclude + +export const withAnimated = (Component: any, host: HostConfig) => { + const hasInstance: boolean = + // Function components must use "forwardRef" to avoid being + // re-rendered on every animation frame. + !is.fun(Component) || + (Component.prototype && Component.prototype.isReactComponent) + + return forwardRef((givenProps: any, givenRef: Ref) => { + const instanceRef = useRef(null) + + // The `hasInstance` value is constant, so we can safely avoid + // the `useCallback` invocation when `hasInstance` is false. + const ref = + hasInstance && + useCallback( + (value: any) => { + instanceRef.current = updateRef(givenRef, value) + }, + [givenRef] + ) + + const [props, deps] = getAnimatedState(givenProps, host) + + const forceUpdate = useForceUpdate() + + const callback = () => { + const instance = instanceRef.current + if (hasInstance && !instance) { + // Either this component was unmounted before changes could be + // applied, or the wrapped component forgot to forward its ref. + return + } + + const didUpdate = instance + ? host.applyAnimatedValues(instance, props.getValue(true)) + : false + + // Re-render the component when native updates fail. + if (didUpdate === false) { + forceUpdate() + } + } + + const observer = new PropsObserver(callback, deps) + + const observerRef = useRef() + useLayoutEffect(() => { + const lastObserver = observerRef.current + observerRef.current = observer + + // Observe the latest dependencies. + each(deps, dep => addFluidObserver(dep, observer)) + + // Stop observing previous dependencies. + if (lastObserver) { + each(lastObserver.deps, dep => removeFluidObserver(dep, lastObserver)) + raf.cancel(lastObserver.update) + } + }) + + useEffect(callback, []) + // Stop observing on unmount. + useOnce(() => () => { + const observer = observerRef.current! + each(observer.deps, dep => removeFluidObserver(dep, observer)) + }) + + const usedProps = host.getComponentProps(props.getValue()) + return + }) +} + +class PropsObserver { + constructor(readonly update: () => void, readonly deps: Set) {} + eventObserved(event: FluidEvent) { + if (event.type == 'change') { + raf.write(this.update) + } + } +} + +type AnimatedState = [props: AnimatedObject, dependencies: Set] + +function getAnimatedState(props: any, host: HostConfig): AnimatedState { + const dependencies = new Set() + TreeContext.dependencies = dependencies + + // Search the style for dependencies. + if (props.style) + props = { + ...props, + style: host.createAnimatedStyle(props.style), + } + + // Search the props for dependencies. + props = new AnimatedObject(props) + + TreeContext.dependencies = null + return [props, dependencies] +} + +function updateRef(ref: Ref, value: T) { + if (ref) { + if (is.fun(ref)) ref(value) + else (ref as any).current = value + } + return value +} diff --git a/packages/animated/tsconfig.json b/packages/animated/tsconfig.json new file mode 100644 index 0000000000..1ae07df09c --- /dev/null +++ b/packages/animated/tsconfig.json @@ -0,0 +1,19 @@ +{ + "include": ["src"], + "compilerOptions": { + "baseUrl": ".", + "forceConsistentCasingInFileNames": true, + "jsx": "react", + "lib": ["es2017"], + "moduleResolution": "node", + "noEmitOnError": true, + "noFallthroughCasesInSwitch": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "preserveSymlinks": true, + "sourceMap": true, + "strict": true, + "target": "esnext", + "typeRoots": ["../../node_modules/@types"] + } +} diff --git a/packages/core/README.md b/packages/core/README.md new file mode 100644 index 0000000000..b1ae0b7d48 --- /dev/null +++ b/packages/core/README.md @@ -0,0 +1,3 @@ +# @react-spring/core + +The platform-agnostic core of `react-spring` diff --git a/packages/core/package.json b/packages/core/package.json new file mode 100644 index 0000000000..7df89cdb2d --- /dev/null +++ b/packages/core/package.json @@ -0,0 +1,26 @@ +{ + "name": "@react-spring/core", + "version": "9.0.0-rc.4", + "main": "src/index.ts", + "scripts": { + "build": "rollup -c", + "postinstall": "node -e \"console.log('\\u001b[35m\\u001b[1mEnjoy react-spring? You can now donate to our open collective:\\u001b[22m\\u001b[39m\\n > \\u001b[34mhttps://opencollective.com/react-spring/donate\\u001b[0m')\"" + }, + "dependencies": { + "@react-spring/animated": "link:../animated", + "@react-spring/shared": "link:../shared", + "@react-spring/types": "link:../types", + "react-layout-effect": "^1.0.1" + }, + "peerDependencies": { + "react": ">=16.8" + }, + "publishConfig": { + "directory": "dist" + }, + "devDependencies": { + "@testing-library/react": "^9.4.0", + "rafz": "link:../shared/node_modules/rafz", + "react-dom": "^16.12.0" + } +} diff --git a/packages/core/rollup.config.js b/packages/core/rollup.config.js new file mode 100644 index 0000000000..66cee09cf3 --- /dev/null +++ b/packages/core/rollup.config.js @@ -0,0 +1,3 @@ +import { bundle } from '../../rollup.config' + +export default bundle() diff --git a/packages/core/src/Animation.ts b/packages/core/src/Animation.ts new file mode 100644 index 0000000000..7b51097dce --- /dev/null +++ b/packages/core/src/Animation.ts @@ -0,0 +1,22 @@ +import { AnimatedValue } from '@react-spring/animated' +import { FluidValue } from '@react-spring/shared' +import { AnimationConfig } from './AnimationConfig' +import { PickEventFns } from './types/internal' +import { SpringProps } from './types' + +const emptyArray: readonly any[] = [] + +/** An animation being executed by the frameloop */ +export class Animation { + changed = false + values: readonly AnimatedValue[] = emptyArray + toValues: readonly number[] | null = null + fromValues: readonly number[] = emptyArray + + to!: T | FluidValue + from!: T | FluidValue + config = new AnimationConfig() + immediate = false +} + +export interface Animation extends PickEventFns> {} diff --git a/packages/core/src/AnimationConfig.test.ts b/packages/core/src/AnimationConfig.test.ts new file mode 100644 index 0000000000..5c182641e3 --- /dev/null +++ b/packages/core/src/AnimationConfig.test.ts @@ -0,0 +1,101 @@ +import { AnimationConfig, mergeConfig } from './AnimationConfig' + +const expo = (t: number) => Math.pow(t, 2) + +describe('mergeConfig', () => { + it('can merge partial configs', () => { + let config = new AnimationConfig() + mergeConfig(config, { tension: 0 }) + mergeConfig(config, { friction: 0 }) + expect(config).toMatchObject({ + tension: 0, + friction: 0, + }) + + config = new AnimationConfig() + mergeConfig(config, { frequency: 2 }) + mergeConfig(config, { damping: 0 }) + expect(config).toMatchObject({ + frequency: 2, + damping: 0, + }) + + config = new AnimationConfig() + mergeConfig(config, { duration: 2000 }) + mergeConfig(config, { easing: expo }) + expect(config).toMatchObject({ + duration: 2000, + easing: expo, + }) + }) + + it('resets the "duration" when props are incompatible', () => { + const config = new AnimationConfig() + + mergeConfig(config, { duration: 1000 }) + expect(config.duration).toBeDefined() + + mergeConfig(config, { decay: 0.998 }) + expect(config.duration).toBeUndefined() + expect(config.decay).toBe(0.998) + + mergeConfig(config, { duration: 1000 }) + expect(config.duration).toBeDefined() + + mergeConfig(config, { frequency: 0.5 }) + expect(config.duration).toBeUndefined() + expect(config.frequency).toBe(0.5) + }) + + it('resets the "decay" when props are incompatible', () => { + const config = new AnimationConfig() + + mergeConfig(config, { decay: 0.998 }) + expect(config.decay).toBeDefined() + + mergeConfig(config, { mass: 2 }) + expect(config.decay).toBeUndefined() + expect(config.mass).toBe(2) + }) + + it('resets the "frequency" when props are incompatible', () => { + const config = new AnimationConfig() + + mergeConfig(config, { frequency: 0.5 }) + expect(config.frequency).toBeDefined() + + mergeConfig(config, { tension: 0 }) + expect(config.frequency).toBeUndefined() + expect(config.tension).toBe(0) + }) + + describe('frequency/damping props', () => { + it('properly converts to tension/friction', () => { + const config = new AnimationConfig() + const merged = mergeConfig(config, { frequency: 0.5, damping: 1 }) + expect(merged.tension).toBe(157.91367041742973) + expect(merged.friction).toBe(25.132741228718345) + }) + + it('works with extreme but valid values', () => { + const config = new AnimationConfig() + const merged = mergeConfig(config, { frequency: 2.6, damping: 0.1 }) + expect(merged.tension).toBe(5.840002604194885) + expect(merged.friction).toBe(0.483321946706122) + }) + + it('prevents a damping ratio less than 0', () => { + const config = new AnimationConfig() + const validConfig = mergeConfig(config, { frequency: 0.5, damping: 0 }) + const invalidConfig = mergeConfig(config, { frequency: 0.5, damping: -1 }) + expect(invalidConfig).toMatchObject(validConfig) + }) + + it('prevents a frequency response less than 0.01', () => { + const config = new AnimationConfig() + const validConfig = mergeConfig(config, { frequency: 0.01, damping: 1 }) + const invalidConfig = mergeConfig(config, { frequency: 0, damping: 1 }) + expect(invalidConfig).toMatchObject(validConfig) + }) + }) +}) diff --git a/packages/core/src/AnimationConfig.ts b/packages/core/src/AnimationConfig.ts new file mode 100644 index 0000000000..913a74b22f --- /dev/null +++ b/packages/core/src/AnimationConfig.ts @@ -0,0 +1,203 @@ +import { is } from '@react-spring/shared' +import { config as configs } from './constants' + +const linear = (t: number) => t +const defaults: any = { + ...configs.default, + mass: 1, + damping: 1, + easing: linear, + clamp: false, +} + +export class AnimationConfig { + /** + * With higher tension, the spring will resist bouncing and try harder to stop at its end value. + * + * When tension is zero, no animation occurs. + */ + tension!: number + + /** + * The damping ratio coefficient, or just the damping ratio when `speed` is defined. + * + * When `speed` is defined, this value should be between 0 and 1. + * + * Higher friction means the spring will slow down faster. + */ + friction!: number + + /** + * The natural frequency (in seconds), which dictates the number of bounces + * per second when no damping exists. + * + * When defined, `tension` is derived from this, and `friction` is derived + * from `tension` and `damping`. + */ + frequency?: number + + /** + * The damping ratio, which dictates how the spring slows down. + * + * Set to `0` to never slow down. Set to `1` to slow down without bouncing. + * Between `0` and `1` is for you to explore. + * + * Only works when `frequency` is defined. + * + * Defaults to 1 + */ + damping!: number + + /** + * Higher mass means more friction is required to slow down. + * + * Defaults to 1, which works fine most of the time. + */ + mass!: number + + /** + * The initial velocity of one or more values. + */ + velocity: number | number[] = 0 + + /** + * The smallest velocity before the animation is considered "not moving". + * + * When undefined, `precision` is used instead. + */ + restVelocity?: number + + /** + * The smallest distance from a value before that distance is essentially zero. + * + * This helps in deciding when a spring is "at rest". The spring must be within + * this distance from its final value, and its velocity must be lower than this + * value too (unless `restVelocity` is defined). + */ + precision?: number + + /** + * For `duration` animations only. Note: The `duration` is not affected + * by this property. + * + * Defaults to `0`, which means "start from the beginning". + * + * Setting to `1+` makes an immediate animation. + * + * Setting to `0.5` means "start from the middle of the easing function". + * + * Any number `>= 0` and `<= 1` makes sense here. + */ + progress?: number + + /** + * Animation length in number of milliseconds. + */ + duration?: number + + /** + * The animation curve. Only used when `duration` is defined. + * + * Defaults to quadratic ease-in-out. + */ + easing!: (t: number) => number + + /** + * Avoid overshooting by ending abruptly at the goal value. + */ + clamp!: boolean + + /** + * When above zero, the spring will bounce instead of overshooting when + * exceeding its goal value. Its velocity is multiplied by `-1 + bounce` + * whenever its current value equals or exceeds its goal. For example, + * setting `bounce` to `0.5` chops the velocity in half on each bounce, + * in addition to any friction. + */ + bounce?: number + + /** + * "Decay animations" decelerate without an explicit goal value. + * Useful for scrolling animations. + * + * Use `true` for the default exponential decay factor (`0.998`). + * + * When a `number` between `0` and `1` is given, a lower number makes the + * animation slow down faster. And setting to `1` would make an unending + * animation. + */ + decay?: boolean | number + + /** + * While animating, round to the nearest multiple of this number. + * The `from` and `to` values are never rounded, as well as any value + * passed to the `set` method of an animated value. + */ + round?: number + + constructor() { + Object.assign(this, defaults) + } +} + +export function mergeConfig( + config: AnimationConfig, + newConfig: Partial, + defaultConfig?: Partial +): typeof config + +export function mergeConfig( + config: any, + newConfig: object, + defaultConfig?: object +) { + if (defaultConfig) { + defaultConfig = { ...defaultConfig } + sanitizeConfig(defaultConfig, newConfig) + newConfig = { ...defaultConfig, ...newConfig } + } + + sanitizeConfig(config, newConfig) + Object.assign(config, newConfig) + + for (const key in defaults) { + if (config[key] == null) { + config[key] = defaults[key] + } + } + + let { mass, frequency, damping } = config + if (!is.und(frequency)) { + if (frequency < 0.01) frequency = 0.01 + if (damping < 0) damping = 0 + config.tension = Math.pow((2 * Math.PI) / frequency, 2) * mass + config.friction = (4 * Math.PI * damping * mass) / frequency + } + + return config +} + +// Prevent a config from accidentally overriding new props. +// This depends on which "config" props take precedence when defined. +function sanitizeConfig( + config: Partial, + props: Partial +) { + if (!is.und(props.decay)) { + config.duration = undefined + } else { + const isTensionConfig = !is.und(props.tension) || !is.und(props.friction) + if ( + isTensionConfig || + !is.und(props.frequency) || + !is.und(props.damping) || + !is.und(props.mass) + ) { + config.duration = undefined + config.decay = undefined + } + if (isTensionConfig) { + config.frequency = undefined + } + } +} diff --git a/packages/core/src/AnimationResult.ts b/packages/core/src/AnimationResult.ts new file mode 100644 index 0000000000..157f514eb5 --- /dev/null +++ b/packages/core/src/AnimationResult.ts @@ -0,0 +1,48 @@ +import { AnimationResult } from './types' +import { Readable } from './types/internal' + +/** @internal */ +export const getCombinedResult = ( + target: T, + results: AnimationResult[] +): AnimationResult => + results.length == 1 + ? results[0] + : results.some(result => result.cancelled) + ? getCancelledResult(target) + : results.every(result => result.noop) + ? getNoopResult(target) + : getFinishedResult( + target, + results.every(result => result.finished) + ) + +/** No-op results are for updates that never start an animation. */ +export const getNoopResult = ( + target: T, + value = target.get() +) => ({ + value, + noop: true, + finished: true, + target, +}) + +export const getFinishedResult = ( + target: T, + finished: boolean, + value = target.get() +) => ({ + value, + finished, + target, +}) + +export const getCancelledResult = ( + target: T, + value = target.get() +) => ({ + value, + cancelled: true, + target, +}) diff --git a/packages/core/src/Controller.test.ts b/packages/core/src/Controller.test.ts new file mode 100644 index 0000000000..25cf84347c --- /dev/null +++ b/packages/core/src/Controller.test.ts @@ -0,0 +1,510 @@ +import { Controller } from './Controller' +import { flushMicroTasks } from 'flush-microtasks' + +const frameLength = 1000 / 60 + +describe('Controller', () => { + it('can animate a number', async () => { + const ctrl = new Controller({ x: 0 }) + ctrl.start({ x: 100 }) + + await advanceUntilIdle() + const frames = getFrames(ctrl) + expect(frames).toMatchSnapshot() + + // The first frame should *not* be the from value. + expect(frames[0]).not.toEqual({ x: 0 }) + + // The last frame should be the goal value. + expect(frames.slice(-1)[0]).toEqual({ x: 100 }) + }) + + it('can animate an array of numbers', async () => { + const config = { precision: 0.005 } + const ctrl = new Controller<{ x: [number, number] }>({ x: [1, 2], config }) + ctrl.start({ x: [5, 10] }) + + await advanceUntilIdle() + const frames = getFrames(ctrl) + expect(frames).toMatchSnapshot() + + // The last frame should be the goal value. + expect(frames.slice(-1)[0]).toEqual({ x: [5, 10] }) + + // The 2nd value is always ~2x the 1st value (within the defined precision). + const factors = frames.map(frame => frame.x[1] / frame.x[0]) + expect( + factors.every(factor => Math.abs(2 - factor) < config.precision) + ).toBeTruthy() + }) + + describe('when the "to" prop is an async function', () => { + it('respects the "cancel" prop', async () => { + const ctrl = new Controller({ from: { x: 0 } }) + const promise = ctrl.start({ + to: async next => { + while (true) { + await next({ x: 1, reset: true }) + } + }, + }) + + const { x } = ctrl.springs + await advanceUntilValue(x, 0.5) + + ctrl.start({ cancel: true }) + await flushMicroTasks() + + expect(ctrl.idle).toBeTruthy() + expect((await promise).cancelled).toBeTruthy() + }) + + it('respects the "stop" method', async () => { + const ctrl = new Controller({ from: { x: 0 } }) + const promise = ctrl.start({ + to: async next => { + while (true) { + await next({ x: 1, reset: true }) + } + }, + }) + + const { x } = ctrl.springs + await advanceUntilValue(x, 0.5) + + ctrl.stop() + + expect(ctrl.idle).toBeTruthy() + expect((await promise).finished).toBeFalsy() + }) + + it('respects the "pause" prop', async () => { + const ctrl = new Controller({ from: { x: 0 } }) + ctrl.start({ pause: true }) + + let n = 0 + ctrl.start({ + to: async animate => { + while (true) { + n += 1 + await animate({ x: 1, reset: true }) + } + }, + }) + + await flushMicroTasks() + expect(n).toBe(0) + + ctrl.start({ pause: false }) + + await flushMicroTasks() + expect(n).toBe(1) + }) + + describe('when the "to" prop is changed', () => { + it('stops the old "to" prop', async () => { + const ctrl = new Controller({ from: { x: 0 } }) + + let n = 0 + const promise = ctrl.start({ + to: async next => { + while (++n < 5) { + await next({ x: 1, reset: true }) + } + }, + }) + + await advance() + expect(n).toBe(1) + + ctrl.start({ + to: () => {}, + }) + + await advanceUntilIdle() + expect(n).toBe(1) + + expect(await promise).toMatchObject({ + finished: false, + }) + }) + }) + + // This function is the "to" prop's 1st argument. + describe('the "animate" function', () => { + it('inherits any default props', async () => { + const ctrl = new Controller({ from: { x: 0 } }) + const onStart = jest.fn() + ctrl.start({ + onStart, + to: async animate => { + expect(onStart).toBeCalledTimes(0) + await animate({ x: 1 }) + expect(onStart).toBeCalledTimes(1) + await animate({ x: 0 }) + }, + }) + await advanceUntilIdle() + expect(onStart).toBeCalledTimes(2) + }) + + it('can start its own async animation', async () => { + const ctrl = new Controller({ from: { x: 0 } }) + + // Call this from inside the nested "to" prop. + const nestedFn = jest.fn() + // Call this after the nested "to" prop is done. + const afterFn = jest.fn() + + ctrl.start({ + to: async animate => { + await animate({ + to: async animate => { + nestedFn() + await animate({ x: 1 }) + }, + }) + afterFn() + }, + }) + + await advanceUntilIdle() + await flushMicroTasks() + + expect(nestedFn).toBeCalledTimes(1) + expect(afterFn).toBeCalledTimes(1) + }) + }) + + describe('nested async animation', () => { + it('stops the parent on bail', async () => { + const ctrl = new Controller({ from: { x: 0 } }) + const { x } = ctrl.springs + + const afterFn = jest.fn() + ctrl.start({ + to: async animate => { + await animate({ + to: async animate => { + await animate({ x: 1 }) + }, + }) + afterFn() + }, + }) + + await advanceUntilValue(x, 0.5) + ctrl.start({ cancel: true }) + await flushMicroTasks() + + expect(ctrl.idle).toBeTruthy() + expect(afterFn).not.toHaveBeenCalled() + }) + }) + + describe('while paused', () => { + it('stays paused when its values are force-finished', () => { + const ctrl = new Controller<{ t: number }>({ t: 0 }) + const { t } = ctrl.springs + + const onRest = jest.fn() + ctrl.start({ + to: next => next({ t: 1 }), + onRest, + }) + + mockRaf.step() + ctrl.pause() + + t.finish() + mockRaf.step() + + expect(ctrl['_state'].paused).toBeTruthy() + expect(onRest).not.toBeCalled() + }) + }) + + it('acts strangely without the "from" prop', async () => { + const ctrl = new Controller<{ x: number }>() + + const { springs } = ctrl + const promise = ctrl.start({ + to: async update => { + // The spring does not exist yet! + expect(springs.x).toBeUndefined() + + // Any values passed here are treated as "from" values, + // because no "from" prop was ever given. + const p1 = update({ x: 1 }) + // Now the spring exists! + expect(springs.x).toBeDefined() + // But the spring is idle! + expect(springs.x.idle).toBeTruthy() + + // This call *will* start an animation! + const p2 = update({ x: 2 }) + expect(springs.x.idle).toBeFalsy() + + await Promise.all([p1, p2]) + }, + }) + + await Promise.all([advanceUntilIdle(), promise]) + expect(ctrl.idle).toBeTruthy() + + // Since we call `update` twice, frames are generated! + expect(getFrames(ctrl)).toMatchSnapshot() + }) + }) + + describe('when the "onStart" prop is defined', () => { + it('is called once per "start" call maximum', async () => { + const ctrl = new Controller({ x: 0, y: 0 }) + + const onStart = jest.fn() + ctrl.start({ + x: 1, + y: 1, + onStart, + }) + + await advanceUntilIdle() + expect(onStart).toBeCalledTimes(1) + }) + + it('can be different per key', async () => { + const ctrl = new Controller({ x: 0, y: 0 }) + + const onStart1 = jest.fn() + ctrl.start({ x: 1, onStart: onStart1 }) + + const onStart2 = jest.fn() + ctrl.start({ y: 1, onStart: onStart2 }) + + await advanceUntilIdle() + expect(onStart1).toBeCalledTimes(1) + expect(onStart2).toBeCalledTimes(1) + }) + }) + + describe('the "loop" prop', () => { + it('can be combined with the "reverse" prop', async () => { + const ctrl = new Controller({ + t: 1, + from: { t: 0 }, + config: { duration: frameLength * 3 }, + }) + + const { t } = ctrl.springs + expect(t.get()).toBe(0) + + await advanceUntilIdle() + expect(t.get()).toBe(1) + + ctrl.start({ + loop: { reverse: true }, + }) + + await advanceUntilValue(t, 0) + await advanceUntilValue(t, 1) + expect(getFrames(t)).toMatchSnapshot() + }) + + describe('used with multiple values', () => { + it('loops all values at the same time', async () => { + const ctrl = new Controller() + + ctrl.start({ + to: { x: 1, y: 1 }, + from: { x: 0, y: 0 }, + config: key => ({ frequency: key == 'x' ? 0.3 : 1 }), + loop: true, + }) + + const { x, y } = ctrl.springs + for (let i = 0; i < 2; i++) { + await advanceUntilValue(y, 1) + + // Both values should equal their "from" value at the same time. + expect(x.get()).toBe(x.animation.from) + expect(y.get()).toBe(y.animation.from) + } + }) + }) + + describe('used when "to" is', () => { + describe('an async function', () => { + it('calls the "to" function repeatedly', async () => { + const ctrl = new Controller({ t: 0 }) + const { t } = ctrl.springs + + let loop = true + let times = 2 + + // Note: This example is silly, since you could use a for-loop + // to more easily achieve the same result, but it tests the ability + // to halt a looping script via the "loop" function prop. + ctrl.start({ + loop: () => loop, + to: async next => { + await next({ t: 1 }) + await next({ t: 0 }) + + if (times--) return + loop = false + }, + }) + + await advanceUntilValue(t, 1) + expect(t.idle).toBeFalsy() + + for (let i = 0; i < 2; i++) { + await advanceUntilValue(t, 0) + expect(t.idle).toBeFalsy() + + await advanceUntilValue(t, 1) + expect(t.idle).toBeFalsy() + } + + await advanceUntilValue(t, 0) + expect(t.idle).toBeTruthy() + }) + }) + + describe('an array', () => { + it('repeats the chain of updates', async () => { + const ctrl = new Controller({ t: 0 }) + const { t } = ctrl.springs + + let loop = true + const promise = ctrl.start({ + loop: () => { + return loop + }, + from: { t: 0 }, + to: [{ t: 1 }, { t: 2 }], + config: { duration: 3000 / 60 }, + }) + + for (let i = 0; i < 3; i++) { + await advanceUntilValue(t, 2) + expect(t.idle).toBeFalsy() + + // Run the first frame of the next loop. + mockRaf.step() + } + + loop = false + + await advanceUntilValue(t, 2) + expect(t.idle).toBeTruthy() + + expect(await promise).toMatchObject({ + value: { t: 2 }, + finished: true, + }) + }) + }) + }) + + describe('used on a noop update', () => { + it('does not loop', async () => { + const ctrl = new Controller({ t: 0 }) + + const loop = jest.fn(() => true) + ctrl.start({ t: 0, loop }) + + await advanceUntilIdle() + expect(loop).toBeCalledTimes(0) + }) + }) + + describe('when "finish" is called while paused', () => { + async function getPausedLoop() { + const ctrl = new Controller<{ t: number }>({ + from: { t: 0 }, // FIXME: replace this line with `t: 0,` for a stack overflow + loop: { + async to(start) { + await start({ + t: 1, + reset: true, + }) + }, + }, + }) + + // Ensure `loop.to` has been called. + await flushMicroTasks() + + // Apply the first frame. + mockRaf.step() + + ctrl.pause() + return ctrl + } + + it('finishes immediately', async () => { + const ctrl = await getPausedLoop() + const { t } = ctrl.springs + + expect(t.get()).toBeLessThan(1) + t.finish() + expect(t.get()).toBe(1) + }) + + it('does not loop until resumed', async () => { + const ctrl = await getPausedLoop() + const { t } = ctrl.springs + + t.finish() + expect(t.idle).toBeTruthy() + expect(t.get()).toBe(1) + + // HACK: The internal promise is undefined once resolved. + const expectResolved = (isResolved: boolean) => + !ctrl['_state'].promise == isResolved + + // Resume the paused loop. + ctrl.resume() + + // Its promise is not resolved yet.. + expectResolved(false) + expect(t.idle).toBeTruthy() + expect(t.get()).toBe(1) + + // ..but in the next microtask, it will be.. + await flushMicroTasks() + expectResolved(true) + // ..which means the loop restarts! + expect(t.idle).toBeFalsy() + expect(t.get()).toBe(0) + }) + }) + }) + + describe('the "stop" method', () => { + it('prevents any updates with pending delays', async () => { + const ctrl = new Controller<{ t: number }>({ t: 0 }) + const { t } = ctrl.springs + + ctrl.start({ t: 1, delay: 100 }) + ctrl.stop() + + await advanceUntilIdle() + expect(ctrl['_state'].timeouts.size).toBe(0) + expect(t['_state'].timeouts.size).toBe(0) + }) + + it('stops the active runAsync call', async () => { + const ctrl = new Controller<{ t: number }>({ t: 0 }) + ctrl.start({ + to: async animate => { + await animate({ t: 1 }) + }, + }) + ctrl.stop() + await advanceUntilIdle() + expect(ctrl['_state'].asyncTo).toBeUndefined() + }) + }) +}) diff --git a/packages/core/src/Controller.ts b/packages/core/src/Controller.ts new file mode 100644 index 0000000000..21f785afac --- /dev/null +++ b/packages/core/src/Controller.ts @@ -0,0 +1,498 @@ +import { OneOrMore, UnknownProps, Lookup, Falsy } from '@react-spring/types' +import { + is, + raf, + each, + noop, + flush, + toArray, + eachProp, + flushCalls, + addFluidObserver, + FluidObserver, +} from '@react-spring/shared' + +import { getDefaultProp } from './helpers' +import { FrameValue } from './FrameValue' +import { SpringRef } from './SpringRef' +import { SpringValue, createLoopUpdate, createUpdate } from './SpringValue' +import { getCancelledResult, getCombinedResult } from './AnimationResult' +import { runAsync, RunAsyncState, stopAsync } from './runAsync' +import { scheduleProps } from './scheduleProps' +import { + AnimationResult, + AsyncResult, + ControllerFlushFn, + ControllerUpdate, + OnRest, + SpringValues, +} from './types' + +/** Events batched by the `Controller` class */ +const BATCHED_EVENTS = ['onStart', 'onChange', 'onRest'] as const + +let nextId = 1 + +/** Queue of pending updates for a `Controller` instance. */ +export interface ControllerQueue + extends Array< + ControllerUpdate & { + /** The keys affected by this update. When null, all keys are affected. */ + keys: string[] | null + } + > {} + +export class Controller { + readonly id = nextId++ + + /** The animated values */ + springs: SpringValues = {} as any + + /** The queue of props passed to the `update` method. */ + queue: ControllerQueue = [] + + /** + * The injected ref. When defined, render-based updates are pushed + * onto the `queue` instead of being auto-started. + */ + ref?: SpringRef + + /** Custom handler for flushing update queues */ + protected _flush?: ControllerFlushFn + + /** These props are used by all future spring values */ + protected _initialProps?: Lookup + + /** The counter for tracking `scheduleProps` calls */ + protected _lastAsyncId = 0 + + /** The values currently being animated */ + protected _active = new Set() + + /** The values that changed recently */ + protected _changed = new Set() + + /** Equals false when `onStart` listeners can be called */ + protected _started = false + + /** State used by the `runAsync` function */ + protected _state: RunAsyncState = { + paused: false, + pauseQueue: new Set(), + resumeQueue: new Set(), + timeouts: new Set(), + } + + /** The event queues that are flushed once per frame maximum */ + protected _events = { + onStart: new Set<(ctrl: Controller) => void>(), + onChange: new Set<(values: object) => void>(), + onRest: new Map(), + } + + constructor( + props?: ControllerUpdate | null, + flush?: ControllerFlushFn + ) { + this._onFrame = this._onFrame.bind(this) + if (flush) { + this._flush = flush + } + if (props) { + this.start({ default: true, ...props }) + } + } + + /** + * Equals `true` when no spring values are in the frameloop, and + * no async animation is currently active. + */ + get idle() { + return ( + !this._state.asyncTo && + Object.values(this.springs as Lookup).every( + spring => spring.idle + ) + ) + } + + /** Get the current values of our springs */ + get(): State & UnknownProps { + const values: any = {} + this.each((spring, key) => (values[key] = spring.get())) + return values + } + + /** Set the current values without animating. */ + set(values: Partial) { + for (const key in values) { + const value = values[key] + if (!is.und(value)) { + this.springs[key].set(value) + } + } + } + + /** Push an update onto the queue of each value. */ + update(props: ControllerUpdate | Falsy) { + if (props) { + this.queue.push(createUpdate(props)) + } + return this + } + + /** + * Start the queued animations for every spring, and resolve the returned + * promise once all queued animations have finished or been cancelled. + * + * When you pass a queue (instead of nothing), that queue is used instead of + * the queued animations added with the `update` method, which are left alone. + */ + start(props?: OneOrMore> | null): AsyncResult { + let { queue } = this as any + if (props) { + queue = toArray(props).map(createUpdate) + } else { + this.queue = [] + } + + if (this._flush) { + return this._flush(this, queue) + } + + prepareKeys(this, queue) + return flushUpdateQueue(this, queue) + } + + /** Stop all animations. */ + stop(): this + /** Stop animations for the given keys. */ + stop(keys: OneOrMore): this + /** Cancel all animations. */ + stop(cancel: boolean): this + /** Cancel animations for the given keys. */ + stop(cancel: boolean, keys: OneOrMore): this + /** Stop some or all animations. */ + stop(keys?: OneOrMore): this + /** Cancel some or all animations. */ + stop(cancel: boolean, keys?: OneOrMore): this + /** @internal */ + stop(arg?: boolean | OneOrMore, keys?: OneOrMore) { + if (arg !== !!arg) { + keys = arg as OneOrMore + } + if (keys) { + const springs = this.springs as Lookup + each(toArray(keys), key => springs[key].stop(!!arg)) + } else { + stopAsync(this._state, this._lastAsyncId) + this.each(spring => spring.stop(!!arg)) + } + return this + } + + /** Freeze the active animation in time */ + pause(keys?: OneOrMore) { + if (is.und(keys)) { + this.start({ pause: true }) + } else { + const springs = this.springs as Lookup + each(toArray(keys), key => springs[key].pause()) + } + return this + } + + /** Resume the animation if paused. */ + resume(keys?: OneOrMore) { + if (is.und(keys)) { + this.start({ pause: false }) + } else { + const springs = this.springs as Lookup + each(toArray(keys), key => springs[key].resume()) + } + return this + } + + /** Call a function once per spring value */ + each(iterator: (spring: SpringValue, key: string) => void) { + eachProp(this.springs, iterator as any) + } + + /** @internal Called at the end of every animation frame */ + protected _onFrame() { + const { onStart, onChange, onRest } = this._events + + const active = this._active.size > 0 + if (active && !this._started) { + this._started = true + flushCalls(onStart, this) + } + + const idle = !active && this._started + const changed = this._changed.size > 0 && onChange.size + const values = changed || (idle && onRest.size) ? this.get() : null + + if (changed) { + flushCalls(onChange, values!) + } + + // The "onRest" queue is only flushed when all springs are idle. + if (idle) { + this._started = false + flush(onRest, ([onRest, result]) => { + result.value = values + onRest(result) + }) + } + } + + /** @internal */ + eventObserved(event: FrameValue.Event) { + if (event.type == 'change') { + this._changed.add(event.parent) + if (!event.idle) { + this._active.add(event.parent) + } + } else if (event.type == 'idle') { + this._active.delete(event.parent) + } + // The `onFrame` handler runs when a parent is changed or idle. + else return + raf.onFrame(this._onFrame) + } +} + +/** + * Warning: Props might be mutated. + */ +export function flushUpdateQueue( + ctrl: Controller, + queue: ControllerQueue +) { + return Promise.all( + queue.map(props => flushUpdate(ctrl, props)) + ).then(results => getCombinedResult(ctrl, results)) +} + +/** + * Warning: Props might be mutated. + * + * Process a single set of props using the given controller. + * + * The returned promise resolves to `true` once the update is + * applied and any animations it starts are finished without being + * stopped or cancelled. + */ +export async function flushUpdate( + ctrl: Controller, + props: ControllerQueue[number], + isLoop?: boolean +): AsyncResult { + const { keys, to, from, loop, onRest, onResolve } = props + const defaults = is.obj(props.default) && props.default + + // Looping must be handled in this function, or else the values + // would end up looping out-of-sync in many common cases. + if (loop) { + props.loop = false + } + + // Treat false like null, which gets ignored. + if (to === false) props.to = null + if (from === false) props.from = null + + const asyncTo = is.arr(to) || is.fun(to) ? to : undefined + if (asyncTo) { + props.to = undefined + props.onRest = undefined + if (defaults) { + defaults.onRest = undefined + } + } + // For certain events, use batching to prevent multiple calls per frame. + // However, batching is avoided when the `to` prop is async, because any + // event props are used as default props instead. + else { + each(BATCHED_EVENTS, key => { + const handler: any = props[key] + if (is.fun(handler)) { + const queue = ctrl['_events'][key] + if (queue instanceof Set) { + props[key] = () => queue.add(handler) + } else { + props[key] = (({ finished, cancelled }: AnimationResult) => { + const result = queue.get(handler) + if (result) { + if (!finished) result.finished = false + if (cancelled) result.cancelled = true + } else { + // The "value" is set before the "handler" is called. + queue.set(handler, { + target: ctrl, + value: null, + finished, + cancelled, + }) + } + }) as any + } + // Avoid using a batched `handler` as a default prop. + if (defaults) { + defaults[key] = props[key] as any + } + } + }) + } + + const state = ctrl['_state'] + + // Pause/resume the `asyncTo` when `props.pause` is true/false. + if (props.pause === !state.paused) { + state.paused = props.pause + flushCalls(props.pause ? state.pauseQueue : state.resumeQueue) + } + // When a controller is paused, its values are also paused. + else if (state.paused) { + props.pause = true + } + + const promises: AsyncResult[] = (keys || Object.keys(ctrl.springs)).map(key => + ctrl.springs[key]!.start(props as any) + ) + + const cancel = + props.cancel === true || getDefaultProp(props, 'cancel') === true + + if (asyncTo || (cancel && state.asyncId)) { + promises.push( + scheduleProps(++ctrl['_lastAsyncId'], { + props, + state, + actions: { + pause: noop, + resume: noop, + start(props, resolve) { + if (cancel) { + stopAsync(state, ctrl['_lastAsyncId']) + resolve(getCancelledResult(ctrl)) + } else { + props.onRest = onRest + resolve(runAsync(asyncTo!, props, state, ctrl)) + } + }, + }, + }) + ) + } + + // Pause after updating each spring, so they can be resumed separately + // and so their default `pause` and `cancel` props are updated. + if (state.paused) { + // Ensure `this` must be resumed before the returned promise + // is resolved and before starting the next `loop` repetition. + await new Promise(resume => { + state.resumeQueue.add(resume) + }) + } + + const result = getCombinedResult(ctrl, await Promise.all(promises)) + if (loop && result.finished && !(isLoop && result.noop)) { + const nextProps = createLoopUpdate(props, loop, to) + if (nextProps) { + prepareKeys(ctrl, [nextProps]) + return flushUpdate(ctrl, nextProps, true) + } + } + if (onResolve) { + raf.batchedUpdates(() => onResolve(result)) + } + return result +} + +/** + * From an array of updates, get the map of `SpringValue` objects + * by their keys. Springs are created when any update wants to + * animate a new key. + * + * Springs created by `getSprings` are neither cached nor observed + * until they're given to `setSprings`. + */ +export function getSprings( + ctrl: Controller, + props?: OneOrMore> +) { + const springs = { ...ctrl.springs } + if (props) { + each(toArray(props), (props: any) => { + if (is.und(props.keys)) { + props = createUpdate(props) + } + if (!is.obj(props.to)) { + // Avoid passing array/function to each spring. + props = { ...props, to: undefined } + } + prepareSprings(springs as any, props, key => { + return createSpring(key) + }) + }) + } + return springs +} + +/** + * Tell a controller to manage the given `SpringValue` objects + * whose key is not already in use. + */ +export function setSprings( + ctrl: Controller, + springs: SpringValues +) { + eachProp(springs, (spring, key) => { + if (!ctrl.springs[key]) { + ctrl.springs[key] = spring + addFluidObserver(spring, ctrl) + } + }) +} + +function createSpring(key: string, observer?: FluidObserver) { + const spring = new SpringValue() + spring.key = key + if (observer) { + addFluidObserver(spring, observer) + } + return spring +} + +/** + * Ensure spring objects exist for each defined key. + * + * Using the `props`, the `Animated` node of each `SpringValue` may + * be created or updated. + */ +function prepareSprings( + springs: SpringValues, + props: ControllerQueue[number], + create: (key: string) => SpringValue +) { + if (props.keys) { + each(props.keys, key => { + const spring = springs[key] || (springs[key] = create(key)) + spring['_prepareNode'](props) + }) + } +} + +/** + * Ensure spring objects exist for each defined key, and attach the + * `ctrl` to them for observation. + * + * The queue is expected to contain `createUpdate` results. + */ +function prepareKeys(ctrl: Controller, queue: ControllerQueue[number][]) { + each(queue, props => { + prepareSprings(ctrl.springs, props, key => { + return createSpring(key, ctrl) + }) + }) +} diff --git a/packages/core/src/FrameValue.ts b/packages/core/src/FrameValue.ts new file mode 100644 index 0000000000..5a38e560db --- /dev/null +++ b/packages/core/src/FrameValue.ts @@ -0,0 +1,132 @@ +import { + deprecateInterpolate, + frameLoop, + FluidValue, + Globals as G, + callFluidObservers, +} from '@react-spring/shared' +import { InterpolatorArgs } from '@react-spring/types' +import { getAnimated } from '@react-spring/animated' + +import { Interpolation } from './Interpolation' + +export const isFrameValue = (value: any): value is FrameValue => + value instanceof FrameValue + +let nextId = 1 + +/** + * A kind of `FluidValue` that manages an `AnimatedValue` node. + * + * Its underlying value can be accessed and even observed. + */ +export abstract class FrameValue extends FluidValue< + T, + FrameValue.Event +> { + readonly id = nextId++ + + abstract key?: string + abstract get idle(): boolean + + protected _priority = 0 + + get priority() { + return this._priority + } + set priority(priority: number) { + if (this._priority != priority) { + this._priority = priority + this._onPriorityChange(priority) + } + } + + /** Get the current value */ + get(): T { + const node = getAnimated(this) + return node && node.getValue() + } + + /** Create a spring that maps our value to another value */ + to(...args: InterpolatorArgs) { + return G.to(this, args) as Interpolation + } + + /** @deprecated Use the `to` method instead. */ + interpolate(...args: InterpolatorArgs) { + deprecateInterpolate() + return G.to(this, args) as Interpolation + } + + toJSON() { + return this.get() + } + + protected observerAdded(count: number) { + if (count == 1) this._attach() + } + + protected observerRemoved(count: number) { + if (count == 0) this._detach() + } + + /** @internal */ + abstract advance(dt: number): void + + /** @internal */ + abstract eventObserved(_event: FrameValue.Event): void + + /** Called when the first child is added. */ + protected _attach() {} + + /** Called when the last child is removed. */ + protected _detach() {} + + /** Tell our children about our new value */ + protected _onChange(value: T, idle = false) { + callFluidObservers(this, { + type: 'change', + parent: this, + value, + idle, + }) + } + + /** Tell our children about our new priority */ + protected _onPriorityChange(priority: number) { + if (!this.idle) { + frameLoop.sort(this) + } + callFluidObservers(this, { + type: 'priority', + parent: this, + priority, + }) + } +} + +export declare namespace FrameValue { + /** A parent changed its value */ + interface ChangeEvent { + parent: FrameValue + type: 'change' + value: T + idle: boolean + } + + /** A parent changed its priority */ + interface PriorityEvent { + parent: FrameValue + type: 'priority' + priority: number + } + + /** A parent is done animating */ + interface IdleEvent { + parent: FrameValue + type: 'idle' + } + + /** Events sent to children of `FrameValue` objects */ + export type Event = ChangeEvent | PriorityEvent | IdleEvent +} diff --git a/packages/core/src/Interpolation.test.ts b/packages/core/src/Interpolation.test.ts new file mode 100644 index 0000000000..379746bc19 --- /dev/null +++ b/packages/core/src/Interpolation.test.ts @@ -0,0 +1,56 @@ +import { SpringValue } from './SpringValue' +import { to } from './interpolate' +import { addFluidObserver } from '@react-spring/shared' + +describe('Interpolation', () => { + it.todo('can use a SpringValue') + it.todo('can use another Interpolation') + it.todo('can use a non-animated FluidValue') + + describe('when multiple inputs change in the same frame', () => { + it.todo('only computes its value once') + }) + + describe('when an input resets its animation', () => { + it.todo('computes its value before the first frame') + }) + + describe('when all inputs are paused', () => { + it('leaves the frameloop', () => { + const a = new SpringValue({ from: 0, to: 1 }) + const b = new SpringValue({ from: 1, to: 0 }) + mockRaf.step() + + const calc = jest.fn((a: number, b: number) => Math.abs(a - b)) + const c = to([a, b], calc) + + // For interpolation to be active, it must be observed. + const observer = jest.fn() + addFluidObserver(c, observer) + + // Pause the first input. + a.pause() + + // Expect interpolation to continue. + calc.mockClear() + mockRaf.step() + expect(calc).toBeCalled() + + // Pause the other input. + b.pause() + + // In the next frame, the interpolation still calculates its next value. + // When its value stays the same, it checks the idle status of each input, + // which triggers an update to its own idle status. + calc.mockClear() + mockRaf.step() + expect(calc).toBeCalled() + expect(c.idle).toBeTruthy() + + // Expect interpolation to be paused. + calc.mockClear() + mockRaf.step() + expect(calc).not.toBeCalled() + }) + }) +}) diff --git a/packages/core/src/Interpolation.ts b/packages/core/src/Interpolation.ts new file mode 100644 index 0000000000..d747d3cf3c --- /dev/null +++ b/packages/core/src/Interpolation.ts @@ -0,0 +1,185 @@ +import { Arrify, InterpolatorArgs, InterpolatorFn } from '@react-spring/types' +import { + is, + raf, + each, + isEqual, + toArray, + frameLoop, + FluidValue, + getFluidValue, + createInterpolator, + Globals as G, + callFluidObservers, + addFluidObserver, + removeFluidObserver, + hasFluidValue, +} from '@react-spring/shared' + +import { FrameValue, isFrameValue } from './FrameValue' +import { + getAnimated, + setAnimated, + getAnimatedType, + getPayload, +} from '@react-spring/animated' + +/** + * An `Interpolation` is a memoized value that's computed whenever one of its + * `FluidValue` dependencies has its value changed. + * + * Other `FrameValue` objects can depend on this. For example, passing an + * `Interpolation` as the `to` prop of a `useSpring` call will trigger an + * animation toward the memoized value. + */ +export class Interpolation extends FrameValue { + /** Useful for debugging. */ + key?: string + + /** Equals false when in the frameloop */ + idle = true + + /** The function that maps inputs values to output */ + readonly calc: InterpolatorFn + + /** The inputs which are currently animating */ + protected _active = new Set() + + constructor( + /** The source of input values */ + readonly source: unknown, + args: InterpolatorArgs + ) { + super() + this.calc = createInterpolator(...args) + + const value = this._get() + const nodeType = getAnimatedType(value) + + // Assume the computed value never changes type. + setAnimated(this, nodeType.create(value)) + } + + advance(_dt?: number) { + const value = this._get() + const oldValue = this.get() + if (!isEqual(value, oldValue)) { + getAnimated(this)!.setValue(value) + this._onChange(value, this.idle) + } + // Become idle when all parents are idle or paused. + if (!this.idle && checkIdle(this._active)) { + becomeIdle(this) + } + } + + protected _get() { + const inputs: Arrify = is.arr(this.source) + ? this.source.map(getFluidValue) + : (toArray(getFluidValue(this.source)) as any) + + return this.calc(...inputs) + } + + protected _start() { + if (this.idle && !checkIdle(this._active)) { + this.idle = false + + each(getPayload(this)!, node => { + node.done = false + }) + + if (G.skipAnimation) { + raf.batchedUpdates(() => this.advance()) + becomeIdle(this) + } else { + frameLoop.start(this) + } + } + } + + // Observe our sources only when we're observed. + protected _attach() { + let priority = 1 + each(toArray(this.source), source => { + if (hasFluidValue(source)) { + addFluidObserver(source, this) + } + if (isFrameValue(source)) { + if (!source.idle) { + this._active.add(source) + } + priority = Math.max(priority, source.priority + 1) + } + }) + this.priority = priority + this._start() + } + + // Stop observing our sources once we have no observers. + protected _detach() { + each(toArray(this.source), source => { + if (hasFluidValue(source)) { + removeFluidObserver(source, this) + } + }) + this._active.clear() + becomeIdle(this) + } + + /** @internal */ + eventObserved(event: FrameValue.Event) { + // Update our value when an idle parent is changed, + // and enter the frameloop when a parent is resumed. + if (event.type == 'change') { + if (event.idle) { + this.advance() + } else { + this._active.add(event.parent) + this._start() + } + } + // Once all parents are idle, the `advance` method runs one more time, + // so we should avoid updating the `idle` status here. + else if (event.type == 'idle') { + this._active.delete(event.parent) + } + // Ensure our priority is greater than all parents, which means + // our value won't be updated until our parents have updated. + else if (event.type == 'priority') { + this.priority = toArray(this.source).reduce( + (highest: number, parent) => + Math.max(highest, (isFrameValue(parent) ? parent.priority : 0) + 1), + 0 + ) + } + } +} + +/** Returns true for an idle source. */ +function isIdle(source: any) { + return source.idle !== false +} + +/** Return true if all values in the given set are idle or paused. */ +function checkIdle(active: Set) { + // Parents can be active even when paused, so the `.every` check + // removes us from the frameloop if all active parents are paused. + return !active.size || Array.from(active).every(isIdle) +} + +/** Become idle if not already idle. */ +function becomeIdle(self: Interpolation) { + if (!self.idle) { + self.idle = true + + each(getPayload(self)!, node => { + node.done = true + }) + + callFluidObservers(self, { + type: 'idle', + parent: self, + }) + } +} diff --git a/packages/core/src/SpringContext.test.tsx b/packages/core/src/SpringContext.test.tsx new file mode 100644 index 0000000000..bd1713d606 --- /dev/null +++ b/packages/core/src/SpringContext.test.tsx @@ -0,0 +1,128 @@ +import * as React from 'react' +import { render, RenderResult } from '@testing-library/react' +import { SpringContext } from './SpringContext' +import { SpringValue } from './SpringValue' +import { useSpring } from './hooks' + +describe('SpringContext', () => { + let t: SpringValue + + const Child = () => { + t = useSpring({ t: 1, from: { t: 0 } }).t + return null + } + + const update = createUpdater(props => ( + + + + )) + + it('only merges when changed', () => { + const context: SpringContext = {} + const onProps = jest.fn() + const Test = () => { + useSpring({ onProps, x: 0 }) + return null + } + + const getRoot = () => ( + + + + ) + + const expectUpdates = (updates: any[]) => { + onProps.mock.calls.forEach((args, i) => { + const update = updates[i] + if (update) { + expect(args[0]).toMatchObject(update) + } else { + // Unexpected update. + expect(args[0]).toBeUndefined() + } + }) + onProps.mockClear() + } + + const elem = render(getRoot()) + expectUpdates([{ onProps, to: { x: 0 } }]) + + context.pause = true + elem.rerender(getRoot()) + expectUpdates([{ default: context }, { onProps, to: { x: 0 } }]) + + elem.rerender(getRoot()) + expectUpdates([{ onProps, to: { x: 0 } }]) + }) + + it('can pause current animations', () => { + update({}) + mockRaf.step() + expect(t.idle).toBeFalsy() + + update({ pause: true }) + expect(t.idle).toBeTruthy() + expect(t.goal).toBe(1) + + update({ pause: false }) + expect(t.idle).toBeFalsy() + expect(t.goal).toBe(1) + }) + it('can pause future animations', () => { + // Paused right away. + update({ pause: true }) + expect(t.idle).toBeTruthy() + expect(t.goal).toBeUndefined() + + // This update is paused too. + t.start(2) + expect(t.idle).toBeTruthy() + expect(t.goal).toBeUndefined() + + // Let it roll. + update({ pause: false }) + expect(t.idle).toBeFalsy() + // The `goal` is not 2, because the `useSpring` hook is + // executed by the SpringContext update. + expect(t.goal).toBe(1) + }) + + it('can make current animations immediate', () => { + update({}) + mockRaf.step() + expect(t.idle).toBeFalsy() + + update({ immediate: true }) + mockRaf.step() + + expect(t.idle).toBeTruthy() + expect(t.get()).toBe(1) + }) + it('can make future animations immediate', () => { + update({ immediate: true }) + mockRaf.step() + + expect(t.idle).toBeTruthy() + expect(t.get()).toBe(1) + + t.start(2) + mockRaf.step() + + expect(t.idle).toBeTruthy() + expect(t.get()).toBe(2) + }) +}) + +function createUpdater(Component: React.ComponentType) { + let result: RenderResult | undefined + afterEach(() => { + result = undefined + }) + return (props: SpringContext) => { + const elem = + if (result) result.rerender(elem) + else result = render(elem) + return result + } +} diff --git a/packages/core/src/SpringContext.tsx b/packages/core/src/SpringContext.tsx new file mode 100644 index 0000000000..8e0a48d6fe --- /dev/null +++ b/packages/core/src/SpringContext.tsx @@ -0,0 +1,45 @@ +import * as React from 'react' +import { useContext, PropsWithChildren } from 'react' +import { useMemoOne } from '@react-spring/shared' + +/** + * This context affects all new and existing `SpringValue` objects + * created with the hook API or the renderprops API. + */ +export interface SpringContext { + /** Pause all new and existing animations. */ + pause?: boolean + /** Force all new and existing animations to be immediate. */ + immediate?: boolean +} + +export const SpringContext = ({ + children, + ...props +}: PropsWithChildren) => { + const inherited = useContext(ctx) + + // Inherited values are dominant when truthy. + const pause = props.pause || !!inherited.pause, + immediate = props.immediate || !!inherited.immediate + + // Memoize the context to avoid unwanted renders. + props = useMemoOne(() => ({ pause, immediate }), [pause, immediate]) + + const { Provider } = ctx + return {children} +} + +const ctx = makeContext(SpringContext, {} as SpringContext) + +// Allow `useContext(SpringContext)` in TypeScript. +SpringContext.Provider = ctx.Provider +SpringContext.Consumer = ctx.Consumer + +/** Make the `target` compatible with `useContext` */ +function makeContext(target: any, init: T): React.Context { + Object.assign(target, React.createContext(init)) + target.Provider._context = target + target.Consumer._context = target + return target +} diff --git a/packages/core/src/SpringPhase.ts b/packages/core/src/SpringPhase.ts new file mode 100644 index 0000000000..6c0a2c0152 --- /dev/null +++ b/packages/core/src/SpringPhase.ts @@ -0,0 +1,24 @@ +/** The property symbol of the current animation phase. */ +const $P = Symbol.for('SpringPhase') + +const HAS_ANIMATED = 1 +const IS_ANIMATING = 2 +const IS_PAUSED = 4 + +/** Returns true if the `target` has ever animated. */ +export const hasAnimated = (target: any) => (target[$P] & HAS_ANIMATED) > 0 + +/** Returns true if the `target` is animating (even if paused). */ +export const isAnimating = (target: any) => (target[$P] & IS_ANIMATING) > 0 + +/** Returns true if the `target` is paused (even if idle). */ +export const isPaused = (target: any) => (target[$P] & IS_PAUSED) > 0 + +/** Set the active bit of the `target` phase. */ +export const setActiveBit = (target: any, active: boolean) => + active + ? (target[$P] |= IS_ANIMATING | HAS_ANIMATED) + : (target[$P] &= ~IS_ANIMATING) + +export const setPausedBit = (target: any, paused: boolean) => + paused ? (target[$P] |= IS_PAUSED) : (target[$P] &= ~IS_PAUSED) diff --git a/packages/core/src/SpringRef.ts b/packages/core/src/SpringRef.ts new file mode 100644 index 0000000000..e4148a0473 --- /dev/null +++ b/packages/core/src/SpringRef.ts @@ -0,0 +1,115 @@ +import { each, is } from '@react-spring/shared' +import { Lookup, Falsy, OneOrMore } from '@react-spring/types' +import { AsyncResult, ControllerUpdate } from './types' +import { Controller } from './Controller' + +interface ControllerUpdateFn { + (i: number, ctrl: Controller): ControllerUpdate | Falsy +} + +export class SpringRef { + readonly current: Controller[] = [] + + /** Update the state of each controller without animating. */ + set(values: Partial) { + each(this.current, ctrl => ctrl.set(values)) + } + + /** Start the queued animations of each controller. */ + start(): AsyncResult>[] + /** Update every controller with the same props. */ + start(props: ControllerUpdate): AsyncResult>[] + /** Update controllers based on their state. */ + start(props: ControllerUpdateFn): AsyncResult>[] + /** Start animating each controller. */ + start( + props?: ControllerUpdate | ControllerUpdateFn + ): AsyncResult>[] + /** @internal */ + start(props?: object | ControllerUpdateFn) { + const results: AsyncResult[] = [] + + each(this.current, (ctrl, i) => { + if (is.und(props)) { + results.push(ctrl.start()) + } else { + const update = this._getProps(props, ctrl, i) + if (update) { + results.push(ctrl.start(update)) + } + } + }) + + return results + } + + /** Add the same props to each controller's update queue. */ + update(props: ControllerUpdate): this + /** Generate separate props for each controller's update queue. */ + update(props: ControllerUpdateFn): this + /** Add props to each controller's update queue. */ + update(props: ControllerUpdate | ControllerUpdateFn): this + /** @internal */ + update(props: object | ControllerUpdateFn) { + each(this.current, (ctrl, i) => ctrl.update(this._getProps(props, ctrl, i))) + return this + } + + /** Add a controller to this ref */ + add(ctrl: Controller) { + if (!this.current.includes(ctrl)) { + this.current.push(ctrl) + } + } + + /** Remove a controller from this ref */ + delete(ctrl: Controller) { + const i = this.current.indexOf(ctrl) + if (~i) this.current.splice(i, 1) + } + + /** Overridden by `useTrail` to manipulate props */ + protected _getProps( + arg: ControllerUpdate | ControllerUpdateFn, + ctrl: Controller, + index: number + ): ControllerUpdate | Falsy { + return is.fun(arg) ? arg(index, ctrl) : arg + } +} + +export interface SpringRef { + /** Stop all animations. */ + stop(): this + /** Stop animations for the given keys. */ + stop(keys: OneOrMore): this + /** Cancel all animations. */ + stop(cancel: boolean): this + /** Cancel animations for the given keys. */ + stop(cancel: boolean, keys: OneOrMore): this + /** Stop some or all animations. */ + stop(keys?: OneOrMore): this + /** Cancel some or all animations. */ + stop(cancel: boolean, keys?: OneOrMore): this + + /** Pause all animations. */ + pause(): this + /** Pause animations for the given keys. */ + pause(keys: OneOrMore): this + /** Pause some or all animations. */ + pause(keys?: OneOrMore): this + + /** Resume all animations. */ + resume(): this + /** Resume animations for the given keys. */ + resume(keys: OneOrMore): this + /** Resume some or all animations. */ + resume(keys?: OneOrMore): this +} + +each(['stop', 'pause', 'resume'] as const, key => { + SpringRef.prototype[key] = function (this: SpringRef) { + each(this.current, ctrl => ctrl[key](...arguments)) + return this + } as any +}) diff --git a/packages/core/src/SpringValue.test.ts b/packages/core/src/SpringValue.test.ts new file mode 100644 index 0000000000..0aceed9837 --- /dev/null +++ b/packages/core/src/SpringValue.test.ts @@ -0,0 +1,973 @@ +import { SpringValue } from './SpringValue' +import { FrameValue } from './FrameValue' +import { flushMicroTasks } from 'flush-microtasks' +import { + addFluidObserver, + FluidObserver, + getFluidObservers, + Globals, + removeFluidObserver, +} from '@react-spring/shared' + +const frameLength = 1000 / 60 + +describe('SpringValue', () => { + it('can animate a number', async () => { + const spring = new SpringValue(0) + spring.start(1, { + config: { duration: 10 * frameLength }, + }) + await advanceUntilIdle() + const frames = getFrames(spring) + expect(frames).toMatchSnapshot() + }) + + it('can animate a string', async () => { + const spring = new SpringValue() + const promise = spring.start({ + to: '10px 20px', + from: '0px 0px', + config: { duration: 10 * frameLength }, + }) + await advanceUntilIdle() + const frames = getFrames(spring) + expect(frames).toMatchSnapshot() + const { finished } = await promise + expect(finished).toBeTruthy() + }) + + // FIXME: This test fails. + xit('animates a number the same as a numeric string', async () => { + const spring1 = new SpringValue(0) + spring1.start(10) + + await advanceUntilIdle() + const frames = getFrames(spring1).map(n => n + 'px') + + const spring2 = new SpringValue('0px') + spring2.start('10px') + + await advanceUntilIdle() + expect(frames).toEqual(getFrames(spring2)) + }) + + it('can animate an array of numbers', async () => { + const onChange = jest.fn() + const spring = new SpringValue() + spring.start({ + to: [10, 20], + from: [0, 0], + config: { duration: 10 * frameLength }, + onChange, + }) + await advanceUntilIdle() + expect(onChange.mock.calls.slice(-1)[0]).toEqual([ + spring.animation.to, + spring, + ]) + expect(getFrames(spring)).toMatchSnapshot() + }) + + it('can have an animated string as its target', async () => { + const target = new SpringValue('yellow') + const spring = new SpringValue({ + to: target, + config: { duration: 10 * frameLength }, + }) + + // The target is not attached until the spring is observed. + addFluidObserver(spring, () => {}) + + mockRaf.step() + target.set('red') + + await advanceUntilIdle() + expect(getFrames(spring)).toMatchSnapshot() + }) + + describeProps() + describeEvents() + describeMethods() + describeGlobals() + + describeTarget('another SpringValue', from => { + const node = new SpringValue(from) + return { + node, + set: node.set.bind(node), + start: node.start.bind(node), + reset: node.reset.bind(node), + } + }) + + describeTarget('an Interpolation', from => { + const parent = new SpringValue(from - 1) + const node = parent.to(n => n + 1) + return { + node, + set: n => parent.set(n - 1), + start: n => parent.start(n - 1), + reset: parent.reset.bind(parent), + } + }) + + // No-op updates don't change the goal value. + describe('no-op updates', () => { + it('resolves when the animation is finished', async () => { + const spring = new SpringValue(0) + spring.start(1) + + // Create a no-op update. + const resolve = jest.fn() + spring.start(1).then(resolve) + + await flushMicroTasks() + expect(resolve).not.toBeCalled() + + await advanceUntilIdle() + expect(resolve).toBeCalled() + }) + }) +}) + +function describeProps() { + describeToProp() + describeFromProp() + describeResetProp() + describeDefaultProp() + describeReverseProp() + describeImmediateProp() + describeConfigProp() + describeLoopProp() + describeDelayProp() +} + +function describeToProp() { + describe('when "to" prop is changed', () => { + it.todo('resolves the "start" promise with (finished: false)') + it.todo('avoids calling the "onStart" prop') + it.todo('avoids calling the "onRest" prop') + }) + + describe('when "to" prop equals current value', () => { + it('cancels any pending animation', async () => { + const spring = new SpringValue(0) + spring.start(1) + + // Prevent the animation to 1 (which hasn't started yet) + spring.start(0) + + await advanceUntilIdle() + expect(getFrames(spring)).toEqual([]) + }) + + it('avoids interrupting an active animation', async () => { + const spring = new SpringValue(0) + spring.start(1) + await advance() + + const goal = spring.get() + spring.start(goal) + expect(spring.idle).toBeFalsy() + + await advanceUntilIdle() + expect(spring.get()).toBe(goal) + expect(getFrames(spring)).toMatchSnapshot() + }) + }) + + describe('when "to" prop is a function', () => { + describe('and "from" prop is defined', () => { + it('stops the active animation before "to" is called', () => { + const spring = new SpringValue({ from: 0, to: 1 }) + mockRaf.step() + + expect.assertions(1) + spring.start({ + from: 2, + to: () => { + expect(spring.get()).toBe(2) + }, + }) + }) + }) + }) +} + +function describeFromProp() { + describe('when "from" prop is defined', () => { + it.todo('controls the start value') + }) +} + +function describeResetProp() { + describe('when "reset" prop is true', () => { + it('calls "onRest" before jumping back to its "from" value', async () => { + const onRest = jest.fn((result: any) => { + expect(result.value).not.toBe(0) + }) + + const spring = new SpringValue({ from: 0, to: 1, onRest }) + mockRaf.step() + + spring.start({ reset: true }) + + expect(onRest).toHaveBeenCalled() + expect(spring.get()).toBe(0) + }) + + it.todo('resolves the "start" promise with (finished: false)') + it.todo('calls the "onRest" prop with (finished: false)') + }) +} + +function describeDefaultProp() { + // The hook API always uses { default: true } for render-driven updates. + // Some props can have default values (eg: onRest, config, etc), and + // other props may behave differently when { default: true } is used. + describe('when "default" prop is true', () => { + describe('and "from" prop is changed', () => { + describe('before the first animation', () => { + it('updates the current value', () => { + const props = { default: true, from: 1, to: 1 } + const spring = new SpringValue(props) + + expect(spring.get()).toBe(1) + expect(spring.idle).toBeTruthy() + + props.from = 0 + spring.start(props) + + expect(spring.get()).not.toBe(1) + expect(spring.idle).toBeFalsy() + }) + }) + + describe('after the first animation', () => { + it('does not start animating', async () => { + const props = { default: true, from: 0, to: 2 } + const spring = new SpringValue(props) + await advanceUntilIdle() + + props.from = 1 + spring.start(props) + + expect(spring.get()).toBe(2) + expect(spring.idle).toBeTruthy() + expect(spring.animation.from).toBe(1) + }) + + describe('and "reset" prop is true', () => { + it('starts at the "from" prop', async () => { + const props: any = { default: true, from: 0, to: 2 } + const spring = new SpringValue(props) + await advanceUntilIdle() + + props.from = 1 + props.reset = true + spring.start(props) + + expect(spring.animation.from).toBe(1) + expect(spring.idle).toBeFalsy() + }) + }) + }) + }) + }) + + describe('when "default" prop is false', () => { + describe('and "from" prop is defined', () => { + it('updates the current value', () => { + const spring = new SpringValue(0) + spring.start({ from: 1 }) + expect(spring.get()).toBe(1) + }) + it('updates the "from" value', () => { + const spring = new SpringValue(0) + spring.start({ from: 1 }) + expect(spring.animation.from).toBe(1) + }) + + describe('and "to" prop is undefined', () => { + it('updates the "to" value', () => { + const spring = new SpringValue(0) + spring.start({ from: 1 }) + expect(spring.animation.to).toBe(1) + }) + it('stops the active animation', async () => { + const spring = new SpringValue(0) + + // This animation will be stopped. + const promise = spring.start({ from: 0, to: 1 }) + + mockRaf.step() + const value = spring.get() + + spring.start({ from: 0 }) + expect(spring.idle).toBeTruthy() + expect(spring.animation.to).toBe(0) + + expect(await promise).toMatchObject({ + value, + finished: false, + }) + }) + }) + }) + }) +} + +function describeReverseProp() { + describe('when "reverse" prop is true', () => { + it('swaps the "to" and "from" props', async () => { + const spring = new SpringValue() + spring.start({ from: 0, to: 1, reverse: true }) + + await advanceUntilIdle() + expect(getFrames(spring)).toMatchSnapshot() + }) + + it('works when "to" and "from" were set by an earlier update', async () => { + // TODO: remove the need for "" + const spring = new SpringValue({ from: 0, to: 1 }) + await advanceUntilValue(spring, 0.5) + + spring.start({ reverse: true }) + expect(spring.animation).toMatchObject({ + from: 1, + to: 0, + }) + + await advanceUntilIdle() + expect(getFrames(spring)).toMatchSnapshot() + }) + + it('works when "from" was set by an earlier update', async () => { + const spring = new SpringValue(0) + expect(spring.animation.from).toBe(0) + spring.start({ to: 1, reverse: true }) + + await advanceUntilIdle() + expect(getFrames(spring)).toMatchSnapshot() + }) + + it('preserves the reversal for future updates', async () => { + const spring = new SpringValue(0) + spring.start({ to: 1, reverse: true }) + expect(spring.animation).toMatchObject({ + to: 0, + from: 1, + }) + + await advanceUntilIdle() + + spring.start({ to: 2 }) + expect(spring.animation).toMatchObject({ + to: 2, + from: 1, + }) + }) + }) +} + +function describeImmediateProp() { + describe('when "immediate" prop is true', () => { + it.todo('still resolves the "start" promise') + it.todo('never calls the "onStart" prop') + it.todo('never calls the "onRest" prop') + + it('stops animating', async () => { + const spring = new SpringValue(0) + spring.start(2) + await advanceUntilValue(spring, 1) + + // Use "immediate" to emulate the "stop" method. (see #884) + const value = spring.get() + spring.start(value, { immediate: true }) + + // The "immediate" prop waits until the next frame before going idle. + mockRaf.step() + + expect(spring.idle).toBeTruthy() + expect(spring.get()).toBe(value) + }) + }) + + describe('when "immediate: true" is followed by "immediate: false" in same frame', () => { + it('applies the immediate goal synchronously', () => { + const spring = new SpringValue(0) + + // The immediate update is applied in the next frame. + spring.start({ to: 1, immediate: true }) + expect(spring.get()).toBe(0) + + // But when an animated update is merged before the next frame, + // the immediate update is applied synchronously. + spring.start({ to: 2 }) + expect(spring.get()).toBe(1) + expect(spring.animation).toMatchObject({ + fromValues: [1], + toValues: [2], + }) + }) + + it('does nothing if the 2nd update has "reset: true"', () => { + const spring = new SpringValue(0) + + // The immediate update is applied in the next frame. + spring.start({ to: 1, immediate: true }) + expect(spring.get()).toBe(0) + + // But when an animated update is merged before the next frame, + // the immediate update is applied synchronously. + spring.start({ to: 2, reset: true }) + expect(spring.get()).toBe(0) + expect(spring.animation).toMatchObject({ + fromValues: [0], + toValues: [2], + }) + }) + }) +} + +function describeConfigProp() { + describe('the "config" prop', () => { + it('resets the velocity when "to" changes', () => { + const spring = new SpringValue(0) + spring.start({ to: 100, config: { velocity: 10 } }) + + const { config } = spring.animation + expect(config.velocity).toBe(10) + + // Preserve velocity if "to" did not change. + spring.start({ config: { tension: 200 } }) + expect(config.velocity).toBe(10) + + spring.start({ to: 200 }) + expect(config.velocity).toBe(0) + }) + describe('when "damping" is 1.0', () => { + it('should prevent bouncing', async () => { + const spring = new SpringValue(0) + spring.start(1, { + config: { frequency: 1.5, damping: 1 }, + }) + await advanceUntilIdle() + expect(countBounces(spring)).toBe(0) + }) + }) + describe('when "damping" is less than 1.0', () => { + // FIXME: This test fails. + xit('should bounce', async () => { + const spring = new SpringValue(0) + spring.start(1, { + config: { frequency: 1.5, damping: 1 }, + }) + await advanceUntilIdle() + expect(countBounces(spring)).toBeGreaterThan(0) + }) + }) + }) +} + +function describeLoopProp() { + describe('the "loop" prop', () => { + it('resets the animation once finished', async () => { + const spring = new SpringValue(0) + spring.start(1, { + loop: true, + config: { duration: frameLength * 3 }, + }) + + await advanceUntilValue(spring, 1) + const firstRun = getFrames(spring) + expect(firstRun).toMatchSnapshot() + + // The loop resets the value before the next frame. + // FIXME: Reset on next frame instead? + expect(spring.get()).toBe(0) + + await advanceUntilValue(spring, 1) + expect(getFrames(spring)).toEqual(firstRun) + }) + + it('can pass a custom delay', async () => { + const spring = new SpringValue(0) + spring.start(1, { + loop: { reset: true, delay: 1000 }, + }) + + await advanceUntilValue(spring, 1) + expect(spring.get()).toBe(1) + + mockRaf.step({ time: 1000 }) + expect(spring.get()).toBeLessThan(1) + + await advanceUntilValue(spring, 1) + expect(spring.get()).toBe(1) + }) + + it('supports deferred evaluation', async () => { + const spring = new SpringValue(0) + + let loop: any = true + spring.start(1, { loop: () => loop }) + + await advanceUntilValue(spring, 1) + expect(spring.idle).toBeFalsy() + expect(spring.get()).toBeLessThan(1) + + loop = { reset: true, delay: 1000 } + await advanceUntilValue(spring, 1) + expect(spring.idle).toBeTruthy() + expect(spring.get()).toBe(1) + + mockRaf.step({ time: 1000 }) + expect(spring.idle).toBeFalsy() + expect(spring.get()).toBeLessThan(1) + + loop = false + await advanceUntilValue(spring, 1) + expect(spring.idle).toBeTruthy() + expect(spring.get()).toBe(1) + }) + + it('does not affect later updates', async () => { + const spring = new SpringValue(0) + spring.start(1, { loop: true }) + + await advanceUntilValue(spring, 0.5) + spring.start(2) + + await advanceUntilValue(spring, 2) + expect(spring.idle).toBeTruthy() + }) + + it('can be combined with the "reset" prop', async () => { + const spring = new SpringValue(0) + spring.start(1) + + await advanceUntilIdle() + spring.start({ reset: true, loop: true }) + expect(spring.get()).toBe(0) + + await advanceUntilValue(spring, 1) + expect(spring.get()).toBe(0) + expect(spring.idle).toBeFalsy() + }) + + it('can be combined with the "reverse" prop', async () => { + const spring = new SpringValue(0) + spring.start(1, { config: { duration: frameLength * 3 } }) + + await advanceUntilIdle() + spring.start({ + loop: { reverse: true }, + }) + + await advanceUntilValue(spring, 0) + await advanceUntilValue(spring, 1) + expect(getFrames(spring)).toMatchSnapshot() + }) + }) +} + +function describeDelayProp() { + describe('the "delay" prop', () => { + // "Temporal prevention" means a delayed update can be cancelled by an + // earlier update. This removes the need for explicit delay cancellation. + it('allows the update to be temporally prevented', async () => { + const spring = new SpringValue(0) + const anim = spring.animation + + spring.start(1, { config: { duration: 1000 } }) + + // This update will be ignored, because the next "start" call updates + // the "to" prop before this update's delay is finished. This update + // would *not* be ignored be if its "to" prop was undefined. + spring.start(2, { delay: 500, immediate: true }) + + // This update won't be affected by the previous update. + spring.start(0, { delay: 100, config: { duration: 1000 } }) + + expect(anim.to).toBe(1) + await advanceByTime(100) + expect(anim.to).toBe(0) + + await advanceByTime(400) + expect(anim.immediate).toBeFalsy() + expect(anim.to).toBe(0) + }) + }) +} + +function describeEvents() { + describe('the "onStart" event', () => { + it('is called on the first frame', async () => { + const onStart = jest.fn() + const spring = new SpringValue(0, { onStart }) + + spring.start(1) + expect(onStart).toBeCalledTimes(0) + + mockRaf.step() + expect(onStart).toBeCalledTimes(1) + + await advanceUntilIdle() + expect(onStart).toBeCalledTimes(1) + }) + it('is called by the "finish" method', () => { + const onStart = jest.fn() + const spring = new SpringValue({ from: 0, to: 1, onStart }) + expect(onStart).toBeCalledTimes(0) + + spring.finish() + expect(onStart).toBeCalledTimes(1) + }) + }) + describe('the "onChange" event', () => { + it('is called on every frame', async () => { + const onChange = jest.fn() + const spring = new SpringValue({ from: 0, to: 1, onChange }) + + await advanceUntilIdle() + const frames = getFrames(spring) + expect(onChange).toBeCalledTimes(frames.length) + }) + it('receives the "to" value on the last frame', async () => { + const onChange = jest.fn() + const spring = new SpringValue('blue', { onChange }) + + spring.start('red') + await advanceUntilIdle() + + const [lastValue] = onChange.mock.calls.slice(-1)[0] + expect(lastValue).toBe('red') + }) + it('is called by the "set" method', () => { + const onChange = jest.fn() + const spring = new SpringValue({ from: 0, to: 1, onChange }) + + mockRaf.step() + expect(onChange).toBeCalledTimes(1) + + // During an animation: + spring.set(1) + expect(onChange).toBeCalledTimes(2) + expect(spring.idle).toBeTruthy() + + // While idle: + spring.set(0) + expect(onChange).toBeCalledTimes(3) + + // No-op calls are ignored: + spring.set(0) + expect(onChange).toBeCalledTimes(3) + }) + describe('when active handler', () => { + it('is never called by the "set" method', () => { + const spring = new SpringValue(0) + + const onChange = jest.fn() + spring.start(1, { onChange }) + + // Before first frame + spring.set(2) + expect(onChange).not.toBeCalled() + + spring.start(1, { onChange }) + mockRaf.step() + onChange.mockReset() + + // Before last frame + spring.set(0) + expect(onChange).not.toBeCalled() + }) + }) + }) + describe('the "onPause" event', () => { + it('is called by the "pause" method', () => { + const onPause = jest.fn() + const spring = new SpringValue({ from: 0, to: 1, onPause }) + + mockRaf.step() + spring.pause() + spring.pause() // noop + + expect(onPause).toBeCalledTimes(1) + + spring.resume() + spring.pause() + + expect(onPause).toBeCalledTimes(2) + }) + }) + describe('the "onResume" event', () => { + it('is called by the "resume" method', () => { + const onResume = jest.fn() + const spring = new SpringValue({ from: 0, to: 1, onResume }) + + mockRaf.step() + spring.resume() // noop + + expect(onResume).toBeCalledTimes(0) + + spring.pause() + spring.resume() + + expect(onResume).toBeCalledTimes(1) + }) + }) + describe('the "onRest" event', () => { + it('is called on the last frame', async () => { + const onRest = jest.fn() + // @ts-ignore + const spring = new SpringValue({ + from: 0, + to: 1, + onRest, + config: { + // The animation is 3 frames long. + duration: 3 * frameLength, + }, + }) + + mockRaf.step() + mockRaf.step() + expect(onRest).not.toBeCalled() + + mockRaf.step() + expect(onRest).toBeCalledTimes(1) + }) + it('is called by the "stop" method', () => { + const onRest = jest.fn() + const spring = new SpringValue({ from: 0, to: 1, onRest }) + + mockRaf.step() + spring.stop() + + expect(onRest).toBeCalledTimes(1) + expect(onRest.mock.calls[0][0]).toMatchObject({ + value: spring.get(), + finished: false, + }) + }) + it('is called by the "finish" method', () => { + const onRest = jest.fn() + const spring = new SpringValue({ from: 0, to: 1, onRest }) + + mockRaf.step() + spring.finish() + + expect(onRest).toBeCalledTimes(1) + expect(onRest.mock.calls[0][0]).toMatchObject({ + value: 1, + finished: true, + }) + }) + it('is called when the "cancel" prop is true', () => { + const onRest = jest.fn() + const spring = new SpringValue({ from: 0, to: 1, onRest }) + + mockRaf.step() + spring.start({ cancel: true }) + + expect(onRest).toBeCalledTimes(1) + expect(onRest.mock.calls[0][0]).toMatchObject({ + value: spring.get(), + cancelled: true, + }) + }) + it('is called after an async animation', async () => { + const onRest = jest.fn() + const spring = new SpringValue(0) + + await spring.start({ + to: () => {}, + onRest, + }) + + expect(onRest).toBeCalledTimes(1) + expect(onRest.mock.calls[0][0]).toMatchObject({ + value: spring.get(), + finished: true, + }) + }) + }) +} + +function describeMethods() { + describe('"set" method', () => { + it('stops the active animation', async () => { + const spring = new SpringValue(0) + const promise = spring.start(1) + + await advanceUntilValue(spring, 0.5) + const value = spring.get() + spring.set(2) + + expect(spring.idle).toBeTruthy() + expect(await promise).toMatchObject({ + finished: false, + value, + }) + }) + }) +} + +/** The minimum requirements for testing a dynamic target */ +type OpaqueTarget = { + node: FrameValue + set: (value: number) => any + start: (value: number) => Promise + reset: () => void +} + +function describeTarget(name: string, create: (from: number) => OpaqueTarget) { + describe('when our target is ' + name, () => { + let target: OpaqueTarget + let spring: SpringValue + let observer: FluidObserver + beforeEach(() => { + target = create(1) + spring = new SpringValue(0) + // The target is not attached until the spring is observed. + addFluidObserver(spring, (observer = () => {})) + }) + + it('animates toward the current value', async () => { + spring.start({ to: target.node }) + expect(spring.priority).toBeGreaterThan(target.node.priority) + expect(spring.animation).toMatchObject({ + to: target.node, + toValues: null, + }) + + await advanceUntilIdle() + expect(spring.get()).toBe(target.node.get()) + }) + + it.todo('preserves its "onRest" prop between animations') + + it('can change its target while animating', async () => { + spring.start({ to: target.node }) + await advanceUntilValue(spring, target.node.get() / 2) + + spring.start(0) + expect(spring.priority).toBe(0) + expect(spring.animation).toMatchObject({ + to: 0, + toValues: [0], + }) + + await advanceUntilIdle() + expect(spring.get()).toBe(0) + }) + + describe('when target is done animating', () => { + it('keeps animating until the target is reached', async () => { + spring.start({ to: target.node }) + target.start(1.1) + + await advanceUntil(() => target.node.idle) + expect(spring.idle).toBeFalsy() + + await advanceUntilIdle() + expect(spring.idle).toBeTruthy() + expect(spring.get()).toBe(target.node.get()) + }) + }) + + describe('when target animates after we go idle', () => { + it('starts animating', async () => { + spring.start({ to: target.node }) + await advanceUntil(() => spring.idle) + // Clear the frame cache. + getFrames(spring) + + target.start(2) + await advanceUntilIdle() + + expect(getFrames(spring).length).toBeGreaterThan(1) + expect(spring.get()).toBe(target.node.get()) + }) + }) + + describe('when target has its value set (not animated)', () => { + it('animates toward the new value', async () => { + spring.start({ to: target.node }) + await advanceUntilIdle() + + target.set(2) + await advanceUntilIdle() + + expect(getFrames(spring).length).toBeGreaterThan(1) + expect(spring.get()).toBe(target.node.get()) + }) + }) + + describe('when target resets its animation', () => { + it('keeps animating', async () => { + spring.start({ to: target.node }) + target.start(2) + + await advanceUntilValue(target.node, 1.5) + expect(target.node.idle).toBeFalsy() + + target.reset() + expect(target.node.get()).toBe(1) + + await advanceUntilIdle() + const frames = getFrames(spring) + + expect(frames.length).toBeGreaterThan(1) + expect(spring.get()).toBe(target.node.get()) + }) + }) + + // In the case of an Interpolation, staying attached will prevent + // garbage collection when an animation loop is active, which results + // in a memory leak since the Interpolation stays in the frameloop. + describe('when our last child is detached', () => { + it('detaches from the target', () => { + spring.start({ to: target.node }) + + // Expect the target node to be attached. + expect(hasFluidObserver(target.node, spring)).toBeTruthy() + + // Remove the observer. + removeFluidObserver(spring, observer) + + // Expect the target node to be detached. + expect(hasFluidObserver(target.node, spring)).toBeFalsy() + }) + }) + }) +} + +function describeGlobals() { + const defaults = { ...Globals } + const resetGlobals = () => Globals.assign(defaults) + describe('"skipAnimation" global', () => { + afterEach(resetGlobals) + it('still calls "onStart", "onChange", and "onRest" props', async () => { + const spring = new SpringValue(0) + + const onStart = jest.fn() + const onChange = jest.fn() + const onRest = jest.fn() + + Globals.assign({ skipAnimation: true }) + await spring.start(1, { onStart, onChange, onRest }) + + expect(onStart).toBeCalledTimes(1) + expect(onChange).toBeCalledTimes(1) + expect(onRest).toBeCalledTimes(1) + }) + }) +} + +function hasFluidObserver(target: any, observer: FluidObserver) { + const observers = getFluidObservers(target) + return !!observers && observers.has(observer) +} diff --git a/packages/core/src/SpringValue.ts b/packages/core/src/SpringValue.ts new file mode 100644 index 0000000000..8c57dcdf3c --- /dev/null +++ b/packages/core/src/SpringValue.ts @@ -0,0 +1,1057 @@ +import { + is, + raf, + each, + isEqual, + toArray, + eachProp, + frameLoop, + flushCalls, + getFluidValue, + isAnimatedString, + FluidValue, + Globals as G, + callFluidObservers, + hasFluidValue, + addFluidObserver, + removeFluidObserver, + getFluidObservers, +} from '@react-spring/shared' +import { + Animated, + AnimatedValue, + AnimatedString, + getPayload, + getAnimated, + setAnimated, + getAnimatedType, +} from '@react-spring/animated' +import { Lookup } from '@react-spring/types' + +import { Animation } from './Animation' +import { mergeConfig } from './AnimationConfig' +import { scheduleProps } from './scheduleProps' +import { runAsync, RunAsyncState, RunAsyncProps, stopAsync } from './runAsync' +import { + callProp, + computeGoal, + matchProp, + inferTo, + getDefaultProps, + getDefaultProp, + isAsyncTo, + resolveProp, +} from './helpers' +import { FrameValue, isFrameValue } from './FrameValue' +import { + isAnimating, + isPaused, + setPausedBit, + hasAnimated, + setActiveBit, +} from './SpringPhase' +import { + AnimationRange, + AnimationResolver, + EventKey, + PickEventFns, +} from './types/internal' +import { AsyncResult, SpringUpdate, VelocityProp, SpringProps } from './types' +import { + getCombinedResult, + getCancelledResult, + getFinishedResult, + getNoopResult, +} from './AnimationResult' + +declare const console: any + +interface DefaultSpringProps + extends Pick, 'pause' | 'cancel' | 'immediate' | 'config'>, + PickEventFns> {} + +/** + * Only numbers, strings, and arrays of numbers/strings are supported. + * Non-animatable strings are also supported. + */ +export class SpringValue extends FrameValue { + /** The property name used when `to` or `from` is an object. Useful when debugging too. */ + key?: string + + /** The animation state */ + animation = new Animation() + + /** The queue of pending props */ + queue?: SpringUpdate[] + + /** Some props have customizable default values */ + defaultProps: DefaultSpringProps = {} + + /** The state for `runAsync` calls */ + protected _state: RunAsyncState> = { + paused: false, + pauseQueue: new Set(), + resumeQueue: new Set(), + timeouts: new Set(), + } + + /** The promise resolvers of pending `start` calls */ + protected _pendingCalls = new Set>() + + /** The counter for tracking `scheduleProps` calls */ + protected _lastCallId = 0 + + /** The last `scheduleProps` call that changed the `to` prop */ + protected _lastToId = 0 + + constructor(from: Exclude, props?: SpringUpdate) + constructor(props?: SpringUpdate) + constructor(arg1?: any, arg2?: any) { + super() + if (!is.und(arg1) || !is.und(arg2)) { + const props = is.obj(arg1) ? { ...arg1 } : { ...arg2, from: arg1 } + if (is.und(props.default)) { + props.default = true + } + this.start(props) + } + } + + /** Equals true when not advancing on each frame. */ + get idle() { + return !(isAnimating(this) || this._state.asyncTo) || isPaused(this) + } + + get goal() { + return getFluidValue(this.animation.to) as T + } + + get velocity(): VelocityProp { + const node = getAnimated(this)! + return (node instanceof AnimatedValue + ? node.lastVelocity || 0 + : node.getPayload().map(node => node.lastVelocity || 0)) as any + } + + /** + * When true, this value has been animated at least once. + */ + get hasAnimated() { + return hasAnimated(this) + } + + /** + * When true, this value has an unfinished animation, + * which is either active or paused. + */ + get isAnimating() { + return isAnimating(this) + } + + /** + * When true, all current and future animations are paused. + */ + get isPaused() { + return isPaused(this) + } + + /** Advance the current animation by a number of milliseconds */ + advance(dt: number) { + let idle = true + let changed = false + + const anim = this.animation + let { config, toValues } = anim + + const payload = getPayload(anim.to) + if (!payload && hasFluidValue(anim.to)) { + toValues = toArray(getFluidValue(anim.to)) as any + } + + anim.values.forEach((node, i) => { + if (node.done) return + + const to = + // Animated strings always go from 0 to 1. + node.constructor == AnimatedString + ? 1 + : payload + ? payload[i].lastPosition + : toValues![i] + + let finished = anim.immediate + let position = to + + if (!finished) { + position = node.lastPosition + + // Loose springs never move. + if (config.tension <= 0) { + node.done = true + return + } + + const elapsed = (node.elapsedTime += dt) + const from = anim.fromValues[i] + + const v0 = + node.v0 != null + ? node.v0 + : (node.v0 = is.arr(config.velocity) + ? config.velocity[i] + : config.velocity) + + let velocity: number + + // Duration easing + if (!is.und(config.duration)) { + let p = 1 + if (config.duration > 0) { + p = (config.progress || 0) + elapsed / config.duration + p = p > 1 ? 1 : p < 0 ? 0 : p + } + + position = from + config.easing(p) * (to - from) + velocity = (position - node.lastPosition) / dt + + finished = p == 1 + } + + // Decay easing + else if (config.decay) { + const decay = config.decay === true ? 0.998 : config.decay + const e = Math.exp(-(1 - decay) * elapsed) + + position = from + (v0 / (1 - decay)) * (1 - e) + finished = Math.abs(node.lastPosition - position) < 0.1 + + // derivative of position + velocity = v0 * e + } + + // Spring easing + else { + velocity = node.lastVelocity == null ? v0 : node.lastVelocity + + /** The smallest distance from a value before being treated like said value. */ + const precision = + config.precision || + (from == to ? 0.005 : Math.min(1, Math.abs(to - from) * 0.001)) + + /** The velocity at which movement is essentially none */ + const restVelocity = config.restVelocity || precision / 10 + + // Bouncing is opt-in (not to be confused with overshooting) + const bounceFactor = config.clamp ? 0 : config.bounce! + const canBounce = !is.und(bounceFactor) + + /** When `true`, the value is increasing over time */ + const isGrowing = from == to ? node.v0 > 0 : from < to + + /** When `true`, the velocity is considered moving */ + let isMoving!: boolean + + /** When `true`, the velocity is being deflected or clamped */ + let isBouncing = false + + const step = 1 // 1ms + const numSteps = Math.ceil(dt / step) + for (let n = 0; n < numSteps; ++n) { + isMoving = Math.abs(velocity) > restVelocity + + if (!isMoving) { + finished = Math.abs(to - position) <= precision + if (finished) { + break + } + } + + if (canBounce) { + isBouncing = position == to || position > to == isGrowing + + // Invert the velocity with a magnitude, or clamp it. + if (isBouncing) { + velocity = -velocity * bounceFactor + position = to + } + } + + const springForce = -config.tension * 0.000001 * (position - to) + const dampingForce = -config.friction * 0.001 * velocity + const acceleration = (springForce + dampingForce) / config.mass // pt/ms^2 + + velocity = velocity + acceleration * step // pt/ms + position = position + velocity * step + } + } + + node.lastVelocity = velocity + + if (Number.isNaN(position)) { + console.warn(`Got NaN while animating:`, this) + finished = true + } + } + + // Parent springs must finish before their children can. + if (payload && !payload[i].done) { + finished = false + } + + if (finished) { + node.done = true + } else { + idle = false + } + + if (node.setValue(position, config.round)) { + changed = true + } + }) + + const node = getAnimated(this)! + if (idle) { + const value = getFluidValue(anim.to) + if (node.setValue(value) || changed) { + this._onChange(value) + } + this._stop() + } else if (changed) { + this._onChange(node.getValue()) + } + } + + /** Set the current value, while stopping the current animation */ + set(value: T | FluidValue) { + raf.batchedUpdates(() => { + this._stop() + + // These override the current value and goal value that may have + // been updated by `onRest` handlers in the `_stop` call above. + this._focus(value) + this._set(value) + }) + return this + } + + /** + * Freeze the active animation in time, as well as any updates merged + * before `resume` is called. + */ + pause() { + this._update({ pause: true }) + } + + /** Resume the animation if paused. */ + resume() { + this._update({ pause: false }) + } + + /** Skip to the end of the current animation. */ + finish() { + if (isAnimating(this)) { + const { to, config } = this.animation + raf.batchedUpdates(() => { + // Ensure the "onStart" and "onRest" props are called. + this._onStart() + + // Jump to the goal value, except for decay animations + // which have an undefined goal value. + if (!config.decay) { + this._set(to, false) + } + + this._stop() + }) + } + return this + } + + /** Push props into the pending queue. */ + update(props: SpringUpdate) { + const queue = this.queue || (this.queue = []) + queue.push(props) + return this + } + + /** + * Update this value's animation using the queue of pending props, + * and unpause the current animation (if one is frozen). + * + * When arguments are passed, a new animation is created, and the + * queued animations are left alone. + */ + start(): AsyncResult + + start(props: SpringUpdate): AsyncResult + + start(to: T, props?: SpringProps): AsyncResult + + start(to?: T | SpringUpdate, arg2?: SpringProps) { + let queue: SpringUpdate[] + if (!is.und(to)) { + queue = [is.obj(to) ? to : { ...arg2, to }] + } else { + queue = this.queue || [] + this.queue = [] + } + + return Promise.all(queue.map(props => this._update(props))).then(results => + getCombinedResult(this, results) + ) + } + + /** + * Stop the current animation, and cancel any delayed updates. + * + * Pass `true` to call `onRest` with `cancelled: true`. + */ + stop(cancel?: boolean) { + const { to } = this.animation + + // The current value becomes the goal value. + this._focus(this.get()) + + stopAsync(this._state, cancel && this._lastCallId) + raf.batchedUpdates(() => this._stop(to, cancel)) + + return this + } + + /** Restart the animation. */ + reset() { + this._update({ reset: true }) + } + + /** @internal */ + eventObserved(event: FrameValue.Event) { + if (event.type == 'change') { + this._start() + } else if (event.type == 'priority') { + this.priority = event.priority + 1 + } + } + + /** + * Parse the `to` and `from` range from the given `props` object. + * + * This also ensures the initial value is available to animated components + * during the render phase. + */ + protected _prepareNode(props: { + to?: any + from?: any + reverse?: boolean + default?: any + }) { + const key = this.key || '' + + let { to, from } = props + + to = is.obj(to) ? to[key] : to + if (to == null || isAsyncTo(to)) { + to = undefined + } + + from = is.obj(from) ? from[key] : from + if (from == null) { + from = undefined + } + + // Create the range now to avoid "reverse" logic. + const range = { to, from } + + // Before ever animating, this method ensures an `Animated` node + // exists and keeps its value in sync with the "from" prop. + if (!hasAnimated(this)) { + if (props.reverse) [to, from] = [from, to] + + from = getFluidValue(from) + if (!is.und(from)) { + this._set(from) + } + // Use the "to" value if our node is undefined. + else if (!getAnimated(this)) { + this._set(to) + } + } + + return range + } + + /** Every update is processed by this method before merging. */ + protected _update( + { ...props }: SpringProps, + isLoop?: boolean + ): AsyncResult> { + const { key, defaultProps } = this + + // Update the default props immediately. + if (props.default) + Object.assign( + defaultProps, + getDefaultProps(props, (value, prop) => + /^on/.test(prop) ? resolveProp(value, key) : value + ) + ) + + mergeActiveFn(this, props, 'onProps') + sendEvent(this, 'onProps', props, this) + + // Ensure the initial value can be accessed by animated components. + const range = this._prepareNode(props) + + if (Object.isFrozen(this)) { + throw Error( + 'Cannot animate a `SpringValue` object that is frozen. ' + + 'Did you forget to pass your component to `animated(...)` before animating its props?' + ) + } + + const state = this._state + return scheduleProps(++this._lastCallId, { + key, + props, + defaultProps, + state, + actions: { + pause: () => { + if (!isPaused(this)) { + setPausedBit(this, true) + flushCalls(state.pauseQueue) + sendEvent(this, 'onPause', this) + } + }, + resume: () => { + if (isPaused(this)) { + setPausedBit(this, false) + if (isAnimating(this)) { + this._resume() + } + flushCalls(state.resumeQueue) + sendEvent(this, 'onResume', this) + } + }, + start: this._merge.bind(this, range), + }, + }).then(result => { + if (props.loop && result.finished && !(isLoop && result.noop)) { + const nextProps = createLoopUpdate(props) + if (nextProps) { + return this._update(nextProps, true) + } + } + return result + }) + } + + /** Merge props into the current animation */ + protected _merge( + range: AnimationRange, + props: RunAsyncProps>, + resolve: AnimationResolver> + ): void { + // The "cancel" prop cancels all pending delays and it forces the + // active animation to stop where it is. + if (props.cancel) { + this.stop(true) + return resolve(getCancelledResult(this)) + } + + /** The "to" prop is defined. */ + const hasToProp = !is.und(range.to) + + /** The "from" prop is defined. */ + const hasFromProp = !is.und(range.from) + + // Avoid merging other props if implicitly prevented, except + // when both the "to" and "from" props are undefined. + if (hasToProp || hasFromProp) { + if (props.callId > this._lastToId) { + this._lastToId = props.callId + } else { + return resolve(getCancelledResult(this)) + } + } + + const { key, defaultProps, animation: anim } = this + const { to: prevTo, from: prevFrom } = anim + let { to = prevTo, from = prevFrom } = range + + // Focus the "from" value if changing without a "to" value. + // For default updates, do this only if no "to" value exists. + if (hasFromProp && !hasToProp && (!props.default || is.und(to))) { + to = from + } + + // Flip the current range if "reverse" is true. + if (props.reverse) [to, from] = [from, to] + + /** The "from" value is changing. */ + const hasFromChanged = !isEqual(from, prevFrom) + + if (hasFromChanged) { + anim.from = from + } + + // Coerce "from" into a static value. + from = getFluidValue(from) + + /** The "to" value is changing. */ + const hasToChanged = !isEqual(to, prevTo) + + if (hasToChanged) { + this._focus(to) + } + + /** The "to" prop is async. */ + const hasAsyncTo = isAsyncTo(props.to) + + const { config } = anim + const { decay, velocity } = config + + // Reset to default velocity when goal values are defined. + if (hasToProp || hasFromProp) { + config.velocity = 0 + } + + // The "runAsync" function treats the "config" prop as a default, + // so we must avoid merging it when the "to" prop is async. + if (props.config && !hasAsyncTo) { + mergeConfig( + config, + callProp(props.config, key!), + // Avoid calling the same "config" prop twice. + props.config !== defaultProps.config + ? callProp(defaultProps.config, key!) + : void 0 + ) + } + + // This instance might not have its Animated node yet. For example, + // the constructor can be given props without a "to" or "from" value. + let node = getAnimated(this) + if (!node || is.und(to)) { + return resolve(getFinishedResult(this, true)) + } + + /** When true, start at the "from" value. */ + const reset = + // When `reset` is undefined, the `from` prop implies `reset: true`, + // except for declarative updates. When `reset` is defined, there + // must exist a value to animate from. + is.und(props.reset) + ? hasFromProp && !props.default + : !is.und(from) && matchProp(props.reset, key) + + // The current value, where the animation starts from. + const value = reset ? (from as T) : this.get() + + // The animation ends at this value, unless "to" is fluid. + const goal = computeGoal(to) + + // Only specific types can be animated to/from. + const isAnimatable = is.num(goal) || is.arr(goal) || isAnimatedString(goal) + + // When true, the value changes instantly on the next frame. + const immediate = + !hasAsyncTo && + (!isAnimatable || + matchProp(defaultProps.immediate || props.immediate, key)) + + if (hasToChanged) { + const nodeType = getAnimatedType(to) + if (nodeType !== node.constructor) { + if (immediate) { + node = this._set(goal)! + } else + throw Error( + `Cannot animate between ${node.constructor.name} and ${nodeType.name}, as the "to" prop suggests` + ) + } + } + + // The type of Animated node for the goal value. + const goalType = node.constructor + + // When the goal value is fluid, we don't know if its value + // will change before the next animation frame, so it always + // starts the animation to be safe. + let started = hasFluidValue(to) + let finished = false + + if (!started) { + // When true, the current value has probably changed. + const hasValueChanged = reset || (!hasAnimated(this) && hasFromChanged) + + // When the "to" value or current value are changed, + // start animating if not already finished. + if (hasToChanged || hasValueChanged) { + finished = isEqual(computeGoal(value), goal) + started = !finished + } + + // Changing "decay" or "velocity" starts the animation. + if ( + !isEqual(config.decay, decay) || + !isEqual(config.velocity, velocity) + ) { + started = true + } + } + + // Was the goal value set to the current value while animating? + if (finished && isAnimating(this)) { + // If the first frame has passed, allow the animation to + // overshoot instead of stopping abruptly. + if (anim.changed && !reset) { + started = true + } + // Stop the animation before its first frame. + else if (!started) { + this._stop(prevTo) + } + } + + if (!hasAsyncTo) { + // Make sure our "toValues" are updated even if our previous + // "to" prop is a fluid value whose current value is also ours. + if (started || hasFluidValue(prevTo)) { + anim.values = node.getPayload() + anim.toValues = hasFluidValue(to) + ? null + : goalType == AnimatedString + ? [1] + : toArray(goal) + } + + if (anim.immediate != immediate) { + anim.immediate = immediate + + // Ensure the immediate goal is used as from value. + if (!immediate && !reset) { + this._set(prevTo) + } + } + + if (started) { + const { onRest } = anim + + // Set the active handlers when an animation starts. + each(ACTIVE_EVENTS, type => mergeActiveFn(this, props, type)) + + const result = getFinishedResult(this, checkFinished(this, prevTo)) + flushCalls(this._pendingCalls, result) + this._pendingCalls.add(resolve) + + if (anim.changed) + raf.batchedUpdates(() => { + // Ensure `onStart` can be called after a reset. + anim.changed = !reset + + // Call the active `onRest` handler from the interrupted animation. + onRest?.(result) + + // Notify the default `onRest` of the reset, but wait for the + // first frame to pass before sending an `onStart` event. + if (reset) { + callProp(defaultProps.onRest, result) + } + // Call the active `onStart` handler here since the first frame + // has already passed, which means this is a goal update and not + // an entirely new animation. + else { + anim.onStart?.(this) + } + }) + } + } + + if (reset) { + this._set(value) + } + + if (hasAsyncTo) { + resolve(runAsync(props.to, props, this._state, this)) + } + + // Start an animation + else if (started) { + this._start() + } + + // Postpone promise resolution until the animation is finished, + // so that no-op updates still resolve at the expected time. + else if (isAnimating(this) && !hasToChanged) { + this._pendingCalls.add(resolve) + } + + // Resolve our promise immediately. + else { + resolve(getNoopResult(this, value)) + } + } + + /** Update the `animation.to` value, which might be a `FluidValue` */ + protected _focus(value: T | FluidValue) { + const anim = this.animation + if (value !== anim.to) { + if (getFluidObservers(this)) { + this._detach() + } + anim.to = value + if (getFluidObservers(this)) { + this._attach() + } + } + } + + protected _attach() { + let priority = 0 + + const { to } = this.animation + if (hasFluidValue(to)) { + addFluidObserver(to, this) + if (isFrameValue(to)) { + priority = to.priority + 1 + } + } + + this.priority = priority + } + + protected _detach() { + const { to } = this.animation + if (hasFluidValue(to)) { + removeFluidObserver(to, this) + } + } + + /** + * Update the current value from outside the frameloop, + * and return the `Animated` node. + */ + protected _set(arg: T | FluidValue, idle = true): Animated | undefined { + const value = getFluidValue(arg) + if (!is.und(value)) { + const oldNode = getAnimated(this) + if (!oldNode || !isEqual(value, oldNode.getValue())) { + // Create a new node or update the existing node. + const nodeType = getAnimatedType(value) + if (!oldNode || oldNode.constructor != nodeType) { + setAnimated(this, nodeType.create(value)) + } else { + oldNode.setValue(value) + } + // Never emit a "change" event for the initial value. + if (oldNode) { + raf.batchedUpdates(() => { + this._onChange(value, idle) + }) + } + } + } + return getAnimated(this) + } + + protected _onStart() { + const anim = this.animation + if (!anim.changed) { + anim.changed = true + sendEvent(this, 'onStart', this) + } + } + + protected _onChange(value: T, idle?: boolean) { + if (!idle) { + this._onStart() + callProp(this.animation.onChange, value, this) + } + callProp(this.defaultProps.onChange, value, this) + super._onChange(value, idle) + } + + // This method resets the animation state (even if already animating) to + // ensure the latest from/to range is used, and it also ensures this spring + // is added to the frameloop. + protected _start() { + const anim = this.animation + + // Reset the state of each Animated node. + getAnimated(this)!.reset(getFluidValue(anim.to)) + + // Use the current values as the from values. + if (!anim.immediate) { + anim.fromValues = anim.values.map(node => node.lastPosition) + } + + if (!isAnimating(this)) { + setActiveBit(this, true) + if (!isPaused(this)) { + this._resume() + } + } + } + + protected _resume() { + // The "skipAnimation" global avoids the frameloop. + if (G.skipAnimation) { + this.finish() + } else { + frameLoop.start(this) + } + } + + /** + * Exit the frameloop and notify `onRest` listeners. + * + * Always wrap `_stop` calls with `batchedUpdates`. + */ + protected _stop(goal?: any, cancel?: boolean) { + if (isAnimating(this)) { + setActiveBit(this, false) + + const anim = this.animation + each(anim.values, node => { + node.done = true + }) + + // These active handlers must be reset to undefined or else + // they could be called while idle. But keep them defined + // when the goal value is dynamic. + if (anim.toValues) { + anim.onChange = anim.onPause = anim.onResume = undefined + } + + callFluidObservers(this, { + type: 'idle', + parent: this, + }) + + const result = cancel + ? getCancelledResult(this) + : getFinishedResult(this, checkFinished(this, goal ?? anim.to)) + + flushCalls(this._pendingCalls, result) + if (anim.changed) { + anim.changed = false + sendEvent(this, 'onRest', result) + } + } + } +} + +/** Returns true when the current value and goal value are equal. */ +function checkFinished(target: SpringValue, to: T | FluidValue) { + const goal = computeGoal(to) + const value = computeGoal(target.get()) + return isEqual(value, goal) +} + +export function createLoopUpdate( + props: T & { loop?: any; to?: any; from?: any; reverse?: any }, + loop = props.loop, + to = props.to +): T | undefined { + let loopRet = callProp(loop) + if (loopRet) { + const overrides = loopRet !== true && inferTo(loopRet) + const reverse = (overrides || props).reverse + const reset = !overrides || overrides.reset + return createUpdate({ + ...props, + loop, + + // Avoid updating default props when looping. + default: false, + + // Never loop the `pause` prop. + pause: undefined, + + // For the "reverse" prop to loop as expected, the "to" prop + // must be undefined. The "reverse" prop is ignored when the + // "to" prop is an array or function. + to: !reverse || isAsyncTo(to) ? to : undefined, + + // Ignore the "from" prop except on reset. + from: reset ? props.from : undefined, + reset, + + // The "loop" prop can return a "useSpring" props object to + // override any of the original props. + ...overrides, + }) + } +} + +/** + * Return a new object based on the given `props`. + * + * - All non-reserved props are moved into the `to` prop object. + * - The `keys` prop is set to an array of affected keys, + * or `null` if all keys are affected. + */ +export function createUpdate(props: any) { + const { to, from } = (props = inferTo(props)) + + // Collect the keys affected by this update. + const keys = new Set() + + if (is.obj(to)) findDefined(to, keys) + if (is.obj(from)) findDefined(from, keys) + + // The "keys" prop helps in applying updates to affected keys only. + props.keys = keys.size ? Array.from(keys) : null + + return props +} + +/** + * A modified version of `createUpdate` meant for declarative APIs. + */ +export function declareUpdate(props: any) { + const update = createUpdate(props) + if (is.und(update.default)) { + update.default = getDefaultProps(update) + } + return update +} + +/** Find keys with defined values */ +function findDefined(values: Lookup, keys: Set) { + eachProp(values, (value, key) => value != null && keys.add(key as any)) +} + +/** Event props with "active handler" support */ +const ACTIVE_EVENTS = [ + 'onStart', + 'onRest', + 'onChange', + 'onPause', + 'onResume', +] as const + +function mergeActiveFn( + target: SpringValue, + props: SpringProps, + type: P +) { + target.animation[type] = + props[type] !== getDefaultProp(props, type) + ? resolveProp(props[type], target.key) + : undefined +} + +type EventArgs = Parameters< + Extract[P], Function> +> + +/** Call the active handler first, then the default handler. */ +function sendEvent( + target: SpringValue, + type: P, + ...args: EventArgs +) { + target.animation[type]?.(...(args as [any, any])) + target.defaultProps[type]?.(...(args as [any, any])) +} diff --git a/packages/core/src/TransitionPhase.ts b/packages/core/src/TransitionPhase.ts new file mode 100644 index 0000000000..1d0b91d2d1 --- /dev/null +++ b/packages/core/src/TransitionPhase.ts @@ -0,0 +1,18 @@ +// TODO: convert to "const enum" once Babel supports it +export type TransitionPhase = + | typeof MOUNT + | typeof ENTER + | typeof UPDATE + | typeof LEAVE + +/** This transition is being mounted */ +export const MOUNT = 'mount' + +/** This transition is entering or has entered */ +export const ENTER = 'enter' + +/** This transition had its animations updated */ +export const UPDATE = 'update' + +/** This transition will expire after animating */ +export const LEAVE = 'leave' diff --git a/packages/core/src/__snapshots__/Controller.test.ts.snap b/packages/core/src/__snapshots__/Controller.test.ts.snap new file mode 100644 index 0000000000..d029ef6902 --- /dev/null +++ b/packages/core/src/__snapshots__/Controller.test.ts.snap @@ -0,0 +1,552 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`Controller can animate a number 1`] = ` +Array [ + Object { + "x": 2.263484330785799, + }, + Object { + "x": 7.615528894993947, + }, + Object { + "x": 14.72729545687759, + }, + Object { + "x": 22.67933293781441, + }, + Object { + "x": 30.85053191603684, + }, + Object { + "x": 38.83524421610096, + }, + Object { + "x": 46.38171205392548, + }, + Object { + "x": 53.346574480369156, + }, + Object { + "x": 59.66146523130329, + }, + Object { + "x": 65.30867180317823, + }, + Object { + "x": 70.30355736424129, + }, + Object { + "x": 74.68200657416291, + }, + Object { + "x": 78.49158337229619, + }, + Object { + "x": 81.78541406742545, + }, + Object { + "x": 84.61805634019797, + }, + Object { + "x": 87.04280232770594, + }, + Object { + "x": 89.11000586164683, + }, + Object { + "x": 90.8661309883985, + }, + Object { + "x": 92.35329941206051, + }, + Object { + "x": 93.60917483504707, + }, + Object { + "x": 94.66706719880813, + }, + Object { + "x": 95.55617327559861, + }, + Object { + "x": 96.30189477450246, + }, + Object { + "x": 96.92619326731115, + }, + Object { + "x": 97.4479544590839, + }, + Object { + "x": 97.88334387327176, + }, + Object { + "x": 98.2461428371077, + }, + Object { + "x": 98.54805845242963, + }, + Object { + "x": 98.7990045563195, + }, + Object { + "x": 99.0073529166361, + }, + Object { + "x": 99.18015536949562, + }, + Object { + "x": 99.3233385117055, + }, + Object { + "x": 99.4418730756026, + }, + Object { + "x": 99.53992035746593, + }, + Object { + "x": 99.62095813165256, + }, + Object { + "x": 99.68788842438258, + }, + Object { + "x": 99.74312938902625, + }, + Object { + "x": 99.78869335076726, + }, + Object { + "x": 99.8262528947063, + }, + Object { + "x": 99.85719667273446, + }, + Object { + "x": 99.8826764105673, + }, + Object { + "x": 100, + }, +] +`; + +exports[`Controller can animate an array of numbers 1`] = ` +Array [ + Object { + "x": Array [ + 1.0905393732314317, + 2.1810787464628634, + ], + }, + Object { + "x": Array [ + 1.3046211557997573, + 2.6092423115995147, + ], + }, + Object { + "x": Array [ + 1.589091818275103, + 3.178183636550206, + ], + }, + Object { + "x": Array [ + 1.9071733175125758, + 3.8143466350251516, + ], + }, + Object { + "x": Array [ + 2.2340212766414735, + 4.468042553282947, + ], + }, + Object { + "x": Array [ + 2.5534097686440376, + 5.106819537288075, + ], + }, + Object { + "x": Array [ + 2.8552684821570185, + 5.710536964314037, + ], + }, + Object { + "x": Array [ + 3.1338629792147654, + 6.267725958429531, + ], + }, + Object { + "x": Array [ + 3.3864586092521307, + 6.772917218504261, + ], + }, + Object { + "x": Array [ + 3.612346872127128, + 7.224693744254256, + ], + }, + Object { + "x": Array [ + 3.8121422945696497, + 7.624284589139299, + ], + }, + Object { + "x": Array [ + 3.987280262966515, + 7.97456052593303, + ], + }, + Object { + "x": Array [ + 4.139663334891849, + 8.279326669783698, + ], + }, + Object { + "x": Array [ + 4.271416562697019, + 8.542833125394038, + ], + }, + Object { + "x": Array [ + 4.3847222536079205, + 8.769444507215841, + ], + }, + Object { + "x": Array [ + 4.481712093108238, + 8.963424186216477, + ], + }, + Object { + "x": Array [ + 4.5644002344658725, + 9.128800468931745, + ], + }, + Object { + "x": Array [ + 4.634645239535937, + 9.269290479071874, + ], + }, + Object { + "x": Array [ + 4.694131976482419, + 9.388263952964838, + ], + }, + Object { + "x": Array [ + 4.7443669934018855, + 9.488733986803771, + ], + }, + Object { + "x": Array [ + 4.786682687952328, + 9.573365375904656, + ], + }, + Object { + "x": Array [ + 4.822246931023949, + 9.644493862047899, + ], + }, + Object { + "x": Array [ + 4.852075790980104, + 9.704151581960208, + ], + }, + Object { + "x": Array [ + 4.877047730692452, + 9.754095461384903, + ], + }, + Object { + "x": Array [ + 4.89791817836336, + 9.79583635672672, + ], + }, + Object { + "x": Array [ + 4.915333754930874, + 9.830667509861748, + ], + }, + Object { + "x": Array [ + 4.929845713484313, + 9.859691426968626, + ], + }, + Object { + "x": Array [ + 4.941922338097189, + 9.883844676194379, + ], + }, + Object { + "x": Array [ + 4.951960182252786, + 9.903920364505572, + ], + }, + Object { + "x": Array [ + 4.96029411666545, + 9.9205882333309, + ], + }, + Object { + "x": Array [ + 4.967206214779832, + 9.934412429559664, + ], + }, + Object { + "x": Array [ + 4.972933540468227, + 9.945867080936454, + ], + }, + Object { + "x": Array [ + 4.97767492302411, + 9.95534984604822, + ], + }, + Object { + "x": Array [ + 4.981596814298641, + 9.963193628597281, + ], + }, + Object { + "x": Array [ + 4.984838325266105, + 9.96967665053221, + ], + }, + Object { + "x": Array [ + 4.9875155369753035, + 9.975031073950607, + ], + }, + Object { + "x": Array [ + 4.989725175561048, + 9.979450351122097, + ], + }, + Object { + "x": Array [ + 4.991547734030691, + 9.983095468061382, + ], + }, + Object { + "x": Array [ + 4.993050115788252, + 9.986100231576504, + ], + }, + Object { + "x": Array [ + 4.994287866909378, + 9.988575733818756, + ], + }, + Object { + "x": Array [ + 4.995027593476066, + 9.990614112845385, + ], + }, + Object { + "x": Array [ + 4.995027593476066, + 9.992291713056268, + ], + }, + Object { + "x": Array [ + 4.995027593476066, + 9.99367173585381, + ], + }, + Object { + "x": Array [ + 4.995027593476066, + 9.994806458630702, + ], + }, + Object { + "x": Array [ + 5, + 10, + ], + }, +] +`; + +exports[`Controller the "loop" prop can be combined with the "reverse" prop 1`] = ` +Array [ + 0.33334, + 0.66668, + 1, + 0.66666, + 0.33331999999999995, + 0, + 0.33334, + 0.66668, + 1, +] +`; + +exports[`Controller when the "to" prop is an async function acts strangely without the "from" prop 1`] = ` +Array [ + Object { + "x": 1.0226348433078583, + }, + Object { + "x": 1.0761552889499395, + }, + Object { + "x": 1.1472729545687759, + }, + Object { + "x": 1.226793329378144, + }, + Object { + "x": 1.3085053191603682, + }, + Object { + "x": 1.3883524421610094, + }, + Object { + "x": 1.4638171205392543, + }, + Object { + "x": 1.5334657448036912, + }, + Object { + "x": 1.5966146523130327, + }, + Object { + "x": 1.6530867180317823, + }, + Object { + "x": 1.7030355736424132, + }, + Object { + "x": 1.74682006574163, + }, + Object { + "x": 1.7849158337229636, + }, + Object { + "x": 1.817854140674256, + }, + Object { + "x": 1.8461805634019814, + }, + Object { + "x": 1.870428023277061, + }, + Object { + "x": 1.8911000586164695, + }, + Object { + "x": 1.9086613098839855, + }, + Object { + "x": 1.9235329941206056, + }, + Object { + "x": 1.9360917483504718, + }, + Object { + "x": 1.9466706719880824, + }, + Object { + "x": 1.9555617327559878, + }, + Object { + "x": 1.9630189477450264, + }, + Object { + "x": 1.9692619326731133, + }, + Object { + "x": 1.9744795445908405, + }, + Object { + "x": 1.9788334387327189, + }, + Object { + "x": 1.9824614283710786, + }, + Object { + "x": 1.9854805845242978, + }, + Object { + "x": 1.9879900455631967, + }, + Object { + "x": 1.9900735291663625, + }, + Object { + "x": 1.991801553694958, + }, + Object { + "x": 1.9932333851170567, + }, + Object { + "x": 1.9944187307560275, + }, + Object { + "x": 1.9953992035746602, + }, + Object { + "x": 1.9962095813165261, + }, + Object { + "x": 1.9968788842438259, + }, + Object { + "x": 1.997431293890262, + }, + Object { + "x": 1.9978869335076728, + }, + Object { + "x": 1.998262528947063, + }, + Object { + "x": 1.9985719667273445, + }, + Object { + "x": 1.9988267641056732, + }, + Object { + "x": 2, + }, +] +`; diff --git a/packages/core/src/__snapshots__/SpringValue.test.ts.snap b/packages/core/src/__snapshots__/SpringValue.test.ts.snap new file mode 100644 index 0000000000..3dd280963d --- /dev/null +++ b/packages/core/src/__snapshots__/SpringValue.test.ts.snap @@ -0,0 +1,295 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`SpringValue can animate a number 1`] = ` +Array [ + 0.100002, + 0.200004, + 0.300006, + 0.400008, + 0.50001, + 0.600012, + 0.700014, + 0.800016, + 0.900018, + 1, +] +`; + +exports[`SpringValue can animate a string 1`] = ` +Array [ + "1.00002px 2.00004px", + "2.00004px 4.00008px", + "3.00006px 6.00012px", + "4.00008px 8.00016px", + "5.0001px 10.0002px", + "6.00012px 12.00024px", + "7.00014px 14.00028px", + "8.00016px 16.00032px", + "9.00018px 18.00036px", + "10px 20px", +] +`; + +exports[`SpringValue can animate an array of numbers 1`] = ` +Array [ + Array [ + 1.00002, + 2.00004, + ], + Array [ + 2.00004, + 4.00008, + ], + Array [ + 3.00006, + 6.00012, + ], + Array [ + 4.00008, + 8.00016, + ], + Array [ + 5.0001, + 10.0002, + ], + Array [ + 6.00012, + 12.00024, + ], + Array [ + 7.00014, + 14.00028, + ], + Array [ + 8.00016, + 16.00032, + ], + Array [ + 9.00018, + 18.00036, + ], + Array [ + 10, + 20, + ], +] +`; + +exports[`SpringValue can have an animated string as its target 1`] = ` +Array [ + "rgba(255, 255, 0, 1)", + "rgba(255, 229, 0, 1)", + "rgba(255, 204, 0, 1)", + "rgba(255, 178, 0, 1)", + "rgba(255, 153, 0, 1)", + "rgba(255, 127, 0, 1)", + "rgba(255, 102, 0, 1)", + "rgba(255, 76, 0, 1)", + "rgba(255, 51, 0, 1)", + "rgba(255, 25, 0, 1)", + "red", +] +`; + +exports[`SpringValue the "loop" prop can be combined with the "reverse" prop 1`] = ` +Array [ + 0.33334, + 0.66668, + 1, + 0.66666, + 0.33331999999999995, + 0, + 0.33334, + 0.66668, + 1, +] +`; + +exports[`SpringValue the "loop" prop resets the animation once finished 1`] = ` +Array [ + 0.33334, + 0.66668, + 1, +] +`; + +exports[`SpringValue when "reverse" prop is true swaps the "to" and "from" props 1`] = ` +Array [ + 0.9773651566921419, + 0.9238447110500605, + 0.852727045431224, + 0.7732066706218559, + 0.6914946808396315, + 0.6116475578389905, + 0.5361828794607453, + 0.4665342551963084, + 0.4033853476869672, + 0.3469132819682177, + 0.29696442635758724, + 0.2531799342583708, + 0.21508416627703766, + 0.18214585932574526, + 0.15381943659801983, + 0.1295719767229399, + 0.10889994138353111, + 0.09133869011601468, + 0.07646700587939456, + 0.06390825164952882, + 0.05332932801191841, + 0.0444382672440135, + 0.03698105225497496, + 0.030738067326888108, + 0.02552045540916056, + 0.02116656126728198, + 0.01753857162892271, + 0.014519415475703344, + 0.012009954436804516, + 0.009926470833638602, + 0.008198446305043062, + 0.006766614882944518, + 0.005581269243973591, + 0.0046007964253405855, + 0.0037904186834741348, + 0.003121115756173977, + 0.0025687061097373425, + 0.002113066492326755, + 0.0017374710529361444, + 0.0014280332726546588, + 0.001173235894326376, + 0, +] +`; + +exports[`SpringValue when "reverse" prop is true works when "from" was set by an earlier update 1`] = ` +Array [ + 0.9773651566921419, + 0.9238447110500605, + 0.852727045431224, + 0.7732066706218559, + 0.6914946808396315, + 0.6116475578389905, + 0.5361828794607453, + 0.4665342551963084, + 0.4033853476869672, + 0.3469132819682177, + 0.29696442635758724, + 0.2531799342583708, + 0.21508416627703766, + 0.18214585932574526, + 0.15381943659801983, + 0.1295719767229399, + 0.10889994138353111, + 0.09133869011601468, + 0.07646700587939456, + 0.06390825164952882, + 0.05332932801191841, + 0.0444382672440135, + 0.03698105225497496, + 0.030738067326888108, + 0.02552045540916056, + 0.02116656126728198, + 0.01753857162892271, + 0.014519415475703344, + 0.012009954436804516, + 0.009926470833638602, + 0.008198446305043062, + 0.006766614882944518, + 0.005581269243973591, + 0.0046007964253405855, + 0.0037904186834741348, + 0.003121115756173977, + 0.0025687061097373425, + 0.002113066492326755, + 0.0017374710529361444, + 0.0014280332726546588, + 0.001173235894326376, + 0, +] +`; + +exports[`SpringValue when "reverse" prop is true works when "to" and "from" were set by an earlier update 1`] = ` +Array [ + 0.022634843307857987, + 0.07615528894993949, + 0.14727295456877587, + 0.226793329378144, + 0.30850531916036833, + 0.3883524421610094, + 0.4638171205392546, + 0.5334657448036914, + 0.5739798090051748, + 0.5769314290818427, + 0.5557626190736369, + 0.5200267363634852, + 0.4764105145625939, + 0.4295016985132453, + 0.38236344286272556, + 0.3369622784733687, + 0.29448540630343617, + 0.25557459185220316, + 0.22049742047819276, + 0.18927168260884208, + 0.16175483826511933, + 0.1377075920817319, + 0.11683838434304501, + 0.0988339093960519, + 0.08337948597437063, + 0.07017212884873279, + 0.05892843425047188, + 0.049388836173825494, + 0.041319373575113914, + 0.03451179641037492, + 0.028782605949931907, + 0.023971452443943598, + 0.019939186165186966, + 0.016565764841941392, + 0.013748152945448568, + 0.011398299719529353, + 0.009441248327067157, + 0.007813404341311832, + 0.006460975252106907, + 0.005338581610289848, + 0.004408033349647206, + 0.00363726055737456, + 0.0029993856652006856, + 0.0024719230850121722, + 0.002036092265339304, + 0.0016762306751292224, + 0.0013792940991652848, + 0.001134432694629231, + 0.0009326324005005715, + 0.0007664124372832261, + 0.0006295707368567502, + 0, +] +`; + +exports[`SpringValue when "to" prop equals current value avoids interrupting an active animation 1`] = ` +Array [ + 0.022634843307857987, + 0.05403278177365278, + 0.07284142865128296, + 0.0828538750595177, + 0.086845421255966, + 0.08683009255947671, + 0.0842549750547836, + 0.08014705211134462, + 0.0752238210530826, + 0.06997634488902708, + 0.06473137113972319, + 0.059697592148462514, + 0.05499992314855915, + 0.050704753857468414, + 0.04683842305057004, + 0.04340062433783876, + 0.040374037257053644, + 0.03773116146592327, + 0.03543909060575714, + 0.033462778841422576, + 0.031767213683302126, + 0.030318803092499735, + 0.029086205080955534, + 0.028040767912793738, + 0.022634843307857987, +] +`; diff --git a/packages/core/src/components/Spring.tsx b/packages/core/src/components/Spring.tsx new file mode 100644 index 0000000000..110dd44efe --- /dev/null +++ b/packages/core/src/components/Spring.tsx @@ -0,0 +1,27 @@ +import { NoInfer, UnknownProps } from '@react-spring/types' +import { useSpring, UseSpringProps } from '../hooks/useSpring' +import { SpringValues, SpringToFn, SpringChain } from '../types' + +export type SpringComponentProps< + State extends object = UnknownProps +> = unknown & + UseSpringProps & { + children: (values: SpringValues) => JSX.Element | null + } + +// Infer state from "from" object prop. +export function Spring( + props: { + from: State + to?: SpringChain> | SpringToFn> + } & Omit>, 'from' | 'to'> +): JSX.Element | null + +// Infer state from "to" object prop. +export function Spring( + props: { to: State } & Omit>, 'to'> +): JSX.Element | null + +export function Spring({ children, ...props }: any) { + return children(useSpring(props)) +} diff --git a/packages/core/src/components/Trail.tsx b/packages/core/src/components/Trail.tsx new file mode 100644 index 0000000000..a87a01726e --- /dev/null +++ b/packages/core/src/components/Trail.tsx @@ -0,0 +1,29 @@ +import { ReactNode } from 'react' +import { NoInfer, Falsy } from '@react-spring/types' +import { is } from '@react-spring/shared' + +import { Valid } from '../types/common' +import { PickAnimated, SpringValues } from '../types' +import { UseSpringProps } from '../hooks/useSpring' +import { useTrail } from '../hooks/useTrail' + +export type TrailComponentProps = unknown & + UseSpringProps & { + items: readonly Item[] + children: ( + item: NoInfer, + index: number + ) => ((values: SpringValues>) => ReactNode) | Falsy + } + +export function Trail>({ + items, + children, + ...props +}: Props & Valid>) { + const trails: any[] = useTrail(items.length, props) + return items.map((item, index) => { + const result = children(item, index) + return is.fun(result) ? result(trails[index]) : result + }) +} diff --git a/packages/core/src/components/Transition.tsx b/packages/core/src/components/Transition.tsx new file mode 100644 index 0000000000..60b605dce9 --- /dev/null +++ b/packages/core/src/components/Transition.tsx @@ -0,0 +1,20 @@ +import { Valid } from '../types/common' +import { TransitionComponentProps } from '../types' +import { useTransition } from '../hooks' + +export function Transition< + Item extends any, + Props extends TransitionComponentProps +>( + props: + | TransitionComponentProps + | (Props & Valid>) +): JSX.Element + +export function Transition({ + items, + children, + ...props +}: TransitionComponentProps) { + return useTransition(items, props)(children) +} diff --git a/packages/core/src/components/index.ts b/packages/core/src/components/index.ts new file mode 100644 index 0000000000..acabf01c4b --- /dev/null +++ b/packages/core/src/components/index.ts @@ -0,0 +1,3 @@ +export * from './Spring' +export * from './Trail' +export * from './Transition' diff --git a/src/shared/constants.ts b/packages/core/src/constants.ts similarity index 86% rename from src/shared/constants.ts rename to packages/core/src/constants.ts index 5d40b5cd3d..39a2833ec7 100644 --- a/src/shared/constants.ts +++ b/packages/core/src/constants.ts @@ -1,3 +1,4 @@ +// The `mass` prop defaults to 1 export const config = { default: { tension: 170, friction: 26 }, gentle: { tension: 120, friction: 14 }, @@ -5,4 +6,4 @@ export const config = { stiff: { tension: 210, friction: 20 }, slow: { tension: 280, friction: 60 }, molasses: { tension: 280, friction: 120 }, -} +} as const diff --git a/packages/core/src/globals.ts b/packages/core/src/globals.ts new file mode 100644 index 0000000000..de1b6cafd7 --- /dev/null +++ b/packages/core/src/globals.ts @@ -0,0 +1,17 @@ +import { + Globals, + frameLoop, + createStringInterpolator, +} from '@react-spring/shared' +import { Interpolation } from './Interpolation' + +// Sane defaults +Globals.assign({ + createStringInterpolator, + to: (source, args) => new Interpolation(source, args), +}) + +export { Globals } + +/** Advance all animations by the given time */ +export const update = frameLoop.advance diff --git a/packages/core/src/helpers.test.ts b/packages/core/src/helpers.test.ts new file mode 100644 index 0000000000..80015c879b --- /dev/null +++ b/packages/core/src/helpers.test.ts @@ -0,0 +1,55 @@ +import { inferTo } from './helpers' +import { ReservedProps } from './types/props' + +describe('helpers', () => { + it('interpolateTo', () => { + const forwardProps = { + result: 'ok', + } + const restProps = { + from: 'from', + config: 'config', + onStart: 'onStart', + } + const excludeProps: Required = { + children: undefined, + config: undefined, + from: undefined, + to: undefined, + ref: undefined, + loop: undefined, + reset: undefined, + pause: undefined, + cancel: undefined, + reverse: undefined, + immediate: undefined, + default: undefined, + delay: undefined, + items: undefined, + trail: undefined, + sort: undefined, + expires: undefined, + initial: undefined, + enter: undefined, + leave: undefined, + update: undefined, + onProps: undefined, + onStart: undefined, + onChange: undefined, + onRest: undefined, + onResolve: undefined, + onDestroyed: undefined, + } + expect( + inferTo({ + ...forwardProps, + ...restProps, + ...excludeProps, + }) + ).toMatchObject({ + to: forwardProps, + ...restProps, + ...excludeProps, + }) + }) +}) diff --git a/packages/core/src/helpers.ts b/packages/core/src/helpers.ts new file mode 100644 index 0000000000..a588ca5540 --- /dev/null +++ b/packages/core/src/helpers.ts @@ -0,0 +1,219 @@ +import { + is, + toArray, + eachProp, + getFluidValue, + isAnimatedString, + FluidValue, + Globals as G, +} from '@react-spring/shared' +import { AnyFn, OneOrMore, Lookup } from '@react-spring/types' +import { ReservedProps, ForwardProps, InferTo } from './types' +import type { Controller } from './Controller' +import type { SpringRef } from './SpringRef' + +export function callProp( + value: T, + ...args: T extends AnyFn ? Parameters : unknown[] +): T extends AnyFn ? U : T { + return is.fun(value) ? value(...args) : value +} + +/** Try to coerce the given value into a boolean using the given key */ +export const matchProp = ( + value: boolean | OneOrMore | ((key: any) => boolean) | undefined, + key: string | undefined +) => + value === true || + !!( + key && + value && + (is.fun(value) ? value(key) : toArray(value).includes(key)) + ) + +export const resolveProp = ( + prop: T | Lookup | undefined, + key: string | undefined +) => (is.obj(prop) ? key && (prop as any)[key] : prop) + +export const concatFn = (first: T | undefined, last: T) => + first ? (...args: Parameters) => (first(...args), last(...args)) : last + +/** Returns `true` if the given prop is having its default value set. */ +export const hasDefaultProp = (props: T, key: keyof T) => + !is.und(getDefaultProp(props, key)) + +/** Get the default value being set for the given `key` */ +export const getDefaultProp = ( + props: T, + key: P +): T[P] => + props.default === true + ? props[key] + : props.default + ? props.default[key] + : undefined + +const noopTransform = (value: any) => value + +/** + * Extract the default props from an update. + * + * When the `default` prop is falsy, this function still behaves as if + * `default: true` was used. The `default` prop is always respected when + * truthy. + */ +export const getDefaultProps = ( + props: Lookup, + transform: (value: any, key: string) => any = noopTransform +): T => { + let keys: readonly string[] = DEFAULT_PROPS + if (props.default && props.default !== true) { + props = props.default + keys = Object.keys(props) + } + const defaults: any = {} + for (const key of keys) { + const value = transform(props[key], key) + if (!is.und(value)) { + defaults[key] = value + } + } + return defaults +} + +/** + * These props are implicitly used as defaults when defined in a + * declarative update (eg: render-based) or any update with `default: true`. + * + * Use `default: {}` or `default: false` to opt-out of these implicit defaults + * for any given update. + * + * Note: These are not the only props with default values. For example, the + * `pause`, `cancel`, and `immediate` props. But those must be updated with + * the object syntax (eg: `default: { immediate: true }`). + */ +export const DEFAULT_PROPS = [ + 'config', + 'onProps', + 'onStart', + 'onChange', + 'onPause', + 'onResume', + 'onRest', +] as const + +const RESERVED_PROPS: { + [key: string]: 1 | undefined +} = { + config: 1, + from: 1, + to: 1, + ref: 1, + loop: 1, + reset: 1, + pause: 1, + cancel: 1, + reverse: 1, + immediate: 1, + default: 1, + delay: 1, + onProps: 1, + onStart: 1, + onChange: 1, + onPause: 1, + onResume: 1, + onRest: 1, + onResolve: 1, + + // Transition props + items: 1, + trail: 1, + sort: 1, + expires: 1, + initial: 1, + enter: 1, + update: 1, + leave: 1, + children: 1, + onDestroyed: 1, + + // Internal props + keys: 1, + callId: 1, + parentId: 1, +} + +/** + * Extract any properties whose keys are *not* reserved for customizing your + * animations. All hooks use this function, which means `useTransition` props + * are reserved for `useSpring` calls, etc. + */ +function getForwardProps( + props: Props +): ForwardProps | undefined { + const forward: any = {} + + let count = 0 + eachProp(props, (value, prop) => { + if (!RESERVED_PROPS[prop]) { + forward[prop] = value + count++ + } + }) + + if (count) { + return forward + } +} + +/** + * Clone the given `props` and move all non-reserved props + * into the `to` prop. + */ +export function inferTo(props: T): InferTo { + const to = getForwardProps(props) + if (to) { + const out: any = { to } + eachProp(props, (val, key) => key in to || (out[key] = val)) + return out + } + return { ...props } as any +} + +// Compute the goal value, converting "red" to "rgba(255, 0, 0, 1)" in the process +export function computeGoal(value: T | FluidValue): T { + value = getFluidValue(value) + return is.arr(value) + ? value.map(computeGoal) + : isAnimatedString(value) + ? (G.createStringInterpolator({ + range: [0, 1], + output: [value, value] as any, + })(1) as any) + : value +} + +export function hasProps(props: object) { + for (const _ in props) return true + return false +} + +export function isAsyncTo(to: any) { + return is.fun(to) || (is.arr(to) && is.obj(to[0])) +} + +/** Detach `ctrl` from `ctrl.ref` and (optionally) the given `ref` */ +export function detachRefs(ctrl: Controller, ref?: SpringRef) { + ctrl.ref?.delete(ctrl) + ref?.delete(ctrl) +} + +/** Replace `ctrl.ref` with the given `ref` (if defined) */ +export function replaceRef(ctrl: Controller, ref?: SpringRef) { + if (ref && ctrl.ref !== ref) { + ctrl.ref?.delete(ctrl) + ref.add(ctrl) + ctrl.ref = ref + } +} diff --git a/packages/core/src/hooks/index.ts b/packages/core/src/hooks/index.ts new file mode 100644 index 0000000000..38e5ac4509 --- /dev/null +++ b/packages/core/src/hooks/index.ts @@ -0,0 +1,6 @@ +export * from './useChain' +export * from './useSpring' +export * from './useSprings' +export * from './useSpringRef' +export * from './useTrail' +export * from './useTransition' diff --git a/packages/core/src/hooks/useChain.ts b/packages/core/src/hooks/useChain.ts new file mode 100644 index 0000000000..09a041c87a --- /dev/null +++ b/packages/core/src/hooks/useChain.ts @@ -0,0 +1,54 @@ +import { useLayoutEffect } from 'react-layout-effect' +import { each } from '@react-spring/shared' +import { SpringRef } from '../SpringRef' +import { callProp } from '../helpers' + +export function useChain( + refs: ReadonlyArray, + timeSteps?: number[], + timeFrame = 1000 +) { + useLayoutEffect(() => { + if (timeSteps) { + let prevDelay = 0 + each(refs, (ref, i) => { + const controllers = ref.current + if (controllers.length) { + let delay = timeFrame * timeSteps[i] + + // Use the previous delay if none exists. + if (isNaN(delay)) delay = prevDelay + else prevDelay = delay + + each(controllers, ctrl => { + each(ctrl.queue, props => { + props.delay = key => delay + callProp(props.delay || 0, key) + }) + ctrl.start() + }) + } + }) + } else { + let p: Promise = Promise.resolve() + each(refs, ref => { + const controllers = ref.current + if (controllers.length) { + // Take the queue of each controller + const queues = controllers.map(ctrl => { + const q = ctrl.queue + ctrl.queue = [] + return q + }) + + // Apply the queue when the previous ref stops animating + p = p.then(() => { + each(controllers, (ctrl, i) => + each(queues[i] || [], update => ctrl.queue.push(update)) + ) + return ref.start() + }) + } + }) + } + }) +} diff --git a/packages/core/src/hooks/useSpring.test.tsx b/packages/core/src/hooks/useSpring.test.tsx new file mode 100644 index 0000000000..f3577b8fa5 --- /dev/null +++ b/packages/core/src/hooks/useSpring.test.tsx @@ -0,0 +1,154 @@ +import * as React from 'react' +import { render, RenderResult } from '@testing-library/react' +import { is } from '@react-spring/shared' +import { Lookup } from '@react-spring/types' +import { SpringContext } from '../SpringContext' +import { SpringValue } from '../SpringValue' +import { SpringRef } from '../SpringRef' +import { useSpring } from './useSpring' + +describe('useSpring', () => { + let springs: Lookup + let ref: SpringRef + + // Call the "useSpring" hook and update local variables. + const [update, context] = createUpdater(({ args }) => { + const result = useSpring(...args) + if (is.fun(args[0]) || args.length == 2) { + springs = result[0] as any + ref = result[1] + } else { + springs = result as any + ref = undefined as any + } + return null + }) + + describe('when only a props object is passed', () => { + it('is updated every render', () => { + update({ x: 0 }) + expect(springs.x.goal).toBe(0) + + update({ x: 1 }) + expect(springs.x.goal).toBe(1) + }) + it('does not return a ref', () => { + update({ x: 0 }) + expect(ref).toBeUndefined() + }) + + describe('when SpringContext has "pause={false}"', () => { + it('stays paused if last rendered with "pause: true"', () => { + const props = { from: { t: 0 }, to: { t: 1 } } + + // Paused by context. + context.set({ pause: true }) + update({ ...props, pause: false }) + expect(springs.t.isPaused).toBeTruthy() + + // Paused by props and context. + update({ ...props, pause: true }) + expect(springs.t.isPaused).toBeTruthy() + + // Paused by props. + context.set({ pause: false }) + expect(springs.t.isPaused).toBeTruthy() + + // Resumed. + update({ ...props, pause: false }) + expect(springs.t.isPaused).toBeFalsy() + }) + }) + }) + + describe('when both a props object and a deps array are passed', () => { + it('is updated only when a dependency changes', () => { + update({ x: 0 }, [1]) + expect(springs.x.goal).toBe(0) + + update({ x: 1 }, [1]) + expect(springs.x.goal).toBe(0) + + update({ x: 1 }, [2]) + expect(springs.x.goal).toBe(1) + }) + it('returns a ref', () => { + update({ x: 0 }, [1]) + expect(ref).toBeInstanceOf(SpringRef) + }) + }) + + describe('when only a props function is passed', () => { + it('is never updated on render', () => { + update(() => ({ x: 0 })) + expect(springs.x.goal).toBe(0) + + update(() => ({ x: 1 })) + expect(springs.x.goal).toBe(0) + }) + it('returns a ref', () => { + update(() => ({ x: 0 })) + expect(ref).toBeInstanceOf(SpringRef) + }) + }) + + describe('when both a props function and a deps array are passed', () => { + it('is updated when a dependency changes', () => { + update(() => ({ x: 0 }), [1]) + expect(springs.x.goal).toBe(0) + + update(() => ({ x: 1 }), [1]) + expect(springs.x.goal).toBe(0) + + update(() => ({ x: 1 }), [2]) + expect(springs.x.goal).toBe(1) + }) + it('returns a ref', () => { + update(() => ({ x: 0 }), [1]) + expect(ref).toBeInstanceOf(SpringRef) + }) + }) +}) + +interface TestContext extends SpringContext { + set(values: SpringContext): void +} + +function createUpdater(Component: React.ComponentType<{ args: [any, any?] }>) { + let prevElem: JSX.Element | undefined + let result: RenderResult | undefined + + const context: TestContext = { + set(values) { + Object.assign(this, values) + if (prevElem) { + renderWithContext(prevElem) + } + }, + } + // Ensure `context.set` is ignored. + Object.defineProperty(context, 'set', { + value: context.set, + enumerable: false, + }) + + afterEach(() => { + result = prevElem = undefined + for (const key in context) { + delete (context as any)[key] + } + }) + + function renderWithContext(elem: JSX.Element) { + const wrapped = {elem} + if (result) result.rerender(wrapped) + else result = render(wrapped) + return result + } + + type Args = Parameters + const update = (...args: [Args[0], Args[1]?]) => + renderWithContext((prevElem = )) + + return [update, context] as const +} diff --git a/packages/core/src/hooks/useSpring.ts b/packages/core/src/hooks/useSpring.ts new file mode 100644 index 0000000000..ed686c9c01 --- /dev/null +++ b/packages/core/src/hooks/useSpring.ts @@ -0,0 +1,65 @@ +import { Remap } from '@react-spring/types' +import { is } from '@react-spring/shared' + +import { ControllerUpdate, PickAnimated, SpringValues } from '../types' +import { Valid } from '../types/common' +import { SpringRef } from '../SpringRef' +import { useSprings } from './useSprings' + +/** + * The props that `useSpring` recognizes. + */ +export type UseSpringProps = unknown & + PickAnimated extends infer State + ? Remap< + ControllerUpdate & { + /** + * Used to access the imperative API. + * + * When defined, the render animation won't auto-start. + */ + ref?: SpringRef + } + > + : never + +/** + * The `props` function is only called on the first render, unless + * `deps` change (when defined). State is inferred from forward props. + */ +export function useSpring( + props: + | Function + | (() => (Props & Valid>) | UseSpringProps), + deps?: readonly any[] | undefined +): PickAnimated extends infer State + ? [SpringValues, SpringRef] + : never + +/** + * Updated on every render, with state inferred from forward props. + */ +export function useSpring( + props: (Props & Valid>) | UseSpringProps +): SpringValues> + +/** + * Updated only when `deps` change, with state inferred from forward props. + */ +export function useSpring( + props: (Props & Valid>) | UseSpringProps, + deps: readonly any[] | undefined +): PickAnimated extends infer State + ? [SpringValues, SpringRef] + : never + +/** @internal */ +export function useSpring(props: any, deps?: readonly any[]) { + const isFn = is.fun(props) + const [[values], ref] = useSprings( + 1, + isFn ? props : [props], + isFn ? deps || [] : deps + ) + return isFn || arguments.length == 2 ? [values, ref] : values +} diff --git a/packages/core/src/hooks/useSpringRef.ts b/packages/core/src/hooks/useSpringRef.ts new file mode 100644 index 0000000000..cfd8cdfbb9 --- /dev/null +++ b/packages/core/src/hooks/useSpringRef.ts @@ -0,0 +1,8 @@ +import { useState } from 'react' +import { Lookup } from '@react-spring/types' +import { SpringRef } from '../SpringRef' + +const initSpringRef = () => new SpringRef() + +export const useSpringRef = () => + useState(initSpringRef)[0] as SpringRef diff --git a/packages/core/src/hooks/useSprings.test.tsx b/packages/core/src/hooks/useSprings.test.tsx new file mode 100644 index 0000000000..3a3433e2cd --- /dev/null +++ b/packages/core/src/hooks/useSprings.test.tsx @@ -0,0 +1,132 @@ +import * as React from 'react' +import { render, RenderResult } from '@testing-library/react' +import { is, eachProp } from '@react-spring/shared' +import { Lookup } from '@react-spring/types' +import { SpringRef } from '../SpringRef' +import { SpringValue } from '../SpringValue' +import { useSprings } from './useSprings' + +describe('useSprings', () => { + let springs: Lookup[] + let ref: SpringRef + + // Call the "useSprings" hook and update local variables. + const update = createUpdater(({ args }) => { + const result = useSprings(...args) + if (is.fun(args[1]) || args.length == 3) { + springs = result[0] as any + ref = result[1] + } else { + springs = result as any + ref = undefined as any + } + return null + }) + + describe('when only a props function is passed', () => { + it('calls the props function once per new spring', () => { + const getProps = jest.fn((i: number) => ({ x: i * 100 })) + + // Create two springs. + update(2, getProps) + expect(getProps).toHaveBeenCalledTimes(2) + expect(springs.length).toBe(2) + + // Do nothing. + update(2, getProps) + expect(getProps).toHaveBeenCalledTimes(2) + expect(springs.length).toBe(2) + + // Create a spring. + update(3, getProps) + expect(getProps).toHaveBeenCalledTimes(3) + expect(springs.length).toBe(3) + + // Remove a spring. + update(2, getProps) + expect(getProps).toHaveBeenCalledTimes(3) + expect(springs.length).toBe(2) + + // Create two springs. + update(4, getProps) + expect(getProps).toHaveBeenCalledTimes(5) + expect(springs.length).toBe(4) + }) + }) + + describe('when both a props function and a deps array are passed', () => { + it('updates each spring when the deps have changed', () => { + const getProps = jest.fn((i: number) => ({ x: i * 100 })) + + update(2, getProps, [1]) + expect(getProps).toHaveBeenCalledTimes(2) + + update(2, getProps, [1]) + expect(getProps).toHaveBeenCalledTimes(2) + + update(2, getProps, [2]) + expect(getProps).toHaveBeenCalledTimes(4) + }) + }) + + describe('when only a props array is passed', () => { + it('updates each spring on every render', () => { + update(2, [{ x: 0 }, { x: 0 }]) + expect(mapSprings(s => s.goal)).toEqual([{ x: 0 }, { x: 0 }]) + + update(3, [{ x: 1 }, { x: 2 }, { x: 3 }]) + expect(mapSprings(s => s.goal)).toEqual([{ x: 1 }, { x: 2 }, { x: 3 }]) + }) + }) + + describe('when the length argument increases', () => { + it('creates new springs', () => { + const getProps = (i: number) => ({ x: i * 100 }) + + update(0, getProps) + expect(springs.length).toBe(0) + + update(2, getProps) + expect(springs.length).toBe(2) + }) + }) + + describe('when the length argument decreases', () => { + it('removes old springs', () => { + const getProps = (i: number) => ({ x: i * 100 }) + + update(3, getProps) + expect(springs.length).toBe(3) + + update(1, getProps) + expect(springs.length).toBe(1) + }) + }) + + function mapSprings(fn: (spring: SpringValue) => T) { + return springs.map(values => { + const result: any = {} + eachProp(values, spring => { + result[spring.key!] = fn(spring) + }) + return result + }) + } +}) + +function createUpdater( + Component: React.ComponentType<{ args: [any, any, any?] }> +) { + let result: RenderResult | undefined + afterEach(() => { + result = undefined + }) + + type Args = [number, any[] | ((i: number) => any), any[]?] + return (...args: Args) => { + const elem = + if (result) result.rerender(elem) + else result = render(elem) + return result + } +} diff --git a/packages/core/src/hooks/useSprings.ts b/packages/core/src/hooks/useSprings.ts new file mode 100644 index 0000000000..eb71f65a4c --- /dev/null +++ b/packages/core/src/hooks/useSprings.ts @@ -0,0 +1,227 @@ +import { useContext, useMemo, useRef } from 'react' +import { useLayoutEffect } from 'react-layout-effect' +import { Lookup } from '@react-spring/types' +import { + is, + each, + usePrev, + useOnce, + useForceUpdate, +} from '@react-spring/shared' + +import { + ControllerFlushFn, + ControllerUpdate, + PickAnimated, + SpringValues, +} from '../types' +import { UseSpringProps } from './useSpring' +import { declareUpdate } from '../SpringValue' +import { + Controller, + getSprings, + flushUpdateQueue, + setSprings, +} from '../Controller' +import { hasProps, detachRefs, replaceRef } from '../helpers' +import { SpringContext } from '../SpringContext' +import { SpringRef } from '../SpringRef' + +export type UseSpringsProps = unknown & + ControllerUpdate & { + ref?: SpringRef + } + +/** + * When the `deps` argument exists, the `props` function is called whenever + * the `deps` change on re-render. + * + * Without the `deps` argument, the `props` function is only called once. + */ +export function useSprings( + length: number, + props: (i: number, ctrl: Controller) => Props, + deps?: readonly any[] +): PickAnimated extends infer State + ? [SpringValues[], SpringRef] + : never + +/** + * Animations are updated on re-render. + */ +export function useSprings( + length: number, + props: Props[] & UseSpringsProps>[] +): SpringValues>[] + +/** + * When the `deps` argument exists, you get the `update` and `stop` function. + */ +export function useSprings( + length: number, + props: Props[] & UseSpringsProps>[], + deps: readonly any[] | undefined +): PickAnimated extends infer State + ? [SpringValues[], SpringRef] + : never + +/** @internal */ +export function useSprings( + length: number, + props: any[] | ((i: number, ctrl: Controller) => any), + deps?: readonly any[] +): any { + const propsFn = is.fun(props) && props + if (propsFn && !deps) deps = [] + + // Create a local ref if a props function or deps array is ever passed. + const ref = useMemo( + () => (propsFn || arguments.length == 3 ? new SpringRef() : void 0), + [] + ) + + interface State { + // The controllers used for applying updates. + ctrls: Controller[] + // The queue of changes to make on commit. + queue: Array<() => void> + // The flush function used by controllers. + flush: ControllerFlushFn + } + + // Set to 0 to prevent sync flush. + const layoutId = useRef(0) + const forceUpdate = useForceUpdate() + + // State is updated on commit. + const state = useMemo( + (): State => ({ + ctrls: [], + queue: [], + flush(ctrl, updates) { + const springs = getSprings(ctrl, updates) + + // Flushing is postponed until the component's commit phase + // if a spring was created since the last commit. + const canFlushSync = + layoutId.current > 0 && + !state.queue.length && + !Object.keys(springs).some(key => !ctrl.springs[key]) + + return canFlushSync + ? flushUpdateQueue(ctrl, updates) + : new Promise(resolve => { + setSprings(ctrl, springs) + state.queue.push(() => { + resolve(flushUpdateQueue(ctrl, updates)) + }) + forceUpdate() + }) + }, + }), + [] + ) + + const ctrls = [...state.ctrls] + const updates: any[] = [] + + // Cache old controllers to dispose in the commit phase. + const prevLength = usePrev(length) || 0 + const oldCtrls = ctrls.slice(length, prevLength) + + // Create new controllers when "length" increases, and destroy + // the affected controllers when "length" decreases. + useMemo(() => { + ctrls.length = length + declareUpdates(prevLength, length) + }, [length]) + + // Update existing controllers when "deps" are changed. + useMemo(() => { + declareUpdates(0, Math.min(prevLength, length)) + }, deps) + + /** Fill the `updates` array with declarative updates for the given index range. */ + function declareUpdates(startIndex: number, endIndex: number) { + for (let i = startIndex; i < endIndex; i++) { + const ctrl = ctrls[i] || (ctrls[i] = new Controller(null, state.flush)) + + const update: UseSpringProps = propsFn + ? propsFn(i, ctrl) + : (props as any)[i] + + if (update) { + updates[i] = declareUpdate(update) + } + } + } + + // New springs are created during render so users can pass them to + // their animated components, but new springs aren't cached until the + // commit phase (see the `useLayoutEffect` callback below). + const springs = ctrls.map((ctrl, i) => getSprings(ctrl, updates[i])) + + const context = useContext(SpringContext) + const prevContext = usePrev(context) + const hasContext = context !== prevContext && hasProps(context) + + useLayoutEffect(() => { + layoutId.current++ + + // Replace the cached controllers. + state.ctrls = ctrls + + // Flush the commit queue. + const { queue } = state + if (queue.length) { + state.queue = [] + each(queue, cb => cb()) + } + + // Clean up any unused controllers. + each(oldCtrls, ctrl => { + detachRefs(ctrl, ref) + ctrl.stop(true) + }) + + // Update existing controllers. + each(ctrls, (ctrl, i) => { + const values = springs[i] + setSprings(ctrl, values) + + // Attach the controller to the local ref. + ref?.add(ctrl) + + // Update the default props. + if (hasContext) { + ctrl.start({ default: context }) + } + + // Apply updates created during render. + const update = updates[i] + if (update) { + // Update the injected ref if needed. + replaceRef(ctrl, update.ref) + + // When an injected ref exists, the update is postponed + // until the ref has its `start` method called. + if (ctrl.ref) { + ctrl.queue.push(update) + } else { + ctrl.start(update) + } + } + }) + }) + + // Cancel the animations of all controllers on unmount. + useOnce(() => () => { + each(state.ctrls, ctrl => ctrl.stop(true)) + }) + + // Return a deep copy of the `springs` array so the caller can + // safely mutate it during render. + const values = springs.map(x => ({ ...x })) + + return ref ? [values, ref] : values +} diff --git a/packages/core/src/hooks/useTrail.test.tsx b/packages/core/src/hooks/useTrail.test.tsx new file mode 100644 index 0000000000..674191ee02 --- /dev/null +++ b/packages/core/src/hooks/useTrail.test.tsx @@ -0,0 +1,73 @@ +import * as React from 'react' +import { render, RenderResult } from '@testing-library/react' +import { is } from '@react-spring/shared' +import { Lookup } from '@react-spring/types' +import { SpringValue } from '../SpringValue' +import { useTrail, UseTrailProps } from './useTrail' + +describe('useTrail', () => { + let springs: Lookup[] + + // Call the "useSprings" hook and update local variables. + const update = createUpdater(({ args }) => { + const result = useTrail(...args) + springs = is.arr(result[0]) ? result[0] : result + return null + }) + + it('has each spring follow the spring before it', () => { + update(2, { x: 100, from: { x: 0 } }) + expect(springs.length).toBe(2) + expect(springs[1].x.animation.to).toBe(springs[0].x) + + mockRaf.step() + expect(springs[0].x.get()).not.toBe(springs[1].x.get()) + }) + + describe('when a props object is passed', () => { + it('updates every spring on rerender', () => { + const props = { opacity: 1, config: { tension: 100 } } + update(2, props) + + const configs = springs.map(s => s.opacity.animation.config) + expect(configs.every(config => config.tension == 100)).toBeTruthy() + + props.config.tension = 50 + update(2, props) + + expect(configs.every(config => config.tension == 50)).toBeTruthy() + }) + }) + + describe('when a props function is passed', () => { + it.todo('does nothing on rerender') + }) + + describe('with the "reverse" prop', () => { + describe('when "reverse" becomes true', () => { + it.todo('swaps the "to" and "from" props') + it.todo('has each spring follow the spring after it') + }) + describe('when "reverse" becomes false', () => { + it.todo('uses the "to" and "from" props as-is') + it.todo('has each spring follow the spring before it') + }) + }) +}) + +function createUpdater( + Component: React.ComponentType<{ args: [any, any, any?] }> +) { + let result: RenderResult | undefined + afterEach(() => { + result = undefined + }) + + type Args = [number, UseTrailProps, any[]?] + return (...args: Args) => { + const elem = + if (result) result.rerender(elem) + else result = render(elem) + return result + } +} diff --git a/packages/core/src/hooks/useTrail.ts b/packages/core/src/hooks/useTrail.ts new file mode 100644 index 0000000000..cc6b3f3e3e --- /dev/null +++ b/packages/core/src/hooks/useTrail.ts @@ -0,0 +1,81 @@ +import { useLayoutEffect } from 'react-layout-effect' +import { each, is } from '@react-spring/shared' + +import { Valid } from '../types/common' +import { PickAnimated, SpringValues } from '../types' +import { UseSpringProps } from './useSpring' +import { SpringRef } from '../SpringRef' +import { Controller } from '../Controller' +import { useSprings } from './useSprings' + +export type UseTrailProps = UseSpringProps + +export function useTrail( + length: number, + props: ( + i: number, + ctrl: Controller + ) => UseTrailProps | (Props & Valid>), + deps?: readonly any[] +): PickAnimated extends infer State + ? [SpringValues[], SpringRef] + : never + +export function useTrail( + length: number, + props: UseTrailProps | (Props & Valid>) +): SpringValues>[] + +export function useTrail( + length: number, + props: UseTrailProps | (Props & Valid>), + deps: readonly any[] +): PickAnimated extends infer State + ? [SpringValues[], SpringRef] + : never + +export function useTrail( + length: number, + propsArg: unknown, + deps?: readonly any[] +) { + const propsFn = is.fun(propsArg) && propsArg + if (propsFn && !deps) deps = [] + + // The trail is reversed when every render-based update is reversed. + let reverse = true + + const result = useSprings( + length, + (i, ctrl) => { + const props = propsFn ? propsFn(i, ctrl) : propsArg + reverse = reverse && props.reverse + return props + }, + // Ensure the props function is called when no deps exist. + // This works around the 3 argument rule. + deps || [{}] + ) + + const ref = result[1] + + useLayoutEffect(() => { + each(ref.current, (ctrl, i) => { + const parent = ref.current[i + (reverse ? 1 : -1)] + if (parent) ctrl.start({ to: parent.springs }) + }) + }, deps) + + if (propsFn || arguments.length == 3) { + ref['_getProps'] = (propsArg, ctrl, i) => { + const props = is.fun(propsArg) ? propsArg(i, ctrl) : propsArg + if (props) { + const parent = ref.current[i + (props.reverse ? 1 : -1)] + if (parent) props.to = parent.springs + return props + } + } + return result + } + return result[0] +} diff --git a/packages/core/src/hooks/useTransition.test.tsx b/packages/core/src/hooks/useTransition.test.tsx new file mode 100644 index 0000000000..b0d9a32fa7 --- /dev/null +++ b/packages/core/src/hooks/useTransition.test.tsx @@ -0,0 +1,133 @@ +import * as React from 'react' +import { RenderResult, render } from '@testing-library/react' +import { toArray } from '@react-spring/shared' +import { TransitionFn, UseTransitionProps } from '../types' +import { useTransition } from './useTransition' + +describe('useTransition', () => { + let transition: TransitionFn + let rendered: any[] + + // Call the "useTransition" hook and update local variables. + const update = createUpdater(({ args }) => { + transition = toArray(useTransition(...args))[0] + rendered = transition((_, item) => item).props.children + return null + }) + + it('unmounts after leave', async () => { + const props = { + from: { n: 0 }, + enter: { n: 1 }, + leave: { n: 0 }, + } + + update(true, props) + expect(rendered).toEqual([true]) + + mockRaf.step() + + update(false, props) + expect(rendered).toEqual([true, false]) + + await advanceUntilIdle() + expect(rendered).toEqual([false]) + }) + + describe('when "leave" is an array', () => { + it('unmounts after leave', async () => { + const props = { + from: { n: 0 }, + enter: { n: 1 }, + leave: [{ n: 0 }], + } + + update(true, props) + expect(rendered).toEqual([true]) + + mockRaf.step() + + update(false, props) + expect(rendered).toEqual([true, false]) + + await advanceUntilIdle() + expect(rendered).toEqual([false]) + }) + }) + + describe('when "leave" is a function', () => { + it('unmounts after leave', async () => { + const props: UseTransitionProps = { + from: { n: 0 }, + enter: { n: 1 }, + leave: () => async next => { + await next({ n: 0 }) + }, + } + + update(true, props) + expect(rendered).toEqual([true]) + + mockRaf.step() + + update(false, props) + expect(rendered).toEqual([true, false]) + + await advanceUntilIdle() + expect(rendered).toEqual([false]) + }) + }) + + describe('when "enter" is a function', () => { + it('still has its "onRest" prop called', async () => { + const onRest = jest.fn() + update(true, { + from: { x: 0 }, + enter: () => ({ + x: 1, + onRest, + }), + }) + + await advanceUntilIdle() + expect(onRest).toBeCalledTimes(1) + }) + }) + + describe('when "leave" is a no-op update', () => { + it('still unmounts the transition', async () => { + const props = { + from: { t: 0 }, + enter: { t: 1 }, + leave: { t: 1 }, + } + + update(true, props) + expect(rendered).toEqual([true]) + await advanceUntilIdle() + + update(false, props) + expect(rendered).toEqual([true, false]) + + await advanceUntilIdle() + expect(rendered).toEqual([false]) + }) + }) +}) + +function createUpdater( + Component: React.ComponentType<{ args: [any, any, any?] }> +) { + let result: RenderResult | undefined + afterEach(() => { + result = undefined + }) + + type Args = [any, UseTransitionProps, any[]?] + return (...args: Args) => { + const elem = + if (result) result.rerender(elem) + else result = render(elem) + return result + } +} diff --git a/packages/core/src/hooks/useTransition.tsx b/packages/core/src/hooks/useTransition.tsx new file mode 100644 index 0000000000..dc68b8b249 --- /dev/null +++ b/packages/core/src/hooks/useTransition.tsx @@ -0,0 +1,351 @@ +import * as React from 'react' +import { useContext, useRef, useMemo } from 'react' +import { useLayoutEffect } from 'react-layout-effect' +import { OneOrMore, UnknownProps } from '@react-spring/types' +import { + is, + toArray, + useForceUpdate, + useOnce, + usePrev, + each, +} from '@react-spring/shared' + +import { + Change, + ControllerUpdate, + ItemKeys, + PickAnimated, + TransitionFn, + TransitionState, + TransitionTo, + UseTransitionProps, +} from '../types' +import { Valid } from '../types/common' +import { + callProp, + detachRefs, + getDefaultProps, + hasProps, + inferTo, + replaceRef, +} from '../helpers' +import { Controller, getSprings, setSprings } from '../Controller' +import { SpringContext } from '../SpringContext' +import { SpringRef } from '../SpringRef' +import { + ENTER, + MOUNT, + LEAVE, + UPDATE, + TransitionPhase, +} from '../TransitionPhase' + +declare function setTimeout(handler: Function, timeout?: number): number +declare function clearTimeout(timeoutId: number): void + +export function useTransition( + data: OneOrMore, + props: + | UseTransitionProps + | (Props & Valid>) +): TransitionFn> + +export function useTransition( + data: OneOrMore, + props: + | UseTransitionProps + | (Props & Valid>), + deps: any[] | undefined +): PickAnimated extends infer State + ? [TransitionFn, SpringRef] + : never + +export function useTransition( + data: unknown, + props: UseTransitionProps, + deps?: any[] +): any { + const { reset, sort, trail = 0, expires = true, onDestroyed } = props + + // Return a `SpringRef` if a deps array was passed. + const ref = useMemo( + () => (arguments.length == 3 ? new SpringRef() : void 0), + [] + ) + + // Every item has its own transition. + const items = toArray(data) + const transitions: TransitionState[] = [] + + // The "onRest" callbacks need a ref to the latest transitions. + const usedTransitions = useRef(null) + const prevTransitions = reset ? null : usedTransitions.current + useLayoutEffect(() => { + usedTransitions.current = transitions + }) + + // Destroy all transitions on dismount. + useOnce(() => () => + each(usedTransitions.current!, t => { + if (t.expired) { + clearTimeout(t.expirationId!) + } + detachRefs(t.ctrl, ref) + t.ctrl.stop(true) + }) + ) + + // Keys help with reusing transitions between renders. + // The `key` prop can be undefined (which means the items themselves are used + // as keys), or a function (which maps each item to its key), or an array of + // keys (which are assigned to each item by index). + const keys = getKeys(items, props, prevTransitions) + + // Expired transitions that need clean up. + const expired = (reset && usedTransitions.current) || [] + useLayoutEffect(() => + each(expired, ({ ctrl, item, key }) => { + detachRefs(ctrl, ref) + callProp(onDestroyed, item, key) + }) + ) + + // Map old indices to new indices. + const reused: number[] = [] + if (prevTransitions) + each(prevTransitions, (t, i) => { + // Expired transitions are not rendered. + if (t.expired) { + clearTimeout(t.expirationId!) + expired.push(t) + } else { + i = reused[i] = keys.indexOf(t.key) + if (~i) transitions[i] = t + } + }) + + // Mount new items with fresh transitions. + each(items, (item, i) => { + transitions[i] || + (transitions[i] = { + key: keys[i], + item, + phase: MOUNT, + ctrl: new Controller(), + }) + }) + + // Update the item of any transition whose key still exists, + // and ensure leaving transitions are rendered until they finish. + if (reused.length) { + let i = -1 + each(reused, (keyIndex, prevIndex) => { + const t = prevTransitions![prevIndex] + if (~keyIndex) { + i = transitions.indexOf(t) + transitions[i] = { ...t, item: items[keyIndex] } + } else if (props.leave) { + transitions.splice(++i, 0, t) + } + }) + } + + if (is.fun(sort)) { + transitions.sort((a, b) => sort(a.item, b.item)) + } + + // Track cumulative delay for the "trail" prop. + let delay = -trail + + // Expired transitions use this to dismount. + const forceUpdate = useForceUpdate() + + // These props are inherited by every phase change. + const defaultProps = getDefaultProps(props) + + // Generate changes to apply in useEffect. + const changes = new Map() + each(transitions, (t, i) => { + const key = t.key + const prevPhase = t.phase + + let to: TransitionTo + let phase: TransitionPhase + if (prevPhase == MOUNT) { + to = props.enter + phase = ENTER + } else { + const isLeave = keys.indexOf(key) < 0 + if (prevPhase != LEAVE) { + if (isLeave) { + to = props.leave + phase = LEAVE + } else if ((to = props.update)) { + phase = UPDATE + } else return + } else if (!isLeave) { + to = props.enter + phase = ENTER + } else return + } + + // When "to" is a function, it can return (1) an array of "useSpring" props, + // (2) an async function, or (3) an object with any "useSpring" props. + to = callProp(to, t.item, i) + to = is.obj(to) ? inferTo(to) : { to } + + if (!to.config) { + const config = props.config || defaultProps.config + to.config = callProp(config, t.item, i) + } + + // The payload is used to update the spring props once the current render is committed. + const payload: ControllerUpdate = { + ...defaultProps, + delay: delay += trail, + // This prevents implied resets. + reset: false, + // Merge any phase-specific props. + ...(to as any), + } + + if (phase == ENTER && is.und(payload.from)) { + // The `initial` prop is used on the first render of our parent component, + // as well as when `reset: true` is passed. It overrides the `from` prop + // when defined, and it makes `enter` instant when null. + const from = + is.und(props.initial) || prevTransitions ? props.from : props.initial + + payload.from = callProp(from, t.item, i) + } + + const { onResolve } = payload + payload.onResolve = result => { + callProp(onResolve, result) + + const transitions = usedTransitions.current! + const t = transitions.find(t => t.key === key) + if (!t) return + + // Reset the phase of a cancelled enter/leave transition, so it can + // retry the animation on the next render. + if (result.cancelled && t.phase != UPDATE) { + t.phase = prevPhase + return + } + + if (t.ctrl.idle) { + const idle = transitions.every(t => t.ctrl.idle) + if (t.phase == LEAVE) { + const expiry = callProp(expires, t.item) + if (expiry !== false) { + const expiryMs = expiry === true ? 0 : expiry + t.expired = true + + // Force update once the expiration delay ends. + if (!idle && expiryMs > 0) { + // The maximum timeout is 2^31-1 + if (expiryMs <= 0x7fffffff) + t.expirationId = setTimeout(forceUpdate, expiryMs) + return + } + } + } + // Force update once idle and expired items exist. + if (idle && transitions.some(t => t.expired)) { + forceUpdate() + } + } + } + + const springs = getSprings(t.ctrl, payload) + changes.set(t, { phase, springs, payload }) + }) + + // The prop overrides from an ancestor. + const context = useContext(SpringContext) + const prevContext = usePrev(context) + const hasContext = context !== prevContext && hasProps(context) + + // Merge the context into each transition. + useLayoutEffect(() => { + if (hasContext) + each(transitions, t => { + t.ctrl.start({ default: context }) + }) + }, [context]) + + useLayoutEffect( + () => { + each(changes, ({ phase, springs, payload }, t) => { + const { ctrl } = t + t.phase = phase + + // Attach the controller to our local ref. + ref?.add(ctrl) + + // Update the injected ref if needed. + replaceRef(ctrl, payload.ref) + + // Save any springs created this render. + setSprings(ctrl, springs) + + // Merge the context into new items. + if (hasContext && phase == ENTER) { + ctrl.start({ default: context }) + } + + // Postpone the update if an injected ref exists. + ctrl[ctrl.ref ? 'update' : 'start'](payload) + }) + }, + reset ? void 0 : deps + ) + + const renderTransitions: TransitionFn = render => ( + <> + {transitions.map((t, i) => { + const { springs } = changes.get(t) || t.ctrl + const elem: any = render({ ...springs }, t.item, t, i) + return elem && elem.type ? ( + + ) : ( + elem + ) + })} + + ) + + return ref ? [renderTransitions, ref] : renderTransitions +} + +/** Local state for auto-generated item keys */ +let nextKey = 1 + +function getKeys( + items: readonly any[], + { key, keys = key }: { key?: ItemKeys; keys?: ItemKeys }, + prevTransitions: TransitionState[] | null +): readonly any[] { + if (keys === null) { + const reused = new Set() + return items.map(item => { + const t = + prevTransitions && + prevTransitions.find( + t => t.item === item && t.phase !== LEAVE && !reused.has(t) + ) + if (t) { + reused.add(t) + return t.key + } + return nextKey++ + }) + } + return is.und(keys) ? items : is.fun(keys) ? items.map(keys) : toArray(keys) +} diff --git a/packages/core/src/index.ts b/packages/core/src/index.ts new file mode 100644 index 0000000000..0301ff1d03 --- /dev/null +++ b/packages/core/src/index.ts @@ -0,0 +1,21 @@ +export * from './hooks' +export * from './components' +export * from './interpolate' +export * from './constants' +export * from './globals' + +export { Controller } from './Controller' +export { SpringValue } from './SpringValue' +export { SpringContext } from './SpringContext' +export { SpringRef } from './SpringRef' + +export { FrameValue } from './FrameValue' +export { Interpolation } from './Interpolation' +export { BailSignal } from './runAsync' +export { createInterpolator } from '@react-spring/shared' +export { inferTo } from './helpers' + +export * from './types' +export type { UnknownProps } from '@react-spring/types' +export * from '@react-spring/types/animated' +export * from '@react-spring/types/interpolation' diff --git a/packages/core/src/interpolate.test.ts b/packages/core/src/interpolate.test.ts new file mode 100644 index 0000000000..ce7ca36627 --- /dev/null +++ b/packages/core/src/interpolate.test.ts @@ -0,0 +1,85 @@ +import { Interpolation } from './Interpolation' +import { Globals } from '@react-spring/shared' + +Globals.assign({ + to: (...args) => new Interpolation(...args), +}) + +import { assert, _ } from 'spec.ts' +import { SpringValue } from './SpringValue' +import { to } from './interpolate' + +function spring(value: T): SpringValue { + return new SpringValue(value) +} + +describe('AnimatedValue interpolation options', () => { + it('accepts an AnimatedValue and a range shortcut config', () => { + const value = to(spring(1), [0, 1, 2], [4, 5, 6]) + expect(value.get()).toBe(5) + }) + + it('accepts a config object with extrapolate extend', () => { + const value = to(spring(2), { + range: [0, 1], + output: [10, 20], + extrapolate: 'extend', + }) + expect(value.get()).toBe(30) + }) + + it('accepts a config object with extrapolate clamp', () => { + const value = to(spring(100), { + range: [0, 1], + output: [10, 20], + extrapolate: 'clamp', + }) + expect(value.get()).toBe(20) + }) + + it('accepts a config object with extrapolate identity', () => { + const value = to(spring(100), { + output: [10, 20], + extrapolate: 'identity', + }) + expect(value.get()).toBe(100) + }) + + it('accepts an AnimatedValueArray and a range shortcut config', () => { + const value = to(spring([1, 2]), [1, 2], [4, 5]) + expect(value.get()).toBe(4) + }) + + it('accepts multiple AnimatedValues and a range shortcut config', () => { + const value = to( + [spring(2), spring(4)], + [0, 2, 4, 6, 8], + [10, 20, 30, 40, 50] + ) + assert(value, _ as Interpolation) + expect(value.get()).toBe(20) + }) + + it('accepts multiple AnimatedValues and an interpolation function', () => { + const value = to([spring(5), spring('text')] as const, (a, b) => { + assert(a, _ as number) + assert(b, _ as string) + return `t(${a}, ${b})` + }) + assert(value, _ as Interpolation) + expect(value.get()).toBe('t(5, text)') + }) + + it('accepts an AnimatedValueArray and an interpolation function', () => { + const value = to(spring([1, 2, 3]), (r, g, b) => `rgb(${r}, ${g}, ${b})`) + expect(value.get()).toBe('rgb(1, 2, 3)') + }) + + it('chains interpolations', () => { + const value = to(spring(1), [0, 1], [1, 2]) + .to(x => x * 2) + .to([3, 4], [30, 40]) + .to(x => x / 2) + expect(value.get()).toBe(20) + }) +}) diff --git a/packages/core/src/interpolate.ts b/packages/core/src/interpolate.ts new file mode 100644 index 0000000000..ad9e9d35ad --- /dev/null +++ b/packages/core/src/interpolate.ts @@ -0,0 +1,60 @@ +import { FluidValue, deprecateInterpolate } from '@react-spring/shared' +import { + Constrain, + OneOrMore, + Animatable, + ExtrapolateType, + InterpolatorConfig, + InterpolatorFn, +} from '@react-spring/types' +import { Interpolation } from './Interpolation' + +/** Map the value of one or more dependencies */ +export const to: Interpolator = (source: any, ...args: [any]) => + new Interpolation(source, args) + +/** @deprecated Use the `to` export instead */ +export const interpolate: Interpolator = (source: any, ...args: [any]) => ( + deprecateInterpolate(), new Interpolation(source, args) +) + +/** Extract the raw value types that are being interpolated */ +export type Interpolated> = { + [P in keyof T]: T[P] extends infer Element + ? Element extends FluidValue + ? U + : Element + : never +} + +/** + * This interpolates one or more `FluidValue` objects. + * The exported `interpolate` function uses this type. + */ +export interface Interpolator { + // Tuple of parent values + , Out>( + parents: In, + interpolator: (...args: Interpolated) => Out + ): Interpolation + + // Single parent value + ( + parent: FluidValue | In, + interpolator: InterpolatorFn + ): Interpolation + + // Interpolation config + ( + parents: OneOrMore, + config: InterpolatorConfig + ): Interpolation> + + // Range shortcuts + ( + parents: OneOrMore> | FluidValue, + range: readonly number[], + output: readonly Constrain[], + extrapolate?: ExtrapolateType + ): Interpolation> +} diff --git a/packages/core/src/runAsync.ts b/packages/core/src/runAsync.ts new file mode 100644 index 0000000000..e7a95ff2e2 --- /dev/null +++ b/packages/core/src/runAsync.ts @@ -0,0 +1,183 @@ +import { is, raf, flush, eachProp, Timeout } from '@react-spring/shared' +import { Falsy } from '@react-spring/types' + +import { getDefaultProps } from './helpers' +import { AnimationTarget, InferState, InferProps } from './types/internal' +import { AnimationResult, AsyncResult, SpringChain, SpringToFn } from './types' +import { getCancelledResult, getFinishedResult } from './AnimationResult' + +type AsyncTo = SpringChain | SpringToFn + +/** @internal */ +export type RunAsyncProps = InferProps & { + callId: number + parentId?: number + cancel: boolean + to?: any +} + +/** @internal */ +export interface RunAsyncState { + paused: boolean + pauseQueue: Set<() => void> + resumeQueue: Set<() => void> + timeouts: Set + asyncId?: number + asyncTo?: AsyncTo> + promise?: AsyncResult + cancelId?: number +} + +/** + * Start an async chain or an async script. + * + * Always call `runAsync` in the action callback of a `scheduleProps` call. + * + * The `T` parameter can be a set of animated values (as an object type) + * or a primitive type for a single animated value. + */ +export function runAsync( + to: AsyncTo>, + props: RunAsyncProps, + state: RunAsyncState, + target: T +): AsyncResult { + const { callId, parentId, onRest } = props + const { asyncTo: prevTo, promise: prevPromise } = state + + if (!parentId && to === prevTo && !props.reset) { + return prevPromise! + } + + return (state.promise = (async () => { + state.asyncId = callId + state.asyncTo = to + + // The default props of any `animate` calls. + const defaultProps = getDefaultProps>(props, (value, key) => + // The `onRest` prop is only called when the `runAsync` promise is resolved. + key === 'onRest' ? undefined : value + ) + + let preventBail!: () => void + let bail: (error: any) => void + + // This promise is rejected when the animation is interrupted. + const bailPromise = new Promise( + (resolve, reject) => ((preventBail = resolve), (bail = reject)) + ) + + const bailIfEnded = (bailSignal: BailSignal) => { + const bailResult = + // The `cancel` prop or `stop` method was used. + (callId <= (state.cancelId || 0) && getCancelledResult(target)) || + // The async `to` prop was replaced. + (callId !== state.asyncId && getFinishedResult(target, false)) + + if (bailResult) { + bailSignal.result = bailResult + + // Reject the `bailPromise` to ensure the `runAsync` promise + // is not relying on the caller to rethrow the error for us. + bail(bailSignal) + throw bailSignal + } + } + + const animate: any = (arg1: any, arg2?: any) => { + // Create the bail signal outside the returned promise, + // so the generated stack trace is relevant. + const bailSignal = new BailSignal() + + return (async () => { + bailIfEnded(bailSignal) + + const props: any = is.obj(arg1) ? { ...arg1 } : { ...arg2, to: arg1 } + props.parentId = callId + + eachProp(defaultProps, (value, key) => { + if (is.und(props[key])) { + props[key] = value + } + }) + + const result = await target.start(props) + bailIfEnded(bailSignal) + + if (state.paused) { + await new Promise(resume => { + state.resumeQueue.add(resume) + }) + } + + return result + })() + } + + let result!: AnimationResult + try { + let animating!: Promise + + // Async sequence + if (is.arr(to)) { + animating = (async (queue: any[]) => { + for (const props of queue) { + await animate(props) + } + })(to) + } + + // Async script + else { + animating = Promise.resolve(to(animate, target.stop.bind(target))) + } + + await Promise.all([animating.then(preventBail), bailPromise]) + result = getFinishedResult(target, true) + + // Bail handling + } catch (err) { + if (err instanceof BailSignal) { + result = err.result + } else { + throw err + } + + // Reset the async state. + } finally { + if (callId == state.asyncId) { + state.asyncId = parentId + state.asyncTo = parentId ? prevTo : undefined + state.promise = parentId ? prevPromise : undefined + } + } + + if (is.fun(onRest)) { + raf.batchedUpdates(() => { + onRest(result) + }) + } + + return result + })()) +} + +/** Stop the current `runAsync` call with `finished: false` (or with `cancelled: true` when `cancelId` is defined) */ +export function stopAsync(state: RunAsyncState, cancelId?: number | Falsy) { + flush(state.timeouts, t => t.cancel()) + state.pauseQueue.clear() + state.resumeQueue.clear() + state.asyncId = state.asyncTo = state.promise = undefined + if (cancelId) state.cancelId = cancelId +} + +/** This error is thrown to signal an interrupted async animation. */ +export class BailSignal extends Error { + result!: AnimationResult + constructor() { + super( + 'An async animation has been interrupted. You see this error because you ' + + 'forgot to use `await` or `.catch(...)` on its returned promise.' + ) + } +} diff --git a/packages/core/src/scheduleProps.ts b/packages/core/src/scheduleProps.ts new file mode 100644 index 0000000000..7456b74ac6 --- /dev/null +++ b/packages/core/src/scheduleProps.ts @@ -0,0 +1,101 @@ +import { Timeout, is, raf } from '@react-spring/shared' +import { matchProp, callProp } from './helpers' +import { AsyncResult, MatchProp } from './types' +import { RunAsyncState, RunAsyncProps } from './runAsync' +import { + AnimationResolver, + AnimationTarget, + InferProps, + InferState, +} from './types/internal' + +// The `scheduleProps` function only handles these defaults. +type DefaultProps = { cancel?: MatchProp; pause?: MatchProp } + +interface ScheduledProps { + key?: string + props: InferProps + defaultProps?: DefaultProps> + state: RunAsyncState + actions: { + pause: () => void + resume: () => void + start: (props: RunAsyncProps, resolve: AnimationResolver) => void + } +} + +/** + * This function sets a timeout if both the `delay` prop exists and + * the `cancel` prop is not `true`. + * + * The `actions.start` function must handle the `cancel` prop itself, + * but the `pause` prop is taken care of. + */ +export function scheduleProps( + callId: number, + { key, props, defaultProps, state, actions }: ScheduledProps +): AsyncResult { + return new Promise((resolve, reject) => { + let delay: number + let timeout: Timeout + + let cancel = matchProp(props.cancel ?? defaultProps?.cancel, key) + if (cancel) { + onStart() + } else { + // The `pause` prop updates the paused flag. + if (!is.und(props.pause)) { + state.paused = matchProp(props.pause, key) + } + // The default `pause` takes precedence when true, + // which allows `SpringContext` to work as expected. + let pause = defaultProps?.pause + if (pause !== true) { + pause = state.paused || matchProp(pause, key) + } + + delay = callProp(props.delay || 0, key) + if (pause) { + state.resumeQueue.add(onResume) + actions.pause() + } else { + actions.resume() + onResume() + } + } + + function onPause() { + state.resumeQueue.add(onResume) + state.timeouts.delete(timeout) + timeout.cancel() + // Cache the remaining delay. + delay = timeout.time - raf.now() + } + + function onResume() { + if (delay > 0) { + timeout = raf.setTimeout(onStart, delay) + state.pauseQueue.add(onPause) + state.timeouts.add(timeout) + } else { + onStart() + } + } + + function onStart() { + state.pauseQueue.delete(onPause) + state.timeouts.delete(timeout) + + // Maybe cancelled during its delay. + if (callId <= (state.cancelId || 0)) { + cancel = true + } + + try { + actions.start({ ...props, callId, cancel }, resolve) + } catch (err) { + reject(err) + } + } + }) +} diff --git a/packages/core/src/types/__tests__/.prettierrc b/packages/core/src/types/__tests__/.prettierrc new file mode 100644 index 0000000000..f2a7d6c730 --- /dev/null +++ b/packages/core/src/types/__tests__/.prettierrc @@ -0,0 +1,8 @@ +{ + "semi": true, + "trailingComma": "es5", + "singleQuote": true, + "jsxBracketSameLine": true, + "tabWidth": 2, + "printWidth": 80 +} diff --git a/packages/core/src/types/__tests__/common.ts b/packages/core/src/types/__tests__/common.ts new file mode 100644 index 0000000000..6d8863ff37 --- /dev/null +++ b/packages/core/src/types/__tests__/common.ts @@ -0,0 +1,114 @@ +import { assert, _, test } from 'spec.ts'; +import { Remap } from '@react-spring/types'; +import { SpringUpdateFn } from '../functions'; +import { PickAnimated, ForwardProps, ReservedProps } from '../props'; + +type SystemProps = { + [P in keyof ReservedProps]-?: P extends 'from' | 'to' ? {} : 1; +}; + +type UserProps = { + foo: 1; + bar: 1; +}; + +test('ForwardProps', () => { + // With reserved props, no forward props + type P1 = ForwardProps; + assert(_ as P1, _ as {}); + + // With reserved and forward props + type P2 = ForwardProps; + assert(_ as P2, _ as UserProps); + + // With forward props, no reserved props + type P3 = ForwardProps; + assert(_ as P3, _ as UserProps); + + // No reserved or forward props + type P4 = ForwardProps<{}>; + assert(_ as P4, _ as {}); +}); + +test('PickAnimated', () => { + // No props + type A1 = PickAnimated<{}>; + assert(_ as A1, _ as {}); + + // Forward props only + type A3 = PickAnimated; + assert(_ as A3, _ as UserProps); + + // Forward props and "from" prop + type A4 = PickAnimated<{ + foo: 1; + width: 1; + from: { bar: 1; width: 2 }; + }>; + assert(_ as A4, _ as Remap); + + // "to" and "from" props + type A5 = PickAnimated<{ + to: { foo: 1; width: 1 }; + from: { bar: 1; width: 2 }; + }>; + assert(_ as A5, _ as Remap); + + // "useTransition" props + type A6 = PickAnimated<{ + from: { a: 1 }; + initial: { b: 1 }; + enter: { c: 1 }; + update: { d: 1 }; + leave: { e: 1 }; + }>; + assert( + _ as A6, + _ as { + a: 1; + b: 1; + c: 1; + d: 1; + e: 1; + } + ); + + // Same keys in each phase + type A7 = PickAnimated<{ + from: { a: 1 }; + enter: { a: 2 }; + leave: { a: 3 }; + update: { a: 4 }; + initial: { a: 5 }; + }>; + assert( + _ as A7, + _ as { + a: 1 | 2 | 3 | 4 | 5; + } + ); + + // Async "to" chain + type A8 = PickAnimated<{ + from: { a: 1 }; + to: [{ a: 2 }, { a: 3 }]; + }>; + assert( + _ as A8, + _ as { + a: 1; + } + ); + + // Async "to" script + type A9 = PickAnimated<{ + from: { a: 1 }; + to: (next: SpringUpdateFn) => void; + }>; + assert( + _ as A9, + _ as { + a: 1; + } + ); +}); diff --git a/packages/core/src/types/__tests__/interpolate.ts b/packages/core/src/types/__tests__/interpolate.ts new file mode 100644 index 0000000000..8ee735a678 --- /dev/null +++ b/packages/core/src/types/__tests__/interpolate.ts @@ -0,0 +1,32 @@ +import { test, assert, _ } from 'spec.ts'; +import { interpolate, SpringValue } from '../..'; + +/** Return the arguments as-is */ +const args = >(...args: T) => args; + +test('with one SpringValue', () => { + // Basic value + const out1 = interpolate(_ as SpringValue, args); + assert(out1, _ as SpringValue<[number]>); + + // Array value + const out2 = interpolate(_ as SpringValue<[number, number]>, args); + assert(out2, _ as SpringValue<[number, number]>); +}); + +test('with an array of SpringValues', () => { + // 1 value + const out1 = interpolate(_ as [SpringValue], args); + assert(out1, _ as SpringValue<[number]>); + + // 2 values + const out2 = interpolate( + _ as [SpringValue, SpringValue], + args + ); + assert(out2, _ as SpringValue<[number, string]>); + + // Infinite values + const out3 = interpolate(_ as SpringValue[], args); + assert(out3, _ as SpringValue); +}); diff --git a/packages/core/src/types/common.ts b/packages/core/src/types/common.ts new file mode 100644 index 0000000000..b6fd8aa22d --- /dev/null +++ b/packages/core/src/types/common.ts @@ -0,0 +1,37 @@ +import { Remap, Any } from '@react-spring/types' +import { FluidValue } from '@react-spring/shared' + +/** Replace the type of each `T` property with `never` (unless compatible with `U`) */ +export type Valid = NeverProps> + +/** Replace the type of each `P` property with `never` */ +type NeverProps = Remap< + Pick> & { [K in P]: never } +> + +/** Return a union type of every key whose `T` value is incompatible with its `U` value */ +type InvalidKeys = { + [P in keyof T & keyof U]: T[P] extends U[P] ? never : P +}[keyof T & keyof U] + +/** Unwrap any `FluidValue` object types */ +export type RawValues = { + [P in keyof T]: T[P] extends FluidValue ? U : T[P] +} + +/** + * For testing whether a type is an object but not an array. + * + * T extends IsPlainObject ? true : false + * + * When `any` is passed, the resolved type is `true | false`. + */ +export type IsPlainObject = T extends ReadonlyArray + ? Any + : T extends object + ? object + : Any + +export type StringKeys = T extends IsPlainObject + ? string & keyof T + : string diff --git a/packages/core/src/types/functions.ts b/packages/core/src/types/functions.ts new file mode 100644 index 0000000000..2160bd9fe0 --- /dev/null +++ b/packages/core/src/types/functions.ts @@ -0,0 +1,110 @@ +import { Lookup, Falsy } from '@react-spring/types' + +import { Controller, ControllerQueue } from '../Controller' +import { SpringValue } from '../SpringValue' +import { + SpringTo, + InlineToProps, + SpringChain, + SpringProps, + ControllerProps, + GoalValue, + GoalValues, +} from './props' +import { AsyncResult, AnimationResult } from './objects' +import { IsPlainObject } from './common' +import { Readable, InferProps, InferState, InferTarget } from './internal' + +/** The flush function that handles `start` calls */ +export type ControllerFlushFn = Controller> = ( + ctrl: T, + queue: ControllerQueue> +) => AsyncResult + +/** + * An async function that can update or stop the animations of a spring. + * Typically defined as the `to` prop. + * + * The `T` parameter can be a set of animated values (as an object type) + * or a primitive type for a single animated value. + */ +export interface SpringToFn { + (start: StartFn, stop: StopFn): Promise | void +} + +type StartFn = InferTarget extends { start: infer T } ? T : never +type StopFn = InferTarget extends { stop: infer T } ? T : never + +/** + * Update the props of an animation. + * + * The `T` parameter can be a set of animated values (as an object type) + * or a primitive type for a single animated value. + */ +export type SpringUpdateFn = T extends IsPlainObject + ? UpdateValuesFn + : UpdateValueFn + +interface AnyUpdateFn< + T extends SpringValue | Controller, + Props extends object = InferProps, + State = InferState +> { + (to: SpringTo, props?: Props): AsyncResult + (props: { to?: SpringToFn | Falsy } & Props): AsyncResult + (props: { to?: SpringChain | Falsy } & Props): AsyncResult +} + +/** + * Update the props of a `Controller` object or `useSpring` call. + * + * The `T` parameter must be a set of animated values (as an object type). + */ +interface UpdateValuesFn + extends AnyUpdateFn> { + (props: InlineToProps & ControllerProps): AsyncResult> // prettier-ignore + ( + props: { + to?: GoalValues | Falsy + } & ControllerProps + ): AsyncResult> +} + +/** + * Update the props of a spring. + * + * The `T` parameter must be a primitive type for a single animated value. + */ +interface UpdateValueFn extends AnyUpdateFn> { + (props: { to?: GoalValue } & SpringProps): AsyncResult> +} + +/** + * Called before the first frame of every animation. + * From inside the `requestAnimationFrame` callback. + */ +export type OnStart = (spring: SpringValue) => void + +/** Called when a `SpringValue` changes */ +export type OnChange = (value: T, source: SpringValue) => void + +export type OnPause = OnStart +export type OnResume = OnStart + +/** Called once the animation comes to a halt */ +export type OnRest = ( + result: AnimationResult +) => void + +export type OnResolve = ( + result: AnimationResult> +) => void + +/** + * Called after an animation is updated by new props, + * even if the animation remains idle. + */ +export type OnProps = ( + props: Readonly>, + spring: SpringValue +) => void diff --git a/packages/core/src/types/index.ts b/packages/core/src/types/index.ts new file mode 100644 index 0000000000..beefd9761e --- /dev/null +++ b/packages/core/src/types/index.ts @@ -0,0 +1,4 @@ +export * from './props' +export * from './objects' +export * from './functions' +export * from './transition' diff --git a/packages/core/src/types/internal.ts b/packages/core/src/types/internal.ts new file mode 100644 index 0000000000..074176aea2 --- /dev/null +++ b/packages/core/src/types/internal.ts @@ -0,0 +1,64 @@ +import type { Lookup } from '@react-spring/types' +import type { FluidValue } from '@react-spring/shared' +import type { Controller } from '../Controller' +import type { SpringValue } from '../SpringValue' +import type { AsyncResult, AnimationResult } from './objects' +import type { + ControllerUpdate, + ReservedEventProps, + SpringUpdate, +} from './props' + +/** @internal */ +export interface Readable { + get(): T +} + +/** @internal */ +export type InferState = T extends Controller + ? State + : T extends SpringValue + ? U + : unknown + +/** @internal */ +export type InferProps = T extends Controller + ? ControllerUpdate + : T extends SpringValue + ? SpringUpdate + : Lookup + +/** @internal */ +export type InferTarget = T extends object + ? T extends ReadonlyArray + ? SpringValue + : Controller + : SpringValue + +/** @internal */ +export interface AnimationTarget extends Readable { + start(props: any): AsyncResult + stop: Function +} + +/** @internal */ +export interface AnimationRange { + to: T | FluidValue | undefined + from: T | FluidValue | undefined +} + +/** @internal */ +export type AnimationResolver = ( + result: AnimationResult | AsyncResult +) => void + +/** @internal */ +export type EventKey = Exclude< + keyof ReservedEventProps, + 'onResolve' | 'onDestroyed' +> + +/** @internal */ +export type PickEventFns = { + [P in Extract]?: Extract +} diff --git a/packages/core/src/types/objects.ts b/packages/core/src/types/objects.ts new file mode 100644 index 0000000000..3ad9d4b85f --- /dev/null +++ b/packages/core/src/types/objects.ts @@ -0,0 +1,42 @@ +import type { FluidValue } from '@react-spring/shared' +import type { Lookup, Any } from '@react-spring/types' +import type { AnimationConfig } from '../AnimationConfig' +import type { SpringValue } from '../SpringValue' +import type { Readable } from './internal' + +/** The object type of the `config` prop. */ +export type SpringConfig = Partial + +/** The object given to the `onRest` prop and `start` promise. */ +export interface AnimationResult { + value: T extends Readable ? U : never + target: T + /** When true, no animation ever started. */ + noop?: boolean + /** When true, the animation was neither cancelled nor stopped prematurely. */ + finished?: boolean + /** When true, the animation was cancelled before it could finish. */ + cancelled?: boolean +} + +/** The promised result of an animation. */ +export type AsyncResult = Promise> + +/** Map an object type to allow `SpringValue` for any property */ +export type Springify = Lookup | undefined> & + { [P in keyof T]: T[P] | SpringValue } + +/** + * The set of `SpringValue` objects returned by a `useSpring` call (or similar). + */ +export type SpringValues = [T] extends [Any] + ? Lookup | undefined> // Special case: "any" + : { [P in keyof T]: SpringWrap } + +// Wrap a type with `SpringValue` +type SpringWrap = [ + Exclude, + Extract // Arrays are animated. +] extends [object | void, never] + ? never // Object literals cannot be animated. + : SpringValue> | Extract diff --git a/packages/core/src/types/props.ts b/packages/core/src/types/props.ts new file mode 100644 index 0000000000..02f69d9062 --- /dev/null +++ b/packages/core/src/types/props.ts @@ -0,0 +1,339 @@ +import { FluidProps, FluidValue } from '@react-spring/shared' +import { + Any, + Constrain, + Lookup, + Falsy, + Merge, + ObjectFromUnion, + ObjectType, + OneOrMore, + Remap, + UnknownProps, +} from '@react-spring/types' + +import { Controller } from '../Controller' +import { SpringRef } from '../SpringRef' +import { SpringValue } from '../SpringValue' +import { SpringConfig } from './objects' +import { StringKeys, RawValues, IsPlainObject } from './common' +import { TransitionKey, TransitionValues } from './transition' +import { + SpringToFn, + OnChange, + OnRest, + OnStart, + OnProps, + OnPause, + OnResume, + OnResolve, +} from './functions' + +/** + * Move all non-reserved props into the `to` prop. + */ +export type InferTo = Merge< + { to: ForwardProps }, + Pick +> + +/** + * The props of a `useSpring` call or its async `update` function. + * + * The `T` parameter can be a set of animated values (as an object type) + * or a primitive type for a single animated value. + */ +export type SpringUpdate = ToProps & SpringProps + +export type SpringsUpdate = + | OneOrMore> + | ((index: number, ctrl: Controller) => ControllerUpdate | null) + +/** + * Use the `SpringUpdate` type if you need the `to` prop to exist. + * For function types, prefer one overload per possible `to` prop + * type (for better type inference). + * + * The `T` parameter can be a set of animated values (as an object type) + * or a primitive type for a single animated value. + */ +export interface SpringProps extends AnimationProps { + from?: GoalValue + // FIXME: Use "SpringUpdate" once type recursion is good enough. + loop?: LoopProp + /** + * Called after an animation is updated by new props, + * even if the animation remains idle. + */ + onProps?: EventProp> + /** + * Called when an animation moves for the first time. + */ + onStart?: EventProp> + /** + * Called when a spring has its value changed. + */ + onChange?: EventProp> + onPause?: EventProp> + onResume?: EventProp> + /** + * Called when all animations come to a stand-still. + */ + onRest?: EventProp>> +} + +/** + * A union type of all possible `to` prop values. + * + * This is not recommended for function types. Instead, you should declare + * an overload for each `to` type. See `SpringUpdateFn` for an example. + * + * The `T` parameter can be a set of animated values (as an object type) + * or a primitive type for a single animated value. + */ +export type ToProps = + | { to?: GoalProp | SpringToFn | SpringChain } + | ([T] extends [IsPlainObject] ? InlineToProps : never) + +/** + * A value or set of values that can be animated from/to. + * + * The `T` parameter can be a set of animated values (as an object type) + * or a primitive type for a single animated value. + */ +export type GoalProp = [T] extends [IsPlainObject] + ? GoalValues | Falsy + : GoalValue + +/** A set of values for a `Controller` to animate from/to. */ +export type GoalValues = FluidProps extends infer Props + ? { [P in keyof Props]?: Props[P] | null } + : never + +/** + * A value that `SpringValue` objects can animate from/to. + * + * The `UnknownProps` type lets you pass in { a: 1 } if the `key` + * property of `SpringValue` equals "a". + */ +export type GoalValue = T | FluidValue | UnknownProps | null | undefined + +/** + * Where `to` is inferred from non-reserved props + * + * The `T` parameter can be a set of animated values (as an object type) + * or a primitive type for a single animated value. + */ +export type InlineToProps = Remap & { to?: undefined }> + +/** A serial queue of spring updates. */ +export interface SpringChain + extends Array< + [T] extends [IsPlainObject] + ? ControllerUpdate + : SpringTo | SpringUpdate + > {} + +/** A value that any `SpringValue` or `Controller` can animate to. */ +export type SpringTo = + | ([T] extends [IsPlainObject] ? never : T | FluidValue) + | SpringChain + | SpringToFn + | Falsy + +export type ControllerUpdate = unknown & + ToProps & + ControllerProps + +/** + * Props for `Controller` methods and constructor. + */ +export interface ControllerProps + extends AnimationProps { + ref?: SpringRef + from?: GoalValues | Falsy + // FIXME: Use "ControllerUpdate" once type recursion is good enough. + loop?: LoopProp + /** + * Called when the # of animating values exceeds 0 + * + * Also accepts an object for per-key events + */ + onStart?: + | ((ctrl: Controller) => void) + | { [P in keyof State]?: OnStart } + /** + * Called when the # of animating values hits 0 + * + * Also accepts an object for per-key events + */ + onRest?: + | OnRest> + | { [P in keyof State]?: OnRest> } + /** + * Called once per frame when animations are active + * + * Also accepts an object for per-key events + */ + onChange?: + | ((values: State) => void) + | { [P in keyof State]?: OnChange } + onPause?: OnPause | { [P in keyof State]?: OnPause } + onResume?: OnResume | { [P in keyof State]?: OnResume } + /** + * Called after an animation is updated by new props. + * Useful for manipulation + * + * Also accepts an object for per-key events + */ + onProps?: OnProps | { [P in keyof State]?: OnProps } + /** + * Called when the promise for this update is resolved. + */ + onResolve?: OnResolve +} + +export type LoopProp = boolean | T | (() => boolean | T) + +export type VelocityProp = T extends ReadonlyArray + ? number[] + : number + +/** For props that can be set on a per-key basis. */ +export type MatchProp = + | boolean + | OneOrMore> + | ((key: StringKeys) => boolean) + +/** Event props can be customized per-key. */ +export type EventProp = T | Lookup + +/** + * Most of the reserved animation props, except `to`, `from`, `loop`, + * and the event props. + */ +export interface AnimationProps { + /** + * Configure the spring behavior for each key. + */ + config?: SpringConfig | ((key: StringKeys) => SpringConfig) + /** + * Milliseconds to wait before applying the other props. + */ + delay?: number | ((key: StringKeys) => number) + /** + * When true, props jump to their goal values instead of animating. + */ + immediate?: MatchProp + /** + * Cancel all animations by using `true`, or some animations by using a key + * or an array of keys. + */ + cancel?: MatchProp + /** + * Pause all animations by using `true`, or some animations by using a key + * or an array of keys. + */ + pause?: MatchProp + /** + * Start the next animations at their values in the `from` prop. + */ + reset?: MatchProp + /** + * Swap the `to` and `from` props. + */ + reverse?: boolean + /** + * Override the default props with this update. + */ + default?: boolean | SpringProps +} + +/** + * Extract the custom props that are treated like `to` values + */ +export type ForwardProps = RawValues< + Omit, keyof ReservedProps> +> + +/** + * Property names that are reserved for animation config + */ +export interface ReservedProps extends ReservedEventProps { + config?: any + from?: any + to?: any + ref?: any + loop?: any + pause?: any + reset?: any + cancel?: any + reverse?: any + immediate?: any + default?: any + delay?: any + + // Transition props + items?: any + trail?: any + sort?: any + expires?: any + initial?: any + enter?: any + update?: any + leave?: any + children?: any + + // Internal props + keys?: any + callId?: any + parentId?: any +} + +export interface ReservedEventProps { + onProps?: any + onStart?: any + onChange?: any + onPause?: any + onResume?: any + onRest?: any + onResolve?: any + onDestroyed?: any +} + +/** + * Pick the properties of these object props... + * + * "to", "from", "initial", "enter", "update", "leave" + * + * ...as well as any forward props. + */ +export type PickAnimated = unknown & + ([Props] extends [Any] + ? Lookup // Preserve "any" instead of resolving to "{}" + : [object] extends [Props] + ? Lookup + : ObjectFromUnion< + | FromValues + | (TransitionKey & keyof Props extends never + ? ToValues + : TransitionValues) + >) + +/** + * Pick the values of the `to` prop. Forward props are *not* included. + */ +type ToValues = unknown & + (AndForward extends true ? ForwardProps : unknown) & + (Props extends { to?: any } + ? Exclude> extends infer To + ? ForwardProps<[To] extends [object] ? To : Partial>> + : never + : unknown) + +/** + * Pick the values of the `from` prop. + */ +type FromValues = ForwardProps< + Props extends { from?: infer From } ? ObjectType : object +> diff --git a/packages/core/src/types/transition.ts b/packages/core/src/types/transition.ts new file mode 100644 index 0000000000..45afc7dc3c --- /dev/null +++ b/packages/core/src/types/transition.ts @@ -0,0 +1,152 @@ +import { ReactNode } from 'react' +import { + Lookup, + ObjectFromUnion, + ObjectType, + Constrain, + OneOrMore, + UnknownProps, + Merge, + Falsy, + NoInfer, +} from '@react-spring/types' + +import { + AnimationProps, + ControllerProps, + ControllerUpdate, + ForwardProps, + GoalProp, + PickAnimated, + SpringChain, +} from './props' +import { SpringToFn } from './functions' +import { SpringValues, SpringConfig } from './objects' +import { TransitionPhase } from '../TransitionPhase' +import { Controller } from '../Controller' +import { SpringRef } from '../SpringRef' + +/** The phases of a `useTransition` item */ +export type TransitionKey = 'initial' | 'enter' | 'update' | 'leave' + +/** + * Extract a union of animated values from a set of `useTransition` props. + */ +export type TransitionValues = unknown & + ForwardProps< + ObjectFromUnion< + Constrain< + ObjectType< + Props[TransitionKey & keyof Props] extends infer T + ? T extends ReadonlyArray + ? Element + : T extends (...args: any[]) => infer Return + ? Return extends ReadonlyArray + ? ReturnElement + : Return + : T + : never + >, + {} + > + > + > + +export type UseTransitionProps = Merge< + ControllerProps, + { + from?: TransitionFrom + initial?: TransitionFrom + enter?: TransitionTo + update?: TransitionTo + leave?: TransitionTo + key?: ItemKeys + sort?: (a: Item, b: Item) => number + trail?: number + /** + * When `true` or `<= 0`, each item is unmounted immediately after its + * `leave` animation is finished. + * + * When `false`, items are never unmounted. + * + * When `> 0`, this prop is used in a `setTimeout` call that forces a + * rerender if the component that called `useTransition` doesn't rerender + * on its own after an item's `leave` animation is finished. + */ + expires?: boolean | number | ((item: Item) => boolean | number) + config?: + | SpringConfig + | ((item: Item, index: number) => AnimationProps['config']) + /** + * Called after a transition item is unmounted. + */ + onDestroyed?: (item: Item, key: Key) => void + /** + * Used to access the imperative API. + * + * Animations never auto-start when `ref` is defined. + */ + ref?: SpringRef + } +> + +export type TransitionComponentProps< + Item, + Props extends object = any +> = unknown & + UseTransitionProps & { + keys?: ItemKeys> + items: OneOrMore + children: TransitionRenderFn, PickAnimated> + } + +type Key = string | number + +export type ItemKeys = OneOrMore | ((item: T) => Key) | null + +/** The function returned by `useTransition` */ +export interface TransitionFn { + (render: TransitionRenderFn): JSX.Element +} + +export interface TransitionRenderFn { + ( + values: SpringValues, + item: Item, + transition: TransitionState, + index: number + ): ReactNode +} + +export interface TransitionState { + key: any + item: Item + ctrl: Controller + phase: TransitionPhase + expired?: boolean + expirationId?: number +} + +export type TransitionFrom = + | Falsy + | GoalProp + | ((item: Item, index: number) => GoalProp | Falsy) + +export type TransitionTo = + | Falsy + | OneOrMore> + | Function // HACK: Fix inference of untyped inline functions. + | (( + item: Item, + index: number + ) => + | ControllerUpdate + | SpringChain + | SpringToFn + | Falsy) + +export interface Change { + phase: TransitionPhase + springs: SpringValues + payload: ControllerUpdate +} diff --git a/packages/core/test/global.d.ts b/packages/core/test/global.d.ts new file mode 100644 index 0000000000..887e56a136 --- /dev/null +++ b/packages/core/test/global.d.ts @@ -0,0 +1,34 @@ +import { MockRaf } from 'mock-raf' +import { Controller, SpringValue, FrameValue } from '..' + +declare global { + let mockRaf: MockRaf + + let advance: (n?: number) => Promise + let advanceByTime: (ms: number) => Promise + let advanceUntil: (test: () => boolean) => Promise + let advanceUntilIdle: () => Promise + let advanceUntilValue: (spring: FrameValue, value: T) => Promise + + /** Take an array of values (one per animation frame) from internal test storage */ + let getFrames: ( + target: FrameValue | Controller>, + preserve?: boolean + ) => T[] + + /** Count the number of bounces in a spring animation */ + let countBounces: (spring: SpringValue) => number + + const global: { + mockRaf: typeof mockRaf + advance: typeof advance + advanceByTime: typeof advanceByTime + advanceUntil: typeof advanceUntil + advanceUntilIdle: typeof advanceUntilIdle + advanceUntilValue: typeof advanceUntilValue + countBounces: typeof countBounces + getFrames: typeof getFrames + } + + const setTimeout: (handler: Function, ms: number) => number +} diff --git a/packages/core/test/setup.ts b/packages/core/test/setup.ts new file mode 100644 index 0000000000..2ea7c13e27 --- /dev/null +++ b/packages/core/test/setup.ts @@ -0,0 +1,160 @@ +import createMockRaf from 'mock-raf' +import { flushMicroTasks } from 'flush-microtasks' +import { act } from '@testing-library/react' +import { + isEqual, + is, + colors, + frameLoop, + addFluidObserver, + removeFluidObserver, + getFluidObservers, +} from '@react-spring/shared' +import { __raf as raf } from 'rafz' + +import { Globals, Controller, FrameValue } from '..' +import { computeGoal } from '../src/helpers' + +// Allow indefinite tests, since we limit the number of animation frames +// per "advanceUntil" call to 1000. This keeps the "isRunning" variable +// from interfering with the debugger. +jest.setTimeout(6e8) + +let isRunning = false +let frameCache: WeakMap + +beforeEach(() => { + isRunning = true + frameCache = new WeakMap() + frameLoop.clear() + raf.clear() + + global.mockRaf = createMockRaf() + Globals.assign({ + now: mockRaf.now, + requestAnimationFrame: mockRaf.raf, + colors, + // This lets our useTransition hook force its component + // to update from within an "onRest" handler. + batchedUpdates: act, + }) +}) + +afterEach(() => { + isRunning = false +}) + +// This observes every SpringValue animation when "advanceUntil" is used. +// Any changes between frames are not recorded. +const frameObserver = (event: FrameValue.Event) => { + const spring = event.parent + if (event.type == 'change') { + let frames = frameCache.get(spring) + if (!frames) frameCache.set(spring, (frames = [])) + frames.push(event.value) + } +} + +global.getFrames = (target, preserve) => { + let frames = frameCache.get(target)! + if (!preserve) { + frameCache.delete(target) + } + if (!frames) { + frames = [] + if (target instanceof Controller) { + target.each(spring => { + getFrames(spring, preserve).forEach((value, i) => { + const frame = frames[i] || (frames[i] = {}) + frame[spring.key!] = value + }) + }) + if (preserve) { + frameCache.set(target, frames) + } + } + } + return frames +} + +global.countBounces = spring => { + const { to, from } = spring.animation + let prev = from + let count = 0 + getFrames(spring, true).forEach(value => { + if (value !== to && value > to !== prev > to) { + count += 1 + } + prev = value + }) + return count +} + +global.advanceUntil = async test => { + let steps = 0 + while (isRunning && !test()) { + // Observe animations scheduled for next frame. + const values: FrameValue[] = [] + const observe = (value: unknown) => { + if (value instanceof FrameValue && !value.idle) { + getFluidObservers(value)?.forEach(observe) + addFluidObserver(value, frameObserver) + values.push(value) + } + } + + Globals.assign({ + willAdvance: observe, + }) + + jest.advanceTimersByTime(1000 / 60) + mockRaf.step() + + // Stop observing after the frame is processed. + for (const value of values) { + removeFluidObserver(value, frameObserver) + } + + // Ensure pending effects are flushed. + await flushMicroTasks() + + // Prevent infinite recursion. + if (++steps > 1e3) { + throw Error('Infinite loop detected') + } + } +} + +global.advance = (n = 1) => { + return advanceUntil(() => --n < 0) +} + +global.advanceByTime = ms => { + let fired = false + setTimeout(() => (fired = true), ms) + return advanceUntil(() => fired) +} + +global.advanceUntilIdle = () => { + return advanceUntil(() => frameLoop.idle && raf.count == 0) +} + +// TODO: support "value" as an array or animatable string +global.advanceUntilValue = (spring, value) => { + const from = computeGoal(spring.get()) + const goal = computeGoal(value) + + const offset = getFrames(spring, true).length + return advanceUntil(() => { + const frames = getFrames(spring, true) + const value = frames.length - offset > 0 ? frames[frames.length - 1] : from + + const stop = is.num(goal) + ? goal > from + ? goal <= value + : goal >= value + : isEqual(value, goal) + + return stop + }) +} diff --git a/packages/core/tsconfig.json b/packages/core/tsconfig.json new file mode 100644 index 0000000000..b6bfbc6d27 --- /dev/null +++ b/packages/core/tsconfig.json @@ -0,0 +1,20 @@ +{ + "include": ["src", "test"], + "compilerOptions": { + "baseUrl": ".", + "forceConsistentCasingInFileNames": true, + "jsx": "react", + "lib": ["es2017"], + "moduleResolution": "node", + "noErrorTruncation": true, + "noEmitOnError": true, + "noFallthroughCasesInSwitch": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "preserveSymlinks": true, + "sourceMap": true, + "strict": true, + "target": "esnext", + "typeRoots": ["../../node_modules/@types", "../../@types"] + } +} diff --git a/packages/parallax/README.md b/packages/parallax/README.md new file mode 100644 index 0000000000..40e78b08bc --- /dev/null +++ b/packages/parallax/README.md @@ -0,0 +1,76 @@ +# @react-spring/parallax + +This package exports the `Parallax` and `ParallaxLayer` components. Both are wrapped with `React.memo`. + +`Parallax` creates a scroll container. Throw in any amount of `ParallaxLayer`s and it will take care of +moving them in accordance to their offsets and speeds. + +**Note:** Currently, only `@react-spring/web` is supported. + +```tsx +import { Parallax, ParallaxLayer } from '@react-spring/parallax' + +const Example = () => { + const ref = useRef() + return ( + + + { + ref.current.scrollTo(1) + }}> + Layers can contain anything + + + + ) +} +``` + +## `Parallax` props + +- `pages: number` + + Determines the total space of the inner content where each page takes 100% of the visible container. + +- `config?: SpringConfig` + + The spring behavior. + + Defaults to `config.slow`. + +- `scrolling?: boolean` + + Allow content to be scrolled or not. + + Defaults to `true`. + +- `horizontal?: boolean + + When `true`, content scrolls from left to right. + + Defaults to `false`. + +## `ParallaxLayer` props + +- `factor?: number` + + The page size (eg: 1 => 100%, 1.5 => 150%, etc) + + Defaults to `1`. + +- `offset?: number` + + The page offset (eg: 0 => top of 1st page, 1 => top of 2nd page, etc) + + Defaults to `0`. + +- `speed?: number` + + Shift the layer in accordance to its offset. Values can be positive or negative. + + Defaults to `0`. + +## Credits + +Paul Henschel diff --git a/packages/parallax/package.json b/packages/parallax/package.json new file mode 100644 index 0000000000..46f16c53ac --- /dev/null +++ b/packages/parallax/package.json @@ -0,0 +1,18 @@ +{ + "name": "@react-spring/parallax", + "version": "9.0.0-rc.4", + "main": "src/index.tsx", + "dependencies": { + "@react-spring/shared": "link:../shared", + "@react-spring/web": "link:../../targets/web" + }, + "peerDependencies": { + "react": ">=16.8" + }, + "scripts": { + "build": "rollup -c" + }, + "publishConfig": { + "directory": "dist" + } +} diff --git a/packages/parallax/rollup.config.js b/packages/parallax/rollup.config.js new file mode 100644 index 0000000000..6785bd17fc --- /dev/null +++ b/packages/parallax/rollup.config.js @@ -0,0 +1,3 @@ +import { multiBundle } from '../../rollup.config' + +export default multiBundle() diff --git a/packages/parallax/src/index.tsx b/packages/parallax/src/index.tsx new file mode 100644 index 0000000000..30a7ac1d0f --- /dev/null +++ b/packages/parallax/src/index.tsx @@ -0,0 +1,288 @@ +import * as React from 'react' +import { useContext, useState, useRef, useEffect, CSSProperties } from 'react' +import { useMemoOne, useOnce, raf } from '@react-spring/shared' +import { + a, + Controller, + SpringConfig, + config as configs, +} from '@react-spring/web' + +const ParentContext = React.createContext(null) + +function getScrollType(horizontal: boolean) { + return horizontal ? 'scrollLeft' : 'scrollTop' +} + +const START_TRANSLATE_3D = 'translate3d(0px,0px,0px)' +const START_TRANSLATE = 'translate(0px,0px)' + +export interface IParallaxLayer { + setHeight(height: number, immediate?: boolean): void + setPosition(height: number, scrollTop: number, immediate?: boolean): void +} + +export interface IParallax { + config: ConfigProp + busy: boolean + space: number + offset: number + current: number + controller: Controller<{ scroll: number }> + layers: Set + scrollTo(offset: number): void + update(): void + stop(): void +} + +type ViewProps = React.ComponentPropsWithoutRef<'div'> + +export interface ParallaxLayerProps extends ViewProps { + horizontal?: boolean + /** Size of a page, (1=100%, 1.5=1 and 1/2, ...) */ + factor?: number + /** Determines where the layer will be at when scrolled to (0=start, 1=1st page, ...) */ + offset?: number + /** Shifts the layer in accordance to its offset, values can be positive or negative */ + speed?: number +} + +export const ParallaxLayer = React.memo( + React.forwardRef( + ({ horizontal, factor = 1, offset = 0, speed = 0, ...rest }, ref) => { + // Our parent controls our height and position. + const parent = useContext(ParentContext) + + // This is how we animate. + const ctrl = useMemoOne(() => { + const targetScroll = Math.floor(offset) * parent.space + const distance = parent.space * offset + targetScroll * speed + type Animated = { space: number; translate: number } + return new Controller({ + space: parent.space * factor, + translate: -(parent.current * speed) + distance, + }) + }, []) + + // Create the layer. + const layer = useMemoOne( + () => ({ + setPosition(height, scrollTop, immediate = false) { + const distance = height * offset + ctrl.start({ + translate: -(scrollTop * speed) + distance, + config: parent.config, + immediate, + }) + }, + setHeight(height, immediate = false) { + ctrl.start({ + space: height * factor, + config: parent.config, + immediate, + }) + }, + }), + [] + ) + + React.useImperativeHandle(ref, () => layer) + + // Register the layer with our parent. + useOnce(() => { + if (parent) { + parent.layers.add(layer) + parent.update() + return () => { + parent.layers.delete(layer) + parent.update() + } + } + }) + + const translate3d = ctrl.springs.translate.to( + horizontal + ? x => `translate3d(${x}px,0,0)` + : y => `translate3d(0,${y}px,0)` + ) + + return ( + + ) + return null + } + ) +) + +type ConfigProp = SpringConfig | ((key: string) => SpringConfig) + +export interface ParallaxProps extends ViewProps { + /** Determines the total space of the inner content where each page takes 100% of the visible container */ + pages: number + config?: ConfigProp + enabled?: boolean + horizontal?: boolean + innerStyle?: CSSProperties +} + +export const Parallax = React.memo( + React.forwardRef((props, ref) => { + const [ready, setReady] = useState(false) + const { + pages, + innerStyle, + config = configs.slow, + enabled = true, + horizontal = false, + ...rest + } = props + + const state: IParallax = useMemoOne( + () => ({ + config, + busy: false, + space: 0, + current: 0, + offset: 0, + controller: new Controller({ scroll: 0 }), + layers: new Set(), + update: () => update(), + scrollTo: offset => scrollTo(offset), + stop: () => state.controller.stop(), + }), + [] + ) + + useEffect(() => { + state.config = config + }, [config]) + + React.useImperativeHandle(ref, () => state) + + const containerRef = useRef() + const contentRef = useRef() + + const update = () => { + const container = containerRef.current + if (!container) return + + const spaceProp = horizontal ? 'clientWidth' : 'clientHeight' + state.space = container[spaceProp] + + const scrollType = getScrollType(horizontal) + if (enabled) { + state.current = container[scrollType] + } else { + container[scrollType] = state.current = state.offset * state.space + } + + const content = contentRef.current + if (content) { + const sizeProp = horizontal ? 'width' : 'height' + content.style[sizeProp] = `${state.space * pages}px` + } + + state.layers.forEach(layer => { + layer.setHeight(state.space, true) + layer.setPosition(state.space, state.current, true) + }) + } + + const scrollTo = (offset: number) => { + const container = containerRef.current + const scrollType = getScrollType(horizontal) + + state.offset = offset + state.controller.stop().start({ + scroll: offset * state.space, + config, + onChange({ scroll }: any) { + container[scrollType] = scroll + }, + }) + } + + const onScroll = (event: any) => { + if (!state.busy) { + state.busy = true + state.current = event.target[getScrollType(horizontal)] + raf.onStart(() => { + state.layers.forEach(layer => + layer.setPosition(state.space, state.current) + ) + state.busy = false + }) + } + } + + useEffect(() => state.update()) + useOnce(() => { + setReady(true) + + const onResize = () => { + const update = () => state.update() + raf.onFrame(update) + setTimeout(update, 150) // Some browsers don't fire on maximize! + } + + window.addEventListener('resize', onResize, false) + return () => window.removeEventListener('resize', onResize, false) + }) + + const overflow = enabled ? 'scroll' : 'hidden' + return ( + + {ready && ( + + + {rest.children} + + + )} + + ) + }) +) diff --git a/tsconfig.json b/packages/parallax/tsconfig.json similarity index 54% rename from tsconfig.json rename to packages/parallax/tsconfig.json index 31a3342255..417fa21b47 100644 --- a/tsconfig.json +++ b/packages/parallax/tsconfig.json @@ -1,20 +1,17 @@ { "compilerOptions": { - "target": "es2017", - "moduleResolution": "node", + "baseUrl": ".", + "forceConsistentCasingInFileNames": true, + "jsx": "react", "lib": ["dom", "es2017"], - "outDir": "./dist", - "allowJs": true, + "moduleResolution": "node", "noEmitOnError": true, - "jsx": "react", - "allowSyntheticDefaultImports": true, - "forceConsistentCasingInFileNames": true, "noFallthroughCasesInSwitch": true, - "noImplicitAny": true, - "noImplicitReturns": true, "noUnusedLocals": true, "noUnusedParameters": true, - "strict": true - }, - "include": ["src/**/*", "types/**/*.ts"] + "preserveSymlinks": true, + "sourceMap": true, + "strict": true, + "target": "esnext" + } } diff --git a/packages/react-spring/README.md b/packages/react-spring/README.md new file mode 120000 index 0000000000..fe84005413 --- /dev/null +++ b/packages/react-spring/README.md @@ -0,0 +1 @@ +../../README.md \ No newline at end of file diff --git a/packages/react-spring/konva.ts b/packages/react-spring/konva.ts new file mode 120000 index 0000000000..40b9241870 --- /dev/null +++ b/packages/react-spring/konva.ts @@ -0,0 +1 @@ +src/konva.ts \ No newline at end of file diff --git a/packages/react-spring/native.ts b/packages/react-spring/native.ts new file mode 120000 index 0000000000..b118505a22 --- /dev/null +++ b/packages/react-spring/native.ts @@ -0,0 +1 @@ +src/native.ts \ No newline at end of file diff --git a/packages/react-spring/package.json b/packages/react-spring/package.json new file mode 100644 index 0000000000..cac0ad50c9 --- /dev/null +++ b/packages/react-spring/package.json @@ -0,0 +1,19 @@ +{ + "name": "react-spring", + "version": "9.0.0-rc.4", + "main": "src/web.ts", + "dependencies": { + "@react-spring/core": "link:../core", + "@react-spring/konva": "link:../../targets/konva", + "@react-spring/native": "link:../../targets/native", + "@react-spring/three": "link:../../targets/three", + "@react-spring/web": "link:../../targets/web", + "@react-spring/zdog": "link:../../targets/zdog" + }, + "scripts": { + "build": "rollup -c" + }, + "publishConfig": { + "directory": "dist" + } +} diff --git a/packages/react-spring/rollup.config.js b/packages/react-spring/rollup.config.js new file mode 100644 index 0000000000..40ab5def82 --- /dev/null +++ b/packages/react-spring/rollup.config.js @@ -0,0 +1,5 @@ +import { multiBundle } from '../../rollup.config' + +export default multiBundle({ + sourcemap: false, +}) diff --git a/packages/react-spring/src/konva.ts b/packages/react-spring/src/konva.ts new file mode 100644 index 0000000000..decb003997 --- /dev/null +++ b/packages/react-spring/src/konva.ts @@ -0,0 +1 @@ +export * from '@react-spring/konva' diff --git a/packages/react-spring/src/native.ts b/packages/react-spring/src/native.ts new file mode 100644 index 0000000000..702f965b49 --- /dev/null +++ b/packages/react-spring/src/native.ts @@ -0,0 +1 @@ +export * from '@react-spring/native' diff --git a/packages/react-spring/src/three.ts b/packages/react-spring/src/three.ts new file mode 100644 index 0000000000..6653ad0d7b --- /dev/null +++ b/packages/react-spring/src/three.ts @@ -0,0 +1 @@ +export * from '@react-spring/three' diff --git a/packages/react-spring/src/universal.ts b/packages/react-spring/src/universal.ts new file mode 100644 index 0000000000..1704cfa57f --- /dev/null +++ b/packages/react-spring/src/universal.ts @@ -0,0 +1,3 @@ +// Note: You must make your own `animated` function, and you'll need to +// inject some globals too. For examples, look at the other platforms. +export * from '@react-spring/core' diff --git a/packages/react-spring/src/web.ts b/packages/react-spring/src/web.ts new file mode 100644 index 0000000000..9427774898 --- /dev/null +++ b/packages/react-spring/src/web.ts @@ -0,0 +1,2 @@ +/// +export * from '@react-spring/web' diff --git a/packages/react-spring/src/zdog.ts b/packages/react-spring/src/zdog.ts new file mode 100644 index 0000000000..cda3a295f7 --- /dev/null +++ b/packages/react-spring/src/zdog.ts @@ -0,0 +1 @@ +export * from '@react-spring/zdog' diff --git a/packages/react-spring/three.ts b/packages/react-spring/three.ts new file mode 120000 index 0000000000..79c632f855 --- /dev/null +++ b/packages/react-spring/three.ts @@ -0,0 +1 @@ +src/three.ts \ No newline at end of file diff --git a/packages/react-spring/tsconfig.json b/packages/react-spring/tsconfig.json new file mode 100644 index 0000000000..0289e53f43 --- /dev/null +++ b/packages/react-spring/tsconfig.json @@ -0,0 +1,20 @@ +{ + "include": ["src"], + "compilerOptions": { + "baseUrl": ".", + "forceConsistentCasingInFileNames": true, + "jsx": "react", + "lib": ["es2017"], + "moduleResolution": "node", + "noEmitOnError": true, + "noFallthroughCasesInSwitch": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "preserveSymlinks": true, + "skipLibCheck": true, + "sourceMap": true, + "strict": true, + "target": "esnext", + "typeRoots": ["../../targets/zdog/@types", "../../targets/three/@types"] + } +} diff --git a/packages/react-spring/universal.ts b/packages/react-spring/universal.ts new file mode 120000 index 0000000000..2518bdd5b7 --- /dev/null +++ b/packages/react-spring/universal.ts @@ -0,0 +1 @@ +src/universal.ts \ No newline at end of file diff --git a/packages/react-spring/web.ts b/packages/react-spring/web.ts new file mode 120000 index 0000000000..63b030f0bf --- /dev/null +++ b/packages/react-spring/web.ts @@ -0,0 +1 @@ +src/web.ts \ No newline at end of file diff --git a/packages/react-spring/zdog.ts b/packages/react-spring/zdog.ts new file mode 120000 index 0000000000..516558b0d4 --- /dev/null +++ b/packages/react-spring/zdog.ts @@ -0,0 +1 @@ +src/zdog.ts \ No newline at end of file diff --git a/packages/shared/README.md b/packages/shared/README.md new file mode 100644 index 0000000000..5800964310 --- /dev/null +++ b/packages/shared/README.md @@ -0,0 +1,16 @@ +# @react-spring/shared + +Various helpers used by `@react-spring/core` and/or the platform targets (eg: `@react-spring/web`). + +### Notable exports: + +- The `Globals` object (updated with its `assign` method) +- The `createStringInterpolator` function +- The `createInterpolator` function +- The `normalizeColor` function +- The `FrameLoop` class +- The `colors` object +- The `colorToRgba` function +- The [`fluids`] package + +[`fluids`]: https://www.npmjs.com/package/fluids diff --git a/packages/shared/package.json b/packages/shared/package.json new file mode 100644 index 0000000000..7f1abd4033 --- /dev/null +++ b/packages/shared/package.json @@ -0,0 +1,20 @@ +{ + "name": "@react-spring/shared", + "version": "9.0.0-rc.4", + "description": "Globals and shared modules", + "main": "src/index.ts", + "scripts": { + "build": "rollup -c" + }, + "publishConfig": { + "directory": "dist" + }, + "dependencies": { + "@react-spring/types": "link:../types", + "fluids": "^0.2.2", + "rafz": "^0.1.13" + }, + "peerDependencies": { + "react": ">=16.8" + } +} diff --git a/packages/shared/rollup.config.js b/packages/shared/rollup.config.js new file mode 100644 index 0000000000..66cee09cf3 --- /dev/null +++ b/packages/shared/rollup.config.js @@ -0,0 +1,3 @@ +import { bundle } from '../../rollup.config' + +export default bundle() diff --git a/packages/shared/src/FrameLoop.ts b/packages/shared/src/FrameLoop.ts new file mode 100644 index 0000000000..132b029131 --- /dev/null +++ b/packages/shared/src/FrameLoop.ts @@ -0,0 +1,124 @@ +import { raf } from 'rafz' +import * as G from './globals' + +export interface OpaqueAnimation { + idle: boolean + priority: number + advance(dt: number): void +} + +// Animations starting on the next frame +const startQueue = new Set() + +// The animations being updated in the current frame, sorted by lowest +// priority first. These two arrays are swapped at the end of each frame. +let currentFrame: OpaqueAnimation[] = [] +let prevFrame: OpaqueAnimation[] = [] + +// The priority of the currently advancing animation. +// To protect against a race condition whenever a frame is being processed, +// where the filtering of `animations` is corrupted with a shifting index, +// causing animations to potentially advance 2x faster than intended. +let priority = 0 + +/** + * The frameloop executes its animations in order of lowest priority first. + * Animations are retained until idle. + */ +export const frameLoop = { + get idle() { + return !startQueue.size && !currentFrame.length + }, + + /** Advance the given animation on every frame until idle. */ + start(animation: OpaqueAnimation) { + // An animation can be added while a frame is being processed, + // unless its priority is lower than the animation last updated. + if (priority > animation.priority) { + startQueue.add(animation) + raf.onStart(flushStartQueue) + } else { + startSafely(animation) + raf(advance) + } + }, + + /** Advance all animations by the given time. */ + advance, + + /** Call this when an animation's priority changes. */ + sort(animation: OpaqueAnimation) { + if (priority) { + raf.onFrame(() => frameLoop.sort(animation)) + } else { + const prevIndex = currentFrame.indexOf(animation) + if (~prevIndex) { + currentFrame.splice(prevIndex, 1) + startUnsafely(animation) + } + } + }, + + /** + * Clear all animations. For testing purposes. + * + * ☠️ Never call this from within the frameloop. + */ + clear() { + currentFrame = [] + startQueue.clear() + }, +} + +function flushStartQueue() { + startQueue.forEach(startSafely) + startQueue.clear() + raf(advance) +} + +function startSafely(animation: OpaqueAnimation) { + if (!currentFrame.includes(animation)) startUnsafely(animation) +} + +function startUnsafely(animation: OpaqueAnimation) { + currentFrame.splice( + findIndex(currentFrame, other => other.priority > animation.priority), + 0, + animation + ) +} + +function advance(dt: number) { + const nextFrame = prevFrame + + for (let i = 0; i < currentFrame.length; i++) { + const animation = currentFrame[i] + priority = animation.priority + + // Animations may go idle before advancing. + if (!animation.idle) { + G.willAdvance(animation) + animation.advance(dt) + if (!animation.idle) { + nextFrame.push(animation) + } + } + } + priority = 0 + + // Reuse the `currentFrame` array to avoid garbage collection. + prevFrame = currentFrame + prevFrame.length = 0 + + // Set `currentFrame` for next frame, so the `start` function + // adds new animations to the proper array. + currentFrame = nextFrame + + return currentFrame.length > 0 +} + +/** Like `Array.prototype.findIndex` but returns `arr.length` instead of `-1` */ +function findIndex(arr: T[], test: (value: T) => boolean) { + const index = arr.findIndex(test) + return index < 0 ? arr.length : index +} diff --git a/src/shared/colorMatchers.ts b/packages/shared/src/colorMatchers.ts similarity index 100% rename from src/shared/colorMatchers.ts rename to packages/shared/src/colorMatchers.ts diff --git a/packages/shared/src/colorToRgba.ts b/packages/shared/src/colorToRgba.ts new file mode 100644 index 0000000000..c5118773db --- /dev/null +++ b/packages/shared/src/colorToRgba.ts @@ -0,0 +1,12 @@ +import { normalizeColor } from './normalizeColor' + +export function colorToRgba(input: string) { + let int32Color = normalizeColor(input) + if (int32Color === null) return input + int32Color = int32Color || 0 + let r = (int32Color & 0xff000000) >>> 24 + let g = (int32Color & 0x00ff0000) >>> 16 + let b = (int32Color & 0x0000ff00) >>> 8 + let a = (int32Color & 0x000000ff) / 255 + return `rgba(${r}, ${g}, ${b}, ${a})` +} diff --git a/src/shared/colors.ts b/packages/shared/src/colors.ts similarity index 98% rename from src/shared/colors.ts rename to packages/shared/src/colors.ts index 3df777e48e..bb6ab48cf4 100644 --- a/src/shared/colors.ts +++ b/packages/shared/src/colors.ts @@ -1,5 +1,7 @@ +export type ColorName = keyof typeof colors + // http://www.w3.org/TR/css3-color/#svg-color -const colors = { +export const colors = { transparent: 0x00000000, aliceblue: 0xf0f8ffff, antiquewhite: 0xfaebd7ff, @@ -151,7 +153,3 @@ const colors = { yellow: 0xffff00ff, yellowgreen: 0x9acd32ff, } - -export type ColorName = keyof typeof colors - -export default colors diff --git a/src/animated/createInterpolator.test.ts b/packages/shared/src/createInterpolator.test.ts similarity index 86% rename from src/animated/createInterpolator.test.ts rename to packages/shared/src/createInterpolator.test.ts index 9fb11b0077..a7744a0112 100644 --- a/src/animated/createInterpolator.test.ts +++ b/packages/shared/src/createInterpolator.test.ts @@ -1,11 +1,12 @@ -import colorNames from '../shared/colors' -import createStringInterpolator from '../shared/stringInterpolation' -import createInterpolator from './createInterpolator' -import * as Globals from './Globals' +import { createInterpolator, Globals } from '.' +import { createStringInterpolator } from './stringInterpolation' +import { colors } from './colors' beforeAll(() => { - Globals.injectColorNames(colorNames) - Globals.injectStringInterpolator(createStringInterpolator) + Globals.assign({ + createStringInterpolator, + colors, + }) }) describe('Interpolation', () => { @@ -22,7 +23,9 @@ describe('Interpolation', () => { }) it('should work with interpolation function as argument', () => { - const interpolation = createInterpolator(value => `scale(${value})`) + const interpolation = createInterpolator( + (value: number) => `scale(${value})` + ) expect(interpolation(0)).toBe('scale(0)') expect(interpolation(10.5)).toBe('scale(10.5)') @@ -107,7 +110,7 @@ describe('Interpolation', () => { it('should work with output ranges with mixed hex and rgba strings', () => { const interpolation = createInterpolator({ range: [0, 1], - output: ['rgba(100, 120, 140, .4)', '#87FC70'], + output: ['rgba(100, 120, 140, 0.4)', '#87FC70'], }) expect(interpolation(0)).toBe('rgba(100, 120, 140, 0.4)') @@ -137,4 +140,13 @@ describe('Interpolation', () => { expect(interpolation(1.5)).toBe('rgba(153, 75, 125, 1)') expect(interpolation(2)).toBe('rgba(255, 0, 0, 1)') }) + + it('should round rgb values', () => { + const interpolation = createInterpolator({ + range: [0, 1], + output: ['rgba(0, 0, 0, 0)', 'rgba(3, 3, 3, 1)'], + }) + + expect(interpolation(0.5)).toBe('rgba(2, 2, 2, 0.5)') + }) }) diff --git a/src/animated/createInterpolator.ts b/packages/shared/src/createInterpolator.ts similarity index 59% rename from src/animated/createInterpolator.ts rename to packages/shared/src/createInterpolator.ts index 57dc79a30b..e740a7183c 100644 --- a/src/animated/createInterpolator.ts +++ b/packages/shared/src/createInterpolator.ts @@ -1,41 +1,36 @@ -import { EasingFunction, InterpolationConfig } from '../types/interpolation' -import * as Globals from './Globals' +import * as G from './globals' +import { is } from './helpers' +import { + Animatable, + InterpolatorFn, + EasingFunction, + ExtrapolateType, + InterpolatorConfig, + InterpolatorFactory, +} from '@react-spring/types' -export type ExtrapolateType = InterpolationConfig['extrapolate'] - -// The most generic interpolation value, possible with custom interpolation functions. -type IpValue = string | number | (string | number)[] - -function createInterpolator< - Interpolator extends (...input: IpValue[]) => IpValue ->(interpolator: Interpolator): Interpolator -function createInterpolator< - In extends number | string, - Out extends number | string ->(config: InterpolationConfig): (input: In) => Out -function createInterpolator< - In extends number | string, - Out extends number | string ->( - range: number[], - output: Out[], - extrapolate: ExtrapolateType -): (input: In) => Out -function createInterpolator( - range: number[] | InterpolationConfig | ((...input: IpValue[]) => IpValue), - output?: (number | string)[], +export const createInterpolator: InterpolatorFactory = ( + range: readonly number[] | InterpolatorFn | InterpolatorConfig, + output?: readonly Animatable[], extrapolate?: ExtrapolateType -) { - if (typeof range === 'function') { +) => { + if (is.fun(range)) { return range } - if (Array.isArray(range)) { - return createInterpolator({ range, output: output!, extrapolate }) + + if (is.arr(range)) { + return createInterpolator({ + range, + output: output!, + extrapolate, + }) } - if (Globals.interpolation && typeof range.output[0] === 'string') { - return Globals.interpolation(range as InterpolationConfig) + + if (is.str(range.output[0])) { + return G.createStringInterpolator(range as any) as any } - const config = range as InterpolationConfig + + const config = range as InterpolatorConfig const outputRange = config.output const inputRange = config.range || [0, 1] @@ -97,10 +92,8 @@ function interpolate( return result } -function findRange(input: number, inputRange: number[]) { +function findRange(input: number, inputRange: readonly number[]) { for (var i = 1; i < inputRange.length - 1; ++i) if (inputRange[i] >= input) break return i - 1 } - -export default createInterpolator diff --git a/packages/shared/src/deprecations.ts b/packages/shared/src/deprecations.ts new file mode 100644 index 0000000000..16baeffd6b --- /dev/null +++ b/packages/shared/src/deprecations.ts @@ -0,0 +1,14 @@ +declare const console: any + +const prefix = 'react-spring: ' + +let flagInterpolate = false +export function deprecateInterpolate() { + if (!flagInterpolate) { + flagInterpolate = true + console.warn( + prefix + + 'The "interpolate" function is deprecated in v9 (use "to" instead)' + ) + } +} diff --git a/packages/shared/src/globals.ts b/packages/shared/src/globals.ts new file mode 100644 index 0000000000..697ae41524 --- /dev/null +++ b/packages/shared/src/globals.ts @@ -0,0 +1,67 @@ +import { raf } from 'rafz' +import { FluidValue } from 'fluids' +import { + OneOrMore, + InterpolatorConfig, + InterpolatorArgs, +} from '@react-spring/types' +import type { OpaqueAnimation } from './FrameLoop' +import { noop } from './helpers' + +// +// Required +// + +export let createStringInterpolator: ( + config: InterpolatorConfig +) => (input: number) => string + +// +// Optional +// + +export let to: ( + source: OneOrMore, + args: InterpolatorArgs +) => FluidValue + +export let colors = null as { [key: string]: number } | null + +export let skipAnimation = false as boolean + +export let willAdvance: (animation: OpaqueAnimation) => void = noop + +// +// Configuration +// + +export interface AnimatedGlobals { + /** Returns a new `Interpolation` object */ + to?: typeof to + /** Used to measure frame length. Read more [here](https://developer.mozilla.org/en-US/docs/Web/API/Performance/now) */ + now?: typeof raf.now + /** Provide custom color names for interpolation */ + colors?: typeof colors + /** Make all animations instant and skip the frameloop entirely */ + skipAnimation?: typeof skipAnimation + /** Provide custom logic for string interpolation */ + createStringInterpolator?: typeof createStringInterpolator + /** Schedule a function to run on the next frame */ + requestAnimationFrame?: (cb: () => void) => void + /** Event props are called with `batchedUpdates` to reduce extraneous renders */ + batchedUpdates?: typeof raf.batchedUpdates + /** @internal Exposed for testing purposes */ + willAdvance?: typeof willAdvance +} + +export const assign = (globals: AnimatedGlobals) => { + if (globals.to) to = globals.to + if (globals.now) raf.now = globals.now + if (globals.colors !== undefined) colors = globals.colors + if (globals.skipAnimation != null) skipAnimation = globals.skipAnimation + if (globals.createStringInterpolator) + createStringInterpolator = globals.createStringInterpolator + if (globals.requestAnimationFrame) raf.use(globals.requestAnimationFrame) + if (globals.batchedUpdates) raf.batchedUpdates = globals.batchedUpdates + if (globals.willAdvance) willAdvance = globals.willAdvance +} diff --git a/packages/shared/src/helpers.ts b/packages/shared/src/helpers.ts new file mode 100644 index 0000000000..5ee7796cd9 --- /dev/null +++ b/packages/shared/src/helpers.ts @@ -0,0 +1,82 @@ +import { Lookup, Arrify, AnyFn, Any } from '@react-spring/types' + +export function noop() {} + +export const defineHidden = (obj: any, key: any, value: any) => + Object.defineProperty(obj, key, { value, writable: true, configurable: true }) + +type IsType = (arg: T & any) => arg is Narrow +type Narrow = [T] extends [Any] ? U : [T] extends [U] ? Extract : U + +type PlainObject = Exclude + +export const is = { + arr: Array.isArray as IsType, + obj: (a: T & any): a is PlainObject => + !!a && a.constructor.name === 'Object', + fun: ((a: unknown) => typeof a === 'function') as IsType, + str: (a: unknown): a is string => typeof a === 'string', + num: (a: unknown): a is number => typeof a === 'number', + und: (a: unknown): a is undefined => a === undefined, +} + +/** Compare animatable values */ +export function isEqual(a: any, b: any) { + if (is.arr(a)) { + if (!is.arr(b) || a.length !== b.length) return false + for (let i = 0; i < a.length; i++) { + if (a[i] !== b[i]) return false + } + return true + } + return a === b +} + +type EachFn = (this: This, value: Value, key: Key) => void +type Eachable = { + forEach(cb: EachFn, ctx?: This): void +} + +/** Minifiable `.forEach` call */ +export const each = ( + obj: Eachable, + fn: EachFn +) => obj.forEach(fn) + +/** Iterate the properties of an object */ +export function eachProp( + obj: T, + fn: ( + this: This, + value: T extends any[] ? T[number] : T[keyof T], + key: string + ) => void, + ctx?: This +) { + for (const key in obj) { + fn.call(ctx as any, obj[key] as any, key) + } +} + +export const toArray = (a: T): Arrify> => + is.und(a) ? [] : is.arr(a) ? (a as any) : [a] + +/** Copy the `queue`, then iterate it after the `queue` is cleared */ +export function flush( + queue: Map, + iterator: (entry: [P, T]) => void +): void +export function flush(queue: Set, iterator: (value: T) => void): void +export function flush(queue: any, iterator: any) { + if (queue.size) { + const items = Array.from(queue) + queue.clear() + each(items, iterator) + } +} + +/** Call every function in the queue with the same arguments. */ +export const flushCalls = ( + queue: Set, + ...args: Parameters +) => flush(queue, fn => fn(...args)) diff --git a/packages/shared/src/hooks/useForceUpdate.ts b/packages/shared/src/hooks/useForceUpdate.ts new file mode 100644 index 0000000000..9273ba26fd --- /dev/null +++ b/packages/shared/src/hooks/useForceUpdate.ts @@ -0,0 +1,24 @@ +import { useState } from 'react' +import { useOnce } from './useOnce' + +/** Return a function that re-renders this component, if still mounted */ +export function useForceUpdate() { + const update = useState()[1] + const mounted = useState(makeMountedRef)[0] + useOnce(mounted.unmount) + return () => { + if (mounted.current) { + update({}) + } + } +} + +function makeMountedRef() { + const mounted = { + current: true, + unmount: () => () => { + mounted.current = false + }, + } + return mounted +} diff --git a/packages/shared/src/hooks/useMemoOne.ts b/packages/shared/src/hooks/useMemoOne.ts new file mode 100644 index 0000000000..7af908f3e3 --- /dev/null +++ b/packages/shared/src/hooks/useMemoOne.ts @@ -0,0 +1,55 @@ +import { useEffect, useRef, useState } from 'react' + +type Cache = { + inputs?: any[] + result?: T +} + +// TODO: remove once merged (https://github.com/alexreardon/use-memo-one/pull/10) +export function useMemoOne(getResult: () => T, inputs?: any[]): T { + const [initial] = useState( + (): Cache => ({ + inputs, + result: getResult(), + }) + ) + + const committed = useRef>() + const prevCache = committed.current + + let cache = prevCache + if (cache) { + const useCache = Boolean( + inputs && cache.inputs && areInputsEqual(inputs, cache.inputs) + ) + if (!useCache) { + cache = { + inputs, + result: getResult(), + } + } + } else { + cache = initial + } + + useEffect(() => { + committed.current = cache + if (prevCache == initial) { + initial.inputs = initial.result = undefined + } + }, [cache]) + + return cache.result! +} + +function areInputsEqual(next: any[], prev: any[]) { + if (next.length !== prev.length) { + return false + } + for (let i = 0; i < next.length; i++) { + if (next[i] !== prev[i]) { + return false + } + } + return true +} diff --git a/packages/shared/src/hooks/useOnce.ts b/packages/shared/src/hooks/useOnce.ts new file mode 100644 index 0000000000..0e95094b70 --- /dev/null +++ b/packages/shared/src/hooks/useOnce.ts @@ -0,0 +1,8 @@ +import { useEffect } from 'react' + +// Explicit type annotation fixes TS2742 error. +type UseOnce = (effect: React.EffectCallback) => void + +export const useOnce: UseOnce = effect => useEffect(effect, emptyDeps) + +const emptyDeps: any[] = [] diff --git a/packages/shared/src/hooks/usePrev.ts b/packages/shared/src/hooks/usePrev.ts new file mode 100644 index 0000000000..9c97e064c8 --- /dev/null +++ b/packages/shared/src/hooks/usePrev.ts @@ -0,0 +1,10 @@ +import { useEffect, useRef } from 'react' + +/** Use a value from the previous render */ +export function usePrev(value: T): T | undefined { + const prevRef = useRef() + useEffect(() => { + prevRef.current = value + }) + return prevRef.current +} diff --git a/packages/shared/src/index.ts b/packages/shared/src/index.ts new file mode 100644 index 0000000000..b0da3e407a --- /dev/null +++ b/packages/shared/src/index.ts @@ -0,0 +1,21 @@ +import * as Globals from './globals' +export { Globals } + +export * from './FrameLoop' +export * from './colors' +export * from './colorToRgba' +export * from './colorMatchers' +export * from './createInterpolator' +export * from './stringInterpolation' +export * from './deprecations' +export * from './helpers' +export * from './isAnimatedString' + +export * from './hooks/useForceUpdate' +export * from './hooks/useMemoOne' +export * from './hooks/useOnce' +export * from './hooks/usePrev' + +export * from 'fluids' +export { raf } from 'rafz' +export type { Timeout } from 'rafz' diff --git a/packages/shared/src/isAnimatedString.ts b/packages/shared/src/isAnimatedString.ts new file mode 100644 index 0000000000..af8845c703 --- /dev/null +++ b/packages/shared/src/isAnimatedString.ts @@ -0,0 +1,10 @@ +import * as G from './globals' +import { is } from './helpers' + +// Not all strings can be animated (eg: {display: "none"}) +export function isAnimatedString(value: unknown): value is string { + return ( + is.str(value) && + (value[0] == '#' || /\d/.test(value) || value in (G.colors || {})) + ) +} diff --git a/src/shared/normalizeColors.ts b/packages/shared/src/normalizeColor.ts similarity index 96% rename from src/shared/normalizeColors.ts rename to packages/shared/src/normalizeColor.ts index 785da2762a..0ac8ccf320 100644 --- a/src/shared/normalizeColors.ts +++ b/packages/shared/src/normalizeColor.ts @@ -33,9 +33,9 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ import * as matchers from './colorMatchers' -import colorNames, { ColorName } from './colors' +import * as G from './globals' -export default function normalizeColor(color: number | string) { +export function normalizeColor(color: number | string) { let match if (typeof color === 'number') { @@ -48,7 +48,9 @@ export default function normalizeColor(color: number | string) { if ((match = matchers.hex6.exec(color))) return parseInt(match[1] + 'ff', 16) >>> 0 - if (colorNames.hasOwnProperty(color)) return colorNames[color as ColorName] + if (G.colors && G.colors[color] !== undefined) { + return G.colors[color] + } if ((match = matchers.rgb.exec(color))) { return ( diff --git a/packages/shared/src/stringInterpolation.ts b/packages/shared/src/stringInterpolation.ts new file mode 100644 index 0000000000..cf862fe65c --- /dev/null +++ b/packages/shared/src/stringInterpolation.ts @@ -0,0 +1,74 @@ +import { getFluidValue } from 'fluids' +import { createInterpolator } from './createInterpolator' +import { InterpolatorConfig } from '@react-spring/types' +import { colorToRgba } from './colorToRgba' +import * as G from './globals' + +// Problem: https://github.com/animatedjs/animated/pull/102 +// Solution: https://stackoverflow.com/questions/638565/parsing-scientific-notation-sensibly/658662 +const numberRegex = /[+\-]?(?:0|[1-9]\d*)(?:\.\d*)?(?:[eE][+\-]?\d+)?/g + +// Covers rgb, rgba, hsl, hsla +// Taken from https://gist.github.com/olmokramer/82ccce673f86db7cda5e +const colorRegex = /(#(?:[0-9a-f]{2}){2,4}|(#[0-9a-f]{3})|(rgb|hsl)a?\((-?\d+%?[,\s]+){2,3}\s*[\d\.]+%?\))/gi + +// Covers color names (transparent, blue, etc.) +let namedColorRegex: RegExp + +// rgba requires that the r,g,b are integers.... so we want to round them, +// but we *dont* want to round the opacity (4th column). +const rgbaRegex = /rgba\(([0-9\.-]+), ([0-9\.-]+), ([0-9\.-]+), ([0-9\.-]+)\)/gi +const rgbaRound = (_: any, p1: number, p2: number, p3: number, p4: number) => + `rgba(${Math.round(p1)}, ${Math.round(p2)}, ${Math.round(p3)}, ${p4})` + +/** + * Supports string shapes by extracting numbers so new values can be computed, + * and recombines those values into new strings of the same shape. Supports + * things like: + * + * "rgba(123, 42, 99, 0.36)" // colors + * "-45deg" // values with units + * "0 2px 2px 0px rgba(0, 0, 0, 0.12)" // CSS box-shadows + * "rotate(0deg) translate(2px, 3px)" // CSS transforms + */ +export const createStringInterpolator = ( + config: InterpolatorConfig +) => { + if (!namedColorRegex) + namedColorRegex = G.colors + ? new RegExp(`(${Object.keys(G.colors).join('|')})`, 'g') + : /^\b$/ // never match + + // Convert colors to rgba(...) + const output = config.output.map(value => + getFluidValue(value) + .replace(colorRegex, colorToRgba) + .replace(namedColorRegex, colorToRgba) + ) + + // Convert ["1px 2px", "0px 0px"] into [[1, 2], [0, 0]] + const keyframes = output.map(value => value.match(numberRegex)!.map(Number)) + + // Convert ["1px 2px", "0px 0px"] into [[1, 0], [2, 0]] + const outputRanges = keyframes[0].map((_, i) => + keyframes.map(values => { + if (!(i in values)) { + throw Error('The arity of each "output" value must be equal') + } + return values[i] + }) + ) + + // Create an interpolator for each animated number + const interpolators = outputRanges.map(output => + createInterpolator({ ...config, output }) + ) + + // Use the first `output` as a template for each call + return (input: number) => { + let i = 0 + return output[0] + .replace(numberRegex, () => String(interpolators[i++](input))) + .replace(rgbaRegex, rgbaRound) + } +} diff --git a/packages/shared/tsconfig.json b/packages/shared/tsconfig.json new file mode 100644 index 0000000000..62b8a8e8aa --- /dev/null +++ b/packages/shared/tsconfig.json @@ -0,0 +1,18 @@ +{ + "include": ["src"], + "compilerOptions": { + "baseUrl": ".", + "forceConsistentCasingInFileNames": true, + "jsx": "react", + "lib": ["es2017"], + "moduleResolution": "node", + "noEmitOnError": true, + "noFallthroughCasesInSwitch": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "preserveSymlinks": true, + "sourceMap": true, + "strict": true, + "target": "esnext" + } +} diff --git a/packages/types/animated.d.ts b/packages/types/animated.d.ts new file mode 100644 index 0000000000..1240dd4913 --- /dev/null +++ b/packages/types/animated.d.ts @@ -0,0 +1,10 @@ +/** These types can be animated */ +export type Animatable = T extends number + ? number + : T extends string + ? string + : T extends ReadonlyArray + ? Array extends T // When true, T is not a tuple + ? ReadonlyArray + : { [P in keyof T]: Animatable } + : never diff --git a/packages/types/animated.js b/packages/types/animated.js new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/types/index.d.ts b/packages/types/index.d.ts new file mode 100644 index 0000000000..1f9a0ebef0 --- /dev/null +++ b/packages/types/index.d.ts @@ -0,0 +1,3 @@ +export * from './animated' +export * from './interpolation' +export * from './util' diff --git a/packages/types/index.js b/packages/types/index.js new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/types/interpolation.ts b/packages/types/interpolation.d.ts similarity index 64% rename from src/types/interpolation.ts rename to packages/types/interpolation.d.ts index 9cf3a024bf..9c5e248d35 100644 --- a/src/types/interpolation.ts +++ b/packages/types/interpolation.d.ts @@ -1,13 +1,36 @@ +import { Arrify, Constrain } from './util' +import { Animatable } from './animated' + export type EasingFunction = (t: number) => number export type ExtrapolateType = 'identity' | 'clamp' | 'extend' -/** - * Long-form configuration options for an interpolation. - */ -export type InterpolationConfig< - Out extends number | string = number | string -> = { +export interface InterpolatorFactory { + (interpolator: InterpolatorFn): typeof interpolator + + (config: InterpolatorConfig): (input: number) => Animatable + + ( + range: readonly number[], + output: readonly Constrain[], + extrapolate?: ExtrapolateType + ): (input: number) => Animatable + + (...args: InterpolatorArgs): InterpolatorFn +} + +export type InterpolatorArgs = + | [InterpolatorFn, Out>] + | [InterpolatorConfig] + | [ + readonly number[], + readonly Constrain[], + (ExtrapolateType | undefined)? + ] + +export type InterpolatorFn = (...inputs: Arrify) => Out + +export type InterpolatorConfig = { /** * What happens when the spring goes below its target value. * @@ -51,12 +74,12 @@ export type InterpolationConfig< * * @default [0,1] */ - range?: number[] + range?: readonly number[] /** * Output values from the interpolation function. Should match the length of the `range` array. */ - output: Out[] + output: readonly Constrain[] /** * Transformation to apply to the value before interpolation. diff --git a/packages/types/interpolation.js b/packages/types/interpolation.js new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/types/package.json b/packages/types/package.json new file mode 100644 index 0000000000..3636b90101 --- /dev/null +++ b/packages/types/package.json @@ -0,0 +1,16 @@ +{ + "name": "@react-spring/types", + "version": "9.0.0-rc.4", + "description": "Internal package with TypeScript stuff", + "main": "src/index.ts", + "publishConfig": { + "directory": "dist" + }, + "scripts": { + "build": "rimraf dist && yarn copy", + "copy": "copyfiles package.json *.js *.d.ts dist" + }, + "dependencies": { + "@alloc/types": "^1.2.1" + } +} diff --git a/packages/types/util.d.ts b/packages/types/util.d.ts new file mode 100644 index 0000000000..cc689cc7a8 --- /dev/null +++ b/packages/types/util.d.ts @@ -0,0 +1,29 @@ +import { Remap, Any } from '@alloc/types' + +export * from '@alloc/types' + +/** Ensure each type of `T` is an array */ +export type Arrify = [T, T] extends [infer T, infer DT] + ? DT extends ReadonlyArray + ? Array extends DT + ? ReadonlyArray ? U : T> + : DT + : ReadonlyArray ? U : T> + : never + +/** Override the property types of `A` with `B` and merge any new properties */ +export type Merge = Remap< + { [P in keyof A]: P extends keyof B ? B[P] : A[P] } & Omit +> + +/** Return the keys of `T` with values that are assignable to `U` */ +export type AssignableKeys = T extends object + ? U extends object + ? { + [P in Extract]: T[P] extends U[P] ? P : never + }[Extract] + : never + : never + +/** Better type errors for overloads with generic types */ +export type Constrain = [T] extends [Any] ? U : [T] extends [U] ? T : U diff --git a/rollup.config.js b/rollup.config.js index dc75d226b3..927bf561d3 100644 --- a/rollup.config.js +++ b/rollup.config.js @@ -1,115 +1,195 @@ +import fs from 'fs-extra' import path from 'path' -import babel from 'rollup-plugin-babel' -import resolve from 'rollup-plugin-node-resolve' -import commonjs from 'rollup-plugin-commonjs' -import { uglify } from 'rollup-plugin-uglify' -import { sizeSnapshot } from 'rollup-plugin-size-snapshot' +import { crawl } from 'recrawl-sync' + +import dts from 'rollup-plugin-dts' +import babel from '@rollup/plugin-babel' +import esbuild from 'rollup-plugin-esbuild' +import resolve from '@rollup/plugin-node-resolve' +import commonjs from '@rollup/plugin-commonjs' const root = process.platform === 'win32' ? path.resolve('/') : '/' const external = id => !id.startsWith('.') && !id.startsWith(root) -const extensions = ['.js', '.jsx', '.ts', '.tsx'] -const getBabelOptions = ({ useESModules }, targets) => ({ - babelrc: false, - extensions, - exclude: '**/node_modules/**', - runtimeHelpers: true, - presets: [ - ['@babel/preset-env', { loose: true, modules: false, targets }], - '@babel/preset-react', - '@babel/preset-typescript', - ], - plugins: [ - ['@babel/proposal-class-properties', { loose: true }], - ['@babel/plugin-proposal-object-rest-spread', { loose: true }], - ['transform-react-remove-prop-types', { removeImport: true }], - ['@babel/transform-runtime', { regenerator: false, useESModules }], - ], +const extensions = ['.tsx', '.ts', '.js'] +const packages = readPackages() +const packageNames = Object.keys(packages) + +// Every module in the "input" directory gets its own bundle. +export const multiBundle = ({ + input = 'src', + output = 'dist', + ...config +} = {}) => + fs.readdirSync(input).reduce( + (configs, file) => + configs.concat( + bundle({ + input: path.join(input, file), + output: path.join(output, file.replace(/\.tsx?$/, '.js')), + ...config, + }) + ), + [] + ) + +const getBundleConfig = ({ + input = 'src/index.ts', + output = 'dist/index.js', + sourcemap = true, + sourcemapExcludeSources = true, + sourceRoot = path.dirname(input), +} = {}) => ({ + input, + output, + sourcemap, + sourcemapExcludeSources, + sourceRoot, }) -function createConfig(entry, out) { +export const bundle = config => { + config = getBundleConfig(config) return [ - { - input: `./src/${entry}/index`, - output: { file: `dist/${out}.js`, format: 'esm' }, - external, - plugins: [ - babel( - getBabelOptions( - { useESModules: true }, - '>1%, not dead, not ie 11, not op_mini all' - ) - ), - sizeSnapshot(), - resolve({ extensions }), - ], - }, - { - input: `./src/${entry}/index`, - output: { file: `dist/${out}.cjs.js`, format: 'cjs' }, - external, - plugins: [ - babel(getBabelOptions({ useESModules: false })), - sizeSnapshot(), - resolve({ extensions }), - ], - }, + esmBundle(config), + cjsBundle(config), + dtsBundle(config, 'es'), // ] } -function createCjs(entry, out) { - return [ - { - input: `./src/${entry}/index`, - output: { file: `dist/${out}.js`, format: 'cjs' }, - external, - plugins: [ - babel( - getBabelOptions( - { useESModules: true }, - '>1%, not dead, not ie 11, not op_mini all' - ) - ), - sizeSnapshot(), - resolve({ extensions }), - ], +export const esmBundle = config => ({ + input: config.input, + output: { + file: config.output, + format: 'esm', + paths: rewritePaths(), + sourcemap: config.sourcemap, + sourcemapPathTransform: rewriteSourcePaths(config), + sourcemapExcludeSources: config.sourcemapExcludeSources, + }, + external, + plugins: [esbuild({ target: 'es2018' })], +}) + +export const cjsBundle = config => ({ + input: config.input, + output: { + file: config.output.replace(/\.js$/, '.cjs.js'), + format: 'cjs', + paths: rewritePaths({ cjs: true }), + sourcemap: config.sourcemap, + sourcemapPathTransform: rewriteSourcePaths(config), + sourcemapExcludeSources: config.sourcemapExcludeSources, + }, + external, + plugins: [esbuild({ target: 'es2018' })], +}) + +// Used for the ".umd" bundle +const globals = { + react: 'React', + 'react-dom': 'ReactDOM', + 'prop-types': 'PropTypes', + 'react-spring': 'ReactSpring', +} + +export const umdBundle = (name, config) => { + config = getBundleConfig(config) + return { + input: config.input, + output: { + file: config.output.replace(/\.js$/, '.umd.js'), + format: 'umd', + name, + globals, + sourcemap: true, }, + external: Object.keys(globals), + plugins: [ + resolve({ extensions: ['.js', '.ts', '.tsx'] }), + commonjs({ include: /node_modules/ }), + esbuild({ target: 'es2018' }), + babel({ + presets: [['@babel/env', { targets: 'defaults' }]], + babelHelpers: 'bundled', + }), + ], + } +} + +export const dtsBundle = (config, format) => ({ + input: config.input, + output: [ { - input: `./src/${entry}/index`, - output: { file: `dist/${out}.cjs.js`, format: 'cjs' }, - external, - plugins: [ - babel(getBabelOptions({ useESModules: false })), - sizeSnapshot(), - resolve({ extensions }), - ], + file: config.output.replace( + /\.js$/, + (format == 'cjs' ? '.cjs' : '') + '.d.ts' + ), + format, + paths: rewritePaths({ + cjs: format == 'cjs', + }), }, - ] + ], + plugins: [dts()], + external, +}) + +const pkgCache = Object.create(null) +const readPackageJson = dir => + pkgCache[dir] || + (pkgCache[dir] = fs.readJsonSync(path.join(dir, 'package.json'))) + +const pkg = fs.readJsonSync(path.resolve('package.json')) +const rewritePaths = (opts = {}) => { + const deps = pkg.dependencies + + const locals = Object.entries(deps).filter( + entry => entry[1].startsWith('link:') && (entry[1] = entry[1].slice(5)) + ) + const localPkgs = locals.reduce((pkgs, [name, version]) => { + pkgs[name] = readPackageJson(path.resolve(version)) + return pkgs + }, Object.create(null)) + + const resolveLocal = modulePath => { + for (const [name, version] of locals) { + if (modulePath == name || modulePath.startsWith(name + '/')) { + const dep = localPkgs[name] + return modulePath.replace(name, dep.name) + } + } + } + + return modulePath => { + let depId = resolveLocal(modulePath) + if (!depId) { + return modulePath + } + if (opts.cjs) { + const name = packageNames.find(name => name === depId) + if (name) { + depId = path.join(name, packages[name].main) + } + } + return depId + } } -export default [ - ...createConfig('targets/web', 'web'), - ...createConfig('targets/native', 'native'), - ...createConfig('targets/universal', 'universal'), - ...createConfig('targets/konva', 'konva'), - ...createConfig('targets/three', 'three'), - ...createConfig('targets/zdog', 'zdog'), - { - input: `./src/targets/cookbook/index`, - output: { file: `dist/cookbook.js`, format: 'esm' }, - external, - plugins: [ - babel( - getBabelOptions( - { useESModules: true }, - '>1%, not dead, not ie 11, not op_mini all' - ) - ), - resolve({ extensions }), - ], - }, - ...createCjs('renderprops/targets/web', 'renderprops'), - ...createCjs('renderprops/addons', 'renderprops-addons'), - ...createCjs('renderprops/targets/native', 'renderprops-native'), - ...createCjs('renderprops/targets/universal', 'renderprops-universal'), - ...createCjs('renderprops/targets/konva', 'renderprops-konva'), -] +const rewriteSourcePaths = config => { + const outToIn = path.relative( + path.dirname(config.output), + path.dirname(config.input) + ) + return file => + path.join(config.sourceRoot || '', path.relative(outToIn, file)) +} + +function readPackages() { + return crawl('.', { + only: ['dist/package.json'], + ignore: ['node_modules'], + }).reduce((packages, jsonPath) => { + const json = fs.readJsonSync(jsonPath) + packages[json.name] = json + return packages + }, {}) +} diff --git a/scripts/prepare.js b/scripts/prepare.js new file mode 100644 index 0000000000..ad4cad693a --- /dev/null +++ b/scripts/prepare.js @@ -0,0 +1,299 @@ +const { relative, resolve, join, dirname } = require('path') +const { rewritePaths } = require('typescript-rewrite-paths') +const { crawl } = require('recrawl-sync') +const sortPackageJson = require('sort-package-json') +const chalk = require('chalk') +const execa = require('execa') +const fs = require('fs-extra') + +const { log } = console +const { isArray } = Array + +const union = (a, b) => Array.from(new Set(a.concat(b))) +const isObject = x => !!x && x.constructor.name === 'Object' + +const SRC = 'src' +const DIST = 'dist' +const PJ = 'package.json' +const RS = '@react-spring' + +// Packages compatible with react-native +const RN_PKG = /\/(native|core|animated|shared)$/ + +const lernaJson = fs.readJsonSync('lerna.json') + +// Read all "package.json" modules in advance. +const readPackages = rootJson => + crawl('.', { + only: rootJson.workspaces.packages.map(path => join(path, PJ)), + skip: ['.*', 'node_modules'], + }).reduce((packages, pkgJsonPath) => { + const pkgDir = dirname(pkgJsonPath) + const pkg = fs.readJsonSync(pkgJsonPath) + Object.defineProperty(pkg, 'dir', { value: pkgDir }) + packages[pkg.name] = pkg + return packages + }, {}) + +// Executed by "lerna publish" and "lerna bootstrap" +async function prepare() { + process.chdir(resolve(__dirname, '..')) + const rootJson = await fs.readJson(PJ) + const packages = readPackages(rootJson) + + // Package-specific fields to delete + const deletions = { + [`${RS}/animated`]: ['keywords'], + [`${RS}/shared`]: ['keywords'], + } + + // Package-specific fields to override + const overrides = { + [`${RS}/web`]: { + jsdelivr: 'dist/index.umd.js', + }, + } + + // The pipeline of changes + const preparePackage = async pkg => { + const { postinstall } = pkg.scripts || {} + deleteFields(pkg, ['private', 'scripts', 'devDependencies']) + if (postinstall) setScript(pkg, 'postinstall', postinstall) + useDefaultFields(pkg, ['description']) + useFields(pkg, [ + 'license', + 'author', + 'maintainers', + 'repository', + 'keywords', + ]) + pkg.version = lernaJson.version + pkg.publishConfig = rootJson.publishConfig + setHomepage(pkg) + setEntryModules(pkg) + await rewriteLocalDeps(pkg) + linkCjsTypes(pkg) + useOwnFiles(pkg, ['README.md', '@types']) + useFiles(pkg, ['LICENSE', '.npmignore']) + deleteFields(pkg, deletions[pkg.name]) + assignFields(pkg, overrides[pkg.name]) + savePackage(pkg) + } + + // Save the dist-only "package.json" + const savePackage = pkg => { + fs.ensureDirSync(join(pkg.dir, DIST)) + fs.writeJsonSync(join(pkg.dir, DIST, PJ), sortPackageJson(pkg), { + spaces: ' ', + }) + } + + const setHomepage = pkg => { + pkg.homepage = rootJson.homepage + if (pkg.name !== 'react-spring') { + pkg.homepage = pkg.homepage.replace( + '#readme', + `/tree/v9/${pkg.dir}#readme` + ) + } + } + + // Copy over "postinstall" scripts. + const setScript = (pkg, name, script) => { + if (!pkg.scripts) pkg.scripts = {} + pkg.scripts[name] = script + } + + // Ensure "package.json" points to the correct modules. + const setEntryModules = pkg => { + const main = pkg.main + if (!main) { + throw Error('pkg.main must exist') + } + + const srcDir = new RegExp(`^${SRC}/`) + const tsxExt = /\.tsx?$/ + + pkg.main = main.replace(srcDir, '').replace(tsxExt, '.cjs.js') + pkg.module = pkg.main.endsWith('.cjs.js') + ? pkg.main.replace(/\.cjs\./, '.') + : void 0 + pkg.types = + pkg.types || tsxExt.test(main) + ? (pkg.types || main.replace(tsxExt, '.d.ts')).replace(srcDir, '') + : void 0 + + // Packages compatible with "react-native" provide an uncompiled main module. + if (RN_PKG.test(pkg.name)) { + pkg['react-native'] = { + [pkg.module]: pkg.name.endsWith('native') ? 'src/native.ts' : main, + } + } + } + + // Publish the source code for sourcemaps and for bundlers + // (like Metro) that ignore pre-existing sourcemaps. + const copySourceFiles = async (pkg, rewritePath) => { + if (pkg.name == 'react-spring') return + if (pkg.name.endsWith('shared')) return + const srcDir = join(pkg.dir, SRC) + const distDir = join(pkg.dir, DIST, SRC) + + // Include "typescript" in devDependencies + const rootDeps = rootJson.devDependencies + pkg.devDependencies = { + typescript: rootDeps.typescript, + } + + // Copy every "src" module (except for tests and declarations) + const files = crawl(srcDir, { + skip: ['*.d.ts', '*.test.*', '__(tests|fixtures|mocks|snapshots)__'], + }) + files.forEach(file => { + let content = fs.readFileSync(join(srcDir, file), 'utf8') + if (rewritePath && /\.[tj]sx?$/.test(file)) { + content = rewritePaths(content, rewritePath) + } + const distPath = join(distDir, file) + fs.ensureDirSync(dirname(distPath)) + fs.writeFileSync(distPath, content) + }) + } + + // Read the package.json of a local dependency + const readLocalDep = (pkg, localVersion) => { + if (localVersion.startsWith('link:')) { + const pkgJsonPath = resolve(pkg.dir, localVersion.slice(5), PJ) + return fs.readJsonSync(pkgJsonPath) + } + } + + // Rename dependency aliases to their full "@react-spring/xxx" name, + // and replace "link:" versions with actual versions + const rewriteLocalDeps = async pkg => { + await copySourceFiles(pkg, path => { + const deps = pkg.dependencies + if (deps) { + for (const localId in deps) { + const dep = readLocalDep(pkg, deps[localId]) + if (!dep) continue + if (path == localId || path.startsWith(localId + '/')) { + return path.replace(localId, dep.name) + } + } + } + }) + + // Replace "link:" versions with (A) exact versions for canary and beta releases, + // or with (B) caret ranges for actual releases. + const exactRE = /-(rc|canary|beta)\./ + const deps = pkg.dependencies + if (deps) { + const names = Object.keys(packages) + for (let localId in deps) { + const localVersion = deps[localId] + const { name: depId } = readLocalDep(pkg, localVersion) || {} + + const dep = packages[depId] + if (dep) { + const { version } = packages[depId] + deps[depId] = (exactRE.test(version) ? '' : '^') + version + if (localId !== depId) { + delete deps[localId] + } + + // Link "dist" packages together. + const linkDir = join(pkg.dir, DIST, 'node_modules') + const linkPath = join(linkDir, depId) + const depPath = join(dep.dir, dep.main ? DIST : '') + fs.ensureSymlinkSync(depPath, linkPath) + } + } + } + } + + const linkCjsTypes = pkg => + fs.readdirSync(join(pkg.dir, DIST)).forEach(name => { + if (name.endsWith('.d.ts') && !name.endsWith('.cjs.d.ts')) { + const dest = join(pkg.dir, DIST, name.replace(/\.d\.ts$/, '.cjs.d.ts')) + fs.removeSync(dest) + fs.ensureSymlinkSync(name, dest) + } + }) + + // Copy files from the monorepo root. + const useFiles = (pkg, files) => + files.forEach(file => { + fs.copySync(file, join(pkg.dir, DIST, file)) + }) + + // Copy files from the package root. + const useOwnFiles = (pkg, files) => + files.forEach(file => { + const srcPath = join(pkg.dir, file) + const distPath = join(pkg.dir, DIST, file) + try { + fs.removeSync(distPath) + + // Avoid copying symlinks. + if (fs.lstatSync(srcPath).isDirectory()) { + fs.copySync(srcPath, distPath) + } else { + fs.writeFileSync(distPath, fs.readFileSync(srcPath)) + } + } catch {} + }) + + // Merge fields from the root "package.json" + const useFields = (pkg, fields) => + fields.forEach(field => { + const value = pkg[field] + const rootValue = rootJson[field] + if (isObject(rootValue)) { + pkg[field] = isObject(value) ? { ...value, ...rootValue } : rootValue + } else if (isArray(rootValue)) { + pkg[field] = isArray(value) ? union(value, rootValue) : rootValue + } else { + pkg[field] = rootValue + } + }) + + // Safely merge fields from the root "package.json" + const useDefaultFields = (pkg, fields) => + fields.forEach(field => { + if (pkg[field] == null) { + pkg[field] = rootJson[field] + } + }) + + const deleteFields = (pkg, fields) => + fields && + fields.forEach(field => { + delete pkg[field] + }) + + const assignFields = (pkg, fields) => + fields && + Object.keys(fields).forEach(key => { + pkg[key] = fields[key] + }) + + log('') + log(chalk.yellow(lernaJson.version)) + log('') + await Promise.all( + Object.keys(packages).map(name => { + if (name == `${RS}/types`) { + return // This package is published as-is. + } + const pkg = packages[name] + log(chalk.cyan(name)) + log('./' + pkg.dir) + log('') + fs.ensureDirSync(join(pkg.dir, DIST)) + return preparePackage(pkg) + }) + ) +} + +prepare().catch(console.error) diff --git a/scripts/release.js b/scripts/release.js new file mode 100644 index 0000000000..599e931f38 --- /dev/null +++ b/scripts/release.js @@ -0,0 +1,171 @@ +const { prompt } = require('enquirer') +const chalk = require('chalk') +const execa = require('execa') +const sade = require('sade') +const path = require('path') + +const lernaBin = './node_modules/.bin/lerna' + +const cli = sade('release [version]', true) + .version('1.0.0') + .describe('Release a version') + .option('--canary', 'Release the last commit without a tag') + .option('--dry-run, -n', 'Disable side effects for testing') + .option('--no-commit', 'Release the current version as-is') + .option('--no-clean', 'Skip "yarn clean" for faster publishing') + .action((version, opts) => { + opts.dry = !!opts['dry-run'] + if (opts.dry) { + console.warn('⚠️ NOTE: Dry run mode active.') + } + process.chdir(path.dirname(__dirname)) + return opts.canary ? publishCanary(opts) : publish(opts, version) + }) + +Promise.resolve(cli.parse(process.argv)).catch(err => { + if (!err.command) { + console.error(err) + } else if (err.stderr) { + console.error(err.stderr) + } + process.exit(1) +}) + +function confirmPublish() { + exec(` + ${lernaBin} exec --concurrency 1 --stream + -- cd dist + && npm pack --dry-run + && cat package.json + `) + console.log('\n') + return ask('Ready to publish?', true) +} + +async function publish(opts, version) { + exec(`${lernaBin} version ${version}`) + process.on('exit', () => { + if (opts.dry) { + const { stdout: tag } = exec('git describe --exact-match --abbrev=0', { + silent: true, + }) + deleteTag(tag) + undoCommit() + } + }) + + updateLockfile(opts) + + if (await confirmPublish()) { + const distTag = /-rc\.\d+$/.test(version) ? '--dist-tag next' : '' + execDry(`${lernaBin} publish from-package ${distTag}`, opts) + } +} + +async function publishCanary(opts) { + // Publish the canary with a temporary tag. + const publishUntagged = () => + exec(` + ${lernaBin} exec + -- cd dist + && npm publish ${opts.dry ? '--dry-run' : '--tag tmp'} + ${opts.dry ? '' : '&& npm dist-tag rm $LERNA_PACKAGE_NAME tmp'} + `) + + if (opts.commit === false) { + return publishUntagged() + } + + const lastVersion = require('../lerna.json').version + const match = + /([^-]+)(?:-canary\.([^\.]+)\.([^\.]+))?/.exec(lastVersion) || [] + + let version = await ask('Version', match[1]) + + const pr = await ask('PR number', match[2]) + const build = await ask( + 'Build number', + pr !== match[2] ? 1 : Number(match[3] || 0) + 1 + ) + + const head = exec('git rev-parse HEAD', { silent: true }).stdout + const commit = await ask('Commit hash', head.slice(0, 7)) + + // Create the version commit. + version = `${version}-canary.${pr}.${build}.${commit}` + exec(`${lernaBin} version ${version} --yes`) + + let finished = false + process.on('exit', () => { + if (opts.dry || !finished) { + deleteTag('v' + version) + undoCommit(commit => commit == version) + } + }) + + updateLockfile(opts) + + if (await confirmPublish()) { + finished = true + publishUntagged() + } +} + +function deleteTag(tag) { + exec(`git tag -d ${tag}`) +} + +function updateLockfile(opts = {}) { + if (opts.clean !== false) { + exec(`yarn clean`) + } + + // Ensure "yarn.lock" is up-to-date. + exec(`yarn --force`) + + // Merge the "yarn.lock" changes into the version commit. + exec(`git add yarn.lock`) + exec(`git commit --amend --no-edit`) + + exec(`yarn build`) + + exec(`node ./scripts/prepare`) +} + +function undoCommit(shouldUndo) { + if (shouldUndo) { + // Pass the commit title to the `shouldUndo` function. + const { stdout } = exec(`git --no-pager show -s --format=%s HEAD`, { + silent: true, + }) + if (!shouldUndo(stdout)) return + } + exec(`git reset --hard HEAD^`) +} + +function execDry(cmd, opts) { + if (opts.dry) { + console.log(`\nSkipping command:\n ${chalk.yellow(cmd)}\n`) + } else { + exec(cmd, opts) + } +} + +function exec(cmd, { silent } = {}) { + cmd = cmd.trim().replace(/\n /g, '\n') + if (!silent) console.log(`\nExecuting command:\n ${chalk.green(cmd)}\n`) + cmd = cmd.split(/[\s]+/g) + return execa.sync(cmd[0], cmd.slice(1), { + stdio: silent ? 'pipe' : 'inherit', + }) +} + +async function ask(message, initial) { + const { value } = await prompt({ + type: typeof initial == 'boolean' ? 'confirm' : 'input', + name: 'value', + message, + initial, + }) + return value +} diff --git a/setupTests.js b/setupTests.js deleted file mode 100644 index 7209634daf..0000000000 --- a/setupTests.js +++ /dev/null @@ -1,5 +0,0 @@ -const Enzyme = require('enzyme') -const EnzymeAdapter = require('enzyme-adapter-react-16') - -// Setup enzyme's react adapter -Enzyme.configure({ adapter: new EnzymeAdapter() }) diff --git a/src/animated/Animated.ts b/src/animated/Animated.ts deleted file mode 100644 index 433b06e624..0000000000 --- a/src/animated/Animated.ts +++ /dev/null @@ -1,77 +0,0 @@ -export default abstract class Animated { - public abstract getValue(): any - public getAnimatedValue() { - return this.getValue() - } - - protected payload?: Payload - public getPayload() { - return this.payload || this - } - - public attach(): void {} - - public detach(): void {} - - private children: Animated[] = [] - - public getChildren() { - return this.children - } - - public addChild(child: Animated) { - if (this.children.length === 0) this.attach() - this.children.push(child) - } - - public removeChild(child: Animated) { - const index = this.children.indexOf(child) - this.children.splice(index, 1) - if (this.children.length === 0) this.detach() - } -} - -export abstract class AnimatedArray extends Animated< - Payload[] -> { - protected payload = [] as Payload[] - - attach = () => - this.payload.forEach(p => p instanceof Animated && p.addChild(this)) - - detach = () => - this.payload.forEach(p => p instanceof Animated && p.removeChild(this)) -} - -export abstract class AnimatedObject< - Payload extends { [key: string]: unknown } -> extends Animated { - protected payload = {} as Payload - - getValue(animated = false) { - const payload: { [key: string]: any } = {} - for (const key in this.payload) { - const value = this.payload[key] - if (animated && !(value instanceof Animated)) continue - payload[key] = - value instanceof Animated - ? value[animated ? 'getAnimatedValue' : 'getValue']() - : value - } - return payload - } - - getAnimatedValue() { - return this.getValue(true) - } - - attach = () => - Object.values(this.payload).forEach( - s => s instanceof Animated && s.addChild(this) - ) - - detach = () => - Object.values(this.payload).forEach( - s => s instanceof Animated && s.removeChild(this) - ) -} diff --git a/src/animated/AnimatedInterpolation.ts b/src/animated/AnimatedInterpolation.ts deleted file mode 100644 index f80cde66ca..0000000000 --- a/src/animated/AnimatedInterpolation.ts +++ /dev/null @@ -1,64 +0,0 @@ -import { SpringValue } from '../types/animated' -import { InterpolationConfig } from '../types/interpolation' -import Animated, { AnimatedArray } from './Animated' -import createInterpolator, { ExtrapolateType } from './createInterpolator' - -type IpValue = string | number | (string | number)[] -// The widest possible interpolator type, possible if interpolate() is passed -// a custom interpolation function. -type Interpolator = (...input: IpValue[]) => IpValue - -export default class AnimatedInterpolation extends AnimatedArray - implements SpringValue { - calc: Interpolator - - constructor( - parents: Animated | Animated[], - range: number[] | InterpolationConfig | Interpolator, - output?: (number | string)[], - extrapolate?: ExtrapolateType - ) { - super() - this.payload = - parents instanceof AnimatedArray && - !(parents instanceof AnimatedInterpolation) - ? (parents.getPayload() as Animated[]) - : Array.isArray(parents) - ? parents - : [parents] - this.calc = createInterpolator( - range as number[], - output!, - extrapolate - ) as Interpolator - } - - public getValue() { - return this.calc(...this.payload.map(value => value.getValue())) - } - - public updateConfig( - range: number[] | InterpolationConfig | Interpolator, - output?: (number | string)[], - extrapolate?: ExtrapolateType - ) { - this.calc = createInterpolator( - range as number[], - output!, - extrapolate - ) as Interpolator - } - - public interpolate( - range: number[] | InterpolationConfig | ((...args: any[]) => IpValue), - output?: (number | string)[], - extrapolate?: ExtrapolateType - ): AnimatedInterpolation { - return new AnimatedInterpolation( - this, - range as number[], - output!, - extrapolate - ) - } -} diff --git a/src/animated/AnimatedProps.ts b/src/animated/AnimatedProps.ts deleted file mode 100644 index 46c470c01b..0000000000 --- a/src/animated/AnimatedProps.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { AnimatedObject } from './Animated' -import * as Globals from './Globals' - -/** - * Wraps the `style` property with `AnimatedStyle`. - */ -export default class AnimatedProps< - Props extends object & { style?: any } = {} -> extends AnimatedObject { - update: () => void - - constructor(props: Props, callback: () => void) { - super() - this.payload = !props.style - ? props - : { - ...props, - style: Globals.createAnimatedStyle(props.style), - } - this.update = callback - this.attach() - } -} diff --git a/src/animated/AnimatedStyle.ts b/src/animated/AnimatedStyle.ts deleted file mode 100644 index af78865076..0000000000 --- a/src/animated/AnimatedStyle.ts +++ /dev/null @@ -1,14 +0,0 @@ -import Animated, { AnimatedObject } from './Animated' -import * as Globals from './Globals' - -export default class AnimatedStyle< - Payload extends object & { transform?: Animated } = {} -> extends AnimatedObject { - constructor(style: Payload = {} as Payload) { - super() - if (style.transform && !(style.transform instanceof Animated)) { - style = Globals.applyAnimatedValues.transform(style) - } - this.payload = style - } -} diff --git a/src/animated/AnimatedValue.ts b/src/animated/AnimatedValue.ts deleted file mode 100644 index c323ebafbd..0000000000 --- a/src/animated/AnimatedValue.ts +++ /dev/null @@ -1,92 +0,0 @@ -import { SpringValue } from '../types/animated' -import { InterpolationConfig } from '../types/interpolation' -import Animated from './Animated' -import AnimatedInterpolation from './AnimatedInterpolation' -import AnimatedProps from './AnimatedProps' -import { ExtrapolateType } from './createInterpolator' - -/** - * Animated works by building a directed acyclic graph of dependencies - * transparently when you render your Animated components. - * - * new Animated.Value(0) - * .interpolate() .interpolate() new Animated.Value(1) - * opacity translateY scale - * style transform - * View#234 style - * View#123 - * - * A) Top Down phase - * When an AnimatedValue is updated, we recursively go down through this - * graph in order to find leaf nodes: the views that we flag as needing - * an update. - * - * B) Bottom Up phase - * When a view is flagged as needing an update, we recursively go back up - * in order to build the new value that it needs. The reason why we need - * this two-phases process is to deal with composite props such as - * transform which can receive values from multiple parents. - */ - -function addAnimatedStyles( - node: Animated | AnimatedProps, - styles: Set -) { - if ('update' in node) { - styles.add(node) - } else { - node.getChildren().forEach(child => addAnimatedStyles(child, styles)) - } -} - -export default class AnimatedValue extends Animated implements SpringValue { - private animatedStyles = new Set() - - public value: number | string - public startPosition: number | string - public lastPosition: number | string - public lastVelocity?: number - public startTime?: number - public lastTime?: number - public done = false - - constructor(value: number | string) { - super() - this.value = value - this.startPosition = value - this.lastPosition = value - } - - private flush() { - if (this.animatedStyles.size === 0) { - addAnimatedStyles(this, this.animatedStyles) - } - this.animatedStyles.forEach(animatedStyle => animatedStyle.update()) - } - - public clearStyles() { - this.animatedStyles.clear() - } - - public setValue = (value: number | string, flush = true) => { - this.value = value - if (flush) this.flush() - } - - public getValue() { - return this.value - } - - public interpolate( - range: number[] | InterpolationConfig | ((...args: any[]) => any), - output?: (number | string)[], - extrapolate?: ExtrapolateType - ): AnimatedInterpolation { - return new AnimatedInterpolation( - this, - range as number[], - output!, - extrapolate - ) - } -} diff --git a/src/animated/AnimatedValueArray.ts b/src/animated/AnimatedValueArray.ts deleted file mode 100644 index 81a5f4d24e..0000000000 --- a/src/animated/AnimatedValueArray.ts +++ /dev/null @@ -1,34 +0,0 @@ -import { SpringValue } from '../types/animated' -import { InterpolationConfig } from '../types/interpolation' -import { AnimatedArray } from './Animated' -import AnimatedInterpolation from './AnimatedInterpolation' -import AnimatedValue from './AnimatedValue' - -export default class AnimatedValueArray extends AnimatedArray - implements SpringValue { - constructor(values: (string | number)[]) { - super() - this.payload = values.map(n => new AnimatedValue(n)) - } - - public setValue(value: (string | number)[] | string | number, flush = true) { - if (Array.isArray(value)) { - if (value.length === this.payload.length) { - value.forEach((v, i) => this.payload[i].setValue(v, flush)) - } - } else { - this.payload.forEach(p => p.setValue(value, flush)) - } - } - - public getValue() { - return this.payload.map(v => v.getValue()) - } - - public interpolate( - range: number[] | InterpolationConfig | ((...args: any[]) => any), - output?: (number | string)[] - ): AnimatedInterpolation { - return new AnimatedInterpolation(this, range as number[], output!) - } -} diff --git a/src/animated/Controller.test.ts b/src/animated/Controller.test.ts deleted file mode 100644 index c372ae2528..0000000000 --- a/src/animated/Controller.test.ts +++ /dev/null @@ -1,48 +0,0 @@ -import createMockRaf from 'mock-raf' -import Controller from './Controller' -import * as Globals from './Globals' - -test('update simple value', () => { - const mockRaf = createMockRaf() - Globals.injectFrame(mockRaf.raf, mockRaf.cancel) - Globals.injectNow(mockRaf.now) - - const ctrl = new Controller<{ x: number; y?: number }>() - ctrl.update({ x: 0 }) - ctrl.start() - expect(ctrl.getValues().x.getValue()).toBe(0) - - ctrl.update({ x: 100, y: 50 }) - expect(ctrl.getValues().x.getValue()).toBe(0) - - ctrl.start() - - mockRaf.step({ count: 10 }) - expect(ctrl.getValues().x.getValue()).toBeCloseTo(56.4) - - mockRaf.step({ count: 100 }) - expect(ctrl.getValues().x.getValue()).toBe(100) -}) - -test('update array value', () => { - const mockRaf = createMockRaf() - Globals.injectFrame(mockRaf.raf, mockRaf.cancel) - Globals.injectNow(mockRaf.now) - - const ctrl = new Controller<{ x: number[] }>() - ctrl.update({ x: [0, 0] }) - ctrl.start() - expect(ctrl.getValues().x.getValue()).toEqual([0, 0]) - - ctrl.update({ x: [10, 20] }) - expect(ctrl.getValues().x.getValue()).toEqual([0, 0]) - - ctrl.start() - - mockRaf.step({ count: 10 }) - expect(ctrl.getValues().x.getValue()[0]).toBeCloseTo(5.64) - expect(ctrl.getValues().x.getValue()[1]).toBeCloseTo(11.28) - - mockRaf.step({ count: 100 }) - expect(ctrl.getValues().x.getValue()).toEqual([10, 20]) -}) diff --git a/src/animated/Controller.ts b/src/animated/Controller.ts deleted file mode 100644 index 0f1da8dc7c..0000000000 --- a/src/animated/Controller.ts +++ /dev/null @@ -1,379 +0,0 @@ -import { - callProp, - interpolateTo, - is, - toArray, - withDefault, -} from '../shared/helpers' -import AnimatedValue from './AnimatedValue' -import AnimatedValueArray from './AnimatedValueArray' -import { start, stop } from './FrameLoop' -import { colorNames, interpolation as interp, now } from './Globals' - -type FinishedCallback = (finished?: boolean) => void - -type AnimationsFor

= { [Key in keyof P]: any } - -type ValuesFor

= { [Key in keyof P]: any } - -type InterpolationsFor

= { - [Key in keyof P]: P[Key] extends ArrayLike - ? AnimatedValueArray - : AnimatedValue -} - -let G = 0 -class Controller

{ - id: number - - idle = true - hasChanged = false - guid = 0 - local = 0 - props: P = {} as P - merged: any = {} - animations = {} as AnimationsFor

- interpolations = {} as InterpolationsFor

- values = {} as ValuesFor

- configs: any = [] - listeners: FinishedCallback[] = [] - queue: any[] = [] - localQueue?: any[] - - constructor() { - this.id = G++ - } - - /** update(props) - * This function filters input props and creates an array of tasks which are executed in .start() - * Each task is allowed to carry a delay, which means it can execute asnychroneously */ - update(args?: P) { - //this._id = n + this.id - - if (!args) return this - // Extract delay and the to-prop from props - const { delay = 0, to, ...props } = interpolateTo(args) as any - if (is.arr(to) || is.fun(to)) { - // If config is either a function or an array queue it up as is - this.queue.push({ ...props, delay, to }) - } else if (to) { - // Otherwise go through each key since it could be delayed individually - let ops: any = {} - Object.entries(to).forEach(([k, v]) => { - // Fetch delay and create an entry, consisting of the to-props, the delay, and basic props - const entry = { to: { [k]: v }, delay: callProp(delay, k), ...props } - const previous = ops[entry.delay] && ops[entry.delay].to - ops[entry.delay] = { - ...ops[entry.delay], - ...entry, - to: { ...previous, ...entry.to }, - } - }) - this.queue = Object.values(ops) - } - // Sort queue, so that async calls go last - this.queue = this.queue.sort((a, b) => a.delay - b.delay) - - // Diff the reduced props immediately (they'll contain the from-prop and some config) - this.diff(props) - return this - } - - /** start(onEnd) - * This function either executes a queue, if present, or starts the frameloop, which animates */ - start(onEnd?: FinishedCallback) { - // If a queue is present we must excecute it - if (this.queue.length) { - this.idle = false - - // Updates can interrupt trailing queues, in that case we just merge values - if (this.localQueue) { - this.localQueue.forEach(({ from = {}, to = {} }) => { - if (is.obj(from)) this.merged = { ...from, ...this.merged } - if (is.obj(to)) this.merged = { ...this.merged, ...to } - }) - } - - // The guid helps us tracking frames, a new queue over an old one means an override - // We discard async calls in that caseÍ - const local = (this.local = ++this.guid) - const queue = (this.localQueue = this.queue) - this.queue = [] - - // Go through each entry and execute it - queue.forEach(({ delay, ...props }, index) => { - const cb: FinishedCallback = finished => { - if (index === queue.length - 1 && local === this.guid && finished) { - this.idle = true - if (this.props.onRest) this.props.onRest(this.merged) - } - if (onEnd) onEnd() - } - - // Entries can be delayed, ansyc or immediate - let async = is.arr(props.to) || is.fun(props.to) - if (delay) { - setTimeout(() => { - if (local === this.guid) { - if (async) this.runAsync(props, cb) - else this.diff(props).start(cb) - } - }, delay) - } else if (async) this.runAsync(props, cb) - else this.diff(props).start(cb) - }) - } - // Otherwise we kick of the frameloop - else { - if (is.fun(onEnd)) this.listeners.push(onEnd) - if (this.props.onStart) this.props.onStart() - start(this) - } - return this - } - - stop(finished?: boolean) { - this.listeners.forEach(onEnd => onEnd(finished)) - this.listeners = [] - return this - } - - /** Pause sets onEnd listeners free, but also removes the controller from the frameloop */ - pause(finished?: boolean) { - this.stop(true) - if (finished) stop(this) - return this - } - - runAsync({ delay, ...props }: P, onEnd: FinishedCallback) { - const local = this.local - // If "to" is either a function or an array it will be processed async, therefor "to" should be empty right now - // If the view relies on certain values "from" has to be present - let queue = Promise.resolve(undefined) - if (is.arr(props.to)) { - for (let i = 0; i < props.to.length; i++) { - const index = i - const fresh = { ...props, ...interpolateTo(props.to[index]) } - if (is.arr(fresh.config)) fresh.config = fresh.config[index] - queue = queue.then( - (): Promise | void => { - //this.stop() - if (local === this.guid) - return new Promise(r => this.diff(fresh).start(r)) - } - ) - } - } else if (is.fun(props.to)) { - let index = 0 - let last: Promise - queue = queue.then(() => - props - .to( - // next(props) - (p: P) => { - const fresh = { ...props, ...interpolateTo(p) } - if (is.arr(fresh.config)) fresh.config = fresh.config[index] - index++ - //this.stop() - if (local === this.guid) - return (last = new Promise(r => this.diff(fresh).start(r))) - return - }, - // cancel() - (finished = true) => this.stop(finished) - ) - .then(() => last) - ) - } - queue.then(onEnd) - } - - diff(props: any) { - this.props = { ...this.props, ...props } - let { - from = {}, - to = {}, - config = {}, - reverse, - attach, - reset, - immediate, - } = this.props - - // Reverse values when requested - if (reverse) { - ;[from, to] = [to, from] - } - - // This will collect all props that were ever set, reset merged props when necessary - this.merged = { ...from, ...this.merged, ...to } - - this.hasChanged = false - // Attachment handling, trailed springs can "attach" themselves to a previous spring - let target = attach && attach(this) - // Reduces input { name: value } pairs into animated values - this.animations = Object.entries(this.merged).reduce( - (acc, [name, value]) => { - // Issue cached entries, except on reset - let entry = acc[name] || {} - - // Figure out what the value is supposed to be - const isNumber = is.num(value) - const isString = - is.str(value) && - !value.startsWith('#') && - !/\d/.test(value) && - !colorNames[value] - const isArray = is.arr(value) - const isInterpolation = !isNumber && !isArray && !isString - - let fromValue = !is.und(from[name]) ? from[name] : value - let toValue = isNumber || isArray ? value : isString ? value : 1 - let toConfig = callProp(config, name) - if (target) toValue = target.animations[name].parent - - let parent = entry.parent, - interpolation = entry.interpolation, - toValues = toArray(target ? toValue.getPayload() : toValue), - animatedValues - - let newValue = value - if (isInterpolation) - newValue = interp({ - range: [0, 1], - output: [value as string, value as string], - })(1) - let currentValue = interpolation && interpolation.getValue() - - // Change detection flags - const isFirst = is.und(parent) - const isActive = - !isFirst && entry.animatedValues.some((v: AnimatedValue) => !v.done) - const currentValueDiffersFromGoal = !is.equ(newValue, currentValue) - const hasNewGoal = !is.equ(newValue, entry.previous) - const hasNewConfig = !is.equ(toConfig, entry.config) - - // Change animation props when props indicate a new goal (new value differs from previous one) - // and current values differ from it. Config changes trigger a new update as well (though probably shouldn't?) - if ( - reset || - (hasNewGoal && currentValueDiffersFromGoal) || - hasNewConfig - ) { - // Convert regular values into animated values, ALWAYS re-use if possible - if (isNumber || isString) - parent = interpolation = - entry.parent || new AnimatedValue(fromValue) - else if (isArray) - parent = interpolation = - entry.parent || new AnimatedValueArray(fromValue) - else if (isInterpolation) { - let prev = - entry.interpolation && - entry.interpolation.calc(entry.parent.value) - prev = prev !== void 0 && !reset ? prev : fromValue - if (entry.parent) { - parent = entry.parent - parent.setValue(0, false) - } else parent = new AnimatedValue(0) - const range = { output: [prev, value] } - if (entry.interpolation) { - interpolation = entry.interpolation - entry.interpolation.updateConfig(range) - } else interpolation = parent.interpolate(range) - } - - toValues = toArray(target ? toValue.getPayload() : toValue) - animatedValues = toArray(parent.getPayload()) - if (reset && !isInterpolation) parent.setValue(fromValue, false) - - this.hasChanged = true - // Reset animated values - animatedValues.forEach(value => { - value.startPosition = value.value - value.lastPosition = value.value - value.lastVelocity = isActive ? value.lastVelocity : undefined - value.lastTime = isActive ? value.lastTime : undefined - value.startTime = now() - value.done = false - value.animatedStyles.clear() - }) - - // Set immediate values - if (callProp(immediate, name)) { - parent.setValue(isInterpolation ? toValue : value, false) - } - - return { - ...acc, - [name]: { - ...entry, - name, - parent, - interpolation, - animatedValues, - toValues, - previous: newValue, - config: toConfig, - fromValues: toArray(parent.getValue()), - immediate: callProp(immediate, name), - initialVelocity: withDefault(toConfig.velocity, 0), - clamp: withDefault(toConfig.clamp, false), - precision: withDefault(toConfig.precision, 0.01), - tension: withDefault(toConfig.tension, 170), - friction: withDefault(toConfig.friction, 26), - mass: withDefault(toConfig.mass, 1), - duration: toConfig.duration, - easing: withDefault(toConfig.easing, (t: number) => t), - decay: toConfig.decay, - }, - } - } else { - if (!currentValueDiffersFromGoal) { - // So ... the current target value (newValue) appears to be different from the previous value, - // which normally constitutes an update, but the actual value (currentValue) matches the target! - // In order to resolve this without causing an animation update we silently flag the animation as done, - // which it technically is. Interpolations also needs a config update with their target set to 1. - if (isInterpolation) { - parent.setValue(1, false) - interpolation.updateConfig({ output: [newValue, newValue] }) - } - - parent.done = true - this.hasChanged = true - return { ...acc, [name]: { ...acc[name], previous: newValue } } - } - return acc - } - }, - this.animations - ) - - if (this.hasChanged) { - // Make animations available to frameloop - this.configs = Object.values(this.animations) - this.values = {} as ValuesFor

- this.interpolations = {} as InterpolationsFor

- for (let key in this.animations) { - this.interpolations[key] = this.animations[key].interpolation - this.values[key] = this.animations[key].interpolation.getValue() - } - } - return this - } - - destroy() { - this.stop() - this.props = {} as P - this.merged = {} - this.animations = {} as AnimationsFor

- this.interpolations = {} as InterpolationsFor

- this.values = {} as ValuesFor

- this.configs = [] - this.local = 0 - } - - getValues = () => this.interpolations -} - -export default Controller diff --git a/src/animated/FrameLoop.ts b/src/animated/FrameLoop.ts deleted file mode 100644 index ebfaeee55f..0000000000 --- a/src/animated/FrameLoop.ts +++ /dev/null @@ -1,152 +0,0 @@ -import Animated from './Animated' -import Controller from './Controller' -import { now, requestFrame, manualFrameloop } from './Globals' - -let active = false -const controllers = new Set() - -const update = () => { - if (!active) return false - let time = now() - for (let controller of controllers) { - let isActive = false - - for ( - let configIdx = 0; - configIdx < controller.configs.length; - configIdx++ - ) { - let config = controller.configs[configIdx] - let endOfAnimation, lastTime - for (let valIdx = 0; valIdx < config.animatedValues.length; valIdx++) { - let animation = config.animatedValues[valIdx] - - // If an animation is done, skip, until all of them conclude - if (animation.done) continue - - let from = config.fromValues[valIdx] - let to = config.toValues[valIdx] - let position = animation.lastPosition - let isAnimated = to instanceof Animated - let velocity = Array.isArray(config.initialVelocity) - ? config.initialVelocity[valIdx] - : config.initialVelocity - if (isAnimated) to = to.getValue() - - // Conclude animation if it's either immediate, or from-values match end-state - if (config.immediate) { - animation.setValue(to) - animation.done = true - continue - } - - // Break animation when string values are involved - if (typeof from === 'string' || typeof to === 'string') { - animation.setValue(to) - animation.done = true - continue - } - - if (config.duration !== void 0) { - /** Duration easing */ - position = - from + - config.easing((time - animation.startTime) / config.duration) * - (to - from) - endOfAnimation = time >= animation.startTime + config.duration - } else if (config.decay) { - /** Decay easing */ - position = - from + - (velocity / (1 - 0.998)) * - (1 - Math.exp(-(1 - 0.998) * (time - animation.startTime))) - endOfAnimation = Math.abs(animation.lastPosition - position) < 0.1 - if (endOfAnimation) to = position - } else { - /** Spring easing */ - lastTime = animation.lastTime !== void 0 ? animation.lastTime : time - velocity = - animation.lastVelocity !== void 0 - ? animation.lastVelocity - : config.initialVelocity - - // If we lost a lot of frames just jump to the end. - if (time > lastTime + 64) lastTime = time - // http://gafferongames.com/game-physics/fix-your-timestep/ - let numSteps = Math.floor(time - lastTime) - for (let i = 0; i < numSteps; ++i) { - let force = -config.tension * (position - to) - let damping = -config.friction * velocity - let acceleration = (force + damping) / config.mass - velocity = velocity + (acceleration * 1) / 1000 - position = position + (velocity * 1) / 1000 - } - - // Conditions for stopping the spring animation - let isOvershooting = - config.clamp && config.tension !== 0 - ? from < to - ? position > to - : position < to - : false - let isVelocity = Math.abs(velocity) <= config.precision - let isDisplacement = - config.tension !== 0 - ? Math.abs(to - position) <= config.precision - : true - endOfAnimation = isOvershooting || (isVelocity && isDisplacement) - animation.lastVelocity = velocity - animation.lastTime = time - } - - // Trails aren't done until their parents conclude - if (isAnimated && !config.toValues[valIdx].done) endOfAnimation = false - - if (endOfAnimation) { - // Ensure that we end up with a round value - if (animation.value !== to) position = to - animation.done = true - } else isActive = true - - animation.setValue(position) - animation.lastPosition = position - } - - // Keep track of updated values only when necessary - if (controller.props.onFrame) - controller.values[config.name] = config.interpolation.getValue() - } - // Update callbacks in the end of the frame - if (controller.props.onFrame) controller.props.onFrame(controller.values) - - // Either call onEnd or next frame - if (!isActive) { - controllers.delete(controller) - controller.stop(true) - } - } - - // Loop over as long as there are controllers ... - if (controllers.size) { - if (manualFrameloop) manualFrameloop() - else requestFrame(update) - } else { - active = false - } - return active -} - -const start = (controller: Controller) => { - if (!controllers.has(controller)) controllers.add(controller) - if (!active) { - active = true - if (manualFrameloop) requestFrame(manualFrameloop) - else requestFrame(update) - } -} - -const stop = (controller: Controller) => { - if (controllers.has(controller)) controllers.delete(controller) -} - -export { start, stop, update } diff --git a/src/animated/Globals.ts b/src/animated/Globals.ts deleted file mode 100644 index aa458b8709..0000000000 --- a/src/animated/Globals.ts +++ /dev/null @@ -1,75 +0,0 @@ -import { MutableRefObject, ReactType } from 'react' -import { InterpolationConfig } from '../types/interpolation' -import AnimatedStyle from './AnimatedStyle' - -type ApplyPropsFunction = (node?: any, props?: any) => undefined | false -type TransformFunction = (style: any) => any -export let applyAnimatedValues: { - fn: ApplyPropsFunction - transform: TransformFunction -} -export function injectApplyAnimatedValues( - fn: ApplyPropsFunction, - transform: TransformFunction -) { - applyAnimatedValues = { fn, transform } -} - -export let colorNames: { [key: string]: number } -export function injectColorNames(names: typeof colorNames) { - colorNames = names -} - -export let requestFrame: typeof window.requestAnimationFrame = cb => - typeof window !== 'undefined' ? window.requestAnimationFrame(cb) : -1 -export let cancelFrame: typeof window.cancelAnimationFrame = id => { - typeof window !== 'undefined' && window.cancelAnimationFrame(id) -} -export function injectFrame(raf: typeof requestFrame, caf: typeof cancelFrame) { - requestFrame = raf - cancelFrame = caf -} - -export let interpolation: ( - config: InterpolationConfig -) => (input: number) => string -export function injectStringInterpolator(fn: typeof interpolation) { - interpolation = fn -} - -export let now = () => Date.now() -export function injectNow(nowFn: typeof now) { - now = nowFn -} - -export let defaultElement: any -export function injectDefaultElement(el?: typeof defaultElement) { - defaultElement = el -} - -interface AnimatedApi { - ( - node: MutableRefObject, - mounted?: MutableRefObject, - forceUpdate?: () => void - ): - | T - | { - getNode(): T - setNativeProps(props: any): void - } -} -export let animatedApi: AnimatedApi = (node: any) => node.current -export function injectAnimatedApi(fn: typeof animatedApi) { - animatedApi = fn -} - -export let createAnimatedStyle: (style: any) => AnimatedStyle -export function injectCreateAnimatedStyle(factory: typeof createAnimatedStyle) { - createAnimatedStyle = factory -} - -export let manualFrameloop: any -export function injectManualFrameloop(callback: any) { - manualFrameloop = callback -} diff --git a/src/animated/createAnimatedComponent.test.tsx b/src/animated/createAnimatedComponent.test.tsx deleted file mode 100644 index 878e5363c3..0000000000 --- a/src/animated/createAnimatedComponent.test.tsx +++ /dev/null @@ -1,101 +0,0 @@ -import React, { forwardRef } from 'react' -import { cleanup, render } from 'react-testing-library' -import '../targets/web' -import { SpringValue } from '../types/animated' -import AnimatedValue from './AnimatedValue' -import animated from './createAnimatedComponent' - -afterEach(cleanup) - -describe('animated component', () => { - it('creates an HTML element from a tag name', () => { - const AnimatedH1 = animated('h1') - const { queryByTitle } = render( - - Bar - - ) - expect(queryByTitle('Foo')).toBeTruthy() - }) - - it('wraps a component', () => { - const Name = forwardRef< - HTMLHeadingElement, - { name: string; other: string; children: React.ReactNode } - >((props, ref) => ( -

- {props.children} -

- )) - const AnimatedName = animated(Name) - const child = new AnimatedValue('Animated Text') - const name = new AnimatedValue('name') - const { queryByTitle } = render( - } other="test"> - {child} - - ) - const el = queryByTitle('name')! - expect(el).toBeTruthy() - expect(el.textContent).toBe('Animated Text') - }) - - it('accepts Animated values in style prop', () => { - const AnimatedDiv = animated('div') - const opacity = new AnimatedValue(0) - const { queryByText } = render( - Text - ) - const div = queryByText('Text')! - expect(div).toBeTruthy() - expect(div.style.opacity).toBe('0') - opacity.setValue(1) - expect(div.style.opacity).toBe('1') - }) - - it('accepts Animated values in custom style prop', () => { - const Name = forwardRef< - HTMLHeadingElement, - { style: { color: string; opacity?: number }; children: React.ReactNode } - >((props, ref) => ( -

- {props.children} -

- )) - const AnimatedName = animated(Name) - const opacity = new AnimatedValue(0.5) - const { queryByText } = render( - - Text - - ) - const div = queryByText('Text')! - expect(div).toBeTruthy() - expect(div.style.opacity).toBe('0.5') - opacity.setValue(1) - expect(div.style.opacity).toBe('1') - }) - - it('accepts scrollTop and scrollLeft properties', () => { - const AnimatedDiv = animated('div') - const scrollTop = new AnimatedValue(0) - const { queryByTestId } = render( - } - scrollLeft={new AnimatedValue(0) as SpringValue} - style={{ height: 100 }} - data-testid="wrapper"> -
- - ) - const wrapper = queryByTestId('wrapper')! - expect(wrapper.scrollTop).toBe(0) - expect(wrapper.scrollLeft).toBe(0) - scrollTop.setValue(20) - expect(wrapper.scrollTop).toBe(20) - }) -}) diff --git a/src/animated/createAnimatedComponent.tsx b/src/animated/createAnimatedComponent.tsx deleted file mode 100644 index 8f65c1dee7..0000000000 --- a/src/animated/createAnimatedComponent.tsx +++ /dev/null @@ -1,79 +0,0 @@ -import React, { - forwardRef, - MutableRefObject, - ReactType, - useCallback, - useEffect, - useImperativeHandle, - useRef, -} from 'react' -import { handleRef, useForceUpdate, is } from '../shared/helpers' -import { - AnimatedComponentProps, - CreateAnimatedComponent, -} from '../types/animated' -import AnimatedProps from './AnimatedProps' -import { animatedApi, applyAnimatedValues } from './Globals' - -const isFunctionComponent = (val: unknown): boolean => - is.fun(val) && !(val.prototype instanceof React.Component) - -const createAnimatedComponent: CreateAnimatedComponent = ( - Component: C -) => { - const AnimatedComponent = forwardRef>( - (props, ref) => { - const forceUpdate = useForceUpdate() - const mounted = useRef(true) - const propsAnimated: MutableRefObject = useRef(null) - const node: MutableRefObject = useRef(null) - const attachProps = useCallback(props => { - const oldPropsAnimated = propsAnimated.current - const callback = () => { - let didUpdate: false | undefined = false - if (node.current) { - didUpdate = applyAnimatedValues.fn( - node.current, - propsAnimated.current!.getAnimatedValue() - ) - } - if (!node.current || didUpdate === false) { - // If no referenced node has been found, or the update target didn't have a - // native-responder, then forceUpdate the animation ... - forceUpdate() - } - } - propsAnimated.current = new AnimatedProps(props, callback) - oldPropsAnimated && oldPropsAnimated.detach() - }, []) - - useEffect( - () => () => { - mounted.current = false - propsAnimated.current && propsAnimated.current.detach() - }, - [] - ) - useImperativeHandle(ref, () => - animatedApi(node as MutableRefObject, mounted, forceUpdate) - ) - attachProps(props) - - const { - scrollTop, - scrollLeft, - ...animatedProps - } = propsAnimated.current!.getValue() - - // Functions cannot have refs, see: - // See: https://github.com/react-spring/react-spring/issues/569 - const refFn = isFunctionComponent(Component) - ? undefined - : (childRef: C) => (node.current = handleRef(childRef, ref)) - return - } - ) - return AnimatedComponent -} - -export default createAnimatedComponent diff --git a/src/interpolate.test.ts b/src/interpolate.test.ts deleted file mode 100644 index 84360f383e..0000000000 --- a/src/interpolate.test.ts +++ /dev/null @@ -1,79 +0,0 @@ -import AnimatedValue from './animated/AnimatedValue' -import AnimatedValueArray from './animated/AnimatedValueArray' -import { interpolate } from './interpolate' -import { SpringValue } from './types/animated' - -describe('AnimatedValue interpolation options', () => { - it('accepts an AnimatedValue and a range shortcut config', () => { - const value = interpolate(new AnimatedValue(1), [0, 1, 2], [4, 5, 6]) - expect(value.getValue()).toBe(5) - }) - - it('accepts a config object with extrapolate extend', () => { - const value = interpolate(new AnimatedValue(2), { - range: [0, 1], - output: [10, 20], - extrapolate: 'extend', - }) - expect(value.getValue()).toBe(30) - }) - - it('accepts a config object with extrapolate clamp', () => { - const value = interpolate(new AnimatedValue(100), { - range: [0, 1], - output: [10, 20], - extrapolate: 'clamp', - }) - expect(value.getValue()).toBe(20) - }) - - it('accepts a config object with extrapolate identity', () => { - const value = interpolate(new AnimatedValue(100), { - output: [10, 20], - extrapolate: 'identity', - }) - expect(value.getValue()).toBe(100) - }) - - it('accepts an AnimatedValueArray and a range shortcut config', () => { - const value = interpolate(new AnimatedValueArray([1, 2]), [1, 2], [4, 5]) - expect(value.getValue()).toBe(4) - }) - - it('accepts multiple AnimatedValues and a range shortcut config', () => { - const value = interpolate( - [new AnimatedValue(2), new AnimatedValue(4)], - [0, 2, 4, 6, 8], - [10, 20, 30, 40, 50] - ) - expect(value.getValue()).toBe(20) - }) - - it('accepts multiple AnimatedValues and an interpolation function', () => { - const value = interpolate( - [new AnimatedValue(5), new AnimatedValue('text')], - (a, b) => `t(${a}, ${b})` - ) - expect(value.getValue()).toBe('t(5, text)') - }) - - it('accepts an AnimatedValueArray and an interpolation function', () => { - const value = interpolate( - new AnimatedValueArray([1, 2, 3]), - (r, g, b) => `rgb(${r}, ${g}, ${b})` - ) - expect(value.getValue()).toBe('rgb(1, 2, 3)') - }) - - it('chains interpolations', () => { - const value = interpolate( - new AnimatedValue(1) as SpringValue, - [0, 1], - [1, 2] - ) - .interpolate(x => x * 2) - .interpolate([3, 4], [30, 40]) - .interpolate(x => x / 2) - expect(value.getValue()).toBe(20) - }) -}) diff --git a/src/interpolate.ts b/src/interpolate.ts deleted file mode 100644 index 03a6a2ca89..0000000000 --- a/src/interpolate.ts +++ /dev/null @@ -1,93 +0,0 @@ -import Animated from './animated/Animated' -import AnimatedInterpolation from './animated/AnimatedInterpolation' -import { GetArrayValueType, GetValueType, SpringValue } from './types/animated' -import { InterpolationConfig } from './types/interpolation' - -interface SpringValueFromInterpolation { - // Single AnimatedValue parent - ( - parents: SpringValue, - interpolator: (input: GetValueType) => Out - ): SpringValue - // Tuples of AnimatedValue parents, enables better types for common cases - < - In0 extends number | string, - In1 extends number | string, - Out extends number | string - >( - parents: [SpringValue, SpringValue], - interpolator: (in0: GetValueType, in1: GetValueType) => Out - ): SpringValue - < - In0 extends number | string, - In1 extends number | string, - In2 extends number | string, - Out extends number | string - >( - parents: [SpringValue, SpringValue, SpringValue], - interpolator: ( - in0: GetValueType, - in1: GetValueType, - in2: GetValueType - ) => Out - ): SpringValue - // Array of same type AnimatedValue parents - ( - parents: SpringValue[], - interpolator: (...input: GetValueType[]) => Out - ): SpringValue - // Array of different type AnimatedValue parents - ( - parents: SpringValue[], - interpolator: (...input: (number | string)[]) => Out - ): SpringValue - // Single AnimatedValueArray - < - In extends (number | string)[], - Out extends number | string | (number | string)[] - >( - parents: SpringValue, - interpolator: (...input: GetArrayValueType[]) => Out - ): SpringValue - // Combinations of AnimatedValue + AnimatedValueArray etc - < - In extends number | string | (number | string)[], - Out extends number | string | (number | string)[] - >( - parents: SpringValue | SpringValue[], - interpolator: (...input: In[]) => Out - ): SpringValue - - // Interpolation config - < - In extends number | string, - Out extends number | string, - Parent = SpringValue | SpringValue - >( - parents: Parent | Parent[], - config: InterpolationConfig - ): SpringValue - - // Range shortcuts - < - In extends number | string, - Out extends number | string, - Parent = SpringValue | SpringValue - >( - parents: Parent | Parent[], - range: number[], - output: Out[] - ): SpringValue -} - -export const interpolate: SpringValueFromInterpolation = ( - parents: SpringValue | SpringValue[], - range: number[] | InterpolationConfig | ((...args: any) => any), - output?: (number | string)[] -) => - parents && - new AnimatedInterpolation( - (parents as any) as Animated[], - range as number[], - output! - ) diff --git a/src/modules.d.ts b/src/modules.d.ts deleted file mode 100644 index 473282cf41..0000000000 --- a/src/modules.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -// @types/react-native introduces lots of global conflicts -declare module 'react-native' diff --git a/src/renderprops/Keyframes.js b/src/renderprops/Keyframes.js deleted file mode 100644 index 92843bebff..0000000000 --- a/src/renderprops/Keyframes.js +++ /dev/null @@ -1,147 +0,0 @@ -import React from 'react' -import PropTypes from 'prop-types' -import * as Globals from './animated/Globals' -import Spring from './Spring' -import Trail from './Trail' -import { interpolateTo, shallowEqual, handleRef } from './shared/helpers' - -const DEFAULT = '__default' - -class KeyframesImpl extends React.PureComponent { - static propTypes = { - /** Name of the active slot */ - state: PropTypes.string, - } - static defaultProps = { state: DEFAULT } - - guid = 0 - state = { - props: {}, - resolve: () => null, - last: true, - index: 0, - } - - componentDidMount() { - this.mounted = true - this.componentDidUpdate({}) - } - - componentWillUnmount() { - this.mounted = false - } - - next = (props, last = true, index = 0) => { - this.running = true - return new Promise(resolve => { - this.mounted && - this.setState( - state => ({ - props, - resolve, - last, - index, - }), - () => (this.running = false) - ) - }) - } - - componentDidUpdate(previous) { - const { states, filter: f, state } = this.props - if ( - previous.state !== this.props.state || - (this.props.reset && !this.running) || - !shallowEqual(states[state], previous.states[previous.state]) - ) { - if (states && state && states[state]) { - const localId = ++this.guid - const slots = states[state] - if (slots) { - if (Array.isArray(slots)) { - let q = Promise.resolve() - for (let i = 0; i < slots.length; i++) { - let index = i - let slot = slots[index] - let last = index === slots.length - 1 - q = q.then( - () => localId === this.guid && this.next(f(slot), last, index) - ) - } - } else if (typeof slots === 'function') { - let index = 0 - slots( - // next - (props, last = false) => - localId === this.guid && this.next(f(props), last, index++), - // cancel - () => - Globals.requestFrame( - () => this.instance && this.instance.stop() - ), - // ownprops - this.props - ) - } else { - this.next(f(states[state])) - } - } - } - } - } - - render() { - const { props, resolve, last, index } = this.state - - if (!props || Object.keys(props).length === 0) return null - - let { - state, - filter, - states, - config, - primitive: Component, - onRest, - forwardRef, - ...rest - } = this.props - - // Arrayed configs need an index to process - if (Array.isArray(config)) config = config[index] - - return ( - (this.instance = handleRef(ref, forwardRef))} - config={config} - {...rest} - {...props} - onRest={args => { - resolve(args) - if (onRest && last) onRest(args) - }} - /> - ) - } -} - -const Keyframes = React.forwardRef((props, ref) => ( - -)) - -Keyframes.create = primitive => (states, filter = states => states) => { - if (typeof states === 'function' || Array.isArray(states)) - states = { [DEFAULT]: states } - return props => ( - - ) -} - -Keyframes.Spring = states => Keyframes.create(Spring)(states, interpolateTo) -Keyframes.Trail = states => Keyframes.create(Trail)(states, interpolateTo) - -export default Keyframes diff --git a/src/renderprops/Spring.js b/src/renderprops/Spring.js deleted file mode 100644 index 9552801789..0000000000 --- a/src/renderprops/Spring.js +++ /dev/null @@ -1,175 +0,0 @@ -import React from 'react' -import PropTypes from 'prop-types' -import Controller from './animated/Controller' -import * as Globals from './animated/Globals' -import { config } from './shared/constants' -import { convertValues, shallowEqual } from './shared/helpers' - -export default class Spring extends React.Component { - static propTypes = { - /** Base values, optional */ - from: PropTypes.object, - /** Animates to ... */ - to: PropTypes.object, - /** Props it can optionally apply after the animation is concluded ... */ - after: PropTypes.object, - /** Takes a function that receives interpolated styles */ - children: PropTypes.oneOfType([ - PropTypes.func, - PropTypes.arrayOf(PropTypes.func), - PropTypes.node, - ]), - /** Delay in ms before the animation starts (config.delay takes precedence if present) */ - delay: PropTypes.number, - /** Prevents animation if true, or for individual keys: fn(key => true/false) */ - immediate: PropTypes.oneOfType([PropTypes.bool, PropTypes.func]), - /** When true the spring starts from scratch (from -> to) */ - reset: PropTypes.bool, - /** When true "from" and "to" are switched, this will only make sense in combination with the "reset" flag */ - reverse: PropTypes.bool, - /** Spring config, or for individual keys: fn(key => config) */ - config: PropTypes.oneOfType([PropTypes.object, PropTypes.func]), - /** If true skips rendering the component 60 times per second and animates outside of React, which can be extremely efficient. Consult the "better performance" section to learn about native rendering */ - native: PropTypes.bool, - /** Callback when the animation starts to animate */ - onStart: PropTypes.func, - /** Callback when the animation comes to a still-stand */ - onRest: PropTypes.func, - /** Frame by frame callback, first argument passed is the animated value */ - onFrame: PropTypes.func, - /** Escape hatch for cases where you supply the same values, but need spring to render anyway (see gotchas:auto) */ - force: PropTypes.bool, - // Internal: Hooks, mostly used for middleware (like fix-auto) - // inject: PropTypes.func, - } - - static defaultProps = { - from: {}, - to: {}, - config: config.default, - native: false, - immediate: false, - reset: false, - force: false, - inject: Globals.bugfixes, - } - - state = { - lastProps: { from: {}, to: {} }, - propsChanged: false, - internal: false, - } - - controller = new Controller(null, null) - didUpdate = false - didInject = false - finished = true - - componentDidMount() { - // componentDidUpdate isn't called on mount, we call it here to start animating - this.componentDidUpdate() - this.mounted = true - } - - componentWillUnmount() { - // Stop all ongoing animtions - this.mounted = false - this.stop() - } - - static getDerivedStateFromProps(props, { internal, lastProps }) { - // The following is a test against props that could alter the animation - const { from, to, reset, force } = props - const propsChanged = - !shallowEqual(to, lastProps.to) || - !shallowEqual(from, lastProps.from) || - (reset && !internal) || - (force && !internal) - return { propsChanged, lastProps: props, internal: false } - } - - render() { - const { children } = this.props - const propsChanged = this.state.propsChanged - - // Inject phase ----------------------------------------------------------- - - // Handle injected frames, for instance targets/web/fix-auto - // An inject will return an intermediary React node which measures itself out - // .. and returns a callback when the values sought after are ready, usually "auto". - if (this.props.inject && propsChanged && !this.injectProps) { - const frame = this.props.inject(this.props, injectProps => { - // The inject frame has rendered, now let's update animations... - this.injectProps = injectProps - this.setState({ internal: true }) - }) - // Render out injected frame - if (frame) return frame - } - - // Update phase ----------------------------------------------------------- - if (this.injectProps || propsChanged) { - // We can potentially cause setState, but we're inside render, the flag prevents that - this.didInject = false - // Update animations, this turns from/to props into AnimatedValues - // An update can occur on injected props, or when own-props have changed. - if (this.injectProps) { - this.controller.update(this.injectProps) - // didInject is needed, because there will be a 3rd stage, where the original values - // .. will be restored after the animation is finished. When someone animates towards - // .. "auto", the end-result should be "auto", not "1999px", which would block nested - // .. height/width changes. - this.didInject = true - } else if (propsChanged) this.controller.update(this.props) - // Flag an update that occured, componentDidUpdate will start the animation later on - this.didUpdate = true - this.afterInject = undefined - this.injectProps = undefined - } - - // Render phase ----------------------------------------------------------- - - // Render out raw values or AnimatedValues depending on "native" - let values = { ...this.controller.getValues(), ...this.afterInject } - if (this.finished) values = { ...values, ...this.props.after } - return Object.keys(values).length ? children(values) : null - } - - componentDidUpdate() { - // The animation has to start *after* render, since at that point the scene - // .. graph should be established, so we do it here. Unfortunatelly, non-native - // .. animations as well as "auto"-injects call forceUpdate, so it's causing a loop. - // .. didUpdate prevents that as it gets set only on prop changes. - if (this.didUpdate) this.start() - this.didUpdate = false - } - - start = () => { - this.finished = false - let wasMounted = this.mounted - this.controller.start( - props => this.finish({ ...props, wasMounted }), - this.update - ) - } - - stop = () => this.controller.stop(true) - update = () => this.mounted && this.setState({ internal: true }) - finish = ({ finished, noChange, wasMounted }) => { - this.finished = true - if (this.mounted && finished) { - // Only call onRest if either we *were* mounted, or when there were changes - if (this.props.onRest && (wasMounted || !noChange)) - this.props.onRest(this.controller.merged) - // Restore end-state - if (this.mounted && this.didInject) { - this.afterInject = convertValues(this.props) - this.setState({ internal: true }) - } - // If we have an inject or values to apply after the animation we ping here - if (this.mounted && (this.didInject || this.props.after)) - this.setState({ internal: true }) - this.didInject = false - } - } -} diff --git a/src/renderprops/Trail.js b/src/renderprops/Trail.js deleted file mode 100644 index 54644f33b0..0000000000 --- a/src/renderprops/Trail.js +++ /dev/null @@ -1,68 +0,0 @@ -import React from 'react' -import PropTypes from 'prop-types' -import Spring from './Spring' -import { toArray } from './shared/helpers' - -export default class Trail extends React.PureComponent { - static propTypes = { - /** Base values, optional */ - from: PropTypes.object, - /** Animates to ... */ - to: PropTypes.object, - /** Item keys (the same keys you'd hand over to react in a list). If you specify items, keys can be an accessor function (item => item.key) */ - keys: PropTypes.oneOfType([PropTypes.func, PropTypes.array, PropTypes.any]), - /** An array of items to be displayed, use this if you need access to the actual items when distributing values as functions (see above) */ - items: PropTypes.oneOfType([PropTypes.array, PropTypes.any]).isRequired, - /** A single function-child that receives the individual item and return a functional component (item, index) => props => view) */ - children: PropTypes.func.isRequired, - /** When true the trailing order is switched, it will then trail bottom to top */ - reverse: PropTypes.bool, - } - - static defaultProps = { keys: item => item } - - first = true - instances = new Set() - hook = (instance, index, length, reverse) => { - // Add instance to set - this.instances.add(instance) - // Return undefined on the first index and from then on the previous instance - if (reverse ? index === length - 1 : index === 0) return undefined - else return Array.from(this.instances)[reverse ? index + 1 : index - 1] - } - - render() { - const { - items, - children, - from = {}, - initial, - reverse, - keys, - delay, - onRest, - ...props - } = this.props - - const array = toArray(items) - return toArray(array).map((item, i) => ( - this.hook(instance, i, array.length, reverse)} - children={props => { - const child = children(item, i) - return child ? child(props) : null - }} - /> - )) - } - - componentDidUpdate(prevProps) { - this.first = false - if (prevProps.items !== this.props.items) this.instances.clear() - } -} diff --git a/src/renderprops/Transition.js b/src/renderprops/Transition.js deleted file mode 100644 index 9a44647d16..0000000000 --- a/src/renderprops/Transition.js +++ /dev/null @@ -1,246 +0,0 @@ -import React from 'react' -import PropTypes from 'prop-types' -import Spring from './Spring' -import Keyframes from './Keyframes' -import { callProp, toArray, interpolateTo } from './shared/helpers' - -let guid = 0 -let get = props => { - let { items, keys, ...rest } = props - items = toArray(items !== void 0 ? items : null) - keys = typeof keys === 'function' ? items.map(keys) : toArray(keys) - // Make sure numeric keys are interpreted as Strings (5 !== "5") - return { items, keys: keys.map(key => String(key)), ...rest } -} - -export default class Transition extends React.PureComponent { - static propTypes = { - /** First-render initial values, if present overrides "from" on the first render pass. It can be "null" to skip first mounting transition. Otherwise it can take an object or a function (item => object) */ - initial: PropTypes.oneOfType([PropTypes.object, PropTypes.func]), - /** Base values (from -> enter), or: item => values */ - from: PropTypes.oneOfType([PropTypes.object, PropTypes.func]), - /** Values that apply to new elements, or: item => values */ - enter: PropTypes.oneOfType([ - PropTypes.object, - PropTypes.array, - PropTypes.func, - ]), - /** Values that apply to leaving elements, or: item => values */ - leave: PropTypes.oneOfType([ - PropTypes.object, - PropTypes.array, - PropTypes.func, - ]), - /** Values that apply to elements that are neither entering nor leaving (you can use this to update present elements), or: item => values */ - update: PropTypes.oneOfType([ - PropTypes.object, - PropTypes.array, - PropTypes.func, - ]), - /** Trailing delay in ms */ - trail: PropTypes.number, - /** When true enforces that an item can only occur once instead of allowing two or more items with the same key to co-exist in a stack */ - unique: PropTypes.bool, - /** Useful in combination with "unique", when true it forces incoming items that already exist to restart instead of adapting to their current values */ - reset: PropTypes.bool, - /** Spring config, or for individual keys: fn((item,type) => key => config) or fn((item,type) => config), where "type" can be either enter, leave or update */ - config: PropTypes.oneOfType([PropTypes.object, PropTypes.func]), - /** Calls back once a transition is about to wrap up */ - onDestroyed: PropTypes.func, - /** The same keys you would normally hand over to React in a list. Keys can be specified as a key-accessor function, an array of keys, or a single value */ - keys: PropTypes.oneOfType([PropTypes.func, PropTypes.array, PropTypes.any]), - /** An array of items to be displayed (or a single item of any type), this is used by Transition as the primary means of detecting changes. */ - items: PropTypes.oneOfType([PropTypes.array, PropTypes.any]).isRequired, - /** A single function-child that receives the individual item and return a functional component (item => props => view) */ - children: PropTypes.func.isRequired, - } - - static defaultProps = { keys: item => item, unique: false, reset: false } - - componentDidMount() { - this.mounted = true - } - - componentWillUnmount() { - this.mounted = false - } - - constructor(prevProps) { - super(prevProps) - this.state = { - first: true, - transitions: [], - current: {}, - deleted: [], - prevProps, - } - } - - static getDerivedStateFromProps(props, { first, prevProps, ...state }) { - let { - items, - keys, - initial, - from, - enter, - leave, - update, - trail = 0, - unique, - config, - } = get(props) - let { keys: _keys, items: _items } = get(prevProps) - let current = { ...state.current } - let deleted = [...state.deleted] - - // Compare next keys with current keys - let currentKeys = Object.keys(current) - let currentSet = new Set(currentKeys) - let nextSet = new Set(keys) - let added = keys.filter(item => !currentSet.has(item)) - let removed = state.transitions - .filter(item => !item.destroyed && !nextSet.has(item.originalKey)) - .map(i => i.originalKey) - let updated = keys.filter(item => currentSet.has(item)) - let delay = 0 - - added.forEach(key => { - // In unique mode, remove fading out transitions if their key comes in again - if (unique && deleted.find(d => d.originalKey === key)) - deleted = deleted.filter(t => t.originalKey !== key) - - const keyIndex = keys.indexOf(key) - const item = items[keyIndex] - const state = 'enter' - current[key] = { - state, - originalKey: key, - key: unique ? String(key) : guid++, - item, - trail: (delay = delay + trail), - config: callProp(config, item, state), - from: callProp( - first ? (initial !== void 0 ? initial || {} : from) : from, - item - ), - to: callProp(enter, item), - } - }) - - removed.forEach(key => { - const keyIndex = _keys.indexOf(key) - const item = _items[keyIndex] - const state = 'leave' - deleted.push({ - ...current[key], - state, - destroyed: true, - left: _keys[Math.max(0, keyIndex - 1)], - right: _keys[Math.min(_keys.length, keyIndex + 1)], - trail: (delay = delay + trail), - config: callProp(config, item, state), - to: callProp(leave, item), - }) - delete current[key] - }) - - updated.forEach(key => { - const keyIndex = keys.indexOf(key) - const item = items[keyIndex] - const state = 'update' - current[key] = { - ...current[key], - item, - state, - trail: (delay = delay + trail), - config: callProp(config, item, state), - to: callProp(update, item), - } - }) - - // This tries to restore order for deleted items by finding their last known siblings - let out = keys.map(key => current[key]) - deleted.forEach(({ left, right, ...transition }) => { - let pos - // Was it the element on the left, if yes, move there ... - if ((pos = out.findIndex(t => t.originalKey === left)) !== -1) pos += 1 - // Or how about the element on the right ... - if (pos === -1) pos = out.findIndex(t => t.originalKey === right) - // Maybe we'll find it in the list of deleted items - if (pos === -1) pos = deleted.findIndex(t => t.originalKey === left) - // Checking right side as well - if (pos === -1) pos = deleted.findIndex(t => t.originalKey === right) - // And if nothing else helps, move it to the start ¯\_(ツ)_/¯ - pos = Math.max(0, pos) - out = [...out.slice(0, pos), transition, ...out.slice(pos)] - }) - - return { - first: first && added.length === 0, - transitions: out, - current, - deleted, - prevProps: props, - } - } - - destroyItem = (item, key, state) => values => { - const { onRest, onDestroyed } = this.props - if (this.mounted) { - onDestroyed && onDestroyed(item) - this.setState(({ deleted }) => ({ - deleted: deleted.filter(t => t.key !== key), - })) - onRest && onRest(item, state, values) - } - } - - render() { - const { - initial, - from = {}, - enter = {}, - leave = {}, - update = {}, - onDestroyed, - keys, - items, - onFrame, - onRest, - onStart, - trail, - config, - children, - unique, - reset, - ...extra - } = this.props - return this.state.transitions.map( - ({ state, key, item, from, to, trail, config, destroyed }, i) => ( - onRest(item, state, values)) - } - onStart={onStart && (() => onStart(item, state))} - onFrame={onFrame && (values => onFrame(item, state, values))} - delay={trail} - config={config} - {...extra} - from={from} - children={props => { - const child = children(item, state, i) - return child ? child(props) : null - }} - /> - ) - ) - } -} diff --git a/src/renderprops/addons/Parallax.js b/src/renderprops/addons/Parallax.js deleted file mode 100644 index 69a5cabf49..0000000000 --- a/src/renderprops/addons/Parallax.js +++ /dev/null @@ -1,279 +0,0 @@ -import React from 'react' -import PropTypes from 'prop-types' -import { Controller, config, Globals, animated } from 'react-spring/renderprops' - -const El = Globals.defaultElement -const AnimatedDiv = animated(El) -const { Provider, Consumer } = React.createContext(null) - -function getScrollType(horizontal) { - return horizontal ? 'scrollLeft' : 'scrollTop' -} - -const START_TRANSLATE_3D = 'translate3d(0px,0px,0px)' -const START_TRANSLATE = 'translate(0px,0px)' - -export class ParallaxLayer extends React.PureComponent { - static propTypes = { - /** Size of a page, (1=100%, 1.5=1 and 1/2, ...) */ - factor: PropTypes.number, - /** Determines where the layer will be at when scrolled to (0=start, 1=1st page, ...) */ - offset: PropTypes.number, - /** shifts the layer in accordance to its offset, values can be positive or negative */ - speed: PropTypes.number, - } - - static defaultProps = { - factor: 1, - offset: 0, - speed: 0, - } - - componentDidMount() { - const parent = this.parent - if (parent) { - parent.layers = parent.layers.concat(this) - parent.update() - } - } - - componentWillUnmount() { - const parent = this.parent - if (parent) { - parent.layers = parent.layers.filter(layer => layer !== this) - parent.update() - } - } - - setPosition(height, scrollTop, immediate = false) { - const { config } = this.parent.props - const targetScroll = Math.floor(this.props.offset) * height - const offset = height * this.props.offset + targetScroll * this.props.speed - const to = parseFloat(-(scrollTop * this.props.speed) + offset) - this.controller.update({ translate: to, config, immediate }) - } - - setHeight(height, immediate = false) { - const { config } = this.parent.props - const to = parseFloat(height * this.props.factor) - this.controller.update({ space: to, config, immediate }) - } - - initialize() { - const props = this.props - const parent = this.parent - const targetScroll = Math.floor(props.offset) * parent.space - const offset = parent.space * props.offset + targetScroll * props.speed - const to = parseFloat(-(parent.current * props.speed) + offset) - this.controller = new Controller({ - space: parent.space * props.factor, - translate: to, - }) - } - - renderLayer() { - const { - style, - children, - offset, - speed, - factor, - className, - ...props - } = this.props - const horizontal = this.parent.props.horizontal - - const translate3d = this.controller.interpolations.translate.interpolate( - x => (horizontal ? `translate3d(${x}px,0,0)` : `translate3d(0,${x}px,0)`) - ) - - return ( - - {children} - - ) - } - - render() { - return ( - - {parent => { - if (parent && !this.parent) { - this.parent = parent - this.initialize() - } - return this.renderLayer() - }} - - ) - } -} - -export class Parallax extends React.PureComponent { - // TODO keep until major release - static Layer = ParallaxLayer - - static propTypes = { - /** Determines the total space of the inner content where each page takes 100% of the visible container */ - pages: PropTypes.number.isRequired, - /** Spring config (optional) */ - config: PropTypes.object, - /** Allow content to be scrolled, or not */ - scrolling: PropTypes.bool, - /** Scrolls horizontally or vertically */ - horizontal: PropTypes.bool, - } - - static defaultProps = { - config: config.slow, - scrolling: true, - horizontal: false, - } - - constructor(props) { - super() - this.state = { ready: false } - this.layers = [] - this.space = 0 - this.current = 0 - this.offset = 0 - this.busy = false - this.controller = new Controller({ scroll: 0 }) - } - - moveItems = () => { - this.layers.forEach(layer => layer.setPosition(this.space, this.current)) - this.busy = false - } - - scrollerRaf = () => Globals.requestFrame(this.moveItems) - - onScroll = event => { - const { horizontal } = this.props - if (!this.busy) { - this.busy = true - this.scrollerRaf() - this.current = event.target[getScrollType(horizontal)] - } - } - - update = () => { - const { scrolling, horizontal } = this.props - const scrollType = getScrollType(horizontal) - if (!this.container) return - this.space = this.container[horizontal ? 'clientWidth' : 'clientHeight'] - if (scrolling) this.current = this.container[scrollType] - else this.container[scrollType] = this.current = this.offset * this.space - if (this.content) - this.content.style[horizontal ? 'width' : 'height'] = `${this.space * - this.props.pages}px` - this.layers.forEach(layer => { - layer.setHeight(this.space, true) - layer.setPosition(this.space, this.current, true) - }) - } - - updateRaf = () => { - Globals.requestFrame(this.update) - // Some browsers don't fire on maximize - setTimeout(this.update, 150) - } - - scrollStop = event => this.controller.stop() - - scrollTo(offset) { - const { horizontal, config } = this.props - const scrollType = getScrollType(horizontal) - this.scrollStop() - this.offset = offset - const target = this.container - - this.controller.update({ - scroll: offset * this.space, - config, - onFrame: ({ scroll }) => (target[scrollType] = scroll), - }) - } - - componentDidMount() { - window.addEventListener('resize', this.updateRaf, false) - this.update() - this.setState({ ready: true }) - } - - componentWillUnmount() { - window.removeEventListener('resize', this.updateRaf, false) - } - - componentDidUpdate() { - this.update() - } - - render() { - const { - style, - innerStyle, - pages, - id, - className, - scrolling, - children, - horizontal, - } = this.props - const overflow = scrolling ? 'scroll' : 'hidden' - return ( - (this.container = node)} - onScroll={this.onScroll} - onWheel={scrolling ? this.scrollStop : null} - onTouchStart={scrolling ? this.scrollStop : null} - style={{ - position: 'absolute', - width: '100%', - height: '100%', - overflow, - overflowY: horizontal ? 'hidden' : overflow, - overflowX: horizontal ? overflow : 'hidden', - WebkitOverflowScrolling: 'touch', - WebkitTransform: START_TRANSLATE, - MsTransform: START_TRANSLATE, - transform: START_TRANSLATE_3D, - ...style, - }} - id={id} - className={className}> - {this.state.ready && ( - (this.content = node)} - style={{ - position: 'absolute', - [horizontal ? 'height' : 'width']: '100%', - WebkitTransform: START_TRANSLATE, - MsTransform: START_TRANSLATE, - transform: START_TRANSLATE_3D, - overflow: 'hidden', - [horizontal ? 'width' : 'height']: this.space * pages, - ...innerStyle, - }}> - {children} - - )} - - ) - } -} diff --git a/src/renderprops/addons/index.js b/src/renderprops/addons/index.js deleted file mode 100644 index be9548f8ac..0000000000 --- a/src/renderprops/addons/index.js +++ /dev/null @@ -1,3 +0,0 @@ -import { Parallax, ParallaxLayer } from './Parallax' - -export { Parallax, ParallaxLayer } diff --git a/src/renderprops/animated/Animated.js b/src/renderprops/animated/Animated.js deleted file mode 100644 index 26c3234daa..0000000000 --- a/src/renderprops/animated/Animated.js +++ /dev/null @@ -1,13 +0,0 @@ -export default class Animated { - attach() {} - detach() {} - getValue() {} - getAnimatedValue() { - return this.getValue() - } - addChild(child) {} - removeChild(child) {} - getChildren() { - return [] - } -} diff --git a/src/renderprops/animated/AnimatedArray.js b/src/renderprops/animated/AnimatedArray.js deleted file mode 100644 index 6028b3ba1d..0000000000 --- a/src/renderprops/animated/AnimatedArray.js +++ /dev/null @@ -1,20 +0,0 @@ -import AnimatedValue from './AnimatedValue' -import { AnimatedArrayWithChildren } from './AnimatedWithChildren' -import AnimatedInterpolation from './AnimatedInterpolation' - -export default class AnimatedArray extends AnimatedArrayWithChildren { - constructor(array) { - super() - this.payload = array.map(n => new AnimatedValue(n)) - } - - setValue = (value, flush = true) => { - if (Array.isArray(value)) { - if (value.length === this.payload.length) - value.forEach((v, i) => this.payload[i].setValue(v, flush)) - } else - this.payload.forEach((v, i) => this.payload[i].setValue(value, flush)) - } - getValue = () => this.payload.map(v => v.getValue()) - interpolate = (config, arg) => new AnimatedInterpolation(this, config, arg) -} diff --git a/src/renderprops/animated/AnimatedInterpolation.js b/src/renderprops/animated/AnimatedInterpolation.js deleted file mode 100644 index 697cfa5ba5..0000000000 --- a/src/renderprops/animated/AnimatedInterpolation.js +++ /dev/null @@ -1,24 +0,0 @@ -import { AnimatedArrayWithChildren } from './AnimatedWithChildren' -import Interpolation from './Interpolation' - -export default class AnimatedInterpolation extends AnimatedArrayWithChildren { - constructor(parents, config, arg) { - super() - this.payload = - // AnimatedArrays should unfold, except AnimatedInterpolation which is taken as is - parents instanceof AnimatedArrayWithChildren && !parents.updateConfig - ? parents.payload - : Array.isArray(parents) - ? parents - : [parents] - this.calc = Interpolation.create(config, arg) - } - - getValue = () => this.calc(...this.payload.map(value => value.getValue())) - updateConfig = (config, arg) => - (this.calc = Interpolation.create(config, arg)) - interpolate = (config, arg) => new AnimatedInterpolation(this, config, arg) -} - -export const interpolate = (parents, config, arg) => - parents && new AnimatedInterpolation(parents, config, arg) diff --git a/src/renderprops/animated/AnimatedProps.js b/src/renderprops/animated/AnimatedProps.js deleted file mode 100644 index 56379bdef9..0000000000 --- a/src/renderprops/animated/AnimatedProps.js +++ /dev/null @@ -1,13 +0,0 @@ -import * as Globals from './Globals' -import { AnimatedObjectWithChildren } from './AnimatedWithChildren' - -export default class AnimatedProps extends AnimatedObjectWithChildren { - constructor(props, callback) { - super() - if (props.style) - props = { ...props, style: Globals.createAnimatedStyle(props.style) } - this.payload = props - this.update = callback - this.attach() - } -} diff --git a/src/renderprops/animated/AnimatedStyle.js b/src/renderprops/animated/AnimatedStyle.js deleted file mode 100644 index 628218b4bb..0000000000 --- a/src/renderprops/animated/AnimatedStyle.js +++ /dev/null @@ -1,13 +0,0 @@ -import * as Globals from './Globals' -import Animated from './Animated' -import { AnimatedObjectWithChildren } from './AnimatedWithChildren' - -export default class AnimatedStyle extends AnimatedObjectWithChildren { - constructor(style) { - super() - style = style || {} - if (style.transform && !(style.transform instanceof Animated)) - style = Globals.applyAnimatedValues.transform(style) - this.payload = style - } -} diff --git a/src/renderprops/animated/AnimatedValue.js b/src/renderprops/animated/AnimatedValue.js deleted file mode 100644 index 4717936530..0000000000 --- a/src/renderprops/animated/AnimatedValue.js +++ /dev/null @@ -1,78 +0,0 @@ -import AnimatedWithChildren from './AnimatedWithChildren' -import AnimatedInterpolation from './AnimatedInterpolation' - -/** - * Animated works by building a directed acyclic graph of dependencies - * transparently when you render your Animated components. - * - * new Animated.Value(0) - * .interpolate() .interpolate() new Animated.Value(1) - * opacity translateY scale - * style transform - * View#234 style - * View#123 - * - * A) Top Down phase - * When an Animated.Value is updated, we recursively go down through this - * graph in order to find leaf nodes: the views that we flag as needing - * an update. - * - * B) Bottom Up phase - * When a view is flagged as needing an update, we recursively go back up - * in order to build the new value that it needs. The reason why we need - * this two-phases process is to deal with composite props such as - * transform which can receive values from multiple parents. - */ - -function findAnimatedStyles(node, styles) { - if (typeof node.update === 'function') styles.add(node) - else node.getChildren().forEach(child => findAnimatedStyles(child, styles)) -} - -/** - * Standard value for driving animations. One `Animated.Value` can drive - * multiple properties in a synchronized fashion, but can only be driven by one - * mechanism at a time. Using a new mechanism (e.g. starting a new animation, - * or calling `setValue`) will stop any previous ones. - */ -export default class AnimatedValue extends AnimatedWithChildren { - constructor(value) { - super() - this.value = value - this.animatedStyles = new Set() - this.done = false - this.startPosition = value - this.lastPosition = value - this.lastVelocity = undefined - this.lastTime = undefined - this.controller = undefined - } - - flush() { - if (this.animatedStyles.size === 0) this.updateStyles() - this.animatedStyles.forEach(animatedStyle => animatedStyle.update()) - } - - prepare(controller) { - // Values stay loyal to their original controller, this is also a way to - // detect trailing values originating from a foreign controller - if (this.controller === undefined) this.controller = controller - if (this.controller === controller) { - this.startPosition = this.value - this.lastPosition = this.value - this.lastVelocity = controller.isActive ? this.lastVelocity : undefined - this.lastTime = controller.isActive ? this.lastTime : undefined - this.done = false - this.animatedStyles.clear() - } - } - - setValue = (value, flush = true) => { - this.value = value - if (flush) this.flush() - } - getValue = () => this.value - updateStyles = () => findAnimatedStyles(this, this.animatedStyles) - updateValue = value => this.flush((this.value = value)) - interpolate = (config, arg) => new AnimatedInterpolation(this, config, arg) -} diff --git a/src/renderprops/animated/AnimatedWithChildren.js b/src/renderprops/animated/AnimatedWithChildren.js deleted file mode 100644 index 3b360d3c2e..0000000000 --- a/src/renderprops/animated/AnimatedWithChildren.js +++ /dev/null @@ -1,61 +0,0 @@ -import Animated from './Animated' - -const getValues = object => Object.keys(object).map(k => object[k]) - -export default class AnimatedWithChildren extends Animated { - children = [] - - addChild(child) { - if (this.children.length === 0) this.attach() - this.children.push(child) - } - - removeChild(child) { - const index = this.children.indexOf(child) - this.children.splice(index, 1) - if (this.children.length === 0) this.detach() - } - - getChildren = () => this.children - - // This function returns the animated value the object holds, even if it points to itself, - // while an object like AnimatedArray will points to its children - getPayload = (index = undefined) => - index !== void 0 && this.payload - ? this.payload[index] - : this.payload || this -} - -export class AnimatedArrayWithChildren extends AnimatedWithChildren { - payload = [] - getAnimatedValue = () => this.getValue() - attach = () => - this.payload.forEach(p => p instanceof Animated && p.addChild(this)) - detach = () => - this.payload.forEach(p => p instanceof Animated && p.removeChild(this)) -} - -export class AnimatedObjectWithChildren extends AnimatedWithChildren { - payload = {} - getValue(animated = false) { - const payload = {} - for (const key in this.payload) { - const value = this.payload[key] - if (animated && !(value instanceof Animated)) continue - payload[key] = - value instanceof Animated - ? value[animated ? 'getAnimatedValue' : 'getValue']() - : value - } - return payload - } - getAnimatedValue = () => this.getValue(true) - attach = () => - getValues(this.payload).forEach( - s => s instanceof Animated && s.addChild(this) - ) - detach = () => - getValues(this.payload).forEach( - s => s instanceof Animated && s.removeChild(this) - ) -} diff --git a/src/renderprops/animated/Controller.js b/src/renderprops/animated/Controller.js deleted file mode 100644 index 62d1cd587e..0000000000 --- a/src/renderprops/animated/Controller.js +++ /dev/null @@ -1,203 +0,0 @@ -import Animated from './Animated' -import AnimatedValue from './AnimatedValue' -import AnimatedArray from './AnimatedArray' -import { now, colorNames } from './Globals' -import { addController, removeController } from './FrameLoop' -import { - interpolateTo, - withDefault, - toArray, - getValues, - callProp, - shallowEqual, -} from '../shared/helpers' - -export default class Controller { - constructor( - props, - config = { native: true, interpolateTo: true, autoStart: true } - ) { - this.dependents = new Set() - this.isActive = false - this.hasChanged = false - this.props = {} - this.merged = {} - this.animations = {} - this.interpolations = {} - this.animatedProps = {} - this.configs = [] - this.frame = undefined - this.startTime = undefined - this.lastTime = undefined - this.update({ ...props, ...config }) - } - - update(props, ...start) { - this.props = { ...this.props, ...props } - let { - from = {}, - to = {}, - config = {}, - delay = 0, - reverse, - attach, - reset, - immediate, - autoStart, - ref, - } = this.props.interpolateTo ? interpolateTo(this.props) : this.props - - // Reverse values when requested - if (reverse) { - ;[from, to] = [to, from] - } - this.hasChanged = false - // Attachment handling, trailed springs can "attach" themselves to a previous spring - let target = attach && attach(this) - - // Reset merged props when necessary - let extra = reset ? {} : this.merged - // This will collect all props that were ever set - this.merged = { ...from, ...extra, ...to } - // Reduces input { name: value } pairs into animated values - this.animations = Object.entries(this.merged).reduce( - (acc, [name, value], i) => { - // Issue cached entries, except on reset - let entry = (!reset && acc[name]) || {} - - // Figure out what the value is supposed to be - const isNumber = typeof value === 'number' - const isString = - typeof value === 'string' && - !value.startsWith('#') && - !/\d/.test(value) && - !colorNames[value] - const isArray = !isNumber && !isString && Array.isArray(value) - - let fromValue = from[name] !== undefined ? from[name] : value - let toValue = isNumber || isArray ? value : isString ? value : 1 - let toConfig = callProp(config, name) - if (target) toValue = target.animations[name].parent - - // Detect changes, animated values will be checked in the raf-loop - if (toConfig.decay !== void 0 || !shallowEqual(entry.changes, value)) { - this.hasChanged = true - let parent, interpolation - if (isNumber || isString) - parent = interpolation = - entry.parent || new AnimatedValue(fromValue) - else if (isArray) - parent = interpolation = - entry.parent || new AnimatedArray(fromValue) - else { - const prev = - entry.interpolation && - entry.interpolation.calc(entry.parent.value) - if (entry.parent) { - parent = entry.parent - parent.setValue(0, false) - } else parent = new AnimatedValue(0) - const range = { - output: [prev !== void 0 ? prev : fromValue, value], - } - if (entry.interpolation) { - interpolation = entry.interpolation - entry.interpolation.updateConfig(range) - } else interpolation = parent.interpolate(range) - } - - // Set immediate values - if (callProp(immediate, name)) parent.setValue(value, false) - - // Reset animated values - const animatedValues = toArray(parent.getPayload()) - animatedValues.forEach(value => value.prepare(this)) - - return { - ...acc, - [name]: { - ...entry, - name, - parent, - interpolation, - animatedValues, - changes: value, - fromValues: toArray(parent.getValue()), - toValues: toArray(target ? toValue.getPayload() : toValue), - immediate: callProp(immediate, name), - delay: withDefault(toConfig.delay, delay || 0), - initialVelocity: withDefault(toConfig.velocity, 0), - clamp: withDefault(toConfig.clamp, false), - precision: withDefault(toConfig.precision, 0.01), - tension: withDefault(toConfig.tension, 170), - friction: withDefault(toConfig.friction, 26), - mass: withDefault(toConfig.mass, 1), - duration: toConfig.duration, - easing: withDefault(toConfig.easing, t => t), - decay: toConfig.decay, - }, - } - } else return acc - }, - this.animations - ) - - if (this.hasChanged) { - this.configs = getValues(this.animations) - this.animatedProps = {} - this.interpolations = {} - for (let key in this.animations) { - this.interpolations[key] = this.animations[key].interpolation - this.animatedProps[key] = this.animations[key].interpolation.getValue() - } - } - - // TODO: clean up ref in controller - if (!ref && (autoStart || start.length)) this.start(...start) - const [onEnd, onUpdate] = start - this.onEnd = typeof onEnd === 'function' && onEnd - this.onUpdate = onUpdate - return this.getValues() - } - - start(onEnd, onUpdate) { - this.startTime = now() - if (this.isActive) this.stop() - this.isActive = true - this.onEnd = typeof onEnd === 'function' && onEnd - this.onUpdate = onUpdate - if (this.props.onStart) this.props.onStart() - addController(this) - return new Promise(res => (this.resolve = res)) - } - - stop(finished = false) { - // Reset collected changes since the animation has been stopped cold turkey - if (finished) - getValues(this.animations).forEach(a => (a.changes = undefined)) - this.debouncedOnEnd({ finished }) - } - - destroy() { - removeController(this) - this.props = {} - this.merged = {} - this.animations = {} - this.interpolations = {} - this.animatedProps = {} - this.configs = [] - } - - debouncedOnEnd(result) { - removeController(this) - this.isActive = false - const onEnd = this.onEnd - this.onEnd = null - if (onEnd) onEnd(result) - if (this.resolve) this.resolve() - this.resolve = null - } - - getValues = () => - this.props.native ? this.interpolations : this.animatedProps -} diff --git a/src/renderprops/animated/FrameLoop.js b/src/renderprops/animated/FrameLoop.js deleted file mode 100644 index 5768487825..0000000000 --- a/src/renderprops/animated/FrameLoop.js +++ /dev/null @@ -1,163 +0,0 @@ -import Animated from './Animated' -import { now, requestFrame } from './Globals' - -let active = false -const controllers = new Set() - -const frameLoop = () => { - let time = now() - for (let controller of controllers) { - let isDone = true - let noChange = true - - for ( - let configIdx = 0; - configIdx < controller.configs.length; - configIdx++ - ) { - let config = controller.configs[configIdx] - - let endOfAnimation, lastTime, velocity - for (let valIdx = 0; valIdx < config.animatedValues.length; valIdx++) { - let animation = config.animatedValues[valIdx] - - // If an animation is done, skip, until all of them conclude - if (animation.done) continue - - let from = config.fromValues[valIdx] - let to = config.toValues[valIdx] - let position = animation.lastPosition - let isAnimated = to instanceof Animated - let velocity = Array.isArray(config.initialVelocity) - ? config.initialVelocity[valIdx] - : config.initialVelocity - if (isAnimated) to = to.getValue() - - // Conclude animation if it's either immediate, or from-values match end-state - if (config.immediate || (!isAnimated && !config.decay && from === to)) { - animation.updateValue(to) - animation.done = true - continue - } - - // Doing delay here instead of setTimeout is one async worry less - if (config.delay && time - controller.startTime < config.delay) { - isDone = false - continue - } - - // Flag change - noChange = false - - // Break animation when string values are involved - if (typeof from === 'string' || typeof to === 'string') { - animation.updateValue(to) - animation.done = true - continue - } - - if (config.duration !== void 0) { - /** Duration easing */ - position = - from + - config.easing( - (time - controller.startTime - config.delay) / config.duration - ) * - (to - from) - endOfAnimation = - time >= controller.startTime + config.delay + config.duration - } else if (config.decay) { - /** Decay easing */ - position = - from + - (velocity / (1 - 0.998)) * - (1 - Math.exp(-(1 - 0.998) * (time - controller.startTime))) - endOfAnimation = Math.abs(animation.lastPosition - position) < 0.1 - if (endOfAnimation) to = position - } else { - /** Spring easing */ - lastTime = animation.lastTime !== void 0 ? animation.lastTime : time - velocity = - animation.lastVelocity !== void 0 - ? animation.lastVelocity - : config.initialVelocity - - // If we lost a lot of frames just jump to the end. - if (time > lastTime + 64) lastTime = time - // http://gafferongames.com/game-physics/fix-your-timestep/ - let numSteps = Math.floor(time - lastTime) - for (let i = 0; i < numSteps; ++i) { - let force = -config.tension * (position - to) - let damping = -config.friction * velocity - let acceleration = (force + damping) / config.mass - velocity = velocity + (acceleration * 1) / 1000 - position = position + (velocity * 1) / 1000 - } - - // Conditions for stopping the spring animation - let isOvershooting = - config.clamp && config.tension !== 0 - ? from < to - ? position > to - : position < to - : false - let isVelocity = Math.abs(velocity) <= config.precision - let isDisplacement = - config.tension !== 0 - ? Math.abs(to - position) <= config.precision - : true - endOfAnimation = isOvershooting || (isVelocity && isDisplacement) - animation.lastVelocity = velocity - animation.lastTime = time - } - - // Trails aren't done until their parents conclude - if (isAnimated && !config.toValues[valIdx].done) endOfAnimation = false - - if (endOfAnimation) { - // Ensure that we end up with a round value - if (animation.value !== to) position = to - animation.done = true - } else isDone = false - - animation.updateValue(position) - animation.lastPosition = position - } - - // Keep track of updated values only when necessary - if (controller.props.onFrame || !controller.props.native) - controller.animatedProps[config.name] = config.interpolation.getValue() - } - // Update callbacks in the end of the frame - if (controller.props.onFrame || !controller.props.native) { - if (!controller.props.native && controller.onUpdate) controller.onUpdate() - if (controller.props.onFrame) - controller.props.onFrame(controller.animatedProps) - } - // Either call onEnd or next frame - if (isDone) { - controllers.delete(controller) - controller.debouncedOnEnd({ finished: true, noChange }) - } - } - - // Loop over as long as there are controllers ... - if (controllers.size) requestFrame(frameLoop) - else active = false -} - -const addController = controller => { - if (!controllers.has(controller)) { - controllers.add(controller) - if (!active) requestFrame(frameLoop) - active = true - } -} - -const removeController = controller => { - if (controllers.has(controller)) { - controllers.delete(controller) - } -} - -export { addController, removeController } diff --git a/src/renderprops/animated/Globals.js b/src/renderprops/animated/Globals.js deleted file mode 100644 index 9536af5321..0000000000 --- a/src/renderprops/animated/Globals.js +++ /dev/null @@ -1,23 +0,0 @@ -export let bugfixes = undefined -export let applyAnimatedValues = undefined -export let colorNames = [] -export let requestFrame = cb => - typeof window !== 'undefined' && window.requestAnimationFrame(cb) -export let cancelFrame = cb => - typeof window !== 'undefined' && window.cancelAnimationFrame(cb) -export let interpolation = undefined -export let now = () => Date.now() -export let defaultElement = undefined -export let createAnimatedStyle = undefined - -export const injectApplyAnimatedValues = (fn, transform) => - (applyAnimatedValues = { fn, transform }) -export const injectColorNames = names => (colorNames = names) -export const injectBugfixes = fn => (bugfixes = fn) -export const injectInterpolation = cls => (interpolation = cls) -export const injectFrame = (raf, caf) => - ([requestFrame, cancelFrame] = [raf, caf]) -export const injectNow = nowFn => (now = nowFn) -export const injectDefaultElement = el => (defaultElement = el) -export const injectCreateAnimatedStyle = factory => - (createAnimatedStyle = factory) diff --git a/src/renderprops/animated/Interpolation.js b/src/renderprops/animated/Interpolation.js deleted file mode 100644 index 5471205775..0000000000 --- a/src/renderprops/animated/Interpolation.js +++ /dev/null @@ -1,95 +0,0 @@ -import * as Globals from './Globals' - -export default class Interpolation { - // Default config = config, args - // Short config = range, output, extrapolate - static create(config, output, extra) { - if (typeof config === 'function') return config - else if ( - Globals.interpolation && - config.output && - typeof config.output[0] === 'string' - ) - return Globals.interpolation(config) - else if (Array.isArray(config)) - return Interpolation.create({ - range: config, - output, - extrapolate: extra || 'extend', - }) - - let outputRange = config.output - let inputRange = config.range || [0, 1] - let easing = config.easing || (t => t) - let extrapolateLeft = 'extend' - let map = config.map - - if (config.extrapolateLeft !== undefined) - extrapolateLeft = config.extrapolateLeft - else if (config.extrapolate !== undefined) - extrapolateLeft = config.extrapolate - - let extrapolateRight = 'extend' - if (config.extrapolateRight !== undefined) - extrapolateRight = config.extrapolateRight - else if (config.extrapolate !== undefined) - extrapolateRight = config.extrapolate - - return input => { - let range = findRange(input, inputRange) - return interpolate( - input, - inputRange[range], - inputRange[range + 1], - outputRange[range], - outputRange[range + 1], - easing, - extrapolateLeft, - extrapolateRight, - map - ) - } - } -} - -function interpolate( - input, - inputMin, - inputMax, - outputMin, - outputMax, - easing, - extrapolateLeft, - extrapolateRight, - map -) { - let result = map ? map(input) : input - // Extrapolate - if (result < inputMin) { - if (extrapolateLeft === 'identity') return result - else if (extrapolateLeft === 'clamp') result = inputMin - } - if (result > inputMax) { - if (extrapolateRight === 'identity') return result - else if (extrapolateRight === 'clamp') result = inputMax - } - if (outputMin === outputMax) return outputMin - if (inputMin === inputMax) return input <= inputMin ? outputMin : outputMax - // Input Range - if (inputMin === -Infinity) result = -result - else if (inputMax === Infinity) result = result - inputMin - else result = (result - inputMin) / (inputMax - inputMin) - // Easing - result = easing(result) - // Output Range - if (outputMin === -Infinity) result = -result - else if (outputMax === Infinity) result = result + outputMin - else result = result * (outputMax - outputMin) + outputMin - return result -} - -function findRange(input, inputRange) { - for (var i = 1; i < inputRange.length - 1; ++i) - if (inputRange[i] >= input) break - return i - 1 -} diff --git a/src/renderprops/animated/KeyframeController.js b/src/renderprops/animated/KeyframeController.js deleted file mode 100644 index 519b7ed480..0000000000 --- a/src/renderprops/animated/KeyframeController.js +++ /dev/null @@ -1,162 +0,0 @@ -import Controller from './Controller' -import { shallowEqual } from '../shared/helpers' -import { requestFrame } from '../animated/Globals' - -export default class KeyframeController { - frameId = 0 - constructor(props) { - const { config, onRest, ...initialProps } = props - this.globalProps = (({ - native, - onStart, - onFrame, - children, - reset, - delay, - destroyed, - }) => ({ - native, - onStart, - reset, - onFrame, - children, - delay, - destroyed, - }))(props) - - this.globalConfig = props.config - this.globalOnRest = props.onRest - this.ref = props.ref - this.prevSlots = {} - this.currSlots = null - this.instance = new Controller({ ...initialProps, native: true }) - } - - get isActive() { - return this.instance.isActive - } - - set config(config) { - this.globalConfig = config - } - - set globals(props) { - this.globalProps = { ...this.globalProps, ...props } - } - - next = (props, localFrameId, last = true, index = 0) => { - // this.last = last - // this.running = true - - // config passed to props can overwrite global config passed in - // controller instantiation i.e. globalConfig - - const config = props.config - ? props.config - : Array.isArray(this.globalConfig) - ? this.globalConfig[index] - : this.globalConfig - this.onFrameRest = props.onRest - return new Promise(resolve => { - // if ref is passed to internal controller, then it ignore onEnd call back - this.instance.update( - { ...this.globalProps, ...props, config }, - this.onEnd(this.onFrameRest, localFrameId, last, resolve) - ) - - // start needs to be called here if ref is present to activate the anim - if (this.ref) { - this.instance.start( - this.onEnd(this.onFrameRest, localFrameId, last, resolve) - ) - } - - // hacky solution to force the parent to be updated any time - // the child controller is reset - this.instance.props.reset && - this.instance.props.native && - this.parentForceUpdate && - requestFrame(this.parentForceUpdate) - }) - } - - start = onEnd => { - this.globalOnEnd = onEnd - if (this.currSlots) { - const localFrameId = ++this.frameId - if (Array.isArray(this.currSlots)) { - let q = Promise.resolve() - for (let i = 0; i < this.currSlots.length; i++) { - let index = i - let slot = this.currSlots[index] - let last = index === this.currSlots.length - 1 - q = q.then( - () => - localFrameId === this.frameId && - this.next(slot, localFrameId, last, index) - ) - } - } else if (typeof this.currSlots === 'function') { - let index = 0 - this.currSlots( - // next - (props, last = false) => - localFrameId === this.frameId && - this.next(props, localFrameId, last, index++), - // cancel - () => - requestFrame( - () => this.instance.isActive && this.instance.stop(true) - ) - ) - } else this.next(this.currSlots, localFrameId) - this.prevSlots = this.currSlots - return new Promise(resolve => (this.keyFrameEndResolver = resolve)) - } - } - - stop = (finished = false) => { - ++this.frameId - if (this.instance.isActive) this.instance.stop(finished) - } - - onEnd = (onFrameRest, localFrameId, last, resolve) => args => { - if (localFrameId === this.frameId) { - if (resolve) resolve() - if (onFrameRest) onFrameRest(this.merged) - if (last && this.globalOnEnd) this.globalOnEnd(args) - if (last && this.keyFrameEndResolver) this.keyFrameEndResolver() - if (args.finished && last && this.globalOnRest) { - this.globalOnRest(this.merged) - } - } - } - - get merged() { - return this.instance.merged - } - - get props() { - return this.instance.props - } - - updateWithForceUpdate = (forceUpdate, ...args) => { - // needed to forceUpdate when the controller is reset - // for native controllers - this.parentForceUpdate = forceUpdate - this.update(...args) - } - update = args => { - const isFnOrArray = typeof args === 'function' || Array.isArray(args) - if (isFnOrArray) { - this.currSlots = args - !this.ref && this.start() - } else { - const { slots, ...rest } = args - this.currSlots = slots - !this.ref && this.start(...rest) - } - } - getValues = () => this.instance.getValues() - destroy = () => this.instance.destroy() -} diff --git a/src/renderprops/animated/LICENSE b/src/renderprops/animated/LICENSE deleted file mode 100644 index 5930f2b8d8..0000000000 --- a/src/renderprops/animated/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -MIT License - -Copyright (c) 2013-present, Facebook, Inc. - -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. \ No newline at end of file diff --git a/src/renderprops/animated/__tests__/Animated.test.js b/src/renderprops/animated/__tests__/Animated.test.js deleted file mode 100644 index a7586be98b..0000000000 --- a/src/renderprops/animated/__tests__/Animated.test.js +++ /dev/null @@ -1,13 +0,0 @@ -import Animated from './../Animated' - -let TestedClass = new Animated() - -describe('Animated', () => { - beforeEach(() => { - TestedClass = new Animated() - }) - - it('instantiates', () => { - expect(TestedClass).toBeTruthy() - }) -}) diff --git a/src/renderprops/animated/__tests__/AnimatedWithChildren.test.js b/src/renderprops/animated/__tests__/AnimatedWithChildren.test.js deleted file mode 100644 index cae4a14faf..0000000000 --- a/src/renderprops/animated/__tests__/AnimatedWithChildren.test.js +++ /dev/null @@ -1,35 +0,0 @@ -import Animated from './../Animated' -import AnimatedWithChildren from './../AnimatedWithChildren' - -let TestedClass = new AnimatedWithChildren() - -describe('AnimatedWithChildren', () => { - beforeEach(() => { - TestedClass = new AnimatedWithChildren() - }) - - it('instantiates', () => { - expect(TestedClass).toBeTruthy() - }) - - it('has no children to start', () => { - expect(TestedClass.children.length).toEqual(0) - expect(TestedClass.children.length).not.toEqual(5) - }) - - it('adds children', () => { - const spy = jest.spyOn(AnimatedWithChildren.prototype, 'attach') - expect(TestedClass.children.length).toEqual(0) - TestedClass.addChild({ child: 'child' }) - expect(TestedClass.children.length).toEqual(1) - expect(spy).toHaveBeenCalled() - spy.mockRestore() - }) - - it('removes children', () => { - const anim = new Animated() - TestedClass.addChild(anim) - TestedClass.removeChild(anim) - expect(TestedClass.children.length).toEqual(0) - }) -}) diff --git a/src/renderprops/animated/createAnimatedComponent.js b/src/renderprops/animated/createAnimatedComponent.js deleted file mode 100644 index 6d94eeda9a..0000000000 --- a/src/renderprops/animated/createAnimatedComponent.js +++ /dev/null @@ -1,89 +0,0 @@ -import React from 'react' -import AnimatedProps from './AnimatedProps' -import { handleRef, shallowEqual } from '../shared/helpers' -import * as Globals from './Globals' - -export default function createAnimatedComponent(Component) { - class AnimatedComponent extends React.Component { - static propTypes = { - style(props, propName, componentName) { - if (!Component.propTypes) return - }, - } - - constructor(props) { - super() - this.attachProps(props) - } - - componentWillUnmount() { - this.propsAnimated && this.propsAnimated.detach() - } - - setNativeProps(props) { - const didUpdate = Globals.applyAnimatedValues.fn(this.node, props, this) - if (didUpdate === false) this.forceUpdate() - } - - // The system is best designed when setNativeProps is implemented. It is - // able to avoid re-rendering and directly set the attributes that - // changed. However, setNativeProps can only be implemented on leaf - // native components. If you want to animate a composite component, you - // need to re-render it. In this case, we have a fallback that uses - // forceUpdate. - callback = () => { - if (this.node) { - const didUpdate = Globals.applyAnimatedValues.fn( - this.node, - this.propsAnimated.getAnimatedValue(), - this - ) - if (didUpdate === false) this.forceUpdate() - } - } - - attachProps({ forwardRef, ...nextProps }) { - const oldPropsAnimated = this.propsAnimated - this.propsAnimated = new AnimatedProps(nextProps, this.callback) - // When you call detach, it removes the element from the parent list - // of children. If it goes to 0, then the parent also detaches itself - // and so on. - // An optimization is to attach the new elements and THEN detach the old - // ones instead of detaching and THEN attaching. - // This way the intermediate state isn't to go to 0 and trigger - // this expensive recursive detaching to then re-attach everything on - // the very next operation. - oldPropsAnimated && oldPropsAnimated.detach() - } - - shouldComponentUpdate(props) { - const { style, ...nextProps } = props - const { style: currentStyle, ...currentProps } = this.props - if ( - !shallowEqual(currentProps, nextProps) || - !shallowEqual(currentStyle, style) - ) { - this.attachProps(props) - return true - } - return false - } - - render() { - const { - scrollTop, - scrollLeft, - ...animatedProps - } = this.propsAnimated.getValue() - return ( - (this.node = handleRef(node, this.props.forwardRef))} - /> - ) - } - } - return React.forwardRef((props, ref) => ( - - )) -} diff --git a/src/renderprops/shared/colorMatchers.js b/src/renderprops/shared/colorMatchers.js deleted file mode 100644 index f8616ec122..0000000000 --- a/src/renderprops/shared/colorMatchers.js +++ /dev/null @@ -1,22 +0,0 @@ -// const INTEGER = '[-+]?\\d+'; -const NUMBER = '[-+]?\\d*\\.?\\d+' -const PERCENTAGE = NUMBER + '%' - -function call() { - return ( - '\\(\\s*(' + - Array.prototype.slice.call(arguments).join(')\\s*,\\s*(') + - ')\\s*\\)' - ) -} - -export const rgb = new RegExp('rgb' + call(NUMBER, NUMBER, NUMBER)) -export const rgba = new RegExp('rgba' + call(NUMBER, NUMBER, NUMBER, NUMBER)) -export const hsl = new RegExp('hsl' + call(NUMBER, PERCENTAGE, PERCENTAGE)) -export const hsla = new RegExp( - 'hsla' + call(NUMBER, PERCENTAGE, PERCENTAGE, NUMBER) -) -export const hex3 = /^#([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/ -export const hex4 = /^#([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/ -export const hex6 = /^#([0-9a-fA-F]{6})$/ -export const hex8 = /^#([0-9a-fA-F]{8})$/ diff --git a/src/renderprops/shared/colors.js b/src/renderprops/shared/colors.js deleted file mode 100644 index 0538dcd2d0..0000000000 --- a/src/renderprops/shared/colors.js +++ /dev/null @@ -1,155 +0,0 @@ -// http://www.w3.org/TR/css3-color/#svg-color -const colors = { - transparent: 0x00000000, - aliceblue: 0xf0f8ffff, - antiquewhite: 0xfaebd7ff, - aqua: 0x00ffffff, - aquamarine: 0x7fffd4ff, - azure: 0xf0ffffff, - beige: 0xf5f5dcff, - bisque: 0xffe4c4ff, - black: 0x000000ff, - blanchedalmond: 0xffebcdff, - blue: 0x0000ffff, - blueviolet: 0x8a2be2ff, - brown: 0xa52a2aff, - burlywood: 0xdeb887ff, - burntsienna: 0xea7e5dff, - cadetblue: 0x5f9ea0ff, - chartreuse: 0x7fff00ff, - chocolate: 0xd2691eff, - coral: 0xff7f50ff, - cornflowerblue: 0x6495edff, - cornsilk: 0xfff8dcff, - crimson: 0xdc143cff, - cyan: 0x00ffffff, - darkblue: 0x00008bff, - darkcyan: 0x008b8bff, - darkgoldenrod: 0xb8860bff, - darkgray: 0xa9a9a9ff, - darkgreen: 0x006400ff, - darkgrey: 0xa9a9a9ff, - darkkhaki: 0xbdb76bff, - darkmagenta: 0x8b008bff, - darkolivegreen: 0x556b2fff, - darkorange: 0xff8c00ff, - darkorchid: 0x9932ccff, - darkred: 0x8b0000ff, - darksalmon: 0xe9967aff, - darkseagreen: 0x8fbc8fff, - darkslateblue: 0x483d8bff, - darkslategray: 0x2f4f4fff, - darkslategrey: 0x2f4f4fff, - darkturquoise: 0x00ced1ff, - darkviolet: 0x9400d3ff, - deeppink: 0xff1493ff, - deepskyblue: 0x00bfffff, - dimgray: 0x696969ff, - dimgrey: 0x696969ff, - dodgerblue: 0x1e90ffff, - firebrick: 0xb22222ff, - floralwhite: 0xfffaf0ff, - forestgreen: 0x228b22ff, - fuchsia: 0xff00ffff, - gainsboro: 0xdcdcdcff, - ghostwhite: 0xf8f8ffff, - gold: 0xffd700ff, - goldenrod: 0xdaa520ff, - gray: 0x808080ff, - green: 0x008000ff, - greenyellow: 0xadff2fff, - grey: 0x808080ff, - honeydew: 0xf0fff0ff, - hotpink: 0xff69b4ff, - indianred: 0xcd5c5cff, - indigo: 0x4b0082ff, - ivory: 0xfffff0ff, - khaki: 0xf0e68cff, - lavender: 0xe6e6faff, - lavenderblush: 0xfff0f5ff, - lawngreen: 0x7cfc00ff, - lemonchiffon: 0xfffacdff, - lightblue: 0xadd8e6ff, - lightcoral: 0xf08080ff, - lightcyan: 0xe0ffffff, - lightgoldenrodyellow: 0xfafad2ff, - lightgray: 0xd3d3d3ff, - lightgreen: 0x90ee90ff, - lightgrey: 0xd3d3d3ff, - lightpink: 0xffb6c1ff, - lightsalmon: 0xffa07aff, - lightseagreen: 0x20b2aaff, - lightskyblue: 0x87cefaff, - lightslategray: 0x778899ff, - lightslategrey: 0x778899ff, - lightsteelblue: 0xb0c4deff, - lightyellow: 0xffffe0ff, - lime: 0x00ff00ff, - limegreen: 0x32cd32ff, - linen: 0xfaf0e6ff, - magenta: 0xff00ffff, - maroon: 0x800000ff, - mediumaquamarine: 0x66cdaaff, - mediumblue: 0x0000cdff, - mediumorchid: 0xba55d3ff, - mediumpurple: 0x9370dbff, - mediumseagreen: 0x3cb371ff, - mediumslateblue: 0x7b68eeff, - mediumspringgreen: 0x00fa9aff, - mediumturquoise: 0x48d1ccff, - mediumvioletred: 0xc71585ff, - midnightblue: 0x191970ff, - mintcream: 0xf5fffaff, - mistyrose: 0xffe4e1ff, - moccasin: 0xffe4b5ff, - navajowhite: 0xffdeadff, - navy: 0x000080ff, - oldlace: 0xfdf5e6ff, - olive: 0x808000ff, - olivedrab: 0x6b8e23ff, - orange: 0xffa500ff, - orangered: 0xff4500ff, - orchid: 0xda70d6ff, - palegoldenrod: 0xeee8aaff, - palegreen: 0x98fb98ff, - paleturquoise: 0xafeeeeff, - palevioletred: 0xdb7093ff, - papayawhip: 0xffefd5ff, - peachpuff: 0xffdab9ff, - peru: 0xcd853fff, - pink: 0xffc0cbff, - plum: 0xdda0ddff, - powderblue: 0xb0e0e6ff, - purple: 0x800080ff, - rebeccapurple: 0x663399ff, - red: 0xff0000ff, - rosybrown: 0xbc8f8fff, - royalblue: 0x4169e1ff, - saddlebrown: 0x8b4513ff, - salmon: 0xfa8072ff, - sandybrown: 0xf4a460ff, - seagreen: 0x2e8b57ff, - seashell: 0xfff5eeff, - sienna: 0xa0522dff, - silver: 0xc0c0c0ff, - skyblue: 0x87ceebff, - slateblue: 0x6a5acdff, - slategray: 0x708090ff, - slategrey: 0x708090ff, - snow: 0xfffafaff, - springgreen: 0x00ff7fff, - steelblue: 0x4682b4ff, - tan: 0xd2b48cff, - teal: 0x008080ff, - thistle: 0xd8bfd8ff, - tomato: 0xff6347ff, - turquoise: 0x40e0d0ff, - violet: 0xee82eeff, - wheat: 0xf5deb3ff, - white: 0xffffffff, - whitesmoke: 0xf5f5f5ff, - yellow: 0xffff00ff, - yellowgreen: 0x9acd32ff, -} - -export default colors diff --git a/src/renderprops/shared/constants.js b/src/renderprops/shared/constants.js deleted file mode 100644 index 5d40b5cd3d..0000000000 --- a/src/renderprops/shared/constants.js +++ /dev/null @@ -1,8 +0,0 @@ -export const config = { - default: { tension: 170, friction: 26 }, - gentle: { tension: 120, friction: 14 }, - wobbly: { tension: 180, friction: 12 }, - stiff: { tension: 210, friction: 20 }, - slow: { tension: 280, friction: 60 }, - molasses: { tension: 280, friction: 120 }, -} diff --git a/src/renderprops/shared/helpers.js b/src/renderprops/shared/helpers.js deleted file mode 100644 index cd16e78b73..0000000000 --- a/src/renderprops/shared/helpers.js +++ /dev/null @@ -1,106 +0,0 @@ -import { useRef, useLayoutEffect } from 'react' -import AnimatedValue from '../animated/AnimatedValue' -import AnimatedArray from '../animated/AnimatedArray' - -export function usePrevious(value, initialValue = null) { - const ref = useRef(initialValue) - useLayoutEffect(() => void (ref.current = value), [value]) - return ref -} - -export function debounce(func, delay = 0) { - let timeoutId - return function() { - const context = this - const args = arguments - clearTimeout(timeoutId) - timeoutId = setTimeout(() => func.apply(context, args), delay) - } -} -export function withDefault(value, defaultValue) { - return value === undefined || value === null ? defaultValue : value -} - -export function toArray(a) { - return a !== void 0 ? (Array.isArray(a) ? a : [a]) : [] -} - -export function shallowEqual(a, b) { - if (typeof a !== typeof b) return false - if (typeof a === 'string' || typeof a === 'number') return a === b - let i - for (i in a) if (!(i in b)) return false - for (i in b) if (a[i] !== b[i]) return false - return i === void 0 ? a === b : true -} - -export function callProp(obj, ...args) { - return typeof obj === 'function' ? obj(...args) : obj -} - -export function getValues(object) { - return Object.keys(object).map(k => object[k]) -} - -export function getForwardProps(props) { - const { - to, - from, - config, - native, - onStart, - onRest, - onFrame, - children, - reset, - reverse, - force, - immediate, - impl, - inject, - delay, - attach, - destroyed, - interpolateTo, - autoStart, - ref, - ...forward - } = props - return forward -} - -export function interpolateTo(props) { - const forward = getForwardProps(props) - const rest = Object.keys(props).reduce( - (a, k) => (forward[k] !== void 0 ? a : { ...a, [k]: props[k] }), - {} - ) - return { to: forward, ...rest } -} - -export function convertToAnimatedValue(acc, [name, value]) { - return { - ...acc, - [name]: new (Array.isArray(value) ? AnimatedArray : AnimatedValue)(value), - } -} - -export function convertValues(props) { - const { from, to, native } = props - const allProps = Object.entries({ ...from, ...to }) - return native - ? allProps.reduce(convertToAnimatedValue, {}) - : { ...from, ...to } -} - -export function handleRef(ref, forward) { - if (forward) { - // If it's a function, assume it's a ref callback - if (typeof forward === 'function') forward(ref) - else if (typeof forward === 'object') { - // If it's an object and has a 'current' property, assume it's a ref object - forward.current = ref - } - } - return ref -} diff --git a/src/renderprops/shared/interpolation.js b/src/renderprops/shared/interpolation.js deleted file mode 100644 index 31fe352679..0000000000 --- a/src/renderprops/shared/interpolation.js +++ /dev/null @@ -1,77 +0,0 @@ -import Interpolation from '../animated/Interpolation' -import normalizeColor from './normalizeColors' -import colors from './colors' - -function colorToRgba(input) { - let int32Color = normalizeColor(input) - if (int32Color === null) return input - int32Color = int32Color || 0 - let r = (int32Color & 0xff000000) >>> 24 - let g = (int32Color & 0x00ff0000) >>> 16 - let b = (int32Color & 0x0000ff00) >>> 8 - let a = (int32Color & 0x000000ff) / 255 - return `rgba(${r}, ${g}, ${b}, ${a})` -} - -// Problem: https://github.com/animatedjs/animated/pull/102 -// Solution: https://stackoverflow.com/questions/638565/parsing-scientific-notation-sensibly/658662 -const stringShapeRegex = /[+\-]?(?:0|[1-9]\d*)(?:\.\d*)?(?:[eE][+\-]?\d+)?/g -// Covers rgb, rgba, hsl, hsla -// Taken from https://gist.github.com/olmokramer/82ccce673f86db7cda5e -const colorRegex = /(#(?:[0-9a-f]{2}){2,4}|(#[0-9a-f]{3})|(rgb|hsl)a?\((-?\d+%?[,\s]+){2,3}\s*[\d\.]+%?\))/gi -// Covers color names (transparent, blue, etc.) -const colorNamesRegex = new RegExp(`(${Object.keys(colors).join('|')})`, 'g') - -/** - * Supports string shapes by extracting numbers so new values can be computed, - * and recombines those values into new strings of the same shape. Supports - * things like: - * - * rgba(123, 42, 99, 0.36) // colors - * -45deg // values with units - * 0 2px 2px 0px rgba(0, 0, 0, 0.12) // box shadows - */ -export default function createInterpolation(config) { - // Replace colors with rgba - const outputRange = config.output - .map(rangeValue => rangeValue.replace(colorRegex, colorToRgba)) - .map(rangeValue => rangeValue.replace(colorNamesRegex, colorToRgba)) - // -> - // [ - // [0, 50], - // [100, 150], - // [200, 250], - // [0, 0.5], - // ] - - const outputRanges = outputRange[0].match(stringShapeRegex).map(() => []) - outputRange.forEach(value => { - value - .match(stringShapeRegex) - .forEach((number, i) => outputRanges[i].push(+number)) - }) - const interpolations = outputRange[0] - .match(stringShapeRegex) - .map((value, i) => { - return Interpolation.create({ ...config, output: outputRanges[i] }) - }) - return input => { - let i = 0 - return ( - outputRange[0] - // 'rgba(0, 100, 200, 0)' - // -> - // 'rgba(${interpolations[0](input)}, ${interpolations[1](input)}, ...' - .replace(stringShapeRegex, () => interpolations[i++](input)) - // rgba requires that the r,g,b are integers.... so we want to round them, but we *dont* want to - // round the opacity (4th column). - .replace( - /rgba\(([0-9\.-]+), ([0-9\.-]+), ([0-9\.-]+), ([0-9\.-]+)\)/gi, - (_, p1, p2, p3, p4) => - `rgba(${Math.round(p1)}, ${Math.round(p2)}, ${Math.round( - p3 - )}, ${p4})` - ) - ) - } -} diff --git a/src/renderprops/shared/normalizeColors.js b/src/renderprops/shared/normalizeColors.js deleted file mode 100644 index f3c781a653..0000000000 --- a/src/renderprops/shared/normalizeColors.js +++ /dev/null @@ -1,180 +0,0 @@ -/* -https://github.com/react-community/normalize-css-color - -BSD 3-Clause License - -Copyright (c) 2016, React Community -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -* Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - -* Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - -* Neither the name of the copyright holder nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -import colorNames from './colors' -import * as matchers from './colorMatchers' - -export default function normalizeColor(color) { - let match - - if (typeof color === 'number') { - return color >>> 0 === color && color >= 0 && color <= 0xffffffff - ? color - : null - } - - // Ordered based on occurrences on Facebook codebase - if ((match = matchers.hex6.exec(color))) - return parseInt(match[1] + 'ff', 16) >>> 0 - - if (colorNames.hasOwnProperty(color)) return colorNames[color] - - if ((match = matchers.rgb.exec(color))) { - return ( - ((parse255(match[1]) << 24) | // r - (parse255(match[2]) << 16) | // g - (parse255(match[3]) << 8) | // b - 0x000000ff) >>> // a - 0 - ) - } - - if ((match = matchers.rgba.exec(color))) { - return ( - ((parse255(match[1]) << 24) | // r - (parse255(match[2]) << 16) | // g - (parse255(match[3]) << 8) | // b - parse1(match[4])) >>> // a - 0 - ) - } - - if ((match = matchers.hex3.exec(color))) { - return ( - parseInt( - match[1] + - match[1] + // r - match[2] + - match[2] + // g - match[3] + - match[3] + // b - 'ff', // a - 16 - ) >>> 0 - ) - } - - // https://drafts.csswg.org/css-color-4/#hex-notation - if ((match = matchers.hex8.exec(color))) return parseInt(match[1], 16) >>> 0 - - if ((match = matchers.hex4.exec(color))) { - return ( - parseInt( - match[1] + - match[1] + // r - match[2] + - match[2] + // g - match[3] + - match[3] + // b - match[4] + - match[4], // a - 16 - ) >>> 0 - ) - } - - if ((match = matchers.hsl.exec(color))) { - return ( - (hslToRgb( - parse360(match[1]), // h - parsePercentage(match[2]), // s - parsePercentage(match[3]) // l - ) | - 0x000000ff) >>> // a - 0 - ) - } - - if ((match = matchers.hsla.exec(color))) { - return ( - (hslToRgb( - parse360(match[1]), // h - parsePercentage(match[2]), // s - parsePercentage(match[3]) // l - ) | - parse1(match[4])) >>> // a - 0 - ) - } - return null -} - -function hue2rgb(p, q, t) { - if (t < 0) t += 1 - if (t > 1) t -= 1 - if (t < 1 / 6) return p + (q - p) * 6 * t - if (t < 1 / 2) return q - if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6 - return p -} - -function hslToRgb(h, s, l) { - const q = l < 0.5 ? l * (1 + s) : l + s - l * s - const p = 2 * l - q - const r = hue2rgb(p, q, h + 1 / 3) - const g = hue2rgb(p, q, h) - const b = hue2rgb(p, q, h - 1 / 3) - return ( - (Math.round(r * 255) << 24) | - (Math.round(g * 255) << 16) | - (Math.round(b * 255) << 8) - ) -} - -function parse255(str) { - const int = parseInt(str, 10) - if (int < 0) return 0 - if (int > 255) return 255 - return int -} - -function parse360(str) { - const int = parseFloat(str) - return (((int % 360) + 360) % 360) / 360 -} - -function parse1(str) { - const num = parseFloat(str) - if (num < 0) return 0 - if (num > 1) return 255 - return Math.round(num * 255) -} - -function parsePercentage(str) { - // parseFloat conveniently ignores the final % - const int = parseFloat(str) - if (int < 0) return 0 - if (int > 100) return 1 - return int / 100 -} diff --git a/src/renderprops/targets/konva/index.js b/src/renderprops/targets/konva/index.js deleted file mode 100644 index 6914c26b6e..0000000000 --- a/src/renderprops/targets/konva/index.js +++ /dev/null @@ -1,68 +0,0 @@ -import * as Globals from '../../animated/Globals' -import Controller from '../../animated/Controller' -import { interpolate } from '../../animated/AnimatedInterpolation' -import animated from '../../animated/createAnimatedComponent' -import createInterpolation from '../../shared/interpolation' -import colorNames from '../../shared/colors' -import { config } from '../../shared/constants' -import Spring from '../../Spring' -import Transition from '../../Transition' -import Trail from '../../Trail' -import Keyframes from '../../Keyframes' - -Globals.injectDefaultElement('Group') -Globals.injectInterpolation(createInterpolation) -Globals.injectColorNames(colorNames) -Globals.injectApplyAnimatedValues( - (instance, props) => { - if (instance.nodeType) { - instance._applyProps(instance, props) - } else return false - }, - style => style -) - -const konvaElements = [ - 'Layer', - 'FastLayer', - 'Group', - 'Label', - 'Rect', - 'Circle', - 'Ellipse', - 'Wedge', - 'Line', - 'Sprite', - 'Image', - 'Text', - 'TextPath', - 'Star', - 'Ring', - 'Arc', - 'Tag', - 'Path', - 'RegularPolygon', - 'Arrow', - 'Shape', - 'Transformer', -] - -Object.assign( - animated, - konvaElements.reduce( - (acc, element) => ({ ...acc, [element]: animated(element) }), - {} - ) -) - -export { - Spring, - Keyframes, - Transition, - Trail, - Controller, - config, - animated, - interpolate, - Globals, -} diff --git a/src/renderprops/targets/native/AnimatedTransform.js b/src/renderprops/targets/native/AnimatedTransform.js deleted file mode 100644 index 16fc588b4d..0000000000 --- a/src/renderprops/targets/native/AnimatedTransform.js +++ /dev/null @@ -1,50 +0,0 @@ -import Animated from '../../animated/Animated' -import AnimatedWithChildren from '../../animated/AnimatedWithChildren' - -export default class AnimatedTransform extends AnimatedWithChildren { - constructor(transforms) { - super() - this._transforms = transforms - } - - getValue() { - return this._transforms.map(transform => { - var result = {} - for (var key in transform) { - var value = transform[key] - result[key] = value instanceof Animated ? value.getValue() : value - } - return result - }) - } - - getAnimatedValue() { - return this._transforms.map(transform => { - var result = {} - for (var key in transform) { - var value = transform[key] - result[key] = - value instanceof Animated ? value.getAnimatedValue() : value - } - return result - }) - } - - attach() { - this._transforms.forEach(transform => { - for (var key in transform) { - var value = transform[key] - if (value instanceof Animated) value.addChild(this) - } - }) - } - - detach() { - this._transforms.forEach(transform => { - for (var key in transform) { - var value = transform[key] - if (value instanceof Animated) value.removeChild(this) - } - }) - } -} diff --git a/src/renderprops/targets/native/index.js b/src/renderprops/targets/native/index.js deleted file mode 100644 index ae27ba9eb1..0000000000 --- a/src/renderprops/targets/native/index.js +++ /dev/null @@ -1,38 +0,0 @@ -import * as Globals from '../../animated/Globals' -import Controller from '../../animated/Controller' -import { interpolate } from '../../animated/AnimatedInterpolation' -import animated from '../../animated/createAnimatedComponent' -import { config } from '../../shared/constants' -import AnimatedStyle from '../../animated/AnimatedStyle' -import Spring from '../../Spring' -import Transition from '../../Transition' -import Trail from '../../Trail' -import Keyframes from '../../Keyframes' -import createInterpolation from '../../shared/interpolation' -import colorNames from '../../shared/colors' -import AnimatedTransform from './AnimatedTransform' -import { StyleSheet, View } from 'react-native' - -Globals.injectDefaultElement(View) -Globals.injectInterpolation(createInterpolation) -Globals.injectColorNames(colorNames) -Globals.injectApplyAnimatedValues( - (instance, props) => - instance.setNativeProps ? instance.setNativeProps(props) : false, - style => ({ ...style, transform: new AnimatedTransform(style.transform) }) -) -Globals.injectCreateAnimatedStyle( - styles => new AnimatedStyle(StyleSheet.flatten(styles)) -) - -export { - Spring, - Keyframes, - Transition, - Trail, - Controller, - config, - animated, - interpolate, - Globals, -} diff --git a/src/renderprops/targets/universal/index.js b/src/renderprops/targets/universal/index.js deleted file mode 100644 index a9bff09ed0..0000000000 --- a/src/renderprops/targets/universal/index.js +++ /dev/null @@ -1,49 +0,0 @@ -import * as Globals from '../../animated/Globals' -import Controller from '../../animated/Controller' -import { interpolate } from '../../animated/AnimatedInterpolation' -import animated from '../../animated/createAnimatedComponent' -import Interpolation from '../../animated/Interpolation' -import { config } from '../../shared/constants' -import Spring from '../../Spring' -import Transition from '../../Transition' -import Trail from '../../Trail' -import Keyframes from '../../Keyframes' - -// Problem: https://github.com/animatedjs/animated/pull/102 -// Solution: https://stackoverflow.com/questions/638565/parsing-scientific-notation-sensibly/658662 -const stringShapeRegex = /[+\-]?(?:0|[1-9]\d*)(?:\.\d*)?(?:[eE][+\-]?\d+)?/g -function createInterpolation(config) { - const outputRange = config.output - const outputRanges = outputRange[0].match(stringShapeRegex).map(() => []) - outputRange.forEach(value => { - value - .match(stringShapeRegex) - .forEach((number, i) => outputRanges[i].push(+number)) - }) - const interpolations = outputRange[0] - .match(stringShapeRegex) - .map((_, i) => Interpolation.create({ ...config, output: outputRanges[i] })) - return input => { - let i = 0 - return outputRange[0].replace(stringShapeRegex, () => - interpolations[i++](input) - ) - } -} - -// Render 30/fps by default -Globals.injectFrame(cb => setTimeout(cb, 1000 / 30), r => clearTimeout(r)) -Globals.injectInterpolation(createInterpolation) -Globals.injectApplyAnimatedValues(() => false, style => style) - -export { - Spring, - Keyframes, - Transition, - Trail, - Controller, - config, - animated, - interpolate, - Globals, -} diff --git a/src/renderprops/targets/web/fix-auto.js b/src/renderprops/targets/web/fix-auto.js deleted file mode 100644 index eeebc637d3..0000000000 --- a/src/renderprops/targets/web/fix-auto.js +++ /dev/null @@ -1,67 +0,0 @@ -import React from 'react' -import ReactDOM from 'react-dom' -import { convertValues, getValues } from '../../shared/helpers' - -const check = value => value === 'auto' -const overwrite = (width, height) => (acc, [name, value]) => ({ - ...acc, - [name]: value === 'auto' ? (~name.indexOf('height') ? height : width) : value, -}) - -export default function fixAuto(props, callback) { - const { from, to, children } = props - - // Dry-route props back if nothing's using 'auto' in there - // TODO: deal with "null" - if (!(getValues(to).some(check) || getValues(from).some(check))) return - // Fetch render v-dom - let element = children(convertValues(props)) - // A spring can return undefined/null, check against that (#153) - if (!element) return - // Or it could be an array (#346) ... - if (Array.isArray(element)) - element = { type: 'div', props: { children: element } } - // Extract styles - const elementStyles = element.props.style - - // Return v.dom with injected ref - return ( - { - if (ref) { - // Once it's rendered out, fetch bounds (minus padding/margin/borders) - let node = ReactDOM.findDOMNode(ref) - let width, height - let cs = getComputedStyle(node) - if (cs.boxSizing === 'border-box') { - width = node.offsetWidth - height = node.offsetHeight - } else { - const paddingX = - parseFloat(cs.paddingLeft || 0) + parseFloat(cs.paddingRight || 0) - const paddingY = - parseFloat(cs.paddingTop || 0) + parseFloat(cs.paddingBottom || 0) - const borderX = - parseFloat(cs.borderLeftWidth || 0) + - parseFloat(cs.borderRightWidth || 0) - const borderY = - parseFloat(cs.borderTopWidth || 0) + - parseFloat(cs.borderBottomWidth || 0) - width = node.offsetWidth - paddingX - borderX - height = node.offsetHeight - paddingY - borderY - } - - const convert = overwrite(width, height) - callback({ - ...props, - from: Object.entries(from).reduce(convert, from), - to: Object.entries(to).reduce(convert, to), - }) - } - }} - /> - ) -} diff --git a/src/renderprops/targets/web/globals.js b/src/renderprops/targets/web/globals.js deleted file mode 100644 index d92f8633d3..0000000000 --- a/src/renderprops/targets/web/globals.js +++ /dev/null @@ -1,120 +0,0 @@ -import * as Globals from '../../animated/Globals' -import AnimatedStyle from '../../animated/AnimatedStyle' -import colorNames from '../../shared/colors' -import createInterpolation from '../../shared/interpolation' -import fixAuto from './fix-auto' - -let isUnitlessNumber = { - animationIterationCount: true, - borderImageOutset: true, - borderImageSlice: true, - borderImageWidth: true, - boxFlex: true, - boxFlexGroup: true, - boxOrdinalGroup: true, - columnCount: true, - columns: true, - flex: true, - flexGrow: true, - flexPositive: true, - flexShrink: true, - flexNegative: true, - flexOrder: true, - gridRow: true, - gridRowEnd: true, - gridRowSpan: true, - gridRowStart: true, - gridColumn: true, - gridColumnEnd: true, - gridColumnSpan: true, - gridColumnStart: true, - fontWeight: true, - lineClamp: true, - lineHeight: true, - opacity: true, - order: true, - orphans: true, - tabSize: true, - widows: true, - zIndex: true, - zoom: true, - // SVG-related properties - fillOpacity: true, - floodOpacity: true, - stopOpacity: true, - strokeDasharray: true, - strokeDashoffset: true, - strokeMiterlimit: true, - strokeOpacity: true, - strokeWidth: true, -} - -const prefixKey = (prefix, key) => - prefix + key.charAt(0).toUpperCase() + key.substring(1) -const prefixes = ['Webkit', 'Ms', 'Moz', 'O'] - -isUnitlessNumber = Object.keys(isUnitlessNumber).reduce((acc, prop) => { - prefixes.forEach(prefix => (acc[prefixKey(prefix, prop)] = acc[prop])) - return acc -}, isUnitlessNumber) - -function dangerousStyleValue(name, value, isCustomProperty) { - if (value == null || typeof value === 'boolean' || value === '') return '' - if ( - !isCustomProperty && - typeof value === 'number' && - value !== 0 && - !(isUnitlessNumber.hasOwnProperty(name) && isUnitlessNumber[name]) - ) - return value + 'px' - // Presumes implicit 'px' suffix for unitless numbers - return ('' + value).trim() -} - -const attributeCache = {} -Globals.injectCreateAnimatedStyle(style => new AnimatedStyle(style)) -Globals.injectDefaultElement('div') -Globals.injectInterpolation(createInterpolation) -Globals.injectColorNames(colorNames) -Globals.injectBugfixes(fixAuto) -Globals.injectApplyAnimatedValues( - (instance, props) => { - if (instance.nodeType && instance.setAttribute !== undefined) { - const { style, children, scrollTop, scrollLeft, ...attributes } = props - - if (scrollTop !== void 0) instance.scrollTop = scrollTop - if (scrollLeft !== void 0) instance.scrollLeft = scrollLeft - - // Set textContent, if children is an animatable value - if (children !== void 0) instance.textContent = children - - // Set styles ... - for (let styleName in style) { - if (!style.hasOwnProperty(styleName)) continue - var isCustomProperty = styleName.indexOf('--') === 0 - var styleValue = dangerousStyleValue( - styleName, - style[styleName], - isCustomProperty - ) - if (styleName === 'float') styleName = 'cssFloat' - if (isCustomProperty) instance.style.setProperty(styleName, styleValue) - else instance.style[styleName] = styleValue - } - - // Set attributes ... - for (let name in attributes) { - // Attributes are written in dash case - const dashCase = - attributeCache[name] || - (attributeCache[name] = name.replace( - /([A-Z])/g, - n => '-' + n.toLowerCase() - )) - if (typeof instance.getAttribute(dashCase) !== 'undefined') - instance.setAttribute(dashCase, attributes[name]) - } - } else return false - }, - style => style -) diff --git a/src/shared/helpers.test.ts b/src/shared/helpers.test.ts deleted file mode 100644 index 058c5a6764..0000000000 --- a/src/shared/helpers.test.ts +++ /dev/null @@ -1,40 +0,0 @@ -import { interpolateTo } from './helpers' - -describe('helpers', () => { - it('interpolateTo', () => { - const forwardProps = { - result: 'ok', - } - const restProps = { - from: 'from', - config: 'config', - onStart: 'onStart', - } - const excludeProps = { - onRest: undefined, - onFrame: undefined, - children: undefined, - reset: undefined, - reverse: undefined, - force: undefined, - immediate: undefined, - delay: undefined, - attach: undefined, - destroyed: undefined, - interpolateTo: undefined, - ref: undefined, - lazy: undefined, - } - expect( - interpolateTo({ - ...forwardProps, - ...restProps, - ...excludeProps, - }) - ).toMatchObject({ - to: forwardProps, - ...restProps, - ...excludeProps, - }) - }) -}) diff --git a/src/shared/helpers.ts b/src/shared/helpers.ts deleted file mode 100644 index c47e3755f7..0000000000 --- a/src/shared/helpers.ts +++ /dev/null @@ -1,143 +0,0 @@ -import { MutableRefObject, Ref, useCallback, useState } from 'react' - -export const is = { - arr: Array.isArray, - obj: (a: unknown): a is object => - Object.prototype.toString.call(a) === '[object Object]', - fun: (a: unknown): a is Function => typeof a === 'function', - str: (a: unknown): a is string => typeof a === 'string', - num: (a: unknown): a is number => typeof a === 'number', - und: (a: unknown): a is undefined => a === void 0, - nul: (a: unknown): a is null => a === null, - set: (a: unknown): a is Set => a instanceof Set, - map: (a: unknown): a is Map => a instanceof Map, - equ(a: any, b: any) { - if (typeof a !== typeof b) return false - if (is.str(a) || is.num(a)) return a === b - if ( - is.obj(a) && - is.obj(b) && - Object.keys(a).length + Object.keys(b).length === 0 - ) - return true - let i - for (i in a) if (!(i in b)) return false - for (i in b) if (a[i] !== b[i]) return false - return is.und(i) ? a === b : true - }, -} - -export function merge(target: any, lowercase: boolean = true) { - return (object: object) => - (is.arr(object) ? object : Object.keys(object)).reduce( - (acc: any, element) => { - const key = lowercase - ? element[0].toLowerCase() + element.substring(1) - : element - acc[key] = target(key) - return acc - }, - target - ) -} - -export function useForceUpdate() { - const [, f] = useState(false) - const forceUpdate = useCallback(() => f(v => !v), []) - return forceUpdate -} - -export function withDefault(value: T, defaultValue: DT) { - return is.und(value) || is.nul(value) ? defaultValue : value -} - -export function toArray(a?: T | T[]): T[] { - return !is.und(a) ? (is.arr(a) ? a : [a]) : [] -} - -export function callProp( - obj: T, - ...args: any[] -): T extends (...args: any[]) => infer R ? R : T { - return is.fun(obj) ? obj(...args) : obj -} - -type PartialExcludedProps = Partial<{ - to: any - from: any - config: any - onStart: any - onRest: any - onFrame: any - children: any - reset: any - reverse: any - force: any - immediate: any - delay: any - attach: any - destroyed: any - interpolateTo: any - ref: any - lazy: any -}> & - object - -export type ForwardedProps = Pick< - T, - Exclude -> - -function getForwardProps

( - props: P -): ForwardedProps

{ - const { - to, - from, - config, - onStart, - onRest, - onFrame, - children, - reset, - reverse, - force, - immediate, - delay, - attach, - destroyed, - interpolateTo, - ref, - lazy, - ...forward - } = props - return forward -} - -interface InterpolateTo extends PartialExcludedProps { - to: ForwardedProps -} -export function interpolateTo( - props: T -): InterpolateTo { - const forward: ForwardedProps = getForwardProps(props) - if (is.und(forward)) return { to: forward, ...props } - const rest = Object.keys(props).reduce( - (a: PartialExcludedProps, k: string) => - !is.und((forward as any)[k]) ? a : { ...a, [k]: (props as any)[k] }, - {} - ) - return { to: forward, ...rest } -} - -export function handleRef(ref: T, forward: Ref) { - if (forward) { - // If it's a function, assume it's a ref callback - if (is.fun(forward)) forward(ref) - else if (is.obj(forward)) { - // If it's an object and has a 'current' property, assume it's a ref object - ;(forward as MutableRefObject).current = ref - } - } - return ref -} diff --git a/src/shared/stringInterpolation.ts b/src/shared/stringInterpolation.ts deleted file mode 100644 index 82d0724f47..0000000000 --- a/src/shared/stringInterpolation.ts +++ /dev/null @@ -1,78 +0,0 @@ -import createInterpolator from '../animated/createInterpolator' -import { InterpolationConfig } from '../types/interpolation' -import colors from './colors' -import normalizeColor from './normalizeColors' - -function colorToRgba(input: string) { - let int32Color = normalizeColor(input) - if (int32Color === null) return input - int32Color = int32Color || 0 - let r = (int32Color & 0xff000000) >>> 24 - let g = (int32Color & 0x00ff0000) >>> 16 - let b = (int32Color & 0x0000ff00) >>> 8 - let a = (int32Color & 0x000000ff) / 255 - return `rgba(${r}, ${g}, ${b}, ${a})` -} - -// Problem: https://github.com/animatedjs/animated/pull/102 -// Solution: https://stackoverflow.com/questions/638565/parsing-scientific-notation-sensibly/658662 -const stringShapeRegex = /[+\-]?(?:0|[1-9]\d*)(?:\.\d*)?(?:[eE][+\-]?\d+)?/g -// Covers rgb, rgba, hsl, hsla -// Taken from https://gist.github.com/olmokramer/82ccce673f86db7cda5e -const colorRegex = /(#(?:[0-9a-f]{2}){2,4}|(#[0-9a-f]{3})|(rgb|hsl)a?\((-?\d+%?[,\s]+){2,3}\s*[\d\.]+%?\))/gi -// Covers color names (transparent, blue, etc.) -const colorNamesRegex = new RegExp(`(${Object.keys(colors).join('|')})`, 'g') - -/** - * Supports string shapes by extracting numbers so new values can be computed, - * and recombines those values into new strings of the same shape. Supports - * things like: - * - * rgba(123, 42, 99, 0.36) // colors - * -45deg // values with units - * 0 2px 2px 0px rgba(0, 0, 0, 0.12) // box shadows - */ -const createStringInterpolator = (config: InterpolationConfig) => { - // Replace colors with rgba - const outputRange = config.output - .map(rangeValue => rangeValue.replace(colorRegex, colorToRgba)) - .map(rangeValue => rangeValue.replace(colorNamesRegex, colorToRgba)) - - const outputRanges: number[][] = outputRange[0] - .match(stringShapeRegex)! - .map(() => []) - outputRange.forEach(value => { - value - .match(stringShapeRegex)! - .forEach((number, i) => outputRanges[i].push(+number)) - }) - const interpolations = outputRange[0] - .match(stringShapeRegex)! - .map((_value, i) => - createInterpolator({ ...config, output: outputRanges[i] }) - ) - return (input: number) => { - let i = 0 - return ( - outputRange[0] - // 'rgba(0, 100, 200, 0)' - // -> - // 'rgba(${interpolations[0](input)}, ${interpolations[1](input)}, ...' - .replace( - stringShapeRegex, - () => (interpolations[i++](input) as unknown) as string - ) - // rgba requires that the r,g,b are integers.... so we want to round them, but we *dont* want to - // round the opacity (4th column). - .replace( - /rgba\(([0-9\.-]+), ([0-9\.-]+), ([0-9\.-]+), ([0-9\.-]+)\)/gi, - (_, p1: number, p2: number, p3: number, p4: number) => - `rgba(${Math.round(p1)}, ${Math.round(p2)}, ${Math.round( - p3 - )}, ${p4})` - ) - ) - } -} - -export default createStringInterpolator diff --git a/src/targets/cookbook/index.js b/src/targets/cookbook/index.js deleted file mode 100644 index adb31edaae..0000000000 --- a/src/targets/cookbook/index.js +++ /dev/null @@ -1,52 +0,0 @@ -import * as Globals from '../../animated/Globals' -import AnimatedInterpolation from '../../animated/AnimatedInterpolation' -import animated from '../../animated/createAnimatedComponent' -import createInterpolator from '../../animated/createInterpolator' -import Animated from '../../animated/Animated' -import AnimatedValueArray from '../../animated/AnimatedValueArray' -import AnimatedProps from '../../animated/AnimatedProps' -import AnimatedStyle from '../../animated/AnimatedStyle' -import AnimatedValue from '../../animated/AnimatedValue' -import Controller from '../../animated/Controller' -import * as frameloop from '../../animated/FrameLoop' -import * as colorMatchers from '../../shared/colorMatchers' -import * as helpers from '../../shared/helpers' -import * as constants from '../../shared/constants' -import { config } from '../../shared/constants' -import colorNames from '../../shared/colors' -import normalizeColor from '../../shared/normalizeColors' -import createInterpolation from '../../shared/stringInterpolation' -import { interpolate } from '../../interpolate' -import { useChain } from '../../useChain' -import { useSpring } from '../../useSpring' -import { useSprings } from '../../useSprings' -import { useTrail } from '../../useTrail' -import { useTransition } from '../../useTransition' - -export { - Globals, - AnimatedInterpolation, - interpolate, - animated, - animated as a, - createInterpolator, - Animated, - AnimatedValueArray, - AnimatedProps, - AnimatedStyle, - AnimatedValue, - Controller, - frameloop, - colorMatchers, - helpers, - constants, - config, - colorNames, - normalizeColor, - createInterpolation, - useSpring, - useTrail, - useTransition, - useChain, - useSprings, -} diff --git a/src/targets/konva/index.ts b/src/targets/konva/index.ts deleted file mode 100644 index 739e09cf7f..0000000000 --- a/src/targets/konva/index.ts +++ /dev/null @@ -1,87 +0,0 @@ -import * as konva from 'react-konva' -import animated from '../../animated/createAnimatedComponent' -import * as Globals from '../../animated/Globals' -import { update } from '../../animated/FrameLoop' -import { interpolate } from '../../interpolate' -import colorNames from '../../shared/colors' -import { config } from '../../shared/constants' -import createStringInterpolator from '../../shared/stringInterpolation' -import { - AnimatedComponent, - CreateAnimatedComponent, -} from '../../types/animated' -import { useChain } from '../../useChain' -import { useSpring } from '../../useSpring' -import { useSprings } from '../../useSprings' -import { useTrail } from '../../useTrail' -import { useTransition } from '../../useTransition' -import { merge } from '../../shared/helpers' - -Globals.injectDefaultElement('Group') -Globals.injectStringInterpolator(createStringInterpolator) -Globals.injectColorNames(colorNames) -Globals.injectApplyAnimatedValues( - (instance, props) => { - if (instance.nodeType) { - instance._applyProps(instance, props) - return - } else return false - }, - style => style -) - -type KonvaComponents = Pick< - typeof konva, - { - [K in keyof typeof konva]: typeof konva[K] extends React.ReactType - ? K - : never - }[keyof typeof konva] -> - -const konvaElements: (keyof KonvaComponents)[] = [ - 'Arc', - 'Arrow', - 'Circle', - 'Ellipse', - 'FastLayer', - 'Group', - 'Image', - 'Label', - 'Layer', - 'Line', - 'Path', - 'Rect', - 'RegularPolygon', - 'Ring', - 'Shape', - 'Sprite', - 'Star', - 'Tag', - 'Text', - 'TextPath', - 'Transformer', - 'Wedge', -] - -type AnimatedWithKonvaElements = CreateAnimatedComponent & - { [Tag in keyof KonvaComponents]: AnimatedComponent } - -// Extend animated with all the available Konva elements -const apply = merge(animated as AnimatedWithKonvaElements, false) -const extendedAnimated = apply(konvaElements) - -export { - apply, - config, - update, - extendedAnimated as animated, - extendedAnimated as a, - interpolate, - Globals, - useSpring, - useTrail, - useTransition, - useChain, - useSprings, -} diff --git a/src/targets/native/AnimatedTransform.ts b/src/targets/native/AnimatedTransform.ts deleted file mode 100644 index d230b0c7fc..0000000000 --- a/src/targets/native/AnimatedTransform.ts +++ /dev/null @@ -1,53 +0,0 @@ -import Animated from '../../animated/Animated' - -type Transform = { [key: string]: string | number | Animated } - -export default class AnimatedTransform extends Animated { - _transforms: Transform[] - - constructor(transforms: Transform[]) { - super() - this._transforms = transforms - } - - getValue() { - return this._transforms.map(transform => { - let result: { [key: string]: unknown } = {} - for (var key in transform) { - var value = transform[key] - result[key] = value instanceof Animated ? value.getValue() : value - } - return result - }) - } - - getAnimatedValue() { - return this._transforms.map(transform => { - let result: { [key: string]: unknown } = {} - for (var key in transform) { - var value = transform[key] - result[key] = - value instanceof Animated ? value.getAnimatedValue() : value - } - return result - }) - } - - attach() { - this._transforms.forEach(transform => { - for (var key in transform) { - var value = transform[key] - if (value instanceof Animated) value.addChild(this) - } - }) - } - - detach() { - this._transforms.forEach(transform => { - for (var key in transform) { - var value = transform[key] - if (value instanceof Animated) value.removeChild(this) - } - }) - } -} diff --git a/src/targets/native/index.ts b/src/targets/native/index.ts deleted file mode 100644 index 1ea8165742..0000000000 --- a/src/targets/native/index.ts +++ /dev/null @@ -1,52 +0,0 @@ -import { StyleSheet, View } from 'react-native' -import AnimatedStyle from '../../animated/AnimatedStyle' -import animated from '../../animated/createAnimatedComponent' -import * as Globals from '../../animated/Globals' -import { update } from '../../animated/FrameLoop' -import { interpolate } from '../../interpolate' -import colorNames from '../../shared/colors' -import { config } from '../../shared/constants' -import createStringInterpolator from '../../shared/stringInterpolation' -import { useChain } from '../../useChain' -import { useSpring } from '../../useSpring' -import { useSprings } from '../../useSprings' -import { useTrail } from '../../useTrail' -import { useTransition } from '../../useTransition' -import AnimatedTransform from './AnimatedTransform' -import { merge } from '../../shared/helpers' - -Globals.injectDefaultElement(View) -Globals.injectStringInterpolator(createStringInterpolator) -Globals.injectColorNames(colorNames) -Globals.injectApplyAnimatedValues( - (instance, props) => - instance.setNativeProps ? instance.setNativeProps(props) : false, - style => ({ ...style, transform: new AnimatedTransform(style.transform) }) -) -Globals.injectCreateAnimatedStyle( - styles => new AnimatedStyle(StyleSheet.flatten(styles)) -) -Globals.injectAnimatedApi((node, mounted, forceUpdate) => ({ - setNativeProps: props => { - const didUpdate = Globals.applyAnimatedValues.fn(node.current, props) - if (!didUpdate) mounted!.current && forceUpdate!() - }, - getNode: () => node.current, -})) - -const apply = merge(animated) - -export { - apply, - config, - update, - animated, - animated as a, - interpolate, - Globals, - useSpring, - useTrail, - useTransition, - useChain, - useSprings, -} diff --git a/src/targets/three/index.ts b/src/targets/three/index.ts deleted file mode 100644 index 1872140ad9..0000000000 --- a/src/targets/three/index.ts +++ /dev/null @@ -1,52 +0,0 @@ -import * as THREE from 'three' -import { invalidate, applyProps, addEffect } from 'react-three-fiber' -import { interpolate } from '../../interpolate' -import animated from '../../animated/createAnimatedComponent' -import * as Globals from '../../animated/Globals' -import colorNames from '../../shared/colors' -import { config } from '../../shared/constants' -import createInterpolation from '../../shared/stringInterpolation' -import { useChain } from '../../useChain' -import { useSpring } from '../../useSpring' -import { useSprings } from '../../useSprings' -import { useTrail } from '../../useTrail' -import { useTransition } from '../../useTransition' -import { merge } from '../../shared/helpers' -import { update } from '../../animated/FrameLoop' -import { ReactType } from 'react' - -// Extend animated with all the available THREE elements -const apply = merge(animated) -const extendedAnimated = apply(THREE) -extendedAnimated.primitive = animated('primitive' as ReactType) - -if (addEffect) { - // Add the update function as a global effect to react-three-fibers update loop - addEffect(update) - // Ping react-three-fiber, so that it will call react-springs update function as an effect - Globals.injectManualFrameloop(() => invalidate()) -} - -// Set default native-element -Globals.injectDefaultElement('group') -// Use default interpolation (which includes numbers, strings, colors) -Globals.injectStringInterpolator(createInterpolation) -// Inject color names, so that it will be able to deal with things like "peachpuff" -Globals.injectColorNames(colorNames) -// This is how we teach react-spring to set props "natively", the api is (instance, props) => { ... } -Globals.injectApplyAnimatedValues(applyProps, style => style) - -export { - apply, - update, - config, - extendedAnimated as animated, - extendedAnimated as a, - interpolate, - Globals, - useSpring, - useTrail, - useTransition, - useChain, - useSprings, -} diff --git a/src/targets/universal/index.ts b/src/targets/universal/index.ts deleted file mode 100644 index f5c9befc48..0000000000 --- a/src/targets/universal/index.ts +++ /dev/null @@ -1,62 +0,0 @@ -import animated from '../../animated/createAnimatedComponent' -import createInterpolator from '../../animated/createInterpolator' -import * as Globals from '../../animated/Globals' -import { update } from '../../animated/FrameLoop' -import { interpolate } from '../../interpolate' -import { config } from '../../shared/constants' -import { InterpolationConfig } from '../../types/interpolation' -import { useChain } from '../../useChain' -import { useSpring } from '../../useSpring' -import { useSprings } from '../../useSprings' -import { useTrail } from '../../useTrail' -import { useTransition } from '../../useTransition' -import { merge } from '../../shared/helpers' - -// Problem: https://github.com/animatedjs/animated/pull/102 -// Solution: https://stackoverflow.com/questions/638565/parsing-scientific-notation-sensibly/658662 -const stringShapeRegex = /[+\-]?(?:0|[1-9]\d*)(?:\.\d*)?(?:[eE][+\-]?\d+)?/g -const createStringInterpolator = (config: InterpolationConfig) => { - const outputRange = config.output - const outputRanges: number[][] = outputRange[0] - .match(stringShapeRegex)! - .map(() => []) - outputRange.forEach(value => { - value - .match(stringShapeRegex)! - .forEach((number, i) => outputRanges[i].push(+number)) - }) - const interpolations = outputRange[0] - .match(stringShapeRegex)! - .map((_, i) => createInterpolator({ ...config, output: outputRanges[i] })) - return (input: number) => { - let i = 0 - return outputRange[0].replace( - stringShapeRegex, - () => (interpolations[i++](input) as unknown) as string - ) - } -} - -Globals.injectStringInterpolator(createStringInterpolator) -Globals.injectApplyAnimatedValues(() => false, style => style) - -const apply = merge(animated, false) -const Interpolation = { - create: createInterpolator, -} - -export { - apply, - config, - update, - animated, - animated as a, - interpolate, - Globals, - useSpring, - useTrail, - useTransition, - useChain, - useSprings, - Interpolation, -} diff --git a/src/targets/web/globals.ts b/src/targets/web/globals.ts deleted file mode 100644 index 481409f9d9..0000000000 --- a/src/targets/web/globals.ts +++ /dev/null @@ -1,127 +0,0 @@ -import AnimatedStyle from '../../animated/AnimatedStyle' -import * as Globals from '../../animated/Globals' -import colorNames from '../../shared/colors' -import createStringInterpolator from '../../shared/stringInterpolation' - -let isUnitlessNumber: { [key: string]: true } = { - animationIterationCount: true, - borderImageOutset: true, - borderImageSlice: true, - borderImageWidth: true, - boxFlex: true, - boxFlexGroup: true, - boxOrdinalGroup: true, - columnCount: true, - columns: true, - flex: true, - flexGrow: true, - flexPositive: true, - flexShrink: true, - flexNegative: true, - flexOrder: true, - gridRow: true, - gridRowEnd: true, - gridRowSpan: true, - gridRowStart: true, - gridColumn: true, - gridColumnEnd: true, - gridColumnSpan: true, - gridColumnStart: true, - fontWeight: true, - lineClamp: true, - lineHeight: true, - opacity: true, - order: true, - orphans: true, - tabSize: true, - widows: true, - zIndex: true, - zoom: true, - // SVG-related properties - fillOpacity: true, - floodOpacity: true, - stopOpacity: true, - strokeDasharray: true, - strokeDashoffset: true, - strokeMiterlimit: true, - strokeOpacity: true, - strokeWidth: true, -} - -const prefixKey = (prefix: string, key: string) => - prefix + key.charAt(0).toUpperCase() + key.substring(1) -const prefixes = ['Webkit', 'Ms', 'Moz', 'O'] - -isUnitlessNumber = Object.keys(isUnitlessNumber).reduce((acc, prop) => { - prefixes.forEach(prefix => (acc[prefixKey(prefix, prop)] = acc[prop])) - return acc -}, isUnitlessNumber) - -function dangerousStyleValue( - name: string, - value: string | number | boolean | null, - isCustomProperty: boolean -) { - if (value == null || typeof value === 'boolean' || value === '') return '' - if ( - !isCustomProperty && - typeof value === 'number' && - value !== 0 && - !(isUnitlessNumber.hasOwnProperty(name) && isUnitlessNumber[name]) - ) - return value + 'px' - // Presumes implicit 'px' suffix for unitless numbers - return ('' + value).trim() -} - -const attributeCache: { [key: string]: string } = {} -Globals.injectCreateAnimatedStyle(style => new AnimatedStyle(style)) -Globals.injectDefaultElement('div') -Globals.injectStringInterpolator(createStringInterpolator) -Globals.injectColorNames(colorNames) -Globals.injectApplyAnimatedValues( - (instance, props) => { - if (instance.nodeType && instance.setAttribute !== undefined) { - const { style, children, scrollTop, scrollLeft, ...attributes } = props - const filter = - instance.nodeName === 'filter' || - (instance.parentNode && instance.parentNode.nodeName === 'filter') - - if (scrollTop !== void 0) instance.scrollTop = scrollTop - if (scrollLeft !== void 0) instance.scrollLeft = scrollLeft - - // Set textContent, if children is an animatable value - if (children !== void 0) instance.textContent = children - - // Set styles ... - for (let styleName in style) { - if (!style.hasOwnProperty(styleName)) continue - var isCustomProperty = styleName.indexOf('--') === 0 - var styleValue = dangerousStyleValue( - styleName, - style[styleName], - isCustomProperty - ) - if (styleName === 'float') styleName = 'cssFloat' - if (isCustomProperty) instance.style.setProperty(styleName, styleValue) - else instance.style[styleName] = styleValue - } - - // Set attributes ... - for (let name in attributes) { - // Attributes are written in dash case - const dashCase = filter - ? name - : attributeCache[name] || - (attributeCache[name] = name.replace( - /([A-Z])/g, - n => '-' + n.toLowerCase() - )) - if (typeof instance.getAttribute(dashCase) !== 'undefined') - instance.setAttribute(dashCase, attributes[name]) - } - return - } else return false - }, - style => style -) diff --git a/src/targets/web/index.ts b/src/targets/web/index.ts deleted file mode 100644 index 5171d42ee9..0000000000 --- a/src/targets/web/index.ts +++ /dev/null @@ -1,177 +0,0 @@ -import animated from '../../animated/createAnimatedComponent' -import * as Globals from '../../animated/Globals' -import { update } from '../../animated/FrameLoop' -import { interpolate } from '../../interpolate' -import { config } from '../../shared/constants' -import { - AnimatedComponent, - CreateAnimatedComponent, -} from '../../types/animated' -import { useChain } from '../../useChain' -import { useSpring } from '../../useSpring' -import { useSprings } from '../../useSprings' -import { useTrail } from '../../useTrail' -import { useTransition } from '../../useTransition' -import { merge } from '../../shared/helpers' -import './globals' - -type JSXElements = keyof JSX.IntrinsicElements - -const domElements: JSXElements[] = [ - 'a', - 'abbr', - 'address', - 'area', - 'article', - 'aside', - 'audio', - 'b', - 'base', - 'bdi', - 'bdo', - 'big', - 'blockquote', - 'body', - 'br', - 'button', - 'canvas', - 'caption', - 'cite', - 'code', - 'col', - 'colgroup', - 'data', - 'datalist', - 'dd', - 'del', - 'details', - 'dfn', - 'dialog', - 'div', - 'dl', - 'dt', - 'em', - 'embed', - 'fieldset', - 'figcaption', - 'figure', - 'footer', - 'form', - 'h1', - 'h2', - 'h3', - 'h4', - 'h5', - 'h6', - 'head', - 'header', - 'hgroup', - 'hr', - 'html', - 'i', - 'iframe', - 'img', - 'input', - 'ins', - 'kbd', - 'keygen', - 'label', - 'legend', - 'li', - 'link', - 'main', - 'map', - 'mark', - 'menu', - 'menuitem', - 'meta', - 'meter', - 'nav', - 'noscript', - 'object', - 'ol', - 'optgroup', - 'option', - 'output', - 'p', - 'param', - 'picture', - 'pre', - 'progress', - 'q', - 'rp', - 'rt', - 'ruby', - 's', - 'samp', - 'script', - 'section', - 'select', - 'small', - 'source', - 'span', - 'strong', - 'style', - 'sub', - 'summary', - 'sup', - 'table', - 'tbody', - 'td', - 'textarea', - 'tfoot', - 'th', - 'thead', - 'time', - 'title', - 'tr', - 'track', - 'u', - 'ul', - 'var', - 'video', - 'wbr', - // SVG - 'circle', - 'clipPath', - 'defs', - 'ellipse', - 'foreignObject', - 'g', - 'image', - 'line', - 'linearGradient', - 'mask', - 'path', - 'pattern', - 'polygon', - 'polyline', - 'radialGradient', - 'rect', - 'stop', - 'svg', - 'text', - 'tspan', -] - -type AnimatedWithDOMElements = CreateAnimatedComponent & - { [Tag in JSXElements]: AnimatedComponent } - -// Extend animated with all the available THREE elements -const apply = merge(animated as AnimatedWithDOMElements, false) -const extendedAnimated = apply(domElements) - -export { - apply, - config, - update, - extendedAnimated as animated, - extendedAnimated as a, - interpolate, - Globals, - useSpring, - useTrail, - useTransition, - useChain, - useSprings, -} diff --git a/src/targets/zdog/index.ts b/src/targets/zdog/index.ts deleted file mode 100644 index 16d225a7db..0000000000 --- a/src/targets/zdog/index.ts +++ /dev/null @@ -1,64 +0,0 @@ -import * as Zdog from 'react-zdog' -import { interpolate } from '../../interpolate' -import animated from '../../animated/createAnimatedComponent' -import * as Globals from '../../animated/Globals' -import colorNames from '../../shared/colors' -import { config } from '../../shared/constants' -import createInterpolation from '../../shared/stringInterpolation' -import { useChain } from '../../useChain' -import { useSpring } from '../../useSpring' -import { useSprings } from '../../useSprings' -import { useTrail } from '../../useTrail' -import { useTransition } from '../../useTransition' -import { merge } from '../../shared/helpers' -import { update } from '../../animated/FrameLoop' - -// Extend animated with all the available ZDOG elements, so that we can do animated.Shape/Ellipse/.. later on -const { - invalidate, - applyProps, - addEffect, - useRender, - Illustration, - ...elements -} = Zdog -const apply = merge(animated, false) -const extendedAnimated = apply({}) - -for (let key of Object.keys(elements)) { - extendedAnimated[key] = animated(elements[key]) -} - -if (addEffect) { - // Add react-springs update function as a global effect to react-zdog's render loop - // Having multiple requestAnimationFrame-loops is very bad for performance, so we join them - addEffect(update) - // This one switches off react-springs own render loop, instead it will call us back whenever - // it needs to render, we use this to invalidate react-zdog's render loop, in case it renders on demand - Globals.injectManualFrameloop(() => invalidate()) -} - -// Set default native-element -Globals.injectDefaultElement(Zdog.Anchor) -// Use default interpolation (which includes numbers, strings, colors), zdog uses web standards -Globals.injectStringInterpolator(createInterpolation) -// Inject web color names, so that it will be able to deal with things like "peachpuff" -Globals.injectColorNames(colorNames) -// This is how we teach react-spring to set props "natively", the api is (instance, props) => { ... } -// It will write updates directly into the view from now on, avoiding component updates through React -Globals.injectApplyAnimatedValues(applyProps, style => style) - -export { - apply, - update, - config, - extendedAnimated as animated, - extendedAnimated as a, - interpolate, - Globals, - useSpring, - useTrail, - useTransition, - useChain, - useSprings, -} diff --git a/src/types/animated.ts b/src/types/animated.ts deleted file mode 100644 index be843e857c..0000000000 --- a/src/types/animated.ts +++ /dev/null @@ -1,104 +0,0 @@ -import { InterpolationConfig } from './interpolation' - -type Omit = Pick> - -type SpringifyProps = { - [K in keyof Props]: Props[K] extends number | string | undefined - ? SpringValue | Props[K] - : Props[K] -} - -type SpringifyChildren = { - [K in keyof Props]: K extends 'children' - ? Props[K] | SpringValue - : Props[K] -} - -type SpringifyStyle = Props extends { style?: infer S } - ? S extends object - ? Omit & { style?: SpringifyProps } - : Props - : Props - -export type AnimatedComponentProps< - C extends React.ReactType -> = JSX.LibraryManagedAttributes< - C, - SpringifyStyle< - SpringifyChildren>> - > -> & { - scrollLeft?: SpringValue - scrollTop?: SpringValue -} & React.RefAttributes - -export type AnimatedComponent< - C extends React.ReactType -> = React.ForwardRefExoticComponent< - React.PropsWithoutRef> -> & - React.RefAttributes - -export interface CreateAnimatedComponent { - (Component: C): AnimatedComponent -} - -export type GetValueType = T extends number - ? number - : T extends string - ? string - : string | number - -export type GetArrayValueType = T extends (infer U)[] - ? GetValueType - : string | number - -/** - * An animated value that can be assigned to `animated` component's properties. - */ -export interface SpringValue< - // The literal value from initialization. - Value extends undefined | number | string | (number | string)[] = - | number - | string - | (number | string)[], - // Widen the literal `Value` type to either string or number because the - // value will change during animation. - ValueType extends number | string = Value extends (number | string)[] - ? GetArrayValueType - : GetValueType -> { - /** - * Get the animated value. Automatically invoked when an `AnimatedValue` - * is assigned to a property of an `animated` element. - */ - getValue(): Value extends any[] ? ValueType[] : ValueType - - /** - * Interpolate the value with a custom interpolation function, - * a configuration object or keyframe-like ranges. - * - * @example - * - * interpolate(alpha => `rgba(255, 165, 0, ${alpha})`) - * interpolate({ range: [0, 1], output: ['yellow', 'red'], extrapolate: 'clamp' }) - * interpolate([0, 0.25, 1], ['yellow', 'orange', 'red']) - */ - interpolate( - // Narrows argument types for AnimatedArrayValues if possible - interpolator: Value extends string[] - ? (...input: string[]) => Out - : Value extends number[] - ? (...input: number[]) => Out - : Value extends (number | string)[] - ? (...input: (number | string)[]) => Out - : (input: ValueType) => Out - ): SpringValue - interpolate( - config: InterpolationConfig - ): SpringValue - interpolate( - range: number[], - output: Out[] - ): SpringValue -} diff --git a/src/useChain.js b/src/useChain.js deleted file mode 100644 index 24d3f7860c..0000000000 --- a/src/useChain.js +++ /dev/null @@ -1,33 +0,0 @@ -import { useEffect, useMemo, useRef } from 'react' -import { is } from './shared/helpers' - -/** API - * useChain(references, timeSteps, timeFrame) - */ - -export function useChain(refs, timeSteps, timeFrame = 1000) { - const previous = useRef() - useEffect(() => { - if (is.equ(refs, previous.current)) - refs.forEach(({ current }) => current && current.start()) - else if (timeSteps) { - refs.forEach(({ current }, index) => { - if (current) { - const ctrls = current.controllers - if (ctrls.length) { - const t = timeFrame * timeSteps[index] - ctrls.forEach(ctrl => { - ctrl.queue = ctrl.queue.map(e => ({ ...e, delay: e.delay + t })) - ctrl.start() - }) - } - } - }) - } else - refs.reduce( - (q, { current }, rI) => (q = q.then(() => current.start())), - Promise.resolve() - ) - previous.current = refs - }) -} diff --git a/src/useSpring.js b/src/useSpring.js deleted file mode 100644 index 6bc31b1745..0000000000 --- a/src/useSpring.js +++ /dev/null @@ -1,13 +0,0 @@ -import { useSprings } from './useSprings' -import { is } from './shared/helpers' - -/** API - * const props = useSpring({ ... }) - * const [props, set] = useSpring(() => ({ ... })) - */ - -export const useSpring = props => { - const isFn = is.fun(props) - const [result, set, pause] = useSprings(1, isFn ? props : [props]) - return isFn ? [result[0], set, pause] : result -} diff --git a/src/useSprings.js b/src/useSprings.js deleted file mode 100644 index 4bd141770e..0000000000 --- a/src/useSprings.js +++ /dev/null @@ -1,82 +0,0 @@ -import { useMemo, useRef, useImperativeHandle, useEffect } from 'react' -import Ctrl from './animated/Controller' -import { callProp, is } from './shared/helpers' - -/** API - * const props = useSprings(number, [{ ... }, { ... }, ...]) - * const [props, set] = useSprings(number, (i, controller) => ({ ... })) - */ - -export const useSprings = (length, props) => { - const mounted = useRef(false) - const ctrl = useRef() - const isFn = is.fun(props) - - // The controller maintains the animation values, starts and stops animations - const [controllers, ref] = useMemo(() => { - // Remove old controllers - if (ctrl.current) { - ctrl.current.map(c => c.destroy()) - ctrl.current = undefined - } - let ref - return [ - new Array(length).fill().map((_, i) => { - const ctrl = new Ctrl() - const newProps = isFn ? callProp(props, i, ctrl) : props[i] - if (i === 0) ref = newProps.ref - ctrl.update(newProps) - if (!ref) ctrl.start() - return ctrl - }), - ref, - ] - }, [length]) - - ctrl.current = controllers - - // The hooks reference api gets defined here ... - const api = useImperativeHandle(ref, () => ({ - start: () => - Promise.all(ctrl.current.map(c => new Promise(r => c.start(r)))), - stop: finished => ctrl.current.forEach(c => c.stop(finished)), - get controllers() { - return ctrl.current - }, - })) - - // This function updates the controllers - const updateCtrl = useMemo( - () => updateProps => - ctrl.current.map((c, i) => { - c.update(isFn ? callProp(updateProps, i, c) : updateProps[i]) - if (!ref) c.start() - }), - [length] - ) - - // Update controller if props aren't functional - useEffect(() => { - if (mounted.current) { - if (!isFn) updateCtrl(props) - } else if (!ref) ctrl.current.forEach(c => c.start()) - }) - - // Update mounted flag and destroy controller on unmount - useEffect( - () => ( - (mounted.current = true), () => ctrl.current.forEach(c => c.destroy()) - ), - [] - ) - - // Return animated props, or, anim-props + the update-setter above - const propValues = ctrl.current.map(c => c.getValues()) - return isFn - ? [ - propValues, - updateCtrl, - finished => ctrl.current.forEach(c => c.pause(finished)), - ] - : propValues -} diff --git a/src/useTrail.js b/src/useTrail.js deleted file mode 100644 index 6fc8e1c6af..0000000000 --- a/src/useTrail.js +++ /dev/null @@ -1,47 +0,0 @@ -import { useRef, useMemo, useEffect } from 'react' -import { callProp, is } from './shared/helpers' -import { useSprings } from './useSprings' - -/** API - * const trails = useTrail(number, { ... }) - * const [trails, set] = useTrail(number, () => ({ ... })) - */ - -export const useTrail = (length, props) => { - const mounted = useRef(false) - const isFn = is.fun(props) - const updateProps = callProp(props) - const instances = useRef() - - const [result, set, pause] = useSprings(length, (i, ctrl) => { - if (i === 0) instances.current = [] - instances.current.push(ctrl) - return { - ...updateProps, - config: callProp(updateProps.config, i), - attach: i > 0 && (() => instances.current[i - 1]), - } - }) - - // Set up function to update controller - const updateCtrl = useMemo( - () => props => - set((i, ctrl) => { - const last = props.reverse ? i === 0 : length - 1 === i - const attachIdx = props.reverse ? i + 1 : i - 1 - const attachController = instances.current[attachIdx] - return { - ...props, - config: callProp(props.config || updateProps.config, i), - attach: attachController && (() => attachController), - } - }), - [length, updateProps.reverse] - ) - // Update controller if props aren't functional - useEffect(() => void (mounted.current && !isFn && updateCtrl(props))) - // Update mounted flag and destroy controller on unmount - useEffect(() => void (mounted.current = true), []) - - return isFn ? [result, updateCtrl, pause] : result -} diff --git a/src/useTransition.js b/src/useTransition.js deleted file mode 100644 index af5f31bafd..0000000000 --- a/src/useTransition.js +++ /dev/null @@ -1,270 +0,0 @@ -import { - useRef, - useState, - useEffect, - useMemo, - useImperativeHandle, - useCallback, -} from 'react' -import Ctrl from './animated/Controller' -import { is, toArray, callProp, useForceUpdate } from './shared/helpers' -import { requestFrame } from './animated/Globals' - -/** API - * const transitions = useTransition(items, itemKeys, { ... }) - * const [transitions, update] = useTransition(items, itemKeys, () => ({ ... })) - */ - -let guid = 0 - -const ENTER = 'enter' -const LEAVE = 'leave' -const UPDATE = 'update' -const mapKeys = (items, keys) => - (typeof keys === 'function' ? items.map(keys) : toArray(keys)).map(String) -const get = props => { - let { items, keys = item => item, ...rest } = props - items = toArray(items !== void 0 ? items : null) - return { items, keys: mapKeys(items, keys), ...rest } -} - -export function useTransition(input, keyTransform, config) { - const props = { items: input, keys: keyTransform || (i => i), ...config } - const { - lazy = false, - unique = false, - reset = false, - enter, - leave, - update, - onDestroyed, - keys, - items, - onFrame, - onRest, - onStart, - ref, - ...extra - } = get(props) - - const forceUpdate = useForceUpdate() - const mounted = useRef(false) - const state = useRef({ - mounted: false, - first: true, - deleted: [], - current: {}, - transitions: [], - prevProps: {}, - paused: !!props.ref, - instances: !mounted.current && new Map(), - forceUpdate, - }) - - useImperativeHandle(props.ref, () => ({ - start: () => - Promise.all( - Array.from(state.current.instances).map( - ([, c]) => new Promise(r => c.start(r)) - ) - ), - stop: finished => - Array.from(state.current.instances).forEach(([, c]) => c.stop(finished)), - get controllers() { - return Array.from(state.current.instances).map(([, c]) => c) - }, - })) - - // Update state - state.current = diffItems(state.current, props) - if (state.current.changed) { - // Update state - state.current.transitions.forEach(transition => { - const { slot, from, to, config, trail, key, item } = transition - if (!state.current.instances.has(key)) - state.current.instances.set(key, new Ctrl()) - - // update the map object - const ctrl = state.current.instances.get(key) - const newProps = { - ...extra, - to, - from, - config, - ref, - onRest: values => { - if (state.current.mounted) { - if (transition.destroyed) { - // If no ref is given delete destroyed items immediately - if (!ref && !lazy) cleanUp(state, key) - if (onDestroyed) onDestroyed(item) - } - - // A transition comes to rest once all its springs conclude - const curInstances = Array.from(state.current.instances) - const active = curInstances.some(([, c]) => !c.idle) - if (!active && (ref || lazy) && state.current.deleted.length > 0) - cleanUp(state) - if (onRest) onRest(item, slot, values) - } - }, - onStart: onStart && (() => onStart(item, slot)), - onFrame: onFrame && (values => onFrame(item, slot, values)), - delay: trail, - reset: reset && slot === ENTER, - } - - // Update controller - ctrl.update(newProps) - if (!state.current.paused) ctrl.start() - }) - } - - useEffect(() => { - state.current.mounted = mounted.current = true - return () => { - state.current.mounted = mounted.current = false - Array.from(state.current.instances).map(([, c]) => c.destroy()) - state.current.instances.clear() - } - }, []) - - return state.current.transitions.map(({ item, slot, key }) => { - return { - item, - key, - state: slot, - props: state.current.instances.get(key).getValues(), - } - }) -} - -function cleanUp(state, filterKey) { - const deleted = state.current.deleted - for (let { key } of deleted) { - const filter = t => t.key !== key - if (is.und(filterKey) || filterKey === key) { - state.current.instances.delete(key) - state.current.transitions = state.current.transitions.filter(filter) - state.current.deleted = state.current.deleted.filter(filter) - } - } - state.current.forceUpdate() -} - -function diffItems({ first, prevProps, ...state }, props) { - let { - items, - keys, - initial, - from, - enter, - leave, - update, - trail = 0, - unique, - config, - order = [ENTER, LEAVE, UPDATE], - } = get(props) - let { keys: _keys, items: _items } = get(prevProps) - let current = { ...state.current } - let deleted = [...state.deleted] - - // Compare next keys with current keys - let currentKeys = Object.keys(current) - let currentSet = new Set(currentKeys) - let nextSet = new Set(keys) - let added = keys.filter(item => !currentSet.has(item)) - let removed = state.transitions - .filter(item => !item.destroyed && !nextSet.has(item.originalKey)) - .map(i => i.originalKey) - let updated = keys.filter(item => currentSet.has(item)) - let delay = -trail - - while (order.length) { - const changeType = order.shift() - switch (changeType) { - case ENTER: { - added.forEach((key, index) => { - // In unique mode, remove fading out transitions if their key comes in again - if (unique && deleted.find(d => d.originalKey === key)) - deleted = deleted.filter(t => t.originalKey !== key) - const keyIndex = keys.indexOf(key) - const item = items[keyIndex] - const slot = first && initial !== void 0 ? 'initial' : ENTER - current[key] = { - slot, - originalKey: key, - key: unique ? String(key) : guid++, - item, - trail: (delay = delay + trail), - config: callProp(config, item, slot), - from: callProp( - first ? (initial !== void 0 ? initial || {} : from) : from, - item - ), - to: callProp(enter, item), - } - }) - break - } - case LEAVE: { - removed.forEach(key => { - const keyIndex = _keys.indexOf(key) - const item = _items[keyIndex] - const slot = LEAVE - deleted.unshift({ - ...current[key], - slot, - destroyed: true, - left: _keys[Math.max(0, keyIndex - 1)], - right: _keys[Math.min(_keys.length, keyIndex + 1)], - trail: (delay = delay + trail), - config: callProp(config, item, slot), - to: callProp(leave, item), - }) - delete current[key] - }) - break - } - case UPDATE: { - updated.forEach(key => { - const keyIndex = keys.indexOf(key) - const item = items[keyIndex] - const slot = UPDATE - current[key] = { - ...current[key], - item, - slot, - trail: (delay = delay + trail), - config: callProp(config, item, slot), - to: callProp(update, item), - } - }) - break - } - } - } - let out = keys.map(key => current[key]) - - // This tries to restore order for deleted items by finding their last known siblings - // only using the left sibling to keep order placement consistent for all deleted items - deleted.forEach(({ left, right, ...item }) => { - let pos - // Was it the element on the left, if yes, move there ... - if ((pos = out.findIndex(t => t.originalKey === left)) !== -1) pos += 1 - // And if nothing else helps, move it to the start ¯\_(ツ)_/¯ - pos = Math.max(0, pos) - out = [...out.slice(0, pos), item, ...out.slice(pos)] - }) - - return { - ...state, - changed: added.length || removed.length || updated.length, - first: first && added.length === 0, - transitions: out, - current, - deleted, - prevProps: props, - } -} diff --git a/targets/konva/README.md b/targets/konva/README.md new file mode 100644 index 0000000000..23a8e6c166 --- /dev/null +++ b/targets/konva/README.md @@ -0,0 +1,3 @@ +# @react-spring/konva + +[`konva`](https://github.com/konvajs/konva) support diff --git a/targets/konva/package.json b/targets/konva/package.json new file mode 100644 index 0000000000..e13789a46c --- /dev/null +++ b/targets/konva/package.json @@ -0,0 +1,26 @@ +{ + "name": "@react-spring/konva", + "version": "9.0.0-rc.4", + "main": "src/index.ts", + "dependencies": { + "@react-spring/animated": "link:../../packages/animated", + "@react-spring/core": "link:../../packages/core", + "@react-spring/shared": "link:../../packages/shared", + "@react-spring/types": "link:../../packages/types" + }, + "peerDependencies": { + "konva": ">=2.6", + "react": ">=16.8", + "react-konva": ">=16.8" + }, + "devDependencies": { + "konva": "~2.6.0", + "react-konva": "~16.8.0" + }, + "scripts": { + "build": "rollup -c" + }, + "publishConfig": { + "directory": "dist" + } +} diff --git a/targets/konva/rollup.config.js b/targets/konva/rollup.config.js new file mode 100644 index 0000000000..66cee09cf3 --- /dev/null +++ b/targets/konva/rollup.config.js @@ -0,0 +1,3 @@ +import { bundle } from '../../rollup.config' + +export default bundle() diff --git a/targets/konva/src/animated.ts b/targets/konva/src/animated.ts new file mode 100644 index 0000000000..c21b02d264 --- /dev/null +++ b/targets/konva/src/animated.ts @@ -0,0 +1,77 @@ +import { CSSProperties, ForwardRefExoticComponent } from 'react' +import { + AssignableKeys, + ComponentPropsWithRef, + ElementType, +} from '@react-spring/types' +import { FluidValue } from '@react-spring/shared' +import { KonvaExports, Primitives } from './primitives' + +type AnimatedPrimitives = { + [P in Primitives]: AnimatedComponent +} + +/** The type of the `animated()` function */ +export type WithAnimated = { + (wrappedComponent: T): AnimatedComponent +} & AnimatedPrimitives + +/** The type of an `animated()` component */ +export type AnimatedComponent< + T extends ElementType +> = ForwardRefExoticComponent>> + +/** The props of an `animated()` component */ +export type AnimatedProps = { + [P in keyof Props]: P extends 'ref' | 'key' + ? Props[P] + : AnimatedProp +} + +// The animated prop value of a React element +type AnimatedProp = [T, T] extends [infer T, infer DT] + ? [DT] extends [never] + ? never + : DT extends void + ? undefined + : DT extends object + ? [AssignableKeys] extends [never] + ? DT extends ReadonlyArray + ? AnimatedStyles

+ : DT + : AnimatedStyle + : DT | AnimatedLeaf + : never + +// An animated array of style objects +type AnimatedStyles> = { + [P in keyof T]: [T[P]] extends [infer DT] + ? DT extends object + ? [AssignableKeys] extends [never] + ? DT extends ReadonlyArray + ? AnimatedStyles
+ : DT + : { [P in keyof DT]: AnimatedProp } + : DT + : never +} + +// An animated object of style attributes +type AnimatedStyle = [T, T] extends [infer T, infer DT] + ? DT extends void + ? undefined + : [DT] extends [never] + ? never + : DT extends object + ? { [P in keyof DT]: AnimatedStyle } + : DT | AnimatedLeaf + : never + +// An animated primitive (or an array of them) +type AnimatedLeaf = + | Exclude + | Extract> extends infer U + ? [U] extends [never] + ? never + : FluidValue> + : never diff --git a/targets/konva/src/index.ts b/targets/konva/src/index.ts new file mode 100644 index 0000000000..acc79aaf28 --- /dev/null +++ b/targets/konva/src/index.ts @@ -0,0 +1,22 @@ +import { Globals, createStringInterpolator, colors } from '@react-spring/shared' +import { createHost } from '@react-spring/animated' +import { primitives } from './primitives' +import { WithAnimated } from './animated' + +Globals.assign({ + createStringInterpolator, + colors, +}) + +const host = createHost(primitives, { + applyAnimatedValues(instance, props) { + if (!instance.nodeType) return false + instance._applyProps(instance, props) + }, +}) + +export const animated = host.animated as WithAnimated +export { animated as a } + +export * from './animated' +export * from '@react-spring/core' diff --git a/targets/konva/src/primitives.ts b/targets/konva/src/primitives.ts new file mode 100644 index 0000000000..586c371393 --- /dev/null +++ b/targets/konva/src/primitives.ts @@ -0,0 +1,33 @@ +import { ElementType } from 'react' +import * as konva from 'react-konva' + +export type KonvaExports = typeof konva + +export type Primitives = { + [P in keyof KonvaExports]: KonvaExports[P] extends ElementType ? P : never +}[keyof KonvaExports] + +export const primitives: Primitives[] = [ + 'Arc', + 'Arrow', + 'Circle', + 'Ellipse', + 'FastLayer', + 'Group', + 'Image', + 'Label', + 'Layer', + 'Line', + 'Path', + 'Rect', + 'RegularPolygon', + 'Ring', + 'Shape', + 'Sprite', + 'Star', + 'Tag', + 'Text', + 'TextPath', + 'Transformer', + 'Wedge', +] diff --git a/targets/konva/tsconfig.json b/targets/konva/tsconfig.json new file mode 100644 index 0000000000..417fa21b47 --- /dev/null +++ b/targets/konva/tsconfig.json @@ -0,0 +1,17 @@ +{ + "compilerOptions": { + "baseUrl": ".", + "forceConsistentCasingInFileNames": true, + "jsx": "react", + "lib": ["dom", "es2017"], + "moduleResolution": "node", + "noEmitOnError": true, + "noFallthroughCasesInSwitch": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "preserveSymlinks": true, + "sourceMap": true, + "strict": true, + "target": "esnext" + } +} diff --git a/targets/native/README.md b/targets/native/README.md new file mode 100644 index 0000000000..7f4bdc88a6 --- /dev/null +++ b/targets/native/README.md @@ -0,0 +1,6 @@ +# @react-spring/native + +[`react-native`](https://github.com/facebook/react-native) support + +**Note:** This package is not compiled before being published, because [Metro](https://github.com/facebook/metro) +handles that for us, which means we get proper sourcemap support! diff --git a/targets/native/package.json b/targets/native/package.json new file mode 100644 index 0000000000..f8311b502e --- /dev/null +++ b/targets/native/package.json @@ -0,0 +1,26 @@ +{ + "name": "@react-spring/native", + "version": "9.0.0-rc.4", + "main": "src/index.ts", + "scripts": { + "build": "rollup -c" + }, + "dependencies": { + "@react-spring/animated": "link:../../packages/animated", + "@react-spring/core": "link:../../packages/core", + "@react-spring/shared": "link:../../packages/shared", + "@react-spring/types": "link:../../packages/types" + }, + "peerDependencies": { + "react": ">=16.8", + "react-native": ">=0.58" + }, + "devDependencies": { + "@types/react": "~16.9.0", + "@types/react-native": "~0.57.0", + "react-native": "~0.58.0" + }, + "publishConfig": { + "directory": "dist" + } +} diff --git a/targets/native/rollup.config.js b/targets/native/rollup.config.js new file mode 100644 index 0000000000..66cee09cf3 --- /dev/null +++ b/targets/native/rollup.config.js @@ -0,0 +1,3 @@ +import { bundle } from '../../rollup.config' + +export default bundle() diff --git a/targets/native/src/AnimatedStyle.ts b/targets/native/src/AnimatedStyle.ts new file mode 100644 index 0000000000..f30647c145 --- /dev/null +++ b/targets/native/src/AnimatedStyle.ts @@ -0,0 +1,18 @@ +import { AnimatedObject } from '@react-spring/animated' +import { AnimatedTransform } from './AnimatedTransform' + +type Style = object & { transform?: any } + +export class AnimatedStyle extends AnimatedObject { + constructor(style: Style) { + super(style) + } + + setValue(style: Style) { + super.setValue( + style && style.transform + ? { ...style, transform: new AnimatedTransform(style.transform) } + : style + ) + } +} diff --git a/targets/native/src/AnimatedTransform.ts b/targets/native/src/AnimatedTransform.ts new file mode 100644 index 0000000000..9193108dde --- /dev/null +++ b/targets/native/src/AnimatedTransform.ts @@ -0,0 +1,37 @@ +import { each, eachProp, getFluidValue } from '@react-spring/shared' +import { Animated, AnimatedValue, AnimatedObject } from '@react-spring/animated' + +type Transform = { [key: string]: string | number | Animated } + +type Source = Transform[] + +export class AnimatedTransform extends AnimatedObject { + protected source!: Source + constructor(source: Source) { + super(source) + } + + getValue() { + return this.source + ? this.source.map(source => { + const transform: any = {} + eachProp(source, (source, key) => { + transform[key] = getFluidValue(source) + }) + return transform + }) + : [] + } + + setValue(source: Source) { + this.source = source + this.payload = this._makePayload(source) + } + + protected _makePayload(source: Source) { + if (!source) return [] + const payload = new Set() + each(source, transform => eachProp(transform, this._addToPayload, payload)) + return Array.from(payload) + } +} diff --git a/targets/native/src/__tests__/.prettierrc b/targets/native/src/__tests__/.prettierrc new file mode 100644 index 0000000000..f2a7d6c730 --- /dev/null +++ b/targets/native/src/__tests__/.prettierrc @@ -0,0 +1,8 @@ +{ + "semi": true, + "trailingComma": "es5", + "singleQuote": true, + "jsxBracketSameLine": true, + "tabWidth": 2, + "printWidth": 80 +} diff --git a/targets/native/src/__tests__/index.ts b/targets/native/src/__tests__/index.ts new file mode 100644 index 0000000000..9c16639e79 --- /dev/null +++ b/targets/native/src/__tests__/index.ts @@ -0,0 +1,121 @@ +import { assert, _, test, describe } from 'spec.ts'; +import { AnimatedProps, AnimatedTransform } from '../animated'; +import { FluidProps, FluidValue } from '@react-spring/shared'; +import { ViewStyle } from 'react-native'; + +describe('AnimatedProps', () => { + test('width prop', () => { + type Props = AnimatedProps<{ + style?: { width?: number | string }; + }>; + assert( + _ as Props, + _ as { + style?: FluidProps<{ + width?: number | string; + }>; + } + ); + }); + + test('ref prop', () => { + type Props = AnimatedProps<{ + ref: { current: any }; + foo: number; + }>; + assert( + _ as Props, + _ as { + ref: { current: any }; + foo: number | FluidValue; + } + ); + }); + + test('transform prop', () => { + type Props = AnimatedProps<{ + style?: { + transform: ViewStyle['transform']; + }; + }>; + assert( + _ as Props, + _ as { + style?: { + transform: AnimatedTransform; + }; + } + ); + }); + + test('non-style object prop', () => { + type Props = AnimatedProps<{ + foo: { bar: number }; + bar?: number | { foo: number }; + }>; + assert( + _ as Props, + _ as { + foo: { bar: number }; + bar?: number | { foo: number } | FluidValue; + } + ); + }); + + test('array of mixed numbers/strings', () => { + type Props = AnimatedProps<{ + path: Array; + }>; + assert( + _ as Props, + _ as { + path: + | FluidValue> + | Array>; + } + ); + }); + + test('one number or array of numbers', () => { + type Props = AnimatedProps<{ + path: number | number[]; + }>; + assert( + _ as Props, + _ as { + path: + | number + | FluidValue + | Array>; + } + ); + }); + + test('array of numbers or array of strings', () => { + type Props = AnimatedProps<{ + path: number[] | string[]; + }>; + assert( + _ as Props, + _ as { + path: + | FluidValue + | Array> + | Array>; + } + ); + }); + + // FIXME: not yet supported + // test('nested style array prop', () => { + // type Props = AnimatedProps<{ + // style: StyleProp<{ width?: number }>; + // }>; + // assert(_ as Props, _ as {}); + // }); + + test('with any', () => { + type Props = AnimatedProps; + assert(_ as Props, _ as { [key: string]: any }); + }); +}); diff --git a/targets/native/src/animated.ts b/targets/native/src/animated.ts new file mode 100644 index 0000000000..af01b814ef --- /dev/null +++ b/targets/native/src/animated.ts @@ -0,0 +1,101 @@ +import { ForwardRefExoticComponent } from 'react' +import { ViewStyle, RecursiveArray } from 'react-native' +import { + AssignableKeys, + ComponentPropsWithRef, + ElementType, +} from '@react-spring/types' +import { FluidValue } from '@react-spring/shared' +import { primitives } from './primitives' + +type Primitives = typeof primitives +type AnimatedPrimitives = { + [P in keyof Primitives]: AnimatedComponent +} + +/** The type of the `animated()` function */ +export type WithAnimated = { + (wrappedComponent: T): AnimatedComponent +} & AnimatedPrimitives + +/** The type of an `animated()` component */ +export type AnimatedComponent< + T extends ElementType +> = ForwardRefExoticComponent>> + +/** The props of an `animated()` component */ +export type AnimatedProps = { + [P in keyof Props]: P extends 'ref' | 'key' + ? Props[P] + : AnimatedProp +} + +// The animated prop value of a React element +type AnimatedProp = [T, T] extends [infer T, infer DT] // T is a union, DT is a distributed union + ? [DT] extends [never] + ? never + : DT extends void + ? undefined + : DT extends ReadonlyArray + ? AnimatedArray
| AnimatedLeaf + : DT extends ReadonlyArray + ? TransformArray extends DT + ? AnimatedTransform + : AnimatedStyles
+ : [AssignableKeys] extends [never] + ? DT | AnimatedLeaf + : AnimatedStyle
+ : never + +type AnimatedArray> = { + [P in keyof T]: T[P] | FluidValue +} + +// An animated array of style objects +type AnimatedStyles> = unknown & + T extends RecursiveArray + ? { [P in keyof T]: RecursiveArray> }[keyof T] + : { + [P in keyof T]: [T[P]] extends [infer DT] // DT is a distributed union + ? DT extends ReadonlyArray + ? AnimatedStyles
+ : DT extends object + ? [AssignableKeys] extends [never] + ? AnimatedProp
+ : { [P in keyof DT]: AnimatedProp } + : DT + : never + } + +// An animated object of style attributes +export type AnimatedStyle = [T, T] extends [infer T, infer DT] // T is a union, DT is a distributed union + ? DT extends void + ? undefined + : [DT] extends [never] + ? never + : DT extends object + ? { + [P in keyof T]: P extends 'transform' + ? AnimatedTransform + : AnimatedStyle + } + : DT | AnimatedLeaf + : never + +type TransformArray = Exclude + +// An animated array of transform objects +export type AnimatedTransform = Array< + TransformArray[number] extends infer T + ? { [P in keyof T]: T[P] | FluidValue } + : never +> + +// An animated primitive (or an array of them) +type AnimatedLeaf = + | Exclude + | Extract> extends infer U + ? [U] extends [never] + ? never + : FluidValue> + : never diff --git a/targets/native/src/index.ts b/targets/native/src/index.ts new file mode 100644 index 0000000000..20a1622915 --- /dev/null +++ b/targets/native/src/index.ts @@ -0,0 +1,40 @@ +import { StyleSheet } from 'react-native' +import { createHost, AnimatedObject } from '@react-spring/animated' +import { + is, + Globals, + createStringInterpolator, + colors, +} from '@react-spring/shared' +import { primitives } from './primitives' +import { WithAnimated } from './animated' +import { AnimatedStyle } from './AnimatedStyle' + +Globals.assign({ + batchedUpdates: require('react-native').unstable_batchedUpdates, + createStringInterpolator, + colors, +}) + +const host = createHost(primitives, { + applyAnimatedValues(instance, props) { + if (is.und(props.children) && instance.setNativeProps) { + instance.setNativeProps(props) + return true + } + return false + }, + createAnimatedStyle(styles) { + styles = StyleSheet.flatten(styles) + if (is.obj(styles.shadowOffset)) { + styles.shadowOffset = new AnimatedObject(styles.shadowOffset) + } + return new AnimatedStyle(styles) + }, +}) + +export const animated = host.animated as WithAnimated +export { animated as a } + +export * from './animated' +export * from '@react-spring/core' diff --git a/targets/native/src/primitives.ts b/targets/native/src/primitives.ts new file mode 100644 index 0000000000..2fb2bb079a --- /dev/null +++ b/targets/native/src/primitives.ts @@ -0,0 +1,14 @@ +import { Text, View, Image, ViewProps, TextProps } from 'react-native' +import { ComponentClass, ReactNode } from 'react' + +export const primitives = { + View: View as ComponentClass< + // @types/react-native forgot to add "children" to the "View" component?? + ViewProps & { children?: ReactNode } + >, + Text: Text as ComponentClass< + // @types/react-native forgot to add "children" to the "Text" component?? + TextProps & { children?: ReactNode } + >, + Image, +} diff --git a/targets/native/tsconfig.json b/targets/native/tsconfig.json new file mode 100644 index 0000000000..450700455b --- /dev/null +++ b/targets/native/tsconfig.json @@ -0,0 +1,17 @@ +{ + "compilerOptions": { + "baseUrl": ".", + "forceConsistentCasingInFileNames": true, + "jsx": "react", + "lib": ["es2017"], + "moduleResolution": "node", + "noEmitOnError": true, + "noFallthroughCasesInSwitch": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "preserveSymlinks": true, + "sourceMap": true, + "strict": true, + "target": "esnext" + } +} diff --git a/targets/three-v5/README.md b/targets/three-v5/README.md new file mode 100644 index 0000000000..1ded330744 --- /dev/null +++ b/targets/three-v5/README.md @@ -0,0 +1,3 @@ +# @react-spring/three-v5 + +[`react-three-fiber`](https://github.com/drcmda/react-three-fiber) support. This package is for version 4-5 of react-three-fiber diff --git a/targets/three-v5/package.json b/targets/three-v5/package.json new file mode 100644 index 0000000000..8729c796ff --- /dev/null +++ b/targets/three-v5/package.json @@ -0,0 +1,26 @@ +{ + "name": "@react-spring/three-v5", + "version": "9.0.0-rc.4", + "main": "src/index.ts", + "dependencies": { + "@react-spring/animated": "link:../../packages/animated", + "@react-spring/core": "link:../../packages/core", + "@react-spring/shared": "link:../../packages/shared", + "@react-spring/types": "link:../../packages/types" + }, + "peerDependencies": { + "react": ">=16.11", + "react-three-fiber": ">=4.0", + "three": ">=0.115" + }, + "devDependencies": { + "react-three-fiber": "^4.0.0", + "three": "^0.115.0" + }, + "scripts": { + "build": "rollup -c" + }, + "publishConfig": { + "directory": "dist" + } +} diff --git a/targets/three-v5/rollup.config.js b/targets/three-v5/rollup.config.js new file mode 100644 index 0000000000..66cee09cf3 --- /dev/null +++ b/targets/three-v5/rollup.config.js @@ -0,0 +1,3 @@ +import { bundle } from '../../rollup.config' + +export default bundle() diff --git a/targets/three-v5/src/FrameLoop.ts b/targets/three-v5/src/FrameLoop.ts new file mode 100644 index 0000000000..5d4b8eec0e --- /dev/null +++ b/targets/three-v5/src/FrameLoop.ts @@ -0,0 +1,262 @@ +import { Globals as G, flushCalls } from '@react-spring/shared' + +export interface FrameRequestCallback { + (time?: number): void +} + +export interface RequestFrameFn { + (cb: FrameRequestCallback): number | void +} + +declare const console: any +declare const process: + | { env: { [key: string]: string | undefined } } + | undefined + +export interface OpaqueAnimation { + idle: boolean + priority: number + advance(dt: number): void +} + +export interface Timeout { + time: number + handler: () => void + cancel: () => void +} + +declare const performance: { now: () => number } + +export let batchedUpdates = (callback: () => void) => callback() + +export let now = () => performance.now() + +/** + * FrameLoop executes its animations in order of lowest priority first. + * Animations are retained until idle. + */ +export class FrameLoop { + /** + * Start a new animation, or reorder an active animation in + * the animations array in response to a priority change. + */ + start: (animation: OpaqueAnimation) => void + + /** + * Advance the animations to the current time. + */ + advance: () => void + + /** + * Invoke the given `handler` on the soonest frame after the given + * `ms` delay is completed. When the delay is `<= 0`, the handler is + * invoked immediately. + */ + setTimeout: (handler: () => void, ms: number) => Timeout + + /** + * Execute a function once after all animations have updated. + */ + onFrame: (cb: FrameRequestCallback) => void + + /** + * Execute a function once at the very end of the current frame. + * + * Only call this within an `onFrame` callback. + */ + onWrite: (cb: FrameRequestCallback) => void + + // Exposed for testing. + protected _idle!: boolean + protected _dispose!: () => void + + constructor(raf: RequestFrameFn) { + let idle = true + let writing = false + + // The most recent framestamp + let lastTime = 0 + + // The animations being updated in the current frame, sorted by lowest + // priority first. These two arrays are swapped at the end of each frame. + let currentFrame: OpaqueAnimation[] = [] + let prevFrame: OpaqueAnimation[] = [] + + // The priority of the currently advancing animation. + // To protect against a race condition whenever a frame is being processed, + // where the filtering of `animations` is corrupted with a shifting index, + // causing animations to potentially advance 2x faster than intended. + let priority = 0 + + // Animations starting on the next frame + const startQueue = new Set() + + // Flushed after all animations are updated. + // Used to dispatch events to an "onFrame" prop, for example. + const frameQueue = new Set() + + // Flushed at the very end of each frame. + // Used to avoid layout thrashing in @react-spring/web, for example. + const writeQueue = new Set() + + // Add an animation to the frameloop + const start = (animation: OpaqueAnimation) => + currentFrame.indexOf(animation) < 0 && + currentFrame.splice( + findIndex( + currentFrame, + existing => existing.priority > animation.priority + ), + 0, + animation + ) + + const loop = () => { + if (idle) return + raf(loop) + try { + advance() + } catch (e) { + console.error(e) + } + } + + // Start the frameloop + const kickoff = () => { + if (idle) { + idle = false + + // To minimize frame skips, the frameloop never stops. + if (lastTime == 0) { + lastTime = now() + raf(loop) + } + } + } + + const timeoutQueue: Timeout[] = [] + + this.setTimeout = (handler, ms) => { + const time = now() + ms + const cancel = () => { + const index = timeoutQueue.findIndex(t => t.cancel == cancel) + if (index >= 0) { + timeoutQueue.splice(index, 1) + } + } + + const index = findIndex(timeoutQueue, t => t.time > time) + const timeout = { time, handler, cancel } + timeoutQueue.splice(index, 0, timeout) + + kickoff() + return timeout + } + + // Process the current frame. + const advance = (this.advance = () => { + const time = now() + + // Start animations that were added during last frame. + if (startQueue.size) { + startQueue.forEach(start) + startQueue.clear() + } + + // Flush the timeout queue. + if (timeoutQueue.length) { + batchedUpdates(() => { + const count = findIndex(timeoutQueue, t => t.time > time) + timeoutQueue.splice(0, count).forEach(t => t.handler()) + }) + } + + if (time > lastTime) { + // http://gafferongames.com/game-physics/fix-your-timestep/ + const dt = Math.min(64, time - lastTime) + lastTime = time + + batchedUpdates(() => { + if (currentFrame.length) { + const nextFrame = prevFrame + for (let i = 0; i < currentFrame.length; i++) { + const animation = currentFrame[i] + priority = animation.priority + + // Animations may go idle before the next frame. + if (!animation.idle) { + G.willAdvance(animation) + animation.advance(dt) + if (!animation.idle) { + nextFrame.push(animation) + } + } + } + priority = 0 + // Reuse the `currentFrame` array to avoid garbage collection. + prevFrame = currentFrame + prevFrame.length = 0 + // Set `currentFrame` for next frame, so the `start` function + // adds new animations to the proper array. + currentFrame = nextFrame + } + + flushCalls(frameQueue, time) + + if (writeQueue.size) { + writing = true + flushCalls(writeQueue, time) + writing = false + } + }) + } + }) + + this.start = animation => { + // An animation can be added while a frame is being processed, + // unless its priority is lower than the animation last updated. + if (priority > animation.priority) { + startQueue.add(animation) + } else { + start(animation) + kickoff() + } + } + + this.onFrame = cb => { + frameQueue.add(cb) + kickoff() + } + + this.onWrite = cb => { + if (writing) cb(lastTime) + else writeQueue.add(cb) + } + + // Expose internals for testing. + if ( + typeof process !== 'undefined' && + process.env.NODE_ENV !== 'production' + ) { + const isIdle = () => + !startQueue.size && !currentFrame.length && !timeoutQueue.length + + const dispose = () => { + idle = true + startQueue.clear() + timeoutQueue.length = 0 + } + + Object.defineProperties(this, { + _idle: { get: isIdle }, + _dispose: { get: () => dispose }, + }) + } + } +} + +/** Like `Array.prototype.findIndex` but returns `arr.length` instead of `-1` */ +function findIndex(arr: T[], test: (value: T) => boolean) { + const index = arr.findIndex(test) + return index < 0 ? arr.length : index +} diff --git a/targets/three-v5/src/animated.ts b/targets/three-v5/src/animated.ts new file mode 100644 index 0000000000..0a9adb2f6b --- /dev/null +++ b/targets/three-v5/src/animated.ts @@ -0,0 +1,77 @@ +import { CSSProperties, ForwardRefExoticComponent, FC } from 'react' +import { + AssignableKeys, + ComponentPropsWithRef, + ElementType, +} from '@react-spring/types' +import { FluidValue } from '@react-spring/shared' +import { Primitives } from './primitives' + +type AnimatedPrimitives = { + [P in Primitives]: AnimatedComponent> +} + +/** The type of the `animated()` function */ +export type WithAnimated = { + (wrappedComponent: T): AnimatedComponent +} & AnimatedPrimitives + +/** The type of an `animated()` component */ +export type AnimatedComponent< + T extends ElementType +> = ForwardRefExoticComponent>> + +/** The props of an `animated()` component */ +export type AnimatedProps = { + [P in keyof Props]: P extends 'ref' | 'key' + ? Props[P] + : AnimatedProp +} + +// The animated prop value of a React element +type AnimatedProp = [T, T] extends [infer T, infer DT] + ? [DT] extends [never] + ? never + : DT extends void + ? undefined + : DT extends object + ? [AssignableKeys] extends [never] + ? DT extends ReadonlyArray + ? AnimatedStyles
+ : DT + : AnimatedStyle + : DT | AnimatedLeaf + : never + +// An animated array of style objects +type AnimatedStyles> = { + [P in keyof T]: [T[P]] extends [infer DT] + ? DT extends object + ? [AssignableKeys] extends [never] + ? DT extends ReadonlyArray + ? AnimatedStyles
+ : DT + : { [P in keyof DT]: AnimatedProp } + : DT + : never +} + +// An animated object of style attributes +type AnimatedStyle = [T, T] extends [infer T, infer DT] + ? DT extends void + ? undefined + : [DT] extends [never] + ? never + : DT extends object + ? { [P in keyof DT]: AnimatedStyle } + : DT | AnimatedLeaf + : never + +// An animated primitive (or an array of them) +type AnimatedLeaf = + | Exclude + | Extract> extends infer U + ? [U] extends [never] + ? never + : FluidValue> + : never diff --git a/targets/three-v5/src/index.ts b/targets/three-v5/src/index.ts new file mode 100644 index 0000000000..a4102d4a16 --- /dev/null +++ b/targets/three-v5/src/index.ts @@ -0,0 +1,31 @@ +import { applyProps, addEffect, invalidate } from 'react-three-fiber' +import { Globals } from '@react-spring/core' +import { createStringInterpolator, colors } from '@react-spring/shared' +import { createHost } from '@react-spring/animated' +import { FrameLoop } from './FrameLoop' +import { primitives } from './primitives' +import { WithAnimated } from './animated' + +// Let r3f drive the frameloop. +const frameLoop = new FrameLoop(() => invalidate()) +addEffect(() => { + frameLoop.advance() + return true // Never stop. +}) + +Globals.assign({ + createStringInterpolator, + colors, + //@ts-ignore + frameLoop, +}) + +const host = createHost(primitives, { + applyAnimatedValues: applyProps, +}) + +export const animated = host.animated as WithAnimated +export { animated as a } + +export * from './animated' +export * from '@react-spring/core' diff --git a/targets/three-v5/src/primitives.ts b/targets/three-v5/src/primitives.ts new file mode 100644 index 0000000000..6557ebd572 --- /dev/null +++ b/targets/three-v5/src/primitives.ts @@ -0,0 +1,10 @@ +import * as THREE from 'three' +import 'react-three-fiber' + +export type Primitives = keyof JSX.IntrinsicElements + +export const primitives = ['primitive'].concat( + Object.keys(THREE) + .filter(key => /^[A-Z]/.test(key)) + .map(key => key[0].toLowerCase() + key.slice(1)) +) as Primitives[] diff --git a/targets/three-v5/tsconfig.json b/targets/three-v5/tsconfig.json new file mode 100644 index 0000000000..62b8a8e8aa --- /dev/null +++ b/targets/three-v5/tsconfig.json @@ -0,0 +1,18 @@ +{ + "include": ["src"], + "compilerOptions": { + "baseUrl": ".", + "forceConsistentCasingInFileNames": true, + "jsx": "react", + "lib": ["es2017"], + "moduleResolution": "node", + "noEmitOnError": true, + "noFallthroughCasesInSwitch": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "preserveSymlinks": true, + "sourceMap": true, + "strict": true, + "target": "esnext" + } +} diff --git a/targets/three/README.md b/targets/three/README.md new file mode 100644 index 0000000000..ac04fc7840 --- /dev/null +++ b/targets/three/README.md @@ -0,0 +1,3 @@ +# @react-spring/three + +[`react-three-fiber`](https://github.com/drcmda/react-three-fiber) support. This package is for version 6 of react-three-fiber diff --git a/targets/three/package.json b/targets/three/package.json new file mode 100644 index 0000000000..af916cfb18 --- /dev/null +++ b/targets/three/package.json @@ -0,0 +1,28 @@ +{ + "name": "@react-spring/three", + "version": "9.0.0-rc.4", + "main": "src/index.ts", + "dependencies": { + "@react-spring/animated": "link:../../packages/animated", + "@react-spring/core": "link:../../packages/core", + "@react-spring/shared": "link:../../packages/shared", + "@react-spring/types": "link:../../packages/types" + }, + "peerDependencies": { + "@react-three/fiber": ">=6.0", + "react": ">=16.11", + "three": ">=0.126" + }, + "devDependencies": { + "@react-three/fiber": "^5.3.15", + "@types/three": "^0.126.1", + "react-three-fiber": "^4.0.0", + "three": "^0.126.1" + }, + "scripts": { + "build": "rollup -c" + }, + "publishConfig": { + "directory": "dist" + } +} diff --git a/targets/three/rollup.config.js b/targets/three/rollup.config.js new file mode 100644 index 0000000000..66cee09cf3 --- /dev/null +++ b/targets/three/rollup.config.js @@ -0,0 +1,3 @@ +import { bundle } from '../../rollup.config' + +export default bundle() diff --git a/targets/three/src/FrameLoop.ts b/targets/three/src/FrameLoop.ts new file mode 100644 index 0000000000..5d4b8eec0e --- /dev/null +++ b/targets/three/src/FrameLoop.ts @@ -0,0 +1,262 @@ +import { Globals as G, flushCalls } from '@react-spring/shared' + +export interface FrameRequestCallback { + (time?: number): void +} + +export interface RequestFrameFn { + (cb: FrameRequestCallback): number | void +} + +declare const console: any +declare const process: + | { env: { [key: string]: string | undefined } } + | undefined + +export interface OpaqueAnimation { + idle: boolean + priority: number + advance(dt: number): void +} + +export interface Timeout { + time: number + handler: () => void + cancel: () => void +} + +declare const performance: { now: () => number } + +export let batchedUpdates = (callback: () => void) => callback() + +export let now = () => performance.now() + +/** + * FrameLoop executes its animations in order of lowest priority first. + * Animations are retained until idle. + */ +export class FrameLoop { + /** + * Start a new animation, or reorder an active animation in + * the animations array in response to a priority change. + */ + start: (animation: OpaqueAnimation) => void + + /** + * Advance the animations to the current time. + */ + advance: () => void + + /** + * Invoke the given `handler` on the soonest frame after the given + * `ms` delay is completed. When the delay is `<= 0`, the handler is + * invoked immediately. + */ + setTimeout: (handler: () => void, ms: number) => Timeout + + /** + * Execute a function once after all animations have updated. + */ + onFrame: (cb: FrameRequestCallback) => void + + /** + * Execute a function once at the very end of the current frame. + * + * Only call this within an `onFrame` callback. + */ + onWrite: (cb: FrameRequestCallback) => void + + // Exposed for testing. + protected _idle!: boolean + protected _dispose!: () => void + + constructor(raf: RequestFrameFn) { + let idle = true + let writing = false + + // The most recent framestamp + let lastTime = 0 + + // The animations being updated in the current frame, sorted by lowest + // priority first. These two arrays are swapped at the end of each frame. + let currentFrame: OpaqueAnimation[] = [] + let prevFrame: OpaqueAnimation[] = [] + + // The priority of the currently advancing animation. + // To protect against a race condition whenever a frame is being processed, + // where the filtering of `animations` is corrupted with a shifting index, + // causing animations to potentially advance 2x faster than intended. + let priority = 0 + + // Animations starting on the next frame + const startQueue = new Set() + + // Flushed after all animations are updated. + // Used to dispatch events to an "onFrame" prop, for example. + const frameQueue = new Set() + + // Flushed at the very end of each frame. + // Used to avoid layout thrashing in @react-spring/web, for example. + const writeQueue = new Set() + + // Add an animation to the frameloop + const start = (animation: OpaqueAnimation) => + currentFrame.indexOf(animation) < 0 && + currentFrame.splice( + findIndex( + currentFrame, + existing => existing.priority > animation.priority + ), + 0, + animation + ) + + const loop = () => { + if (idle) return + raf(loop) + try { + advance() + } catch (e) { + console.error(e) + } + } + + // Start the frameloop + const kickoff = () => { + if (idle) { + idle = false + + // To minimize frame skips, the frameloop never stops. + if (lastTime == 0) { + lastTime = now() + raf(loop) + } + } + } + + const timeoutQueue: Timeout[] = [] + + this.setTimeout = (handler, ms) => { + const time = now() + ms + const cancel = () => { + const index = timeoutQueue.findIndex(t => t.cancel == cancel) + if (index >= 0) { + timeoutQueue.splice(index, 1) + } + } + + const index = findIndex(timeoutQueue, t => t.time > time) + const timeout = { time, handler, cancel } + timeoutQueue.splice(index, 0, timeout) + + kickoff() + return timeout + } + + // Process the current frame. + const advance = (this.advance = () => { + const time = now() + + // Start animations that were added during last frame. + if (startQueue.size) { + startQueue.forEach(start) + startQueue.clear() + } + + // Flush the timeout queue. + if (timeoutQueue.length) { + batchedUpdates(() => { + const count = findIndex(timeoutQueue, t => t.time > time) + timeoutQueue.splice(0, count).forEach(t => t.handler()) + }) + } + + if (time > lastTime) { + // http://gafferongames.com/game-physics/fix-your-timestep/ + const dt = Math.min(64, time - lastTime) + lastTime = time + + batchedUpdates(() => { + if (currentFrame.length) { + const nextFrame = prevFrame + for (let i = 0; i < currentFrame.length; i++) { + const animation = currentFrame[i] + priority = animation.priority + + // Animations may go idle before the next frame. + if (!animation.idle) { + G.willAdvance(animation) + animation.advance(dt) + if (!animation.idle) { + nextFrame.push(animation) + } + } + } + priority = 0 + // Reuse the `currentFrame` array to avoid garbage collection. + prevFrame = currentFrame + prevFrame.length = 0 + // Set `currentFrame` for next frame, so the `start` function + // adds new animations to the proper array. + currentFrame = nextFrame + } + + flushCalls(frameQueue, time) + + if (writeQueue.size) { + writing = true + flushCalls(writeQueue, time) + writing = false + } + }) + } + }) + + this.start = animation => { + // An animation can be added while a frame is being processed, + // unless its priority is lower than the animation last updated. + if (priority > animation.priority) { + startQueue.add(animation) + } else { + start(animation) + kickoff() + } + } + + this.onFrame = cb => { + frameQueue.add(cb) + kickoff() + } + + this.onWrite = cb => { + if (writing) cb(lastTime) + else writeQueue.add(cb) + } + + // Expose internals for testing. + if ( + typeof process !== 'undefined' && + process.env.NODE_ENV !== 'production' + ) { + const isIdle = () => + !startQueue.size && !currentFrame.length && !timeoutQueue.length + + const dispose = () => { + idle = true + startQueue.clear() + timeoutQueue.length = 0 + } + + Object.defineProperties(this, { + _idle: { get: isIdle }, + _dispose: { get: () => dispose }, + }) + } + } +} + +/** Like `Array.prototype.findIndex` but returns `arr.length` instead of `-1` */ +function findIndex(arr: T[], test: (value: T) => boolean) { + const index = arr.findIndex(test) + return index < 0 ? arr.length : index +} diff --git a/targets/three/src/animated.ts b/targets/three/src/animated.ts new file mode 100644 index 0000000000..0a9adb2f6b --- /dev/null +++ b/targets/three/src/animated.ts @@ -0,0 +1,77 @@ +import { CSSProperties, ForwardRefExoticComponent, FC } from 'react' +import { + AssignableKeys, + ComponentPropsWithRef, + ElementType, +} from '@react-spring/types' +import { FluidValue } from '@react-spring/shared' +import { Primitives } from './primitives' + +type AnimatedPrimitives = { + [P in Primitives]: AnimatedComponent> +} + +/** The type of the `animated()` function */ +export type WithAnimated = { + (wrappedComponent: T): AnimatedComponent +} & AnimatedPrimitives + +/** The type of an `animated()` component */ +export type AnimatedComponent< + T extends ElementType +> = ForwardRefExoticComponent>> + +/** The props of an `animated()` component */ +export type AnimatedProps = { + [P in keyof Props]: P extends 'ref' | 'key' + ? Props[P] + : AnimatedProp +} + +// The animated prop value of a React element +type AnimatedProp = [T, T] extends [infer T, infer DT] + ? [DT] extends [never] + ? never + : DT extends void + ? undefined + : DT extends object + ? [AssignableKeys] extends [never] + ? DT extends ReadonlyArray + ? AnimatedStyles
+ : DT + : AnimatedStyle + : DT | AnimatedLeaf + : never + +// An animated array of style objects +type AnimatedStyles> = { + [P in keyof T]: [T[P]] extends [infer DT] + ? DT extends object + ? [AssignableKeys] extends [never] + ? DT extends ReadonlyArray + ? AnimatedStyles
+ : DT + : { [P in keyof DT]: AnimatedProp } + : DT + : never +} + +// An animated object of style attributes +type AnimatedStyle = [T, T] extends [infer T, infer DT] + ? DT extends void + ? undefined + : [DT] extends [never] + ? never + : DT extends object + ? { [P in keyof DT]: AnimatedStyle } + : DT | AnimatedLeaf + : never + +// An animated primitive (or an array of them) +type AnimatedLeaf = + | Exclude + | Extract> extends infer U + ? [U] extends [never] + ? never + : FluidValue> + : never diff --git a/targets/three/src/index.ts b/targets/three/src/index.ts new file mode 100644 index 0000000000..6c51b23153 --- /dev/null +++ b/targets/three/src/index.ts @@ -0,0 +1,31 @@ +import { applyProps, addEffect, invalidate } from '@react-three/fiber' +import { Globals } from '@react-spring/core' +import { createStringInterpolator, colors } from '@react-spring/shared' +import { createHost } from '@react-spring/animated' +import { FrameLoop } from './FrameLoop' +import { primitives } from './primitives' +import { WithAnimated } from './animated' + +// Let r3f drive the frameloop. +const frameLoop = new FrameLoop(() => invalidate()) +addEffect(() => { + frameLoop.advance() + return true // Never stop. +}) + +Globals.assign({ + createStringInterpolator, + colors, + //@ts-ignore + frameLoop, +}) + +const host = createHost(primitives, { + applyAnimatedValues: applyProps, +}) + +export const animated = host.animated as WithAnimated +export { animated as a } + +export * from './animated' +export * from '@react-spring/core' diff --git a/targets/three/src/primitives.ts b/targets/three/src/primitives.ts new file mode 100644 index 0000000000..16c36921b0 --- /dev/null +++ b/targets/three/src/primitives.ts @@ -0,0 +1,10 @@ +import * as THREE from 'three' +import '@react-three/fiber' + +export type Primitives = keyof JSX.IntrinsicElements + +export const primitives = ['primitive'].concat( + Object.keys(THREE) + .filter(key => /^[A-Z]/.test(key)) + .map(key => key[0].toLowerCase() + key.slice(1)) +) as Primitives[] diff --git a/targets/three/tsconfig.json b/targets/three/tsconfig.json new file mode 100644 index 0000000000..62b8a8e8aa --- /dev/null +++ b/targets/three/tsconfig.json @@ -0,0 +1,18 @@ +{ + "include": ["src"], + "compilerOptions": { + "baseUrl": ".", + "forceConsistentCasingInFileNames": true, + "jsx": "react", + "lib": ["es2017"], + "moduleResolution": "node", + "noEmitOnError": true, + "noFallthroughCasesInSwitch": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "preserveSymlinks": true, + "sourceMap": true, + "strict": true, + "target": "esnext" + } +} diff --git a/targets/web/README.md b/targets/web/README.md new file mode 100644 index 0000000000..d5aa0295d5 --- /dev/null +++ b/targets/web/README.md @@ -0,0 +1,3 @@ +# @react-spring/web + +`react-dom` support diff --git a/targets/web/package.json b/targets/web/package.json new file mode 100644 index 0000000000..b17f24de5d --- /dev/null +++ b/targets/web/package.json @@ -0,0 +1,26 @@ +{ + "name": "@react-spring/web", + "version": "9.0.0-rc.4", + "main": "src/index.ts", + "dependencies": { + "@react-spring/animated": "link:../../packages/animated", + "@react-spring/core": "link:../../packages/core", + "@react-spring/shared": "link:../../packages/shared", + "@react-spring/types": "link:../../packages/types" + }, + "peerDependencies": { + "react": ">=16.8", + "react-dom": ">=16.8" + }, + "devDependencies": { + "@testing-library/jest-dom": "^4.0.0", + "@testing-library/react": "^9.1.1", + "react-dom": "~16.9.0" + }, + "scripts": { + "build": "rollup -c" + }, + "publishConfig": { + "directory": "dist" + } +} diff --git a/targets/web/rollup.config.js b/targets/web/rollup.config.js new file mode 100644 index 0000000000..70aec76c51 --- /dev/null +++ b/targets/web/rollup.config.js @@ -0,0 +1,3 @@ +import { bundle, umdBundle } from '../../rollup.config' + +export default [...bundle(), umdBundle('ReactSpring')] diff --git a/targets/web/src/AnimatedStyle.ts b/targets/web/src/AnimatedStyle.ts new file mode 100644 index 0000000000..cff57357f0 --- /dev/null +++ b/targets/web/src/AnimatedStyle.ts @@ -0,0 +1,174 @@ +import { AnimatedObject } from '@react-spring/animated' +import { Lookup, OneOrMore } from '@react-spring/types' +import { + is, + each, + toArray, + eachProp, + FluidValue, + FluidEvent, + getFluidValue, + callFluidObservers, + hasFluidValue, + addFluidObserver, + removeFluidObserver, +} from '@react-spring/shared' + +/** The transform-functions + * (https://developer.mozilla.org/fr/docs/Web/CSS/transform-function) + * that you can pass as keys to your animated component style and that will be + * animated. Perspective has been left out as it would conflict with the + * non-transform perspective style. + */ +const domTransforms = /^(matrix|translate|scale|rotate|skew)/ + +// These keys have "px" units by default +const pxTransforms = /^(translate)/ + +// These keys have "deg" units by default +const degTransforms = /^(rotate|skew)/ + +type Value = number | string + +/** Add a unit to the value when the value is unit-less (eg: a number) */ +const addUnit = (value: Value, unit: string): string | 0 => + is.num(value) && value !== 0 ? value + unit : value + +/** + * Checks if the input value matches the identity value. + * + * isValueIdentity(0, 0) // => true + * isValueIdentity('0px', 0) // => true + * isValueIdentity([0, '0px', 0], 0) // => true + */ +const isValueIdentity = (value: OneOrMore, id: number): boolean => + is.arr(value) + ? value.every(v => isValueIdentity(v, id)) + : is.num(value) + ? value === id + : parseFloat(value) === id + +type Inputs = ReadonlyArray>[] +type Transforms = ((value: any) => [string, boolean])[] + +/** + * This AnimatedStyle will simplify animated components transforms by + * interpolating all transform function passed as keys in the style object + * including shortcuts such as x, y and z for translateX/Y/Z + */ +export class AnimatedStyle extends AnimatedObject { + constructor({ x, y, z, ...style }: Lookup) { + /** + * An array of arrays that contains the values (static or fluid) + * used by each transform function. + */ + const inputs: Inputs = [] + /** + * An array of functions that take a list of values (static or fluid) + * and returns (1) a CSS transform string and (2) a boolean that's true + * when the transform has no effect (eg: an identity transform). + */ + const transforms: Transforms = [] + + // Combine x/y/z into translate3d + if (x || y || z) { + inputs.push([x || 0, y || 0, z || 0]) + transforms.push((xyz: Value[]) => [ + `translate3d(${xyz.map(v => addUnit(v, 'px')).join(',')})`, // prettier-ignore + isValueIdentity(xyz, 0), + ]) + } + + // Pluck any other transform-related props + eachProp(style, (value, key) => { + if (key === 'transform') { + inputs.push([value || '']) + transforms.push((transform: string) => [transform, transform === '']) + } else if (domTransforms.test(key)) { + delete style[key] + if (is.und(value)) return + + const unit = pxTransforms.test(key) + ? 'px' + : degTransforms.test(key) + ? 'deg' + : '' + + inputs.push(toArray(value)) + transforms.push( + key === 'rotate3d' + ? ([x, y, z, deg]: [number, number, number, Value]) => [ + `rotate3d(${x},${y},${z},${addUnit(deg, unit)})`, + isValueIdentity(deg, 0), + ] + : (input: Value[]) => [ + `${key}(${input.map(v => addUnit(v, unit)).join(',')})`, + isValueIdentity(input, key.startsWith('scale') ? 1 : 0), + ] + ) + } + }) + + if (inputs.length) { + style.transform = new FluidTransform(inputs, transforms) + } + + super(style) + } +} + +/** @internal */ +class FluidTransform extends FluidValue { + protected _value: string | null = null + + constructor(readonly inputs: Inputs, readonly transforms: Transforms) { + super() + } + + get() { + return this._value || (this._value = this._get()) + } + + protected _get() { + let transform = '' + let identity = true + each(this.inputs, (input, i) => { + const arg1 = getFluidValue(input[0]) + const [t, id] = this.transforms[i]( + is.arr(arg1) ? arg1 : input.map(getFluidValue) + ) + transform += ' ' + t + identity = identity && id + }) + return identity ? 'none' : transform + } + + // Start observing our inputs once we have an observer. + protected observerAdded(count: number) { + if (count == 1) + each(this.inputs, input => + each( + input, + value => hasFluidValue(value) && addFluidObserver(value, this) + ) + ) + } + + // Stop observing our inputs once we have no observers. + protected observerRemoved(count: number) { + if (count == 0) + each(this.inputs, input => + each( + input, + value => hasFluidValue(value) && removeFluidObserver(value, this) + ) + ) + } + + eventObserved(event: FluidEvent) { + if (event.type == 'change') { + this._value = null + } + callFluidObservers(this, event) + } +} diff --git a/targets/web/src/animated.test.tsx b/targets/web/src/animated.test.tsx new file mode 100644 index 0000000000..ae4cca4744 --- /dev/null +++ b/targets/web/src/animated.test.tsx @@ -0,0 +1,220 @@ +import * as React from 'react' +import { forwardRef } from 'react' +import { render, cleanup } from '@testing-library/react' +import '@testing-library/jest-dom/extend-expect' +import createMockRaf, { MockRaf } from 'mock-raf' +import { SpringValue, Animatable } from 'react-spring' +import { Globals } from '@react-spring/shared' +import { a } from '.' + +afterEach(cleanup) + +let mockRaf: MockRaf +beforeEach(() => { + mockRaf = createMockRaf() + Globals.assign({ + now: mockRaf.now, + requestAnimationFrame: mockRaf.raf, + }) +}) + +describe('animated component', () => { + it('creates an HTML element from a tag name', () => { + const AnimatedH1 = a('h1') + const { queryByTitle } = render( + + Bar + + ) + expect(queryByTitle('Foo')).toBeTruthy() + }) + + it('wraps a component', () => { + const Name = forwardRef< + HTMLHeadingElement, + { name: string; other: string; children: React.ReactNode } + >((props, ref) => ( +

+ {props.children} +

+ )) + const AnimatedName = a(Name) + const child = spring('Animated Text') + const name = spring('name') + const { queryByTitle } = render( + + {child} + + ) + const el: any = queryByTitle('name')! + expect(el).toBeTruthy() + expect(el.textContent).toBe('Animated Text') + }) + + it('accepts Animated values in style prop', () => { + const opacity = spring(0) + const { queryByText } = render( + Text + ) + const div: any = queryByText('Text')! + expect(div).toBeTruthy() + expect(div.style.opacity).toBe('0') + opacity.set(1) + mockRaf.step() + expect(div.style.opacity).toBe('1') + }) + + it('accepts Animated values in custom style prop', () => { + const Name = forwardRef< + HTMLHeadingElement, + { style: { color: string; opacity?: number }; children: React.ReactNode } + >((props, ref) => ( +

+ {props.children} +

+ )) + const AnimatedName = a(Name) + const opacity = spring(0.5) + const { queryByText } = render( + + Text + + ) + const div: any = queryByText('Text')! + expect(div).toBeTruthy() + expect(div.style.opacity).toBe('0.5') + opacity.set(1) + mockRaf.step() + expect(div.style.opacity).toBe('1') + }) + + it('accepts scrollTop and scrollLeft properties', () => { + const scrollTop = spring(0) + const { queryByTestId } = render( + +
+ + ) + const wrapper: any = queryByTestId('wrapper')! + expect(wrapper.scrollTop).toBe(0) + expect(wrapper.scrollLeft).toBe(0) + scrollTop.set(20) + mockRaf.step() + expect(wrapper.scrollTop).toBe(20) + }) + + it('accepts x/y/z as style keys equivalent to `translate3d`transform function', () => { + const { queryByTestId, rerender } = render( + + ) + const wrapper: any = queryByTestId('wrapper')! + expect(wrapper.style.transform).toBe('translate3d(10px,0,0)') + rerender() + expect(wrapper.style.transform).toBe('translate3d(0,10%,0)') + rerender() + expect(wrapper.style.transform).toBe('translate3d(0,0,0.3px)') + rerender( + + ) + expect(wrapper.style.transform).toBe('translate3d(10px,10%,0.3px)') + }) + + it('accepts arrays for transform functions used as style keys', () => { + const { queryByTestId } = render( + + ) + const wrapper: any = queryByTestId('wrapper')! + expect(wrapper.style.transform).toBe('scale(1,2)') + }) + + it('accepts Animated values or Animated arrays as attributes', () => { + const scale = spring(2) + const translate = spring([10, 20] as const) + const translate3d = [spring(30), spring(40), '50px'] as const + + const { queryByTestId } = render( + + ) + const wrapper: any = queryByTestId('wrapper')! + expect(wrapper.style.transform).toBe( + 'scale(2) translate(10px,20px) translate3d(30px,40px,50px)' + ) + }) + + it('sets default units to unit-less values passed as transform functions', () => { + const { queryByTestId } = render( + + ) + const wrapper: any = queryByTestId('wrapper')! + expect(wrapper.style.transform).toBe( + 'translate3d(10px,0,0) scale(1,2) rotate(30deg) skewX(10deg) translateX(10px)' + ) + }) + + it('only applies default units to the fourth value of `rotate3d`', () => { + const { queryByTestId } = render( + + ) + const wrapper: any = queryByTestId('wrapper')! + expect(wrapper.style.transform).toBe('rotate3d(1,0,0,30deg)') + }) + + it('applies `transform:none` when identity transform is detected', () => { + const z = spring(0) + const { queryByTestId } = render( + + ) + const wrapper: any = queryByTestId('wrapper')! + expect(wrapper.style.transform).toBe('none') + }) + + it('preserves transform-style and transform-origin properties', () => { + const { queryByTestId } = render( + + ) + const wrapper: any = queryByTestId('wrapper')! + expect(wrapper.style.transformOrigin).toBe('bottom center') + expect(wrapper.style.transformStyle).toBe('preserve-3d') + expect(wrapper.style.transform).toBe('translateX(40px) scale(1,2)') + }) +}) + +function spring(value: T): SpringValue> { + return new SpringValue(value) +} diff --git a/targets/web/src/animated.ts b/targets/web/src/animated.ts new file mode 100644 index 0000000000..6334e93684 --- /dev/null +++ b/targets/web/src/animated.ts @@ -0,0 +1,148 @@ +import { CSSProperties, ForwardRefExoticComponent } from 'react' +import { FluidValue, FluidProps } from '@react-spring/shared' +import { ElementType, ComponentPropsWithRef, Merge } from '@react-spring/types' +import { Primitives } from './primitives' + +import type * as CSS from 'csstype' +export type { CSS } + +type AnimatedPrimitives = { + [Tag in Primitives]: AnimatedComponent +} + +/** The type of the `animated()` function */ +export type WithAnimated = { + (wrappedComponent: T): AnimatedComponent +} & AnimatedPrimitives + +/** The type of an `animated()` component */ +export type AnimatedComponent< + T extends ElementType +> = ForwardRefExoticComponent< + AnimatedProps, { style?: StyleProps }>> & + FluidProps<{ + scrollTop?: number + scrollLeft?: number + }> +> + +/** The props of an `animated()` component */ +export type AnimatedProps = { + [P in keyof Props]: P extends 'ref' | 'key' + ? Props[P] + : AnimatedProp +} + +type StyleProps = Merge +type StylePropKeys = keyof StyleProps + +type ValidStyleProps = { + [P in keyof T & StylePropKeys]: T[P] extends StyleProps[P] ? P : never +}[keyof T & StylePropKeys] + +// The animated prop value of a React element +type AnimatedProp = [T, T] extends [infer T, infer DT] + ? [DT] extends [never] + ? never + : DT extends void + ? undefined + : DT extends string | number + ? DT | AnimatedLeaf + : DT extends object + ? [ValidStyleProps
] extends [never] + ? DT extends ReadonlyArray + ? AnimatedStyles
+ : DT + : AnimatedStyle + : DT | AnimatedLeaf + : never + +// An animated array of style objects +type AnimatedStyles> = { + [P in keyof T]: [T[P]] extends [infer DT] + ? DT extends object + ? [ValidStyleProps
] extends [never] + ? DT extends ReadonlyArray + ? AnimatedStyles
+ : DT + : { [P in keyof DT]: AnimatedProp } + : DT + : never +} + +// An animated object of style attributes +type AnimatedStyle = [T, T] extends [infer T, infer DT] + ? DT extends void + ? undefined + : [DT] extends [never] + ? never + : DT extends string | number + ? DT | AnimatedLeaf + : DT extends object + ? AnimatedObject
+ : DT | AnimatedLeaf + : never + +type AnimatedObject = + | { [P in keyof T]: AnimatedStyle } + | (T extends ReadonlyArray ? FluidValue> : never) + +// An animated primitive (or an array of them) +type AnimatedLeaf = NonObject extends infer U + ? [U] extends [never] + ? never + : FluidValue + : never + +type NonObject = + | Extract> + | Exclude + +type Angle = number | string +type Length = number | string + +type TransformProps = { + transform?: string + x?: Length + y?: Length + z?: Length + translate?: Length | readonly [Length, Length] + translateX?: Length + translateY?: Length + translateZ?: Length + translate3d?: readonly [Length, Length, Length] + rotate?: Angle + rotateX?: Angle + rotateY?: Angle + rotateZ?: Angle + rotate3d?: readonly [number, number, number, Angle] + // Note: "string" is not really supported by "scale", but this lets us + // spread React.CSSProperties into an animated style object. + scale?: number | readonly [number, number] | string + scaleX?: number + scaleY?: number + scaleZ?: number + scale3d?: readonly [number, number, number] + skew?: Angle | readonly [Angle, Angle] + skewX?: Angle + skewY?: Angle + matrix?: readonly [number, number, number, number, number, number] + matrix3d?: readonly [ + number, // a1 + number, + number, + number, + number, // a2 + number, + number, + number, + number, // a3 + number, + number, + number, + number, // a4 + number, + number, + number + ] +} diff --git a/targets/web/src/applyAnimatedValues.ts b/targets/web/src/applyAnimatedValues.ts new file mode 100644 index 0000000000..2864f51e0e --- /dev/null +++ b/targets/web/src/applyAnimatedValues.ts @@ -0,0 +1,129 @@ +import { Lookup } from '@react-spring/types' + +const isCustomPropRE = /^--/ + +type Value = string | number | boolean | null + +function dangerousStyleValue(name: string, value: Value) { + if (value == null || typeof value === 'boolean' || value === '') return '' + if ( + typeof value === 'number' && + value !== 0 && + !isCustomPropRE.test(name) && + !(isUnitlessNumber.hasOwnProperty(name) && isUnitlessNumber[name]) + ) + return value + 'px' + // Presumes implicit 'px' suffix for unitless numbers + return ('' + value).trim() +} + +const attributeCache: Lookup = {} + +type Instance = HTMLDivElement & { style?: Lookup } + +export function applyAnimatedValues(instance: Instance, props: Lookup) { + if (!instance.nodeType || !instance.setAttribute) { + return false + } + + const isFilterElement = + instance.nodeName === 'filter' || + (instance.parentNode && instance.parentNode.nodeName === 'filter') + + const { style, children, scrollTop, scrollLeft, ...attributes } = props! + + const values = Object.values(attributes) + const names = Object.keys(attributes).map(name => + isFilterElement || instance.hasAttribute(name) + ? name + : attributeCache[name] || + (attributeCache[name] = name.replace( + /([A-Z])/g, + // Attributes are written in dash case + n => '-' + n.toLowerCase() + )) + ) + + if (children !== void 0) { + instance.textContent = children + } + + // Apply CSS styles + for (let name in style) { + if (style.hasOwnProperty(name)) { + const value = dangerousStyleValue(name, style[name]) + if (name === 'float') name = 'cssFloat' + else if (isCustomPropRE.test(name)) { + instance.style.setProperty(name, value) + } else { + instance.style[name] = value + } + } + } + + // Apply DOM attributes + names.forEach((name, i) => { + instance.setAttribute(name, values[i]) + }) + + if (scrollTop !== void 0) { + instance.scrollTop = scrollTop + } + if (scrollLeft !== void 0) { + instance.scrollLeft = scrollLeft + } +} + +let isUnitlessNumber: { [key: string]: true } = { + animationIterationCount: true, + borderImageOutset: true, + borderImageSlice: true, + borderImageWidth: true, + boxFlex: true, + boxFlexGroup: true, + boxOrdinalGroup: true, + columnCount: true, + columns: true, + flex: true, + flexGrow: true, + flexPositive: true, + flexShrink: true, + flexNegative: true, + flexOrder: true, + gridRow: true, + gridRowEnd: true, + gridRowSpan: true, + gridRowStart: true, + gridColumn: true, + gridColumnEnd: true, + gridColumnSpan: true, + gridColumnStart: true, + fontWeight: true, + lineClamp: true, + lineHeight: true, + opacity: true, + order: true, + orphans: true, + tabSize: true, + widows: true, + zIndex: true, + zoom: true, + // SVG-related properties + fillOpacity: true, + floodOpacity: true, + stopOpacity: true, + strokeDasharray: true, + strokeDashoffset: true, + strokeMiterlimit: true, + strokeOpacity: true, + strokeWidth: true, +} + +const prefixKey = (prefix: string, key: string) => + prefix + key.charAt(0).toUpperCase() + key.substring(1) +const prefixes = ['Webkit', 'Ms', 'Moz', 'O'] + +isUnitlessNumber = Object.keys(isUnitlessNumber).reduce((acc, prop) => { + prefixes.forEach(prefix => (acc[prefixKey(prefix, prop)] = acc[prop])) + return acc +}, isUnitlessNumber) diff --git a/targets/web/src/index.ts b/targets/web/src/index.ts new file mode 100644 index 0000000000..cc63b0a0e9 --- /dev/null +++ b/targets/web/src/index.ts @@ -0,0 +1,26 @@ +import { Globals } from '@react-spring/core' +import { unstable_batchedUpdates } from 'react-dom' +import { createStringInterpolator, colors } from '@react-spring/shared' +import { createHost } from '@react-spring/animated' +import { applyAnimatedValues } from './applyAnimatedValues' +import { AnimatedStyle } from './AnimatedStyle' +import { WithAnimated } from './animated' +import { primitives } from './primitives' + +Globals.assign({ + batchedUpdates: unstable_batchedUpdates, + createStringInterpolator, + colors, +}) + +const host = createHost(primitives, { + applyAnimatedValues, + createAnimatedStyle: style => new AnimatedStyle(style), + getComponentProps: ({ scrollTop, scrollLeft, ...props }) => props, +}) + +export const animated = host.animated as WithAnimated +export { animated as a } + +export * from './animated' +export * from '@react-spring/core' diff --git a/src/renderprops/targets/web/index.js b/targets/web/src/primitives.ts similarity index 65% rename from src/renderprops/targets/web/index.js rename to targets/web/src/primitives.ts index c6fb52dbca..a77a1f3d70 100644 --- a/src/renderprops/targets/web/index.js +++ b/targets/web/src/primitives.ts @@ -1,15 +1,5 @@ -import './globals' -import * as Globals from '../../animated/Globals' -import Controller from '../../animated/Controller' -import { interpolate } from '../../animated/AnimatedInterpolation' -import animated from '../../animated/createAnimatedComponent' -import { config } from '../../shared/constants' -import Spring from '../../Spring' -import Transition from '../../Transition' -import Trail from '../../Trail' -import Keyframes from '../../Keyframes' - -const domElements = [ +export type Primitives = keyof JSX.IntrinsicElements +export const primitives: Primitives[] = [ 'a', 'abbr', 'address', @@ -74,7 +64,6 @@ const domElements = [ 'main', 'map', 'mark', - 'marquee', 'menu', 'menuitem', 'meta', @@ -146,20 +135,3 @@ const domElements = [ 'text', 'tspan', ] - -const extendedAnimated = domElements.reduce((acc, element) => { - acc[element] = animated(element) - return acc -}, animated) - -export { - Spring, - Keyframes, - Transition, - Trail, - Controller, - config, - extendedAnimated as animated, - interpolate, - Globals, -} diff --git a/targets/web/src/types/__tests__/.prettierrc b/targets/web/src/types/__tests__/.prettierrc new file mode 100644 index 0000000000..f2a7d6c730 --- /dev/null +++ b/targets/web/src/types/__tests__/.prettierrc @@ -0,0 +1,8 @@ +{ + "semi": true, + "trailingComma": "es5", + "singleQuote": true, + "jsxBracketSameLine": true, + "tabWidth": 2, + "printWidth": 80 +} diff --git a/targets/web/src/types/__tests__/Spring.tsx b/targets/web/src/types/__tests__/Spring.tsx new file mode 100644 index 0000000000..ec1fcd5a3b --- /dev/null +++ b/targets/web/src/types/__tests__/Spring.tsx @@ -0,0 +1,90 @@ +import * as React from 'react'; +import { assert, test, _ } from 'spec.ts'; +import { animated, Spring } from '../..'; +import { + AnimationResult, + SpringValues, + SpringUpdateFn, +} from '@react-spring/core'; + +const View = animated('div'); + +test('basic usage', () => { + { + assert( + result, + _ as Readonly< + AnimationResult<{ + opacity: number; + color: string; + }> + > + ); + }}> + {(values) => { + assert( + values, + _ as SpringValues<{ + opacity: number; + color: string; + }> + ); + return ; + }} + ; +}); + +test('with async function as "to" prop', () => { + { + assert( + next, + _ as SpringUpdateFn<{ + opacity: number; + }> + ); + }}> + {(values) => { + assert( + values, + _ as SpringValues<{ + opacity: number; + }> + ); + return ; + }} + ; +}); + +test('with array as "to" prop', () => { + { + assert( + next, + _ as SpringUpdateFn<{ + opacity: number; + }> + ); + }, + }, + ]}> + {(values) => { + assert( + values, + _ as SpringValues<{ + opacity: number; + }> + ); + return ; + }} + ; +}); diff --git a/targets/web/src/types/__tests__/Trail.tsx b/targets/web/src/types/__tests__/Trail.tsx new file mode 100644 index 0000000000..2f9e5766c1 --- /dev/null +++ b/targets/web/src/types/__tests__/Trail.tsx @@ -0,0 +1,18 @@ +import * as React from 'react'; +import { assert, test, _ } from 'spec.ts'; +import { animated, Trail } from '../..'; +import { SpringValues } from '@react-spring/core'; + +const View = animated('div'); + +declare const items: number[]; + +test('basic usage', () => ( + + {(item) => (props) => { + assert(item, _ as unknown); // FIXME: should be "number" + assert(props, _ as SpringValues); // FIXME: should include "opacity" and "color" + return {String(item)}; + }} + +)); diff --git a/targets/web/src/types/__tests__/Transition.tsx b/targets/web/src/types/__tests__/Transition.tsx new file mode 100644 index 0000000000..42adbccc8e --- /dev/null +++ b/targets/web/src/types/__tests__/Transition.tsx @@ -0,0 +1,24 @@ +import * as React from 'react'; +import { assert, test, _ } from 'spec.ts'; +import { SpringValues, Transition, TransitionState } from '@react-spring/core'; +import { animated } from '../..'; + +const View = animated('div'); + +const items = [1, 2] as [1, 2]; + +test('basic usage', () => { + + {(style, item, state, index) => { + assert(style, _ as SpringValues); // FIXME: should include "opacity" + assert(item, _ as 1 | 2); + assert(state, _ as TransitionState); + assert(index, _ as number); + return {item}; + }} + ; +}); diff --git a/targets/web/src/types/__tests__/index.ts b/targets/web/src/types/__tests__/index.ts new file mode 100644 index 0000000000..6417b1f62c --- /dev/null +++ b/targets/web/src/types/__tests__/index.ts @@ -0,0 +1,101 @@ +import { assert, _, test, describe } from 'spec.ts'; +import { FluidValue } from '@react-spring/shared'; +import { CSSProperties } from 'react'; + +import { AnimatedProps } from '../..'; + +describe('AnimatedProps', () => { + test('width prop', () => { + type Props = AnimatedProps<{ + style?: { width?: CSSProperties['width'] }; + }>; + assert( + _ as Props, + _ as { + style?: { + width?: number | string | FluidValue; + }; + } + ); + }); + + test('string union prop', () => { + type WordWrap = CSSProperties['wordWrap']; + type Props = AnimatedProps<{ + style: { wordWrap: WordWrap }; + }>; + assert( + _ as Props, + _ as { + style: { + wordWrap: WordWrap | FluidValue>; + }; + } + ); + }); + + test('ref prop', () => { + type Props = AnimatedProps<{ + ref: { current: any }; + foo: number; + }>; + assert( + _ as Props, + _ as { + ref: { current: any }; + foo: number | FluidValue; + } + ); + }); + + test('transform prop', () => { + type Props = AnimatedProps<{ + style?: { + transform: string; + }; + }>; + assert( + _ as Props, + _ as { + style?: { + transform: string | FluidValue; + }; + } + ); + }); + + test('non-style object prop', () => { + type Props = AnimatedProps<{ + foo: { bar: number }; + bar?: number | { foo: number }; + }>; + assert( + _ as Props, + _ as { + foo: { bar: number }; + bar?: number | { foo: number } | FluidValue; + } + ); + }); + + test('nested style array prop', () => { + type Props = AnimatedProps<{ + style: [{ width: number }, [{ height: number }], false]; + }>; + assert( + _ as Props, + _ as { + style: [ + { width: number | FluidValue }, + [{ height: number | FluidValue }], + false + ]; + } + ); + }); + + test('with any', () => { + type Props = AnimatedProps; + assert(_ as Props, _ as { [key: string]: any }); + }); +}); diff --git a/targets/web/src/types/__tests__/useChain.tsx b/targets/web/src/types/__tests__/useChain.tsx new file mode 100644 index 0000000000..3ef2ed9f76 --- /dev/null +++ b/targets/web/src/types/__tests__/useChain.tsx @@ -0,0 +1,17 @@ +import { test } from 'spec.ts'; +import { RefObject } from 'react'; +import { SpringHandle } from '@react-spring/core'; +import { useChain } from '../..'; + +const refs: RefObject[] = []; + +test('basic usage', () => { + // No timesteps + useChain(refs); + + // With timesteps + useChain(refs, [0, 1]); + + // Cut timesteps in half + useChain(refs, [0, 1], 1000 / 2); +}); diff --git a/targets/web/src/types/__tests__/useSpring.tsx b/targets/web/src/types/__tests__/useSpring.tsx new file mode 100644 index 0000000000..1386fea131 --- /dev/null +++ b/targets/web/src/types/__tests__/useSpring.tsx @@ -0,0 +1,221 @@ +import * as React from 'react'; +import { assert, test, _ } from 'spec.ts'; +import { RunAsyncProps } from '@react-spring/core/src/runAsync'; +import { + animated, + useSpring, + SpringValue, + SpringValues, + SpringRef, + AnimationResult, +} from '../..'; + +type State = { width: number }; + +test('infer return type via forward prop', () => { + const props = useSpring({ width: 0, delay: 1000 }); + assert(props, _ as SpringValues); + + test('using with "animated()" component', () => { + const Test = animated((_: { style: State }) => null); + return ; + }); +}); + +test('infer return type via "from" prop', () => { + const props = useSpring({ from: { width: 0 } }); + assert(props, _ as SpringValues); +}); + +test('infer return type via "to" prop', () => { + const props = useSpring({ to: { width: 0 } }); + assert(props, _ as SpringValues); +}); + +test('infer return type via "from" and "to" props', () => { + const props = useSpring({ + from: { width: 0 }, + to: { height: '100%' }, + }); + assert( + props, + _ as SpringValues<{ + width: number; + height: string; + }> + ); +}); + +test('infer return type via "from" and forward props', () => { + const props = useSpring({ + from: { width: 0 }, + height: '100%', + }); + assert( + props, + _ as SpringValues<{ + width: number; + height: string; + }> + ); +}); + +test('infer animated array', () => { + const props = useSpring({ + to: { foo: [0, 0] }, + }); + assert(props.foo, _ as SpringValue); + assert( + props, + _ as SpringValues<{ + foo: number[]; + }> + ); + + test('interpolated array', () => { + props.foo.interpolate((a, b) => { + assert(a, _ as number); + assert(b, _ as number); + return 0; + }); + }); +}); + +test('imperative mode (inferred)', () => { + const [props, ref] = useSpring(() => ({ + width: 0, + onRest(event) { + // FIXME: should include {foo: number} + assert(event, _ as AnimationResult); + }, + })); + + assert(props, _ as SpringValues); + assert(ref, _ as SpringRef); +}); + +test('imperative mode', () => { + const [props, ref] = useSpring(() => ({ + width: 0, + onRest(event) { + // FIXME: should include {foo: number} + assert(event, _ as AnimationResult); + }, + })); + + assert(props, _ as SpringValues); + assert(ref, _ as SpringRef); + + test('with delay and reset', () => { + const [props] = useSpring(() => ({ + foo: 0, + delay: 1000, + reset: true, + })); + assert( + props, + _ as SpringValues<{ + foo: number; + }> + ); + }); + + test('with callbacks', () => { + const [props] = useSpring(() => ({ + foo: 0, + onStart(...args) { + assert(args, _ as []); + }, + onChange(values) { + assert( + values, + _ as any // FIXME: should be {foo: number} + ); + }, + onRest(result) { + // FIXME: should include {foo: number} + assert(result, _ as AnimationResult); + }, + })); + assert( + props, + _ as SpringValues<{ + foo: number; + }> + ); + }); +}); + +test('spring refs', () => { + const ref = new SpringRef(); + useSpring({ foo: 1, ref }); + ref.start(); + ref.stop(['foo', 'bar']); + ref.stop(); +}); + +test('basic config', () => { + const props = useSpring({ + from: { width: 0 }, + reset: true, + delay: 1000, + onStart(...args) { + assert(args, _ as []); + }, + onChange(values) { + assert( + values, + _ as any // FIXME: should be {width: number} + ); + }, + onRest(result) { + // FIXME: should include {width: number} + assert(result, _ as AnimationResult); + }, + }); + assert( + props, + _ as SpringValues<{ + width: number; + }> + ); +}); + +test('function as "to" prop', () => { + type State = { width: number }; + + const props = useSpring({ + from: { width: 0 }, + to: async (next) => { + assert(next, _ as SpringUpdateFn); + await next({ + width: 100, + delay: 1000, + config: { duration: 1000 }, + onRest(result) { + assert(result, _ as AnimationResult); + }, + }); + }, + }); + + assert(props, _ as SpringValues); +}); + +test('array as "to" prop', () => { + const props = useSpring({ + from: { width: 0 }, + to: [{ width: 100 }, { width: 0 }], + }); + assert(props, _ as SpringValues); +}); + +test('with "onProps" prop', () => { + useSpring({ + width: 0, + onProps(props, spring) { + assert(props, _ as Readonly>); + assert(spring, _ as SpringValue); + }, + }); +}); diff --git a/targets/web/src/types/__tests__/useSprings.tsx b/targets/web/src/types/__tests__/useSprings.tsx new file mode 100644 index 0000000000..c16cc5f58f --- /dev/null +++ b/targets/web/src/types/__tests__/useSprings.tsx @@ -0,0 +1,41 @@ +import { assert, test, _ } from 'spec.ts'; +import { useSprings, SpringStopFn } from '../..'; +import { + Controller, + ControllerProps, + SpringStartFn, + SpringValues, +} from '@react-spring/core'; + +const items: string[] = []; + +type State = { opacity: number }; + +test('pass an array', () => { + const springs = useSprings( + items.length, + items.map((item) => { + assert(item, _ as string); + return { opacity: 1 / Number(item) }; + }) + ); + assert(springs, _ as Array>); +}); + +test('pass a function', () => { + const [springs, set, stop] = useSprings(2, (i) => { + assert(i, _ as number); + return { opacity: i }; + }); + + assert(springs, _ as Array>); + + set({ opacity: 1 }); + set([{ opacity: 1 }, { opacity: 0.5 }]); + set((_index: number, _spring: Controller) => { + return _ as ControllerProps; + }); + + assert(set, _ as SpringStartFn); + assert(stop, _ as SpringStopFn); +}); diff --git a/targets/web/src/types/__tests__/useTrail.tsx b/targets/web/src/types/__tests__/useTrail.tsx new file mode 100644 index 0000000000..46e92f000a --- /dev/null +++ b/targets/web/src/types/__tests__/useTrail.tsx @@ -0,0 +1,34 @@ +import { assert, test, _ } from 'spec.ts'; +import { SpringValues, SpringStartFn } from '@react-spring/core'; +import { useTrail, SpringStopFn } from '../..'; + +test('basic usage', () => { + const springs = useTrail(3, { opacity: 1 }); + assert( + springs, + _ as Array< + SpringValues<{ + opacity: number; + }> + > + ); +}); + +test('function argument', () => { + const [springs, set, stop] = useTrail(3, () => ({ opacity: 1 })); + assert( + springs, + _ as Array< + SpringValues<{ + opacity: number; + }> + > + ); + assert( + set, + _ as SpringStartFn<{ + opacity: number; + }> + ); + assert(stop, _ as SpringStopFn<{}>); +}); diff --git a/targets/web/src/types/__tests__/useTransition.tsx b/targets/web/src/types/__tests__/useTransition.tsx new file mode 100644 index 0000000000..1a84fa8304 --- /dev/null +++ b/targets/web/src/types/__tests__/useTransition.tsx @@ -0,0 +1,90 @@ +import * as React from 'react'; +import { assert, test, _ } from 'spec.ts'; +import { SpringValues, SpringUpdateFn } from '@react-spring/core'; +import { Lookup } from '@react-spring/types'; + +import { animated, useTransition } from '../..'; + +const View = animated('div'); + +const items = [1, 2] as [1, 2]; + +test('infer animated from these props', () => { + const transition = useTransition(items, { + from: { a: 1 }, + enter: { b: 1 }, + leave: { c: 1 }, + update: { d: 1 }, + initial: { e: 1 }, + }); + transition((style, item) => { + assert( + style, + _ as SpringValues<{ + a: number; + b: number; + c: number; + d: number; + e: number; + }> + ); + assert(item, _ as 1 | 2); + return null; + }); +}); + +test('basic usage', () => { + const transition = useTransition(items, { + from: { opacity: 0 }, + enter: [{ opacity: 1 }, { color: 'red' }], + leave: { opacity: 0 }, + }); + + // You typically map transition objects into JSX elements. + return transition((style, item) => { + assert( + style, + _ as SpringValues<{ + opacity: number | undefined; // FIXME: "opacity" should never be undefined because it exists in "from" + color: string | undefined; + }> + ); + assert(item, _ as 1 | 2); + return {item}; + }); +}); + +test('with function props', () => { + const transition = useTransition(items, { + from: (item) => { + assert(item, _ as 1 | 2); + return { width: 0, height: 0 }; + }, + enter: (item) => { + assert(item, _ as 1 | 2); + return { width: item * 100, height: '100%' }; + }, + leave: { width: '0%', opacity: 0 }, + }); + transition((style, item) => { + assert( + style, + _ as SpringValues<{ + width: string | number; + height: string; + opacity: number; + }> + ); + assert(item, _ as 1 | 2); + return null; + }); + + test('return an async function', () => { + useTransition(items, { + update: (item) => async (next) => { + assert(item, _ as 1 | 2); + assert(next, _ as SpringUpdateFn); + }, + }); + }); +}); diff --git a/targets/web/tsconfig.json b/targets/web/tsconfig.json new file mode 100644 index 0000000000..417fa21b47 --- /dev/null +++ b/targets/web/tsconfig.json @@ -0,0 +1,17 @@ +{ + "compilerOptions": { + "baseUrl": ".", + "forceConsistentCasingInFileNames": true, + "jsx": "react", + "lib": ["dom", "es2017"], + "moduleResolution": "node", + "noEmitOnError": true, + "noFallthroughCasesInSwitch": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "preserveSymlinks": true, + "sourceMap": true, + "strict": true, + "target": "esnext" + } +} diff --git a/targets/zdog/@types/react-zdog/index.d.ts b/targets/zdog/@types/react-zdog/index.d.ts new file mode 100644 index 0000000000..5ec7ffa7fc --- /dev/null +++ b/targets/zdog/@types/react-zdog/index.d.ts @@ -0,0 +1,26 @@ +declare module 'react-zdog' { + export const addEffect: (cb: () => void) => void + export const applyProps: ( + instance: any, + newProps: any, + oldProps?: any, + accumulative?: boolean + ) => void + export const invalidate: () => void + export const useRender: (fn: () => void, deps?: any[]) => void + + // Elements + type ElementType = import('react').ElementType + export const Illustration: ElementType + export const Anchor: ElementType + export const Shape: ElementType + export const Group: ElementType + export const Rect: ElementType + export const RoundedRect: ElementType + export const Ellipse: ElementType + export const Polygon: ElementType + export const Hemisphere: ElementType + export const Cylinder: ElementType + export const Cone: ElementType + export const Box: ElementType +} diff --git a/targets/zdog/README.md b/targets/zdog/README.md new file mode 100644 index 0000000000..27d6de603e --- /dev/null +++ b/targets/zdog/README.md @@ -0,0 +1,3 @@ +# @react-spring/zdog + +[`zdog`](https://github.com/metafizzy/zdog) support diff --git a/targets/zdog/package.json b/targets/zdog/package.json new file mode 100644 index 0000000000..74853ba2c0 --- /dev/null +++ b/targets/zdog/package.json @@ -0,0 +1,28 @@ +{ + "name": "@react-spring/zdog", + "version": "9.0.0-rc.4", + "main": "src/index.ts", + "dependencies": { + "@react-spring/animated": "link:../../packages/animated", + "@react-spring/core": "link:../../packages/core", + "@react-spring/shared": "link:../../packages/shared", + "@react-spring/types": "link:../../packages/types" + }, + "peerDependencies": { + "react": ">=16.8", + "react-dom": ">=16.8", + "react-zdog": ">=1.0", + "zdog": ">=1.0" + }, + "devDependencies": { + "react-dom": "~16.8.0", + "react-zdog": "~1.0.0", + "zdog": "~1.0.0" + }, + "scripts": { + "build": "rollup -c" + }, + "publishConfig": { + "directory": "dist" + } +} diff --git a/targets/zdog/rollup.config.js b/targets/zdog/rollup.config.js new file mode 100644 index 0000000000..66cee09cf3 --- /dev/null +++ b/targets/zdog/rollup.config.js @@ -0,0 +1,3 @@ +import { bundle } from '../../rollup.config' + +export default bundle() diff --git a/targets/zdog/src/animated.ts b/targets/zdog/src/animated.ts new file mode 100644 index 0000000000..adaf4ccead --- /dev/null +++ b/targets/zdog/src/animated.ts @@ -0,0 +1,61 @@ +import * as Zdog from 'react-zdog' +import { + ElementType, + ComponentPropsWithRef, + ForwardRefExoticComponent, +} from 'react' +import { FluidValue } from '@react-spring/shared' +import { primitives } from './primitives' + +type Primitives = typeof primitives[number] +type AnimatedPrimitives = { + [P in Primitives]: AnimatedComponent +} + +/** The type of the `animated()` function */ +export type WithAnimated = { + (wrappedComponent: T): AnimatedComponent +} & AnimatedPrimitives + +/** The type of an `animated()` component */ +export type AnimatedComponent< + T extends ElementType +> = ForwardRefExoticComponent>> + +/** The props of an `animated()` component */ +export type AnimatedProps = { + [P in keyof Props]: P extends 'ref' | 'key' + ? Props[P] + : AnimatedProp +} + +// The animated prop value of a React element +type AnimatedProp = [T, T] extends [infer T, infer DT] + ? [DT] extends [never] + ? never + : DT extends void + ? undefined + : DT extends object + ? AnimatedStyle + : DT | AnimatedLeaf + : never + +// An animated object of style attributes +type AnimatedStyle = [T, T] extends [infer T, infer DT] + ? DT extends void + ? undefined + : [DT] extends [never] + ? never + : DT extends object + ? { [P in keyof DT]: AnimatedStyle } + : DT | AnimatedLeaf + : never + +// An animated primitive (or an array of them) +type AnimatedLeaf = + | Exclude + | Extract> extends infer U + ? [U] extends [never] + ? never + : FluidValue> + : never diff --git a/targets/zdog/src/index.ts b/targets/zdog/src/index.ts new file mode 100644 index 0000000000..16ee8175eb --- /dev/null +++ b/targets/zdog/src/index.ts @@ -0,0 +1,21 @@ +import { applyProps } from 'react-zdog' +import { Globals } from '@react-spring/core' +import { createStringInterpolator, colors } from '@react-spring/shared' +import { createHost } from '@react-spring/animated' +import { primitives } from './primitives' +import { WithAnimated } from './animated' + +Globals.assign({ + createStringInterpolator, + colors, +}) + +const host = createHost(primitives, { + applyAnimatedValues: applyProps, +}) + +export const animated = host.animated as WithAnimated +export { animated as a } + +export * from './animated' +export * from '@react-spring/core' diff --git a/targets/zdog/src/primitives.ts b/targets/zdog/src/primitives.ts new file mode 100644 index 0000000000..b1b7b49345 --- /dev/null +++ b/targets/zdog/src/primitives.ts @@ -0,0 +1,25 @@ +import { ElementType } from 'react' +import * as Zdog from 'react-zdog' + +type ZdogExports = typeof Zdog +type ZdogElements = { + [P in keyof ZdogExports]: P extends 'Illustration' + ? never + : ZdogExports[P] extends ElementType + ? P + : never +}[keyof ZdogExports] + +export const primitives: ZdogElements[] = [ + 'Anchor', + 'Shape', + 'Group', + 'Rect', + 'RoundedRect', + 'Ellipse', + 'Polygon', + 'Hemisphere', + 'Cylinder', + 'Cone', + 'Box', +] diff --git a/targets/zdog/tsconfig.json b/targets/zdog/tsconfig.json new file mode 100644 index 0000000000..36a7674428 --- /dev/null +++ b/targets/zdog/tsconfig.json @@ -0,0 +1,19 @@ +{ + "include": ["src"], + "compilerOptions": { + "baseUrl": ".", + "forceConsistentCasingInFileNames": true, + "jsx": "react", + "lib": ["dom", "es2017"], + "moduleResolution": "node", + "noEmitOnError": true, + "noFallthroughCasesInSwitch": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "preserveSymlinks": true, + "sourceMap": true, + "strict": true, + "target": "esnext", + "typeRoots": ["./node_modules/@types", "./@types"] + } +} diff --git a/types/index.d.ts b/types/index.d.ts deleted file mode 100644 index a1d37f4420..0000000000 --- a/types/index.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -// This is the file TypeScript will see when it looks inside the module without any sub-paths -// This should just reexport the package.json's "main". -export * from './web' -// Add this (and to all other entry points) if a default export is ever added -// export { default } from './web' diff --git a/types/native.cjs.d.ts b/types/native.cjs.d.ts deleted file mode 100644 index b82e747bb3..0000000000 --- a/types/native.cjs.d.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './native' \ No newline at end of file diff --git a/types/native.d.ts b/types/native.d.ts deleted file mode 100644 index df7053eff6..0000000000 --- a/types/native.d.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './index' diff --git a/types/renderprops-addons.cjs.d.ts b/types/renderprops-addons.cjs.d.ts deleted file mode 100644 index 8fc671f7f1..0000000000 --- a/types/renderprops-addons.cjs.d.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './renderprops-addons' \ No newline at end of file diff --git a/types/renderprops-addons.d.ts b/types/renderprops-addons.d.ts deleted file mode 100644 index 8de80aa0fa..0000000000 --- a/types/renderprops-addons.d.ts +++ /dev/null @@ -1,28 +0,0 @@ -import { Ref, PureComponent } from 'react' -import { SpringConfig } from './renderprops-universal' - -interface ParallaxProps { - pages: number - - config?: SpringConfig | ((key: string) => SpringConfig) - - scrolling?: boolean - - horizontal?: boolean - - ref?: Ref -} - -export class Parallax extends PureComponent { - scrollTo: (offset: number) => void -} - -interface ParallaxLayerProps { - factor?: number - - offset?: number - - speed?: number -} - -export class ParallaxLayer extends PureComponent {} diff --git a/types/renderprops-konva.cjs.d.ts b/types/renderprops-konva.cjs.d.ts deleted file mode 100644 index 1bfa009ee4..0000000000 --- a/types/renderprops-konva.cjs.d.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './renderprops-konva' \ No newline at end of file diff --git a/types/renderprops-konva.d.ts b/types/renderprops-konva.d.ts deleted file mode 100644 index 82d3dcbabb..0000000000 --- a/types/renderprops-konva.d.ts +++ /dev/null @@ -1,24 +0,0 @@ -import { - ForwardRefExoticComponent, - ComponentPropsWithRef, - ReactType, -} from 'react' -import * as konva from 'react-konva' -import { animated } from './renderprops-universal' -export * from './renderprops-universal' - -type KonvaComponents = Pick< - typeof konva, - { - [K in keyof typeof konva]: typeof konva[K] extends ReactType ? K : never - }[keyof typeof konva] -> - -declare const augmentedAnimated: typeof animated & - { - [Tag in keyof KonvaComponents]: ForwardRefExoticComponent< - ComponentPropsWithRef - > - } - -export { augmentedAnimated as animated } diff --git a/types/renderprops-universal.cjs.d.ts b/types/renderprops-universal.cjs.d.ts deleted file mode 100644 index 9cd9552e2c..0000000000 --- a/types/renderprops-universal.cjs.d.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './renderprops-universal' \ No newline at end of file diff --git a/types/renderprops-universal.d.ts b/types/renderprops-universal.d.ts deleted file mode 100644 index c30ef0ad11..0000000000 --- a/types/renderprops-universal.d.ts +++ /dev/null @@ -1,303 +0,0 @@ -// This is where the bulk of the type definitions should go. -// The other entry points (except for hooks) all just expose this but with some customization. - -import { - Component, - PureComponent, - ReactNode, - ComponentClass, - ComponentType, - ReactType, - Ref, - ForwardRefExoticComponent, - ComponentPropsWithRef, -} from 'react' - -export type SpringEasingFunc = (t: number) => number - -export interface SpringConfig { - mass?: number - tension?: number - friction?: number - velocity?: number - clamp?: boolean - precision?: number - delay?: number - duration?: number - easing?: SpringEasingFunc -} - -type SpringRendererFunc = (params: DS) => ReactNode - -export interface SpringBaseProps { - /** - * Spring config, or for individual keys: fn(key => config) - * @default config.default - */ - config?: SpringConfig | ((key: string) => SpringConfig) - /** - * Will skip rendering the component if true and write to the dom directly - * @default false - */ - native?: boolean - /** - * When true it literally resets: from -> to - * @default false - */ - reset?: boolean - /** - * Prevents animation if true - * @default false - */ - immediate?: boolean | ((key: string) => boolean) - /** - * Animation start delay, optional - */ - delay?: number - /** - * reverse the animation - */ - reverse?: boolean - /** - * Callback when the animation starts to animate - */ - onStart?(): void -} - -export interface SpringProps extends SpringBaseProps { - /** - * Base styles - * @default {} - */ - from?: Partial - /** - * Animates to... - * @default {} - */ - to?: DS - /** - * Callback when the animation comes to a still-stand - */ - onRest?: (ds: DS) => void - /** - * Frame by frame callback, first argument passed is the animated value - */ - onFrame?: (ds: DS) => void - /** - * Takes a function that receives interpolated styles - */ - children?: SpringRendererFunc - /** - * Inject props - * @default undefined - */ - inject?: any - /** - * Inject props after animation is ended - */ - after?: Partial - /** - * Escape hatch to force the spring to render - */ - force?: boolean -} - -export const config: { - /** default: { tension: 170, friction: 26 } */ - default: SpringConfig - /** gentle: { tension: 120, friction: 14 } */ - gentle: SpringConfig - /** wobbly: { tension: 180, friction: 12 } */ - wobbly: SpringConfig - /** stiff: { tension: 210, friction: 20 } */ - stiff: SpringConfig - /** slow: { tension: 280, friction: 60 } */ - slow: SpringConfig - /** molasses: { tension: 280, friction: 120 } */ - molasses: SpringConfig -} - -export class Spring extends PureComponent> {} - -export function interpolate( - parent: number[], - config: (...args: number[]) => any -): any - -export function animated( - comp: T -): ForwardRefExoticComponent> - -export type TransitionKeyProps = string | number - -export type State = 'enter' | 'update' | 'leave' - -export interface TransitionProps< - TItem, - TInit extends object = {}, - TFrom extends object = {}, - TEnter extends object = {}, - TLeave extends object = {}, - TUpdate extends object = {}, - SpringProps extends object = {}, - DS extends object = {} -> extends Pick> { - /** - * Spring config, or for individual keys: fn((item,type) => config), where "type" can be either enter, leave or update - * @default config.default - */ - config?: SpringConfig | ((item: TItem, type: State) => SpringConfig) - /** - * First-render initial values, if present overrides "from" on the first render pass. It can be "null" to skip first mounting transition. Otherwise it can take an object or a function (item => object) - */ - initial?: TInit | ((item: TItem) => TInit) | null - /** - * Base values (from -> enter), or: item => values - * @default {} - */ - from?: TFrom | ((item: TItem) => TFrom) - /** - * Values that apply to new elements, or: item => values - * @default {} - */ - enter?: TEnter | ((item: TItem) => TEnter) - /** - * Values that apply to leaving elements, or: item => values - * @default {} - */ - leave?: TLeave | ((item: TItem) => TLeave) - /** - * Callback when the animation comes to a still-stand - */ - onRest?: (ds: DS) => void - - /** - * Values that apply to elements that are neither entering nor leaving (you can use this to update present elements), or: item => values - */ - update?: TUpdate | ((item: TItem) => TUpdate) - /** - * The same keys you would normally hand over to React in a list. Keys can be specified as a key-accessor function, an array of keys, or a single value - */ - keys?: - | ((item: TItem) => TransitionKeyProps) - | Array - | TransitionKeyProps - /** - * An array of items to be displayed, this is used by Transition as the primary means of detecting changes. - * @default {} - */ - items: TItem[] | TItem - /** - * A single function-child that receives the individual item and return a functional component ((item, state, index) => props => view) - */ - children?: ( - item: TItem, - state: State, - index: number - ) => - | boolean - | null - | SpringRendererFunc - /** - * Calls back once a transition is about to wrap up - */ - onDestroyed?: (item: TItem) => void - /** - * Useful in combination with "unique", when true it forces incoming items that already exist to restart instead of adapting to their current values - * @default false - */ - reset?: boolean - /** - * Trailing delay in ms - */ - trail?: number - /** - * When true enforces that an item can only occur once instead of allowing two or more items with the same key to co-exist in a stack - * @default false - */ - unique?: boolean -} - -export class Transition< - TItem, - TInit extends object, - TFrom extends object, - TEnter extends object, - TLeave extends object, - TUpdate extends object -> extends PureComponent< - TransitionProps -> {} - -type TrailKeyProps = string | number - -/** - * Relay interface to override inheritance property - */ -interface TrailPropsWeaken extends SpringProps { - children?: any -} -interface TrailProps extends TrailPropsWeaken { - /** - * Base values, optional - */ - from?: Partial - /** - * Animates to ... - */ - to?: DS - /** - * An array of items to be displayed, use this if you need access to the actual items when distributing values as functions - */ - items: TItem[] | TItem - /** - * Item keys (the same keys you'd hand over to react in a list). If you specify items, keys can be an accessor function (item => item.key) - * @default item => item - */ - keys?: ((item: TItem) => TrailKeyProps) | Array | TrailKeyProps - /** - * A single function-child that receives the individual item and return a functional component (item, index) => props => view) - */ - children: (item: TItem, index: number) => SpringRendererFunc -} - -export class Trail extends PureComponent< - TrailProps -> {} - -interface KeyframesProps { - state?: string -} - -export class Keyframes< - S extends object, - DS extends object -> extends PureComponent & S> { - static create( - primitive: ComponentType - ): (states: object) => (props: object) => Keyframes - static Spring( - states: object - ): ( - props: object - ) => Keyframes< - S | Pick, Exclude, 'to'>>, - DS - > - static Trail( - states: object - ): ( - props: object - ) => Keyframes< - S | Pick, Exclude, 'to'>>, - DS - > - static Transition( - states: object - ): ( - props: object - ) => Keyframes< - S | Pick, Exclude, 'to'>>, - DS - > -} diff --git a/types/renderprops.cjs.d.ts b/types/renderprops.cjs.d.ts deleted file mode 100644 index 4ef5a8e659..0000000000 --- a/types/renderprops.cjs.d.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './renderprops' \ No newline at end of file diff --git a/types/renderprops.d.ts b/types/renderprops.d.ts deleted file mode 100644 index f673cff23c..0000000000 --- a/types/renderprops.d.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { ForwardRefExoticComponent, ComponentPropsWithRef } from 'react' -import { animated } from './renderprops-universal' -export * from './renderprops-universal' - -declare const augmentedAnimated: typeof animated & - { - [Tag in keyof JSX.IntrinsicElements]: ForwardRefExoticComponent< - ComponentPropsWithRef - > - } - -export { augmentedAnimated as animated } diff --git a/types/web.cjs.d.ts b/types/web.cjs.d.ts deleted file mode 100644 index 129caef7b0..0000000000 --- a/types/web.cjs.d.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './web' \ No newline at end of file diff --git a/types/web.d.ts b/types/web.d.ts deleted file mode 100644 index d8e70e107a..0000000000 --- a/types/web.d.ts +++ /dev/null @@ -1,234 +0,0 @@ -import { CSSProperties, RefObject } from 'react' -import { - SpringConfig, - SpringBaseProps, - TransitionKeyProps, - State, -} from './renderprops-universal' -export { SpringConfig, SpringBaseProps, TransitionKeyProps, State } - -export { config, interpolate } from './renderprops-universal' -// hooks are currently web-only -export { animated } from './renderprops' - -/** List from `function getForwardProps` in `src/shared/helpers` */ -type ExcludedProps = - | 'to' - | 'from' - | 'config' - | 'onStart' - | 'onRest' - | 'onFrame' - | 'children' - | 'reset' - | 'reverse' - | 'force' - | 'immediate' - | 'delay' - | 'attach' - | 'destroyed' - | 'interpolateTo' - | 'ref' - | 'lazy' - -// The config options for an interoplation. It maps out from in "in" type -// to an "out" type. -export type InterpolationConfig = { - range: T[] - output: U[] -} - -// The InterpolationChain is either a function that takes a config object -// and returns the next chainable type or it is a function that takes in params -// and maps out to another InterpolationChain. -export interface InterpolationChain { - (config: InterpolationConfig): OpaqueInterpolation - (interpolator: (params: T) => U): OpaqueInterpolation -} - -// The opaque interpolation masks as its original type but provides to helpers -// for chaining the interpolate method and getting its raw value. -export type OpaqueInterpolation = { - interpolate: InterpolationChain - getValue: () => T -} & T - -// Map all keys to our OpaqueInterpolation type which can either be interpreted -// as its initial value by "animated.{tag}" or chained with interpolations. -export type AnimatedValue = { - [P in keyof T]: OpaqueInterpolation -} - -// Make ForwardedProps chainable with interpolate / make it an animated value. -export type ForwardedProps = Pick> - -// NOTE: because of the Partial, this makes a weak type, which can have excess props -type InferFrom = T extends { to: infer TTo } - ? Partial - : Partial> - -// This is similar to "Omit & B", -// but with a delayed evaluation that still allows A to be inferrable -type Merge = { [K in keyof A]: K extends keyof B ? B[K] : A[K] } & B - -export type SetUpdateFn = (ds: Partial>) => void -export interface SetUpdateCallbackFn { - (ds: Partial>): void; - (i: number): Partial>; -} - -// The hooks do emulate React's 'ref' by accepting { ref?: React.RefObject } and -// updating it. However, there are no types for Controller, and I assume it is intentionally so. -// This is a partial interface for Controller that has only the properties needed for useChain to work. -export interface ReactSpringHook { - start(): void - stop(): void -} - -export function useChain(refs: ReadonlyArray>): void -// this looks like it can just be a single overload, but we don't want to allow -// timeFrame to be specifiable when timeSteps is explicitly "undefined" -export function useChain( - refs: ReadonlyArray>, - timeSteps: number[], - timeFrame?: number -): void - -export interface HooksBaseProps - extends Pick> { - /** - * Will skip rendering the component if true and write to the dom directly. - * @default true - * @deprecated - */ - native?: never - // there is an undocumented onKeyframesHalt which passes the controller instance, - // so it also cannot be typed unless Controller types are written - ref?: React.RefObject -} - -export interface UseSpringBaseProps extends HooksBaseProps { - config?: SpringBaseProps['config'] -} - -export type UseSpringProps = Merge< - DS & UseSpringBaseProps, - { - from?: InferFrom - /** - * Callback when the animation comes to a still-stand - */ - onRest?(ds: InferFrom): void - } -> - -type OverwriteKeys = { [K in keyof A]: K extends keyof B ? B[K] : A[K] }; - -// there's a third value in the tuple but it's not public API (?) -export function useSpring( - values: UseSpringProps> -): AnimatedValue>> -export function useSpring( - getProps: () => UseSpringProps> -): [AnimatedValue>>, SetUpdateFn>] - -// there's a third value in the tuple but it's not public API (?) -export function useSprings( - count: number, - items: ReadonlyArray, -): ForwardedProps[] // safe to modify (result of .map) -export function useSprings( - count: number, - getProps: (i: number) => UseSpringProps -): [AnimatedValue>[], SetUpdateCallbackFn] - -// there's a third value in the tuple but it's not public API (?) -export function useTrail( - count: number, - getProps: () => UseSpringProps -): [ForwardedProps[], SetUpdateFn] -export function useTrail( - count: number, - values: UseSpringProps -): ForwardedProps[] // safe to modify (result of .map) -export function useTrail( - count: number, - getProps: () => UseSpringProps -): [AnimatedValue>[], SetUpdateFn] -export function useTrail( - count: number, - values: UseSpringProps -): AnimatedValue>[] // safe to modify (result of .map) - -export interface UseTransitionProps - extends HooksBaseProps { - /** - * Spring config, or for individual items: fn(item => config) - * @default config.default - */ - config?: SpringConfig | ((item: TItem) => SpringConfig) - - /** - * When true enforces that an item can only occur once instead of allowing two or more items with the same key to co-exist in a stack - * @default false - */ - unique?: boolean - /** - * Trailing delay in ms - */ - trail?: number - - from?: InferFrom | ((item: TItem) => InferFrom) - /** - * Values that apply to new elements, or: item => values - * @default {} - */ - enter?: InferFrom | InferFrom[] | ((item: TItem) => InferFrom) - /** - * Values that apply to leaving elements, or: item => values - * @default {} - */ - leave?: InferFrom | InferFrom[] | ((item: TItem) => InferFrom) - /** - * Values that apply to elements that are neither entering nor leaving (you can use this to update present elements), or: item => values - */ - update?: InferFrom | InferFrom[] | ((item: TItem) => InferFrom) - /** - * Initial (first time) base values, optional (can be null) - */ - initial?: InferFrom | ((item: TItem) => InferFrom) | null - /** - * Called when objects have disappeared for good - */ - onDestroyed?: (isDestroyed: boolean) => void - /** - * Callback when the animation comes to a still-stand - */ - onRest?: (ds: DS) => void -} - -export interface UseTransitionResult { - item: TItem - key: string - state: State - props: AnimatedValue> -} - -export function useTransition( - items: ReadonlyArray | TItem | null | undefined, - keys: - | ((item: TItem) => TransitionKeyProps) - | ReadonlyArray - | TransitionKeyProps - | null, - values: Merge> -): UseTransitionResult>[] // result array is safe to modify -export function useTransition( - items: ReadonlyArray | TItem | null | undefined, - keys: - | ((item: TItem) => TransitionKeyProps) - | ReadonlyArray - | TransitionKeyProps - | null, - values: Merge> -): UseTransitionResult>>[] // result array is safe to modify diff --git a/umd/.gitignore b/umd/.gitignore new file mode 100644 index 0000000000..4457d02f73 --- /dev/null +++ b/umd/.gitignore @@ -0,0 +1 @@ +_main.js diff --git a/umd/README.md b/umd/README.md new file mode 100644 index 0000000000..3ad14f22be --- /dev/null +++ b/umd/README.md @@ -0,0 +1,9 @@ +This directory is a testbed for the `.umd.js` bundle. + +### Instructions + +1. Run `yarn` in the root directory + +2. Run `yarn build` in the `umd/` directory + +3. Open `index.html` diff --git a/umd/index.html b/umd/index.html new file mode 100644 index 0000000000..6344dce71f --- /dev/null +++ b/umd/index.html @@ -0,0 +1,26 @@ + + + + +
+ + + + + + + diff --git a/umd/main.jsx b/umd/main.jsx new file mode 100644 index 0000000000..2821577f0a --- /dev/null +++ b/umd/main.jsx @@ -0,0 +1,28 @@ +const { a, useSpring } = ReactSpring + +const App = () => { + const s = useSpring({ + from: { + width: 100, + height: 100, + backgroundColor: 'red', + rotateZ: 0, + }, + to: { + width: document.body.clientWidth, + height: document.body.clientHeight, + backgroundColor: 'blue', + rotateZ: 180, + }, + config: { + frequency: 0.8, + }, + loop: { + reverse: true, + delay: 300, + }, + }) + return +} + +ReactDOM.render(, document.getElementById('app')) diff --git a/umd/package.json b/umd/package.json new file mode 100644 index 0000000000..66dec231b7 --- /dev/null +++ b/umd/package.json @@ -0,0 +1,10 @@ +{ + "name": "umd", + "version": "0.0.0", + "description": "Example using .umd.js bundle", + "private": true, + "scripts": { + "build": "../node_modules/.bin/esbuild --bundle main.jsx --outfile=_main.js" + }, + "bic": false +} diff --git a/umd/yarn.lock b/umd/yarn.lock new file mode 100644 index 0000000000..e8c7c77145 --- /dev/null +++ b/umd/yarn.lock @@ -0,0 +1,1301 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@babel/cli@^7.8.4": + version "7.8.4" + resolved "https://registry.npmjs.org/@babel/cli/-/cli-7.8.4.tgz#505fb053721a98777b2b175323ea4f090b7d3c1c" + integrity sha512-XXLgAm6LBbaNxaGhMAznXXaxtCWfuv6PIDJ9Alsy9JYTOh+j2jJz+L/162kkfU1j/pTSxK1xGmlwI4pdIMkoag== + dependencies: + commander "^4.0.1" + convert-source-map "^1.1.0" + fs-readdir-recursive "^1.1.0" + glob "^7.0.0" + lodash "^4.17.13" + make-dir "^2.1.0" + slash "^2.0.0" + source-map "^0.5.0" + optionalDependencies: + chokidar "^2.1.8" + +"@babel/code-frame@^7.8.3": + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.3.tgz#33e25903d7481181534e12ec0a25f16b6fcf419e" + integrity sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g== + dependencies: + "@babel/highlight" "^7.8.3" + +"@babel/core@^7.9.6": + version "7.9.6" + resolved "https://registry.npmjs.org/@babel/core/-/core-7.9.6.tgz#d9aa1f580abf3b2286ef40b6904d390904c63376" + integrity sha512-nD3deLvbsApbHAHttzIssYqgb883yU/d9roe4RZymBCDaZryMJDbptVpEpeQuRh4BJ+SYI8le9YGxKvFEvl1Wg== + dependencies: + "@babel/code-frame" "^7.8.3" + "@babel/generator" "^7.9.6" + "@babel/helper-module-transforms" "^7.9.0" + "@babel/helpers" "^7.9.6" + "@babel/parser" "^7.9.6" + "@babel/template" "^7.8.6" + "@babel/traverse" "^7.9.6" + "@babel/types" "^7.9.6" + convert-source-map "^1.7.0" + debug "^4.1.0" + gensync "^1.0.0-beta.1" + json5 "^2.1.2" + lodash "^4.17.13" + resolve "^1.3.2" + semver "^5.4.1" + source-map "^0.5.0" + +"@babel/generator@^7.9.6": + version "7.9.6" + resolved "https://registry.npmjs.org/@babel/generator/-/generator-7.9.6.tgz#5408c82ac5de98cda0d77d8124e99fa1f2170a43" + integrity sha512-+htwWKJbH2bL72HRluF8zumBxzuX0ZZUFl3JLNyoUjM/Ho8wnVpPXM6aUz8cfKDqQ/h7zHqKt4xzJteUosckqQ== + dependencies: + "@babel/types" "^7.9.6" + jsesc "^2.5.1" + lodash "^4.17.13" + source-map "^0.5.0" + +"@babel/helper-annotate-as-pure@^7.8.3": + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.8.3.tgz#60bc0bc657f63a0924ff9a4b4a0b24a13cf4deee" + integrity sha512-6o+mJrZBxOoEX77Ezv9zwW7WV8DdluouRKNY/IR5u/YTMuKHgugHOzYWlYvYLpLA9nPsQCAAASpCIbjI9Mv+Uw== + dependencies: + "@babel/types" "^7.8.3" + +"@babel/helper-builder-react-jsx-experimental@^7.9.0": + version "7.9.5" + resolved "https://registry.npmjs.org/@babel/helper-builder-react-jsx-experimental/-/helper-builder-react-jsx-experimental-7.9.5.tgz#0b4b3e04e6123f03b404ca4dfd6528fe6bb92fe3" + integrity sha512-HAagjAC93tk748jcXpZ7oYRZH485RCq/+yEv9SIWezHRPv9moZArTnkUNciUNzvwHUABmiWKlcxJvMcu59UwTg== + dependencies: + "@babel/helper-annotate-as-pure" "^7.8.3" + "@babel/helper-module-imports" "^7.8.3" + "@babel/types" "^7.9.5" + +"@babel/helper-builder-react-jsx@^7.9.0": + version "7.9.0" + resolved "https://registry.npmjs.org/@babel/helper-builder-react-jsx/-/helper-builder-react-jsx-7.9.0.tgz#16bf391990b57732700a3278d4d9a81231ea8d32" + integrity sha512-weiIo4gaoGgnhff54GQ3P5wsUQmnSwpkvU0r6ZHq6TzoSzKy4JxHEgnxNytaKbov2a9z/CVNyzliuCOUPEX3Jw== + dependencies: + "@babel/helper-annotate-as-pure" "^7.8.3" + "@babel/types" "^7.9.0" + +"@babel/helper-function-name@^7.9.5": + version "7.9.5" + resolved "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.9.5.tgz#2b53820d35275120e1874a82e5aabe1376920a5c" + integrity sha512-JVcQZeXM59Cd1qanDUxv9fgJpt3NeKUaqBqUEvfmQ+BCOKq2xUgaWZW2hr0dkbyJgezYuplEoh5knmrnS68efw== + dependencies: + "@babel/helper-get-function-arity" "^7.8.3" + "@babel/template" "^7.8.3" + "@babel/types" "^7.9.5" + +"@babel/helper-get-function-arity@^7.8.3": + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.8.3.tgz#b894b947bd004381ce63ea1db9f08547e920abd5" + integrity sha512-FVDR+Gd9iLjUMY1fzE2SR0IuaJToR4RkCDARVfsBBPSP53GEqSFjD8gNyxg246VUyc/ALRxFaAK8rVG7UT7xRA== + dependencies: + "@babel/types" "^7.8.3" + +"@babel/helper-member-expression-to-functions@^7.8.3": + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.8.3.tgz#659b710498ea6c1d9907e0c73f206eee7dadc24c" + integrity sha512-fO4Egq88utkQFjbPrSHGmGLFqmrshs11d46WI+WZDESt7Wu7wN2G2Iu+NMMZJFDOVRHAMIkB5SNh30NtwCA7RA== + dependencies: + "@babel/types" "^7.8.3" + +"@babel/helper-module-imports@^7.8.3": + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.8.3.tgz#7fe39589b39c016331b6b8c3f441e8f0b1419498" + integrity sha512-R0Bx3jippsbAEtzkpZ/6FIiuzOURPcMjHp+Z6xPe6DtApDJx+w7UYyOLanZqO8+wKR9G10s/FmHXvxaMd9s6Kg== + dependencies: + "@babel/types" "^7.8.3" + +"@babel/helper-module-transforms@^7.9.0": + version "7.9.0" + resolved "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.9.0.tgz#43b34dfe15961918707d247327431388e9fe96e5" + integrity sha512-0FvKyu0gpPfIQ8EkxlrAydOWROdHpBmiCiRwLkUiBGhCUPRRbVD2/tm3sFr/c/GWFrQ/ffutGUAnx7V0FzT2wA== + dependencies: + "@babel/helper-module-imports" "^7.8.3" + "@babel/helper-replace-supers" "^7.8.6" + "@babel/helper-simple-access" "^7.8.3" + "@babel/helper-split-export-declaration" "^7.8.3" + "@babel/template" "^7.8.6" + "@babel/types" "^7.9.0" + lodash "^4.17.13" + +"@babel/helper-optimise-call-expression@^7.8.3": + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.8.3.tgz#7ed071813d09c75298ef4f208956006b6111ecb9" + integrity sha512-Kag20n86cbO2AvHca6EJsvqAd82gc6VMGule4HwebwMlwkpXuVqrNRj6CkCV2sKxgi9MyAUnZVnZ6lJ1/vKhHQ== + dependencies: + "@babel/types" "^7.8.3" + +"@babel/helper-plugin-utils@^7.8.3": + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.8.3.tgz#9ea293be19babc0f52ff8ca88b34c3611b208670" + integrity sha512-j+fq49Xds2smCUNYmEHF9kGNkhbet6yVIBp4e6oeQpH1RUs/Ir06xUKzDjDkGcaaokPiTNs2JBWHjaE4csUkZQ== + +"@babel/helper-replace-supers@^7.8.6": + version "7.9.6" + resolved "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.9.6.tgz#03149d7e6a5586ab6764996cd31d6981a17e1444" + integrity sha512-qX+chbxkbArLyCImk3bWV+jB5gTNU/rsze+JlcF6Nf8tVTigPJSI1o1oBow/9Resa1yehUO9lIipsmu9oG4RzA== + dependencies: + "@babel/helper-member-expression-to-functions" "^7.8.3" + "@babel/helper-optimise-call-expression" "^7.8.3" + "@babel/traverse" "^7.9.6" + "@babel/types" "^7.9.6" + +"@babel/helper-simple-access@^7.8.3": + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.8.3.tgz#7f8109928b4dab4654076986af575231deb639ae" + integrity sha512-VNGUDjx5cCWg4vvCTR8qQ7YJYZ+HBjxOgXEl7ounz+4Sn7+LMD3CFrCTEU6/qXKbA2nKg21CwhhBzO0RpRbdCw== + dependencies: + "@babel/template" "^7.8.3" + "@babel/types" "^7.8.3" + +"@babel/helper-split-export-declaration@^7.8.3": + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.8.3.tgz#31a9f30070f91368a7182cf05f831781065fc7a9" + integrity sha512-3x3yOeyBhW851hroze7ElzdkeRXQYQbFIb7gLK1WQYsw2GWDay5gAJNw1sWJ0VFP6z5J1whqeXH/WCdCjZv6dA== + dependencies: + "@babel/types" "^7.8.3" + +"@babel/helper-validator-identifier@^7.9.0", "@babel/helper-validator-identifier@^7.9.5": + version "7.9.5" + resolved "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.9.5.tgz#90977a8e6fbf6b431a7dc31752eee233bf052d80" + integrity sha512-/8arLKUFq882w4tWGj9JYzRpAlZgiWUJ+dtteNTDqrRBz9Iguck9Rn3ykuBDoUwh2TO4tSAJlrxDUOXWklJe4g== + +"@babel/helpers@^7.9.6": + version "7.9.6" + resolved "https://registry.npmjs.org/@babel/helpers/-/helpers-7.9.6.tgz#092c774743471d0bb6c7de3ad465ab3d3486d580" + integrity sha512-tI4bUbldloLcHWoRUMAj4g1bF313M/o6fBKhIsb3QnGVPwRm9JsNf/gqMkQ7zjqReABiffPV6RWj7hEglID5Iw== + dependencies: + "@babel/template" "^7.8.3" + "@babel/traverse" "^7.9.6" + "@babel/types" "^7.9.6" + +"@babel/highlight@^7.8.3": + version "7.9.0" + resolved "https://registry.npmjs.org/@babel/highlight/-/highlight-7.9.0.tgz#4e9b45ccb82b79607271b2979ad82c7b68163079" + integrity sha512-lJZPilxX7Op3Nv/2cvFdnlepPXDxi29wxteT57Q965oc5R9v86ztx0jfxVrTcBk8C2kcPkkDa2Z4T3ZsPPVWsQ== + dependencies: + "@babel/helper-validator-identifier" "^7.9.0" + chalk "^2.0.0" + js-tokens "^4.0.0" + +"@babel/parser@^7.8.6", "@babel/parser@^7.9.6": + version "7.9.6" + resolved "https://registry.npmjs.org/@babel/parser/-/parser-7.9.6.tgz#3b1bbb30dabe600cd72db58720998376ff653bc7" + integrity sha512-AoeIEJn8vt+d/6+PXDRPaksYhnlbMIiejioBZvvMQsOjW/JYK6k/0dKnvvP3EhK5GfMBWDPtrxRtegWdAcdq9Q== + +"@babel/plugin-syntax-jsx@^7.8.3": + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.8.3.tgz#521b06c83c40480f1e58b4fd33b92eceb1d6ea94" + integrity sha512-WxdW9xyLgBdefoo0Ynn3MRSkhe5tFVxxKNVdnZSh318WrG2e2jH+E9wd/++JsqcLJZPfz87njQJ8j2Upjm0M0A== + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + +"@babel/plugin-transform-react-display-name@^7.8.3": + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.8.3.tgz#70ded987c91609f78353dd76d2fb2a0bb991e8e5" + integrity sha512-3Jy/PCw8Fe6uBKtEgz3M82ljt+lTg+xJaM4og+eyu83qLT87ZUSckn0wy7r31jflURWLO83TW6Ylf7lyXj3m5A== + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + +"@babel/plugin-transform-react-jsx-development@^7.9.0": + version "7.9.0" + resolved "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.9.0.tgz#3c2a130727caf00c2a293f0aed24520825dbf754" + integrity sha512-tK8hWKrQncVvrhvtOiPpKrQjfNX3DtkNLSX4ObuGcpS9p0QrGetKmlySIGR07y48Zft8WVgPakqd/bk46JrMSw== + dependencies: + "@babel/helper-builder-react-jsx-experimental" "^7.9.0" + "@babel/helper-plugin-utils" "^7.8.3" + "@babel/plugin-syntax-jsx" "^7.8.3" + +"@babel/plugin-transform-react-jsx-self@^7.9.0": + version "7.9.0" + resolved "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.9.0.tgz#f4f26a325820205239bb915bad8e06fcadabb49b" + integrity sha512-K2ObbWPKT7KUTAoyjCsFilOkEgMvFG+y0FqOl6Lezd0/13kMkkjHskVsZvblRPj1PHA44PrToaZANrryppzTvQ== + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + "@babel/plugin-syntax-jsx" "^7.8.3" + +"@babel/plugin-transform-react-jsx-source@^7.9.0": + version "7.9.0" + resolved "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.9.0.tgz#89ef93025240dd5d17d3122294a093e5e0183de0" + integrity sha512-K6m3LlSnTSfRkM6FcRk8saNEeaeyG5k7AVkBU2bZK3+1zdkSED3qNdsWrUgQBeTVD2Tp3VMmerxVO2yM5iITmw== + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + "@babel/plugin-syntax-jsx" "^7.8.3" + +"@babel/plugin-transform-react-jsx@^7.9.4": + version "7.9.4" + resolved "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.9.4.tgz#86f576c8540bd06d0e95e0b61ea76d55f6cbd03f" + integrity sha512-Mjqf3pZBNLt854CK0C/kRuXAnE6H/bo7xYojP+WGtX8glDGSibcwnsWwhwoSuRg0+EBnxPC1ouVnuetUIlPSAw== + dependencies: + "@babel/helper-builder-react-jsx" "^7.9.0" + "@babel/helper-builder-react-jsx-experimental" "^7.9.0" + "@babel/helper-plugin-utils" "^7.8.3" + "@babel/plugin-syntax-jsx" "^7.8.3" + +"@babel/preset-react@^7.9.4": + version "7.9.4" + resolved "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.9.4.tgz#c6c97693ac65b6b9c0b4f25b948a8f665463014d" + integrity sha512-AxylVB3FXeOTQXNXyiuAQJSvss62FEotbX2Pzx3K/7c+MKJMdSg6Ose6QYllkdCFA8EInCJVw7M/o5QbLuA4ZQ== + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + "@babel/plugin-transform-react-display-name" "^7.8.3" + "@babel/plugin-transform-react-jsx" "^7.9.4" + "@babel/plugin-transform-react-jsx-development" "^7.9.0" + "@babel/plugin-transform-react-jsx-self" "^7.9.0" + "@babel/plugin-transform-react-jsx-source" "^7.9.0" + +"@babel/template@^7.8.3", "@babel/template@^7.8.6": + version "7.8.6" + resolved "https://registry.npmjs.org/@babel/template/-/template-7.8.6.tgz#86b22af15f828dfb086474f964dcc3e39c43ce2b" + integrity sha512-zbMsPMy/v0PWFZEhQJ66bqjhH+z0JgMoBWuikXybgG3Gkd/3t5oQ1Rw2WQhnSrsOmsKXnZOx15tkC4qON/+JPg== + dependencies: + "@babel/code-frame" "^7.8.3" + "@babel/parser" "^7.8.6" + "@babel/types" "^7.8.6" + +"@babel/traverse@^7.9.6": + version "7.9.6" + resolved "https://registry.npmjs.org/@babel/traverse/-/traverse-7.9.6.tgz#5540d7577697bf619cc57b92aa0f1c231a94f442" + integrity sha512-b3rAHSjbxy6VEAvlxM8OV/0X4XrG72zoxme6q1MOoe2vd0bEc+TwayhuC1+Dfgqh1QEG+pj7atQqvUprHIccsg== + dependencies: + "@babel/code-frame" "^7.8.3" + "@babel/generator" "^7.9.6" + "@babel/helper-function-name" "^7.9.5" + "@babel/helper-split-export-declaration" "^7.8.3" + "@babel/parser" "^7.9.6" + "@babel/types" "^7.9.6" + debug "^4.1.0" + globals "^11.1.0" + lodash "^4.17.13" + +"@babel/types@^7.8.3", "@babel/types@^7.8.6", "@babel/types@^7.9.0", "@babel/types@^7.9.5", "@babel/types@^7.9.6": + version "7.9.6" + resolved "https://registry.npmjs.org/@babel/types/-/types-7.9.6.tgz#2c5502b427251e9de1bd2dff95add646d95cc9f7" + integrity sha512-qxXzvBO//jO9ZnoasKF1uJzHd2+M6Q2ZPIVfnFps8JJvXy0ZBbwbNOmE6SGIY5XOY6d1Bo5lb9d9RJ8nv3WSeA== + dependencies: + "@babel/helper-validator-identifier" "^7.9.5" + lodash "^4.17.13" + to-fast-properties "^2.0.0" + +ansi-styles@^3.2.1: + version "3.2.1" + resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== + dependencies: + color-convert "^1.9.0" + +anymatch@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" + integrity sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw== + dependencies: + micromatch "^3.1.4" + normalize-path "^2.1.1" + +arr-diff@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/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.npmjs.org/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.npmjs.org/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" + integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ= + +array-unique@^0.3.2: + version "0.3.2" + resolved "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" + integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg= + +assign-symbols@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" + integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c= + +async-each@^1.0.1: + version "1.0.3" + resolved "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz#b727dbf87d7651602f06f4d4ac387f47d91b0cbf" + integrity sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ== + +atob@^2.1.2: + version "2.1.2" + resolved "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" + integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== + +balanced-match@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" + integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= + +base@^0.11.1: + version "0.11.2" + resolved "https://registry.npmjs.org/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" + +binary-extensions@^1.0.0: + version "1.13.1" + resolved "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz#598afe54755b2868a5330d2aff9d4ebb53209b65" + integrity sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw== + +bindings@^1.5.0: + version "1.5.0" + resolved "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df" + integrity sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ== + dependencies: + file-uri-to-path "1.0.0" + +brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.npmjs.org/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.npmjs.org/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" + +cache-base@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/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" + +chalk@^2.0.0: + version "2.4.2" + resolved "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" + integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + +chokidar@^2.1.8: + version "2.1.8" + resolved "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz#804b3a7b6a99358c3c5c61e71d8728f041cff917" + integrity sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg== + 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" + +class-utils@^0.3.5: + version "0.3.6" + resolved "https://registry.npmjs.org/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" + +collection-visit@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/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.npmjs.org/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.npmjs.org/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= + +commander@^4.0.1: + version "4.1.1" + resolved "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz#9fd602bd936294e9e9ef46a3f4d6964044b18068" + integrity sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA== + +component-emitter@^1.2.1: + version "1.3.0" + resolved "https://registry.npmjs.org/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.npmjs.org/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= + +convert-source-map@^1.1.0, convert-source-map@^1.7.0: + version "1.7.0" + resolved "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz#17a2cb882d7f77d3490585e2ce6c524424a3a442" + integrity sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA== + dependencies: + safe-buffer "~5.1.1" + +copy-descriptor@^0.1.0: + version "0.1.1" + resolved "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" + integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= + +core-util-is@~1.0.0: + version "1.0.2" + resolved "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" + integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= + +debug@^2.2.0, debug@^2.3.3: + version "2.6.9" + resolved "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== + dependencies: + ms "2.0.0" + +debug@^4.1.0: + version "4.1.1" + resolved "https://registry.npmjs.org/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.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" + integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU= + +define-property@^0.2.5: + version "0.2.5" + resolved "https://registry.npmjs.org/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.npmjs.org/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.npmjs.org/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d" + integrity sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ== + dependencies: + is-descriptor "^1.0.2" + isobject "^3.0.1" + +escape-string-regexp@^1.0.5: + version "1.0.5" + resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= + +expand-brackets@^2.1.4: + version "2.1.4" + resolved "https://registry.npmjs.org/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.npmjs.org/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.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8" + integrity sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg= + dependencies: + assign-symbols "^1.0.0" + is-extendable "^1.0.1" + +extglob@^2.0.4: + version "2.0.4" + resolved "https://registry.npmjs.org/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" + +file-uri-to-path@1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd" + integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw== + +fill-range@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/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" + +for-in@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" + integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA= + +fragment-cache@^0.2.1: + version "0.2.1" + resolved "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" + integrity sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk= + dependencies: + map-cache "^0.2.2" + +fs-readdir-recursive@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz#e32fc030a2ccee44a6b5371308da54be0b397d27" + integrity sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA== + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= + +fsevents@^1.2.7: + version "1.2.13" + resolved "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz#f325cb0455592428bcf11b383370ef70e3bfcc38" + integrity sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw== + dependencies: + bindings "^1.5.0" + nan "^2.12.1" + +gensync@^1.0.0-beta.1: + version "1.0.0-beta.1" + resolved "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.1.tgz#58f4361ff987e5ff6e1e7a210827aa371eaac269" + integrity sha512-r8EC6NO1sngH/zdD9fiRDLdcgnbayXah+mLgManTaIZJqEC1MZstmnox8KpnI2/fxQwrp5OpCOYWLp4rBl4Jcg== + +get-value@^2.0.3, get-value@^2.0.6: + version "2.0.6" + resolved "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" + integrity sha1-3BXKHGcjh8p2vTesCjlbogQqLCg= + +glob-parent@^3.1.0: + version "3.1.0" + resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae" + integrity sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4= + dependencies: + is-glob "^3.1.0" + path-dirname "^1.0.0" + +glob@^7.0.0: + version "7.1.6" + resolved "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" + integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== + 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: + version "11.12.0" + resolved "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" + integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== + +graceful-fs@^4.1.11: + version "4.2.4" + resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb" + integrity sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw== + +has-flag@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= + +has-value@^0.3.1: + version "0.3.1" + resolved "https://registry.npmjs.org/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.npmjs.org/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.npmjs.org/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.npmjs.org/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" + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2, inherits@^2.0.3, inherits@~2.0.3: + version "2.0.4" + resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +is-accessor-descriptor@^0.1.6: + version "0.1.6" + resolved "https://registry.npmjs.org/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.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656" + integrity sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ== + dependencies: + kind-of "^6.0.0" + +is-binary-path@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898" + integrity sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg= + dependencies: + binary-extensions "^1.0.0" + +is-buffer@^1.1.5: + version "1.1.6" + resolved "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" + integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== + +is-data-descriptor@^0.1.4: + version "0.1.4" + resolved "https://registry.npmjs.org/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.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7" + integrity sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ== + dependencies: + kind-of "^6.0.0" + +is-descriptor@^0.1.0: + version "0.1.6" + resolved "https://registry.npmjs.org/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.npmjs.org/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-extendable@^0.1.0, is-extendable@^0.1.1: + version "0.1.1" + resolved "https://registry.npmjs.org/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.npmjs.org/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.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= + +is-glob@^3.1.0: + version "3.1.0" + resolved "https://registry.npmjs.org/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.npmjs.org/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" + integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== + dependencies: + is-extglob "^2.1.1" + +is-number@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" + integrity sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU= + dependencies: + kind-of "^3.0.2" + +is-plain-object@^2.0.3, is-plain-object@^2.0.4: + version "2.0.4" + resolved "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" + integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== + dependencies: + isobject "^3.0.1" + +is-windows@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" + integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== + +isarray@1.0.0, isarray@~1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= + +isobject@^2.0.0: + version "2.1.0" + resolved "https://registry.npmjs.org/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.npmjs.org/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" + integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8= + +js-tokens@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== + +jsesc@^2.5.1: + version "2.5.2" + resolved "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" + integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== + +json5@^2.1.2: + version "2.1.3" + resolved "https://registry.npmjs.org/json5/-/json5-2.1.3.tgz#c9b0f7fa9233bfe5807fe66fcf3a5617ed597d43" + integrity sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA== + dependencies: + minimist "^1.2.5" + +kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: + version "3.2.2" + resolved "https://registry.npmjs.org/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.npmjs.org/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.npmjs.org/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.3" + resolved "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" + integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== + +lodash@^4.17.13: + version "4.17.15" + resolved "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548" + integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A== + +make-dir@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5" + integrity sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA== + dependencies: + pify "^4.0.1" + semver "^5.6.0" + +map-cache@^0.2.2: + version "0.2.2" + resolved "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" + integrity sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8= + +map-visit@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" + integrity sha1-7Nyo8TFE5mDxtb1B8S80edmN+48= + dependencies: + object-visit "^1.0.0" + +micromatch@^3.1.10, micromatch@^3.1.4: + version "3.1.10" + resolved "https://registry.npmjs.org/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" + +minimatch@^3.0.4: + version "3.0.4" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" + integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== + dependencies: + brace-expansion "^1.1.7" + +minimist@^1.2.5: + version "1.2.5" + resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" + integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== + +mixin-deep@^1.2.0: + version "1.3.2" + resolved "https://registry.npmjs.org/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" + +ms@2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= + +ms@^2.1.1: + version "2.1.2" + resolved "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + +nan@^2.12.1: + version "2.14.1" + resolved "https://registry.npmjs.org/nan/-/nan-2.14.1.tgz#d7be34dfa3105b91494c3147089315eff8874b01" + integrity sha512-isWHgVjnFjh2x2yuJ/tj3JbwoHu3UC2dX5G/88Cm24yB6YopVgxvBObDY7n5xW6ExmFhJpSEQqFPvq9zaXc8Jw== + +nanomatch@^1.2.9: + version "1.2.13" + resolved "https://registry.npmjs.org/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" + +normalize-path@^2.1.1: + version "2.1.1" + resolved "https://registry.npmjs.org/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.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== + +object-copy@^0.1.0: + version "0.1.0" + resolved "https://registry.npmjs.org/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-visit@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" + integrity sha1-95xEk68MU3e1n+OdOV5BBC3QRbs= + dependencies: + isobject "^3.0.0" + +object.pick@^1.3.0: + version "1.3.0" + resolved "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" + integrity sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c= + dependencies: + isobject "^3.0.1" + +once@^1.3.0: + version "1.4.0" + resolved "https://registry.npmjs.org/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= + dependencies: + wrappy "1" + +pascalcase@^0.1.1: + version "0.1.1" + resolved "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" + integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ= + +path-dirname@^1.0.0: + version "1.0.2" + resolved "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0" + integrity sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA= + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= + +path-parse@^1.0.6: + version "1.0.6" + resolved "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" + integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw== + +pify@^4.0.1: + version "4.0.1" + resolved "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" + integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== + +posix-character-classes@^0.1.0: + version "0.1.1" + resolved "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" + integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs= + +process-nextick-args@~2.0.0: + version "2.0.1" + resolved "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" + integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== + +readable-stream@^2.0.2: + version "2.3.7" + resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" + integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== + 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" + +readdirp@^2.2.1: + version "2.2.1" + resolved "https://registry.npmjs.org/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" + +regex-not@^1.0.0, regex-not@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" + integrity sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A== + dependencies: + extend-shallow "^3.0.2" + safe-regex "^1.1.0" + +remove-trailing-separator@^1.0.1: + version "1.1.0" + resolved "https://registry.npmjs.org/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.npmjs.org/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.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" + integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc= + +resolve-url@^0.2.1: + version "0.2.1" + resolved "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" + integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= + +resolve@^1.3.2: + version "1.17.0" + resolved "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz#b25941b54968231cc2d1bb76a79cb7f2c0bf8444" + integrity sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w== + dependencies: + path-parse "^1.0.6" + +ret@~0.1.10: + version "0.1.15" + resolved "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" + integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== + +safe-buffer@~5.1.0, safe-buffer@~5.1.1: + version "5.1.2" + resolved "https://registry.npmjs.org/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.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" + integrity sha1-QKNmnzsHfR6UPURinhV91IAjvy4= + dependencies: + ret "~0.1.10" + +semver@^5.4.1, semver@^5.6.0: + version "5.7.1" + resolved "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" + integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== + +set-value@^2.0.0, set-value@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/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" + +slash@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz#de552851a1759df3a8f206535442f5ec4ddeab44" + integrity sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A== + +snapdragon-node@^2.0.1: + version "2.1.1" + resolved "https://registry.npmjs.org/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.npmjs.org/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.npmjs.org/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.3" + resolved "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz#190866bece7553e1f8f267a2ee82c606b5509a1a" + integrity sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw== + dependencies: + atob "^2.1.2" + 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.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3" + integrity sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM= + +source-map@^0.5.0, source-map@^0.5.6: + version "0.5.7" + resolved "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" + integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= + +split-string@^3.0.1, split-string@^3.0.2: + version "3.1.0" + resolved "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" + integrity sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw== + dependencies: + extend-shallow "^3.0.0" + +static-extend@^0.1.1: + version "0.1.2" + resolved "https://registry.npmjs.org/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_decoder@~1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" + integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== + dependencies: + safe-buffer "~5.1.0" + +supports-color@^5.3.0: + version "5.5.0" + resolved "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" + integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== + dependencies: + has-flag "^3.0.0" + +to-fast-properties@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/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.npmjs.org/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.npmjs.org/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.npmjs.org/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" + +union-value@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/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" + +unset-value@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/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.2.0" + resolved "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz#8f66dbcd55a883acdae4408af8b035a5044c1894" + integrity sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg== + +urix@^0.1.0: + version "0.1.0" + resolved "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" + integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI= + +use@^3.1.0: + version "3.1.1" + resolved "https://registry.npmjs.org/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" + integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ== + +util-deprecate@~1.0.1: + version "1.0.2" + resolved "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= + +wrappy@1: + version "1.0.2" + resolved "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= diff --git a/yarn.lock b/yarn.lock index 170c4491ee..76a935b16b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,1061 +2,2473 @@ # 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.2.2" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.2.2.tgz#07adba6dde27bb5ad8d8672f15fde3e08184a687" - integrity sha512-59vB0RWt09cAct5EIe58+NzGP4TFSD3Bz//2/ELy3ZeTeKF6VTD1AXlH8BGGbCX0PuobZBsIzO7IAI9PH67eKw== - 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" +"@alloc/types@^1.2.1": + version "1.3.0" + resolved "https://registry.npmjs.org/@alloc/types/-/types-1.3.0.tgz#904245b8d3260a4b7d8a801c12501968f64fac08" + integrity sha512-mH7LiFiq9g6rX2tvt1LtwsclfG5hnsmtIfkZiauAGrm1AwXhoRS0sF2WrN9JGN7eV5vFXqNaB0eXZ3IvMsVi9g== + +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4": + version "7.12.11" + resolved "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz#f4ad435aa263db935b8f10f2c552d23fb716a63f" + integrity sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw== + dependencies: + "@babel/highlight" "^7.10.4" + +"@babel/compat-data@^7.12.5", "@babel/compat-data@^7.12.7": + version "7.12.7" + resolved "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.12.7.tgz#9329b4782a7d6bbd7eef57e11addf91ee3ef1e41" + integrity sha512-YaxPMGs/XIWtYqrdEOZOCPsVWfEoriXopnsz3/i7apYPXQ3698UFhS6dVT1KN5qOsWmVgw/FOrmQgpRaZayGsw== + +"@babel/core@^7.0.0", "@babel/core@^7.1.0", "@babel/core@^7.11.6", "@babel/core@^7.7.5": + version "7.12.10" + resolved "https://registry.npmjs.org/@babel/core/-/core-7.12.10.tgz#b79a2e1b9f70ed3d84bbfb6d8c4ef825f606bccd" + integrity sha512-eTAlQKq65zHfkHZV0sIVODCPGVgoo1HdBlbSLi9CqOzuZanMv2ihzY+4paiKr1mH+XmYESMAmJ/dpZ68eN6d8w== + dependencies: + "@babel/code-frame" "^7.10.4" + "@babel/generator" "^7.12.10" + "@babel/helper-module-transforms" "^7.12.1" + "@babel/helpers" "^7.12.5" + "@babel/parser" "^7.12.10" + "@babel/template" "^7.12.7" + "@babel/traverse" "^7.12.10" + "@babel/types" "^7.12.10" + convert-source-map "^1.7.0" debug "^4.1.0" - json5 "^2.1.0" - lodash "^4.17.10" - resolve "^1.3.2" + gensync "^1.0.0-beta.1" + json5 "^2.1.2" + lodash "^4.17.19" semver "^5.4.1" source-map "^0.5.0" -"@babel/core@^7.0.0", "@babel/core@^7.1.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.4.0.tgz#248fd6874b7d755010bfe61f557461d4f446d9e9" - integrity sha512-Dzl7U0/T69DFOTwqz/FJdnOSWS57NpjNfCwMKHABr589Lg8uX1RrlBIJ7L5Dubt/xkLsx0xH5EBFzlBVes1ayA== +"@babel/generator@^7.0.0", "@babel/generator@^7.12.10": + version "7.12.11" + resolved "https://registry.npmjs.org/@babel/generator/-/generator-7.12.11.tgz#98a7df7b8c358c9a37ab07a24056853016aba3af" + integrity sha512-Ggg6WPOJtSi8yYQvLVjG8F/TlpWDlKx0OpS4Kt+xMQPs5OaGYWy+v1A+1TvxI6sAMGZpKWWoAQ1DaeQbImlItA== dependencies: - "@babel/code-frame" "^7.0.0" - "@babel/generator" "^7.4.0" - "@babel/helpers" "^7.4.0" - "@babel/parser" "^7.4.0" - "@babel/template" "^7.4.0" - "@babel/traverse" "^7.4.0" - "@babel/types" "^7.4.0" - convert-source-map "^1.1.0" - debug "^4.1.0" - json5 "^2.1.0" - lodash "^4.17.11" - resolve "^1.3.2" - semver "^5.4.1" + "@babel/types" "^7.12.11" + jsesc "^2.5.1" source-map "^0.5.0" -"@babel/generator@^7.0.0", "@babel/generator@^7.2.2", "@babel/generator@^7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.4.0.tgz#c230e79589ae7a729fd4631b9ded4dc220418196" - integrity sha512-/v5I+a1jhGSKLgZDcmAUZ4K/VePi43eRkUs3yePW1HB1iANOD5tqJXwGSG4BZhSksP8J9ejSlwGeTiiOFZOrXQ== +"@babel/helper-annotate-as-pure@^7.10.4", "@babel/helper-annotate-as-pure@^7.12.10": + version "7.12.10" + resolved "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.12.10.tgz#54ab9b000e60a93644ce17b3f37d313aaf1d115d" + integrity sha512-XplmVbC1n+KY6jL8/fgLVXXUauDIB+lD5+GsQEh6F6GBF1dq1qy4DP4yXWzDKcoqXB3X58t61e85Fitoww4JVQ== dependencies: - "@babel/types" "^7.4.0" - jsesc "^2.5.1" - lodash "^4.17.11" - source-map "^0.5.0" - trim-right "^1.0.1" + "@babel/types" "^7.12.10" -"@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== +"@babel/helper-builder-binary-assignment-operator-visitor@^7.10.4": + version "7.10.4" + resolved "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.10.4.tgz#bb0b75f31bf98cbf9ff143c1ae578b87274ae1a3" + integrity sha512-L0zGlFrGWZK4PbT8AszSfLTM5sDU1+Az/En9VrdT8/LmEiJt4zXt+Jve9DCAnQcbqDhCI+29y/L93mrDzddCcg== dependencies: - "@babel/types" "^7.0.0" + "@babel/helper-explode-assignable-expression" "^7.10.4" + "@babel/types" "^7.10.4" -"@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== +"@babel/helper-builder-react-jsx-experimental@^7.12.11": + version "7.12.11" + resolved "https://registry.npmjs.org/@babel/helper-builder-react-jsx-experimental/-/helper-builder-react-jsx-experimental-7.12.11.tgz#a39616d7e4cf8f9da1f82b5fc3ee1f7406beeb11" + integrity sha512-4oGVOekPI8dh9JphkPXC68iIuP6qp/RPbaPmorRmEFbRAHZjSqxPjqHudn18GVDPgCuFM/KdFXc63C17Ygfa9w== dependencies: - "@babel/helper-explode-assignable-expression" "^7.1.0" - "@babel/types" "^7.0.0" + "@babel/helper-annotate-as-pure" "^7.12.10" + "@babel/helper-module-imports" "^7.12.5" + "@babel/types" "^7.12.11" -"@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== +"@babel/helper-builder-react-jsx@^7.10.4": + version "7.10.4" + resolved "https://registry.npmjs.org/@babel/helper-builder-react-jsx/-/helper-builder-react-jsx-7.10.4.tgz#8095cddbff858e6fa9c326daee54a2f2732c1d5d" + integrity sha512-5nPcIZ7+KKDxT1427oBivl9V9YTal7qk0diccnh7RrcgrT/pGFOjgGw1dgryyx1GvHEpXVfoDF6Ak3rTiWh8Rg== dependencies: - "@babel/types" "^7.3.0" - esutils "^2.0.0" + "@babel/helper-annotate-as-pure" "^7.10.4" + "@babel/types" "^7.10.4" -"@babel/helper-call-delegate@^7.1.0", "@babel/helper-call-delegate@^7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@babel/helper-call-delegate/-/helper-call-delegate-7.4.0.tgz#f308eabe0d44f451217853aedf4dea5f6fe3294f" - integrity sha512-SdqDfbVdNQCBp3WhK2mNdDvHd3BD6qbmIc43CAyjnsfCmgHMeqgDcM3BzY2lchi7HBJGJ2CVdynLWbezaE4mmQ== +"@babel/helper-compilation-targets@^7.12.5": + version "7.12.5" + resolved "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.12.5.tgz#cb470c76198db6a24e9dbc8987275631e5d29831" + integrity sha512-+qH6NrscMolUlzOYngSBMIOQpKUGPPsc61Bu5W10mg84LxZ7cmvnBHzARKbDoFxVvqqAbj6Tg6N7bSrWSPXMyw== dependencies: - "@babel/helper-hoist-variables" "^7.4.0" - "@babel/traverse" "^7.4.0" - "@babel/types" "^7.4.0" + "@babel/compat-data" "^7.12.5" + "@babel/helper-validator-option" "^7.12.1" + browserslist "^4.14.5" + semver "^5.5.0" -"@babel/helper-create-class-features-plugin@^7.3.0", "@babel/helper-create-class-features-plugin@^7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.4.0.tgz#30fd090e059d021995c1762a5b76798fa0b51d82" - integrity sha512-2K8NohdOT7P6Vyp23QH4w2IleP8yG3UJsbRKwA4YP6H8fErcLkFuuEEqbF2/BYBKSNci/FWJiqm6R3VhM/QHgw== +"@babel/helper-create-class-features-plugin@^7.12.1": + version "7.12.1" + resolved "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.12.1.tgz#3c45998f431edd4a9214c5f1d3ad1448a6137f6e" + integrity sha512-hkL++rWeta/OVOBTRJc9a5Azh5mt5WgZUGAKMD8JM141YsE08K//bp1unBBieO6rUKkIPyUE0USQ30jAy3Sk1w== + dependencies: + "@babel/helper-function-name" "^7.10.4" + "@babel/helper-member-expression-to-functions" "^7.12.1" + "@babel/helper-optimise-call-expression" "^7.10.4" + "@babel/helper-replace-supers" "^7.12.1" + "@babel/helper-split-export-declaration" "^7.10.4" + +"@babel/helper-create-regexp-features-plugin@^7.12.1": + version "7.12.7" + resolved "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.12.7.tgz#2084172e95443fa0a09214ba1bb328f9aea1278f" + integrity sha512-idnutvQPdpbduutvi3JVfEgcVIHooQnhvhx0Nk9isOINOIGYkZea1Pk2JlJRiUnMefrlvr0vkByATBY/mB4vjQ== + dependencies: + "@babel/helper-annotate-as-pure" "^7.10.4" + regexpu-core "^4.7.1" + +"@babel/helper-define-map@^7.10.4": + version "7.10.5" + resolved "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.10.5.tgz#b53c10db78a640800152692b13393147acb9bb30" + integrity sha512-fMw4kgFB720aQFXSVaXr79pjjcW5puTCM16+rECJ/plGS+zByelE8l9nCpV1GibxTnFVmUuYG9U8wYfQHdzOEQ== + dependencies: + "@babel/helper-function-name" "^7.10.4" + "@babel/types" "^7.10.5" + lodash "^4.17.19" + +"@babel/helper-explode-assignable-expression@^7.10.4": + version "7.12.1" + resolved "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.12.1.tgz#8006a466695c4ad86a2a5f2fb15b5f2c31ad5633" + integrity sha512-dmUwH8XmlrUpVqgtZ737tK88v07l840z9j3OEhCLwKTkjlvKpfqXVIZ0wpK3aeOxspwGrf/5AP5qLx4rO3w5rA== + dependencies: + "@babel/types" "^7.12.1" + +"@babel/helper-function-name@^7.10.4": + version "7.12.11" + resolved "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.12.11.tgz#1fd7738aee5dcf53c3ecff24f1da9c511ec47b42" + integrity sha512-AtQKjtYNolKNi6nNNVLQ27CP6D9oFR6bq/HPYSizlzbp7uC1M59XJe8L+0uXjbIaZaUJF99ruHqVGiKXU/7ybA== + dependencies: + "@babel/helper-get-function-arity" "^7.12.10" + "@babel/template" "^7.12.7" + "@babel/types" "^7.12.11" + +"@babel/helper-get-function-arity@^7.12.10": + version "7.12.10" + resolved "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.10.tgz#b158817a3165b5faa2047825dfa61970ddcc16cf" + integrity sha512-mm0n5BPjR06wh9mPQaDdXWDoll/j5UpCAPl1x8fS71GHm7HA6Ua2V4ylG1Ju8lvcTOietbPNNPaSilKj+pj+Ag== + dependencies: + "@babel/types" "^7.12.10" + +"@babel/helper-hoist-variables@^7.10.4": + version "7.10.4" + resolved "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.10.4.tgz#d49b001d1d5a68ca5e6604dda01a6297f7c9381e" + integrity sha512-wljroF5PgCk2juF69kanHVs6vrLwIPNp6DLD+Lrl3hoQ3PpPPikaDRNFA+0t81NOoMt2DL6WW/mdU8k4k6ZzuA== + dependencies: + "@babel/types" "^7.10.4" + +"@babel/helper-member-expression-to-functions@^7.12.1", "@babel/helper-member-expression-to-functions@^7.12.7": + version "7.12.7" + resolved "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.12.7.tgz#aa77bd0396ec8114e5e30787efa78599d874a855" + integrity sha512-DCsuPyeWxeHgh1Dus7APn7iza42i/qXqiFPWyBDdOFtvS581JQePsc1F/nD+fHrcswhLlRc2UpYS1NwERxZhHw== + dependencies: + "@babel/types" "^7.12.7" + +"@babel/helper-module-imports@^7.0.0", "@babel/helper-module-imports@^7.10.4", "@babel/helper-module-imports@^7.12.1", "@babel/helper-module-imports@^7.12.5": + version "7.12.5" + resolved "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.12.5.tgz#1bfc0229f794988f76ed0a4d4e90860850b54dfb" + integrity sha512-SR713Ogqg6++uexFRORf/+nPXMmWIn80TALu0uaFb+iQIUoR7bOC7zBWyzBs5b3tBBJXuyD0cRu1F15GyzjOWA== + dependencies: + "@babel/types" "^7.12.5" + +"@babel/helper-module-transforms@^7.12.1": + version "7.12.1" + resolved "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.12.1.tgz#7954fec71f5b32c48e4b303b437c34453fd7247c" + integrity sha512-QQzehgFAZ2bbISiCpmVGfiGux8YVFXQ0abBic2Envhej22DVXV9nCFaS5hIQbkyo1AdGb+gNME2TSh3hYJVV/w== + dependencies: + "@babel/helper-module-imports" "^7.12.1" + "@babel/helper-replace-supers" "^7.12.1" + "@babel/helper-simple-access" "^7.12.1" + "@babel/helper-split-export-declaration" "^7.11.0" + "@babel/helper-validator-identifier" "^7.10.4" + "@babel/template" "^7.10.4" + "@babel/traverse" "^7.12.1" + "@babel/types" "^7.12.1" + lodash "^4.17.19" + +"@babel/helper-optimise-call-expression@^7.10.4", "@babel/helper-optimise-call-expression@^7.12.10": + version "7.12.10" + resolved "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.10.tgz#94ca4e306ee11a7dd6e9f42823e2ac6b49881e2d" + integrity sha512-4tpbU0SrSTjjt65UMWSrUOPZTsgvPgGG4S8QSTNHacKzpS51IVWGDj0yCwyeZND/i+LSN2g/O63jEXEWm49sYQ== + dependencies: + "@babel/types" "^7.12.10" + +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": + version "7.10.4" + resolved "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz#2f75a831269d4f677de49986dff59927533cf375" + integrity sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg== + +"@babel/helper-remap-async-to-generator@^7.12.1": + version "7.12.1" + resolved "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.12.1.tgz#8c4dbbf916314f6047dc05e6a2217074238347fd" + integrity sha512-9d0KQCRM8clMPcDwo8SevNs+/9a8yWVVmaE80FGJcEP8N1qToREmWEGnBn8BUlJhYRFz6fqxeRL1sl5Ogsed7A== + dependencies: + "@babel/helper-annotate-as-pure" "^7.10.4" + "@babel/helper-wrap-function" "^7.10.4" + "@babel/types" "^7.12.1" + +"@babel/helper-replace-supers@^7.12.1": + version "7.12.11" + resolved "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.12.11.tgz#ea511658fc66c7908f923106dd88e08d1997d60d" + integrity sha512-q+w1cqmhL7R0FNzth/PLLp2N+scXEK/L2AHbXUyydxp828F4FEa5WcVoqui9vFRiHDQErj9Zof8azP32uGVTRA== + dependencies: + "@babel/helper-member-expression-to-functions" "^7.12.7" + "@babel/helper-optimise-call-expression" "^7.12.10" + "@babel/traverse" "^7.12.10" + "@babel/types" "^7.12.11" + +"@babel/helper-simple-access@^7.12.1": + version "7.12.1" + resolved "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.12.1.tgz#32427e5aa61547d38eb1e6eaf5fd1426fdad9136" + integrity sha512-OxBp7pMrjVewSSC8fXDFrHrBcJATOOFssZwv16F3/6Xtc138GHybBfPbm9kfiqQHKhYQrlamWILwlDCeyMFEaA== + dependencies: + "@babel/types" "^7.12.1" + +"@babel/helper-skip-transparent-expression-wrappers@^7.12.1": + version "7.12.1" + resolved "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.12.1.tgz#462dc63a7e435ade8468385c63d2b84cce4b3cbf" + integrity sha512-Mf5AUuhG1/OCChOJ/HcADmvcHM42WJockombn8ATJG3OnyiSxBK/Mm5x78BQWvmtXZKHgbjdGL2kin/HOLlZGA== + dependencies: + "@babel/types" "^7.12.1" + +"@babel/helper-split-export-declaration@^7.10.4", "@babel/helper-split-export-declaration@^7.11.0": + version "7.12.11" + resolved "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.11.tgz#1b4cc424458643c47d37022223da33d76ea4603a" + integrity sha512-LsIVN8j48gHgwzfocYUSkO/hjYAOJqlpJEc7tGXcIm4cubjVUf8LGW6eWRyxEu7gA25q02p0rQUWoCI33HNS5g== + dependencies: + "@babel/types" "^7.12.11" + +"@babel/helper-validator-identifier@^7.10.4", "@babel/helper-validator-identifier@^7.12.11": + version "7.12.11" + resolved "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz#c9a1f021917dcb5ccf0d4e453e399022981fc9ed" + integrity sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw== + +"@babel/helper-validator-option@^7.12.1", "@babel/helper-validator-option@^7.12.11": + version "7.12.11" + resolved "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.12.11.tgz#d66cb8b7a3e7fe4c6962b32020a131ecf0847f4f" + integrity sha512-TBFCyj939mFSdeX7U7DDj32WtzYY7fDcalgq8v3fBZMNOJQNn7nOYzMaUCiPxPYfCup69mtIpqlKgMZLvQ8Xhw== + +"@babel/helper-wrap-function@^7.10.4": + version "7.12.3" + resolved "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.12.3.tgz#3332339fc4d1fbbf1c27d7958c27d34708e990d9" + integrity sha512-Cvb8IuJDln3rs6tzjW3Y8UeelAOdnpB8xtQ4sme2MSZ9wOxrbThporC0y/EtE16VAtoyEfLM404Xr1e0OOp+ow== + dependencies: + "@babel/helper-function-name" "^7.10.4" + "@babel/template" "^7.10.4" + "@babel/traverse" "^7.10.4" + "@babel/types" "^7.10.4" + +"@babel/helpers@^7.12.5": + version "7.12.5" + resolved "https://registry.npmjs.org/@babel/helpers/-/helpers-7.12.5.tgz#1a1ba4a768d9b58310eda516c449913fe647116e" + integrity sha512-lgKGMQlKqA8meJqKsW6rUnc4MdUk35Ln0ATDqdM1a/UpARODdI4j5Y5lVfUScnSNkJcdCRAaWkspykNoFg9sJA== + dependencies: + "@babel/template" "^7.10.4" + "@babel/traverse" "^7.12.5" + "@babel/types" "^7.12.5" + +"@babel/highlight@^7.10.4": + version "7.10.4" + resolved "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz#7d1bdfd65753538fabe6c38596cdb76d9ac60143" + integrity sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA== + dependencies: + "@babel/helper-validator-identifier" "^7.10.4" + chalk "^2.0.0" + js-tokens "^4.0.0" + +"@babel/parser@^7.0.0", "@babel/parser@^7.1.0", "@babel/parser@^7.12.10", "@babel/parser@^7.12.7": + version "7.12.11" + resolved "https://registry.npmjs.org/@babel/parser/-/parser-7.12.11.tgz#9ce3595bcd74bc5c466905e86c535b8b25011e79" + integrity sha512-N3UxG+uuF4CMYoNj8AhnbAcJF0PiuJ9KHuy1lQmkYsxTer/MAH9UBNHsBoAX/4s6NvlDD047No8mYVGGzLL4hg== + +"@babel/plugin-external-helpers@^7.0.0": + version "7.12.1" + resolved "https://registry.npmjs.org/@babel/plugin-external-helpers/-/plugin-external-helpers-7.12.1.tgz#df474775860b3b8bdfeaedd45596cd2c7f36a2be" + integrity sha512-5VBqan0daXhDSRjrq2miABuELRwWJWFdM42Jvs/CDuhp+Es+fW+ISA5l+co8d+9oN3WLz/N3VvzyeseL3AvjxA== 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.0" - "@babel/helper-split-export-declaration" "^7.4.0" + "@babel/helper-plugin-utils" "^7.10.4" -"@babel/helper-define-map@^7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@babel/helper-define-map/-/helper-define-map-7.4.0.tgz#cbfd8c1b2f12708e262c26f600cd16ed6a3bc6c9" - integrity sha512-wAhQ9HdnLIywERVcSvX40CEJwKdAa1ID4neI9NXQPDOHwwA+57DqwLiPEVy2AIyWzAk0CQ8qx4awO0VUURwLtA== +"@babel/plugin-proposal-async-generator-functions@^7.12.1": + version "7.12.1" + resolved "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.12.1.tgz#dc6c1170e27d8aca99ff65f4925bd06b1c90550e" + integrity sha512-d+/o30tJxFxrA1lhzJqiUcEJdI6jKlNregCv5bASeGf2Q4MXmnwH7viDo7nhx1/ohf09oaH8j1GVYG/e3Yqk6A== dependencies: - "@babel/helper-function-name" "^7.1.0" - "@babel/types" "^7.4.0" - lodash "^4.17.11" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-remap-async-to-generator" "^7.12.1" + "@babel/plugin-syntax-async-generators" "^7.8.0" -"@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== +"@babel/plugin-proposal-class-properties@^7.0.0", "@babel/plugin-proposal-class-properties@^7.12.1": + version "7.12.1" + resolved "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.12.1.tgz#a082ff541f2a29a4821065b8add9346c0c16e5de" + integrity sha512-cKp3dlQsFsEs5CWKnN7BnSHOd0EOW8EKpEjkoz1pO2E5KzIDNV9Ros1b0CnmbVgAGXJubOYVBOGCT1OmJwOI7w== dependencies: - "@babel/traverse" "^7.1.0" - "@babel/types" "^7.0.0" + "@babel/helper-create-class-features-plugin" "^7.12.1" + "@babel/helper-plugin-utils" "^7.10.4" -"@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== +"@babel/plugin-proposal-dynamic-import@^7.12.1": + version "7.12.1" + resolved "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.12.1.tgz#43eb5c2a3487ecd98c5c8ea8b5fdb69a2749b2dc" + integrity sha512-a4rhUSZFuq5W8/OO8H7BL5zspjnc1FLd9hlOxIK/f7qG4a0qsqk8uvF/ywgBA8/OmjsapjpvaEOYItfGG1qIvQ== dependencies: - "@babel/helper-get-function-arity" "^7.0.0" - "@babel/template" "^7.1.0" - "@babel/types" "^7.0.0" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-dynamic-import" "^7.8.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== +"@babel/plugin-proposal-export-default-from@^7.0.0": + version "7.12.1" + resolved "https://registry.npmjs.org/@babel/plugin-proposal-export-default-from/-/plugin-proposal-export-default-from-7.12.1.tgz#c6e62d668a8abcfe0d28b82f560395fecb611c5a" + integrity sha512-z5Q4Ke7j0AexQRfgUvnD+BdCSgpTEKnqQ3kskk2jWtOBulxICzd1X9BGt7kmWftxZ2W3++OZdt5gtmC8KLxdRQ== dependencies: - "@babel/types" "^7.0.0" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-export-default-from" "^7.12.1" -"@babel/helper-hoist-variables@^7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.4.0.tgz#25b621399ae229869329730a62015bbeb0a6fbd6" - integrity sha512-/NErCuoe/et17IlAQFKWM24qtyYYie7sFIrW/tIQXpck6vAu2hhtYYsKLBWQV+BQZMbcIYPU/QMYuTufrY4aQw== +"@babel/plugin-proposal-export-namespace-from@^7.12.1": + version "7.12.1" + resolved "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.12.1.tgz#8b9b8f376b2d88f5dd774e4d24a5cc2e3679b6d4" + integrity sha512-6CThGf0irEkzujYS5LQcjBx8j/4aQGiVv7J9+2f7pGfxqyKh3WnmVJYW3hdrQjyksErMGBPQrCnHfOtna+WLbw== dependencies: - "@babel/types" "^7.4.0" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-export-namespace-from" "^7.8.3" -"@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== +"@babel/plugin-proposal-json-strings@^7.12.1": + version "7.12.1" + resolved "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.12.1.tgz#d45423b517714eedd5621a9dfdc03fa9f4eb241c" + integrity sha512-GoLDUi6U9ZLzlSda2Df++VSqDJg3CG+dR0+iWsv6XRw1rEq+zwt4DirM9yrxW6XWaTpmai1cWJLMfM8qQJf+yw== dependencies: - "@babel/types" "^7.0.0" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-json-strings" "^7.8.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== +"@babel/plugin-proposal-logical-assignment-operators@^7.12.1": + version "7.12.1" + resolved "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.12.1.tgz#f2c490d36e1b3c9659241034a5d2cd50263a2751" + integrity sha512-k8ZmVv0JU+4gcUGeCDZOGd0lCIamU/sMtIiX3UWnUc5yzgq6YUGyEolNYD+MLYKfSzgECPcqetVcJP9Afe/aCA== dependencies: - "@babel/types" "^7.0.0" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" -"@babel/helper-module-transforms@^7.1.0": - version "7.2.2" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.2.2.tgz#ab2f8e8d231409f8370c883d20c335190284b963" - integrity sha512-YRD7I6Wsv+IHuTPkAmAS4HhY0dkPobgLftHp0cRGZSdrRvmZY8rFvae/GVu3bD00qscuvK3WPHB3YdNpBXUqrA== +"@babel/plugin-proposal-nullish-coalescing-operator@^7.0.0", "@babel/plugin-proposal-nullish-coalescing-operator@^7.12.1": + version "7.12.1" + resolved "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.12.1.tgz#3ed4fff31c015e7f3f1467f190dbe545cd7b046c" + integrity sha512-nZY0ESiaQDI1y96+jk6VxMOaL4LPo/QDHBqL+SF3/vl6dHkTwHlOI8L4ZwuRBHgakRBw5zsVylel7QPbbGuYgg== 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.2.2" - "@babel/types" "^7.2.2" - lodash "^4.17.10" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.0" -"@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== +"@babel/plugin-proposal-numeric-separator@^7.12.7": + version "7.12.7" + resolved "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.12.7.tgz#8bf253de8139099fea193b297d23a9d406ef056b" + integrity sha512-8c+uy0qmnRTeukiGsjLGy6uVs/TFjJchGXUeBqlG4VWYOdJWkhhVPdQ3uHwbmalfJwv2JsV0qffXP4asRfL2SQ== dependencies: - "@babel/types" "^7.0.0" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-numeric-separator" "^7.10.4" -"@babel/helper-plugin-utils@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.0.0.tgz#bbb3fbee98661c569034237cc03967ba99b4f250" - integrity sha512-CYAOUCARwExnEixLdB6sDm2dIJ/YgEAKDM1MOeMeZu9Ld/bDgVo8aiWrXwcY7OBh+1Ea2uUcVRcxKk0GJvW7QA== +"@babel/plugin-proposal-object-rest-spread@^7.0.0", "@babel/plugin-proposal-object-rest-spread@^7.12.1": + version "7.12.1" + resolved "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.12.1.tgz#def9bd03cea0f9b72283dac0ec22d289c7691069" + integrity sha512-s6SowJIjzlhx8o7lsFx5zmY4At6CTtDvgNQDdPzkBQucle58A6b/TTeEBYtyDgmcXjUTM+vE8YOGHZzzbc/ioA== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-object-rest-spread" "^7.8.0" + "@babel/plugin-transform-parameters" "^7.12.1" -"@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" - integrity sha512-TR0/N0NDCcUIUEbqV6dCO+LptmmSQFQ7q70lfcEB4URsjD0E1HzicrwUH+ap6BAQ2jhCX9Q4UqZy4wilujWlkg== +"@babel/plugin-proposal-optional-catch-binding@^7.0.0", "@babel/plugin-proposal-optional-catch-binding@^7.12.1": + version "7.12.1" + resolved "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.12.1.tgz#ccc2421af64d3aae50b558a71cede929a5ab2942" + integrity sha512-hFvIjgprh9mMw5v42sJWLI1lzU5L2sznP805zeT6rySVRA0Y18StRhDqhSxlap0oVgItRsB6WSROp4YnJTJz0g== dependencies: - lodash "^4.17.10" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.0" -"@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== +"@babel/plugin-proposal-optional-chaining@^7.0.0", "@babel/plugin-proposal-optional-chaining@^7.12.7": + version "7.12.7" + resolved "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.12.7.tgz#e02f0ea1b5dc59d401ec16fb824679f683d3303c" + integrity sha512-4ovylXZ0PWmwoOvhU2vhnzVNnm88/Sm9nx7V8BPgMvAzn5zDou3/Awy0EjglyubVHasJj+XCEkr/r1X3P5elCA== 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-plugin-utils" "^7.10.4" + "@babel/helper-skip-transparent-expression-wrappers" "^7.12.1" + "@babel/plugin-syntax-optional-chaining" "^7.8.0" -"@babel/helper-replace-supers@^7.1.0", "@babel/helper-replace-supers@^7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.4.0.tgz#4f56adb6aedcd449d2da9399c2dcf0545463b64c" - integrity sha512-PVwCVnWWAgnal+kJ+ZSAphzyl58XrFeSKSAJRiqg5QToTsjL+Xu1f9+RJ+d+Q0aPhPfBGaYfkox66k86thxNSg== +"@babel/plugin-proposal-private-methods@^7.12.1": + version "7.12.1" + resolved "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.12.1.tgz#86814f6e7a21374c980c10d38b4493e703f4a389" + integrity sha512-mwZ1phvH7/NHK6Kf8LP7MYDogGV+DKB1mryFOEwx5EBNQrosvIczzZFTUmWaeujd5xT6G1ELYWUz3CutMhjE1w== dependencies: - "@babel/helper-member-expression-to-functions" "^7.0.0" - "@babel/helper-optimise-call-expression" "^7.0.0" - "@babel/traverse" "^7.4.0" - "@babel/types" "^7.4.0" + "@babel/helper-create-class-features-plugin" "^7.12.1" + "@babel/helper-plugin-utils" "^7.10.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== +"@babel/plugin-proposal-unicode-property-regex@^7.12.1", "@babel/plugin-proposal-unicode-property-regex@^7.4.4": + version "7.12.1" + resolved "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.12.1.tgz#2a183958d417765b9eae334f47758e5d6a82e072" + integrity sha512-MYq+l+PvHuw/rKUz1at/vb6nCnQ2gmJBNaM62z0OgH7B2W1D9pvkpYtlti9bGtizNIU1K3zm4bZF9F91efVY0w== dependencies: - "@babel/template" "^7.1.0" - "@babel/types" "^7.0.0" + "@babel/helper-create-regexp-features-plugin" "^7.12.1" + "@babel/helper-plugin-utils" "^7.10.4" -"@babel/helper-split-export-declaration@^7.0.0", "@babel/helper-split-export-declaration@^7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.4.0.tgz#571bfd52701f492920d63b7f735030e9a3e10b55" - integrity sha512-7Cuc6JZiYShaZnybDmfwhY4UYHzI6rlqhWjaIqbsJGsIqPimEYy5uh3akSRLMg65LSdSEnJ8a8/bWQN6u2oMGw== +"@babel/plugin-syntax-async-generators@^7.8.0", "@babel/plugin-syntax-async-generators@^7.8.4": + version "7.8.4" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d" + integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw== dependencies: - "@babel/types" "^7.4.0" + "@babel/helper-plugin-utils" "^7.8.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" - integrity sha512-o9fP1BZLLSrYlxYEYyl2aS+Flun5gtjTIG8iln+XuEzQTs0PLagAGSXUcqruJwD5fM48jzIEggCKpIfWTcR7pQ== +"@babel/plugin-syntax-bigint@^7.8.3": + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz#4c9a6f669f5d0cdf1b90a1671e9a146be5300cea" + integrity sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg== dependencies: - "@babel/helper-function-name" "^7.1.0" - "@babel/template" "^7.1.0" - "@babel/traverse" "^7.1.0" - "@babel/types" "^7.2.0" + "@babel/helper-plugin-utils" "^7.8.0" -"@babel/helpers@^7.2.0", "@babel/helpers@^7.4.0": - version "7.4.2" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.4.2.tgz#3bdfa46a552ca77ef5a0f8551be5f0845ae989be" - integrity sha512-gQR1eQeroDzFBikhrCccm5Gs2xBjZ57DNjGbqTaHo911IpmSxflOQWMAHPw/TXk8L3isv7s9lYzUkexOeTQUYg== +"@babel/plugin-syntax-class-properties@^7.0.0", "@babel/plugin-syntax-class-properties@^7.12.1", "@babel/plugin-syntax-class-properties@^7.8.3": + version "7.12.1" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.1.tgz#bcb297c5366e79bebadef509549cd93b04f19978" + integrity sha512-U40A76x5gTwmESz+qiqssqmeEsKvcSyvtgktrm0uzcARAmM9I1jR221f6Oq+GmHrcD+LvZDag1UTOTe2fL3TeA== dependencies: - "@babel/template" "^7.4.0" - "@babel/traverse" "^7.4.0" - "@babel/types" "^7.4.0" + "@babel/helper-plugin-utils" "^7.10.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== +"@babel/plugin-syntax-dynamic-import@^7.0.0", "@babel/plugin-syntax-dynamic-import@^7.8.0": + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz#62bf98b2da3cd21d626154fc96ee5b3cb68eacb3" + integrity sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ== dependencies: - chalk "^2.0.0" - esutils "^2.0.2" - js-tokens "^4.0.0" + "@babel/helper-plugin-utils" "^7.8.0" -"@babel/parser@^7.0.0", "@babel/parser@^7.1.0", "@babel/parser@^7.2.2", "@babel/parser@^7.4.0": - version "7.4.2" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.4.2.tgz#b4521a400cb5a871eab3890787b4bc1326d38d91" - integrity sha512-9fJTDipQFvlfSVdD/JBtkiY0br9BtfvW2R8wo6CX/Ej2eMuV0gWPk1M67Mt3eggQvBqYW1FCEk8BN7WvGm/g5g== +"@babel/plugin-syntax-export-default-from@^7.0.0", "@babel/plugin-syntax-export-default-from@^7.12.1": + version "7.12.1" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-export-default-from/-/plugin-syntax-export-default-from-7.12.1.tgz#a9eb31881f4f9a1115a3d2c6d64ac3f6016b5a9d" + integrity sha512-dP5eGg6tHEkhnRD2/vRG/KJKRSg8gtxu2i+P/8/yFPJn/CfPU5G0/7Gks2i3M6IOVAPQekmsLN9LPsmXFFL4Uw== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-external-helpers@^7.0.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== +"@babel/plugin-syntax-export-namespace-from@^7.8.3": + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz#028964a9ba80dbc094c915c487ad7c4e7a66465a" + integrity sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-plugin-utils" "^7.8.3" -"@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== +"@babel/plugin-syntax-flow@^7.0.0", "@babel/plugin-syntax-flow@^7.12.1": + version "7.12.1" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.12.1.tgz#a77670d9abe6d63e8acadf4c31bb1eb5a506bbdd" + integrity sha512-1lBLLmtxrwpm4VKmtVFselI/P3pX+G63fAtUUt6b2Nzgao77KNDwyuRt90Mj2/9pKobtt68FdvjfqohZjg/FCA== 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/helper-plugin-utils" "^7.10.4" -"@babel/plugin-proposal-class-properties@7.3.0": - version "7.3.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.3.0.tgz#272636bc0fa19a0bc46e601ec78136a173ea36cd" - integrity sha512-wNHxLkEKTQ2ay0tnsam2z7fGZUi+05ziDJflEt3AZTP3oXLKHJp9HqhfroB/vdMvt3sda9fAbq7FsG8QPDrZBg== +"@babel/plugin-syntax-import-meta@^7.8.3": + version "7.10.4" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz#ee601348c370fa334d2207be158777496521fd51" + integrity sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g== dependencies: - "@babel/helper-create-class-features-plugin" "^7.3.0" - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-proposal-class-properties@^7.0.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.4.0.tgz#d70db61a2f1fd79de927eea91f6411c964e084b8" - integrity sha512-t2ECPNOXsIeK1JxJNKmgbzQtoG27KIlVE61vTqX0DKR9E9sZlVVxWUtEW9D5FlZ8b8j7SBNCHY47GgPKCKlpPg== +"@babel/plugin-syntax-json-strings@^7.8.0", "@babel/plugin-syntax-json-strings@^7.8.3": + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a" + integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA== dependencies: - "@babel/helper-create-class-features-plugin" "^7.4.0" - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-proposal-do-expressions@7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-do-expressions/-/plugin-proposal-do-expressions-7.2.0.tgz#7abf56d27125f2b040c9cb0ab03119cf117128a9" - integrity sha512-2bWN48zQHf/W5T8XvemGQJSi8hzhIo7y4kv/RiA08UcMLQ73lkTknhlaFGf1HjCJzG8FGopgsq6pSe1C+10fPg== +"@babel/plugin-syntax-jsx@^7.0.0", "@babel/plugin-syntax-jsx@^7.12.1": + version "7.12.1" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.12.1.tgz#9d9d357cc818aa7ae7935917c1257f67677a0926" + integrity sha512-1yRi7yAtB0ETgxdY9ti/p2TivUxJkTdhu/ZbF9MshVGqOx1TdB3b7xCXs49Fupgg50N45KcAsRP/ZqWjs9SRjg== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-syntax-do-expressions" "^7.2.0" + "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-proposal-export-default-from@^7.0.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-default-from/-/plugin-proposal-export-default-from-7.2.0.tgz#737b0da44b9254b6152fe29bb99c64e5691f6f68" - integrity sha512-NVfNe7F6nsasG1FnvcFxh2FN0l04ZNe75qTOAVOILWPam0tw9a63RtT/Dab8dPjedZa4fTQaQ83yMMywF9OSug== +"@babel/plugin-syntax-logical-assignment-operators@^7.10.4", "@babel/plugin-syntax-logical-assignment-operators@^7.8.3": + version "7.10.4" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699" + integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-syntax-export-default-from" "^7.2.0" + "@babel/helper-plugin-utils" "^7.10.4" -"@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== +"@babel/plugin-syntax-nullish-coalescing-operator@^7.8.0", "@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3": + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9" + integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-syntax-json-strings" "^7.2.0" + "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-proposal-nullish-coalescing-operator@^7.0.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.2.0.tgz#c3fda766187b2f2162657354407247a758ee9cf9" - integrity sha512-QXj/YjFuFJd68oDvoc1e8aqLr2wz7Kofzvp6Ekd/o7MWZl+nZ0/cpStxND+hlZ7DpRWAp7OmuyT2areZ2V3YUA== +"@babel/plugin-syntax-numeric-separator@^7.10.4", "@babel/plugin-syntax-numeric-separator@^7.8.3": + version "7.10.4" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97" + integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-syntax-nullish-coalescing-operator" "^7.2.0" + "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-proposal-object-rest-spread@7.3.2": - version "7.3.2" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.3.2.tgz#6d1859882d4d778578e41f82cc5d7bf3d5daf6c1" - integrity sha512-DjeMS+J2+lpANkYLLO+m6GjoTMygYglKmRe6cDTbFv3L9i6mmiE8fe6B8MtCSLZpVXscD5kn7s6SgtHrDoBWoA== +"@babel/plugin-syntax-object-rest-spread@^7.0.0", "@babel/plugin-syntax-object-rest-spread@^7.8.0", "@babel/plugin-syntax-object-rest-spread@^7.8.3": + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" + integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-syntax-object-rest-spread" "^7.2.0" + "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-proposal-object-rest-spread@^7.0.0", "@babel/plugin-proposal-object-rest-spread@^7.3.1": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.4.0.tgz#e4960575205eadf2a1ab4e0c79f9504d5b82a97f" - integrity sha512-uTNi8pPYyUH2eWHyYWWSYJKwKg34hhgl4/dbejEjL+64OhbHjTX7wEVWMQl82tEmdDsGeu77+s8HHLS627h6OQ== +"@babel/plugin-syntax-optional-catch-binding@^7.8.0", "@babel/plugin-syntax-optional-catch-binding@^7.8.3": + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1" + integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-syntax-object-rest-spread" "^7.2.0" + "@babel/helper-plugin-utils" "^7.8.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" - integrity sha512-mgYj3jCcxug6KUcX4OBoOJz3CMrwRfQELPQ5560F70YQUBZB7uac9fqaWamKR1iWUzGiK2t0ygzjTScZnVz75g== +"@babel/plugin-syntax-optional-chaining@^7.8.0", "@babel/plugin-syntax-optional-chaining@^7.8.3": + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a" + integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-syntax-optional-catch-binding" "^7.2.0" + "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-proposal-optional-chaining@^7.0.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.2.0.tgz#ae454f4c21c6c2ce8cb2397dc332ae8b420c5441" - integrity sha512-ea3Q6edZC/55wEBVZAEz42v528VulyO0eir+7uky/sT4XRcdkWJcFi1aPtitTlwUzGnECWJNExWww1SStt+yWw== +"@babel/plugin-syntax-top-level-await@^7.12.1": + version "7.12.1" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.12.1.tgz#dd6c0b357ac1bb142d98537450a319625d13d2a0" + integrity sha512-i7ooMZFS+a/Om0crxZodrTzNEPJHZrlMVGMTEpFAj6rYY/bKCddB0Dk/YxfPuYXOopuhKk/e1jV6h+WUU9XN3A== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-syntax-optional-chaining" "^7.2.0" + "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-proposal-unicode-property-regex@^7.2.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.4.0.tgz#202d91ee977d760ef83f4f416b280d568be84623" - integrity sha512-h/KjEZ3nK9wv1P1FSNb9G079jXrNYR0Ko+7XkOx85+gM24iZbPn0rh4vCftk+5QKY7y1uByFataBTmX7irEF1w== +"@babel/plugin-syntax-typescript@^7.12.1": + version "7.12.1" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.12.1.tgz#460ba9d77077653803c3dd2e673f76d66b4029e5" + integrity sha512-UZNEcCY+4Dp9yYRCAHrHDU+9ZXLYaY9MgBXSRLkB9WjYFRR6quJBumfVrEkUxrePPBwFcpWfNKXqVRQQtm7mMA== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-regex" "^7.0.0" - regexpu-core "^4.5.4" + "@babel/helper-plugin-utils" "^7.10.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== +"@babel/plugin-transform-arrow-functions@^7.0.0", "@babel/plugin-transform-arrow-functions@^7.12.1": + version "7.12.1" + resolved "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.12.1.tgz#8083ffc86ac8e777fbe24b5967c4b2521f3cb2b3" + integrity sha512-5QB50qyN44fzzz4/qxDPQMBCTHgxg3n0xRBLJUmBlLoU/sFvxVWGZF/ZUfMVDQuJUKXaBhbupxIzIfZ6Fwk/0A== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-plugin-utils" "^7.10.4" -"@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" - integrity sha512-UxYaGXYQ7rrKJS/PxIKRkv3exi05oH7rokBAsmCSsCxz1sVPZ7Fu6FzKoGgUvmY+0YgSkYHgUoCh5R5bCNBQlw== +"@babel/plugin-transform-async-to-generator@^7.0.0", "@babel/plugin-transform-async-to-generator@^7.12.1": + version "7.12.1" + resolved "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.12.1.tgz#3849a49cc2a22e9743cbd6b52926d30337229af1" + integrity sha512-SDtqoEcarK1DFlRJ1hHRY5HvJUj5kX4qmtpMAm2QnhOlyuMC4TMdCRgW6WXpv93rZeYNeLP22y8Aq2dbcDRM1A== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-module-imports" "^7.12.1" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-remap-async-to-generator" "^7.12.1" -"@babel/plugin-syntax-do-expressions@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-do-expressions/-/plugin-syntax-do-expressions-7.2.0.tgz#f3d4b01be05ecde2892086d7cfd5f1fa1ead5a2a" - integrity sha512-/u4rJ+XEmZkIhspVuKRS+7WLvm7Dky9j9TvGK5IgId8B3FKir9MG+nQxDZ9xLn10QMBvW58dZ6ABe2juSmARjg== +"@babel/plugin-transform-block-scoped-functions@^7.0.0", "@babel/plugin-transform-block-scoped-functions@^7.12.1": + version "7.12.1" + resolved "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.12.1.tgz#f2a1a365bde2b7112e0a6ded9067fdd7c07905d9" + integrity sha512-5OpxfuYnSgPalRpo8EWGPzIYf0lHBWORCkj5M0oLBwHdlux9Ri36QqGW3/LR13RSVOAoUUMzoPI/jpE4ABcHoA== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-syntax-dynamic-import@^7.0.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.2.0.tgz#69c159ffaf4998122161ad8ebc5e6d1f55df8612" - integrity sha512-mVxuJ0YroI/h/tbFTPGZR8cv6ai+STMKNBq0f8hFxsxWjl94qqhsb+wXbpNMDPU3cfR1TIsVFzU3nXyZMqyK4w== +"@babel/plugin-transform-block-scoping@^7.0.0", "@babel/plugin-transform-block-scoping@^7.12.11": + version "7.12.11" + resolved "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.12.11.tgz#83ae92a104dbb93a7d6c6dd1844f351083c46b4f" + integrity sha512-atR1Rxc3hM+VPg/NvNvfYw0npQEAcHuJ+MGZnFn6h3bo+1U3BWXMdFMlvVRApBTWKQMX7SOwRJZA5FBF/JQbvA== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-syntax-export-default-from@^7.0.0", "@babel/plugin-syntax-export-default-from@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-export-default-from/-/plugin-syntax-export-default-from-7.2.0.tgz#edd83b7adc2e0d059e2467ca96c650ab6d2f3820" - integrity sha512-c7nqUnNST97BWPtoe+Ssi+fJukc9P9/JMZ71IOMNQWza2E+Psrd46N6AEvtw6pqK+gt7ChjXyrw4SPDO79f3Lw== +"@babel/plugin-transform-classes@^7.0.0", "@babel/plugin-transform-classes@^7.12.1": + version "7.12.1" + resolved "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.12.1.tgz#65e650fcaddd3d88ddce67c0f834a3d436a32db6" + integrity sha512-/74xkA7bVdzQTBeSUhLLJgYIcxw/dpEpCdRDiHgPJ3Mv6uC11UhjpOhl72CgqbBCmt1qtssCyB2xnJm1+PFjog== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-annotate-as-pure" "^7.10.4" + "@babel/helper-define-map" "^7.10.4" + "@babel/helper-function-name" "^7.10.4" + "@babel/helper-optimise-call-expression" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-replace-supers" "^7.12.1" + "@babel/helper-split-export-declaration" "^7.10.4" + globals "^11.1.0" -"@babel/plugin-syntax-flow@^7.0.0", "@babel/plugin-syntax-flow@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.2.0.tgz#a765f061f803bc48f240c26f8747faf97c26bf7c" - integrity sha512-r6YMuZDWLtLlu0kqIim5o/3TNRAlWb073HwT3e2nKf9I8IIvOggPrnILYPsrrKilmn/mYEMCf/Z07w3yQJF6dg== +"@babel/plugin-transform-computed-properties@^7.0.0", "@babel/plugin-transform-computed-properties@^7.12.1": + version "7.12.1" + resolved "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.12.1.tgz#d68cf6c9b7f838a8a4144badbe97541ea0904852" + integrity sha512-vVUOYpPWB7BkgUWPo4C44mUQHpTZXakEqFjbv8rQMg7TC6S6ZhGZ3otQcRH6u7+adSlE5i0sp63eMC/XGffrzg== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-plugin-utils" "^7.10.4" -"@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== +"@babel/plugin-transform-destructuring@^7.0.0", "@babel/plugin-transform-destructuring@^7.12.1": + version "7.12.1" + resolved "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.12.1.tgz#b9a570fe0d0a8d460116413cb4f97e8e08b2f847" + integrity sha512-fRMYFKuzi/rSiYb2uRLiUENJOKq4Gnl+6qOv5f8z0TZXg3llUwUhsNNwrwaT/6dUhJTzNpBr+CUvEWBtfNY1cw== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-syntax-jsx@^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== +"@babel/plugin-transform-dotall-regex@^7.12.1", "@babel/plugin-transform-dotall-regex@^7.4.4": + version "7.12.1" + resolved "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.12.1.tgz#a1d16c14862817b6409c0a678d6f9373ca9cd975" + integrity sha512-B2pXeRKoLszfEW7J4Hg9LoFaWEbr/kzo3teWHmtFCszjRNa/b40f9mfeqZsIDLLt/FjwQ6pz/Gdlwy85xNckBA== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-create-regexp-features-plugin" "^7.12.1" + "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-syntax-nullish-coalescing-operator@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.2.0.tgz#f75083dfd5ade73e783db729bbd87e7b9efb7624" - integrity sha512-lRCEaKE+LTxDQtgbYajI04ddt6WW0WJq57xqkAZ+s11h4YgfRHhVA/Y2VhfPzzFD4qeLHWg32DMp9HooY4Kqlg== +"@babel/plugin-transform-duplicate-keys@^7.12.1": + version "7.12.1" + resolved "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.12.1.tgz#745661baba295ac06e686822797a69fbaa2ca228" + integrity sha512-iRght0T0HztAb/CazveUpUQrZY+aGKKaWXMJ4uf9YJtqxSUe09j3wteztCUDRHs+SRAL7yMuFqUsLoAKKzgXjw== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-plugin-utils" "^7.10.4" -"@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" - integrity sha512-t0JKGgqk2We+9may3t0xDdmneaXmyxq0xieYcKHxIsrJO64n1OiMWNUtc5gQK1PA0NpdCRrtZp4z+IUaKugrSA== +"@babel/plugin-transform-exponentiation-operator@^7.0.0", "@babel/plugin-transform-exponentiation-operator@^7.12.1": + version "7.12.1" + resolved "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.12.1.tgz#b0f2ed356ba1be1428ecaf128ff8a24f02830ae0" + integrity sha512-7tqwy2bv48q+c1EHbXK0Zx3KXd2RVQp6OC7PbwFNt/dPTAV3Lu5sWtWuAj8owr5wqtWnqHfl2/mJlUmqkChKug== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-builder-binary-assignment-operator-visitor" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" -"@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== +"@babel/plugin-transform-flow-strip-types@^7.0.0": + version "7.12.10" + resolved "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.12.10.tgz#d85e30ecfa68093825773b7b857e5085bbd32c95" + integrity sha512-0ti12wLTLeUIzu9U7kjqIn4MyOL7+Wibc7avsHhj4o1l5C0ATs8p2IMHrVYjm9t9wzhfEO6S3kxax0Rpdo8LTg== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-flow" "^7.12.1" -"@babel/plugin-syntax-optional-chaining@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.2.0.tgz#a59d6ae8c167e7608eaa443fda9fa8fa6bf21dff" - integrity sha512-HtGCtvp5Uq/jH/WNUPkK6b7rufnCPLLlDAFN7cmACoIjaOOiXxUt3SswU5loHqrhtqTsa/WoLQ1OQ1AGuZqaWA== +"@babel/plugin-transform-for-of@^7.0.0", "@babel/plugin-transform-for-of@^7.12.1": + version "7.12.1" + resolved "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.12.1.tgz#07640f28867ed16f9511c99c888291f560921cfa" + integrity sha512-Zaeq10naAsuHo7heQvyV0ptj4dlZJwZgNAtBYBnu5nNKJoW62m0zKcIEyVECrUKErkUkg6ajMy4ZfnVZciSBhg== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-syntax-typescript@^7.2.0": - version "7.3.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.3.3.tgz#a7cc3f66119a9f7ebe2de5383cce193473d65991" - integrity sha512-dGwbSMA1YhVS8+31CnPR7LB4pcbrzcV99wQzby4uAfrkZPYZlQ7ImwdpzLqi6Z6IL02b8IAL379CaMwo0x5Lag== +"@babel/plugin-transform-function-name@^7.0.0", "@babel/plugin-transform-function-name@^7.12.1": + version "7.12.1" + resolved "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.12.1.tgz#2ec76258c70fe08c6d7da154003a480620eba667" + integrity sha512-JF3UgJUILoFrFMEnOJLJkRHSk6LUSXLmEFsA23aR2O5CSLUxbeUX1IZ1YQ7Sn0aXb601Ncwjx73a+FVqgcljVw== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-function-name" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" -"@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" - integrity sha512-ER77Cax1+8/8jCB9fo4Ud161OZzWN5qawi4GusDuRLcDbDG+bIGYY20zb2dfAFdTRGzrfq2xZPvF0R64EHnimg== +"@babel/plugin-transform-literals@^7.0.0", "@babel/plugin-transform-literals@^7.12.1": + version "7.12.1" + resolved "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.12.1.tgz#d73b803a26b37017ddf9d3bb8f4dc58bfb806f57" + integrity sha512-+PxVGA+2Ag6uGgL0A5f+9rklOnnMccwEBzwYFL3EUaKuiyVnUipyXncFcfjSkbimLrODoqki1U9XxZzTvfN7IQ== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-async-to-generator@^7.0.0", "@babel/plugin-transform-async-to-generator@^7.2.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.4.0.tgz#234fe3e458dce95865c0d152d256119b237834b0" - integrity sha512-EeaFdCeUULM+GPFEsf7pFcNSxM7hYjoj5fiYbyuiXobW4JhFnjAv9OWzNwHyHcKoPNpAfeRDuW6VyaXEDUBa7g== +"@babel/plugin-transform-member-expression-literals@^7.0.0", "@babel/plugin-transform-member-expression-literals@^7.12.1": + version "7.12.1" + resolved "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.12.1.tgz#496038602daf1514a64d43d8e17cbb2755e0c3ad" + integrity sha512-1sxePl6z9ad0gFMB9KqmYofk34flq62aqMt9NqliS/7hPEpURUCMbyHXrMPlo282iY7nAvUB1aQd5mg79UD9Jg== 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/helper-plugin-utils" "^7.10.4" -"@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" - integrity sha512-ntQPR6q1/NKuphly49+QiQiTN0O63uOwjdD6dhIjSWBI5xlrbUFh720TIpzBhpnrLfv2tNH/BXvLIab1+BAI0w== +"@babel/plugin-transform-modules-amd@^7.12.1": + version "7.12.1" + resolved "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.12.1.tgz#3154300b026185666eebb0c0ed7f8415fefcf6f9" + integrity sha512-tDW8hMkzad5oDtzsB70HIQQRBiTKrhfgwC/KkJeGsaNFTdWhKNt/BiE8c5yj19XiGyrxpbkOfH87qkNg1YGlOQ== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-module-transforms" "^7.12.1" + "@babel/helper-plugin-utils" "^7.10.4" + babel-plugin-dynamic-import-node "^2.3.3" -"@babel/plugin-transform-block-scoping@^7.0.0", "@babel/plugin-transform-block-scoping@^7.2.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.4.0.tgz#164df3bb41e3deb954c4ca32ffa9fcaa56d30bcb" - integrity sha512-AWyt3k+fBXQqt2qb9r97tn3iBwFpiv9xdAiG+Gr2HpAZpuayvbL55yWrsV3MyHvXk/4vmSiedhDRl1YI2Iy5nQ== +"@babel/plugin-transform-modules-commonjs@^7.0.0", "@babel/plugin-transform-modules-commonjs@^7.12.1": + version "7.12.1" + resolved "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.12.1.tgz#fa403124542636c786cf9b460a0ffbb48a86e648" + integrity sha512-dY789wq6l0uLY8py9c1B48V8mVL5gZh/+PQ5ZPrylPYsnAvnEMjqsUXkuoDVPeVK+0VyGar+D08107LzDQ6pag== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - lodash "^4.17.11" + "@babel/helper-module-transforms" "^7.12.1" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-simple-access" "^7.12.1" + babel-plugin-dynamic-import-node "^2.3.3" -"@babel/plugin-transform-classes@^7.0.0", "@babel/plugin-transform-classes@^7.2.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.4.0.tgz#e3428d3c8a3d01f33b10c529b998ba1707043d4d" - integrity sha512-XGg1Mhbw4LDmrO9rSTNe+uI79tQPdGs0YASlxgweYRLZqo/EQktjaOV4tchL/UZbM0F+/94uOipmdNGoaGOEYg== +"@babel/plugin-transform-modules-systemjs@^7.12.1": + version "7.12.1" + resolved "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.12.1.tgz#663fea620d593c93f214a464cd399bf6dc683086" + integrity sha512-Hn7cVvOavVh8yvW6fLwveFqSnd7rbQN3zJvoPNyNaQSvgfKmDBO9U1YL9+PCXGRlZD9tNdWTy5ACKqMuzyn32Q== + dependencies: + "@babel/helper-hoist-variables" "^7.10.4" + "@babel/helper-module-transforms" "^7.12.1" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-validator-identifier" "^7.10.4" + babel-plugin-dynamic-import-node "^2.3.3" + +"@babel/plugin-transform-modules-umd@^7.12.1": + version "7.12.1" + resolved "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.12.1.tgz#eb5a218d6b1c68f3d6217b8fa2cc82fec6547902" + integrity sha512-aEIubCS0KHKM0zUos5fIoQm+AZUMt1ZvMpqz0/H5qAQ7vWylr9+PLYurT+Ic7ID/bKLd4q8hDovaG3Zch2uz5Q== + dependencies: + "@babel/helper-module-transforms" "^7.12.1" + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-named-capturing-groups-regex@^7.12.1": + version "7.12.1" + resolved "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.12.1.tgz#b407f5c96be0d9f5f88467497fa82b30ac3e8753" + integrity sha512-tB43uQ62RHcoDp9v2Nsf+dSM8sbNodbEicbQNA53zHz8pWUhsgHSJCGpt7daXxRydjb0KnfmB+ChXOv3oADp1Q== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.12.1" + +"@babel/plugin-transform-new-target@^7.12.1": + version "7.12.1" + resolved "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.12.1.tgz#80073f02ee1bb2d365c3416490e085c95759dec0" + integrity sha512-+eW/VLcUL5L9IvJH7rT1sT0CzkdUTvPrXC2PXTn/7z7tXLBuKvezYbGdxD5WMRoyvyaujOq2fWoKl869heKjhw== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-object-assign@^7.0.0": + version "7.12.1" + resolved "https://registry.npmjs.org/@babel/plugin-transform-object-assign/-/plugin-transform-object-assign-7.12.1.tgz#9102b06625f60a5443cc292d32b565373665e1e4" + integrity sha512-geUHn4XwHznRAFiuROTy0Hr7bKbpijJCmr1Svt/VNGhpxmp0OrdxURNpWbOAf94nUbL+xj6gbxRVPHWIbRpRoA== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-object-super@^7.0.0", "@babel/plugin-transform-object-super@^7.12.1": + version "7.12.1" + resolved "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.12.1.tgz#4ea08696b8d2e65841d0c7706482b048bed1066e" + integrity sha512-AvypiGJH9hsquNUn+RXVcBdeE3KHPZexWRdimhuV59cSoOt5kFBmqlByorAeUlGG2CJWd0U+4ZtNKga/TB0cAw== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-replace-supers" "^7.12.1" + +"@babel/plugin-transform-parameters@^7.0.0", "@babel/plugin-transform-parameters@^7.12.1": + version "7.12.1" + resolved "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.12.1.tgz#d2e963b038771650c922eff593799c96d853255d" + integrity sha512-xq9C5EQhdPK23ZeCdMxl8bbRnAgHFrw5EOC3KJUsSylZqdkCaFEXxGSBuTSObOpiiHHNyb82es8M1QYgfQGfNg== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-property-literals@^7.0.0", "@babel/plugin-transform-property-literals@^7.12.1": + version "7.12.1" + resolved "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.12.1.tgz#41bc81200d730abb4456ab8b3fbd5537b59adecd" + integrity sha512-6MTCR/mZ1MQS+AwZLplX4cEySjCpnIF26ToWo942nqn8hXSm7McaHQNeGx/pt7suI1TWOWMfa/NgBhiqSnX0cQ== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-react-display-name@^7.0.0": + version "7.12.1" + resolved "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.12.1.tgz#1cbcd0c3b1d6648c55374a22fc9b6b7e5341c00d" + integrity sha512-cAzB+UzBIrekfYxyLlFqf/OagTvHLcVBb5vpouzkYkBclRPraiygVnafvAoipErZLI8ANv8Ecn6E/m5qPXD26w== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-react-jsx-source@^7.0.0": + version "7.12.1" + resolved "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.12.1.tgz#d07de6863f468da0809edcf79a1aa8ce2a82a26b" + integrity sha512-keQ5kBfjJNRc6zZN1/nVHCd6LLIHq4aUKcVnvE/2l+ZZROSbqoiGFRtT5t3Is89XJxBQaP7NLZX2jgGHdZvvFQ== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-react-jsx@^7.0.0": + version "7.12.11" + resolved "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.12.11.tgz#09a7319195946b0ddc09f9a5f01346f2cb80dfdd" + integrity sha512-5nWOw6mTylaFU72BdZfa0dP1HsGdY3IMExpxn8LBE8dNmkQjB+W+sR+JwIdtbzkPvVuFviT3zyNbSUkuVTVxbw== + dependencies: + "@babel/helper-builder-react-jsx" "^7.10.4" + "@babel/helper-builder-react-jsx-experimental" "^7.12.11" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-jsx" "^7.12.1" + +"@babel/plugin-transform-regenerator@^7.0.0", "@babel/plugin-transform-regenerator@^7.12.1": + version "7.12.1" + resolved "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.12.1.tgz#5f0a28d842f6462281f06a964e88ba8d7ab49753" + integrity sha512-gYrHqs5itw6i4PflFX3OdBPMQdPbF4bj2REIUxlMRUFk0/ZOAIpDFuViuxPjUL7YC8UPnf+XG7/utJvqXdPKng== + dependencies: + regenerator-transform "^0.14.2" + +"@babel/plugin-transform-reserved-words@^7.12.1": + version "7.12.1" + resolved "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.12.1.tgz#6fdfc8cc7edcc42b36a7c12188c6787c873adcd8" + integrity sha512-pOnUfhyPKvZpVyBHhSBoX8vfA09b7r00Pmm1sH+29ae2hMTKVmSp4Ztsr8KBKjLjx17H0eJqaRC3bR2iThM54A== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-runtime@^7.0.0": + version "7.12.10" + resolved "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.12.10.tgz#af0fded4e846c4b37078e8e5d06deac6cd848562" + integrity sha512-xOrUfzPxw7+WDm9igMgQCbO3cJKymX7dFdsgRr1eu9n3KjjyU4pptIXbXPseQDquw+W+RuJEJMHKHNsPNNm3CA== + dependencies: + "@babel/helper-module-imports" "^7.12.5" + "@babel/helper-plugin-utils" "^7.10.4" + semver "^5.5.1" + +"@babel/plugin-transform-shorthand-properties@^7.0.0", "@babel/plugin-transform-shorthand-properties@^7.12.1": + version "7.12.1" + resolved "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.12.1.tgz#0bf9cac5550fce0cfdf043420f661d645fdc75e3" + integrity sha512-GFZS3c/MhX1OusqB1MZ1ct2xRzX5ppQh2JU1h2Pnfk88HtFTM+TWQqJNfwkmxtPQtb/s1tk87oENfXJlx7rSDw== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-spread@^7.0.0", "@babel/plugin-transform-spread@^7.12.1": + version "7.12.1" + resolved "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.12.1.tgz#527f9f311be4ec7fdc2b79bb89f7bf884b3e1e1e" + integrity sha512-vuLp8CP0BE18zVYjsEBZ5xoCecMK6LBMMxYzJnh01rxQRvhNhH1csMMmBfNo5tGpGO+NhdSNW2mzIvBu3K1fng== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-skip-transparent-expression-wrappers" "^7.12.1" + +"@babel/plugin-transform-sticky-regex@^7.0.0", "@babel/plugin-transform-sticky-regex@^7.12.7": + version "7.12.7" + resolved "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.12.7.tgz#560224613ab23987453948ed21d0b0b193fa7fad" + integrity sha512-VEiqZL5N/QvDbdjfYQBhruN0HYjSPjC4XkeqW4ny/jNtH9gcbgaqBIXYEZCNnESMAGs0/K/R7oFGMhOyu/eIxg== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-template-literals@^7.0.0", "@babel/plugin-transform-template-literals@^7.12.1": + version "7.12.1" + resolved "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.12.1.tgz#b43ece6ed9a79c0c71119f576d299ef09d942843" + integrity sha512-b4Zx3KHi+taXB1dVRBhVJtEPi9h1THCeKmae2qP0YdUHIFhVjtpqqNfxeVAa1xeHVhAy4SbHxEwx5cltAu5apw== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-typeof-symbol@^7.12.10": + version "7.12.10" + resolved "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.12.10.tgz#de01c4c8f96580bd00f183072b0d0ecdcf0dec4b" + integrity sha512-JQ6H8Rnsogh//ijxspCjc21YPd3VLVoYtAwv3zQmqAt8YGYUtdo5usNhdl4b9/Vir2kPFZl6n1h0PfUz4hJhaA== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-typescript@^7.0.0": + version "7.12.1" + resolved "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.12.1.tgz#d92cc0af504d510e26a754a7dbc2e5c8cd9c7ab4" + integrity sha512-VrsBByqAIntM+EYMqSm59SiMEf7qkmI9dqMt6RbD/wlwueWmYcI0FFK5Fj47pP6DRZm+3teXjosKlwcZJ5lIMw== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.12.1" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-typescript" "^7.12.1" + +"@babel/plugin-transform-unicode-escapes@^7.12.1": + version "7.12.1" + resolved "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.12.1.tgz#5232b9f81ccb07070b7c3c36c67a1b78f1845709" + integrity sha512-I8gNHJLIc7GdApm7wkVnStWssPNbSRMPtgHdmH3sRM1zopz09UWPS4x5V4n1yz/MIWTVnJ9sp6IkuXdWM4w+2Q== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-unicode-regex@^7.0.0", "@babel/plugin-transform-unicode-regex@^7.12.1": + version "7.12.1" + resolved "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.12.1.tgz#cc9661f61390db5c65e3febaccefd5c6ac3faecb" + integrity sha512-SqH4ClNngh/zGwHZOOQMTD+e8FGWexILV+ePMyiDJttAWRh5dhDL8rcl5lSgU3Huiq6Zn6pWTMvdPAb21Dwdyg== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.12.1" + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/preset-env@^7.11.5": + version "7.12.11" + resolved "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.12.11.tgz#55d5f7981487365c93dbbc84507b1c7215e857f9" + integrity sha512-j8Tb+KKIXKYlDBQyIOy4BLxzv1NUOwlHfZ74rvW+Z0Gp4/cI2IMDPBWAgWceGcE7aep9oL/0K9mlzlMGxA8yNw== + dependencies: + "@babel/compat-data" "^7.12.7" + "@babel/helper-compilation-targets" "^7.12.5" + "@babel/helper-module-imports" "^7.12.5" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-validator-option" "^7.12.11" + "@babel/plugin-proposal-async-generator-functions" "^7.12.1" + "@babel/plugin-proposal-class-properties" "^7.12.1" + "@babel/plugin-proposal-dynamic-import" "^7.12.1" + "@babel/plugin-proposal-export-namespace-from" "^7.12.1" + "@babel/plugin-proposal-json-strings" "^7.12.1" + "@babel/plugin-proposal-logical-assignment-operators" "^7.12.1" + "@babel/plugin-proposal-nullish-coalescing-operator" "^7.12.1" + "@babel/plugin-proposal-numeric-separator" "^7.12.7" + "@babel/plugin-proposal-object-rest-spread" "^7.12.1" + "@babel/plugin-proposal-optional-catch-binding" "^7.12.1" + "@babel/plugin-proposal-optional-chaining" "^7.12.7" + "@babel/plugin-proposal-private-methods" "^7.12.1" + "@babel/plugin-proposal-unicode-property-regex" "^7.12.1" + "@babel/plugin-syntax-async-generators" "^7.8.0" + "@babel/plugin-syntax-class-properties" "^7.12.1" + "@babel/plugin-syntax-dynamic-import" "^7.8.0" + "@babel/plugin-syntax-export-namespace-from" "^7.8.3" + "@babel/plugin-syntax-json-strings" "^7.8.0" + "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.0" + "@babel/plugin-syntax-numeric-separator" "^7.10.4" + "@babel/plugin-syntax-object-rest-spread" "^7.8.0" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.0" + "@babel/plugin-syntax-optional-chaining" "^7.8.0" + "@babel/plugin-syntax-top-level-await" "^7.12.1" + "@babel/plugin-transform-arrow-functions" "^7.12.1" + "@babel/plugin-transform-async-to-generator" "^7.12.1" + "@babel/plugin-transform-block-scoped-functions" "^7.12.1" + "@babel/plugin-transform-block-scoping" "^7.12.11" + "@babel/plugin-transform-classes" "^7.12.1" + "@babel/plugin-transform-computed-properties" "^7.12.1" + "@babel/plugin-transform-destructuring" "^7.12.1" + "@babel/plugin-transform-dotall-regex" "^7.12.1" + "@babel/plugin-transform-duplicate-keys" "^7.12.1" + "@babel/plugin-transform-exponentiation-operator" "^7.12.1" + "@babel/plugin-transform-for-of" "^7.12.1" + "@babel/plugin-transform-function-name" "^7.12.1" + "@babel/plugin-transform-literals" "^7.12.1" + "@babel/plugin-transform-member-expression-literals" "^7.12.1" + "@babel/plugin-transform-modules-amd" "^7.12.1" + "@babel/plugin-transform-modules-commonjs" "^7.12.1" + "@babel/plugin-transform-modules-systemjs" "^7.12.1" + "@babel/plugin-transform-modules-umd" "^7.12.1" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.12.1" + "@babel/plugin-transform-new-target" "^7.12.1" + "@babel/plugin-transform-object-super" "^7.12.1" + "@babel/plugin-transform-parameters" "^7.12.1" + "@babel/plugin-transform-property-literals" "^7.12.1" + "@babel/plugin-transform-regenerator" "^7.12.1" + "@babel/plugin-transform-reserved-words" "^7.12.1" + "@babel/plugin-transform-shorthand-properties" "^7.12.1" + "@babel/plugin-transform-spread" "^7.12.1" + "@babel/plugin-transform-sticky-regex" "^7.12.7" + "@babel/plugin-transform-template-literals" "^7.12.1" + "@babel/plugin-transform-typeof-symbol" "^7.12.10" + "@babel/plugin-transform-unicode-escapes" "^7.12.1" + "@babel/plugin-transform-unicode-regex" "^7.12.1" + "@babel/preset-modules" "^0.1.3" + "@babel/types" "^7.12.11" + core-js-compat "^3.8.0" + semver "^5.5.0" + +"@babel/preset-modules@^0.1.3": + version "0.1.4" + resolved "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.4.tgz#362f2b68c662842970fdb5e254ffc8fc1c2e415e" + integrity sha512-J36NhwnfdzpmH41M1DrnkkgAqhZaqr/NBdPfQ677mLzlaXo+oDiv1deyCDtgAhz8p328otdob0Du7+xgHGZbKg== dependencies: - "@babel/helper-annotate-as-pure" "^7.0.0" - "@babel/helper-define-map" "^7.4.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.4.0" - "@babel/helper-split-export-declaration" "^7.4.0" + "@babel/plugin-proposal-unicode-property-regex" "^7.4.4" + "@babel/plugin-transform-dotall-regex" "^7.4.4" + "@babel/types" "^7.4.4" + esutils "^2.0.2" + +"@babel/register@^7.0.0": + version "7.12.10" + resolved "https://registry.npmjs.org/@babel/register/-/register-7.12.10.tgz#19b87143f17128af4dbe7af54c735663b3999f60" + integrity sha512-EvX/BvMMJRAA3jZgILWgbsrHwBQvllC5T8B29McyME8DvkdOxk4ujESfrMvME8IHSDvWXrmMXxPvA/lx2gqPLQ== + dependencies: + find-cache-dir "^2.0.0" + lodash "^4.17.19" + make-dir "^2.1.0" + pirates "^4.0.0" + source-map-support "^0.5.16" + +"@babel/runtime-corejs3@^7.10.2": + version "7.12.5" + resolved "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.12.5.tgz#ffee91da0eb4c6dae080774e94ba606368e414f4" + integrity sha512-roGr54CsTmNPPzZoCP1AmDXuBoNao7tnSA83TXTwt+UK5QVyh1DIJnrgYRPWKCF2flqZQXwa7Yr8v7VmLzF0YQ== + dependencies: + core-js-pure "^3.0.0" + regenerator-runtime "^0.13.4" + +"@babel/runtime@^7.0.0", "@babel/runtime@^7.10.2", "@babel/runtime@^7.11.2", "@babel/runtime@^7.12.5", "@babel/runtime@^7.4.4", "@babel/runtime@^7.5.1", "@babel/runtime@^7.8.4", "@babel/runtime@^7.9.2": + version "7.12.5" + resolved "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.5.tgz#410e7e487441e1b360c29be715d870d9b985882e" + integrity sha512-plcc+hbExy3McchJCEQG3knOsuh3HH+Prx1P6cLIkET/0dLuQDEnrT+s27Axgc9bqfsmNUNHfscgMUdBpC9xfg== + dependencies: + regenerator-runtime "^0.13.4" + +"@babel/runtime@^7.12.1": + version "7.13.10" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.13.10.tgz#47d42a57b6095f4468da440388fdbad8bebf0d7d" + integrity sha512-4QPkjJq6Ns3V/RgpEahRk+AGfL0eO6RHHtTWoNNr5mO49G6B5+X6d6THgWEAvTrznU5xYpbAlVKRYcsCgh/Akw== + dependencies: + regenerator-runtime "^0.13.4" + +"@babel/template@^7.0.0", "@babel/template@^7.10.4", "@babel/template@^7.12.7", "@babel/template@^7.3.3": + version "7.12.7" + resolved "https://registry.npmjs.org/@babel/template/-/template-7.12.7.tgz#c817233696018e39fbb6c491d2fb684e05ed43bc" + integrity sha512-GkDzmHS6GV7ZeXfJZ0tLRBhZcMcY0/Lnb+eEbXDBfCAcZCjrZKe6p3J4we/D24O9Y8enxWAg1cWwof59yLh2ow== + dependencies: + "@babel/code-frame" "^7.10.4" + "@babel/parser" "^7.12.7" + "@babel/types" "^7.12.7" + +"@babel/traverse@^7.0.0", "@babel/traverse@^7.1.0", "@babel/traverse@^7.10.4", "@babel/traverse@^7.12.1", "@babel/traverse@^7.12.10", "@babel/traverse@^7.12.5": + version "7.12.10" + resolved "https://registry.npmjs.org/@babel/traverse/-/traverse-7.12.10.tgz#2d1f4041e8bf42ea099e5b2dc48d6a594c00017a" + integrity sha512-6aEtf0IeRgbYWzta29lePeYSk+YAFIC3kyqESeft8o5CkFlYIMX+EQDDWEiAQ9LHOA3d0oHdgrSsID/CKqXJlg== + dependencies: + "@babel/code-frame" "^7.10.4" + "@babel/generator" "^7.12.10" + "@babel/helper-function-name" "^7.10.4" + "@babel/helper-split-export-declaration" "^7.11.0" + "@babel/parser" "^7.12.10" + "@babel/types" "^7.12.10" + debug "^4.1.0" globals "^11.1.0" + lodash "^4.17.19" -"@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" - integrity sha512-kP/drqTxY6Xt3NNpKiMomfgkNn4o7+vKxK2DDKcBG9sHj51vHqMBGy8wbDS/J4lMxnqs153/T3+DmCEAkC5cpA== +"@babel/types@^7.0.0", "@babel/types@^7.10.4", "@babel/types@^7.10.5", "@babel/types@^7.12.1", "@babel/types@^7.12.10", "@babel/types@^7.12.11", "@babel/types@^7.12.5", "@babel/types@^7.12.7", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4": + version "7.12.11" + resolved "https://registry.npmjs.org/@babel/types/-/types-7.12.11.tgz#a86e4d71e30a9b6ee102590446c98662589283ce" + integrity sha512-ukA9SQtKThINm++CX1CwmliMrE54J6nIYB5XTwL5f/CLFW9owfls+YSU8tVW15RQ2w+a3fSbPjC6HdQNtWZkiA== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-validator-identifier" "^7.12.11" + lodash "^4.17.19" + to-fast-properties "^2.0.0" -"@babel/plugin-transform-destructuring@^7.0.0", "@babel/plugin-transform-destructuring@^7.2.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.4.0.tgz#acbb9b2418d290107db333f4d6cd8aa6aea00343" - integrity sha512-HySkoatyYTY3ZwLI8GGvkRWCFrjAGXUHur5sMecmCIdIharnlcWWivOqDJI76vvmVZfzwb6G08NREsrY96RhGQ== +"@bcoe/v8-coverage@^0.2.3": + version "0.2.3" + resolved "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" + integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== + +"@cnakazawa/watch@^1.0.3": + version "1.0.4" + resolved "https://registry.npmjs.org/@cnakazawa/watch/-/watch-1.0.4.tgz#f864ae85004d0fcab6f50be9141c4da368d1656a" + integrity sha512-v9kIhKwjeZThiWrLmj0y17CWoyddASLj9O2yvbZkbvw/N3rWOYy9zkV66ursAoVr0mV15bL8g0c4QZUE6cdDoQ== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" + exec-sh "^0.3.2" + minimist "^1.2.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" - integrity sha512-sKxnyHfizweTgKZf7XsXu/CNupKhzijptfTM+bozonIuyVrLWVUvYjE2bhuSBML8VQeMxq4Mm63Q9qvcvUcciQ== +"@commitlint/cli@^11.0.0": + version "11.0.0" + resolved "https://registry.npmjs.org/@commitlint/cli/-/cli-11.0.0.tgz#698199bc52afed50aa28169237758fa14a67b5d3" + integrity sha512-YWZWg1DuqqO5Zjh7vUOeSX76vm0FFyz4y0cpGMFhrhvUi5unc4IVfCXZ6337R9zxuBtmveiRuuhQqnRRer+13g== + dependencies: + "@babel/runtime" "^7.11.2" + "@commitlint/format" "^11.0.0" + "@commitlint/lint" "^11.0.0" + "@commitlint/load" "^11.0.0" + "@commitlint/read" "^11.0.0" + chalk "4.1.0" + core-js "^3.6.1" + get-stdin "8.0.0" + lodash "^4.17.19" + resolve-from "5.0.0" + resolve-global "1.0.0" + yargs "^15.1.0" + +"@commitlint/config-conventional@^11.0.0": + version "11.0.0" + resolved "https://registry.npmjs.org/@commitlint/config-conventional/-/config-conventional-11.0.0.tgz#3fa300a1b639273946de3c3f15e1cda518333422" + integrity sha512-SNDRsb5gLuDd2PL83yCOQX6pE7gevC79UPFx+GLbLfw6jGnnbO9/tlL76MLD8MOViqGbo7ZicjChO9Gn+7tHhA== + dependencies: + conventional-changelog-conventionalcommits "^4.3.1" + +"@commitlint/ensure@^11.0.0": + version "11.0.0" + resolved "https://registry.npmjs.org/@commitlint/ensure/-/ensure-11.0.0.tgz#3e796b968ab5b72bc6f8a6040076406306c987fb" + integrity sha512-/T4tjseSwlirKZdnx4AuICMNNlFvRyPQimbZIOYujp9DSO6XRtOy9NrmvWujwHsq9F5Wb80QWi4WMW6HMaENug== + dependencies: + "@commitlint/types" "^11.0.0" + lodash "^4.17.19" + +"@commitlint/execute-rule@^11.0.0": + version "11.0.0" + resolved "https://registry.npmjs.org/@commitlint/execute-rule/-/execute-rule-11.0.0.tgz#3ed60ab7a33019e58d90e2d891b75d7df77b4b4d" + integrity sha512-g01p1g4BmYlZ2+tdotCavrMunnPFPhTzG1ZiLKTCYrooHRbmvqo42ZZn4QMStUEIcn+jfLb6BRZX3JzIwA1ezQ== + +"@commitlint/format@^11.0.0": + version "11.0.0" + resolved "https://registry.npmjs.org/@commitlint/format/-/format-11.0.0.tgz#ac47b0b9ca46540c0082c721b290794e67bdc51b" + integrity sha512-bpBLWmG0wfZH/svzqD1hsGTpm79TKJWcf6EXZllh2J/LSSYKxGlv967lpw0hNojme0sZd4a/97R3qA2QHWWSLg== + dependencies: + "@commitlint/types" "^11.0.0" + chalk "^4.0.0" + +"@commitlint/is-ignored@^11.0.0": + version "11.0.0" + resolved "https://registry.npmjs.org/@commitlint/is-ignored/-/is-ignored-11.0.0.tgz#7b803eda56276dbe7fec51eb1510676198468f39" + integrity sha512-VLHOUBN+sOlkYC4tGuzE41yNPO2w09sQnOpfS+pSPnBFkNUUHawEuA44PLHtDvQgVuYrMAmSWFQpWabMoP5/Xg== + dependencies: + "@commitlint/types" "^11.0.0" + semver "7.3.2" + +"@commitlint/lint@^11.0.0": + version "11.0.0" + resolved "https://registry.npmjs.org/@commitlint/lint/-/lint-11.0.0.tgz#01e062cd1b0e7c3d756aa2c246462e0b6a3348a4" + integrity sha512-Q8IIqGIHfwKr8ecVZyYh6NtXFmKw4YSEWEr2GJTB/fTZXgaOGtGFZDWOesCZllQ63f1s/oWJYtVv5RAEuwN8BQ== + dependencies: + "@commitlint/is-ignored" "^11.0.0" + "@commitlint/parse" "^11.0.0" + "@commitlint/rules" "^11.0.0" + "@commitlint/types" "^11.0.0" + +"@commitlint/load@^11.0.0": + version "11.0.0" + resolved "https://registry.npmjs.org/@commitlint/load/-/load-11.0.0.tgz#f736562f0ffa7e773f8808fea93319042ee18211" + integrity sha512-t5ZBrtgvgCwPfxmG811FCp39/o3SJ7L+SNsxFL92OR4WQxPcu6c8taD0CG2lzOHGuRyuMxZ7ps3EbngT2WpiCg== + dependencies: + "@commitlint/execute-rule" "^11.0.0" + "@commitlint/resolve-extends" "^11.0.0" + "@commitlint/types" "^11.0.0" + chalk "4.1.0" + cosmiconfig "^7.0.0" + lodash "^4.17.19" + resolve-from "^5.0.0" + +"@commitlint/message@^11.0.0": + version "11.0.0" + resolved "https://registry.npmjs.org/@commitlint/message/-/message-11.0.0.tgz#83554c3cbbc884fd07b473593bc3e94bcaa3ee05" + integrity sha512-01ObK/18JL7PEIE3dBRtoMmU6S3ecPYDTQWWhcO+ErA3Ai0KDYqV5VWWEijdcVafNpdeUNrEMigRkxXHQLbyJA== + +"@commitlint/parse@^11.0.0": + version "11.0.0" + resolved "https://registry.npmjs.org/@commitlint/parse/-/parse-11.0.0.tgz#d18b08cf67c35d02115207d7009306a2e8e7c901" + integrity sha512-DekKQAIYWAXIcyAZ6/PDBJylWJ1BROTfDIzr9PMVxZRxBPc1gW2TG8fLgjZfBP5mc0cuthPkVi91KQQKGri/7A== + dependencies: + conventional-changelog-angular "^5.0.0" + conventional-commits-parser "^3.0.0" + +"@commitlint/read@^11.0.0": + version "11.0.0" + resolved "https://registry.npmjs.org/@commitlint/read/-/read-11.0.0.tgz#f24240548c63587bba139fa5a364cab926077016" + integrity sha512-37V0V91GSv0aDzMzJioKpCoZw6l0shk7+tRG8RkW1GfZzUIytdg3XqJmM+IaIYpaop0m6BbZtfq+idzUwJnw7g== + dependencies: + "@commitlint/top-level" "^11.0.0" + fs-extra "^9.0.0" + git-raw-commits "^2.0.0" + +"@commitlint/resolve-extends@^11.0.0": + version "11.0.0" + resolved "https://registry.npmjs.org/@commitlint/resolve-extends/-/resolve-extends-11.0.0.tgz#158ecbe27d4a2a51d426111a01478e216fbb1036" + integrity sha512-WinU6Uv6L7HDGLqn/To13KM1CWvZ09VHZqryqxXa1OY+EvJkfU734CwnOEeNlSCK7FVLrB4kmodLJtL1dkEpXw== + dependencies: + import-fresh "^3.0.0" + lodash "^4.17.19" + resolve-from "^5.0.0" + resolve-global "^1.0.0" + +"@commitlint/rules@^11.0.0": + version "11.0.0" + resolved "https://registry.npmjs.org/@commitlint/rules/-/rules-11.0.0.tgz#bdb310cc6fc55c9f8d7d917a22b69055c535c375" + integrity sha512-2hD9y9Ep5ZfoNxDDPkQadd2jJeocrwC4vJ98I0g8pNYn/W8hS9+/FuNpolREHN8PhmexXbkjrwyQrWbuC0DVaA== + dependencies: + "@commitlint/ensure" "^11.0.0" + "@commitlint/message" "^11.0.0" + "@commitlint/to-lines" "^11.0.0" + "@commitlint/types" "^11.0.0" + +"@commitlint/to-lines@^11.0.0": + version "11.0.0" + resolved "https://registry.npmjs.org/@commitlint/to-lines/-/to-lines-11.0.0.tgz#86dea151c10eea41e39ea96fa4de07839258a7fe" + integrity sha512-TIDTB0Y23jlCNubDROUVokbJk6860idYB5cZkLWcRS9tlb6YSoeLn1NLafPlrhhkkkZzTYnlKYzCVrBNVes1iw== + +"@commitlint/top-level@^11.0.0": + version "11.0.0" + resolved "https://registry.npmjs.org/@commitlint/top-level/-/top-level-11.0.0.tgz#bb2d1b6e5ed3be56874633b59e1f7de118c32783" + integrity sha512-O0nFU8o+Ws+py5pfMQIuyxOtfR/kwtr5ybqTvR+C2lUPer2x6lnQU+OnfD7hPM+A+COIUZWx10mYQvkR3MmtAA== + dependencies: + find-up "^5.0.0" + +"@commitlint/types@^11.0.0": + version "11.0.0" + resolved "https://registry.npmjs.org/@commitlint/types/-/types-11.0.0.tgz#719cf05fcc1abb6533610a2e0f5dd1e61eac14fe" + integrity sha512-VoNqai1vR5anRF5Tuh/+SWDFk7xi7oMwHrHrbm1BprYXjB2RJsWLhUrStMssDxEl5lW/z3EUdg8RvH/IUBccSQ== + +"@cush/relative@^0.1.0": + version "0.1.0" + resolved "https://registry.npmjs.org/@cush/relative/-/relative-0.1.0.tgz#19bfc2c8d46335205932f2032e3569f99fd61b40" + integrity sha512-pnF2c2hhHyC520CmYYKq3hGOS0kipkGBgRnp3z7wx7lDzykaUwQW3wPQmiX9YtbHUcgUu1qQtzstixmeYMwQoA== + +"@evocateur/libnpmaccess@^3.1.0": + version "3.1.2" + resolved "https://registry.npmjs.org/@evocateur/libnpmaccess/-/libnpmaccess-3.1.2.tgz#ecf7f6ce6b004e9f942b098d92200be4a4b1c845" + integrity sha512-KSCAHwNWro0CF2ukxufCitT9K5LjL/KuMmNzSu8wuwN2rjyKHD8+cmOsiybK+W5hdnwc5M1SmRlVCaMHQo+3rg== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-regex" "^7.0.0" - regexpu-core "^4.1.3" + "@evocateur/npm-registry-fetch" "^4.0.0" + aproba "^2.0.0" + figgy-pudding "^3.5.1" + get-stream "^4.0.0" + npm-package-arg "^6.1.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" - integrity sha512-q+yuxW4DsTjNceUiTzK0L+AfQ0zD9rWaTLiUqHA8p0gxx7lu1EylenfzjeIWNkPy6e/0VG/Wjw9uf9LueQwLOw== +"@evocateur/libnpmpublish@^1.2.0": + version "1.2.2" + resolved "https://registry.npmjs.org/@evocateur/libnpmpublish/-/libnpmpublish-1.2.2.tgz#55df09d2dca136afba9c88c759ca272198db9f1a" + integrity sha512-MJrrk9ct1FeY9zRlyeoyMieBjGDG9ihyyD9/Ft6MMrTxql9NyoEx2hw9casTIP4CdqEVu+3nQ2nXxoJ8RCXyFg== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" + "@evocateur/npm-registry-fetch" "^4.0.0" + aproba "^2.0.0" + figgy-pudding "^3.5.1" + get-stream "^4.0.0" + lodash.clonedeep "^4.5.0" + normalize-package-data "^2.4.0" + npm-package-arg "^6.1.0" + semver "^5.5.1" + ssri "^6.0.1" -"@babel/plugin-transform-exponentiation-operator@^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== +"@evocateur/npm-registry-fetch@^3.9.1": + version "3.9.2" + resolved "https://registry.npmjs.org/@evocateur/npm-registry-fetch/-/npm-registry-fetch-3.9.2.tgz#4e23b8b6c812c34828520ce42b31fcdb927c77a3" + integrity sha512-lz4cWdC32z6iI05YT9y79YuJtp4IXUu9lAP5JA/Z/difUXJRLAKlemboY64ELa8BKDav/ktjeCKUUJL8jxNTig== dependencies: - "@babel/helper-builder-binary-assignment-operator-visitor" "^7.1.0" - "@babel/helper-plugin-utils" "^7.0.0" + JSONStream "^1.3.4" + bluebird "^3.5.1" + figgy-pudding "^3.4.1" + lru-cache "^5.1.1" + make-fetch-happen "^4.0.2" + npm-package-arg "^6.1.0" + safe-buffer "^5.1.2" -"@babel/plugin-transform-flow-strip-types@^7.0.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.4.0.tgz#f3c59eecff68c99b9c96eaafe4fe9d1fa8947138" - integrity sha512-C4ZVNejHnfB22vI2TYN4RUp2oCmq6cSEAg4RygSvYZUECRqUu9O4PMEMNJ4wsemaRGg27BbgYctG4BZh+AgIHw== +"@evocateur/npm-registry-fetch@^4.0.0": + version "4.0.0" + resolved "https://registry.npmjs.org/@evocateur/npm-registry-fetch/-/npm-registry-fetch-4.0.0.tgz#8c4c38766d8d32d3200fcb0a83f064b57365ed66" + integrity sha512-k1WGfKRQyhJpIr+P17O5vLIo2ko1PFLKwoetatdduUSt/aQ4J2sJrJwwatdI5Z3SiYk/mRH9S3JpdmMFd/IK4g== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-syntax-flow" "^7.2.0" + JSONStream "^1.3.4" + bluebird "^3.5.1" + figgy-pudding "^3.4.1" + lru-cache "^5.1.1" + make-fetch-happen "^5.0.0" + npm-package-arg "^6.1.0" + safe-buffer "^5.1.2" -"@babel/plugin-transform-for-of@^7.0.0", "@babel/plugin-transform-for-of@^7.2.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.4.0.tgz#56c8c36677f5d4a16b80b12f7b768de064aaeb5f" - integrity sha512-vWdfCEYLlYSxbsKj5lGtzA49K3KANtb8qCPQ1em07txJzsBwY+cKJzBHizj5fl3CCx7vt+WPdgDLTHmydkbQSQ== +"@evocateur/pacote@^9.6.0": + version "9.6.5" + resolved "https://registry.npmjs.org/@evocateur/pacote/-/pacote-9.6.5.tgz#33de32ba210b6f17c20ebab4d497efc6755f4ae5" + integrity sha512-EI552lf0aG2nOV8NnZpTxNo2PcXKPmDbF9K8eCBFQdIZwHNGN/mi815fxtmUMa2wTa1yndotICIDt/V0vpEx2w== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" + "@evocateur/npm-registry-fetch" "^4.0.0" + bluebird "^3.5.3" + cacache "^12.0.3" + chownr "^1.1.2" + figgy-pudding "^3.5.1" + get-stream "^4.1.0" + glob "^7.1.4" + infer-owner "^1.0.4" + lru-cache "^5.1.1" + make-fetch-happen "^5.0.0" + minimatch "^3.0.4" + minipass "^2.3.5" + mississippi "^3.0.0" + mkdirp "^0.5.1" + normalize-package-data "^2.5.0" + npm-package-arg "^6.1.0" + npm-packlist "^1.4.4" + npm-pick-manifest "^3.0.0" + osenv "^0.1.5" + promise-inflight "^1.0.1" + promise-retry "^1.1.1" + protoduck "^5.0.1" + rimraf "^2.6.3" + safe-buffer "^5.2.0" + semver "^5.7.0" + ssri "^6.0.1" + tar "^4.4.10" + unique-filename "^1.1.1" + which "^1.3.1" -"@babel/plugin-transform-function-name@^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" - integrity sha512-kWgksow9lHdvBC2Z4mxTsvc7YdY7w/V6B2vy9cTIPtLEE9NhwoWivaxdNM/S37elu5bqlLP/qOY906LukO9lkQ== +"@istanbuljs/load-nyc-config@^1.0.0": + version "1.1.0" + resolved "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz#fd3db1d59ecf7cf121e80650bb86712f9b55eced" + integrity sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ== dependencies: - "@babel/helper-function-name" "^7.1.0" - "@babel/helper-plugin-utils" "^7.0.0" + camelcase "^5.3.1" + find-up "^4.1.0" + get-package-type "^0.1.0" + js-yaml "^3.13.1" + resolve-from "^5.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" - integrity sha512-2ThDhm4lI4oV7fVQ6pNNK+sx+c/GM5/SaML0w/r4ZB7sAneD/piDJtwdKlNckXeyGK7wlwg2E2w33C/Hh+VFCg== +"@istanbuljs/schema@^0.1.2": + version "0.1.2" + resolved "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.2.tgz#26520bf09abe4a5644cd5414e37125a8954241dd" + integrity sha512-tsAQNx32a8CoFhjhijUIhI4kccIAgmGhy8LZMZgGfmXcpMbPRUqn5LWmgRttILi6yeGmBJd2xsPkFMs0PzgPCw== + +"@jest/console@^24.9.0": + version "24.9.0" + resolved "https://registry.npmjs.org/@jest/console/-/console-24.9.0.tgz#79b1bc06fb74a8cfb01cbdedf945584b1b9707f0" + integrity sha512-Zuj6b8TnKXi3q4ymac8EQfc3ea/uhLeCGThFqXeC8H9/raaH8ARPUTdId+XyGd03Z4In0/VjD2OYFcBF09fNLQ== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" + "@jest/source-map" "^24.9.0" + chalk "^2.0.1" + slash "^2.0.0" -"@babel/plugin-transform-member-expression-literals@^7.0.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== +"@jest/console@^25.5.0": + version "25.5.0" + resolved "https://registry.npmjs.org/@jest/console/-/console-25.5.0.tgz#770800799d510f37329c508a9edd0b7b447d9abb" + integrity sha512-T48kZa6MK1Y6k4b89sexwmSF4YLeZS/Udqg3Jj3jG/cHH+N/sLFCEoXEDMOKugJQ9FxPN1osxIknvKkxt6MKyw== + dependencies: + "@jest/types" "^25.5.0" + chalk "^3.0.0" + jest-message-util "^25.5.0" + jest-util "^25.5.0" + slash "^3.0.0" + +"@jest/core@^25.5.4": + version "25.5.4" + resolved "https://registry.npmjs.org/@jest/core/-/core-25.5.4.tgz#3ef7412f7339210f003cdf36646bbca786efe7b4" + integrity sha512-3uSo7laYxF00Dg/DMgbn4xMJKmDdWvZnf89n8Xj/5/AeQ2dOQmn6b6Hkj/MleyzZWXpwv+WSdYWl4cLsy2JsoA== + dependencies: + "@jest/console" "^25.5.0" + "@jest/reporters" "^25.5.1" + "@jest/test-result" "^25.5.0" + "@jest/transform" "^25.5.1" + "@jest/types" "^25.5.0" + ansi-escapes "^4.2.1" + chalk "^3.0.0" + exit "^0.1.2" + graceful-fs "^4.2.4" + jest-changed-files "^25.5.0" + jest-config "^25.5.4" + jest-haste-map "^25.5.1" + jest-message-util "^25.5.0" + jest-regex-util "^25.2.6" + jest-resolve "^25.5.1" + jest-resolve-dependencies "^25.5.4" + jest-runner "^25.5.4" + jest-runtime "^25.5.4" + jest-snapshot "^25.5.1" + jest-util "^25.5.0" + jest-validate "^25.5.0" + jest-watcher "^25.5.0" + micromatch "^4.0.2" + p-each-series "^2.1.0" + realpath-native "^2.0.0" + rimraf "^3.0.0" + slash "^3.0.0" + strip-ansi "^6.0.0" + +"@jest/environment@^25.5.0": + version "25.5.0" + resolved "https://registry.npmjs.org/@jest/environment/-/environment-25.5.0.tgz#aa33b0c21a716c65686638e7ef816c0e3a0c7b37" + integrity sha512-U2VXPEqL07E/V7pSZMSQCvV5Ea4lqOlT+0ZFijl/i316cRMHvZ4qC+jBdryd+lmRetjQo0YIQr6cVPNxxK87mA== + dependencies: + "@jest/fake-timers" "^25.5.0" + "@jest/types" "^25.5.0" + jest-mock "^25.5.0" + +"@jest/fake-timers@^24.9.0": + version "24.9.0" + resolved "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-24.9.0.tgz#ba3e6bf0eecd09a636049896434d306636540c93" + integrity sha512-eWQcNa2YSwzXWIMC5KufBh3oWRIijrQFROsIqt6v/NS9Io/gknw1jsAC9c+ih/RQX4A3O7SeWAhQeN0goKhT9A== + dependencies: + "@jest/types" "^24.9.0" + jest-message-util "^24.9.0" + jest-mock "^24.9.0" + +"@jest/fake-timers@^25.5.0": + version "25.5.0" + resolved "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-25.5.0.tgz#46352e00533c024c90c2bc2ad9f2959f7f114185" + integrity sha512-9y2+uGnESw/oyOI3eww9yaxdZyHq7XvprfP/eeoCsjqKYts2yRlsHS/SgjPDV8FyMfn2nbMy8YzUk6nyvdLOpQ== + dependencies: + "@jest/types" "^25.5.0" + jest-message-util "^25.5.0" + jest-mock "^25.5.0" + jest-util "^25.5.0" + lolex "^5.0.0" + +"@jest/globals@^25.5.2": + version "25.5.2" + resolved "https://registry.npmjs.org/@jest/globals/-/globals-25.5.2.tgz#5e45e9de8d228716af3257eeb3991cc2e162ca88" + integrity sha512-AgAS/Ny7Q2RCIj5kZ+0MuKM1wbF0WMLxbCVl/GOMoCNbODRdJ541IxJ98xnZdVSZXivKpJlNPIWa3QmY0l4CXA== + dependencies: + "@jest/environment" "^25.5.0" + "@jest/types" "^25.5.0" + expect "^25.5.0" + +"@jest/reporters@^25.5.1": + version "25.5.1" + resolved "https://registry.npmjs.org/@jest/reporters/-/reporters-25.5.1.tgz#cb686bcc680f664c2dbaf7ed873e93aa6811538b" + integrity sha512-3jbd8pPDTuhYJ7vqiHXbSwTJQNavczPs+f1kRprRDxETeE3u6srJ+f0NPuwvOmk+lmunZzPkYWIFZDLHQPkviw== + dependencies: + "@bcoe/v8-coverage" "^0.2.3" + "@jest/console" "^25.5.0" + "@jest/test-result" "^25.5.0" + "@jest/transform" "^25.5.1" + "@jest/types" "^25.5.0" + chalk "^3.0.0" + collect-v8-coverage "^1.0.0" + exit "^0.1.2" + glob "^7.1.2" + graceful-fs "^4.2.4" + istanbul-lib-coverage "^3.0.0" + istanbul-lib-instrument "^4.0.0" + istanbul-lib-report "^3.0.0" + istanbul-lib-source-maps "^4.0.0" + istanbul-reports "^3.0.2" + jest-haste-map "^25.5.1" + jest-resolve "^25.5.1" + jest-util "^25.5.0" + jest-worker "^25.5.0" + slash "^3.0.0" + source-map "^0.6.0" + string-length "^3.1.0" + terminal-link "^2.0.0" + v8-to-istanbul "^4.1.3" + optionalDependencies: + node-notifier "^6.0.0" + +"@jest/source-map@^24.9.0": + version "24.9.0" + resolved "https://registry.npmjs.org/@jest/source-map/-/source-map-24.9.0.tgz#0e263a94430be4b41da683ccc1e6bffe2a191714" + integrity sha512-/Xw7xGlsZb4MJzNDgB7PW5crou5JqWiBQaz6xyPd3ArOg2nfn/PunV8+olXbbEZzNl591o5rWKE9BRDaFAuIBg== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" + callsites "^3.0.0" + graceful-fs "^4.1.15" + source-map "^0.6.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== +"@jest/source-map@^25.5.0": + version "25.5.0" + resolved "https://registry.npmjs.org/@jest/source-map/-/source-map-25.5.0.tgz#df5c20d6050aa292c2c6d3f0d2c7606af315bd1b" + integrity sha512-eIGx0xN12yVpMcPaVpjXPnn3N30QGJCJQSkEDUt9x1fI1Gdvb07Ml6K5iN2hG7NmMP6FDmtPEssE3z6doOYUwQ== dependencies: - "@babel/helper-module-transforms" "^7.1.0" - "@babel/helper-plugin-utils" "^7.0.0" + callsites "^3.0.0" + graceful-fs "^4.2.4" + source-map "^0.6.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" - integrity sha512-V6y0uaUQrQPXUrmj+hgnks8va2L0zcZymeU7TtWEgdRLNkceafKXEduv7QzgQAE4lT+suwooG9dC7LFhdRAbVQ== +"@jest/test-result@^24.9.0": + version "24.9.0" + resolved "https://registry.npmjs.org/@jest/test-result/-/test-result-24.9.0.tgz#11796e8aa9dbf88ea025757b3152595ad06ba0ca" + integrity sha512-XEFrHbBonBJ8dGp2JmF8kP/nQI/ImPpygKHwQ/SY+es59Z3L5PI4Qb9TQQMAEeYsThG1xF0k6tmG0tIKATNiiA== + dependencies: + "@jest/console" "^24.9.0" + "@jest/types" "^24.9.0" + "@types/istanbul-lib-coverage" "^2.0.0" + +"@jest/test-result@^25.5.0": + version "25.5.0" + resolved "https://registry.npmjs.org/@jest/test-result/-/test-result-25.5.0.tgz#139a043230cdeffe9ba2d8341b27f2efc77ce87c" + integrity sha512-oV+hPJgXN7IQf/fHWkcS99y0smKLU2czLBJ9WA0jHITLst58HpQMtzSYxzaBvYc6U5U6jfoMthqsUlUlbRXs0A== + dependencies: + "@jest/console" "^25.5.0" + "@jest/types" "^25.5.0" + "@types/istanbul-lib-coverage" "^2.0.0" + collect-v8-coverage "^1.0.0" + +"@jest/test-sequencer@^25.5.4": + version "25.5.4" + resolved "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-25.5.4.tgz#9b4e685b36954c38d0f052e596d28161bdc8b737" + integrity sha512-pTJGEkSeg1EkCO2YWq6hbFvKNXk8ejqlxiOg1jBNLnWrgXOkdY6UmqZpwGFXNnRt9B8nO1uWMzLLZ4eCmhkPNA== + dependencies: + "@jest/test-result" "^25.5.0" + graceful-fs "^4.2.4" + jest-haste-map "^25.5.1" + jest-runner "^25.5.4" + jest-runtime "^25.5.4" + +"@jest/transform@^25.5.1": + version "25.5.1" + resolved "https://registry.npmjs.org/@jest/transform/-/transform-25.5.1.tgz#0469ddc17699dd2bf985db55fa0fb9309f5c2db3" + integrity sha512-Y8CEoVwXb4QwA6Y/9uDkn0Xfz0finGkieuV0xkdF9UtZGJeLukD5nLkaVrVsODB1ojRWlaoD0AJZpVHCSnJEvg== dependencies: - "@babel/helper-module-transforms" "^7.1.0" - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-simple-access" "^7.1.0" + "@babel/core" "^7.1.0" + "@jest/types" "^25.5.0" + babel-plugin-istanbul "^6.0.0" + chalk "^3.0.0" + convert-source-map "^1.4.0" + fast-json-stable-stringify "^2.0.0" + graceful-fs "^4.2.4" + jest-haste-map "^25.5.1" + jest-regex-util "^25.2.6" + jest-util "^25.5.0" + micromatch "^4.0.2" + pirates "^4.0.1" + realpath-native "^2.0.0" + slash "^3.0.0" + source-map "^0.6.1" + write-file-atomic "^3.0.0" + +"@jest/types@^24.9.0": + version "24.9.0" + resolved "https://registry.npmjs.org/@jest/types/-/types-24.9.0.tgz#63cb26cb7500d069e5a389441a7c6ab5e909fc59" + integrity sha512-XKK7ze1apu5JWQ5eZjHITP66AX+QsLlbaJRBGYr8pNzwcAE2JVkwnf0yqjHTsDRcjR0mujy/NmZMXw5kl+kGBw== + dependencies: + "@types/istanbul-lib-coverage" "^2.0.0" + "@types/istanbul-reports" "^1.1.1" + "@types/yargs" "^13.0.0" + +"@jest/types@^25.5.0": + version "25.5.0" + resolved "https://registry.npmjs.org/@jest/types/-/types-25.5.0.tgz#4d6a4793f7b9599fc3680877b856a97dbccf2a9d" + integrity sha512-OXD0RgQ86Tu3MazKo8bnrkDRaDXXMGUqd+kTtLtK1Zb7CRzQcaSRPPPV37SvYTdevXEBVxe0HXylEjs8ibkmCw== + dependencies: + "@types/istanbul-lib-coverage" "^2.0.0" + "@types/istanbul-reports" "^1.1.1" + "@types/yargs" "^15.0.0" + chalk "^3.0.0" + +"@jest/types@^26.6.2": + version "26.6.2" + resolved "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz#bef5a532030e1d88a2f5a6d933f84e97226ed48e" + integrity sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ== + dependencies: + "@types/istanbul-lib-coverage" "^2.0.0" + "@types/istanbul-reports" "^3.0.0" + "@types/node" "*" + "@types/yargs" "^15.0.0" + chalk "^4.0.0" -"@babel/plugin-transform-modules-commonjs@^7.0.0", "@babel/plugin-transform-modules-commonjs@^7.2.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.4.0.tgz#3b8ec61714d3b75d20c5ccfa157f2c2e087fd4ca" - integrity sha512-iWKAooAkipG7g1IY0eah7SumzfnIT3WNhT4uYB2kIsvHnNSB6MDYVa5qyICSwaTBDBY2c4SnJ3JtEa6ltJd6Jw== +"@juggle/resize-observer@^3.1.3": + version "3.2.0" + resolved "https://registry.npmjs.org/@juggle/resize-observer/-/resize-observer-3.2.0.tgz#5e0b448d27fe3091bae6216456512c5904d05661" + integrity sha512-fsLxt0CHx2HCV9EL8lDoVkwHffsA0snUpddYjdLyXcG5E41xaamn9ZyQqOE9TUJdrRlH8/hjIf+UdOdDeKCUgg== + +"@lerna/add@3.15.0": + version "3.15.0" + resolved "https://registry.npmjs.org/@lerna/add/-/add-3.15.0.tgz#10be562f43cde59b60f299083d54ac39520ec60a" + integrity sha512-+KrG4GFy/6FISZ+DwWf5Fj5YB4ESa4VTnSn/ujf3VEda6dxngHPN629j+TcPbsdOxUYVah+HuZbC/B8NnkrKpQ== + dependencies: + "@evocateur/pacote" "^9.6.0" + "@lerna/bootstrap" "3.15.0" + "@lerna/command" "3.15.0" + "@lerna/filter-options" "3.14.2" + "@lerna/npm-conf" "3.13.0" + "@lerna/validation-error" "3.13.0" + dedent "^0.7.0" + npm-package-arg "^6.1.0" + p-map "^1.2.0" + semver "^5.5.0" + +"@lerna/batch-packages@3.14.0": + version "3.14.0" + resolved "https://registry.npmjs.org/@lerna/batch-packages/-/batch-packages-3.14.0.tgz#0208663bab3ddbf57956b370aaec4c9ebee6c800" + integrity sha512-RlBkQVNTqk1qvn6PFWiWNiskllUHh6tXbTVm43mZRNd+vhAyvrQC8RWJxH0ECVvnFAt9rSNGRIVbEJ31WnNQLg== + dependencies: + "@lerna/package-graph" "3.14.0" + npmlog "^4.1.2" + +"@lerna/bootstrap@3.15.0": + version "3.15.0" + resolved "https://registry.npmjs.org/@lerna/bootstrap/-/bootstrap-3.15.0.tgz#f53e0bbbbfb8367e609a06378409bfc673ff2930" + integrity sha512-4AxsPKKbgj2Ju03qDddQTpOHvpqnwd0yaiEU/aCcWv/4tDTe79NqUne2Z3+P2WZY0Zzb8+nUKcskwYBMTeq+Mw== + dependencies: + "@lerna/batch-packages" "3.14.0" + "@lerna/command" "3.15.0" + "@lerna/filter-options" "3.14.2" + "@lerna/has-npm-version" "3.14.2" + "@lerna/npm-install" "3.14.2" + "@lerna/package-graph" "3.14.0" + "@lerna/pulse-till-done" "3.13.0" + "@lerna/rimraf-dir" "3.14.2" + "@lerna/run-lifecycle" "3.14.0" + "@lerna/run-parallel-batches" "3.13.0" + "@lerna/symlink-binary" "3.14.2" + "@lerna/symlink-dependencies" "3.14.2" + "@lerna/validation-error" "3.13.0" + dedent "^0.7.0" + get-port "^3.2.0" + multimatch "^2.1.0" + npm-package-arg "^6.1.0" + npmlog "^4.1.2" + p-finally "^1.0.0" + p-map "^1.2.0" + p-map-series "^1.0.0" + p-waterfall "^1.0.0" + read-package-tree "^5.1.6" + semver "^5.5.0" + +"@lerna/changed@3.15.0": + version "3.15.0" + resolved "https://registry.npmjs.org/@lerna/changed/-/changed-3.15.0.tgz#20db9d992d697e4288c260aa38b989dcb93f4b40" + integrity sha512-Hns1ssI9T9xOTGVc7PT2jUaqzsSkxV3hV/Y7iFO0uKTk+fduyTwGTHU9A/ybQ/xi/9iaJbvaXyjxKiGoEnzmhg== dependencies: - "@babel/helper-module-transforms" "^7.1.0" - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-simple-access" "^7.1.0" + "@lerna/collect-updates" "3.14.2" + "@lerna/command" "3.15.0" + "@lerna/listable" "3.14.0" + "@lerna/output" "3.13.0" + "@lerna/version" "3.15.0" -"@babel/plugin-transform-modules-systemjs@^7.2.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.4.0.tgz#c2495e55528135797bc816f5d50f851698c586a1" - integrity sha512-gjPdHmqiNhVoBqus5qK60mWPp1CmYWp/tkh11mvb0rrys01HycEGD7NvvSoKXlWEfSM9TcL36CpsK8ElsADptQ== +"@lerna/check-working-tree@3.14.2": + version "3.14.2" + resolved "https://registry.npmjs.org/@lerna/check-working-tree/-/check-working-tree-3.14.2.tgz#5ce007722180a69643a8456766ed8a91fc7e9ae1" + integrity sha512-7safqxM/MYoAoxZxulUDtIJIbnBIgo0PB/FHytueG+9VaX7GMnDte2Bt1EKa0dz2sAyQdmQ3Q8ZXpf/6JDjaeg== dependencies: - "@babel/helper-hoist-variables" "^7.4.0" - "@babel/helper-plugin-utils" "^7.0.0" + "@lerna/collect-uncommitted" "3.14.2" + "@lerna/describe-ref" "3.14.2" + "@lerna/validation-error" "3.13.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== +"@lerna/child-process@3.14.2": + version "3.14.2" + resolved "https://registry.npmjs.org/@lerna/child-process/-/child-process-3.14.2.tgz#950240cba83f7dfe25247cfa6c9cebf30b7d94f6" + integrity sha512-xnq+W5yQb6RkwI0p16ZQnrn6HkloH/MWTw4lGE1nKsBLAUbmSU5oTE93W1nrG0X3IMF/xWc9UYvNdUGMWvZZ4w== dependencies: - "@babel/helper-module-transforms" "^7.1.0" - "@babel/helper-plugin-utils" "^7.0.0" + chalk "^2.3.1" + execa "^1.0.0" + strong-log-transformer "^2.0.0" + +"@lerna/clean@3.15.0": + version "3.15.0" + resolved "https://registry.npmjs.org/@lerna/clean/-/clean-3.15.0.tgz#a94da50908a80ba443a0a682706aca79ac2ecf27" + integrity sha512-D1BN7BnJk6YjrSR7E7RiCmWiFVWDo3L+OSe6zDq6rNNYexPBtSi2JOCeF/Dibi3jd2luVu0zkVpUtuEEdPiD+A== + dependencies: + "@lerna/command" "3.15.0" + "@lerna/filter-options" "3.14.2" + "@lerna/prompt" "3.13.0" + "@lerna/pulse-till-done" "3.13.0" + "@lerna/rimraf-dir" "3.14.2" + p-map "^1.2.0" + p-map-series "^1.0.0" + p-waterfall "^1.0.0" + +"@lerna/cli@3.13.0": + version "3.13.0" + resolved "https://registry.npmjs.org/@lerna/cli/-/cli-3.13.0.tgz#3d7b357fdd7818423e9681a7b7f2abd106c8a266" + integrity sha512-HgFGlyCZbYaYrjOr3w/EsY18PdvtsTmDfpUQe8HwDjXlPeCCUgliZjXLOVBxSjiOvPeOSwvopwIHKWQmYbwywg== + dependencies: + "@lerna/global-options" "3.13.0" + dedent "^0.7.0" + npmlog "^4.1.2" + yargs "^12.0.1" + +"@lerna/collect-uncommitted@3.14.2": + version "3.14.2" + resolved "https://registry.npmjs.org/@lerna/collect-uncommitted/-/collect-uncommitted-3.14.2.tgz#b5ed00d800bea26bb0d18404432b051eee8d030e" + integrity sha512-4EkQu4jIOdNL2BMzy/N0ydHB8+Z6syu6xiiKXOoFl0WoWU9H1jEJCX4TH7CmVxXL1+jcs8FIS2pfQz4oew99Eg== + dependencies: + "@lerna/child-process" "3.14.2" + chalk "^2.3.1" + figgy-pudding "^3.5.1" + npmlog "^4.1.2" -"@babel/plugin-transform-named-capturing-groups-regex@^7.3.0": - version "7.4.2" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.4.2.tgz#800391136d6cbcc80728dbdba3c1c6e46f86c12e" - integrity sha512-NsAuliSwkL3WO2dzWTOL1oZJHm0TM8ZY8ZSxk2ANyKkt5SQlToGA4pzctmq1BEjoacurdwZ3xp2dCQWJkME0gQ== +"@lerna/collect-updates@3.14.2": + version "3.14.2" + resolved "https://registry.npmjs.org/@lerna/collect-updates/-/collect-updates-3.14.2.tgz#396201f6568ec5916bf2c11e7a29b0931fcd3e5b" + integrity sha512-+zSQ2ZovH8Uc0do5dR+sk8VvRJc6Xl+ZnJJGESIl17KSpEw/lVjcOyt6f3BP+WHn+iSOjMWcGvUVA601FIEdZw== dependencies: - regexp-tree "^0.1.0" + "@lerna/child-process" "3.14.2" + "@lerna/describe-ref" "3.14.2" + minimatch "^3.0.4" + npmlog "^4.1.2" + slash "^1.0.0" + +"@lerna/command@3.15.0": + version "3.15.0" + resolved "https://registry.npmjs.org/@lerna/command/-/command-3.15.0.tgz#e1dc1319054f1cf0b135aa0c5730f3335641a0ca" + integrity sha512-dZqr4rKFN+veuXakIQ1DcGUpzBgcWKaYFNN4O6/skOdVQaEfGefzo1sZET+q7k/BkypxkhXHXpv5UqqSuL/EHQ== + dependencies: + "@lerna/child-process" "3.14.2" + "@lerna/package-graph" "3.14.0" + "@lerna/project" "3.15.0" + "@lerna/validation-error" "3.13.0" + "@lerna/write-log-file" "3.13.0" + dedent "^0.7.0" + execa "^1.0.0" + is-ci "^1.0.10" + lodash "^4.17.5" + npmlog "^4.1.2" + +"@lerna/conventional-commits@3.14.0": + version "3.14.0" + resolved "https://registry.npmjs.org/@lerna/conventional-commits/-/conventional-commits-3.14.0.tgz#24f643550dc29d4f1249cc26d0eb453d7a1c513d" + integrity sha512-hGZ2qQZ9uEGf2eeIiIpEodSs9Qkkf/2uYEtNT7QN1RYISPUh6/lKGBssc5dpbCF64aEuxmemWLdlDf1ogG6++w== + dependencies: + "@lerna/validation-error" "3.13.0" + conventional-changelog-angular "^5.0.3" + conventional-changelog-core "^3.1.6" + conventional-recommended-bump "^4.0.4" + fs-extra "^7.0.0" + get-stream "^4.0.0" + npm-package-arg "^6.1.0" + npmlog "^4.1.2" + pify "^3.0.0" + semver "^5.5.0" -"@babel/plugin-transform-new-target@^7.0.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.4.0.tgz#67658a1d944edb53c8d4fa3004473a0dd7838150" - integrity sha512-6ZKNgMQmQmrEX/ncuCwnnw1yVGoaOW5KpxNhoWI7pCQdA0uZ0HqHGqenCUIENAnxRjy2WwNQ30gfGdIgqJXXqw== +"@lerna/create-symlink@3.14.0": + version "3.14.0" + resolved "https://registry.npmjs.org/@lerna/create-symlink/-/create-symlink-3.14.0.tgz#f40ae06e8cebe70c694368ebf9a4af5ab380fbea" + integrity sha512-Kw51HYOOi6UfCKncqkgEU1k/SYueSBXgkNL91FR8HAZH7EPSRTEtp9mnJo568g0+Hog5C+3cOaWySwhHpRG29A== + dependencies: + cmd-shim "^2.0.2" + fs-extra "^7.0.0" + npmlog "^4.1.2" + +"@lerna/create@3.15.0": + version "3.15.0" + resolved "https://registry.npmjs.org/@lerna/create/-/create-3.15.0.tgz#27bfadcbdf71d34226aa82432293f5290f7ab1aa" + integrity sha512-doXGt0HTwTQl8GkC2tOrraA/5OWbz35hJqi7Dsl3Fl0bAxiv9XmF3LykHFJ+YTDHfGpdoJ8tKu66f/VKP16G0w== + dependencies: + "@evocateur/pacote" "^9.6.0" + "@lerna/child-process" "3.14.2" + "@lerna/command" "3.15.0" + "@lerna/npm-conf" "3.13.0" + "@lerna/validation-error" "3.13.0" + camelcase "^5.0.0" + dedent "^0.7.0" + fs-extra "^7.0.0" + globby "^8.0.1" + init-package-json "^1.10.3" + npm-package-arg "^6.1.0" + p-reduce "^1.0.0" + pify "^3.0.0" + semver "^5.5.0" + slash "^1.0.0" + validate-npm-package-license "^3.0.3" + validate-npm-package-name "^3.0.0" + whatwg-url "^7.0.0" + +"@lerna/describe-ref@3.14.2": + version "3.14.2" + resolved "https://registry.npmjs.org/@lerna/describe-ref/-/describe-ref-3.14.2.tgz#edc3c973f5ca9728d23358c4f4d3b55a21f65be5" + integrity sha512-qa5pzDRK2oBQXNjyRmRnN7E8a78NMYfQjjlRFB0KNHMsT6mCiL9+8kIS39sSE2NqT8p7xVNo2r2KAS8R/m3CoQ== + dependencies: + "@lerna/child-process" "3.14.2" + npmlog "^4.1.2" + +"@lerna/diff@3.15.0": + version "3.15.0" + resolved "https://registry.npmjs.org/@lerna/diff/-/diff-3.15.0.tgz#573d6f58f6809d16752dcfab74c5e286b6678371" + integrity sha512-N1Pr0M554Bt+DlVoD+DXWGh92gcq6G9icn8sH5GSqfwi0XCpPNJ2i1BNEZpUQ6ulLWOMa1YHR4PypPxecRGBjA== + dependencies: + "@lerna/child-process" "3.14.2" + "@lerna/command" "3.15.0" + "@lerna/validation-error" "3.13.0" + npmlog "^4.1.2" + +"@lerna/exec@3.15.0": + version "3.15.0" + resolved "https://registry.npmjs.org/@lerna/exec/-/exec-3.15.0.tgz#b31510f47255367eb0d3e4a4f7b6ef8f7e41b985" + integrity sha512-YuXPd64TNG9wbb3lRvyMARQbdlbMZ1bJZ+GCm0enivnIWUyg0qtBDcfPY2dWpIgOif04zx+K/gmOX4lCaGM4UQ== + dependencies: + "@lerna/child-process" "3.14.2" + "@lerna/command" "3.15.0" + "@lerna/filter-options" "3.14.2" + "@lerna/run-topologically" "3.14.0" + "@lerna/validation-error" "3.13.0" + p-map "^1.2.0" + +"@lerna/filter-options@3.14.2": + version "3.14.2" + resolved "https://registry.npmjs.org/@lerna/filter-options/-/filter-options-3.14.2.tgz#7ba91cb54ff3fd9f4650ad8d7c40bc1075e44c2d" + integrity sha512-Ct8oYvRttbYB9JalngHhirb8o9ZVyLm5a9MpXNevXoHiu6j0vNhI19BQCwNnrL6wZvEHJnzPuUl/jO23tWxemg== + dependencies: + "@lerna/collect-updates" "3.14.2" + "@lerna/filter-packages" "3.13.0" + dedent "^0.7.0" + +"@lerna/filter-packages@3.13.0": + version "3.13.0" + resolved "https://registry.npmjs.org/@lerna/filter-packages/-/filter-packages-3.13.0.tgz#f5371249e7e1a15928e5e88c544a242e0162c21c" + integrity sha512-RWiZWyGy3Mp7GRVBn//CacSnE3Kw82PxE4+H6bQ3pDUw/9atXn7NRX+gkBVQIYeKamh7HyumJtyOKq3Pp9BADQ== + dependencies: + "@lerna/validation-error" "3.13.0" + multimatch "^2.1.0" + npmlog "^4.1.2" + +"@lerna/get-npm-exec-opts@3.13.0": + version "3.13.0" + resolved "https://registry.npmjs.org/@lerna/get-npm-exec-opts/-/get-npm-exec-opts-3.13.0.tgz#d1b552cb0088199fc3e7e126f914e39a08df9ea5" + integrity sha512-Y0xWL0rg3boVyJk6An/vurKzubyJKtrxYv2sj4bB8Mc5zZ3tqtv0ccbOkmkXKqbzvNNF7VeUt1OJ3DRgtC/QZw== + dependencies: + npmlog "^4.1.2" + +"@lerna/get-packed@3.13.0": + version "3.13.0" + resolved "https://registry.npmjs.org/@lerna/get-packed/-/get-packed-3.13.0.tgz#335e40d77f3c1855aa248587d3e0b2d8f4b06e16" + integrity sha512-EgSim24sjIjqQDC57bgXD9l22/HCS93uQBbGpkzEOzxAVzEgpZVm7Fm1t8BVlRcT2P2zwGnRadIvxTbpQuDPTg== + dependencies: + fs-extra "^7.0.0" + ssri "^6.0.1" + tar "^4.4.8" + +"@lerna/github-client@3.14.2": + version "3.14.2" + resolved "https://registry.npmjs.org/@lerna/github-client/-/github-client-3.14.2.tgz#a743792b51cd9bdfb785186e429568827a6372eb" + integrity sha512-+2Xh7t4qVmXiXE2utPnh5T7YwSltG74JP7c+EiooRY5+3zjh9MpPOcTKxVY3xKclzpsyXMohk2KpTF4tzA5rrg== + dependencies: + "@lerna/child-process" "3.14.2" + "@octokit/plugin-enterprise-rest" "^2.1.1" + "@octokit/rest" "^16.16.0" + git-url-parse "^11.1.2" + npmlog "^4.1.2" + +"@lerna/gitlab-client@3.15.0": + version "3.15.0" + resolved "https://registry.npmjs.org/@lerna/gitlab-client/-/gitlab-client-3.15.0.tgz#91f4ec8c697b5ac57f7f25bd50fe659d24aa96a6" + integrity sha512-OsBvRSejHXUBMgwWQqNoioB8sgzL/Pf1pOUhHKtkiMl6aAWjklaaq5HPMvTIsZPfS6DJ9L5OK2GGZuooP/5c8Q== + dependencies: + node-fetch "^2.5.0" + npmlog "^4.1.2" + whatwg-url "^7.0.0" + +"@lerna/global-options@3.13.0": + version "3.13.0" + resolved "https://registry.npmjs.org/@lerna/global-options/-/global-options-3.13.0.tgz#217662290db06ad9cf2c49d8e3100ee28eaebae1" + integrity sha512-SlZvh1gVRRzYLVluz9fryY1nJpZ0FHDGB66U9tFfvnnxmueckRQxLopn3tXj3NU1kc3QANT2I5BsQkOqZ4TEFQ== + +"@lerna/has-npm-version@3.14.2": + version "3.14.2" + resolved "https://registry.npmjs.org/@lerna/has-npm-version/-/has-npm-version-3.14.2.tgz#ac17f7c68e92114b8332b95ae6cffec9c0d67a7b" + integrity sha512-cG+z5bB8JPd5f+nT2eLN2LmKg06O11AxlnUxgw2W7cLyc7cnsmMSp/rxt2JBMwW2r4Yn+CLLJIRwJZ2Es8jFSw== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" + "@lerna/child-process" "3.14.2" + semver "^5.5.0" -"@babel/plugin-transform-object-assign@^7.0.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-assign/-/plugin-transform-object-assign-7.2.0.tgz#6fdeea42be17040f119e38e23ea0f49f31968bde" - integrity sha512-nmE55cZBPFgUktbF2OuoZgPRadfxosLOpSgzEPYotKSls9J4pEPcembi8r78RU37Rph6UApCpNmsQA4QMWK9Ng== +"@lerna/import@3.15.0": + version "3.15.0" + resolved "https://registry.npmjs.org/@lerna/import/-/import-3.15.0.tgz#47f2da52059a96bb08a4c09e18d985258fce9ce1" + integrity sha512-4GKQgeTXBTwMbZNkYyPdQIVA41HIISD7D6XRNrDaG0falUfvoPsknijQPCBmGqeh66u1Fcn2+4lkL3OCTj2FMg== + dependencies: + "@lerna/child-process" "3.14.2" + "@lerna/command" "3.15.0" + "@lerna/prompt" "3.13.0" + "@lerna/pulse-till-done" "3.13.0" + "@lerna/validation-error" "3.13.0" + dedent "^0.7.0" + fs-extra "^7.0.0" + p-map-series "^1.0.0" + +"@lerna/init@3.15.0": + version "3.15.0" + resolved "https://registry.npmjs.org/@lerna/init/-/init-3.15.0.tgz#bda36de44c365972f87cbd287fe85b6fb7bb1070" + integrity sha512-VOqH6kFbFtfUbXxhSqXKY6bjnVp9nLuLRI6x9tVHOANX2LmSlXm17OUGBnNt+eM4uJLuiUsAR8nTlpCiz//lPQ== + dependencies: + "@lerna/child-process" "3.14.2" + "@lerna/command" "3.15.0" + fs-extra "^7.0.0" + p-map "^1.2.0" + write-json-file "^2.3.0" + +"@lerna/link@3.15.0": + version "3.15.0" + resolved "https://registry.npmjs.org/@lerna/link/-/link-3.15.0.tgz#718b4116a8eacb3fc73414ae8d97f8fdaf8125da" + integrity sha512-yKHuifADINobvDOLljBGkVGpVwy6J3mg5p9lQXBdOLXBoIKC8o/UKBR9JvZMFvT/Iy6zn6FPy1v5lz9iU1Ib0Q== + dependencies: + "@lerna/command" "3.15.0" + "@lerna/package-graph" "3.14.0" + "@lerna/symlink-dependencies" "3.14.2" + p-map "^1.2.0" + slash "^1.0.0" + +"@lerna/list@3.15.0": + version "3.15.0" + resolved "https://registry.npmjs.org/@lerna/list/-/list-3.15.0.tgz#4e401c1ad990bb12bd38298cb61d21136420ff68" + integrity sha512-8SvxnlfAnbEzQDf2NL0IxWyUuqWTykF9cHt5/f5TOzgESClpaOkDtqwh/UlE8nVTzWMnxnQUPQi3UTKyJD3i3g== + dependencies: + "@lerna/command" "3.15.0" + "@lerna/filter-options" "3.14.2" + "@lerna/listable" "3.14.0" + "@lerna/output" "3.13.0" + +"@lerna/listable@3.14.0": + version "3.14.0" + resolved "https://registry.npmjs.org/@lerna/listable/-/listable-3.14.0.tgz#08f4c78e0466568e8e8a57d4ad09537f2bb7bbb9" + integrity sha512-ZK44Mo8xf/N97eQZ236SPSq0ek6+gk4HqHIx05foEMZVV1iIDH4a/nblLsJNjGQVsIdMYFPaqNJ0z+ZQfiJazQ== + dependencies: + "@lerna/query-graph" "3.14.0" + chalk "^2.3.1" + columnify "^1.5.4" + +"@lerna/log-packed@3.13.0": + version "3.13.0" + resolved "https://registry.npmjs.org/@lerna/log-packed/-/log-packed-3.13.0.tgz#497b5f692a8d0e3f669125da97b0dadfd9e480f3" + integrity sha512-Rmjrcz+6aM6AEcEVWmurbo8+AnHOvYtDpoeMMJh9IZ9SmZr2ClXzmD7wSvjTQc8BwOaiWjjC/ukcT0UYA2m7wg== + dependencies: + byte-size "^4.0.3" + columnify "^1.5.4" + has-unicode "^2.0.1" + npmlog "^4.1.2" + +"@lerna/npm-conf@3.13.0": + version "3.13.0" + resolved "https://registry.npmjs.org/@lerna/npm-conf/-/npm-conf-3.13.0.tgz#6b434ed75ff757e8c14381b9bbfe5d5ddec134a7" + integrity sha512-Jg2kANsGnhg+fbPEzE0X9nX5oviEAvWj0nYyOkcE+cgWuT7W0zpnPXC4hA4C5IPQGhwhhh0IxhWNNHtjTuw53g== + dependencies: + config-chain "^1.1.11" + pify "^3.0.0" + +"@lerna/npm-dist-tag@3.15.0": + version "3.15.0" + resolved "https://registry.npmjs.org/@lerna/npm-dist-tag/-/npm-dist-tag-3.15.0.tgz#262dd1e67a4cf82ae78fadfe02622ebce4add078" + integrity sha512-lnbdwc4Ebs7/EI9fTIgbH3dxXnP+SuCcGhG7P5ZjOqo67SY09sRZGcygEzabpvIwXvKpBF8vCd4xxzjnF2u+PA== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" + "@evocateur/npm-registry-fetch" "^3.9.1" + "@lerna/otplease" "3.14.0" + figgy-pudding "^3.5.1" + npm-package-arg "^6.1.0" + npmlog "^4.1.2" + +"@lerna/npm-install@3.14.2": + version "3.14.2" + resolved "https://registry.npmjs.org/@lerna/npm-install/-/npm-install-3.14.2.tgz#fd22ff432f8b7cbe05bedfd36b0506482f1a4732" + integrity sha512-JYJJRtLETrGpcQZa8Rj16vbye399RqnaXmJlZuZ2twjJ2DYVYtwkfsGEOdvdaKw5KVOEpWcAxBA9OMmKQtCLQw== + dependencies: + "@lerna/child-process" "3.14.2" + "@lerna/get-npm-exec-opts" "3.13.0" + fs-extra "^7.0.0" + npm-package-arg "^6.1.0" + npmlog "^4.1.2" + signal-exit "^3.0.2" + write-pkg "^3.1.0" -"@babel/plugin-transform-object-super@^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== +"@lerna/npm-publish@3.15.0": + version "3.15.0" + resolved "https://registry.npmjs.org/@lerna/npm-publish/-/npm-publish-3.15.0.tgz#89126d74ec97186475767b852954a5f55b732a71" + integrity sha512-G7rcNcSGjG0La8eHPXDvCvoNXbwNnP6XJ+GPh3CH5xiR/nikfLOa+Bfm4ytdjVWWxnKfCT4qyMTCoV1rROlqQQ== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-replace-supers" "^7.1.0" + "@evocateur/libnpmpublish" "^1.2.0" + "@lerna/otplease" "3.14.0" + "@lerna/run-lifecycle" "3.14.0" + figgy-pudding "^3.5.1" + fs-extra "^7.0.0" + npm-package-arg "^6.1.0" + npmlog "^4.1.2" + pify "^3.0.0" + read-package-json "^2.0.13" -"@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" - integrity sha512-kB9+hhUidIgUoBQ0MsxMewhzr8i60nMa2KgeJKQWYrqQpqcBYtnpR+JgkadZVZoaEZ/eKu9mclFaVwhRpLNSzA== +"@lerna/npm-run-script@3.14.2": + version "3.14.2" + resolved "https://registry.npmjs.org/@lerna/npm-run-script/-/npm-run-script-3.14.2.tgz#8c518ea9d241a641273e77aad6f6fddc16779c3f" + integrity sha512-LbVFv+nvAoRTYLMrJlJ8RiakHXrLslL7Jp/m1R18vYrB8LYWA3ey+nz5Tel2OELzmjUiemAKZsD9h6i+Re5egg== dependencies: - "@babel/helper-call-delegate" "^7.1.0" - "@babel/helper-get-function-arity" "^7.0.0" - "@babel/helper-plugin-utils" "^7.0.0" + "@lerna/child-process" "3.14.2" + "@lerna/get-npm-exec-opts" "3.13.0" + npmlog "^4.1.2" -"@babel/plugin-transform-parameters@^7.0.0", "@babel/plugin-transform-parameters@^7.2.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.4.0.tgz#a1309426fac4eecd2a9439a4c8c35124a11a48a9" - integrity sha512-Xqv6d1X+doyiuCGDoVJFtlZx0onAX0tnc3dY8w71pv/O0dODAbusVv2Ale3cGOwfiyi895ivOBhYa9DhAM8dUA== +"@lerna/otplease@3.14.0": + version "3.14.0" + resolved "https://registry.npmjs.org/@lerna/otplease/-/otplease-3.14.0.tgz#b539fd3e7a08452fc0db3b10010ca3cf0e4a73e7" + integrity sha512-rYAWzaYZ81bwnrmTkYWGgcc13bl/6DlG7pjWQWNGAJNLzO5zzj0xmXN5sMFJnNvDpSiS/ZS1sIuPvb4xnwLUkg== dependencies: - "@babel/helper-call-delegate" "^7.4.0" - "@babel/helper-get-function-arity" "^7.0.0" - "@babel/helper-plugin-utils" "^7.0.0" + "@lerna/prompt" "3.13.0" + figgy-pudding "^3.5.1" -"@babel/plugin-transform-property-literals@^7.0.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== +"@lerna/output@3.13.0": + version "3.13.0" + resolved "https://registry.npmjs.org/@lerna/output/-/output-3.13.0.tgz#3ded7cc908b27a9872228a630d950aedae7a4989" + integrity sha512-7ZnQ9nvUDu/WD+bNsypmPG5MwZBwu86iRoiW6C1WBuXXDxM5cnIAC1m2WxHeFnjyMrYlRXM9PzOQ9VDD+C15Rg== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" + npmlog "^4.1.2" -"@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== +"@lerna/pack-directory@3.14.2": + version "3.14.2" + resolved "https://registry.npmjs.org/@lerna/pack-directory/-/pack-directory-3.14.2.tgz#577b8ebf867c9b636a2e4659a27552ee24d83b9d" + integrity sha512-b3LnJEmIml3sDj94TQT8R+kVyrDlmE7Su0WwcBYZDySXPMSZ38WA2/2Xjy/EWhXlFxp/nUJKyUG78nDrZ/00Uw== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" + "@lerna/get-packed" "3.13.0" + "@lerna/package" "3.14.2" + "@lerna/run-lifecycle" "3.14.0" + figgy-pudding "^3.5.1" + npm-packlist "^1.4.1" + npmlog "^4.1.2" + tar "^4.4.8" + temp-write "^3.4.0" + +"@lerna/package-graph@3.14.0": + version "3.14.0" + resolved "https://registry.npmjs.org/@lerna/package-graph/-/package-graph-3.14.0.tgz#4ccdf446dccedfbbeb4efff3eb720cb6fcb109fc" + integrity sha512-dNpA/64STD5YXhaSlg4gT6Z474WPJVCHoX1ibsVIFu0fVgH609Y69bsdmbvTRdI7r6Dcu4ZfGxdR636RTrH+Eg== + dependencies: + "@lerna/prerelease-id-from-version" "3.14.0" + "@lerna/validation-error" "3.13.0" + npm-package-arg "^6.1.0" + npmlog "^4.1.2" + semver "^5.5.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== +"@lerna/package@3.14.2": + version "3.14.2" + resolved "https://registry.npmjs.org/@lerna/package/-/package-3.14.2.tgz#f893cb42e26c869df272dafbe1dd5a3473b0bd4d" + integrity sha512-YR/+CzYdufJYfsUlrfuhTjA35iSZpXK7mVOZmeR9iRWhSaqesm4kq2zfxm9vCpZV2oAQQZOwi4eo5h0rQBtdiw== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-syntax-jsx" "^7.2.0" + load-json-file "^4.0.0" + npm-package-arg "^6.1.0" + write-pkg "^3.1.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== +"@lerna/prerelease-id-from-version@3.14.0": + version "3.14.0" + resolved "https://registry.npmjs.org/@lerna/prerelease-id-from-version/-/prerelease-id-from-version-3.14.0.tgz#d5da9c26ac4a0d0ecde09018f06e41ca4dd444c2" + integrity sha512-Ap3Z/dNhqQuSrKmK+JmzYvQYI2vowxHvUVxZJiDVilW8dyNnxkCsYFmkuZytk5sxVz4VeGLNPS2RSsU5eeSS+Q== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-syntax-jsx" "^7.2.0" + semver "^5.5.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== +"@lerna/project@3.15.0": + version "3.15.0" + resolved "https://registry.npmjs.org/@lerna/project/-/project-3.15.0.tgz#733b0993a849dcf5b68fcd0ec11d8f7de38a6999" + integrity sha512-eNGUWiMbQ9kh9kGkomtMnsLypS0rfLqxKgZP2+VnNVtIXjnLv4paeTm+1lkL+naNJUwhnpMk2NSLEeoxT/20QA== dependencies: - "@babel/helper-builder-react-jsx" "^7.3.0" - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-syntax-jsx" "^7.2.0" + "@lerna/package" "3.14.2" + "@lerna/validation-error" "3.13.0" + cosmiconfig "^5.1.0" + dedent "^0.7.0" + dot-prop "^4.2.0" + glob-parent "^3.1.0" + globby "^8.0.1" + load-json-file "^4.0.0" + npmlog "^4.1.2" + p-map "^1.2.0" + resolve-from "^4.0.0" + write-json-file "^2.3.0" + +"@lerna/prompt@3.13.0": + version "3.13.0" + resolved "https://registry.npmjs.org/@lerna/prompt/-/prompt-3.13.0.tgz#53571462bb3f5399cc1ca6d335a411fe093426a5" + integrity sha512-P+lWSFokdyvYpkwC3it9cE0IF2U5yy2mOUbGvvE4iDb9K7TyXGE+7lwtx2thtPvBAfIb7O13POMkv7df03HJeA== + dependencies: + inquirer "^6.2.0" + npmlog "^4.1.2" + +"@lerna/publish@3.15.0": + version "3.15.0" + resolved "https://registry.npmjs.org/@lerna/publish/-/publish-3.15.0.tgz#54f93f8f0820d2d419d0b65df1eb55d8277090c9" + integrity sha512-6tRRBJ8olLSXfrUsR4f7vSfx0cT1oPi6/v06yI3afDSsUX6eQ3ooZh7gMY4RWmd+nM/IJHTUzhlKF6WhTvo+9g== + dependencies: + "@evocateur/libnpmaccess" "^3.1.0" + "@evocateur/npm-registry-fetch" "^3.9.1" + "@evocateur/pacote" "^9.6.0" + "@lerna/check-working-tree" "3.14.2" + "@lerna/child-process" "3.14.2" + "@lerna/collect-updates" "3.14.2" + "@lerna/command" "3.15.0" + "@lerna/describe-ref" "3.14.2" + "@lerna/log-packed" "3.13.0" + "@lerna/npm-conf" "3.13.0" + "@lerna/npm-dist-tag" "3.15.0" + "@lerna/npm-publish" "3.15.0" + "@lerna/output" "3.13.0" + "@lerna/pack-directory" "3.14.2" + "@lerna/prerelease-id-from-version" "3.14.0" + "@lerna/prompt" "3.13.0" + "@lerna/pulse-till-done" "3.13.0" + "@lerna/run-lifecycle" "3.14.0" + "@lerna/run-topologically" "3.14.0" + "@lerna/validation-error" "3.13.0" + "@lerna/version" "3.15.0" + figgy-pudding "^3.5.1" + fs-extra "^7.0.0" + npm-package-arg "^6.1.0" + npmlog "^4.1.2" + p-finally "^1.0.0" + p-map "^1.2.0" + p-pipe "^1.2.0" + semver "^5.5.0" -"@babel/plugin-transform-regenerator@^7.0.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.4.0.tgz#0780e27ee458cc3fdbad18294d703e972ae1f6d1" - integrity sha512-SZ+CgL4F0wm4npojPU6swo/cK4FcbLgxLd4cWpHaNXY/NJ2dpahODCqBbAwb2rDmVszVb3SSjnk9/vik3AYdBw== +"@lerna/pulse-till-done@3.13.0": + version "3.13.0" + resolved "https://registry.npmjs.org/@lerna/pulse-till-done/-/pulse-till-done-3.13.0.tgz#c8e9ce5bafaf10d930a67d7ed0ccb5d958fe0110" + integrity sha512-1SOHpy7ZNTPulzIbargrgaJX387csN7cF1cLOGZiJQA6VqnS5eWs2CIrG8i8wmaUavj2QlQ5oEbRMVVXSsGrzA== dependencies: - regenerator-transform "^0.13.4" + npmlog "^4.1.2" -"@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== +"@lerna/query-graph@3.14.0": + version "3.14.0" + resolved "https://registry.npmjs.org/@lerna/query-graph/-/query-graph-3.14.0.tgz#2abb36f445bd924d0f85ac7aec1445e9ef1e2c6c" + integrity sha512-6YTh3vDMW2hUxHdKeRvx4bosc9lZClKaN+DzC1XKTkwDbWrsjmEzLcemKL6QnyyeuryN2f/eto7P9iSe3z3pQQ== dependencies: - "@babel/helper-module-imports" "^7.0.0" - "@babel/helper-plugin-utils" "^7.0.0" - resolve "^1.8.1" - semver "^5.5.1" + "@lerna/package-graph" "3.14.0" + figgy-pudding "^3.5.1" -"@babel/plugin-transform-runtime@^7.0.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.4.0.tgz#b4d8c925ed957471bc57e0b9da53408ebb1ed457" - integrity sha512-1uv2h9wnRj98XX3g0l4q+O3jFM6HfayKup7aIu4pnnlzGz0H+cYckGBC74FZIWJXJSXAmeJ9Yu5Gg2RQpS4hWg== +"@lerna/resolve-symlink@3.13.0": + version "3.13.0" + resolved "https://registry.npmjs.org/@lerna/resolve-symlink/-/resolve-symlink-3.13.0.tgz#3e6809ef53b63fe914814bfa071cd68012e22fbb" + integrity sha512-Lc0USSFxwDxUs5JvIisS8JegjA6SHSAWJCMvi2osZx6wVRkEDlWG2B1JAfXUzCMNfHoZX0/XX9iYZ+4JIpjAtg== dependencies: - "@babel/helper-module-imports" "^7.0.0" - "@babel/helper-plugin-utils" "^7.0.0" - resolve "^1.8.1" - semver "^5.5.1" + fs-extra "^7.0.0" + npmlog "^4.1.2" + read-cmd-shim "^1.0.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" - integrity sha512-QP4eUM83ha9zmYtpbnyjTLAGKQritA5XW/iG9cjtuOI8s1RuL/3V6a3DeSHfKutJQ+ayUfeZJPcnCYEQzaPQqg== +"@lerna/rimraf-dir@3.14.2": + version "3.14.2" + resolved "https://registry.npmjs.org/@lerna/rimraf-dir/-/rimraf-dir-3.14.2.tgz#103a49882abd85d42285d05cc76869b89f21ffd2" + integrity sha512-eFNkZsy44Bu9v1Hrj5Zk6omzg8O9h/7W6QYK1TTUHeyrjTEwytaNQlqF0lrTLmEvq55sviV42NC/8P3M2cvq8Q== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" + "@lerna/child-process" "3.14.2" + npmlog "^4.1.2" + path-exists "^3.0.0" + rimraf "^2.6.2" -"@babel/plugin-transform-spread@^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== +"@lerna/run-lifecycle@3.14.0": + version "3.14.0" + resolved "https://registry.npmjs.org/@lerna/run-lifecycle/-/run-lifecycle-3.14.0.tgz#0499eca0e7f393faf4e24e6c8737302a9059c22b" + integrity sha512-GUM3L9MzGRSW0WQ8wbLW1+SYStU1OFjW0GBzShhBnFrO4nGRrU7VchsLpcLu0hk2uCzyhsrDKzifEdOdUyMoEQ== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" + "@lerna/npm-conf" "3.13.0" + figgy-pudding "^3.5.1" + npm-lifecycle "^2.1.1" + npmlog "^4.1.2" -"@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" - integrity sha512-KKYCoGaRAf+ckH8gEL3JHUaFVyNHKe3ASNsZ+AlktgHevvxGigoIttrEJb8iKN03Q7Eazlv1s6cx2B2cQ3Jabw== +"@lerna/run-parallel-batches@3.13.0": + version "3.13.0" + resolved "https://registry.npmjs.org/@lerna/run-parallel-batches/-/run-parallel-batches-3.13.0.tgz#0276bb4e7cd0995297db82d134ca2bd08d63e311" + integrity sha512-bICFBR+cYVF1FFW+Tlm0EhWDioTUTM6dOiVziDEGE1UZha1dFkMYqzqdSf4bQzfLS31UW/KBd/2z8jy2OIjEjg== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-regex" "^7.0.0" + p-map "^1.2.0" + p-map-series "^1.0.0" -"@babel/plugin-transform-template-literals@7.2.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" - integrity sha512-FkPix00J9A/XWXv4VoKJBMeSkyY9x/TqIh76wzcdfl57RJJcf8CehQ08uwfhCDNtRQYtHQKBTwKZDEyjE13Lwg== +"@lerna/run-topologically@3.14.0": + version "3.14.0" + resolved "https://registry.npmjs.org/@lerna/run-topologically/-/run-topologically-3.14.0.tgz#2a560cb657f0ef1565c680b6001b4b01b872dc07" + integrity sha512-y+KBpC1YExFzGynovt9MY4O/bc3RrJaKeuXieiPfKGKxrdtmZe/r33oj/xePTXZq65jnw3SaU3H8S5CrrdkwDg== dependencies: - "@babel/helper-annotate-as-pure" "^7.0.0" - "@babel/helper-plugin-utils" "^7.0.0" + "@lerna/query-graph" "3.14.0" + figgy-pudding "^3.5.1" + p-queue "^4.0.0" + +"@lerna/run@3.15.0": + version "3.15.0" + resolved "https://registry.npmjs.org/@lerna/run/-/run-3.15.0.tgz#465028b5b561a050bd760924e4a0749de3f43172" + integrity sha512-KQBkzZYoEKmzILKjbjsm1KKVWFBXwAdwzqJWj/lfxxd3V5LRF8STASk8aiw8bSpB0bUL9TU/pbXakRxiNzjDwQ== + dependencies: + "@lerna/command" "3.15.0" + "@lerna/filter-options" "3.14.2" + "@lerna/npm-run-script" "3.14.2" + "@lerna/output" "3.13.0" + "@lerna/run-topologically" "3.14.0" + "@lerna/timer" "3.13.0" + "@lerna/validation-error" "3.13.0" + p-map "^1.2.0" + +"@lerna/symlink-binary@3.14.2": + version "3.14.2" + resolved "https://registry.npmjs.org/@lerna/symlink-binary/-/symlink-binary-3.14.2.tgz#a832fdc6c4b1e5aaf9e6ac9c7e6c322746965eb0" + integrity sha512-tqMwuWi6z1da0AFFbleWyu3H9fqayiV50rjj4anFTfayel9jSjlA1xPG+56sGIP6zUUNuUSc9kLh7oRRmlauoA== + dependencies: + "@lerna/create-symlink" "3.14.0" + "@lerna/package" "3.14.2" + fs-extra "^7.0.0" + p-map "^1.2.0" + +"@lerna/symlink-dependencies@3.14.2": + version "3.14.2" + resolved "https://registry.npmjs.org/@lerna/symlink-dependencies/-/symlink-dependencies-3.14.2.tgz#e6b2a9544ff26addc1f4324734595e2f71dfc795" + integrity sha512-Ox7WKXnHZ7IwWlejcCq3n0Hd/yMLv8AwIryhvWxM/RauAge+ML4wg578SsdCyKob8ecgm/R0ytHiU06j81iL1w== + dependencies: + "@lerna/create-symlink" "3.14.0" + "@lerna/resolve-symlink" "3.13.0" + "@lerna/symlink-binary" "3.14.2" + fs-extra "^7.0.0" + p-finally "^1.0.0" + p-map "^1.2.0" + p-map-series "^1.0.0" + +"@lerna/timer@3.13.0": + version "3.13.0" + resolved "https://registry.npmjs.org/@lerna/timer/-/timer-3.13.0.tgz#bcd0904551db16e08364d6c18e5e2160fc870781" + integrity sha512-RHWrDl8U4XNPqY5MQHkToWS9jHPnkLZEt5VD+uunCKTfzlxGnRCr3/zVr8VGy/uENMYpVP3wJa4RKGY6M0vkRw== + +"@lerna/validation-error@3.13.0": + version "3.13.0" + resolved "https://registry.npmjs.org/@lerna/validation-error/-/validation-error-3.13.0.tgz#c86b8f07c5ab9539f775bd8a54976e926f3759c3" + integrity sha512-SiJP75nwB8GhgwLKQfdkSnDufAaCbkZWJqEDlKOUPUvVOplRGnfL+BPQZH5nvq2BYSRXsksXWZ4UHVnQZI/HYA== + dependencies: + npmlog "^4.1.2" + +"@lerna/version@3.15.0": + version "3.15.0" + resolved "https://registry.npmjs.org/@lerna/version/-/version-3.15.0.tgz#3c65d223d94f211312995266abb07ee6606d5f73" + integrity sha512-vReYX1NMXZ9PwzTZm97wAl/k3bmRnRZhnQi3mq/m49xTnDavq7p4sbUdFpvu8cVZNKnYS02pNIVGHrQw+K8ZCw== + dependencies: + "@lerna/check-working-tree" "3.14.2" + "@lerna/child-process" "3.14.2" + "@lerna/collect-updates" "3.14.2" + "@lerna/command" "3.15.0" + "@lerna/conventional-commits" "3.14.0" + "@lerna/github-client" "3.14.2" + "@lerna/gitlab-client" "3.15.0" + "@lerna/output" "3.13.0" + "@lerna/prerelease-id-from-version" "3.14.0" + "@lerna/prompt" "3.13.0" + "@lerna/run-lifecycle" "3.14.0" + "@lerna/run-topologically" "3.14.0" + "@lerna/validation-error" "3.13.0" + chalk "^2.3.1" + dedent "^0.7.0" + minimatch "^3.0.4" + npmlog "^4.1.2" + p-map "^1.2.0" + p-pipe "^1.2.0" + p-reduce "^1.0.0" + p-waterfall "^1.0.0" + semver "^5.5.0" + slash "^1.0.0" + temp-write "^3.4.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== +"@lerna/write-log-file@3.13.0": + version "3.13.0" + resolved "https://registry.npmjs.org/@lerna/write-log-file/-/write-log-file-3.13.0.tgz#b78d9e4cfc1349a8be64d91324c4c8199e822a26" + integrity sha512-RibeMnDPvlL8bFYW5C8cs4mbI3AHfQef73tnJCQ/SgrXZHehmHnsyWUiE7qDQCAo+B1RfTapvSyFF69iPj326A== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" + npmlog "^4.1.2" + write-file-atomic "^2.3.0" -"@babel/plugin-transform-typescript@^7.0.0", "@babel/plugin-transform-typescript@^7.3.2": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.4.0.tgz#0389ec53a34e80f99f708c4ca311181449a68eb1" - integrity sha512-U7/+zKnRZg04ggM/Bm+xmu2B/PrwyDQTT/V89FXWYWNMxBDwSx56u6jtk9SEbfLFbZaEI72L+5LPvQjeZgFCrQ== +"@mrmlnc/readdir-enhanced@^2.2.1": + version "2.2.1" + resolved "https://registry.npmjs.org/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz#524af240d1a360527b730475ecfa1344aa540dde" + integrity sha512-bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-syntax-typescript" "^7.2.0" + call-me-maybe "^1.0.1" + glob-to-regexp "^0.3.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" - integrity sha512-m48Y0lMhrbXEJnVUaYly29jRXbQ3ksxPrS1Tg8t+MHqzXhtBYAvI51euOBaoAlZLPHsieY9XPVMf80a5x0cPcA== +"@nodelib/fs.stat@^1.1.2": + version "1.1.3" + resolved "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz#2b5a3ab3f918cca48a8c754c08168e3f03eba61b" + integrity sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw== + +"@octokit/auth-token@^2.4.0": + version "2.4.4" + resolved "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-2.4.4.tgz#ee31c69b01d0378c12fd3ffe406030f3d94d3b56" + integrity sha512-LNfGu3Ro9uFAYh10MUZVaT7X2CnNm2C8IDQmabx+3DygYIQjs9FwzFAHN/0t6mu5HEPhxcb1XOuxdpY82vCg2Q== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-regex" "^7.0.0" - regexpu-core "^4.1.3" + "@octokit/types" "^6.0.0" -"@babel/preset-env@7.3.1": - version "7.3.1" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.3.1.tgz#389e8ca6b17ae67aaf9a2111665030be923515db" - integrity sha512-FHKrD6Dxf30e8xgHQO0zJZpUPfVZg+Xwgz5/RdSWCbza9QLNk4Qbp40ctRoqDxml3O8RMzB1DU55SXeDG6PqHQ== +"@octokit/endpoint@^6.0.1": + version "6.0.10" + resolved "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-6.0.10.tgz#741ce1fa2f4fb77ce8ebe0c6eaf5ce63f565f8e8" + integrity sha512-9+Xef8nT7OKZglfkOMm7IL6VwxXUQyR7DUSU0LH/F7VNqs8vyd7es5pTfz9E7DwUIx7R3pGscxu1EBhYljyu7Q== 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.3.1" - "@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-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.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-named-capturing-groups-regex" "^7.3.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" - integrity sha512-oayxyPS4Zj+hF6Et11BwuBkmpgT/zMxyuZgFrMeZID6Hdh3dGlk4sHCAhdBCpuCKW2ppBfl2uCCetlrUIJRY3w== + "@octokit/types" "^6.0.0" + is-plain-object "^5.0.0" + universal-user-agent "^6.0.0" + +"@octokit/openapi-types@^2.0.0": + version "2.0.0" + resolved "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-2.0.0.tgz#6d8f8ad9db3b75a39115f5def2654df8bed39f28" + integrity sha512-J4bfM7lf8oZvEAdpS71oTvC1ofKxfEZgU5vKVwzZKi4QPiL82udjpseJwxPid9Pu2FNmyRQOX4iEj6W1iOSnPw== + +"@octokit/plugin-enterprise-rest@^2.1.1": + version "2.2.2" + resolved "https://registry.npmjs.org/@octokit/plugin-enterprise-rest/-/plugin-enterprise-rest-2.2.2.tgz#c0e22067a043e19f96ff9c7832e2a3019f9be75c" + integrity sha512-CTZr64jZYhGWNTDGlSJ2mvIlFsm9OEO3LqWn9I/gmoHI4jRBp4kpHoFYNemG4oA75zUAcmbuWblb7jjP877YZw== + +"@octokit/plugin-paginate-rest@^1.1.1": + version "1.1.2" + resolved "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-1.1.2.tgz#004170acf8c2be535aba26727867d692f7b488fc" + integrity sha512-jbsSoi5Q1pj63sC16XIUboklNw+8tL9VOnJsWycWYR78TKss5PVpIPb1TUUcMQ+bBh7cY579cVAWmf5qG+dw+Q== 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" + "@octokit/types" "^2.0.1" + +"@octokit/plugin-request-log@^1.0.0": + version "1.0.2" + resolved "https://registry.npmjs.org/@octokit/plugin-request-log/-/plugin-request-log-1.0.2.tgz#394d59ec734cd2f122431fbaf05099861ece3c44" + integrity sha512-oTJSNAmBqyDR41uSMunLQKMX0jmEXbwD1fpz8FG27lScV3RhtGfBa1/BBLym+PxcC16IBlF7KH9vP1BUYxA+Eg== -"@babel/preset-typescript@^7.1.0": - version "7.3.3" - resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.3.3.tgz#88669911053fa16b2b276ea2ede2ca603b3f307a" - integrity sha512-mzMVuIP4lqtn4du2ynEfdO0+RYcslwrZiJHXu4MGaC1ctJiW2fyaeDrtjJGs7R/KebZ1sgowcIoWf4uRpEfKEg== +"@octokit/plugin-rest-endpoint-methods@2.4.0": + version "2.4.0" + resolved "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-2.4.0.tgz#3288ecf5481f68c494dd0602fc15407a59faf61e" + integrity sha512-EZi/AWhtkdfAYi01obpX0DF7U6b1VRr30QNQ5xSFPITMdLSfhcBqjamE3F+sKcxPbD7eZuMHu3Qkk2V+JGxBDQ== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-transform-typescript" "^7.3.2" + "@octokit/types" "^2.0.1" + deprecation "^2.3.1" -"@babel/register@^7.0.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@babel/register/-/register-7.4.0.tgz#d9d0a621db268fb14200f2685a4f8924c822404c" - integrity sha512-ekziebXBnS/7V6xk8sBfLSSD6YZuy6P29igBtR6OL/tswKdxOV+Yqq0nzICMguVYtGRZYUCGpfGV8J9Za2iBdw== +"@octokit/request-error@^1.0.2": + version "1.2.1" + resolved "https://registry.npmjs.org/@octokit/request-error/-/request-error-1.2.1.tgz#ede0714c773f32347576c25649dc013ae6b31801" + integrity sha512-+6yDyk1EES6WK+l3viRDElw96MvwfJxCt45GvmjDUKWjYIb3PJZQkq3i46TwGwoPD4h8NmTrENmtyA1FwbmhRA== dependencies: - core-js "^3.0.0" - find-cache-dir "^2.0.0" - lodash "^4.17.11" - mkdirp "^0.5.1" - pirates "^4.0.0" - source-map-support "^0.5.9" + "@octokit/types" "^2.0.0" + deprecation "^2.0.0" + once "^1.4.0" -"@babel/runtime@^7.0.0", "@babel/runtime@^7.3.1", "@babel/runtime@^7.3.4": - version "7.4.2" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.4.2.tgz#f5ab6897320f16decd855eed70b705908a313fe8" - integrity sha512-7Bl2rALb7HpvXFL7TETNzKSAeBVCPHELzc0C//9FCxN8nsiueWSJBqaF+2oIJScyILStASR/Cx5WMkXGYTiJFA== +"@octokit/request-error@^2.0.0": + version "2.0.4" + resolved "https://registry.npmjs.org/@octokit/request-error/-/request-error-2.0.4.tgz#07dd5c0521d2ee975201274c472a127917741262" + integrity sha512-LjkSiTbsxIErBiRh5wSZvpZqT4t0/c9+4dOe0PII+6jXR+oj/h66s7E4a/MghV7iT8W9ffoQ5Skoxzs96+gBPA== dependencies: - regenerator-runtime "^0.13.2" + "@octokit/types" "^6.0.0" + deprecation "^2.0.0" + once "^1.4.0" -"@babel/template@^7.0.0", "@babel/template@^7.1.0", "@babel/template@^7.2.2", "@babel/template@^7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.4.0.tgz#12474e9c077bae585c5d835a95c0b0b790c25c8b" - integrity sha512-SOWwxxClTTh5NdbbYZ0BmaBVzxzTh2tO/TeLTbF6MO6EzVhHTnff8CdBXx3mEtazFBoysmEM6GU/wF+SuSx4Fw== +"@octokit/request@^5.2.0": + version "5.4.12" + resolved "https://registry.npmjs.org/@octokit/request/-/request-5.4.12.tgz#b04826fa934670c56b135a81447be2c1723a2ffc" + integrity sha512-MvWYdxengUWTGFpfpefBBpVmmEYfkwMoxonIB3sUGp5rhdgwjXL1ejo6JbgzG/QD9B/NYt/9cJX1pxXeSIUCkg== + dependencies: + "@octokit/endpoint" "^6.0.1" + "@octokit/request-error" "^2.0.0" + "@octokit/types" "^6.0.3" + deprecation "^2.0.0" + is-plain-object "^5.0.0" + node-fetch "^2.6.1" + once "^1.4.0" + universal-user-agent "^6.0.0" + +"@octokit/rest@^16.16.0": + version "16.43.2" + resolved "https://registry.npmjs.org/@octokit/rest/-/rest-16.43.2.tgz#c53426f1e1d1044dee967023e3279c50993dd91b" + integrity sha512-ngDBevLbBTFfrHZeiS7SAMAZ6ssuVmXuya+F/7RaVvlysgGa1JKJkKWY+jV6TCJYcW0OALfJ7nTIGXcBXzycfQ== + dependencies: + "@octokit/auth-token" "^2.4.0" + "@octokit/plugin-paginate-rest" "^1.1.1" + "@octokit/plugin-request-log" "^1.0.0" + "@octokit/plugin-rest-endpoint-methods" "2.4.0" + "@octokit/request" "^5.2.0" + "@octokit/request-error" "^1.0.2" + atob-lite "^2.0.0" + before-after-hook "^2.0.0" + btoa-lite "^1.0.0" + deprecation "^2.0.0" + lodash.get "^4.4.2" + lodash.set "^4.3.2" + lodash.uniq "^4.5.0" + octokit-pagination-methods "^1.1.0" + once "^1.4.0" + universal-user-agent "^4.0.0" + +"@octokit/types@^2.0.0", "@octokit/types@^2.0.1": + version "2.16.2" + resolved "https://registry.npmjs.org/@octokit/types/-/types-2.16.2.tgz#4c5f8da3c6fecf3da1811aef678fda03edac35d2" + integrity sha512-O75k56TYvJ8WpAakWwYRN8Bgu60KrmX0z1KqFp1kNiFNkgW+JW+9EBKZ+S33PU6SLvbihqd+3drvPxKK68Ee8Q== dependencies: - "@babel/code-frame" "^7.0.0" - "@babel/parser" "^7.4.0" - "@babel/types" "^7.4.0" + "@types/node" ">= 8" -"@babel/traverse@^7.0.0", "@babel/traverse@^7.1.0", "@babel/traverse@^7.2.2", "@babel/traverse@^7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.4.0.tgz#14006967dd1d2b3494cdd650c686db9daf0ddada" - integrity sha512-/DtIHKfyg2bBKnIN+BItaIlEg5pjAnzHOIQe5w+rHAw/rg9g0V7T4rqPX8BJPfW11kt3koyjAnTNwCzb28Y1PA== +"@octokit/types@^6.0.0", "@octokit/types@^6.0.3": + version "6.1.1" + resolved "https://registry.npmjs.org/@octokit/types/-/types-6.1.1.tgz#bc88b3eb5f447b025a2a1a8177a72db216e8d4ca" + integrity sha512-btm3D6S7VkRrgyYF31etUtVY/eQ1KzrNRqhFt25KSe2mKlXuLXJilglRC6eDA2P6ou94BUnk/Kz5MPEolXgoiw== dependencies: - "@babel/code-frame" "^7.0.0" - "@babel/generator" "^7.4.0" - "@babel/helper-function-name" "^7.1.0" - "@babel/helper-split-export-declaration" "^7.4.0" - "@babel/parser" "^7.4.0" - "@babel/types" "^7.4.0" - debug "^4.1.0" - globals "^11.1.0" - lodash "^4.17.11" + "@octokit/openapi-types" "^2.0.0" + "@types/node" ">= 8" -"@babel/types@^7.0.0", "@babel/types@^7.2.0", "@babel/types@^7.2.2", "@babel/types@^7.3.0", "@babel/types@^7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.4.0.tgz#670724f77d24cce6cc7d8cf64599d511d164894c" - integrity sha512-aPvkXyU2SPOnztlgo8n9cEiXW755mgyvueUPcpStqdzoSPm0fjO0vQBjLkt3JKJW7ufikfcnMTTPsN1xaTsBPA== +"@react-spring/animated@link:packages/animated": + version "9.0.0-rc.4" dependencies: - esutils "^2.0.2" - lodash "^4.17.11" - to-fast-properties "^2.0.0" + "@react-spring/shared" "link:packages/shared" + "@react-spring/types" "link:packages/types" + react-layout-effect "^1.0.1" -"@cnakazawa/watch@^1.0.3": - version "1.0.3" - resolved "https://registry.yarnpkg.com/@cnakazawa/watch/-/watch-1.0.3.tgz#099139eaec7ebf07a27c1786a3ff64f39464d2ef" - integrity sha512-r5160ogAvGyHsal38Kux7YYtodEKOj89RGb28ht1jh3SJb08VwRwAKKJL0bGb04Zd/3r9FL3BFIc3bBidYffCA== +"@react-spring/core@link:packages/core": + version "9.0.0-rc.4" dependencies: - exec-sh "^0.3.2" - minimist "^1.2.0" + "@react-spring/animated" "link:packages/animated" + "@react-spring/shared" "link:packages/shared" + "@react-spring/types" "link:packages/types" + react-layout-effect "^1.0.1" -"@jest/console@^24.3.0": - version "24.3.0" - resolved "https://registry.yarnpkg.com/@jest/console/-/console-24.3.0.tgz#7bd920d250988ba0bf1352c4493a48e1cb97671e" - integrity sha512-NaCty/OOei6rSDcbPdMiCbYCI0KGFGPgGO6B09lwWt5QTxnkuhKYET9El5u5z1GAcSxkQmSMtM63e24YabCWqA== +"@react-spring/konva@link:targets/konva": + version "9.0.0-rc.4" dependencies: - "@jest/source-map" "^24.3.0" - "@types/node" "*" - chalk "^2.0.1" - slash "^2.0.0" + "@react-spring/animated" "link:packages/animated" + "@react-spring/core" "link:packages/core" + "@react-spring/shared" "link:packages/shared" + "@react-spring/types" "link:packages/types" -"@jest/core@^24.5.0": - version "24.5.0" - resolved "https://registry.yarnpkg.com/@jest/core/-/core-24.5.0.tgz#2cefc6a69e9ebcae1da8f7c75f8a257152ba1ec0" - integrity sha512-RDZArRzAs51YS7dXG1pbXbWGxK53rvUu8mCDYsgqqqQ6uSOaTjcVyBl2Jce0exT2rSLk38ca7az7t2f3b0/oYQ== +"@react-spring/native@link:targets/native": + version "9.0.0-rc.4" dependencies: - "@jest/console" "^24.3.0" - "@jest/reporters" "^24.5.0" - "@jest/test-result" "^24.5.0" - "@jest/transform" "^24.5.0" - "@jest/types" "^24.5.0" - ansi-escapes "^3.0.0" - chalk "^2.0.1" - exit "^0.1.2" - graceful-fs "^4.1.15" - jest-changed-files "^24.5.0" - jest-config "^24.5.0" - jest-haste-map "^24.5.0" - jest-message-util "^24.5.0" - jest-regex-util "^24.3.0" - jest-resolve-dependencies "^24.5.0" - jest-runner "^24.5.0" - jest-runtime "^24.5.0" - jest-snapshot "^24.5.0" - jest-util "^24.5.0" - jest-validate "^24.5.0" - jest-watcher "^24.5.0" - micromatch "^3.1.10" - p-each-series "^1.0.0" - pirates "^4.0.1" - realpath-native "^1.1.0" - rimraf "^2.5.4" - strip-ansi "^5.0.0" + "@react-spring/animated" "link:packages/animated" + "@react-spring/core" "link:packages/core" + "@react-spring/shared" "link:packages/shared" + "@react-spring/types" "link:packages/types" -"@jest/environment@^24.5.0": - version "24.5.0" - resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-24.5.0.tgz#a2557f7808767abea3f9e4cc43a172122a63aca8" - integrity sha512-tzUHR9SHjMXwM8QmfHb/EJNbF0fjbH4ieefJBvtwO8YErLTrecc1ROj0uo2VnIT6SlpEGZnvdCK6VgKYBo8LsA== +"@react-spring/shared@link:packages/shared": + version "9.0.0-rc.4" dependencies: - "@jest/fake-timers" "^24.5.0" - "@jest/transform" "^24.5.0" - "@jest/types" "^24.5.0" - "@types/node" "*" - jest-mock "^24.5.0" + "@react-spring/types" "link:packages/types" + fluids "^0.2.2" + rafz "^0.1.13" -"@jest/fake-timers@^24.5.0": - version "24.5.0" - resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-24.5.0.tgz#4a29678b91fd0876144a58f8d46e6c62de0266f0" - integrity sha512-i59KVt3QBz9d+4Qr4QxsKgsIg+NjfuCjSOWj3RQhjF5JNy+eVJDhANQ4WzulzNCHd72srMAykwtRn5NYDGVraw== +"@react-spring/three@link:targets/three": + version "9.0.0-rc.4" dependencies: - "@jest/types" "^24.5.0" - "@types/node" "*" - jest-message-util "^24.5.0" - jest-mock "^24.5.0" - -"@jest/reporters@^24.5.0": - version "24.5.0" - resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-24.5.0.tgz#9363a210d0daa74696886d9cb294eb8b3ad9b4d9" - integrity sha512-vfpceiaKtGgnuC3ss5czWOihKOUSyjJA4M4udm6nH8xgqsuQYcyDCi4nMMcBKsHXWgz9/V5G7iisnZGfOh1w6Q== - dependencies: - "@jest/environment" "^24.5.0" - "@jest/test-result" "^24.5.0" - "@jest/transform" "^24.5.0" - "@jest/types" "^24.5.0" - chalk "^2.0.1" - exit "^0.1.2" + "@react-spring/animated" "link:packages/animated" + "@react-spring/core" "link:packages/core" + "@react-spring/shared" "link:packages/shared" + "@react-spring/types" "link:packages/types" + +"@react-spring/types@link:packages/types": + version "9.0.0-rc.4" + dependencies: + "@alloc/types" "^1.2.1" + +"@react-spring/web@link:targets/web": + version "9.0.0-rc.4" + dependencies: + "@react-spring/animated" "link:packages/animated" + "@react-spring/core" "link:packages/core" + "@react-spring/shared" "link:packages/shared" + "@react-spring/types" "link:packages/types" + +"@react-spring/zdog@link:targets/zdog": + version "9.0.0-rc.4" + dependencies: + "@react-spring/animated" "link:packages/animated" + "@react-spring/core" "link:packages/core" + "@react-spring/shared" "link:packages/shared" + "@react-spring/types" "link:packages/types" + +"@react-three/fiber@^5.3.15": + version "5.3.15" + resolved "https://registry.yarnpkg.com/@react-three/fiber/-/fiber-5.3.15.tgz#35ac3d566dfc9b32638d3cbe7b0e9802ac4c6459" + integrity sha512-tFT4ktoWwILvp/EixAFyJQk+/y6Kq3oz6lpS5oh6bJ3tanASckssa+gvPwQoq9DdL6Tm+urbF4F+t8pt58EXMg== + dependencies: + "@babel/runtime" "^7.12.1" + react-merge-refs "^1.1.0" + react-reconciler "0.26.1" + react-use-measure "^2.0.3" + resize-observer-polyfill "^1.5.1" + scheduler "0.20.1" + tiny-emitter "^2.1.0" + use-asset "^1.0.0" + utility-types "^3.10.0" + +"@rollup/plugin-babel@^5.2.1": + version "5.2.2" + resolved "https://registry.npmjs.org/@rollup/plugin-babel/-/plugin-babel-5.2.2.tgz#e5623a01dd8e37e004ba87f2de218c611727d9b2" + integrity sha512-MjmH7GvFT4TW8xFdIeFS3wqIX646y5tACdxkTO+khbHvS3ZcVJL6vkAHLw2wqPmkhwCfWHoNsp15VYNwW6JEJA== + dependencies: + "@babel/helper-module-imports" "^7.10.4" + "@rollup/pluginutils" "^3.1.0" + +"@rollup/plugin-commonjs@^11.1.0": + version "11.1.0" + resolved "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-11.1.0.tgz#60636c7a722f54b41e419e1709df05c7234557ef" + integrity sha512-Ycr12N3ZPN96Fw2STurD21jMqzKwL9QuFhms3SD7KKRK7oaXUsBU9Zt0jL/rOPHiPYisI21/rXGO3jr9BnLHUA== + dependencies: + "@rollup/pluginutils" "^3.0.8" + commondir "^1.0.1" + estree-walker "^1.0.1" glob "^7.1.2" - istanbul-api "^2.1.1" - istanbul-lib-coverage "^2.0.2" - istanbul-lib-instrument "^3.0.1" - istanbul-lib-source-maps "^3.0.1" - jest-haste-map "^24.5.0" - jest-resolve "^24.5.0" - jest-runtime "^24.5.0" - jest-util "^24.5.0" - jest-worker "^24.4.0" - node-notifier "^5.2.1" - slash "^2.0.0" - source-map "^0.6.0" - string-length "^2.0.0" + is-reference "^1.1.2" + magic-string "^0.25.2" + resolve "^1.11.0" -"@jest/source-map@^24.3.0": - version "24.3.0" - resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-24.3.0.tgz#563be3aa4d224caf65ff77edc95cd1ca4da67f28" - integrity sha512-zALZt1t2ou8le/crCeeiRYzvdnTzaIlpOWaet45lNSqNJUnXbppUUFR4ZUAlzgDmKee4Q5P/tKXypI1RiHwgag== +"@rollup/plugin-node-resolve@^7.1.3": + version "7.1.3" + resolved "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-7.1.3.tgz#80de384edfbd7bfc9101164910f86078151a3eca" + integrity sha512-RxtSL3XmdTAE2byxekYLnx+98kEUOrPHF/KRVjLH+DEIHy6kjIw7YINQzn+NXiH/NTrQLAwYs0GWB+csWygA9Q== dependencies: - callsites "^3.0.0" - graceful-fs "^4.1.15" - source-map "^0.6.0" + "@rollup/pluginutils" "^3.0.8" + "@types/resolve" "0.0.8" + builtin-modules "^3.1.0" + is-module "^1.0.0" + resolve "^1.14.2" -"@jest/test-result@^24.5.0": - version "24.5.0" - resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-24.5.0.tgz#ab66fb7741a04af3363443084e72ea84861a53f2" - integrity sha512-u66j2vBfa8Bli1+o3rCaVnVYa9O8CAFZeqiqLVhnarXtreSXG33YQ6vNYBogT7+nYiFNOohTU21BKiHlgmxD5A== +"@rollup/pluginutils@^3.0.8", "@rollup/pluginutils@^3.1.0": + version "3.1.0" + resolved "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz#706b4524ee6dc8b103b3c995533e5ad680c02b9b" + integrity sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg== + dependencies: + "@types/estree" "0.0.39" + estree-walker "^1.0.1" + picomatch "^2.2.2" + +"@rollup/pluginutils@^4.1.0": + version "4.1.0" + resolved "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-4.1.0.tgz#0dcc61c780e39257554feb7f77207dceca13c838" + integrity sha512-TrBhfJkFxA+ER+ew2U2/fHbebhLT/l/2pRk0hfj9KusXUuRXd2v0R58AfaZK9VXDQ4TogOSEmICVrQAA3zFnHQ== dependencies: - "@jest/console" "^24.3.0" - "@jest/types" "^24.5.0" - "@types/istanbul-lib-coverage" "^1.1.0" + estree-walker "^2.0.1" + picomatch "^2.2.2" -"@jest/transform@^24.5.0": - version "24.5.0" - resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-24.5.0.tgz#6709fc26db918e6af63a985f2cc3c464b4cf99d9" - integrity sha512-XSsDz1gdR/QMmB8UCKlweAReQsZrD/DK7FuDlNo/pE8EcKMrfi2kqLRk8h8Gy/PDzgqJj64jNEzOce9pR8oj1w== - dependencies: - "@babel/core" "^7.1.0" - "@jest/types" "^24.5.0" - babel-plugin-istanbul "^5.1.0" - chalk "^2.0.1" - convert-source-map "^1.4.0" - fast-json-stable-stringify "^2.0.0" - graceful-fs "^4.1.15" - jest-haste-map "^24.5.0" - jest-regex-util "^24.3.0" - jest-util "^24.5.0" - micromatch "^3.1.10" - realpath-native "^1.1.0" - slash "^2.0.0" - source-map "^0.6.1" - write-file-atomic "2.4.1" +"@sheerun/mutationobserver-shim@^0.3.2": + version "0.3.3" + resolved "https://registry.npmjs.org/@sheerun/mutationobserver-shim/-/mutationobserver-shim-0.3.3.tgz#5405ee8e444ed212db44e79351f0c70a582aae25" + integrity sha512-DetpxZw1fzPD5xUBrIAoplLChO2VB8DlL5Gg+I1IR9b2wPqYIca2WSUxL5g1vLeR4MsQq1NeWriXAVffV+U1Fw== + +"@sinonjs/commons@^1.7.0": + version "1.8.1" + resolved "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.1.tgz#e7df00f98a203324f6dc7cc606cad9d4a8ab2217" + integrity sha512-892K+kWUUi3cl+LlqEWIDrhvLgdL79tECi8JZUyq6IviKy/DNhuzCRlbHUjxK89f4ypPMMaFnFuR9Ie6DoIMsw== + dependencies: + type-detect "4.0.8" + +"@testing-library/dom@*": + version "7.29.0" + resolved "https://registry.npmjs.org/@testing-library/dom/-/dom-7.29.0.tgz#60b18065bab50a5cde21fe80275a47a43024d9cc" + integrity sha512-0hhuJSmw/zLc6ewR9cVm84TehuTd7tbqBX9pRNSp8znJ9gTmSgesdbiGZtt8R6dL+2rgaPFp9Yjr7IU1HWm49w== + dependencies: + "@babel/code-frame" "^7.10.4" + "@babel/runtime" "^7.12.5" + "@types/aria-query" "^4.2.0" + aria-query "^4.2.2" + chalk "^4.1.0" + dom-accessibility-api "^0.5.4" + lz-string "^1.4.4" + pretty-format "^26.6.2" + +"@testing-library/dom@^6.15.0": + version "6.16.0" + resolved "https://registry.npmjs.org/@testing-library/dom/-/dom-6.16.0.tgz#04ada27ed74ad4c0f0d984a1245bb29b1fd90ba9" + integrity sha512-lBD88ssxqEfz0wFL6MeUyyWZfV/2cjEZZV3YRpb2IoJRej/4f1jB0TzqIOznTpfR1r34CNesrubxwIlAQ8zgPA== + dependencies: + "@babel/runtime" "^7.8.4" + "@sheerun/mutationobserver-shim" "^0.3.2" + "@types/testing-library__dom" "^6.12.1" + aria-query "^4.0.2" + dom-accessibility-api "^0.3.0" + pretty-format "^25.1.0" + wait-for-expect "^3.0.2" + +"@testing-library/jest-dom@^4.0.0": + version "4.2.4" + resolved "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-4.2.4.tgz#00dfa0cbdd837d9a3c2a7f3f0a248ea6e7b89742" + integrity sha512-j31Bn0rQo12fhCWOUWy9fl7wtqkp7In/YP2p5ZFyRuiiB9Qs3g+hS4gAmDWONbAHcRmVooNJ5eOHQDCOmUFXHg== + dependencies: + "@babel/runtime" "^7.5.1" + chalk "^2.4.1" + css "^2.2.3" + css.escape "^1.5.1" + jest-diff "^24.0.0" + jest-matcher-utils "^24.0.0" + lodash "^4.17.11" + pretty-format "^24.0.0" + redent "^3.0.0" -"@jest/types@^24.5.0": - version "24.5.0" - resolved "https://registry.yarnpkg.com/@jest/types/-/types-24.5.0.tgz#feee214a4d0167b0ca447284e95a57aa10b3ee95" - integrity sha512-kN7RFzNMf2R8UDadPOl6ReyI+MT8xfqRuAnuVL+i4gwjv/zubdDK+EDeLHYwq1j0CSSR2W/MmgaRlMZJzXdmVA== +"@testing-library/react@^9.1.1", "@testing-library/react@^9.4.0": + version "9.5.0" + resolved "https://registry.npmjs.org/@testing-library/react/-/react-9.5.0.tgz#71531655a7890b61e77a1b39452fbedf0472ca5e" + integrity sha512-di1b+D0p+rfeboHO5W7gTVeZDIK5+maEgstrZbWZSSvxDyfDRkkyBE1AJR5Psd6doNldluXlCWqXriUfqu/9Qg== dependencies: - "@types/istanbul-lib-coverage" "^1.1.0" - "@types/yargs" "^12.0.9" + "@babel/runtime" "^7.8.4" + "@testing-library/dom" "^6.15.0" + "@types/testing-library__react" "^9.1.2" -"@sheerun/mutationobserver-shim@^0.3.2": - version "0.3.2" - resolved "https://registry.yarnpkg.com/@sheerun/mutationobserver-shim/-/mutationobserver-shim-0.3.2.tgz#8013f2af54a2b7d735f71560ff360d3a8176a87b" - integrity sha512-vTCdPp/T/Q3oSqwHmZ5Kpa9oI7iLtGl3RQaA/NyLHikvcrPxACkkKVr/XzkSPJWXHRhKGzVvb0urJsbMlRxi1Q== +"@types/aria-query@^4.2.0": + version "4.2.0" + resolved "https://registry.npmjs.org/@types/aria-query/-/aria-query-4.2.0.tgz#14264692a9d6e2fa4db3df5e56e94b5e25647ac0" + integrity sha512-iIgQNzCm0v7QMhhe4Jjn9uRh+I6GoPmt03CbEtwx3ao8/EfoQcmgtqH4vQ5Db/lxiIGaWDv6nwvunuh0RyX0+A== -"@types/babel__core@^7.1.0": - version "7.1.0" - resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.1.0.tgz#710f2487dda4dcfd010ca6abb2b4dc7394365c51" - integrity sha512-wJTeJRt7BToFx3USrCDs2BhEi4ijBInTQjOIukj6a/5tEkwpFMVZ+1ppgmE+Q/FQyc5P/VWUbx7I9NELrKruHA== +"@types/babel__core@^7.1.7": + version "7.1.12" + resolved "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.12.tgz#4d8e9e51eb265552a7e4f1ff2219ab6133bdfb2d" + integrity sha512-wMTHiiTiBAAPebqaPiPDLFA4LYPKr6Ph0Xq/6rq1Ur3v66HXyG+clfR9CNETkD7MQS8ZHvpQOtA53DLws5WAEQ== dependencies: "@babel/parser" "^7.1.0" "@babel/types" "^7.0.0" @@ -1065,402 +2477,419 @@ "@types/babel__traverse" "*" "@types/babel__generator@*": - version "7.0.2" - resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.0.2.tgz#d2112a6b21fad600d7674274293c85dce0cb47fc" - integrity sha512-NHcOfab3Zw4q5sEE2COkpfXjoE7o+PmqD9DQW4koUT3roNxwziUdXGnRndMat/LJNUtePwn1TlP4do3uoe3KZQ== + version "7.6.2" + resolved "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.2.tgz#f3d71178e187858f7c45e30380f8f1b7415a12d8" + integrity sha512-MdSJnBjl+bdwkLskZ3NGFp9YcXGx5ggLpQQPqtgakVhsWK0hTtNYhjpZLlWQTviGTvF8at+Bvli3jV7faPdgeQ== dependencies: "@babel/types" "^7.0.0" "@types/babel__template@*": - version "7.0.2" - resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.0.2.tgz#4ff63d6b52eddac1de7b975a5223ed32ecea9307" - integrity sha512-/K6zCpeW7Imzgab2bLkLEbz0+1JlFSrUMdw7KoIIu+IUdu51GWaBZpd3y1VXGVXzynvGa4DaIaxNZHiON3GXUg== + version "7.4.0" + resolved "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.0.tgz#0c888dd70b3ee9eebb6e4f200e809da0076262be" + integrity sha512-NTPErx4/FiPCGScH7foPyr+/1Dkzkni+rHiYHHoTjvwou7AQzJkNeD60A9CXRy+ZEN2B1bggmkTMCDb+Mv5k+A== dependencies: "@babel/parser" "^7.1.0" "@babel/types" "^7.0.0" "@types/babel__traverse@*", "@types/babel__traverse@^7.0.6": - version "7.0.6" - resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.0.6.tgz#328dd1a8fc4cfe3c8458be9477b219ea158fd7b2" - integrity sha512-XYVgHF2sQ0YblLRMLNPB3CkFMewzFmlDsH/TneZFHUXDlABQgh88uOxuez7ZcXxayLFrqLwtDH1t+FmlFwNZxw== + version "7.11.0" + resolved "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.11.0.tgz#b9a1efa635201ba9bc850323a8793ee2d36c04a0" + integrity sha512-kSjgDMZONiIfSH1Nxcr5JIRMwUetDki63FSQfpTCz8ogF3Ulqm8+mr5f78dUYs6vMiB6gBusQqfQmBvHZj/lwg== dependencies: "@babel/types" "^7.3.0" +"@types/estree@*": + version "0.0.45" + resolved "https://registry.npmjs.org/@types/estree/-/estree-0.0.45.tgz#e9387572998e5ecdac221950dab3e8c3b16af884" + integrity sha512-jnqIUKDUqJbDIUxm0Uj7bnlMnRm1T/eZ9N+AVMqhPgzrba2GhGG5o/jCTwmdPK709nEZsGoMzXEDUjcXHa3W0g== + "@types/estree@0.0.39": version "0.0.39" - resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.39.tgz#e177e699ee1b8c22d23174caaa7422644389509f" + resolved "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz#e177e699ee1b8c22d23174caaa7422644389509f" integrity sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw== -"@types/istanbul-lib-coverage@^1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-1.1.0.tgz#2cc2ca41051498382b43157c8227fea60363f94a" - integrity sha512-ohkhb9LehJy+PA40rDtGAji61NCgdtKLAlFoYp4cnuuQEswwdK3vz9SOIkkyc3wrk8dzjphQApNs56yyXLStaQ== +"@types/graceful-fs@^4.1.2": + version "4.1.4" + resolved "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.4.tgz#4ff9f641a7c6d1a3508ff88bc3141b152772e753" + integrity sha512-mWA/4zFQhfvOA8zWkXobwJvBD7vzcxgrOQ0J5CH1votGqdq9m7+FwtGaqyCZqC3NyyBkc9z4m+iry4LlqcMWJg== + dependencies: + "@types/node" "*" -"@types/jest-diff@*": - version "20.0.1" - resolved "https://registry.yarnpkg.com/@types/jest-diff/-/jest-diff-20.0.1.tgz#35cc15b9c4f30a18ef21852e255fdb02f6d59b89" - integrity sha512-yALhelO3i0hqZwhjtcr6dYyaLoCHbAMshwtj6cGxTvHZAKXHsYGdff6E8EPw3xLKY0ELUTQ69Q1rQiJENnccMA== +"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0", "@types/istanbul-lib-coverage@^2.0.1": + version "2.0.3" + resolved "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz#4ba8ddb720221f432e443bd5f9117fd22cfd4762" + integrity sha512-sz7iLqvVUg1gIedBOvlkxPlc8/uVzyS5OwGz1cKjXzkl3FpL3al0crU8YGU1WoHkxn0Wxbw5tyi6hvzJKNzFsw== -"@types/jest@^24.0.0": - version "24.0.11" - resolved "https://registry.yarnpkg.com/@types/jest/-/jest-24.0.11.tgz#1f099bea332c228ea6505a88159bfa86a5858340" - integrity sha512-2kLuPC5FDnWIDvaJBzsGTBQaBbnDweznicvK7UGYzlIJP4RJR2a4A/ByLUXEyEgag6jz8eHdlWExGDtH3EYUXQ== +"@types/istanbul-lib-report@*": + version "3.0.0" + resolved "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#c14c24f18ea8190c118ee7562b7ff99a36552686" + integrity sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg== dependencies: - "@types/jest-diff" "*" - -"@types/mock-raf@^1.0.2": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@types/mock-raf/-/mock-raf-1.0.2.tgz#de0df16b1cbe2475cb1a4680a19f344f386d8252" - integrity sha1-3g3xaxy+JHXLGkaAoZ80TzhtglI= + "@types/istanbul-lib-coverage" "*" -"@types/node@*": - version "11.12.2" - resolved "https://registry.yarnpkg.com/@types/node/-/node-11.12.2.tgz#d7f302e74b10e9801d52852137f652d9ee235da8" - integrity sha512-c82MtnqWB/CqqK7/zit74Ob8H1dBdV7bK+BcErwtXbe0+nUGkgzq5NTDmRW/pAv2lFtmeNmW95b0zK2hxpeklg== +"@types/istanbul-reports@^1.1.1": + version "1.1.2" + resolved "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-1.1.2.tgz#e875cc689e47bce549ec81f3df5e6f6f11cfaeb2" + integrity sha512-P/W9yOX/3oPZSpaYOCQzGqgCQRXn0FFO/V8bWrCQs+wLmvVVxk6CRBXALEvNs9OHIatlnlFokfhuDo2ug01ciw== + dependencies: + "@types/istanbul-lib-coverage" "*" + "@types/istanbul-lib-report" "*" -"@types/prop-types@*": - version "15.7.0" - resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.0.tgz#4c48fed958d6dcf9487195a0ef6456d5f6e0163a" - integrity sha512-eItQyV43bj4rR3JPV0Skpl1SncRCdziTEK9/v8VwXmV6d/qOUO8/EuWeHBbCZcsfSHfzI5UyMJLCSXtxxznyZg== +"@types/istanbul-reports@^3.0.0": + version "3.0.0" + resolved "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.0.tgz#508b13aa344fa4976234e75dddcc34925737d821" + integrity sha512-nwKNbvnwJ2/mndE9ItP/zc2TCzw6uuodnF4EHYWD+gCQDVBuRQL5UzbZD0/ezy1iKsFU2ZQiDqg4M9dN4+wZgA== + dependencies: + "@types/istanbul-lib-report" "*" -"@types/react@16.8.2": - version "16.8.2" - resolved "https://registry.yarnpkg.com/@types/react/-/react-16.8.2.tgz#3b7a7f7ea89d1c7d68b00849fb5de839011c077b" - integrity sha512-6mcKsqlqkN9xADrwiUz2gm9Wg4iGnlVGciwBRYFQSMWG6MQjhOZ/AVnxn+6v8nslFgfYTV8fNdE6XwKu6va5PA== +"@types/jest@^24.0.13": + version "24.9.1" + resolved "https://registry.npmjs.org/@types/jest/-/jest-24.9.1.tgz#02baf9573c78f1b9974a5f36778b366aa77bd534" + integrity sha512-Fb38HkXSVA4L8fGKEZ6le5bB8r6MRWlOCZbVuWZcmOMSCd2wCYOwN1ibj8daIoV9naq7aaOZjrLCoCMptKU/4Q== dependencies: - "@types/prop-types" "*" - csstype "^2.2.0" + jest-diff "^24.3.0" -"@types/stack-utils@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-1.0.1.tgz#0a851d3bd96498fa25c33ab7278ed3bd65f06c3e" - integrity sha512-l42BggppR6zLmpfU6fq9HEa2oGPEI8yrSPL3GITjfRInppYFahObbIQOQK3UGxEnyQpltZLaPe75046NOZQikw== +"@types/minimist@^1.2.0": + version "1.2.1" + resolved "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.1.tgz#283f669ff76d7b8260df8ab7a4262cc83d988256" + integrity sha512-fZQQafSREFyuZcdWFAExYjBiCL7AUCdgsk80iO0q4yihYYdcIiH28CcuPTGFgLOCC8RlW49GSQxdHwZP+I7CNg== -"@types/yargs@^12.0.2", "@types/yargs@^12.0.9": - version "12.0.10" - resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-12.0.10.tgz#17a8ec65cd8e88f51b418ceb271af18d3137df67" - integrity sha512-WsVzTPshvCSbHThUduGGxbmnwcpkgSctHGHTqzWyFg4lYAuV5qXlyFPOsP3OWqCINfmg/8VXP+zJaa4OxEsBQQ== +"@types/node@*", "@types/node@>= 8": + version "14.14.14" + resolved "https://registry.npmjs.org/@types/node/-/node-14.14.14.tgz#f7fd5f3cc8521301119f63910f0fb965c7d761ae" + integrity sha512-UHnOPWVWV1z+VV8k6L1HhG7UbGBgIdghqF3l9Ny9ApPghbjICXkUJSd/b9gOgQfjM1r+37cipdw/HJ3F6ICEnQ== -"@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" +"@types/normalize-package-data@^2.4.0": + version "2.4.0" + resolved "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz#e486d0d97396d79beedd0a6e33f4534ff6b4973e" + integrity sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA== -"@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== +"@types/parse-json@^4.0.0": + version "4.0.0" + resolved "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0" + integrity sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA== -"@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== +"@types/prettier@^1.19.0": + version "1.19.1" + resolved "https://registry.npmjs.org/@types/prettier/-/prettier-1.19.1.tgz#33509849f8e679e4add158959fdb086440e9553f" + integrity sha512-5qOlnZscTn4xxM5MeGXAMOsIOIKIbh9e85zJWfBRVPlRMEVawzoPhINYbRGkBZCI8LxvBe7tJCdWiarA99OZfQ== -"@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== +"@types/prop-types@*": + version "15.7.3" + resolved "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.3.tgz#2ab0d5da2e5815f94b0b9d4b95d1e5f243ab2ca7" + integrity sha512-KfRL3PuHmqQLOG+2tGpRO26Ctg+Cq1E01D2DMriKEATHgWLfeNDmq9e29Q9WIky0dQ3NPkd1mzYH8Lm936Z9qw== -"@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== +"@types/react-dom@*": + version "17.0.0" + resolved "https://registry.npmjs.org/@types/react-dom/-/react-dom-17.0.0.tgz#b3b691eb956c4b3401777ee67b900cb28415d95a" + integrity sha512-lUqY7OlkF/RbNtD5nIq7ot8NquXrdFrjSOR6+w9a9RFQevGi1oZO1dcJbXMeONAPKtZ2UrZOEJ5UOCVsxbLk/g== dependencies: - "@webassemblyjs/wast-printer" "1.8.5" + "@types/react" "*" -"@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== +"@types/react-native@~0.57.0": + version "0.57.65" + resolved "https://registry.npmjs.org/@types/react-native/-/react-native-0.57.65.tgz#9da4773aaa95924bce42a54a5c19cfd8ffd5022b" + integrity sha512-7P5ulTb+/cnwbABWaAjzKmSYkRWeK7UCTfUwHhDpnwxdiL2X/KbdN1sPgo0B2E4zxfYE3MEoHv7FhB8Acfvf8A== dependencies: - "@webassemblyjs/ast" "1.8.5" - mamacro "^0.0.3" + "@types/prop-types" "*" + "@types/react" "*" -"@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== +"@types/react@*": + version "17.0.0" + resolved "https://registry.npmjs.org/@types/react/-/react-17.0.0.tgz#5af3eb7fad2807092f0046a1302b7823e27919b8" + integrity sha512-aj/L7RIMsRlWML3YB6KZiXB3fV2t41+5RBGYF8z+tAKU43Px8C3cYUZsDvf1/+Bm4FK21QWBrDutu8ZJ/70qOw== + dependencies: + "@types/prop-types" "*" + csstype "^3.0.2" -"@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== +"@types/react@^16.8.19": + version "16.14.2" + resolved "https://registry.npmjs.org/@types/react/-/react-16.14.2.tgz#85dcc0947d0645349923c04ccef6018a1ab7538c" + integrity sha512-BzzcAlyDxXl2nANlabtT4thtvbbnhee8hMmH/CcJrISDBVcJS1iOsP1f0OAgSdGE0MsY9tqcrb9YoZcOFv9dbQ== 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" + "@types/prop-types" "*" + csstype "^3.0.2" -"@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== +"@types/react@~16.9.0": + version "16.9.56" + resolved "https://registry.npmjs.org/@types/react/-/react-16.9.56.tgz#ea25847b53c5bec064933095fc366b1462e2adf0" + integrity sha512-gIkl4J44G/qxbuC6r2Xh+D3CGZpJ+NdWTItAPmZbR5mUS+JQ8Zvzpl0ea5qT/ZT3ZNTUcDKUVqV3xBE8wv/DyQ== dependencies: - "@xtuc/ieee754" "^1.2.0" + "@types/prop-types" "*" + csstype "^3.0.2" -"@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== +"@types/resolve@0.0.8": + version "0.0.8" + resolved "https://registry.npmjs.org/@types/resolve/-/resolve-0.0.8.tgz#f26074d238e02659e323ce1a13d041eee280e194" + integrity sha512-auApPaJf3NPfe18hSoJkp8EbZzer2ISk7o8mCC3M9he/a04+gbMF97NkpD2S8riMGvm4BMRI59/SZQSaLTKpsQ== dependencies: - "@xtuc/long" "4.2.2" + "@types/node" "*" -"@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== +"@types/stack-utils@^1.0.1": + version "1.0.1" + resolved "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-1.0.1.tgz#0a851d3bd96498fa25c33ab7278ed3bd65f06c3e" + integrity sha512-l42BggppR6zLmpfU6fq9HEa2oGPEI8yrSPL3GITjfRInppYFahObbIQOQK3UGxEnyQpltZLaPe75046NOZQikw== -"@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== +"@types/testing-library__dom@*": + version "7.5.0" + resolved "https://registry.npmjs.org/@types/testing-library__dom/-/testing-library__dom-7.5.0.tgz#e0a00dd766983b1d6e9d10d33e708005ce6ad13e" + integrity sha512-mj1aH4cj3XUpMEgVpognma5kHVtbm6U6cHZmEFzCRiXPvKkuHrFr3+yXdGLXvfFRBaQIVshPGHI+hGTOJlhS/g== 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" + "@testing-library/dom" "*" -"@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== +"@types/testing-library__dom@^6.12.1": + version "6.14.0" + resolved "https://registry.npmjs.org/@types/testing-library__dom/-/testing-library__dom-6.14.0.tgz#1aede831cb4ed4a398448df5a2c54b54a365644e" + integrity sha512-sMl7OSv0AvMOqn1UJ6j1unPMIHRXen0Ita1ujnMX912rrOcawe4f7wu0Zt9GIQhBhJvH2BaibqFgQ3lP+Pj2hA== dependencies: - "@webassemblyjs/ast" "1.8.5" - "@webassemblyjs/helper-buffer" "1.8.5" - "@webassemblyjs/wasm-gen" "1.8.5" - "@webassemblyjs/wasm-parser" "1.8.5" + pretty-format "^24.3.0" -"@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== +"@types/testing-library__react@^9.1.2": + version "9.1.3" + resolved "https://registry.npmjs.org/@types/testing-library__react/-/testing-library__react-9.1.3.tgz#35eca61cc6ea923543796f16034882a1603d7302" + integrity sha512-iCdNPKU3IsYwRK9JieSYAiX0+aYDXOGAmrC/3/M7AqqSDKnWWVv07X+Zk1uFSL7cMTUYzv4lQRfohucEocn5/w== 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" + "@types/react-dom" "*" + "@types/testing-library__dom" "*" + pretty-format "^25.1.0" -"@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" +"@types/three@^0.126.1": + version "0.126.1" + resolved "https://registry.yarnpkg.com/@types/three/-/three-0.126.1.tgz#f53450d4218a7c8bfb17af062f9d8473c8e241e0" + integrity sha512-GR7e3d9CYYmwIR3HDiRZDFpoHIp2Vg5IbULcIjL296C8VbjruGwJ7Br1GTBkslEVfkezKrtJTf7KuqoIt3oYTg== -"@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== +"@types/yargs-parser@*": + version "15.0.0" + resolved "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-15.0.0.tgz#cb3f9f741869e20cce330ffbeb9271590483882d" + integrity sha512-FA/BWv8t8ZWJ+gEOnLLd8ygxH/2UFbAvgEonyfN6yWGLKc7zVjbpl2Y4CTjid9h2RfgPP6SEt6uHwEOply00yw== + +"@types/yargs@^13.0.0": + version "13.0.11" + resolved "https://registry.npmjs.org/@types/yargs/-/yargs-13.0.11.tgz#def2f0c93e4bdf2c61d7e34899b17e34be28d3b1" + integrity sha512-NRqD6T4gktUrDi1o1wLH3EKC1o2caCr7/wR87ODcbVITQF106OM3sFN92ysZ++wqelOd1CTzatnOBRDYYG6wGQ== dependencies: - "@webassemblyjs/ast" "1.8.5" - "@webassemblyjs/wast-parser" "1.8.5" - "@xtuc/long" "4.2.2" + "@types/yargs-parser" "*" -"@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== +"@types/yargs@^15.0.0": + version "15.0.12" + resolved "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.12.tgz#6234ce3e3e3fa32c5db301a170f96a599c960d74" + integrity sha512-f+fD/fQAo3BCbCDlrUpznF1A5Zp9rB0noS5vnoormHSIPFKL0Z2DcUJ3Gxp5ytH4uLRNxy7AwYUC9exZzqGMAw== + dependencies: + "@types/yargs-parser" "*" -"@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== +JSONStream@^1.0.4, JSONStream@^1.3.4: + version "1.3.5" + resolved "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz#3208c1f08d3a4d99261ab64f92302bc15e111ca0" + integrity sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ== + dependencies: + jsonparse "^1.2.0" + through ">=2.2.7 <3" abab@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.0.tgz#aba0ab4c5eee2d4c79d3487d85450fb2376ebb0f" - integrity sha512-sY5AXXVZv4Y1VACTtR11UJCPHHudgY5i26Qj5TypE6DKlIApbwb5uqhXcJ5UUGbvZNRh7EeIoW+LrJumBsKp7w== + version "2.0.5" + resolved "https://registry.npmjs.org/abab/-/abab-2.0.5.tgz#c0b678fb32d60fc1219c784d6a826fe385aeb79a" + integrity sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q== abbrev@1: version "1.1.1" - resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" + resolved "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== absolute-path@^0.0.0: version "0.0.0" - resolved "https://registry.yarnpkg.com/absolute-path/-/absolute-path-0.0.0.tgz#a78762fbdadfb5297be99b15d35a785b2f095bf7" + resolved "https://registry.npmjs.org/absolute-path/-/absolute-path-0.0.0.tgz#a78762fbdadfb5297be99b15d35a785b2f095bf7" integrity sha1-p4di+9rftSl76ZsV01p4Wy8JW/c= -accepts@~1.3.3, accepts@~1.3.5: - version "1.3.5" - resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.5.tgz#eb777df6011723a3b14e8a72c0805c8e86746bd2" - integrity sha1-63d99gEXI6OxTopywIBcjoZ0a9I= +accepts@~1.3.5, accepts@~1.3.7: + version "1.3.7" + resolved "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz#531bc726517a3b2b41f850021c6cc15eaab507cd" + integrity sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA== dependencies: - mime-types "~2.1.18" - negotiator "0.6.1" - -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== + mime-types "~2.1.24" + negotiator "0.6.2" -acorn-globals@^4.1.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-4.3.0.tgz#e3b6f8da3c1552a95ae627571f7dd6923bb54103" - integrity sha512-hMtHj3s5RnuhvHPowpBYvJVj3rAar82JiDQHvGs1zO0l10ocX/xEdBShNHTJaboucJUsScghp74pH3s7EnHHQw== +acorn-globals@^4.3.2: + version "4.3.4" + resolved "https://registry.npmjs.org/acorn-globals/-/acorn-globals-4.3.4.tgz#9fa1926addc11c97308c4e66d7add0d40c3272e7" + integrity sha512-clfQEh21R+D0leSbUdWf3OcfqyaCSAQ8Ryq00bofSekfr9W8u1jyYZo6ir0xu9Gtcf7BjcHJpnbZH7JOCpP60A== dependencies: acorn "^6.0.1" acorn-walk "^6.0.1" acorn-walk@^6.0.1: - version "6.1.1" - resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-6.1.1.tgz#d363b66f5fac5f018ff9c3a1e7b6f8e310cc3913" - integrity sha512-OtUw6JUTgxA2QoqqmrmQ7F2NYqiBPi/L2jqHyFtllhOUvXYQXf0Z1CYUinIfyT4bTCGmrA7gX9FvHA81uzCoVw== + version "6.2.0" + resolved "https://registry.npmjs.org/acorn-walk/-/acorn-walk-6.2.0.tgz#123cb8f3b84c2171f1f7fb252615b1c78a6b1a8c" + integrity sha512-7evsyfH1cLOCdAzZAd43Cic04yKydNx0cF+7tiA19p1XnLLPU4dpCQOqpjqwokFe//vS0QqfqqjCS2JkiIs0cA== -acorn@^5.5.3: - version "5.7.3" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.7.3.tgz#67aa231bf8812974b85235a96771eb6bd07ea279" - integrity sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw== +acorn@^6.0.1: + version "6.4.2" + resolved "https://registry.npmjs.org/acorn/-/acorn-6.4.2.tgz#35866fd710528e92de10cf06016498e47e39e1e6" + integrity sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ== -acorn@^6.0.1, acorn@^6.0.5: - version "6.1.1" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.1.1.tgz#7d25ae05bb8ad1f9b699108e1094ecd7884adc1f" - integrity sha512-jPTiwtOxaHNaAPg/dmrJ/beuzLRnXtB0kQPQ8JpotKJgTB6rX6c8mlf315941pyjBSaPg8NHXS9fhP4u17DpGA== +acorn@^7.1.0: + version "7.4.1" + resolved "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" + integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== -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== +agent-base@4, agent-base@^4.3.0: + version "4.3.0" + resolved "https://registry.npmjs.org/agent-base/-/agent-base-4.3.0.tgz#8165f01c436009bccad0b1d122f05ed770efc6ee" + integrity sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg== + dependencies: + es6-promisify "^5.0.0" -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== +agent-base@~4.2.1: + version "4.2.1" + resolved "https://registry.npmjs.org/agent-base/-/agent-base-4.2.1.tgz#d89e5999f797875674c07d87f260fc41e83e8ca9" + integrity sha512-JVwXMr9nHYTUXsBFKUqhJwvlcYU/blreOEUkhNR2eXZIvwd+c+o5V4MgDPKWnMS/56awN3TRzIP+KoPn+roQtg== + dependencies: + es6-promisify "^5.0.0" -ajv@^6.1.0, ajv@^6.5.5: - version "6.10.0" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.10.0.tgz#90d0d54439da587cd7e843bfb7045f50bd22bdf1" - integrity sha512-nffhOpkymDECQyR0mnsUtoCE8RlX38G0rYP+wgLWFyZuUyuuojSSvi/+euOiQBIn63whYwYVIIH1TvE3tu4OEg== +agentkeepalive@^3.4.1: + version "3.5.2" + resolved "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-3.5.2.tgz#a113924dd3fa24a0bc3b78108c450c2abee00f67" + integrity sha512-e0L/HNe6qkQ7H19kTlRRqUibEAwDK5AFk6y3PtMsuut2VAH6+Q4xZml1tNDJD7kSAyqmbG/K08K5WEJYtUrSlQ== dependencies: - fast-deep-equal "^2.0.1" + humanize-ms "^1.2.1" + +ajv@^6.12.3: + version "6.12.6" + resolved "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" + integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== + dependencies: + fast-deep-equal "^3.1.1" fast-json-stable-stringify "^2.0.0" json-schema-traverse "^0.4.1" uri-js "^4.2.2" +ansi-256-colors@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/ansi-256-colors/-/ansi-256-colors-1.1.0.tgz#910de50efcc7c09e3d82f2f87abd6b700c18818a" + integrity sha1-kQ3lDvzHwJ49gvL4er1rcAwYgYo= + ansi-colors@^1.0.1: version "1.1.0" - resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-1.1.0.tgz#6374b4dd5d4718ff3ce27a671a3b1cad077132a9" + resolved "https://registry.npmjs.org/ansi-colors/-/ansi-colors-1.1.0.tgz#6374b4dd5d4718ff3ce27a671a3b1cad077132a9" integrity sha512-SFKX67auSNoVR38N3L+nvsPjOE0bybKTYbkf5tRvushrAPQ9V75huw0ZxBkKVeRU9kqH3d6HA4xTckbwZ4ixmA== dependencies: ansi-wrap "^0.1.0" +ansi-colors@^4.1.1: + version "4.1.1" + resolved "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" + integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== + ansi-cyan@^0.1.1: version "0.1.1" - resolved "https://registry.yarnpkg.com/ansi-cyan/-/ansi-cyan-0.1.1.tgz#538ae528af8982f28ae30d86f2f17456d2609873" + resolved "https://registry.npmjs.org/ansi-cyan/-/ansi-cyan-0.1.1.tgz#538ae528af8982f28ae30d86f2f17456d2609873" integrity sha1-U4rlKK+JgvKK4w2G8vF0VtJgmHM= dependencies: ansi-wrap "0.1.0" -ansi-escapes@^3.0.0: +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" + resolved "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz#8780b98ff9dbf5638152d1f1fe5c1d7b4442976b" integrity sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ== +ansi-escapes@^4.2.1: + version "4.3.1" + resolved "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.1.tgz#a5c47cc43181f1f38ffd7076837700d395522a61" + integrity sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA== + dependencies: + type-fest "^0.11.0" + ansi-gray@^0.1.1: version "0.1.1" - resolved "https://registry.yarnpkg.com/ansi-gray/-/ansi-gray-0.1.1.tgz#2962cf54ec9792c48510a3deb524436861ef7251" + resolved "https://registry.npmjs.org/ansi-gray/-/ansi-gray-0.1.1.tgz#2962cf54ec9792c48510a3deb524436861ef7251" integrity sha1-KWLPVOyXksSFEKPetSRDaGHvclE= dependencies: ansi-wrap "0.1.0" ansi-red@^0.1.1: version "0.1.1" - resolved "https://registry.yarnpkg.com/ansi-red/-/ansi-red-0.1.1.tgz#8c638f9d1080800a353c9c28c8a81ca4705d946c" + resolved "https://registry.npmjs.org/ansi-red/-/ansi-red-0.1.1.tgz#8c638f9d1080800a353c9c28c8a81ca4705d946c" integrity sha1-jGOPnRCAgAo1PJwoyKgcpHBdlGw= dependencies: ansi-wrap "0.1.0" ansi-regex@^2.0.0: version "2.1.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" + resolved "https://registry.npmjs.org/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" + resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg= ansi-regex@^4.0.0, ansi-regex@^4.1.0: version "4.1.0" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" + resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg== +ansi-regex@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75" + integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg== + ansi-styles@^2.2.1: version "2.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" + resolved "https://registry.npmjs.org/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" + resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== dependencies: color-convert "^1.9.0" +ansi-styles@^4.0.0, ansi-styles@^4.1.0: + version "4.3.0" + resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" + integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== + dependencies: + color-convert "^2.0.1" + ansi-wrap@0.1.0, ansi-wrap@^0.1.0: version "0.1.0" - resolved "https://registry.yarnpkg.com/ansi-wrap/-/ansi-wrap-0.1.0.tgz#a82250ddb0015e9a27ca82e82ea603bbfa45efaf" + resolved "https://registry.npmjs.org/ansi-wrap/-/ansi-wrap-0.1.0.tgz#a82250ddb0015e9a27ca82e82ea603bbfa45efaf" integrity sha1-qCJQ3bABXponyoLoLqYDu/pF768= ansi@^0.3.0, ansi@~0.3.1: version "0.3.1" - resolved "https://registry.yarnpkg.com/ansi/-/ansi-0.3.1.tgz#0c42d4fb17160d5a9af1e484bace1c66922c1b21" + resolved "https://registry.npmjs.org/ansi/-/ansi-0.3.1.tgz#0c42d4fb17160d5a9af1e484bace1c66922c1b21" integrity sha1-DELU+xcWDVqa8eSEus4cZpIsGyE= anymatch@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" + resolved "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" integrity sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw== dependencies: micromatch "^3.1.4" normalize-path "^2.1.1" -append-transform@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/append-transform/-/append-transform-1.0.0.tgz#046a52ae582a228bd72f58acfbe2967c678759ab" - integrity sha512-P009oYkeHyU742iSZJzZZywj4QRJdnTWffaKuJQLablCZ1uz6/cW4yaRgcDaoQ+uwOxxnt0gRUcwfsNP2ri0gw== +anymatch@^3.0.3: + version "3.1.1" + resolved "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz#c55ecf02185e2469259399310c173ce31233b142" + integrity sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg== dependencies: - default-require-extensions "^2.0.0" + normalize-path "^3.0.0" + picomatch "^2.0.4" aproba@^1.0.3, aproba@^1.1.1: version "1.2.0" - resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" + resolved "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw== +aproba@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz#52520b8ae5b569215b354efc0caa3fe1e45a8adc" + integrity sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ== + 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" + resolved "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz#4b35c2944f062a8bfcda66410760350fe9ddfc21" integrity sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w== dependencies: delegates "^1.0.0" @@ -1468,14 +2897,22 @@ are-we-there-yet@~1.1.2: argparse@^1.0.7: version "1.0.10" - resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" + resolved "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== dependencies: sprintf-js "~1.0.2" +aria-query@^4.0.2, aria-query@^4.2.2: + version "4.2.2" + resolved "https://registry.npmjs.org/aria-query/-/aria-query-4.2.2.tgz#0d2ca6c9aceb56b8977e9fed6aed7e15bbd2f83b" + integrity sha512-o/HelwhuKpTj/frsOsbNLNgnNGVIFsVP/SW2BSF14gVl7kAfMOJ6/8wUAUvG1R1NHKrfG+2sHZTu0yauT1qBrA== + dependencies: + "@babel/runtime" "^7.10.2" + "@babel/runtime-corejs3" "^7.10.2" + arr-diff@^1.0.1: version "1.1.0" - resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-1.1.0.tgz#687c32758163588fef7de7b36fabe495eb1a399a" + resolved "https://registry.npmjs.org/arr-diff/-/arr-diff-1.1.0.tgz#687c32758163588fef7de7b36fabe495eb1a399a" integrity sha1-aHwydYFjWI/vfeezb6vklesaOZo= dependencies: arr-flatten "^1.0.1" @@ -1483,249 +2920,249 @@ arr-diff@^1.0.1: arr-diff@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-2.0.0.tgz#8f3b827f955a8bd669697e4a4256ac3ceae356cf" + resolved "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz#8f3b827f955a8bd669697e4a4256ac3ceae356cf" integrity sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8= 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" + resolved "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" integrity sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA= 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" + resolved "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" integrity sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg== arr-union@^2.0.1: version "2.1.0" - resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-2.1.0.tgz#20f9eab5ec70f5c7d215b1077b1c39161d292c7d" + resolved "https://registry.npmjs.org/arr-union/-/arr-union-2.1.0.tgz#20f9eab5ec70f5c7d215b1077b1c39161d292c7d" integrity sha1-IPnqtexw9cfSFbEHexw5Fh0pLH0= arr-union@^3.1.0: version "3.1.0" - resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" + resolved "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ= +array-differ@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/array-differ/-/array-differ-1.0.0.tgz#eff52e3758249d33be402b8bb8e564bb2b5d4031" + integrity sha1-7/UuN1gknTO+QCuLuOVkuytdQDE= + array-differ@^2.0.3: version "2.1.0" - resolved "https://registry.yarnpkg.com/array-differ/-/array-differ-2.1.0.tgz#4b9c1c3f14b906757082925769e8ab904f4801b1" + resolved "https://registry.npmjs.org/array-differ/-/array-differ-2.1.0.tgz#4b9c1c3f14b906757082925769e8ab904f4801b1" integrity sha512-KbUpJgx909ZscOc/7CLATBFam7P1Z1QRQInvgT0UztM9Q72aGKCunKASAl7WNW0tnPmPyEMeMhdsfWhfmW037w== array-equal@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/array-equal/-/array-equal-1.0.0.tgz#8c2a5ef2472fd9ea742b04c77a75093ba2757c93" + resolved "https://registry.npmjs.org/array-equal/-/array-equal-1.0.0.tgz#8c2a5ef2472fd9ea742b04c77a75093ba2757c93" integrity sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM= array-filter@~0.0.0: version "0.0.1" - resolved "https://registry.yarnpkg.com/array-filter/-/array-filter-0.0.1.tgz#7da8cf2e26628ed732803581fd21f67cacd2eeec" + resolved "https://registry.npmjs.org/array-filter/-/array-filter-0.0.1.tgz#7da8cf2e26628ed732803581fd21f67cacd2eeec" integrity sha1-fajPLiZijtcygDWB/SH2fKzS7uw= +array-find-index@^1.0.1: + version "1.0.2" + resolved "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1" + integrity sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E= + +array-ify@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/array-ify/-/array-ify-1.0.0.tgz#9e528762b4a9066ad163a6962a364418e9626ece" + integrity sha1-nlKHYrSpBmrRY6aWKjZEGOlibs4= + array-map@~0.0.0: version "0.0.0" - resolved "https://registry.yarnpkg.com/array-map/-/array-map-0.0.0.tgz#88a2bab73d1cf7bcd5c1b118a003f66f665fa662" + resolved "https://registry.npmjs.org/array-map/-/array-map-0.0.0.tgz#88a2bab73d1cf7bcd5c1b118a003f66f665fa662" integrity sha1-iKK6tz0c97zVwbEYoAP2b2ZfpmI= array-reduce@~0.0.0: version "0.0.0" - resolved "https://registry.yarnpkg.com/array-reduce/-/array-reduce-0.0.0.tgz#173899d3ffd1c7d9383e4479525dbe278cab5f2b" + resolved "https://registry.npmjs.org/array-reduce/-/array-reduce-0.0.0.tgz#173899d3ffd1c7d9383e4479525dbe278cab5f2b" integrity sha1-FziZ0//Rx9k4PkR5Ul2+J4yrXys= array-slice@^0.2.3: version "0.2.3" - resolved "https://registry.yarnpkg.com/array-slice/-/array-slice-0.2.3.tgz#dd3cfb80ed7973a75117cdac69b0b99ec86186f5" + resolved "https://registry.npmjs.org/array-slice/-/array-slice-0.2.3.tgz#dd3cfb80ed7973a75117cdac69b0b99ec86186f5" integrity sha1-3Tz7gO15c6dRF82sabC5nshhhvU= -array-union@^1.0.2: +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" + resolved "https://registry.npmjs.org/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" + resolved "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" integrity sha1-r2rId6Jcx/dOBYiUdThY39sk/bY= array-unique@^0.2.1: version "0.2.1" - resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.2.1.tgz#a1d97ccafcbc2625cc70fadceb36a50c58b01a53" + resolved "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz#a1d97ccafcbc2625cc70fadceb36a50c58b01a53" integrity sha1-odl8yvy8JiXMcPrc6zalDFiwGlM= array-unique@^0.3.2: version "0.3.2" - resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" + resolved "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg= -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: +arrify@^1.0.0, arrify@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" + resolved "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" integrity sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0= art@^0.10.0: version "0.10.3" - resolved "https://registry.yarnpkg.com/art/-/art-0.10.3.tgz#b01d84a968ccce6208df55a733838c96caeeaea2" + resolved "https://registry.npmjs.org/art/-/art-0.10.3.tgz#b01d84a968ccce6208df55a733838c96caeeaea2" integrity sha512-HXwbdofRTiJT6qZX/FnchtldzJjS3vkLJxQilc3Xj+ma2MXjY4UAyQ0ls1XZYVnDvVIBiFZbC6QsvtW86TD6tQ== -asap@~2.0.3: +asap@^2.0.0, asap@~2.0.3: version "2.0.6" - resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" + resolved "https://registry.npmjs.org/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" - asn1@~0.2.3: version "0.2.4" - resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136" + resolved "https://registry.npmjs.org/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" + resolved "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU= -assert@^1.1.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/assert/-/assert-1.4.1.tgz#99912d591836b5a6f5b345c0f07eefc08fc65d91" - integrity sha1-mZEtWRg2tab1s0XA8H7vwI/GXZE= - 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" + resolved "https://registry.npmjs.org/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" + resolved "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9" integrity sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg== -async-each@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.2.tgz#8b8a7ca2a658f927e9f307d6d1a42f4199f0f735" - integrity sha512-6xrbvN0MOBKSJDdonmSSz2OwFSgxRaVtBDes26mj9KIGtDo+g9xosFRSC+i1gQh2oAN/tQ62AI/pGZGQjVOiRg== - async-limiter@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.0.tgz#78faed8c3d074ab81f22b4e985d79e8738f720f8" - integrity sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg== + version "1.0.1" + resolved "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd" + integrity sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ== -async@^2.4.0, 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== +async@^2.3.0, async@^2.4.0: + version "2.6.3" + resolved "https://registry.npmjs.org/async/-/async-2.6.3.tgz#d72625e2344a3656e3a3ad4fa749fa83299d82ff" + integrity sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg== dependencies: - lodash "^4.17.11" + lodash "^4.17.14" + +async@^3.0.0: + version "3.2.0" + resolved "https://registry.npmjs.org/async/-/async-3.2.0.tgz#b3a2685c5ebb641d3de02d161002c60fc9f85720" + integrity sha512-TR2mEZFVOj2pLStYxLht7TyfuRzaydfpxr3k9RpHIzMgw7A64dzsdqCxH1WJyQdoe8T10nDXd9wnEigmiuHIZw== asynckit@^0.4.0: version "0.4.0" - resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + resolved "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= -atob@^2.1.1: +at-least-node@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2" + integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg== + +atob-lite@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/atob-lite/-/atob-lite-2.0.0.tgz#0fef5ad46f1bd7a8502c65727f0367d5ee43d696" + integrity sha1-D+9a1G8b16hQLGVyfwNn1e5D1pY= + +atob@^2.1.2: version "2.1.2" - resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" + resolved "https://registry.npmjs.org/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" + resolved "https://registry.npmjs.org/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-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" - integrity sha512-poPX9mZH/5CSanm50Q+1toVci6pv5KSRv/5TWCwtzQS5XEwn40BcCrgIeMFWP9CKKIniKXNxoIOnOq4VVlGXhg== - -babel-jest@24.1.0: - version "24.1.0" - resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-24.1.0.tgz#441e23ef75ded3bd547e300ac3194cef87b55190" - integrity sha512-MLcagnVrO9ybQGLEfZUqnOzv36iQzU7Bj4elm39vCukumLVSfoX+tRy3/jW7lUKc7XdpRmB/jech6L/UCsSZjw== - dependencies: - babel-plugin-istanbul "^5.1.0" - babel-preset-jest "^24.1.0" - chalk "^2.4.2" - slash "^2.0.0" - -babel-jest@^24.5.0: - version "24.5.0" - resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-24.5.0.tgz#0ea042789810c2bec9065f7c8ab4dc18e1d28559" - integrity sha512-0fKCXyRwxFTJL0UXDJiT2xYxO9Lu2vBd9n+cC+eDjESzcVG3s2DRGAxbzJX21fceB1WYoBjAh8pQ83dKcl003g== - dependencies: - "@jest/transform" "^24.5.0" - "@jest/types" "^24.5.0" - "@types/babel__core" "^7.1.0" - babel-plugin-istanbul "^5.1.0" - babel-preset-jest "^24.3.0" - chalk "^2.4.2" - slash "^2.0.0" - -babel-plugin-istanbul@^5.1.0: - version "5.1.1" - resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-5.1.1.tgz#7981590f1956d75d67630ba46f0c22493588c893" - integrity sha512-RNNVv2lsHAXJQsEJ5jonQwrJVWK8AcZpG1oxhnjCUaAjL7xahYLANhPUZbzEQHjKy1NMYUwn+0NPKQc8iSY4xQ== + version "1.11.0" + resolved "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz#d61f46d83b2519250e2784daf5b09479a8b41c59" + integrity sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA== + +babel-jest@^25.5.1: + version "25.5.1" + resolved "https://registry.npmjs.org/babel-jest/-/babel-jest-25.5.1.tgz#bc2e6101f849d6f6aec09720ffc7bc5332e62853" + integrity sha512-9dA9+GmMjIzgPnYtkhBg73gOo/RHqPmLruP3BaGL4KEX3Dwz6pI8auSN8G8+iuEG90+GSswyKvslN+JYSaacaQ== + dependencies: + "@jest/transform" "^25.5.1" + "@jest/types" "^25.5.0" + "@types/babel__core" "^7.1.7" + babel-plugin-istanbul "^6.0.0" + babel-preset-jest "^25.5.0" + chalk "^3.0.0" + graceful-fs "^4.2.4" + slash "^3.0.0" + +babel-plugin-dynamic-import-node@^2.3.3: + version "2.3.3" + resolved "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz#84fda19c976ec5c6defef57f9427b3def66e17a3" + integrity sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ== dependencies: - find-up "^3.0.0" - istanbul-lib-instrument "^3.0.0" - test-exclude "^5.0.0" + object.assign "^4.1.0" -babel-plugin-jest-hoist@^24.3.0: - version "24.3.0" - resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-24.3.0.tgz#f2e82952946f6e40bb0a75d266a3790d854c8b5b" - integrity sha512-nWh4N1mVH55Tzhx2isvUN5ebM5CDUvIpXPZYMRazQughie/EqGnbR+czzoQlhUmJG9pPJmYDRhvocotb2THl1w== +babel-plugin-istanbul@^6.0.0: + version "6.0.0" + resolved "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.0.0.tgz#e159ccdc9af95e0b570c75b4573b7c34d671d765" + integrity sha512-AF55rZXpe7trmEylbaE1Gv54wn6rwU03aptvRoVIGP8YykoSxqdVLV1TfwflBCE/QtHmqtP8SWlTENqbK8GCSQ== dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@istanbuljs/load-nyc-config" "^1.0.0" + "@istanbuljs/schema" "^0.1.2" + istanbul-lib-instrument "^4.0.0" + test-exclude "^6.0.0" + +babel-plugin-jest-hoist@^25.5.0: + version "25.5.0" + resolved "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-25.5.0.tgz#129c80ba5c7fc75baf3a45b93e2e372d57ca2677" + integrity sha512-u+/W+WAjMlvoocYGTwthAiQSxDcJAyHpQ6oWlHdFZaaN+Rlk8Q7iiwDPg2lN/FyJtAYnKjFxbn7xus4HCFkg5g== + dependencies: + "@babel/template" "^7.3.3" + "@babel/types" "^7.3.3" "@types/babel__traverse" "^7.0.6" babel-plugin-syntax-trailing-function-commas@^7.0.0-beta.0: version "7.0.0-beta.0" - resolved "https://registry.yarnpkg.com/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-7.0.0-beta.0.tgz#aa213c1435e2bffeb6fca842287ef534ad05d5cf" + resolved "https://registry.npmjs.org/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-7.0.0-beta.0.tgz#aa213c1435e2bffeb6fca842287ef534ad05d5cf" integrity sha512-Xj9XuRuz3nTSbaTXWv3itLOcxyF4oPD8douBBmj7U9BBC6nEBYfyOJYQMf/8PJAFotC62UY5dFfIGEPr7WswzQ== -babel-plugin-transform-react-remove-prop-types@0.4.24: - version "0.4.24" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-remove-prop-types/-/babel-plugin-transform-react-remove-prop-types-0.4.24.tgz#f2edaf9b4c6a5fbe5c1d678bfb531078c1555f3a" - integrity sha512-eqj0hVcJUR57/Ug2zE1Yswsw4LhuqqHhD+8v120T1cl3kjg76QwtyBrdIk4WVwK+lAhBJVYCd/v+4nc4y+8JsA== - -babel-polyfill@6.26.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-polyfill/-/babel-polyfill-6.26.0.tgz#379937abc67d7895970adc621f284cd966cf2153" - integrity sha1-N5k3q8Z9eJWXCtxiHyhM2WbPIVM= - dependencies: - babel-runtime "^6.26.0" - core-js "^2.5.0" - regenerator-runtime "^0.10.5" +babel-preset-current-node-syntax@^0.1.2: + version "0.1.4" + resolved "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-0.1.4.tgz#826f1f8e7245ad534714ba001f84f7e906c3b615" + integrity sha512-5/INNCYhUGqw7VbVjT/hb3ucjgkVHKXY7lX3ZjlN4gm565VyFmJUrJ/h+h16ECVB38R/9SF6aACydpKMLZ/c9w== + dependencies: + "@babel/plugin-syntax-async-generators" "^7.8.4" + "@babel/plugin-syntax-bigint" "^7.8.3" + "@babel/plugin-syntax-class-properties" "^7.8.3" + "@babel/plugin-syntax-import-meta" "^7.8.3" + "@babel/plugin-syntax-json-strings" "^7.8.3" + "@babel/plugin-syntax-logical-assignment-operators" "^7.8.3" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" + "@babel/plugin-syntax-numeric-separator" "^7.8.3" + "@babel/plugin-syntax-object-rest-spread" "^7.8.3" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" + "@babel/plugin-syntax-optional-chaining" "^7.8.3" babel-preset-fbjs@^3.0.1, babel-preset-fbjs@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/babel-preset-fbjs/-/babel-preset-fbjs-3.2.0.tgz#c0e6347d3e0379ed84b3c2434d3467567aa05297" - integrity sha512-5Jo+JeWiVz2wHUUyAlvb/sSYnXNig9r+HqGAOSfh5Fzxp7SnAaR/tEGRJ1ZX7C77kfk82658w6R5Z+uPATTD9g== + version "3.3.0" + resolved "https://registry.npmjs.org/babel-preset-fbjs/-/babel-preset-fbjs-3.3.0.tgz#a6024764ea86c8e06a22d794ca8b69534d263541" + integrity sha512-7QTLTCd2gwB2qGoi5epSULMHugSVgpcVt5YAeiFO9ABLrutDQzKfGwzxgZHLpugq8qMdg/DhRZDZ5CLKxBkEbw== dependencies: "@babel/plugin-proposal-class-properties" "^7.0.0" "@babel/plugin-proposal-object-rest-spread" "^7.0.0" @@ -1755,40 +3192,32 @@ babel-preset-fbjs@^3.0.1, babel-preset-fbjs@^3.2.0: "@babel/plugin-transform-template-literals" "^7.0.0" babel-plugin-syntax-trailing-function-commas "^7.0.0-beta.0" -babel-preset-jest@^24.1.0, babel-preset-jest@^24.3.0: - version "24.3.0" - resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-24.3.0.tgz#db88497e18869f15b24d9c0e547d8e0ab950796d" - integrity sha512-VGTV2QYBa/Kn3WCOKdfS31j9qomaXSgJqi65B6o05/1GsJyj9LVhSljM9ro4S+IBGj/ENhNBuH9bpqzztKAQSw== +babel-preset-jest@^25.5.0: + version "25.5.0" + resolved "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-25.5.0.tgz#c1d7f191829487a907764c65307faa0e66590b49" + integrity sha512-8ZczygctQkBU+63DtSOKGh7tFL0CeCuz+1ieud9lJ1WPQ9O6A1a/r+LGn6Y705PA6whHQ3T1XuB/PmpfNYf8Fw== dependencies: - "@babel/plugin-syntax-object-rest-spread" "^7.0.0" - babel-plugin-jest-hoist "^24.3.0" - -babel-runtime@^6.26.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe" - integrity sha1-llxwWGaOgrVde/4E/yM3vItWR/4= - dependencies: - core-js "^2.4.0" - regenerator-runtime "^0.11.0" + babel-plugin-jest-hoist "^25.5.0" + babel-preset-current-node-syntax "^0.1.2" balanced-match@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" + resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= base64-js@1.1.2: version "1.1.2" - resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.1.2.tgz#d6400cac1c4c660976d90d07a04351d89395f5e8" + resolved "https://registry.npmjs.org/base64-js/-/base64-js-1.1.2.tgz#d6400cac1c4c660976d90d07a04351d89395f5e8" integrity sha1-1kAMrBxMZgl22Q0HoENR2JOV9eg= -base64-js@^1.0.2, base64-js@^1.1.2, base64-js@^1.2.3: - 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== +base64-js@^1.1.2, base64-js@^1.2.3: + version "1.5.1" + resolved "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" + integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== base@^0.11.1: version "0.11.2" - resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" + resolved "https://registry.npmjs.org/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" integrity sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg== dependencies: cache-base "^1.0.1" @@ -1799,67 +3228,59 @@ base@^0.11.1: mixin-deep "^1.2.0" pascalcase "^0.1.1" -basic-auth@~2.0.0: +basic-auth@~2.0.1: version "2.0.1" - resolved "https://registry.yarnpkg.com/basic-auth/-/basic-auth-2.0.1.tgz#b998279bf47ce38344b4f3cf916d4679bbf51e3a" + resolved "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz#b998279bf47ce38344b4f3cf916d4679bbf51e3a" integrity sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg== dependencies: safe-buffer "5.1.2" bcrypt-pbkdf@^1.0.0: version "1.0.2" - resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" + resolved "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" integrity sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4= dependencies: tweetnacl "^0.14.3" -big-integer@^1.6.7: - version "1.6.43" - resolved "https://registry.yarnpkg.com/big-integer/-/big-integer-1.6.43.tgz#8ac15bf13e93e509500859061233e19d8d0d99d1" - integrity sha512-9dULc9jsKmXl0Aeunug8wbF+58n+hQoFjqClN7WeZwGLh0XJUWyJJ9Ee+Ep+Ql/J9fRsTVaeThp8MhiCCrY0Jg== - -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== +before-after-hook@^2.0.0: + version "2.1.0" + resolved "https://registry.npmjs.org/before-after-hook/-/before-after-hook-2.1.0.tgz#b6c03487f44e24200dd30ca5e6a1979c5d2fb635" + integrity sha512-IWIbu7pMqyw3EAJHzzHbWa85b6oud/yfKYg5rqB5hNE8CeMi3nX+2C2sj0HswfblST86hpVEOAb9x34NZd6P7A== -bluebird@^3.5.3: - version "3.5.3" - resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.3.tgz#7d01c6f9616c9a51ab0f8c549a79dfe6ec33efa7" - integrity sha512-/qKPUQlaW1OyR51WeCPBvRnAlnZFUJkCSG5HzGnuIqhgyJtF+T94lFnn33eiazjRm2LAHVy2guNnaq48X9SJuw== +big-integer@^1.6.7: + version "1.6.48" + resolved "https://registry.npmjs.org/big-integer/-/big-integer-1.6.48.tgz#8fd88bd1632cba4a1c8c3e3d7159f08bb95b4b9e" + integrity sha512-j51egjPa7/i+RdiRuJbPdJ2FIUYYPhvYLjzoYbcMMm62ooO6F94fETG4MTs46zPAF9Brs04OajboA/qTGuz78w== -bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.1.1, bn.js@^4.11.9: - version "4.12.0" - resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.12.0.tgz#775b3f278efbb9718eec7361f483fb36fbbfea88" - integrity sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA== +bindings@^1.5.0: + version "1.5.0" + resolved "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df" + integrity sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ== + dependencies: + file-uri-to-path "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= +bluebird@^3.5.1, bluebird@^3.5.3, bluebird@^3.5.5: + version "3.7.2" + resolved "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" + integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== bplist-creator@0.0.7: version "0.0.7" - resolved "https://registry.yarnpkg.com/bplist-creator/-/bplist-creator-0.0.7.tgz#37df1536092824b87c42f957b01344117372ae45" + resolved "https://registry.npmjs.org/bplist-creator/-/bplist-creator-0.0.7.tgz#37df1536092824b87c42f957b01344117372ae45" integrity sha1-N98VNgkoJLh8QvlXsBNEEXNyrkU= dependencies: stream-buffers "~2.2.0" bplist-parser@0.1.1: version "0.1.1" - resolved "https://registry.yarnpkg.com/bplist-parser/-/bplist-parser-0.1.1.tgz#d60d5dcc20cba6dc7e1f299b35d3e1f95dafbae6" + resolved "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.1.1.tgz#d60d5dcc20cba6dc7e1f299b35d3e1f95dafbae6" integrity sha1-1g1dzCDLptx+HymbNdPh+V2vuuY= dependencies: big-integer "^1.6.7" brace-expansion@^1.1.7: version "1.1.11" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== dependencies: balanced-match "^1.0.0" @@ -1867,16 +3288,16 @@ brace-expansion@^1.1.7: braces@^1.8.2: version "1.8.5" - resolved "https://registry.yarnpkg.com/braces/-/braces-1.8.5.tgz#ba77962e12dff969d6b76711e914b737857bf6a7" + resolved "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz#ba77962e12dff969d6b76711e914b737857bf6a7" integrity sha1-uneWLhLf+WnWt2cR6RS3N4V79qc= dependencies: expand-range "^1.8.1" preserve "^0.2.0" repeat-element "^1.1.2" -braces@^2.3.1, braces@^2.3.2: +braces@^2.3.1: version "2.3.2" - resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" + resolved "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" integrity sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w== dependencies: arr-flatten "^1.1.0" @@ -1890,165 +3311,137 @@ braces@^2.3.1, braces@^2.3.2: split-string "^3.0.2" to-regex "^3.0.1" -brorand@^1.0.1, brorand@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" - integrity sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8= +braces@^3.0.1: + version "3.0.2" + resolved "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" + integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== + dependencies: + fill-range "^7.0.1" -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" - integrity sha512-bRFnI4NnjO6cnyLmOV/7PVoDEMJChlcfN0z4s1YMBY989/SvlfMI1lgCnkFUs53e9gQF+w7qu7XdllSTiSl8Aw== +browser-process-hrtime@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz#3c9b4b7d782c8121e56f10106d84c0d0ffc94626" + integrity sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow== browser-resolve@^1.11.3: version "1.11.3" - resolved "https://registry.yarnpkg.com/browser-resolve/-/browser-resolve-1.11.3.tgz#9b7cbb3d0f510e4cb86bdbd796124d28b5890af6" + resolved "https://registry.npmjs.org/browser-resolve/-/browser-resolve-1.11.3.tgz#9b7cbb3d0f510e4cb86bdbd796124d28b5890af6" integrity sha512-exDi1BYWB/6raKHmDTCicQfTkqwN5fioMFV4j8BsfMU4R2DK/QfZfK7kOVkmWCNANf0snkBzqGqAJBao9gZMdQ== 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" - 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.3.4: - version "4.5.3" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.5.3.tgz#969495c410314bc89f14e748505e58be968080f1" - integrity sha512-Tx/Jtrmh6vFg24AelzLwCaCq1IUJiMDM1x/LPzqbmbktF8Zo7F9ONUpOWsFK6TtdON95mSMaQUWqi0ilc8xM6g== +browserslist@^4.14.5, browserslist@^4.15.0: + version "4.16.0" + resolved "https://registry.npmjs.org/browserslist/-/browserslist-4.16.0.tgz#410277627500be3cb28a1bfe037586fbedf9488b" + integrity sha512-/j6k8R0p3nxOC6kx5JGAxsnhc9ixaWJfYc+TNTzxg6+ARaESAvQGV7h0uNOB4t+pLQJZWzcrMxXOxjgsCj3dqQ== dependencies: - caniuse-lite "^1.0.30000955" - electron-to-chromium "^1.3.122" - node-releases "^1.1.12" + caniuse-lite "^1.0.30001165" + colorette "^1.2.1" + electron-to-chromium "^1.3.621" + escalade "^3.1.1" + node-releases "^1.1.67" -bser@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/bser/-/bser-2.0.0.tgz#9ac78d3ed5d915804fd87acb158bc797147a1719" - integrity sha1-mseNPtXZFYBP2HrLFYvHlxR6Fxk= +bser@2.1.1: + version "2.1.1" + resolved "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz#e6787da20ece9d07998533cfd9de6f5c38f4bc05" + integrity sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ== dependencies: node-int64 "^0.4.0" +btoa-lite@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/btoa-lite/-/btoa-lite-1.0.0.tgz#337766da15801210fdd956c22e9c6891ab9d0337" + integrity sha1-M3dm2hWAEhD92VbCLpxokaudAzc= + buffer-crc32@^0.2.13: version "0.2.13" - resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242" + resolved "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242" integrity sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI= buffer-from@^1.0.0: version "1.1.1" - resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" + resolved "https://registry.npmjs.org/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= +build-if-changed@^1.5.0: + version "1.5.5" + resolved "https://registry.npmjs.org/build-if-changed/-/build-if-changed-1.5.5.tgz#895d63b72a7a43a4bad6f9b7b5ba94edfcbb744d" + integrity sha512-Ev9XU5r+HWulJYf58ZyeIIB0TYywReSiWdfxtW37FyGm7p4xHEAYza+c/Gj3IZxnMSYydrW+Xu1a7brJjs1W3A== dependencies: - base64-js "^1.0.2" - ieee754 "^1.1.4" - isarray "^1.0.0" + ansi-256-colors "^1.1.0" + has-flag "^4.0.0" + recrawl "^1.1.1" + saxon "^0.1.15" -builtin-modules@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-3.0.0.tgz#1e587d44b006620d90286cc7a9238bbc6129cab1" - integrity sha512-hMIeU4K2ilbXV6Uv93ZZ0Avg/M91RaKXucQ+4me2Do1txxBDyDZWCBa5bJSLqoNTRpXTLwEzIk1KmloenDDjhg== +builtin-modules@^3.1.0: + version "3.1.0" + resolved "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.1.0.tgz#aad97c15131eb76b65b50ef208e7584cd76a7484" + integrity sha512-k0KL0aWZuBt2lrxrcASWDfwOLMnodeQjodT/1SxEQAXsHANgo6ZC/VEaSEHCXt7aSTZ4/4H5LKa+tBXmW7Vtvw== -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= +builtins@^1.0.3: + version "1.0.3" + resolved "https://registry.npmjs.org/builtins/-/builtins-1.0.3.tgz#cb94faeb61c8696451db36534e1422f94f0aee88" + integrity sha1-y5T662HIaWRR2zZTThQi+U8K7og= + +byline@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/byline/-/byline-5.0.0.tgz#741c5216468eadc457b03410118ad77de8c1ddb1" + integrity sha1-dBxSFkaOrcRXsDQQEYrXfejB3bE= + +byte-size@^4.0.3: + version "4.0.4" + resolved "https://registry.npmjs.org/byte-size/-/byte-size-4.0.4.tgz#29d381709f41aae0d89c631f1c81aec88cd40b23" + integrity sha512-82RPeneC6nqCdSwCX2hZUz3JPOvN5at/nTEw/CMf05Smu3Hrpo9Psb7LjN+k+XndNArG1EY8L4+BM3aTM4BCvw== bytes@3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" + resolved "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" integrity sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg= -bytes@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6" - integrity sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg== +cacache@^11.3.3: + version "11.3.3" + resolved "https://registry.npmjs.org/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" -cacache@^11.0.2: - version "11.3.2" - resolved "https://registry.yarnpkg.com/cacache/-/cacache-11.3.2.tgz#2d81e308e3d258ca38125b676b98b2ac9ce69bfa" - integrity sha512-E0zP4EPGDOaT2chM08Als91eYnf8Z+eH1awwwVsngUmgppfM5jjJ8l3z5vO5p5w/I3LsiXawb1sW0VY65pQABg== +cacache@^12.0.0, cacache@^12.0.3: + version "12.0.4" + resolved "https://registry.npmjs.org/cacache/-/cacache-12.0.4.tgz#668bcbd105aeb5f1d92fe25570ec9525c8faa40c" + integrity sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ== dependencies: - bluebird "^3.5.3" + bluebird "^3.5.5" chownr "^1.1.1" figgy-pudding "^3.5.1" - glob "^7.1.3" + glob "^7.1.4" graceful-fs "^4.1.15" + infer-owner "^1.0.3" 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.2" + 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" + resolved "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" integrity sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ== dependencies: collection-visit "^1.0.0" @@ -2061,67 +3454,128 @@ cache-base@^1.0.1: union-value "^1.0.0" unset-value "^1.0.0" +call-bind@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/call-bind/-/call-bind-1.0.0.tgz#24127054bb3f9bdcb4b1fb82418186072f77b8ce" + integrity sha512-AEXsYIyyDY3MCzbwdhzG3Jx1R0J2wetQyUynn6dYHAO+bg8l1k7jwZtRv4ryryFs7EP+NDlikJlVe59jr0cM2w== + dependencies: + function-bind "^1.1.1" + get-intrinsic "^1.0.0" + +call-me-maybe@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/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" + resolved "https://registry.npmjs.org/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" + resolved "https://registry.npmjs.org/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" + resolved "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz#06eb84f00eea413da86affefacbffb36093b3c50" integrity sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA= -callsites@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.0.0.tgz#fb7eb569b72ad7a45812f93fd9430a3e410b3dd3" - integrity sha512-tWnkwu9YEq2uzlBDI4RcLn8jrFvF9AOi8PxDNU3hZZjJcjkcRAq3vCI+vZcg1SuxISDYe86k9VZFwAxDiJGoAw== +callsites@^3.0.0: + version "3.1.0" + resolved "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" + integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== + +camelcase-keys@^2.0.0: + version "2.1.0" + resolved "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz#308beeaffdf28119051efa1d932213c91b8f92e7" + integrity sha1-MIvur/3ygRkFHvodkyITyRuPkuc= + dependencies: + camelcase "^2.0.0" + map-obj "^1.0.0" + +camelcase-keys@^4.0.0: + version "4.2.0" + resolved "https://registry.npmjs.org/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-keys@^6.2.2: + version "6.2.2" + resolved "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz#5e755d6ba51aa223ec7d3d52f25778210f9dc3c0" + integrity sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg== + dependencies: + camelcase "^5.3.1" + map-obj "^4.0.0" + quick-lru "^4.0.1" + +camelcase@^2.0.0: + version "2.1.1" + resolved "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz#7c1d16d679a1bbe59ca02cacecfb011e201f5a1f" + integrity sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8= camelcase@^4.1.0: version "4.1.0" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd" + resolved "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd" integrity sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0= -camelcase@^5.0.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.2.0.tgz#e7522abda5ed94cc0489e1b8466610e88404cf45" - integrity sha512-IXFsBS2pC+X0j0N/GE7Dm7j3bsEBp+oTpb7F50dwEVX7rf3IgwO9XatnegTsDtniKCUtEJH4fSU6Asw7uoVLfQ== +camelcase@^5.0.0, camelcase@^5.3.1: + version "5.3.1" + resolved "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" + integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== -caniuse-lite@^1.0.30000955: - version "1.0.30000955" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000955.tgz#360fdb9a1e41d6dd996130411334e44a39e4446d" - integrity sha512-6AwmIKgqCYfDWWadRkAuZSHMQP4Mmy96xAXEdRBlN/luQhlRYOKgwOlZ9plpCOsVbBuqbTmGqDK3JUM/nlr8CA== +caniuse-lite@^1.0.30001165: + version "1.0.30001168" + resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001168.tgz#6fcd098c139d003b9bd484cbb9ca26cb89907f9a" + integrity sha512-P2zmX7swIXKu+GMMR01TWa4csIKELTNnZKc+f1CjebmZJQtTAEXmpQSoKVJVVcvPGAA0TEYTOUp3VehavZSFPQ== capture-exit@^1.2.0: version "1.2.0" - resolved "https://registry.yarnpkg.com/capture-exit/-/capture-exit-1.2.0.tgz#1c5fcc489fd0ab00d4f1ac7ae1072e3173fbab6f" + resolved "https://registry.npmjs.org/capture-exit/-/capture-exit-1.2.0.tgz#1c5fcc489fd0ab00d4f1ac7ae1072e3173fbab6f" integrity sha1-HF/MSJ/QqwDU8ax64QcuMXP7q28= dependencies: rsvp "^3.3.3" capture-exit@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/capture-exit/-/capture-exit-2.0.0.tgz#fb953bfaebeb781f62898239dabb426d08a509a4" + resolved "https://registry.npmjs.org/capture-exit/-/capture-exit-2.0.0.tgz#fb953bfaebeb781f62898239dabb426d08a509a4" integrity sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g== dependencies: rsvp "^4.8.4" caseless@~0.12.0: version "0.12.0" - resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" + resolved "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= +chalk@2.4.2, chalk@^2.0.0, chalk@^2.0.1, chalk@^2.3.0, chalk@^2.3.1, chalk@^2.4.1, chalk@^2.4.2: + version "2.4.2" + resolved "https://registry.npmjs.org/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@4.1.0, chalk@^4.0.0, chalk@^4.1.0: + version "4.1.0" + resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz#4e14870a618d9e2edd97dd8345fd9d9dc315646a" + integrity sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + chalk@^1.1.1: version "1.1.3" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" + resolved "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" integrity sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg= dependencies: ansi-styles "^2.2.1" @@ -2130,79 +3584,42 @@ chalk@^1.1.1: strip-ansi "^3.0.0" supports-color "^2.0.0" -chalk@^2.0.0, chalk@^2.0.1, chalk@^2.3.0, chalk@^2.4.1, chalk@^2.4.2: - version "2.4.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" - integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== +chalk@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz#3f73c2bf526591f574cc492c51e2456349f844e4" + integrity sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg== dependencies: - ansi-styles "^3.2.1" - escape-string-regexp "^1.0.5" - supports-color "^5.3.0" + ansi-styles "^4.1.0" + supports-color "^7.1.0" chardet@^0.4.0: version "0.4.2" - resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.4.2.tgz#b5473b33dc97c424e5d98dc87d55d4d8a29c8bf2" + resolved "https://registry.npmjs.org/chardet/-/chardet-0.4.2.tgz#b5473b33dc97c424e5d98dc87d55d4d8a29c8bf2" integrity sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I= -cheerio@^1.0.0-rc.2: - version "1.0.0-rc.2" - resolved "https://registry.yarnpkg.com/cheerio/-/cheerio-1.0.0-rc.2.tgz#4b9f53a81b27e4d5dac31c0ffd0cfa03cc6830db" - integrity sha1-S59TqBsn5NXawxwP/Qz6A8xoMNs= - dependencies: - css-select "~1.2.0" - dom-serializer "~0.1.0" - entities "~1.1.1" - htmlparser2 "^3.9.1" - lodash "^4.15.0" - parse5 "^3.0.1" - -chokidar@^2.0.2: - version "2.1.5" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.1.5.tgz#0ae8434d962281a5f56c72869e79cb6d9d86ad4d" - integrity sha512-i0TprVWp+Kj4WRPtInjexJ8Q+BqTE909VpH8xVhXrJkoc5QC8VO9TryGOqTr+2hljzc1sC62t22h5tZePodM/A== - 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" +chardet@^0.7.0: + version "0.7.0" + resolved "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" + integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== -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== +chownr@^1.1.1, chownr@^1.1.2: + version "1.1.4" + resolved "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" + integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== -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" - integrity sha512-xDbVgyfDTT2piup/h8dK/y4QZfJRSa73bw1WZ8b4XM1o7fsFubUVGYcE+1ANtOzJJELGpYoG2961z0Z6OAld9A== - dependencies: - tslib "^1.9.0" +ci-info@^1.5.0: + version "1.6.0" + resolved "https://registry.npmjs.org/ci-info/-/ci-info-1.6.0.tgz#2ca20dbb9ceb32d4524a683303313f0304b1e497" + integrity sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A== ci-info@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" + resolved "https://registry.npmjs.org/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" + resolved "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" integrity sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg== dependencies: arr-union "^3.1.0" @@ -2212,19 +3629,19 @@ class-utils@^0.3.5: cli-cursor@^2.1.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5" + resolved "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5" integrity sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU= dependencies: restore-cursor "^2.0.0" 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= + version "2.2.1" + resolved "https://registry.npmjs.org/cli-width/-/cli-width-2.2.1.tgz#b0433d0b4e9c847ef18868a4ef16fd5fc8271c48" + integrity sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw== cliui@^3.2.0: version "3.2.0" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-3.2.0.tgz#120601537a916d29940f934da3b48d585a39213d" + resolved "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz#120601537a916d29940f934da3b48d585a39213d" integrity sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0= dependencies: string-width "^1.0.1" @@ -2233,26 +3650,71 @@ cliui@^3.2.0: cliui@^4.0.0: version "4.1.0" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-4.1.0.tgz#348422dbe82d800b3022eef4f6ac10bf2e4d1b49" + resolved "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz#348422dbe82d800b3022eef4f6ac10bf2e4d1b49" integrity sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ== dependencies: string-width "^2.1.1" strip-ansi "^4.0.0" wrap-ansi "^2.0.0" +cliui@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/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" + +cliui@^6.0.0: + version "6.0.0" + resolved "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz#511d702c0c4e41ca156d7d0e96021f23e13225b1" + integrity sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ== + dependencies: + string-width "^4.2.0" + strip-ansi "^6.0.0" + wrap-ansi "^6.2.0" + +cliui@^7.0.2: + version "7.0.4" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" + integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== + dependencies: + string-width "^4.2.0" + strip-ansi "^6.0.0" + wrap-ansi "^7.0.0" + +clone@^1.0.2: + version "1.0.4" + resolved "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" + integrity sha1-2jCcwmPfFZlMaIypAheco8fNfH4= + +cmd-shim@^2.0.2: + version "2.1.0" + resolved "https://registry.npmjs.org/cmd-shim/-/cmd-shim-2.1.0.tgz#e59a08d4248dda3bb502044083a4db4ac890579a" + integrity sha512-A5C0Cyf2H8sKsHqX0tvIWRXw5/PK++3Dc0lDbsugr90nOECLLuSPahVQBG8pgmgiXgm/TzBWMqI2rWdZwHduAw== + dependencies: + graceful-fs "^4.1.2" + mkdirp "~0.5.0" + co@^4.6.0: version "4.6.0" - resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" + resolved "https://registry.npmjs.org/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" integrity sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ= 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" + resolved "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c= +collect-v8-coverage@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz#cc2c8e94fc18bbdffe64d6534570c8a673b27f59" + integrity sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg== + collection-visit@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" + resolved "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" integrity sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA= dependencies: map-visit "^1.0.0" @@ -2260,63 +3722,97 @@ collection-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" + resolved "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== dependencies: color-name "1.1.3" +color-convert@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== + dependencies: + color-name "~1.1.4" + color-name@1.1.3: version "1.1.3" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= +color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + color-support@^1.1.3: version "1.1.3" - resolved "https://registry.yarnpkg.com/color-support/-/color-support-1.1.3.tgz#93834379a1cc9a0c61f82f52f0d04322251bd5a2" + resolved "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz#93834379a1cc9a0c61f82f52f0d04322251bd5a2" integrity sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg== +colorette@^1.2.1: + version "1.2.1" + resolved "https://registry.npmjs.org/colorette/-/colorette-1.2.1.tgz#4d0b921325c14faf92633086a536db6e89564b1b" + integrity sha512-puCDz0CzydiSYOrnXpz/PKd69zRrribezjtE9yd4zvytoRc8+RY/KJPvtPFKZS3E3wP6neGyMe0vOTlHO5L3Pw== + +columnify@^1.5.4: + version "1.5.4" + resolved "https://registry.npmjs.org/columnify/-/columnify-1.5.4.tgz#4737ddf1c7b69a8a7c340570782e947eec8e78bb" + integrity sha1-Rzfd8ce2mop8NAVweC6UfuyOeLs= + dependencies: + strip-ansi "^3.0.0" + wcwidth "^1.0.0" + combined-stream@^1.0.6, combined-stream@~1.0.6: - version "1.0.7" - resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.7.tgz#2d1d24317afb8abe95d6d2c0b07b57813539d828" - integrity sha512-brWl9y6vOB1xYPZcpZde3N9zDByXTosAeMDo4p1wzo6UMOX4vumB+TP1RZ76sfE6Md68Q0NJSrE/gbezd4Ul+w== + version "1.0.8" + resolved "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" + integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== dependencies: delayed-stream "~1.0.0" -commander@^2.19.0, commander@^2.9.0, commander@~2.19.0: - version "2.19.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.19.0.tgz#f6198aa84e5b83c46054b94ddedbfed5ee9ff12a" - integrity sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg== +commander@^2.9.0: + version "2.20.3" + resolved "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" + integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== + +commander@mateodelnorte/commander.js: + version "2.15.1" + resolved "https://codeload.github.com/mateodelnorte/commander.js/tar.gz/9060bf880b791cf39245d425f1e8a41a55616781" + dependencies: + find-module-bin "^1.0.0" commander@~2.13.0: version "2.13.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.13.0.tgz#6964bca67685df7c1f1430c584f07d7597885b9c" + resolved "https://registry.npmjs.org/commander/-/commander-2.13.0.tgz#6964bca67685df7c1f1430c584f07d7597885b9c" integrity sha512-MVuS359B+YzaWqjCL/c+22gfryv+mCBPHAv3zyVI2GN8EY6IRP8VwtasXn8jyyhvvq84R4ImN1OKRtcbIasjYA== commondir@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" + resolved "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs= -compare-versions@^3.2.1: - version "3.4.0" - resolved "https://registry.yarnpkg.com/compare-versions/-/compare-versions-3.4.0.tgz#e0747df5c9cb7f054d6d3dc3e1dbc444f9e92b26" - integrity sha512-tK69D7oNXXqUW3ZNo/z7NXTEz22TCF0pTE+YF9cxvaAM9XnkLo1fV621xCLrRR6aevJlKxExkss0vWqUCUpqdg== +compare-func@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/compare-func/-/compare-func-2.0.0.tgz#fb65e75edbddfd2e568554e8b5b05fff7a51fcb3" + integrity sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA== + dependencies: + array-ify "^1.0.0" + dot-prop "^5.1.0" component-emitter@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.2.1.tgz#137918d6d78283f7df7a6b7c5a63e140e69425e6" - integrity sha1-E3kY1teCg/ffemt8WmPhQOaUJeY= + version "1.3.0" + resolved "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0" + integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg== compressible@~2.0.16: - version "2.0.16" - resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.16.tgz#a49bf9858f3821b64ce1be0296afc7380466a77f" - integrity sha512-JQfEOdnI7dASwCuSPWIeVYwc/zMsu/+tRhoUvEfXz2gxOA2DNjmG5vhtFdBlhWPPGo+RdT9S3tgc/uH5qgDiiA== + version "2.0.18" + resolved "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz#af53cca6b070d4c3c0750fbd77286a6d7cc46fba" + integrity sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg== dependencies: - mime-db ">= 1.38.0 < 2" + mime-db ">= 1.43.0 < 2" compression@^1.7.1: version "1.7.4" - resolved "https://registry.yarnpkg.com/compression/-/compression-1.7.4.tgz#95523eff170ca57c29a0ca41e6fe131f41e5bb8f" + resolved "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz#95523eff170ca57c29a0ca41e6fe131f41e5bb8f" integrity sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ== dependencies: accepts "~1.3.5" @@ -2329,12 +3825,12 @@ compression@^1.7.1: concat-map@0.0.1: version "0.0.1" - resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + resolved "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= concat-stream@^1.5.0, concat-stream@^1.6.0: version "1.6.2" - resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" + resolved "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw== dependencies: buffer-from "^1.0.0" @@ -2342,43 +3838,141 @@ concat-stream@^1.5.0, concat-stream@^1.6.0: readable-stream "^2.2.2" typedarray "^0.0.6" +concat-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/concat-stream/-/concat-stream-2.0.0.tgz#414cf5af790a48c60ab9be4527d56d5e41133cb1" + integrity sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A== + dependencies: + buffer-from "^1.0.0" + inherits "^2.0.3" + readable-stream "^3.0.2" + typedarray "^0.0.6" + +config-chain@^1.1.11: + version "1.1.12" + resolved "https://registry.npmjs.org/config-chain/-/config-chain-1.1.12.tgz#0fde8d091200eb5e808caf25fe618c02f48e4efa" + integrity sha512-a1eOIcu8+7lUInge4Rpf/n4Krkf3Dd9lqhljRzII1/Zno/kRtUWnznPO3jOKBmTEktkt3fkxisUcivoj0ebzoA== + dependencies: + ini "^1.3.4" + proto-list "~1.2.1" + connect@^3.6.5: - version "3.6.6" - resolved "https://registry.yarnpkg.com/connect/-/connect-3.6.6.tgz#09eff6c55af7236e137135a72574858b6786f524" - integrity sha1-Ce/2xVr3I24TcTWnJXSFi2eG9SQ= + version "3.7.0" + resolved "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz#5d49348910caa5e07a01800b030d0c35f20484f8" + integrity sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ== dependencies: debug "2.6.9" - finalhandler "1.1.0" - parseurl "~1.3.2" + finalhandler "1.1.2" + parseurl "~1.3.3" utils-merge "1.0.1" -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" + resolved "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" integrity sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4= -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= +conventional-changelog-angular@^5.0.0, conventional-changelog-angular@^5.0.3: + version "5.0.12" + resolved "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-5.0.12.tgz#c979b8b921cbfe26402eb3da5bbfda02d865a2b9" + integrity sha512-5GLsbnkR/7A89RyHLvvoExbiGbd9xKdKqDTrArnPbOqBqG/2wIosu0fHwpeIRI8Tl94MhVNBXcLJZl92ZQ5USw== + dependencies: + compare-func "^2.0.0" + q "^1.5.1" -convert-source-map@^1.1.0, convert-source-map@^1.4.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== +conventional-changelog-conventionalcommits@^4.3.1: + version "4.5.0" + resolved "https://registry.npmjs.org/conventional-changelog-conventionalcommits/-/conventional-changelog-conventionalcommits-4.5.0.tgz#a02e0b06d11d342fdc0f00c91d78265ed0bc0a62" + integrity sha512-buge9xDvjjOxJlyxUnar/+6i/aVEVGA7EEh4OafBCXPlLUQPGbRUBhBUveWRxzvR8TEjhKEP4BdepnpG2FSZXw== + dependencies: + compare-func "^2.0.0" + lodash "^4.17.15" + q "^1.5.1" + +conventional-changelog-core@^3.1.6: + version "3.2.3" + resolved "https://registry.npmjs.org/conventional-changelog-core/-/conventional-changelog-core-3.2.3.tgz#b31410856f431c847086a7dcb4d2ca184a7d88fb" + integrity sha512-LMMX1JlxPIq/Ez5aYAYS5CpuwbOk6QFp8O4HLAcZxe3vxoCtABkhfjetk8IYdRB9CDQGwJFLR3Dr55Za6XKgUQ== + dependencies: + conventional-changelog-writer "^4.0.6" + conventional-commits-parser "^3.0.3" + dateformat "^3.0.0" + get-pkg-repo "^1.0.0" + git-raw-commits "2.0.0" + git-remote-origin-url "^2.0.0" + git-semver-tags "^2.0.3" + lodash "^4.2.1" + normalize-package-data "^2.3.5" + q "^1.5.1" + read-pkg "^3.0.0" + read-pkg-up "^3.0.0" + through2 "^3.0.0" + +conventional-changelog-preset-loader@^2.1.1: + version "2.3.4" + resolved "https://registry.npmjs.org/conventional-changelog-preset-loader/-/conventional-changelog-preset-loader-2.3.4.tgz#14a855abbffd59027fd602581f1f34d9862ea44c" + integrity sha512-GEKRWkrSAZeTq5+YjUZOYxdHq+ci4dNwHvpaBC3+ENalzFWuCWa9EZXSuZBpkr72sMdKB+1fyDV4takK1Lf58g== + +conventional-changelog-writer@^4.0.6: + version "4.0.18" + resolved "https://registry.npmjs.org/conventional-changelog-writer/-/conventional-changelog-writer-4.0.18.tgz#10b73baa59c7befc69b360562f8b9cd19e63daf8" + integrity sha512-mAQDCKyB9HsE8Ko5cCM1Jn1AWxXPYV0v8dFPabZRkvsiWUul2YyAqbIaoMKF88Zf2ffnOPSvKhboLf3fnjo5/A== + dependencies: + compare-func "^2.0.0" + conventional-commits-filter "^2.0.7" + dateformat "^3.0.0" + handlebars "^4.7.6" + json-stringify-safe "^5.0.1" + lodash "^4.17.15" + meow "^8.0.0" + semver "^6.0.0" + split "^1.0.0" + through2 "^4.0.0" + +conventional-commits-filter@^2.0.2, conventional-commits-filter@^2.0.7: + version "2.0.7" + resolved "https://registry.npmjs.org/conventional-commits-filter/-/conventional-commits-filter-2.0.7.tgz#f8d9b4f182fce00c9af7139da49365b136c8a0b3" + integrity sha512-ASS9SamOP4TbCClsRHxIHXRfcGCnIoQqkvAzCSbZzTFLfcTqJVugB0agRgsEELsqaeWgsXv513eS116wnlSSPA== + dependencies: + lodash.ismatch "^4.4.0" + modify-values "^1.0.0" + +conventional-commits-parser@^3.0.0, conventional-commits-parser@^3.0.2, conventional-commits-parser@^3.0.3: + version "3.2.0" + resolved "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-3.2.0.tgz#9e261b139ca4b7b29bcebbc54460da36894004ca" + integrity sha512-XmJiXPxsF0JhAKyfA2Nn+rZwYKJ60nanlbSWwwkGwLQFbugsc0gv1rzc7VbbUWAzJfR1qR87/pNgv9NgmxtBMQ== + dependencies: + JSONStream "^1.0.4" + is-text-path "^1.0.1" + lodash "^4.17.15" + meow "^8.0.0" + split2 "^2.0.0" + through2 "^4.0.0" + trim-off-newlines "^1.0.0" + +conventional-recommended-bump@^4.0.4: + version "4.1.1" + resolved "https://registry.npmjs.org/conventional-recommended-bump/-/conventional-recommended-bump-4.1.1.tgz#37014fadeda267d0607e2fc81124da840a585127" + integrity sha512-JT2vKfSP9kR18RXXf55BRY1O3AHG8FPg5btP3l7LYfcWJsiXI6MCf30DepQ98E8Qhowvgv7a8iev0J1bEDkTFA== + dependencies: + concat-stream "^2.0.0" + conventional-changelog-preset-loader "^2.1.1" + conventional-commits-filter "^2.0.2" + conventional-commits-parser "^3.0.2" + git-raw-commits "2.0.0" + git-semver-tags "^2.0.2" + meow "^4.0.0" + q "^1.5.1" + +convert-source-map@^1.4.0, convert-source-map@^1.6.0, convert-source-map@^1.7.0: + version "1.7.0" + resolved "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz#17a2cb882d7f77d3490585e2ce6c524424a3a442" + integrity sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA== 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" + resolved "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz#92297398cae34937fcafd6ec8139c18051f0b5e0" integrity sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A== dependencies: aproba "^1.1.1" @@ -2390,103 +3984,91 @@ copy-concurrently@^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" + resolved "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= -copyfiles@2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/copyfiles/-/copyfiles-2.1.0.tgz#0e2a4188162d6b2f3c5adfe34e9c0bd564d23164" - integrity sha512-cAeDE0vL/koE9WSEGxqPpSyvU638Kgfu6wfrnj7kqp9FWa1CWsU54Coo6sdYZP4GstWa39tL/wIVJWfXcujgNA== +copyfiles@^2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/copyfiles/-/copyfiles-2.4.1.tgz#d2dcff60aaad1015f09d0b66e7f0f1c5cd3c5da5" + integrity sha512-fereAvAvxDrQDOXybk3Qu3dPbOoKoysFMWtkY3mv5BsL8//OSZVL5DCLYqgRfY5cWirgRzlC+WSrxp6Bo3eNZg== dependencies: glob "^7.0.5" minimatch "^3.0.3" - mkdirp "^0.5.1" + mkdirp "^1.0.4" noms "0.0.0" through2 "^2.0.1" - yargs "^11.0.0" + untildify "^4.0.0" + yargs "^16.1.0" -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-compat@^3.8.0: + version "3.8.1" + resolved "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.8.1.tgz#8d1ddd341d660ba6194cbe0ce60f4c794c87a36e" + integrity sha512-a16TLmy9NVD1rkjUGbwuyWkiDoN0FDpAwrfLONvHFQx0D9k7J9y0srwMT8QP/Z6HE3MIFaVynEeYwZwPX1o5RQ== + dependencies: + browserslist "^4.15.0" + semver "7.0.0" -core-js@^2.2.2, core-js@^2.4.0, core-js@^2.4.1, core-js@^2.5.0: - version "2.6.5" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.5.tgz#44bc8d249e7fb2ff5d00e0341a7ffb94fbf67895" - integrity sha512-klh/kDpwX8hryYL14M9w/xei6vrv6sE8gTHDG7/T/+SEovB/G4ejwcfE/CBzO6Edsu+OETZMZ3wcX/EjUkrl5A== +core-js-pure@^3.0.0: + version "3.8.1" + resolved "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.8.1.tgz#23f84048f366fdfcf52d3fd1c68fec349177d119" + integrity sha512-Se+LaxqXlVXGvmexKGPvnUIYC1jwXu1H6Pkyb3uBM5d8/NELMYCHs/4/roD7721NxrTLyv7e5nXd5/QLBO+10g== -core-js@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.0.0.tgz#a8dbfa978d29bfc263bfb66c556d0ca924c28957" - integrity sha512-WBmxlgH2122EzEJ6GH8o9L/FeoUKxxxZ6q6VUxoTlsE4EvbTWKJb447eyVxTEuq0LpXjlq/kCB2qgBvsYRkLvQ== +core-js@^2.2.2, core-js@^2.4.1: + version "2.6.12" + resolved "https://registry.npmjs.org/core-js/-/core-js-2.6.12.tgz#d9333dfa7b065e347cc5682219d6f690859cc2ec" + integrity sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ== + +core-js@^3.6.1: + version "3.8.1" + resolved "https://registry.npmjs.org/core-js/-/core-js-3.8.1.tgz#f51523668ac8a294d1285c3b9db44025fda66d47" + integrity sha512-9Id2xHY1W7m8hCl8NkhQn5CufmF/WuR30BTRewvCXc1aZd3kMECwNZ69ndLbekKfakw9Rf2Xyc+QR6E7Gg+obg== 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" + resolved "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= -cosmiconfig@^5.0.5, cosmiconfig@^5.0.7: - version "5.2.0" - resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-5.2.0.tgz#45038e4d28a7fe787203aede9c25bca4a08b12c8" - integrity sha512-nxt+Nfc3JAqf4WIWd0jXLjTJZmsPLrA9DDc4nRw2KFJQJK7DNooqSXrNI7tzLG50CF8axczly5UV929tBmh/7g== +cosmiconfig@^5.0.5, cosmiconfig@^5.0.7, cosmiconfig@^5.1.0: + version "5.2.1" + resolved "https://registry.npmjs.org/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.0" + 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== +cosmiconfig@^7.0.0: + version "7.0.0" + resolved "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.0.tgz#ef9b44d773959cae63ddecd122de23853b60f8d3" + integrity sha512-pondGvTuVYDk++upghXJabWzL6Kxu6f26ljFw64Swq9v6sQPUL3EUlVDV56diOjpCayKihL6hVe8exIACU4XcA== 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" + "@types/parse-json" "^4.0.0" + import-fresh "^3.2.1" + parse-json "^5.0.0" + path-type "^4.0.0" + yaml "^1.10.0" create-react-class@^15.6.3: - version "15.6.3" - resolved "https://registry.yarnpkg.com/create-react-class/-/create-react-class-15.6.3.tgz#2d73237fb3f970ae6ebe011a9e66f46dbca80036" - integrity sha512-M+/3Q6E6DLO6Yx3OwrWjwHBnvfXXYA7W+dFjt/ZDBemHO1DDZhsalX/NUtnTYclN6GfnBDRh4qRHjcDHmlJBJg== + version "15.7.0" + resolved "https://registry.npmjs.org/create-react-class/-/create-react-class-15.7.0.tgz#7499d7ca2e69bb51d13faf59bd04f0c65a1d6c1e" + integrity sha512-QZv4sFWG9S5RUvkTYWbflxeZX+JG7Cz0Tn33rQBJ+WFQTqTfUTjMjiv9tnfXazjsO5r0KhPs+AqCjyrQX6h2ng== dependencies: - fbjs "^0.8.9" loose-envify "^1.3.1" object-assign "^4.1.1" cross-spawn@^5.0.1, cross-spawn@^5.1.0: version "5.1.0" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" + resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" integrity sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk= dependencies: lru-cache "^4.0.1" shebang-command "^1.2.0" which "^1.2.9" -cross-spawn@^6.0.0, cross-spawn@^6.0.5: +cross-spawn@^6.0.0: version "6.0.5" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" + resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== dependencies: nice-try "^1.0.4" @@ -2495,146 +4077,206 @@ cross-spawn@^6.0.0, cross-spawn@^6.0.5: 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" +cross-spawn@^7.0.0: + version "7.0.3" + resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" + integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== + dependencies: + path-key "^3.1.0" + shebang-command "^2.0.0" + which "^2.0.1" -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= +css.escape@^1.5.1: + version "1.5.1" + resolved "https://registry.npmjs.org/css.escape/-/css.escape-1.5.1.tgz#42e27d4fa04ae32f931a4b4d4191fa9cddee97cb" + integrity sha1-QuJ9T6BK4y+TGktNQZH6nN3ul8s= + +css@^2.2.3: + version "2.2.4" + resolved "https://registry.npmjs.org/css/-/css-2.2.4.tgz#c646755c73971f2bba6a601e2cf2fd71b1298929" + integrity sha512-oUnjmWpy0niI3x/mPL8dVEI1l7MnG3+HHyRPHf+YFSbK+svOhXpmSOcDURUh2aOCgl2grzrOPt1nHLuCVFULLw== dependencies: - boolbase "~1.0.0" - css-what "2.1" - domutils "1.5.1" - nth-check "~1.0.1" + inherits "^2.0.3" + source-map "^0.6.1" + source-map-resolve "^0.5.2" + urix "^0.1.0" -css-what@2.1: - version "2.1.3" - resolved "https://registry.yarnpkg.com/css-what/-/css-what-2.1.3.tgz#a6d7604573365fe74686c3f311c56513d88285f2" - integrity sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg== +cssom@^0.4.1: + version "0.4.4" + resolved "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz#5a66cf93d2d0b661d80bf6a44fb65f5c2e4e0a10" + integrity sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw== -cssom@0.3.x, "cssom@>= 0.3.2 < 0.4.0": - version "0.3.6" - resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.6.tgz#f85206cee04efa841f3c5982a74ba96ab20d65ad" - integrity sha512-DtUeseGk9/GBW0hl0vVPpU22iHL6YB5BUX7ml1hB+GMpo0NX5G4voX3kdWiMSEguFtcW3Vh3djqNF4aIe6ne0A== +cssom@~0.3.6: + version "0.3.8" + resolved "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz#9f1276f5b2b463f2114d3f2c75250af8c1a36f4a" + integrity sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg== -cssstyle@^1.0.0: - version "1.2.2" - resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-1.2.2.tgz#427ea4d585b18624f6fdbf9de7a2a1a3ba713077" - integrity sha512-43wY3kl1CVQSvL7wUY1qXkxVGkStjpkDmVjiIKX8R97uhajy8Bybay78uOtqvh7Q5GK75dNPfW0geWjE6qQQow== +cssstyle@^2.0.0: + version "2.3.0" + resolved "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz#ff665a0ddbdc31864b09647f34163443d90b0852" + integrity sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A== dependencies: - cssom "0.3.x" + cssom "~0.3.6" -csstype@^2.2.0: - version "2.6.3" - resolved "https://registry.yarnpkg.com/csstype/-/csstype-2.6.3.tgz#b701e5968245bf9b08d54ac83d00b624e622a9fa" - integrity sha512-rINUZXOkcBmoHWEyu7JdHu5JMzkGRoMX4ov9830WNgxf5UYxcBUO0QTKAqeJ5EZfSdlrcJYkC8WwfVW7JYi4yg== +csstype@^3.0.2: + version "3.0.5" + resolved "https://registry.npmjs.org/csstype/-/csstype-3.0.5.tgz#7fdec6a28a67ae18647c51668a9ff95bb2fa7bb8" + integrity sha512-uVDi8LpBUKQj6sdxNaTetL6FpeCqTjOvAQuQUa/qAqq8oOd4ivkbhgnqayl0dnPal8Tb/yB1tF+gOvCBiicaiQ== -cyclist@~0.2.2: - version "0.2.2" - resolved "https://registry.yarnpkg.com/cyclist/-/cyclist-0.2.2.tgz#1b33792e11e914a2fd6d6ed6447464444e5fa640" - integrity sha1-GzN5LhHpFKL9bW7WRHRkRE5fpkA= +currently-unhandled@^0.4.1: + version "0.4.1" + resolved "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea" + integrity sha1-mI3zP+qxke95mmE2nddsF635V+o= + dependencies: + array-find-index "^1.0.1" + +cyclist@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/cyclist/-/cyclist-1.0.1.tgz#596e9698fd0c80e12038c2b82d6eb1b35b6224d9" + integrity sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk= + +dargs@^4.0.1: + version "4.1.0" + resolved "https://registry.npmjs.org/dargs/-/dargs-4.1.0.tgz#03a9dbb4b5c2f139bf14ae53f0b8a2a6a86f4e17" + integrity sha1-A6nbtLXC8Tm/FK5T8LiipqhvThc= + dependencies: + number-is-nan "^1.0.0" + +dargs@^7.0.0: + version "7.0.0" + resolved "https://registry.npmjs.org/dargs/-/dargs-7.0.0.tgz#04015c41de0bcb69ec84050f3d9be0caf8d6d5cc" + integrity sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg== dashdash@^1.12.0: version "1.14.1" - resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" + resolved "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" integrity sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA= dependencies: assert-plus "^1.0.0" -data-urls@^1.0.0: +data-urls@^1.1.0: version "1.1.0" - resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-1.1.0.tgz#15ee0582baa5e22bb59c77140da8f9c76963bbfe" + resolved "https://registry.npmjs.org/data-urls/-/data-urls-1.1.0.tgz#15ee0582baa5e22bb59c77140da8f9c76963bbfe" integrity sha512-YTWYI9se1P55u58gL5GkQHW4P6VJBJ5iBT+B5a7i2Tjadhv52paJG0qHX4A0OR6/t52odI64KP2YvFpkDOi3eQ== dependencies: abab "^2.0.0" whatwg-mimetype "^2.2.0" whatwg-url "^7.0.0" -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= +dateformat@^3.0.0: + version "3.0.3" + resolved "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz#a6e37499a4d9a9cf85ef5872044d62901c9889ae" + integrity sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q== + +debounce@^1.2.0: + version "1.2.0" + resolved "https://registry.npmjs.org/debounce/-/debounce-1.2.0.tgz#44a540abc0ea9943018dc0eaa95cce87f65cd131" + integrity sha512-mYtLl1xfZLi1m4RtQYlZgJUNQjl4ZxVnHzIR8nLLgi4q1YT8o/WM+MK/f8yfcc9s5Ir5zRaPZyZU6xs1Syoocg== -debug@2.6.9, debug@^2.1.2, debug@^2.2.0, debug@^2.3.3: +debug@2.6.9, debug@^2.2.0, debug@^2.3.3: version "2.6.9" - resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + resolved "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== dependencies: ms "2.0.0" -debug@^4.1.0, debug@^4.1.1: +debug@3.1.0: + version "3.1.0" + resolved "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" + integrity sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g== + dependencies: + ms "2.0.0" + +debug@4.1.1: version "4.1.1" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791" + resolved "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791" integrity sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw== dependencies: ms "^2.1.1" -decamelize@^1.1.1, decamelize@^1.2.0: +debug@^3.1.0: + version "3.2.7" + resolved "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" + integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== + dependencies: + ms "^2.1.1" + +debug@^4.0.0, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1: + version "4.3.1" + resolved "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz#f0d229c505e0c6d8c49ac553d1b13dc183f6b2ee" + integrity sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ== + dependencies: + ms "2.1.2" + +debuglog@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/debuglog/-/debuglog-1.0.1.tgz#aa24ffb9ac3df9a2351837cfb2d279360cd78492" + integrity sha1-qiT/uaw9+aI1GDfPstJ5NgzXhJI= + +decamelize-keys@^1.0.0, decamelize-keys@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/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.1.1, decamelize@^1.1.2, decamelize@^1.2.0: version "1.2.0" - resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" + resolved "https://registry.npmjs.org/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" + resolved "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU= -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== +dedent@^0.7.0: + version "0.7.0" + resolved "https://registry.npmjs.org/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" + resolved "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= -default-require-extensions@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/default-require-extensions/-/default-require-extensions-2.0.0.tgz#f5f8fbb18a7d6d50b21f641f649ebb522cfe24f7" - integrity sha1-9fj7sYp9bVCyH2QfZJ67Uiz+JPc= +deepmerge@^4.2.2: + version "4.2.2" + resolved "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz#44d2ea3679b8f4d4ffba33f03d865fc1e7bf4955" + integrity sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg== + +defaults@^1.0.3: + version "1.0.3" + resolved "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz#c656051e9817d9ff08ed881477f3fe4019f3ef7d" + integrity sha1-xlYFHpgX2f8I7YgUd/P+QBnz730= dependencies: - strip-bom "^3.0.0" + clone "^1.0.2" -define-properties@^1.1.2, define-properties@^1.1.3: +define-properties@^1.1.3: version "1.1.3" - resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" + resolved "https://registry.npmjs.org/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" + resolved "https://registry.npmjs.org/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" + resolved "https://registry.npmjs.org/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" + resolved "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d" integrity sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ== dependencies: is-descriptor "^1.0.2" @@ -2642,142 +4284,124 @@ define-property@^2.0.2: delayed-stream@~1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + resolved "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= delegates@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" + resolved "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" integrity sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o= denodeify@^1.2.1: version "1.2.1" - resolved "https://registry.yarnpkg.com/denodeify/-/denodeify-1.2.1.tgz#3a36287f5034e699e7577901052c2e6c94251631" + resolved "https://registry.npmjs.org/denodeify/-/denodeify-1.2.1.tgz#3a36287f5034e699e7577901052c2e6c94251631" integrity sha1-OjYof1A05pnnV3kBBSwubJQlFjE= depd@~1.1.2: version "1.1.2" - resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" + resolved "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak= -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" +depd@~2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" + integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== + +deprecation@^2.0.0, deprecation@^2.3.1: + version "2.3.1" + resolved "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz#6368cbdb40abf3373b525ac87e4a260c3a700919" + integrity sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ== destroy@~1.0.4: version "1.0.4" - resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" + resolved "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" integrity sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA= -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= - -detect-newline@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-2.1.0.tgz#f41f1c10be4b00e87b5f13da680759f2c5bfd3e2" - integrity sha1-9B8cEL5LAOh7XxPaaAdZ8sW/0+I= +detect-file@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz#f0d66d03672a825cb1b73bdb3fe62310c8e552b7" + integrity sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc= -diff-sequences@^24.3.0: - version "24.3.0" - resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-24.3.0.tgz#0f20e8a1df1abddaf4d9c226680952e64118b975" - integrity sha512-xLqpez+Zj9GKSnPWS0WZw1igGocZ+uua8+y+5dDNTT934N3QuY1sp2LkHzwiaYQGz60hMq0pjAshdeXm5VUOEw== +detect-indent@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/detect-indent/-/detect-indent-5.0.0.tgz#3871cc0a6a002e8c3e5b3cf7f336264675f06b9d" + integrity sha1-OHHMCmoALow+Wzz38zYmRnXwa50= -diff@^3.2.0: - version "3.5.0" - resolved "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12" - integrity sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA== +detect-newline@^3.0.0: + version "3.1.0" + resolved "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651" + integrity sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA== -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== +dezalgo@^1.0.0: + version "1.0.3" + resolved "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.3.tgz#7f742de066fc748bc8db820569dddce49bf0d456" + integrity sha1-f3Qt4Gb8dIvI24IFad3c5Jvw1FY= dependencies: - bn.js "^4.1.0" - miller-rabin "^4.0.0" - randombytes "^2.0.0" + asap "^2.0.0" + wrappy "1" -discontinuous-range@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/discontinuous-range/-/discontinuous-range-1.0.0.tgz#e38331f0844bba49b9a9cb71c771585aab1bc65a" - integrity sha1-44Mx8IRLukm5qctxx3FYWqsbxlo= +diff-sequences@^24.9.0: + version "24.9.0" + resolved "https://registry.npmjs.org/diff-sequences/-/diff-sequences-24.9.0.tgz#5715d6244e2aa65f48bba0bc972db0b0b11e95b5" + integrity sha512-Dj6Wk3tWyTE+Fo1rW8v0Xhwk80um6yFYKbuAxc9c3EZxIHFDYwbi34Uk42u1CdnIiVorvt4RmlSDjIPyzGC2ew== -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" +diff-sequences@^25.2.6: + version "25.2.6" + resolved "https://registry.npmjs.org/diff-sequences/-/diff-sequences-25.2.6.tgz#5f467c00edd35352b7bca46d7927d60e687a76dd" + integrity sha512-Hq8o7+6GaZeoFjtpgvRBUknSXNeJiCx7V9Fr94ZMljNiCr9n9L8H8aJqgWOQiDDGdyn29fRNcDdRVJ5fdyihfg== -dom-testing-library@^3.13.1: - version "3.18.2" - resolved "https://registry.yarnpkg.com/dom-testing-library/-/dom-testing-library-3.18.2.tgz#07d65166743ad3299b7bee5b488e9622c31241bc" - integrity sha512-+nYUgGhHarrCY8kLVmyHlgM+IGwBXXrYsWIJB6vpAx2ne9WFgKfwMGcOkkTKQhuAro0sP6RIuRGfm5NF3+ccmQ== +dir-glob@2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/dir-glob/-/dir-glob-2.0.0.tgz#0b205d2b6aef98238ca286598a8204d29d0a0034" + integrity sha512-37qirFDz8cA5fimp9feo43fSuRo2gHwaIn6dXL8Ber1dGwUosDrGZeCCXq57WnIqE4aQ+u3eQZzsk1yOzhdwag== dependencies: - "@babel/runtime" "^7.3.4" - "@sheerun/mutationobserver-shim" "^0.3.2" - pretty-format "^24.5.0" - wait-for-expect "^1.1.0" + arrify "^1.0.1" + path-type "^3.0.0" -dom-walk@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/dom-walk/-/dom-walk-0.1.1.tgz#672226dc74c8f799ad35307df936aba11acd6018" - integrity sha1-ZyIm3HTI95mtNTB9+TaroRrNYBg= +dom-accessibility-api@^0.3.0: + version "0.3.0" + resolved "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.3.0.tgz#511e5993dd673b97c87ea47dba0e3892f7e0c983" + integrity sha512-PzwHEmsRP3IGY4gv/Ug+rMeaTIyTJvadCb+ujYXYeIylbHJezIyNToe8KfEgHTCEYyC+/bUghYOGg8yMGlZ6vA== -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== +dom-accessibility-api@^0.5.4: + version "0.5.4" + resolved "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.5.4.tgz#b06d059cdd4a4ad9a79275f9d414a5c126241166" + integrity sha512-TvrjBckDy2c6v6RLxPv5QXOnU+SmF9nBII5621Ve5fu6Z/BDrENurBEvlC1f44lKEUVqOpK4w9E5Idc5/EgkLQ== -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== +dom-walk@^0.1.0: + version "0.1.2" + resolved "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.2.tgz#0c548bef048f4d1f2a97249002236060daa3fd84" + integrity sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w== domexception@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/domexception/-/domexception-1.0.1.tgz#937442644ca6a31261ef36e3ec677fe805582c90" + resolved "https://registry.npmjs.org/domexception/-/domexception-1.0.1.tgz#937442644ca6a31261ef36e3ec677fe805582c90" integrity sha512-raigMkn7CJNNo6Ihro1fzG7wr3fHuYVytzquZKX5n0yizGsTcYgzdIUwj1X9pK0VvjeihV+XiclP+DjwbsSKug== dependencies: webidl-conversions "^4.0.2" -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= +dot-prop@^4.2.0: + version "4.2.1" + resolved "https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.1.tgz#45884194a71fc2cda71cbb4bceb3a4dd2f433ba4" + integrity sha512-l0p4+mIuJIua0mhxGoh4a+iNL9bmeK5DvnSVQa6T0OhrVmaEa1XScX5Etc673FePCJOArq/4Pa2cLGODUWTPOQ== dependencies: - dom-serializer "0" - domelementtype "1" + is-obj "^1.0.0" -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== +dot-prop@^5.1.0: + version "5.3.0" + resolved "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz#90ccce708cd9cd82cc4dc8c3ddd9abdd55b20e88" + integrity sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q== dependencies: - dom-serializer "0" - domelementtype "1" + is-obj "^2.0.0" duplexer@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.1.tgz#ace6ff808c1ce66b57d1ebf97977acb02334cfc1" - integrity sha1-rOb/gIwc5mtX0ev5eXessCM0z8E= + version "0.1.2" + resolved "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz#3abe43aef3835f8ae077d136ddce0f276b0400e6" + integrity sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg== duplexify@^3.4.2, duplexify@^3.6.0: version "3.7.1" - resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.7.1.tgz#2a4df5317f6ccfd91f86d6fd25d8d8a103b88309" + resolved "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz#2a4df5317f6ccfd91f86d6fd25d8d8a103b88309" integrity sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g== dependencies: end-of-stream "^1.0.0" @@ -2787,7 +4411,7 @@ duplexify@^3.4.2, duplexify@^3.6.0: ecc-jsbn@~0.1.1: version "0.1.2" - resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" + resolved "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" integrity sha1-OoOpBOVDUyh4dMVkt1SThoSamMk= dependencies: jsbn "~0.1.0" @@ -2795,272 +4419,223 @@ ecc-jsbn@~0.1.1: ee-first@1.1.1: version "1.1.1" - resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" + resolved "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= -electron-to-chromium@^1.3.122: - version "1.3.122" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.122.tgz#b32a0805f48557bd3c3b8104eadc7fa511b14a9a" - integrity sha512-3RKoIyCN4DhP2dsmleuFvpJAIDOseWH88wFYBzb22CSwoFDSWRc4UAMfrtc9h8nBdJjTNIN3rogChgOy6eFInw== +electron-to-chromium@^1.3.621: + version "1.3.629" + resolved "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.629.tgz#a08d13b64d90e3c77ec5b9bffa3efbc5b4a00969" + integrity sha512-iSPPJtPvHrMAvYOt+9cdbDmTasPqwnwz4lkP8Dn200gDNUBQOLQ96xUsWXBwXslAo5XxdoXAoQQ3RAy4uao9IQ== -elliptic@^6.0.0: - version "6.5.4" - resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.4.tgz#da37cebd31e79a1367e941b592ed1fbebd58abbb" - integrity sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ== - dependencies: - bn.js "^4.11.9" - brorand "^1.1.0" - hash.js "^1.0.0" - hmac-drbg "^1.0.1" - inherits "^2.0.4" - minimalistic-assert "^1.0.1" - minimalistic-crypto-utils "^1.0.1" +emoji-regex@^7.0.1: + version "7.0.3" + resolved "https://registry.npmjs.org/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= +emoji-regex@^8.0.0: + version "8.0.0" + resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" + integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== -encodeurl@~1.0.1, encodeurl@~1.0.2: +encodeurl@~1.0.2: version "1.0.2" - resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" + resolved "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k= 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= + version "0.1.13" + resolved "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz#56574afdd791f54a8e9b2785c0582a2d26210fa9" + integrity sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A== dependencies: - iconv-lite "~0.4.13" + iconv-lite "^0.6.2" 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== + version "1.4.4" + resolved "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" + integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== 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" - integrity sha512-F/7vkyTtyc/llOIn8oWclcB25KdRaiPBpZYDgJHgh/UHtpgT2p2eldQgtQnLtUvfMKPKxbRaQM/hHkvLHt1Vng== +enquirer@^2.3.2: + version "2.3.6" + resolved "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d" + integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg== 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" - integrity sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w== + ansi-colors "^4.1.1" envinfo@^5.7.0: version "5.12.1" - resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-5.12.1.tgz#83068c33e0972eb657d6bc69a6df30badefb46ef" + resolved "https://registry.npmjs.org/envinfo/-/envinfo-5.12.1.tgz#83068c33e0972eb657d6bc69a6df30badefb46ef" integrity sha512-pwdo0/G3CIkQ0y6PCXq4RdkvId2elvtPCJMG0konqlrfkWQbf1DWeH9K2b/cvu2YgGvPPTOnonZxXM1gikFu1w== -enzyme-adapter-react-16@1.9.1: - version "1.9.1" - resolved "https://registry.yarnpkg.com/enzyme-adapter-react-16/-/enzyme-adapter-react-16-1.9.1.tgz#6d49a3a31c3a0fccf527610f31b837e0f307128a" - integrity sha512-Egzogv1y77DUxdnq/CyHxLHaNxmSSKDDSDNNB/EiAXCZVFXdFibaNy2uUuRQ1n24T2m6KH/1Rw16XDRq+1yVEg== - dependencies: - enzyme-adapter-utils "^1.10.0" - function.prototype.name "^1.1.0" - object.assign "^4.1.0" - object.values "^1.1.0" - prop-types "^15.6.2" - react-is "^16.7.0" - react-test-renderer "^16.0.0-0" - -enzyme-adapter-utils@^1.10.0: - version "1.10.1" - resolved "https://registry.yarnpkg.com/enzyme-adapter-utils/-/enzyme-adapter-utils-1.10.1.tgz#58264efa19a7befdbf964fb7981a108a5452ac96" - integrity sha512-oasinhhLoBuZsIkTe8mx0HiudtfErUtG0Ooe1FOplu/t4c9rOmyG5gtrBASK6u4whHIRWvv0cbZMElzNTR21SA== - dependencies: - function.prototype.name "^1.1.0" - object.assign "^4.1.0" - object.fromentries "^2.0.0" - prop-types "^15.7.2" - semver "^5.6.0" - -enzyme@3.8.0: - version "3.8.0" - resolved "https://registry.yarnpkg.com/enzyme/-/enzyme-3.8.0.tgz#646d2d5d0798cb98fdec39afcee8a53237b47ad5" - integrity sha512-bfsWo5nHyZm1O1vnIsbwdfhU989jk+squU9NKvB+Puwo5j6/Wg9pN5CO0YJelm98Dao3NPjkDZk+vvgwpMwYxw== - dependencies: - array.prototype.flat "^1.2.1" - cheerio "^1.0.0-rc.2" - function.prototype.name "^1.1.0" - has "^1.0.3" - is-boolean-object "^1.0.0" - is-callable "^1.1.4" - is-number-object "^1.0.3" - is-string "^1.0.4" - is-subset "^0.1.1" - lodash.escape "^4.0.1" - lodash.isequal "^4.5.0" - object-inspect "^1.6.0" - object-is "^1.0.1" - object.assign "^4.1.0" - object.entries "^1.0.4" - object.values "^1.0.4" - raf "^3.4.0" - rst-selector-parser "^2.2.3" - string.prototype.trim "^1.1.2" - -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" +err-code@^1.0.0: + version "1.1.2" + resolved "https://registry.npmjs.org/err-code/-/err-code-1.1.2.tgz#06e0116d3028f6aef4806849eb0ea6a748ae6960" + integrity sha1-BuARbTAo9q70gGhJ6w6mp0iuaWA= 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" + resolved "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== dependencies: is-arrayish "^0.2.1" errorhandler@^1.5.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/errorhandler/-/errorhandler-1.5.0.tgz#eaba64ca5d542a311ac945f582defc336165d9f4" - integrity sha1-6rpkyl1UKjEayUX1gt78M2Fl2fQ= + version "1.5.1" + resolved "https://registry.npmjs.org/errorhandler/-/errorhandler-1.5.1.tgz#b9ba5d17cf90744cd1e851357a6e75bf806a9a91" + integrity sha512-rcOwbfvP1WTViVoUjcfZicVzjhjTuhSMntHh6mW3IrEiyE6mJyXvsToJUJGlGlw/2xU9P5whlWNGlIDVeCiT4A== dependencies: - accepts "~1.3.3" + accepts "~1.3.7" escape-html "~1.0.3" -es-abstract@^1.10.0, es-abstract@^1.11.0, es-abstract@^1.12.0, es-abstract@^1.4.3, es-abstract@^1.5.0, es-abstract@^1.5.1: - 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== +es-abstract@^1.18.0-next.1: + version "1.18.0-next.1" + resolved "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0-next.1.tgz#6e3a0a4bda717e5023ab3b8e90bec36108d22c68" + integrity sha512-I4UGspA0wpZXWENrdA0uHbnhte683t3qT/1VFH9aX2dA5PPSf6QW5HHXf5HImaqPmjXaVeVk4RGWnaylmV7uAA== dependencies: - es-to-primitive "^1.2.0" + es-to-primitive "^1.2.1" 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== + has-symbols "^1.0.1" + is-callable "^1.2.2" + is-negative-zero "^2.0.0" + is-regex "^1.1.1" + object-inspect "^1.8.0" + object-keys "^1.1.1" + object.assign "^4.1.1" + string.prototype.trimend "^1.0.1" + string.prototype.trimstart "^1.0.1" + +es-to-primitive@^1.2.1: + version "1.2.1" + resolved "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" + integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== dependencies: is-callable "^1.1.4" is-date-object "^1.0.1" is-symbol "^1.0.2" +es6-promise@^4.0.3: + version "4.2.8" + resolved "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz#4eb21594c972bc40553d276e510539143db53e0a" + integrity sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w== + +es6-promisify@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz#5109d62f3e56ea967c4b63505aef08291c8a5203" + integrity sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM= + dependencies: + es6-promise "^4.0.3" + +es6-promisify@^6.0.0: + version "6.1.1" + resolved "https://registry.npmjs.org/es6-promisify/-/es6-promisify-6.1.1.tgz#46837651b7b06bf6fff893d03f29393668d01621" + integrity sha512-HBL8I3mIki5C1Cc9QjKUenHtnG0A5/xA8Q/AllRcfiwl2CZFXGK7ddBiCoRwAix4i2KxcQfjtIVcrVbB3vbmwg== + +esbuild-jest@^0.2.2: + version "0.2.2" + resolved "https://registry.npmjs.org/esbuild-jest/-/esbuild-jest-0.2.2.tgz#c637d4366d908ef7448da099f8ad8e4ccd4647c6" + integrity sha512-f9N4J04Ron3Nmr4u6O9YtAYySo6HcJqTYIE9/R9eDGCsAzFDZV/r5tKCMRyqnQO7uoWQFfjnpz9Af04ozSo/WA== + dependencies: + esbuild "^0.6.16" + +esbuild@^0.6.16: + version "0.6.34" + resolved "https://registry.npmjs.org/esbuild/-/esbuild-0.6.34.tgz#76565a60e006f45d5f273b6e59e61ed0816551f5" + integrity sha512-InRdL/Q96pUucPqovJzvuLhquZr6jOn81FDVwFjCKz1rYKIm9OdOC+7Fs4vr6x48vKBl5LzKgtjU39BUpO636A== + +esbuild@^0.8.0: + version "0.8.24" + resolved "https://registry.npmjs.org/esbuild/-/esbuild-0.8.24.tgz#18645e102254682909017cec648f84d4834f15b3" + integrity sha512-bqgEa2VemAN+YM52SM1626+/pdLp+p9NyqISB06ixcvauKIJk6akia3UTTsGAgn0oHEdReZ97gL+LYX+UjgwKA== + +escalade@^3.1.1: + version "3.1.1" + resolved "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" + integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== + escape-html@~1.0.3: version "1.0.3" - resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" + resolved "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg= escape-string-regexp@^1.0.2, 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" + resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= -escodegen@^1.9.1: - version "1.11.1" - resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.11.1.tgz#c485ff8d6b4cdb89e27f4a856e91f118401ca510" - integrity sha512-JwiqFD9KdGVVpeuRa68yU3zZnBEOcPs0nKW7wZzXky8Z7tffdYUHbe11bPCV5jYlK6DVdKLWLm0f5I/QlL0Kmw== +escape-string-regexp@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344" + integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== + +escodegen@^1.11.1: + version "1.14.3" + resolved "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz#4e7b81fba61581dc97582ed78cab7f0e8d63f503" + integrity sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw== dependencies: - esprima "^3.1.3" + esprima "^4.0.1" estraverse "^4.2.0" esutils "^2.0.2" optionator "^0.8.1" optionalDependencies: source-map "~0.6.1" -eslint-scope@^4.0.0: - version "4.0.3" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-4.0.3.tgz#ca03833310f6889a3264781aa82e63eb9cfe7848" - integrity sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg== - dependencies: - esrecurse "^4.1.0" - estraverse "^4.1.1" - -esprima@^3.1.3: - version "3.1.3" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633" - integrity sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM= - -esprima@^4.0.0: +esprima@^4.0.0, esprima@^4.0.1: version "4.0.1" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" + resolved "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== -esrecurse@^4.1.0: - version "4.2.1" - resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.2.1.tgz#007a3b9fdbc2b3bb87e4879ea19c92fdbd3942cf" - integrity sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ== - dependencies: - estraverse "^4.1.0" - -estraverse@^4.1.0, estraverse@^4.1.1, estraverse@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.2.0.tgz#0dee3fed31fcd469618ce7342099fc1afa0bdb13" - integrity sha1-De4/7TH81GlhjOc0IJn8GvoL2xM= - -estree-walker@^0.5.2: - version "0.5.2" - resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-0.5.2.tgz#d3850be7529c9580d815600b53126515e146dd39" - integrity sha512-XpCnW/AE10ws/kDAs37cngSkvgIR8aN3G0MS85m7dUpuK2EREo9VJ00uvw6Dg/hXEpfsE1I1TvJOJr+Z+TL+ig== +estraverse@^4.2.0: + version "4.3.0" + resolved "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" + integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== -estree-walker@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-0.6.0.tgz#5d865327c44a618dde5699f763891ae31f257dae" - integrity sha512-peq1RfVAVzr3PU/jL31RaOjUKLoZJpObQWJJ+LgfcxDUifyLZ1RjPQZTl0pzj2uJ45b7A7XpyppXvxdEqzo4rw== +estree-walker@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz#31bc5d612c96b704106b477e6dd5d8aa138cb700" + integrity sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg== -esutils@^2.0.0, esutils@^2.0.2: +estree-walker@^2.0.1: version "2.0.2" - resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b" - integrity sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs= + resolved "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz#52f010178c2a4c117a7757cfe942adb7d2da4cac" + integrity sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w== + +esutils@^2.0.2: + version "2.0.3" + resolved "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" + integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== etag@~1.8.1: version "1.8.1" - resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" + resolved "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc= event-target-shim@^1.0.5: version "1.1.1" - resolved "https://registry.yarnpkg.com/event-target-shim/-/event-target-shim-1.1.1.tgz#a86e5ee6bdaa16054475da797ccddf0c55698491" + resolved "https://registry.npmjs.org/event-target-shim/-/event-target-shim-1.1.1.tgz#a86e5ee6bdaa16054475da797ccddf0c55698491" integrity sha1-qG5e5r2qFgVEddp5fM3fDFVphJE= -eventemitter3@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-3.1.0.tgz#090b4d6cdbd645ed10bf750d4b5407942d7ba163" - integrity sha512-ivIvhpq/Y0uSjcHDcOIccjmYjGLcP09MFGE7ysAwkAvkXfpZlC985pH2/ui64DKazbTW/4kN3yqozUxlXzI6cA== - -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" +eventemitter3@^3.0.0, eventemitter3@^3.1.0: + version "3.1.2" + resolved "https://registry.npmjs.org/eventemitter3/-/eventemitter3-3.1.2.tgz#2d3d48f9c346698fce83a85d7d664e98535df6e7" + integrity sha512-tvtQIeLVHjDkJYnzf2dgVMxfuSGJeM/7UCG17TT4EumTfNtF+0nebF/4zWOIkCreAbtNqhGEboB6BWrwqNaw4Q== exec-sh@^0.2.0: version "0.2.2" - resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.2.2.tgz#2a5e7ffcbd7d0ba2755bdecb16e5a427dfbdec36" + resolved "https://registry.npmjs.org/exec-sh/-/exec-sh-0.2.2.tgz#2a5e7ffcbd7d0ba2755bdecb16e5a427dfbdec36" integrity sha512-FIUCJz1RbuS0FKTdaAafAByGS0CPvU3R0MeHxgtl+djzCc//F8HakL8GzmVNZanasTbTAY/3DRFA0KpVqj/eAw== dependencies: merge "^1.2.0" exec-sh@^0.3.2: - version "0.3.2" - resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.3.2.tgz#6738de2eb7c8e671d0366aea0b0db8c6f7d7391b" - integrity sha512-9sLAvzhI5nc8TpuQUh4ahMdCrWT00wPWz7j47/emR5+2qEfoZP5zzUXvx+vdx+H6ohhnsYC31iX04QLYJK8zTg== + version "0.3.4" + resolved "https://registry.npmjs.org/exec-sh/-/exec-sh-0.3.4.tgz#3a018ceb526cc6f6df2bb504b2bfe8e3a4934ec5" + integrity sha512-sEFIkc61v75sWeOe72qyrqg2Qg0OuLESziUDk/O/z2qgS15y2gWVFrI6f2Qn/qw/0/NCfCEsmNA4zOjkwEZT1A== execa@^0.7.0: version "0.7.0" - resolved "https://registry.yarnpkg.com/execa/-/execa-0.7.0.tgz#944becd34cc41ee32a63a9faf27ad5a65fc59777" + resolved "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz#944becd34cc41ee32a63a9faf27ad5a65fc59777" integrity sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c= dependencies: cross-spawn "^5.0.1" @@ -3073,7 +4648,7 @@ execa@^0.7.0: execa@^0.8.0: version "0.8.0" - resolved "https://registry.yarnpkg.com/execa/-/execa-0.8.0.tgz#d8d76bbc1b55217ed190fd6dd49d3c774ecfc8da" + resolved "https://registry.npmjs.org/execa/-/execa-0.8.0.tgz#d8d76bbc1b55217ed190fd6dd49d3c774ecfc8da" integrity sha1-2NdrvBtVIX7RkP1t1J08d07PyNo= dependencies: cross-spawn "^5.0.1" @@ -3086,7 +4661,7 @@ execa@^0.8.0: execa@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8" + resolved "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8" integrity sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA== dependencies: cross-spawn "^6.0.0" @@ -3097,21 +4672,52 @@ execa@^1.0.0: signal-exit "^3.0.0" strip-eof "^1.0.0" +execa@^2.0.4: + version "2.1.0" + resolved "https://registry.npmjs.org/execa/-/execa-2.1.0.tgz#e5d3ecd837d2a60ec50f3da78fd39767747bbe99" + integrity sha512-Y/URAVapfbYy2Xp/gb6A0E7iR8xeqOCXsuuaoMn7A5PzrXUK84E1gyiEfq0wQd/GHA6GsoHWwhNq8anb0mleIw== + dependencies: + cross-spawn "^7.0.0" + get-stream "^5.0.0" + is-stream "^2.0.0" + merge-stream "^2.0.0" + npm-run-path "^3.0.0" + onetime "^5.1.0" + p-finally "^2.0.0" + signal-exit "^3.0.2" + strip-final-newline "^2.0.0" + +execa@^3.2.0: + version "3.4.0" + resolved "https://registry.npmjs.org/execa/-/execa-3.4.0.tgz#c08ed4550ef65d858fac269ffc8572446f37eb89" + integrity sha512-r9vdGQk4bmCuK1yKQu1KTwcT2zwfWdbdaXfCtAh+5nU/4fSX+JAb7vZGvI5naJrQlvONrEB20jeruESI69530g== + dependencies: + cross-spawn "^7.0.0" + get-stream "^5.0.0" + human-signals "^1.1.1" + is-stream "^2.0.0" + merge-stream "^2.0.0" + npm-run-path "^4.0.0" + onetime "^5.1.0" + p-finally "^2.0.0" + signal-exit "^3.0.2" + strip-final-newline "^2.0.0" + exit@^0.1.2: version "0.1.2" - resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" + resolved "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" integrity sha1-BjJjj42HfMghB9MKD/8aF8uhzQw= expand-brackets@^0.1.4: version "0.1.5" - resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-0.1.5.tgz#df07284e342a807cd733ac5af72411e581d1177b" + resolved "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz#df07284e342a807cd733ac5af72411e581d1177b" integrity sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s= 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" + resolved "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" integrity sha1-t3c14xXOMPa27/D4OwQVGiJEliI= dependencies: debug "^2.3.3" @@ -3124,40 +4730,47 @@ expand-brackets@^2.1.4: expand-range@^1.8.1: version "1.8.2" - resolved "https://registry.yarnpkg.com/expand-range/-/expand-range-1.8.2.tgz#a299effd335fe2721ebae8e257ec79644fc85337" + resolved "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz#a299effd335fe2721ebae8e257ec79644fc85337" integrity sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc= dependencies: fill-range "^2.1.0" -expect@^24.5.0: - version "24.5.0" - resolved "https://registry.yarnpkg.com/expect/-/expect-24.5.0.tgz#492fb0df8378d8474cc84b827776b069f46294ed" - integrity sha512-p2Gmc0CLxOgkyA93ySWmHFYHUPFIHG6XZ06l7WArWAsrqYVaVEkOU5NtT5i68KUyGKbkQgDCkiT65bWmdoL6Bw== +expand-tilde@^2.0.0, expand-tilde@^2.0.2: + version "2.0.2" + resolved "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz#97e801aa052df02454de46b02bf621642cdc8502" + integrity sha1-l+gBqgUt8CRU3kawK/YhZCzchQI= + dependencies: + homedir-polyfill "^1.0.1" + +expect@^25.5.0: + version "25.5.0" + resolved "https://registry.npmjs.org/expect/-/expect-25.5.0.tgz#f07f848712a2813bb59167da3fb828ca21f58bba" + integrity sha512-w7KAXo0+6qqZZhovCaBVPSIqQp7/UTcx4M9uKt2m6pd2VB1voyC8JizLRqeEqud3AAVP02g+hbErDu5gu64tlA== dependencies: - "@jest/types" "^24.5.0" - ansi-styles "^3.2.0" - jest-get-type "^24.3.0" - jest-matcher-utils "^24.5.0" - jest-message-util "^24.5.0" - jest-regex-util "^24.3.0" + "@jest/types" "^25.5.0" + ansi-styles "^4.0.0" + jest-get-type "^25.2.6" + jest-matcher-utils "^25.5.0" + jest-message-util "^25.5.0" + jest-regex-util "^25.2.6" extend-shallow@^1.1.2: version "1.1.4" - resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-1.1.4.tgz#19d6bf94dfc09d76ba711f39b872d21ff4dd9071" + resolved "https://registry.npmjs.org/extend-shallow/-/extend-shallow-1.1.4.tgz#19d6bf94dfc09d76ba711f39b872d21ff4dd9071" integrity sha1-Gda/lN/AnXa6cR85uHLSH/TdkHE= dependencies: kind-of "^1.1.0" extend-shallow@^2.0.1: version "2.0.1" - resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" + resolved "https://registry.npmjs.org/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" + resolved "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8" integrity sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg= dependencies: assign-symbols "^1.0.0" @@ -3165,28 +4778,37 @@ extend-shallow@^3.0.0, extend-shallow@^3.0.2: extend@~3.0.2: version "3.0.2" - resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" + resolved "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== external-editor@^2.0.4: version "2.2.0" - resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-2.2.0.tgz#045511cfd8d133f3846673d1047c154e214ad3d5" + resolved "https://registry.npmjs.org/external-editor/-/external-editor-2.2.0.tgz#045511cfd8d133f3846673d1047c154e214ad3d5" integrity sha512-bSn6gvGxKt+b7+6TKEv1ZycHleA7aHhRHyAqJyp5pbUFuYYNIzpZnQDk7AsYckyWdEnTeAnay0aCy2aV6iTk9A== dependencies: chardet "^0.4.0" iconv-lite "^0.4.17" tmp "^0.0.33" +external-editor@^3.0.3: + version "3.1.0" + resolved "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495" + integrity sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew== + 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" + resolved "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz#2e18ff3d2f49ab2765cec9023f011daa8d8349a1" integrity sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE= 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" + resolved "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" integrity sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw== dependencies: array-unique "^0.3.2" @@ -3200,17 +4822,17 @@ extglob@^2.0.4: extsprintf@1.3.0: version "1.3.0" - resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" + resolved "https://registry.npmjs.org/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" + resolved "https://registry.npmjs.org/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f" integrity sha1-4mifjzVvrWLMplo6kcXfX5VRaS8= fancy-log@^1.3.2: version "1.3.3" - resolved "https://registry.yarnpkg.com/fancy-log/-/fancy-log-1.3.3.tgz#dbc19154f558690150a23953a0adbd035be45fc7" + resolved "https://registry.npmjs.org/fancy-log/-/fancy-log-1.3.3.tgz#dbc19154f558690150a23953a0adbd035be45fc7" integrity sha512-k9oEhlyc0FrVh25qYuSELjr8oxsCoc4/LEZfg2iJJrfEk/tZL9bCoJE47gqAvI2m/AUjluCS4+3I0eTx8n3AEw== dependencies: ansi-gray "^0.1.1" @@ -3220,34 +4842,51 @@ fancy-log@^1.3.2: 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" + resolved "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz#7b05218ddf9667bf7f370bf7fdb2cb15fdd0aa49" integrity sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk= +fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: + version "3.1.3" + resolved "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" + integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== + +fast-glob@^2.0.2: + version "2.2.7" + resolved "https://registry.npmjs.org/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= + version "2.1.0" + resolved "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" + integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== -fast-levenshtein@~2.0.4: +fast-levenshtein@~2.0.6: version "2.0.6" - resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" + resolved "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= fb-watchman@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.0.tgz#54e9abf7dfa2f26cd9b1636c588c1afc05de5d58" - integrity sha1-VOmr99+i8mzZsWNsWIwa/AXeXVg= + version "2.0.1" + resolved "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.1.tgz#fc84fb39d2709cf3ff6d743706157bb5708a8a85" + integrity sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg== dependencies: - bser "^2.0.0" + bser "2.1.1" fbjs-css-vars@^1.0.0: version "1.0.2" - resolved "https://registry.yarnpkg.com/fbjs-css-vars/-/fbjs-css-vars-1.0.2.tgz#216551136ae02fe255932c3ec8775f18e2c078b8" + resolved "https://registry.npmjs.org/fbjs-css-vars/-/fbjs-css-vars-1.0.2.tgz#216551136ae02fe255932c3ec8775f18e2c078b8" integrity sha512-b2XGFAFdWZWg0phtAWLHCk836A1Xann+I+Dgd3Gk64MHKZO44FfoD1KxyvbSh0qZsIoXQGGlVztIY+oitJPpRQ== fbjs-scripts@^1.0.0: version "1.2.0" - resolved "https://registry.yarnpkg.com/fbjs-scripts/-/fbjs-scripts-1.2.0.tgz#069a0c0634242d10031c6460ef1fccefcdae8b27" + resolved "https://registry.npmjs.org/fbjs-scripts/-/fbjs-scripts-1.2.0.tgz#069a0c0634242d10031c6460ef1fccefcdae8b27" integrity sha512-5krZ8T0Bf8uky0abPoCLrfa7Orxd8UH4Qq8hRUF2RZYNMu+FmEOrBc7Ib3YVONmxTXTlLAvyrrdrVmksDb2OqQ== dependencies: "@babel/core" "^7.0.0" @@ -3261,22 +4900,9 @@ fbjs-scripts@^1.0.0: semver "^5.1.0" through2 "^2.0.0" -fbjs@^0.8.9: - 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" - fbjs@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-1.0.0.tgz#52c215e0883a3c86af2a7a776ed51525ae8e0a5a" + resolved "https://registry.npmjs.org/fbjs/-/fbjs-1.0.0.tgz#52c215e0883a3c86af2a7a776ed51525ae8e0a5a" integrity sha512-MUgcMEJaFhCaF1QtWGnmq9ZDRAzECTCRAF7O6UZIlAlkTs1SasiX9aP0Iw7wfD2mJ7wDTNfg2w7u5fSCwJk1OA== dependencies: core-js "^2.4.1" @@ -3288,34 +4914,31 @@ fbjs@^1.0.0: 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== +figgy-pudding@^3.4.1, figgy-pudding@^3.5.1: + version "3.5.2" + resolved "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.2.tgz#b4eee8148abb01dcf1d1ac34367d59e12fa61d6e" + integrity sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw== figures@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962" + resolved "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962" integrity sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI= dependencies: escape-string-regexp "^1.0.5" +file-uri-to-path@1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd" + integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw== + filename-regex@^2.0.0: version "2.0.1" - resolved "https://registry.yarnpkg.com/filename-regex/-/filename-regex-2.0.1.tgz#c1c4b9bee3e09725ddb106b75c1e301fe2f18b26" + resolved "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz#c1c4b9bee3e09725ddb106b75c1e301fe2f18b26" integrity sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY= -fileset@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/fileset/-/fileset-2.0.3.tgz#8e7548a96d3cc2327ee5e674168723a333bba2a0" - integrity sha1-jnVIqW08wjJ+5eZ0FocjozO7oqA= - dependencies: - glob "^7.0.3" - minimatch "^3.0.3" - fill-range@^2.1.0: version "2.2.4" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-2.2.4.tgz#eb1e773abb056dcd8df2bfdf6af59b8b3a936565" + resolved "https://registry.npmjs.org/fill-range/-/fill-range-2.2.4.tgz#eb1e773abb056dcd8df2bfdf6af59b8b3a936565" integrity sha512-cnrcCbj01+j2gTG921VZPnHbjmdAf8oQV/iGeV2kZxGSyfYjjTyY79ErsK1WJWMpw6DaApEX72binqJE+/d+5Q== dependencies: is-number "^2.1.0" @@ -3326,7 +4949,7 @@ fill-range@^2.1.0: fill-range@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" + resolved "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" integrity sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc= dependencies: extend-shallow "^2.0.1" @@ -3334,45 +4957,104 @@ fill-range@^4.0.0: repeat-string "^1.6.1" to-regex-range "^2.1.0" -finalhandler@1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.0.tgz#ce0b6855b45853e791b2fcc680046d88253dd7f5" - integrity sha1-zgtoVbRYU+eRsvzGgARtiCU91/U= +fill-range@^7.0.1: + version "7.0.1" + resolved "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" + integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== + dependencies: + to-regex-range "^5.0.1" + +finalhandler@1.1.2: + version "1.1.2" + resolved "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz#b7e7d000ffd11938d0fdb053506f6ebabe9f587d" + integrity sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA== dependencies: debug "2.6.9" - encodeurl "~1.0.1" + encodeurl "~1.0.2" escape-html "~1.0.3" on-finished "~2.3.0" - parseurl "~1.3.2" - statuses "~1.3.1" + parseurl "~1.3.3" + statuses "~1.5.0" unpipe "~1.0.0" 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" + resolved "https://registry.npmjs.org/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-module-bin@^1.0.0: + version "1.1.0" + resolved "https://registry.npmjs.org/find-module-bin/-/find-module-bin-1.1.0.tgz#5f465cf4b2431deb184b3ebaee8ad6c9c5af8523" + integrity sha512-v53mIFOiuump1BSkwURrLblQm+LpWDVQOkQdph/xLPRrbyCU48RryPUSYxih6+gkAdNw9AkqWL7OXUhmE1ddmg== + dependencies: + debug "^4.1.1" + global-paths "^1.0.0" + +find-up@^1.0.0: + version "1.1.2" + resolved "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f" + integrity sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8= + 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" + resolved "https://registry.npmjs.org/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" + resolved "https://registry.npmjs.org/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, find-up@^4.1.0: + version "4.1.0" + resolved "https://registry.npmjs.org/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" + +find-up@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" + integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== + dependencies: + locate-path "^6.0.0" + path-exists "^4.0.0" + +findup-sync@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/findup-sync/-/findup-sync-4.0.0.tgz#956c9cdde804052b881b428512905c4a5f2cdef0" + integrity sha512-6jvvn/12IC4quLBL1KNokxC7wWTvYncaVUYSoxWw7YykPLuRrnv4qdHcSOywOI5RpkOVGeQRtWM8/q+G6W6qfQ== + dependencies: + detect-file "^1.0.0" + is-glob "^4.0.0" + micromatch "^4.0.2" + resolve-dir "^1.0.1" + +fluids@^0.2.2: + version "0.2.4" + resolved "https://registry.npmjs.org/fluids/-/fluids-0.2.4.tgz#5efcece750a682244c2d4952d81611815d6b43ca" + integrity sha512-+smvcInZ+1jy1/PbXSxZitDOS903/sAtyEqsQhrTSIDPm9unNz0FM6B5YmeR+IXXRFNgbKpHznuQaqiVt1y0ZA== + +flush-microtasks@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/flush-microtasks/-/flush-microtasks-1.0.1.tgz#ed3cf034c71dc222c6a9054af650e2b5e9ba1c94" + integrity sha512-NvtApTWP9g282PecFpCZY7x28kFx9OusnRUXa4lyUh6q+QNazNbbQOMcEuVt5ZLM7rT8GnU2attGHrg3v4bjsw== + 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" + resolved "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz#8dd7d873a1babc207d94ead0c2e0e44276ebf2e8" integrity sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w== dependencies: inherits "^2.0.3" @@ -3380,24 +5062,24 @@ flush-write-stream@^1.0.0: 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" + resolved "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA= for-own@^0.1.4: version "0.1.5" - resolved "https://registry.yarnpkg.com/for-own/-/for-own-0.1.5.tgz#5265c681a4f294dabbf17c9509b6763aa84510ce" + resolved "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz#5265c681a4f294dabbf17c9509b6763aa84510ce" integrity sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4= dependencies: for-in "^1.0.1" forever-agent@~0.6.1: version "0.6.1" - resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" + resolved "https://registry.npmjs.org/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" + resolved "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ== dependencies: asynckit "^0.4.0" @@ -3406,43 +5088,62 @@ form-data@~2.3.2: fragment-cache@^0.2.1: version "0.2.1" - resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" + resolved "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" integrity sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk= 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" + resolved "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac= from2@^2.1.0: version "2.3.0" - resolved "https://registry.yarnpkg.com/from2/-/from2-2.3.0.tgz#8bfb5502bde4a4d36cfdeea007fcca21d7e382af" + resolved "https://registry.npmjs.org/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.1, fs-extra@^7.0.0: + version "7.0.1" + resolved "https://registry.npmjs.org/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-extra@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-1.0.0.tgz#cd3ce5f7e7cb6145883fcae3191e9877f8587950" + resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-1.0.0.tgz#cd3ce5f7e7cb6145883fcae3191e9877f8587950" integrity sha1-zTzl9+fLYUWIP8rjGR6Yd/hYeVA= dependencies: graceful-fs "^4.1.2" jsonfile "^2.1.0" klaw "^1.0.0" +fs-extra@^9.0.0: + version "9.0.1" + resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-9.0.1.tgz#910da0062437ba4c39fedd863f1675ccfefcb9fc" + integrity sha512-h2iAoN838FqAFJY2/qVpzFXy+EBxfVE220PalAqQLDVsFOHLJrZvut5puAbCdNv6WJk+B8ihI+k0c7JK5erwqQ== + dependencies: + at-least-node "^1.0.0" + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^1.0.0" + fs-minipass@^1.2.5: - version "1.2.5" - resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.5.tgz#06c277218454ec288df77ada54a03b8702aacb9d" - integrity sha512-JhBl0skXjUPCFH7x6x61gQxrKyXsxB5gcgePLZCwfyCGGsTISMoIeObbrvVeP6Xmyaudw4TT43qV2Gz+iyd2oQ== + version "1.2.7" + resolved "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.7.tgz#ccff8570841e7fe4265693da88936c55aed7f7c7" + integrity sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA== dependencies: - minipass "^2.2.1" + minipass "^2.6.0" 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" + resolved "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz#b47df53493ef911df75731e70a9ded0189db40c9" integrity sha1-tH31NJPvkR33VzHnCp3tAYnbQMk= dependencies: graceful-fs "^4.1.2" @@ -3452,34 +5153,35 @@ fs-write-stream-atomic@^1.0.8: fs.realpath@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + resolved "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= -fsevents@^1.2.3, fsevents@^1.2.7: - version "1.2.7" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.7.tgz#4851b664a3783e52003b3c66eb0eee1074933aa4" - integrity sha512-Pxm6sI2MeBD7RdD12RYsqaP0nMiwx8eZBXCa6z2L+mRHm2DYrOYwihmhjpkdjUHwQhslWQjRpEgNq4XvBmaAuw== +fsevents@^1.2.3: + version "1.2.13" + resolved "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz#f325cb0455592428bcf11b383370ef70e3bfcc38" + integrity sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw== dependencies: - nan "^2.9.2" - node-pre-gyp "^0.10.0" + bindings "^1.5.0" + nan "^2.12.1" + +fsevents@^2.1.2: + version "2.2.1" + resolved "https://registry.npmjs.org/fsevents/-/fsevents-2.2.1.tgz#1fb02ded2036a8ac288d507a65962bd87b97628d" + integrity sha512-bTLYHSeC0UH/EFXS9KqWnXuOl/wHK5Z/d+ghd5AsFMYN7wIGkUCOJyzy88+wJKkZPGON8u4Z9f6U4FdgURE9qA== -function-bind@^1.0.2, function-bind@^1.1.1: +fsevents@~2.1.2: + version "2.1.3" + resolved "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz#fb738703ae8d2f9fe900c33836ddebee8b97f23e" + integrity sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ== + +function-bind@^1.1.1: version "1.1.1" - resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" + resolved "https://registry.npmjs.org/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" - gauge@~1.2.5: version "1.2.7" - resolved "https://registry.yarnpkg.com/gauge/-/gauge-1.2.7.tgz#e9cec5483d3d4ee0ef44b60a7d99e4935e136d93" + resolved "https://registry.npmjs.org/gauge/-/gauge-1.2.7.tgz#e9cec5483d3d4ee0ef44b60a7d99e4935e136d93" integrity sha1-6c7FSD09TuDvRLYKfZnkk14TbZM= dependencies: ansi "^0.3.0" @@ -3490,7 +5192,7 @@ gauge@~1.2.5: gauge@~2.7.3: version "2.7.4" - resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" + resolved "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" integrity sha1-LANAXHU4w51+s3sxcCLjJfsBi/c= dependencies: aproba "^1.0.3" @@ -3502,43 +5204,191 @@ gauge@~2.7.3: strip-ansi "^3.0.1" wide-align "^1.1.0" +genfun@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/genfun/-/genfun-5.0.0.tgz#9dd9710a06900a5c4a5bf57aca5da4e52fe76537" + integrity sha512-KGDOARWVga7+rnB3z9Sd2Letx515owfk0hSxHGuqjANb1M+x2bGZGqHLiozPsYMdM2OubeMni/Hpwmjq6qIUhA== + +gensync@^1.0.0-beta.1: + version "1.0.0-beta.2" + resolved "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" + integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== + 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" + resolved "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz#f978fa4c90d1dfe7ff2d6beda2a515e713bdcf4a" integrity sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w== +get-caller-file@^2.0.1, get-caller-file@^2.0.5: + version "2.0.5" + resolved "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" + integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== + +get-intrinsic@^1.0.0: + version "1.0.2" + resolved "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.0.2.tgz#6820da226e50b24894e08859469dc68361545d49" + integrity sha512-aeX0vrFm21ILl3+JpFFRNe9aUvp6VFZb2/CTbgLb8j75kOhvoNYjt9d8KA/tJG4gSo8nzEDedRl0h7vDmBYRVg== + dependencies: + function-bind "^1.1.1" + has "^1.0.3" + has-symbols "^1.0.1" + +get-meta-file@^1.0.0, get-meta-file@^1.3.1, get-meta-file@^1.3.2: + version "1.3.4" + resolved "https://registry.npmjs.org/get-meta-file/-/get-meta-file-1.3.4.tgz#c9839b2c54829495c537d9a47c890dbc61a77a66" + integrity sha512-IImsNzqVW2vCRsxlyztCbYHqzkeCObVcvOm2h8XD2TWLHVTvZX7n9KvloqmLPdtsCDAzm7WxWje7ym/8w4js5w== + dependencies: + chalk "^3.0.0" + debug "^4.0.0" + dedent "^0.7.0" + findup-sync "^4.0.0" + prompt-sync "^4.1.5" + tildify "^2.0.0" + +get-package-type@^0.1.0: + version "0.1.0" + resolved "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz#8de2d803cff44df3bc6c456e6668b36c3926e11a" + integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q== + +get-pkg-repo@^1.0.0: + version "1.4.0" + resolved "https://registry.npmjs.org/get-pkg-repo/-/get-pkg-repo-1.4.0.tgz#c73b489c06d80cc5536c2c853f9e05232056972d" + integrity sha1-xztInAbYDMVTbCyFP54FIyBWly0= + dependencies: + hosted-git-info "^2.1.4" + meow "^3.3.0" + normalize-package-data "^2.3.0" + parse-github-repo-url "^1.3.0" + through2 "^2.0.0" + +get-port@^3.2.0: + version "3.2.0" + resolved "https://registry.npmjs.org/get-port/-/get-port-3.2.0.tgz#dd7ce7de187c06c8bf353796ac71e099f0980ebc" + integrity sha1-3Xzn3hh8Bsi/NTeWrHHgmfCYDrw= + +get-stdin@8.0.0: + version "8.0.0" + resolved "https://registry.npmjs.org/get-stdin/-/get-stdin-8.0.0.tgz#cbad6a73feb75f6eeb22ba9e01f89aa28aa97a53" + integrity sha512-sY22aA6xchAzprjyqmSEQv4UbAAzRN0L2dQB0NlN5acTTK9Don6nhoc3eAbUnpZiCANAMfd/+40kVdKfFygohg== + +get-stdin@^4.0.1: + version "4.0.1" + resolved "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe" + integrity sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4= + get-stdin@^6.0.0: version "6.0.0" - resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-6.0.0.tgz#9e09bf712b360ab9225e812048f71fde9c89657b" + resolved "https://registry.npmjs.org/get-stdin/-/get-stdin-6.0.0.tgz#9e09bf712b360ab9225e812048f71fde9c89657b" integrity sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g== get-stream@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" + resolved "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" integrity sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ= -get-stream@^4.0.0: +get-stream@^4.0.0, get-stream@^4.1.0: version "4.1.0" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" + resolved "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== dependencies: pump "^3.0.0" +get-stream@^5.0.0: + version "5.2.0" + resolved "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" + integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== + 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" + resolved "https://registry.npmjs.org/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" + resolved "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" integrity sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo= dependencies: assert-plus "^1.0.0" +git-raw-commits@2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-2.0.0.tgz#d92addf74440c14bcc5c83ecce3fb7f8a79118b5" + integrity sha512-w4jFEJFgKXMQJ0H0ikBk2S+4KP2VEjhCvLCNqbNRQC8BgGWgLKNCO7a9K9LI+TVT7Gfoloje502sEnctibffgg== + dependencies: + dargs "^4.0.1" + lodash.template "^4.0.2" + meow "^4.0.0" + split2 "^2.0.0" + through2 "^2.0.0" + +git-raw-commits@^2.0.0: + version "2.0.8" + resolved "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-2.0.8.tgz#65cef91ae8307281b6ee31ca481fa1164e166156" + integrity sha512-6Gk7tQHGMLEL1bSnrMJTCVt2AQl4EmCcJDtzs/JJacCb2+TNEyHM67Gp7Ri9faF7OcGpjGGRjHLvs/AG7QKZ2Q== + dependencies: + dargs "^7.0.0" + lodash.template "^4.0.2" + meow "^8.0.0" + split2 "^2.0.0" + through2 "^4.0.0" + +git-remote-origin-url@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/git-remote-origin-url/-/git-remote-origin-url-2.0.0.tgz#5282659dae2107145a11126112ad3216ec5fa65f" + integrity sha1-UoJlna4hBxRaERJhEq0yFuxfpl8= + dependencies: + gitconfiglocal "^1.0.0" + pify "^2.3.0" + +git-remote-origin-url@^3.0.0: + version "3.1.0" + resolved "https://registry.npmjs.org/git-remote-origin-url/-/git-remote-origin-url-3.1.0.tgz#c90c1cb0f66658566bbc900509ab093a1522d2b3" + integrity sha512-yVSfaTMO7Bqk6Xx3696ufNfjdrajX7Ig9GuAeO2V3Ji7stkDoBNFldnWIAsy0qviUd0Z+X2P6ziJENKztW7cBQ== + dependencies: + gitconfiglocal "^2.1.0" + +git-semver-tags@^2.0.2, git-semver-tags@^2.0.3: + version "2.0.3" + resolved "https://registry.npmjs.org/git-semver-tags/-/git-semver-tags-2.0.3.tgz#48988a718acf593800f99622a952a77c405bfa34" + integrity sha512-tj4FD4ww2RX2ae//jSrXZzrocla9db5h0V7ikPl1P/WwoZar9epdUhwR7XHXSgc+ZkNq72BEEerqQuicoEQfzA== + dependencies: + meow "^4.0.0" + semver "^6.0.0" + +git-up@^4.0.0: + version "4.0.2" + resolved "https://registry.npmjs.org/git-up/-/git-up-4.0.2.tgz#10c3d731051b366dc19d3df454bfca3f77913a7c" + integrity sha512-kbuvus1dWQB2sSW4cbfTeGpCMd8ge9jx9RKnhXhuJ7tnvT+NIrTVfYZxjtflZddQYcmdOTlkAcjmx7bor+15AQ== + dependencies: + is-ssh "^1.3.0" + parse-url "^5.0.0" + +git-url-parse@^11.1.2: + version "11.4.3" + resolved "https://registry.npmjs.org/git-url-parse/-/git-url-parse-11.4.3.tgz#1610284edf1f14964180f5b3399ec68b692cfd87" + integrity sha512-LZTTk0nqJnKN48YRtOpR8H5SEfp1oM2tls90NuZmBxN95PnCvmuXGzqQ4QmVirBgKx2KPYfPGteX3/raWjKenQ== + dependencies: + git-up "^4.0.0" + +gitconfiglocal@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/gitconfiglocal/-/gitconfiglocal-1.0.0.tgz#41d045f3851a5ea88f03f24ca1c6178114464b9b" + integrity sha1-QdBF84UaXqiPA/JMocYXgRRGS5s= + dependencies: + ini "^1.3.2" + +gitconfiglocal@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/gitconfiglocal/-/gitconfiglocal-2.1.0.tgz#07c28685c55cc5338b27b5acbcfe34aeb92e43d1" + integrity sha512-qoerOEliJn3z+Zyn1HW2F6eoYJqKwS6MgC9cztTLUB/xLWX8gD/6T60pKn4+t/d6tP7JlybI7Z3z+I572CR/Vg== + dependencies: + ini "^1.3.2" + glob-base@^0.3.0: version "0.3.0" - resolved "https://registry.yarnpkg.com/glob-base/-/glob-base-0.3.0.tgz#dbb164f6221b1c0b1ccf82aea328b497df0ea3c4" + resolved "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz#dbb164f6221b1c0b1ccf82aea328b497df0ea3c4" integrity sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q= dependencies: glob-parent "^2.0.0" @@ -3546,23 +5396,33 @@ glob-base@^0.3.0: glob-parent@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-2.0.0.tgz#81383d72db054fcccf5336daa902f182f6edbb28" + resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz#81383d72db054fcccf5336daa902f182f6edbb28" integrity sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg= 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" + resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae" integrity sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4= dependencies: is-glob "^3.1.0" path-dirname "^1.0.0" -glob@^7.0.3, glob@^7.0.5, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3: - version "7.1.3" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.3.tgz#3960832d3f1574108342dafd3a67b332c0969df1" - integrity sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ== +glob-regex@^0.3.0: + version "0.3.2" + resolved "https://registry.npmjs.org/glob-regex/-/glob-regex-0.3.2.tgz#27348f2f60648ec32a4a53137090b9fb934f3425" + integrity sha512-m5blUd3/OqDTWwzBBtWBPrGlAzatRywHameHeekAZyZrskYouOGdNB8T/q6JucucvJXtOuyHIn0/Yia7iDasDw== + +glob-to-regexp@^0.3.0: + version "0.3.0" + resolved "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz#8c5a1494d2066c570cc3bfe4496175acc4d502ab" + integrity sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs= + +glob@^7.0.3, glob@^7.0.5, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4: + version "7.1.6" + resolved "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" + integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== dependencies: fs.realpath "^1.0.0" inflight "^1.0.4" @@ -3571,41 +5431,100 @@ glob@^7.0.3, glob@^7.0.5, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3: once "^1.3.0" path-is-absolute "^1.0.0" +global-dirs@^0.1.1: + version "0.1.1" + resolved "https://registry.npmjs.org/global-dirs/-/global-dirs-0.1.1.tgz#b319c0dd4607f353f3be9cca4c72fc148c49f445" + integrity sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU= + dependencies: + ini "^1.3.4" + +global-modules@^0.2.3: + version "0.2.3" + resolved "https://registry.npmjs.org/global-modules/-/global-modules-0.2.3.tgz#ea5a3bed42c6d6ce995a4f8a1269b5dae223828d" + integrity sha1-6lo77ULG1s6ZWk+KEmm12uIjgo0= + dependencies: + global-prefix "^0.1.4" + is-windows "^0.2.0" + +global-modules@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/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-paths@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/global-paths/-/global-paths-1.0.0.tgz#3ffc84341594e47b32bfade5785355d4df7feac7" + integrity sha1-P/yENBWU5Hsyv63leFNV1N9/6sc= + dependencies: + array-unique "^0.3.2" + global-modules "^0.2.3" + is-windows "^1.0.0" + +global-prefix@^0.1.4: + version "0.1.5" + resolved "https://registry.npmjs.org/global-prefix/-/global-prefix-0.1.5.tgz#8d3bc6b8da3ca8112a160d8d496ff0462bfef78f" + integrity sha1-jTvGuNo8qBEqFg2NSW/wRiv+948= + dependencies: + homedir-polyfill "^1.0.0" + ini "^1.3.4" + is-windows "^0.2.0" + which "^1.2.12" + +global-prefix@^1.0.1: + version "1.0.2" + resolved "https://registry.npmjs.org/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@^4.3.0: - version "4.3.2" - resolved "https://registry.yarnpkg.com/global/-/global-4.3.2.tgz#e76989268a6c74c38908b1305b10fc0e394e9d0f" - integrity sha1-52mJJopsdMOJCLEwWxD8DjlOnQ8= + version "4.4.0" + resolved "https://registry.npmjs.org/global/-/global-4.4.0.tgz#3e7b105179006a323ed71aafca3e9c57a5cc6406" + integrity sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w== dependencies: min-document "^2.19.0" - process "~0.5.1" + process "^0.11.10" globals@^11.1.0: - version "11.11.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-11.11.0.tgz#dcf93757fa2de5486fbeed7118538adf789e9c2e" - integrity sha512-WHq43gS+6ufNOEqlrDBxVEbb8ntfXrfAUU2ZOpCxrBdGKW3gyv8mCxAfIBD0DroPKGrJ2eSsXsLtY9MPntsyTw== + version "11.12.0" + resolved "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" + integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== + +globby@^8.0.1: + version "8.0.2" + resolved "https://registry.npmjs.org/globby/-/globby-8.0.2.tgz#5697619ccd95c5275dbb2d6faa42087c1a941d8d" + integrity sha512-yTzMmKygLp8RUpG1Ymu2VXPSJQZjNAZPD4ywgYEaG7e4tBJeUQBO8OpXrf1RCNcEs5alsoJYPAMiIHP0cmeC7w== + 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" -graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.3, graceful-fs@^4.1.6, graceful-fs@^4.1.9: - 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== +graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.3, graceful-fs@^4.1.6, graceful-fs@^4.1.9, graceful-fs@^4.2.0, graceful-fs@^4.2.4: + version "4.2.4" + resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb" + integrity sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw== growly@^1.3.0: version "1.3.0" - resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081" + resolved "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081" integrity sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE= -gzip-size@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/gzip-size/-/gzip-size-5.0.0.tgz#a55ecd99222f4c48fd8c01c625ce3b349d0a0e80" - integrity sha512-5iI7omclyqrnWw4XbXAmGhPsABkSIDQonv2K0h61lybgofWa6iZyvrI3r2zsJH4P8Nb64fFVzlvfhs0g7BBxAA== - dependencies: - duplexer "^0.1.1" - pify "^3.0.0" - -handlebars@^4.1.0: - version "4.7.7" - resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.7.7.tgz#9ce33416aad02dbd6c8fafa8240d5d98004945a1" - integrity sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA== +handlebars@^4.7.6: + version "4.7.6" + resolved "https://registry.npmjs.org/handlebars/-/handlebars-4.7.6.tgz#d4c05c1baf90e9945f77aa68a7a219aa4a7df74e" + integrity sha512-1f2BACcBfiwAfStCKZNrUCgqNZkGsAT7UM3kkYtXuLo0KnaVfjKOyf7PRzB6++aK9STyT1Pd2ZCPe3EGOXleXA== dependencies: minimist "^1.2.5" neo-async "^2.6.0" @@ -3616,42 +5535,52 @@ handlebars@^4.1.0: har-schema@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" + resolved "https://registry.npmjs.org/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== +har-validator@~5.1.3: + version "5.1.5" + resolved "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz#1f0803b9f8cb20c0fa13822df1ecddb36bde1efd" + integrity sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w== dependencies: - ajv "^6.5.5" + ajv "^6.12.3" har-schema "^2.0.0" +hard-rejection@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz#1c6eda5c1685c63942766d79bb40ae773cecd883" + integrity sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA== + has-ansi@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" + resolved "https://registry.npmjs.org/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" + resolved "https://registry.npmjs.org/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-flag@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" + integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== + +has-symbols@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz#9f5214758a44196c406d9bd76cebf81ec2dd31e8" + integrity sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg== -has-unicode@^2.0.0: +has-unicode@^2.0.0, has-unicode@^2.0.1: version "2.0.1" - resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" + resolved "https://registry.npmjs.org/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" + resolved "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" integrity sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8= dependencies: get-value "^2.0.3" @@ -3660,7 +5589,7 @@ has-value@^0.3.1: has-value@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177" + resolved "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177" integrity sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc= dependencies: get-value "^2.0.6" @@ -3669,100 +5598,111 @@ has-value@^1.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" + resolved "https://registry.npmjs.org/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" + resolved "https://registry.npmjs.org/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: +has@^1.0.3: version "1.0.3" - resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" + resolved "https://registry.npmjs.org/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= +homedir-polyfill@^1.0.0, homedir-polyfill@^1.0.1: + version "1.0.3" + resolved "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz#743298cef4e5af3e194161fbadcc2151d3a058e8" + integrity sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA== dependencies: - inherits "^2.0.1" - safe-buffer "^5.0.1" + parse-passwd "^1.0.0" -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" +hosted-git-info@^2.1.4, hosted-git-info@^2.7.1: + version "2.8.8" + resolved "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.8.tgz#7539bd4bc1e0e0a895815a2e0262420b12858488" + integrity sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg== -hmac-drbg@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" - integrity sha1-0nRXAQJabHdabFRXk+1QL8DGSaE= +hosted-git-info@^3.0.6: + version "3.0.7" + resolved "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-3.0.7.tgz#a30727385ea85acfcee94e0aad9e368c792e036c" + integrity sha512-fWqc0IcuXs+BmE9orLDyVykAG9GJtGLGuZAAqgcckPgv5xad4AcXGIv8galtQvlwutxSlaMcdw7BUtq2EIvqCQ== 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== + lru-cache "^6.0.0" 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" + resolved "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz#e70d84b94da53aa375e11fe3a351be6642ca46f8" integrity sha512-71lZziiDnsuabfdYiUeWdCVyKuqwWi23L8YeIgV9jSSZHCtb6wB1BKWooH7L3tn4/FuZJMVWyNaIDr4RGmaSYw== dependencies: whatwg-encoding "^1.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" +html-escaper@^2.0.0: + version "2.0.2" + resolved "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" + integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== -http-errors@~1.6.2: - version "1.6.3" - resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.3.tgz#8b55680bb4be283a0b5bf4ea2e38580be1d9320d" - integrity sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0= +http-cache-semantics@^3.8.1: + version "3.8.1" + resolved "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-3.8.1.tgz#39b0e16add9b605bf0a9ef3d9daaf4843b4cacd2" + integrity sha512-5ai2iksyV8ZXmnZhHH4rWPoxxistEexSi5936zIQ1bnNTW5VnA85B6P/VpXiRM017IgRvb2kKo1a//y+0wSp3w== + +http-errors@~1.7.2: + version "1.7.3" + resolved "https://registry.npmjs.org/http-errors/-/http-errors-1.7.3.tgz#6c619e4f9c60308c38519498c14fbb10aacebb06" + integrity sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw== dependencies: depd "~1.1.2" - inherits "2.0.3" - setprototypeof "1.1.0" - statuses ">= 1.4.0 < 2" + inherits "2.0.4" + setprototypeof "1.1.1" + statuses ">= 1.5.0 < 2" + toidentifier "1.0.0" + +http-proxy-agent@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-2.1.0.tgz#e4821beef5b2142a2026bd73926fe537631c5405" + integrity sha512-qwHbBLV7WviBl0rQsOzH6o5lwyOIvwp/BdFnvVxXORldu5TmjFfjzBcWUWS5kWAZhmv+JtiDhSuQCp4sBfbIgg== + dependencies: + agent-base "4" + debug "3.1.0" http-signature@~1.2.0: version "1.2.0" - resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" + resolved "https://registry.npmjs.org/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" -https-browserify@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73" - integrity sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM= +https-proxy-agent@^2.2.1, https-proxy-agent@^2.2.3: + version "2.2.4" + resolved "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-2.2.4.tgz#4ee7a737abd92678a293d9b34a1af4d0d08c787b" + integrity sha512-OmvfoQ53WLjtA9HeYP9RNrWMJzzAz1JGaSFr1nijg0PVR1JaD/xbJq1mdEIIlxGpXp9eSe/O2LgU9DJmTPd0Eg== + dependencies: + agent-base "^4.3.0" + debug "^3.1.0" + +human-signals@^1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz#c5b1cd14f50aeae09ab6c59fe63ba3395fe4dfa3" + integrity sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw== + +humanize-ms@^1.2.1: + version "1.2.1" + resolved "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz#c46e3159a293f6b896da29316d8b6fe8bb79bbed" + integrity sha1-xG4xWaKT9riW2ikxbYtv6Lt5u+0= + dependencies: + ms "^2.0.0" husky@1.3.1: version "1.3.1" - resolved "https://registry.yarnpkg.com/husky/-/husky-1.3.1.tgz#26823e399300388ca2afff11cfa8a86b0033fae0" + resolved "https://registry.npmjs.org/husky/-/husky-1.3.1.tgz#26823e399300388ca2afff11cfa8a86b0033fae0" integrity sha512-86U6sVVVf4b5NYSZ0yvv88dRgBSSXXmHaiq5pP4KDj5JVzdwKgBjEtUPOm8hcoytezFwbU+7gotXNhpHdystlg== dependencies: cosmiconfig "^5.0.7" @@ -3776,97 +5716,136 @@ husky@1.3.1: run-node "^1.0.0" slash "^2.0.0" -iconv-lite@0.4.24, iconv-lite@^0.4.17, iconv-lite@^0.4.4, iconv-lite@~0.4.13: +iconv-lite@0.4.24, iconv-lite@^0.4.17, iconv-lite@^0.4.24: version "0.4.24" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" + resolved "https://registry.npmjs.org/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== +iconv-lite@^0.6.2: + version "0.6.2" + resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.2.tgz#ce13d1875b0c3a674bd6a04b7f76b01b1b6ded01" + integrity sha512-2y91h5OpQlolefMPmUlivelittSWy0rP+oYVpn6A7GwVHNE8AWzoYOBNmlwks3LobaJxgHCYZAnyNo2GgpNRNQ== + dependencies: + safer-buffer ">= 2.1.2 < 3.0.0" iferr@^0.1.5: version "0.1.5" - resolved "https://registry.yarnpkg.com/iferr/-/iferr-0.1.5.tgz#c60eed69e6d8fdb6b3104a1fcbca1c192dc5b501" + resolved "https://registry.npmjs.org/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== + version "3.0.3" + resolved "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.3.tgz#017e2447184bfeade7c238e4aefdd1e8f95b1e37" + integrity sha512-m7o6xuOaT1aqheYHKf8W6J5pYH85ZI9w077erOzLje3JsB1gkafkAhHHY19dqjulgIZHFm32Cp5uNZgcQqdJKw== dependencies: minimatch "^3.0.4" -ignore@^3.3.7: +ignore@^3.3.5, ignore@^3.3.7: version "3.3.10" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.3.10.tgz#0a97fb876986e8081c631160f8f9f389157f0043" + resolved "https://registry.npmjs.org/ignore/-/ignore-3.3.10.tgz#0a97fb876986e8081c631160f8f9f389157f0043" integrity sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug== image-size@^0.6.0: version "0.6.3" - resolved "https://registry.yarnpkg.com/image-size/-/image-size-0.6.3.tgz#e7e5c65bb534bd7cdcedd6cb5166272a85f75fb2" + resolved "https://registry.npmjs.org/image-size/-/image-size-0.6.3.tgz#e7e5c65bb534bd7cdcedd6cb5166272a85f75fb2" integrity sha512-47xSUiQioGaB96nqtp5/q55m0aBQSQdyIloMOc/x+QVTDZLNmXE892IIDrJ0hM1A5vcNUDD5tDffkSP5lCaIIA== import-fresh@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-2.0.0.tgz#d81355c15612d386c61f9ddd3922d4304822a546" + resolved "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz#d81355c15612d386c61f9ddd3922d4304822a546" integrity sha1-2BNVwVYS04bGH53dOSLUMEgipUY= dependencies: caller-path "^2.0.0" resolve-from "^3.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" - integrity sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ== +import-fresh@^3.0.0, import-fresh@^3.2.1: + version "3.2.2" + resolved "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.2.tgz#fc129c160c5d68235507f4331a6baad186bdbc3e" + integrity sha512-cTPNrlvJT6twpYy+YmKUKrTSjWFs3bjYjAhCwm+z4EOCubZxAuO+hHpRN64TqjEaYSHs7tJAE0w1CKMGmsG/lw== dependencies: - pkg-dir "^3.0.0" + parent-module "^1.0.0" + resolve-from "^4.0.0" + +import-local@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/import-local/-/import-local-1.0.0.tgz#5e4ffdc03f4fe6c009c6729beb29631c2f8227bc" + integrity sha512-vAaZHieK9qjGo58agRBg+bhHX3hoTZU/Oa3GESWLz7t1U62fk63aHuDJJEteXoDeTCcPmUT+z38gkHPZkkmpmQ== + dependencies: + pkg-dir "^2.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= +import-local@^3.0.2: + version "3.0.2" + resolved "https://registry.npmjs.org/import-local/-/import-local-3.0.2.tgz#a8cfd0431d1de4a2199703d003e3e62364fa6db6" + integrity sha512-vjL3+w0oulAVZ0hBHnxa/Nm5TAurf9YLQJDhqRZyqb+VKGOB6LU8t9H1Nr5CIo16vh9XfJTOoHwU0B71S557gA== + dependencies: + pkg-dir "^4.2.0" + resolve-cwd "^3.0.0" + +imurmurhash@^0.1.4: + version "0.1.4" + resolved "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= + +indent-string@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz#8e2d48348742121b4a8218b7a137e9a52049dc80" + integrity sha1-ji1INIdCEhtKghi3oTfppSBJ3IA= + dependencies: + repeating "^2.0.0" + +indent-string@^3.0.0: + version "3.2.0" + resolved "https://registry.npmjs.org/indent-string/-/indent-string-3.2.0.tgz#4a5fd6d27cc332f37e5419a504dbb837105c9289" + integrity sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok= + +indent-string@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" + integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== -indexof@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/indexof/-/indexof-0.0.1.tgz#82dc336d232b9062179d05ab3293a66059fd435d" - integrity sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10= +infer-owner@^1.0.3, infer-owner@^1.0.4: + version "1.0.4" + resolved "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz#c4cefcaa8e51051c2a40ba2ce8a3d27295af9467" + integrity sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A== inflight@^1.0.4: version "1.0.6" - resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + resolved "https://registry.npmjs.org/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.4, inherits@~2.0.1, inherits@~2.0.3: +inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.1, inherits@~2.0.3: version "2.0.4" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + resolved "https://registry.npmjs.org/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.0: +ini@^1.3.2, ini@^1.3.4: version "1.3.8" - resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" + resolved "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== +init-package-json@^1.10.3: + version "1.10.3" + resolved "https://registry.npmjs.org/init-package-json/-/init-package-json-1.10.3.tgz#45ffe2f610a8ca134f2bd1db5637b235070f6cbe" + integrity sha512-zKSiXKhQveNteyhcj1CoOP8tqp1QuxPIPBl8Bid99DGLFqA1p87M6lNgfjJHSBoWJJlidGOv5rWjyYKEB3g2Jw== + dependencies: + glob "^7.1.1" + npm-package-arg "^4.0.0 || ^5.0.0 || ^6.0.0" + promzard "^0.3.0" + read "~1.0.1" + read-package-json "1 || 2" + semver "2.x || 3.x || 4 || 5" + validate-npm-package-license "^3.0.1" + validate-npm-package-name "^3.0.0" + inquirer@^3.0.6: version "3.3.0" - resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-3.3.0.tgz#9dd2f2ad765dcab1ff0443b491442a20ba227dc9" + resolved "https://registry.npmjs.org/inquirer/-/inquirer-3.3.0.tgz#9dd2f2ad765dcab1ff0443b491442a20ba227dc9" integrity sha512-h+xtnyk4EwKvFWHrUYsWErEVR+igKtLdchu+o0Z1RL7VU/jVMFbYir2bp6bAj8efFNxWqHX0dIss6fJQ+/+qeQ== dependencies: ansi-escapes "^3.0.0" @@ -3884,93 +5863,124 @@ inquirer@^3.0.6: strip-ansi "^4.0.0" through "^2.3.6" -invariant@^2.2.2, invariant@^2.2.4: +inquirer@^6.0.0, inquirer@^6.2.0: + version "6.5.2" + resolved "https://registry.npmjs.org/inquirer/-/inquirer-6.5.2.tgz#ad50942375d036d327ff528c08bd5fab089928ca" + integrity sha512-cntlB5ghuB0iuO65Ovoi8ogLHiWGs/5yNrtUcKjFhSSiVeAIVpD7koaSU9RM8mpXw5YDi9RdYXGQMaOURB7ycQ== + 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.12" + 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.4: version "2.2.4" - resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" + resolved "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA== 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" + resolved "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6" integrity sha1-EEqOSqym09jNFXqO+L+rLXo//bY= invert-kv@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-2.0.0.tgz#7393f5afa59ec9ff5f67a27620d11c226e3eec02" + resolved "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz#7393f5afa59ec9ff5f67a27620d11c226e3eec02" integrity sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA== +ip-regex@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz#fa78bf5d2e6913c911ce9f819ee5146bb6d844e9" + integrity sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk= + +ip@1.1.5: + version "1.1.5" + resolved "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a" + integrity sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo= + 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" + resolved "https://registry.npmjs.org/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" + resolved "https://registry.npmjs.org/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" + resolved "https://registry.npmjs.org/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-boolean-object@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.0.0.tgz#98f8b28030684219a95f375cfbd88ce3405dff93" - integrity sha1-mPiygDBoQhmpXzdc+9iM40Bd/5M= - is-buffer@^1.1.5: version "1.1.6" - resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" + resolved "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== -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-callable@^1.1.4, is-callable@^1.2.2: + version "1.2.2" + resolved "https://registry.npmjs.org/is-callable/-/is-callable-1.2.2.tgz#c7c6715cd22d4ddb48d3e19970223aceabb080d9" + integrity sha512-dnMqspv5nU3LoewK2N/y7KLtxtakvTuaCsU9FU50/QDmdbHNy/4/JuRtMHqRU22o3q+W89YQndQEeCVwK+3qrA== + +is-ci@^1.0.10: + version "1.2.1" + resolved "https://registry.npmjs.org/is-ci/-/is-ci-1.2.1.tgz#e3779c8ee17fccf428488f6e281187f2e632841c" + integrity sha512-s6tfsaQaQi3JNciBH6shVqEDvhGut0SUXr31ag8Pd8BBbVVlcGfWhpPmEOoM6RJ5TFhbypvf5yyRw/VXW1IiWg== + 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" + resolved "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c" integrity sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w== dependencies: ci-info "^2.0.0" +is-core-module@^2.1.0: + version "2.2.0" + resolved "https://registry.npmjs.org/is-core-module/-/is-core-module-2.2.0.tgz#97037ef3d52224d85163f5597b2b63d9afed981a" + integrity sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ== + dependencies: + has "^1.0.3" + 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" + resolved "https://registry.npmjs.org/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" + resolved "https://registry.npmjs.org/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= + version "1.0.2" + resolved "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz#bda736f2cd8fd06d32844e7743bfa7494c3bfd7e" + integrity sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g== is-descriptor@^0.1.0: version "0.1.6" - resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca" + resolved "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca" integrity sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg== dependencies: is-accessor-descriptor "^0.1.6" @@ -3979,7 +5989,7 @@ is-descriptor@^0.1.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" + resolved "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec" integrity sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg== dependencies: is-accessor-descriptor "^1.0.0" @@ -3988,206 +5998,274 @@ is-descriptor@^1.0.0, is-descriptor@^1.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" + resolved "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz#61339b6f2475fc772fd9c9d83f5c8575dc154ae1" integrity sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE= +is-docker@^2.0.0: + version "2.1.1" + resolved "https://registry.npmjs.org/is-docker/-/is-docker-2.1.1.tgz#4125a88e44e450d384e09047ede71adc2d144156" + integrity sha512-ZOoqiXfEwtGknTiuDEy8pN2CfE3TxMHprvNer1mXiqwkOT77Rw3YVrUQ52EqAOU3QAWDQ+bQdx7HJzrv7LS2Hw== + is-dotfile@^1.0.0: version "1.0.3" - resolved "https://registry.yarnpkg.com/is-dotfile/-/is-dotfile-1.0.3.tgz#a6a2f32ffd2dfb04f5ca25ecd0f6b83cf798a1e1" + resolved "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz#a6a2f32ffd2dfb04f5ca25ecd0f6b83cf798a1e1" integrity sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE= 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" + resolved "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz#2238098fc221de0bcfa5d9eac4c45d638aa1c534" integrity sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ= 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" + resolved "https://registry.npmjs.org/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" + resolved "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4" integrity sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA== 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" + resolved "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz#ac468177c4943405a092fc8f29760c6ffc6206c0" integrity sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA= 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" + resolved "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= +is-finite@^1.0.0: + version "1.1.0" + resolved "https://registry.npmjs.org/is-finite/-/is-finite-1.1.0.tgz#904135c77fb42c0641d6aa1bcdbc4daa8da082f3" + integrity sha512-cdyMtqX/BOqqNBBiKlIVkytNHm49MtMlYyn1zxzvJKWmFMlGzm+ry5BBfYyeY9YmNKbRSo/o7OX9w9ale0wg3w== + 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" + resolved "https://registry.npmjs.org/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" + resolved "https://registry.npmjs.org/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.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" + integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== + is-generator-fn@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-2.0.0.tgz#038c31b774709641bda678b1f06a4e3227c10b3e" - integrity sha512-elzyIdM7iKoFHzcrndIqjYomImhxrFRnGP3galODoII4TB9gI7mZ+FnlLQmmjf27SxHS2gKEeyhX5/+YRS6H9g== + version "2.1.0" + resolved "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz#7d140adc389aaf3011a8f2a2a4cfa6faadffb118" + integrity sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ== is-glob@^2.0.0, is-glob@^2.0.1: version "2.0.1" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-2.0.1.tgz#d096f926a3ded5600f3fdfd91198cb0888c2d863" + resolved "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz#d096f926a3ded5600f3fdfd91198cb0888c2d863" integrity sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM= 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" + resolved "https://registry.npmjs.org/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" + resolved "https://registry.npmjs.org/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" + resolved "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz#3258fb69f78c14d5b815d664336b4cffb6441591" integrity sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE= -is-number-object@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.3.tgz#f265ab89a9f445034ef6aff15a8f00b00f551799" - integrity sha1-8mWrian0RQNO9q/xWo8AsA9VF5k= +is-negative-zero@^2.0.0: + version "2.0.1" + resolved "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz#3de746c18dda2319241a53675908d8f766f11c24" + integrity sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w== is-number@^2.1.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-2.1.0.tgz#01fcbbb393463a548f2f466cce16dece49db908f" + resolved "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz#01fcbbb393463a548f2f466cce16dece49db908f" integrity sha1-Afy7s5NGOlSPL0ZszhbezknbkI8= 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" + resolved "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" integrity sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU= 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" + resolved "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz#0026e37f5454d73e356dfe6564699867c6a7f0ff" integrity sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ== -is-plain-object@^2.0.1, is-plain-object@^2.0.3, is-plain-object@^2.0.4: +is-number@^7.0.0: + version "7.0.0" + resolved "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== + +is-obj@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" + integrity sha1-PkcprB9f3gJc19g6iW2rn09n2w8= + +is-obj@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz#473fb05d973705e3fd9620545018ca8e22ef4982" + integrity sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w== + +is-plain-obj@^1.0.0, is-plain-obj@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/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" + resolved "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== dependencies: isobject "^3.0.1" +is-plain-object@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz#4427f50ab3429e9025ea7d52e9043a9ef4159344" + integrity sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q== + 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" + resolved "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz#3334dc79774368e92f016e6fbc0a88f5cd6e6bc4" integrity sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q= is-primitive@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/is-primitive/-/is-primitive-2.0.0.tgz#207bab91638499c07b2adf240a41a87210034575" + resolved "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz#207bab91638499c07b2adf240a41a87210034575" integrity sha1-IHurkWOEmcB7Kt8kCkGochADRXU= -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-reference@^1.1.2: + version "1.2.1" + resolved "https://registry.npmjs.org/is-reference/-/is-reference-1.2.1.tgz#8b2dac0b371f4bc994fdeaba9eb542d03002d0b7" + integrity sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ== + dependencies: + "@types/estree" "*" -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= +is-regex@^1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/is-regex/-/is-regex-1.1.1.tgz#c6f98aacc546f6cec5468a07b7b153ab564a57b9" + integrity sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg== + dependencies: + has-symbols "^1.0.1" + +is-ssh@^1.3.0: + version "1.3.2" + resolved "https://registry.npmjs.org/is-ssh/-/is-ssh-1.3.2.tgz#a4b82ab63d73976fd8263cceee27f99a88bdae2b" + integrity sha512-elEw0/0c2UscLrNG+OAorbP539E3rhliKPg+hDMWN9VwrDXfYK+4PBEykDPfxlYYtQvl84TascnQyobfQLHEhQ== dependencies: - has "^1.0.1" + protocols "^1.1.0" 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" + resolved "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= -is-string@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.4.tgz#cc3a9b69857d621e963725a24caeec873b826e64" - integrity sha1-zDqbaYV9Yh6WNyWiTK7shzuCbmQ= - -is-subset@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/is-subset/-/is-subset-0.1.1.tgz#8a59117d932de1de00f245fcdd39ce43f1e939a6" - integrity sha1-ilkRfZMt4d4A8kX83TnOQ/HpOaY= +is-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz#bde9c32680d6fae04129d6ac9d921ce7815f78e3" + integrity sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw== 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== + version "1.0.3" + resolved "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz#38e1014b9e6329be0de9d24a414fd7441ec61937" + integrity sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ== + dependencies: + has-symbols "^1.0.1" + +is-text-path@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/is-text-path/-/is-text-path-1.0.1.tgz#4e1aa0fb51bfbcb3e92688001397202c1775b66e" + integrity sha1-Thqg+1G/vLPpJogAE5cgLBd1tm4= dependencies: - has-symbols "^1.0.0" + text-extensions "^1.0.0" -is-typedarray@~1.0.0: +is-typedarray@^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" + resolved "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= -is-windows@^1.0.2: +is-utf8@^0.2.0: + version "0.2.1" + resolved "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" + integrity sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI= + +is-windows@^0.2.0: + version "0.2.0" + resolved "https://registry.npmjs.org/is-windows/-/is-windows-0.2.0.tgz#de1aa6d63ea29dd248737b69f1ff8b8002d2108c" + integrity sha1-3hqm1j6indJIc3tp8f+LgALSEIw= + +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" + resolved "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== is-wsl@^1.1.0: version "1.1.0" - resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d" + resolved "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d" integrity sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0= +is-wsl@^2.1.1: + version "2.2.0" + resolved "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271" + integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== + dependencies: + is-docker "^2.0.0" + 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: +isarray@1.0.0, isarray@~1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + resolved "https://registry.npmjs.org/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" + resolved "https://registry.npmjs.org/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" + resolved "https://registry.npmjs.org/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" + resolved "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8= isomorphic-fetch@^2.1.1: version "2.2.1" - resolved "https://registry.yarnpkg.com/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz#611ae1acf14f5e81f729507472819fe9733558a9" + resolved "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz#611ae1acf14f5e81f729507472819fe9733558a9" integrity sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk= dependencies: node-fetch "^1.0.1" @@ -4195,204 +6273,179 @@ isomorphic-fetch@^2.1.1: isstream@~0.1.2: version "0.1.2" - resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" + resolved "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo= -istanbul-api@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/istanbul-api/-/istanbul-api-2.1.1.tgz#194b773f6d9cbc99a9258446848b0f988951c4d0" - integrity sha512-kVmYrehiwyeBAk/wE71tW6emzLiHGjYIiDrc8sfyty4F8M02/lrgXSm+R1kXysmF20zArvmZXjlE/mg24TVPJw== - dependencies: - async "^2.6.1" - compare-versions "^3.2.1" - fileset "^2.0.3" - istanbul-lib-coverage "^2.0.3" - istanbul-lib-hook "^2.0.3" - istanbul-lib-instrument "^3.1.0" - istanbul-lib-report "^2.0.4" - istanbul-lib-source-maps "^3.0.2" - istanbul-reports "^2.1.1" - js-yaml "^3.12.0" - make-dir "^1.3.0" - minimatch "^3.0.4" - once "^1.4.0" - -istanbul-lib-coverage@^2.0.2, istanbul-lib-coverage@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz#0b891e5ad42312c2b9488554f603795f9a2211ba" - integrity sha512-dKWuzRGCs4G+67VfW9pBFFz2Jpi4vSp/k7zBcJ888ofV5Mi1g5CUML5GvMvV6u9Cjybftu+E8Cgp+k0dI1E5lw== - -istanbul-lib-hook@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/istanbul-lib-hook/-/istanbul-lib-hook-2.0.3.tgz#e0e581e461c611be5d0e5ef31c5f0109759916fb" - integrity sha512-CLmEqwEhuCYtGcpNVJjLV1DQyVnIqavMLFHV/DP+np/g3qvdxu3gsPqYoJMXm15sN84xOlckFB3VNvRbf5yEgA== - dependencies: - append-transform "^1.0.0" +istanbul-lib-coverage@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.0.0.tgz#f5944a37c70b550b02a78a5c3b2055b280cec8ec" + integrity sha512-UiUIqxMgRDET6eR+o5HbfRYP1l0hqkWOs7vNxC/mggutCMUIhWMm8gAHb8tHlyfD3/l6rlgNA5cKdDzEAf6hEg== -istanbul-lib-instrument@^3.0.0, istanbul-lib-instrument@^3.0.1, istanbul-lib-instrument@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-3.1.0.tgz#a2b5484a7d445f1f311e93190813fa56dfb62971" - integrity sha512-ooVllVGT38HIk8MxDj/OIHXSYvH+1tq/Vb38s8ixt9GoJadXska4WkGY+0wkmtYCZNYtaARniH/DixUGGLZ0uA== +istanbul-lib-instrument@^4.0.0: + version "4.0.3" + resolved "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz#873c6fff897450118222774696a3f28902d77c1d" + integrity sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ== dependencies: - "@babel/generator" "^7.0.0" - "@babel/parser" "^7.0.0" - "@babel/template" "^7.0.0" - "@babel/traverse" "^7.0.0" - "@babel/types" "^7.0.0" - istanbul-lib-coverage "^2.0.3" - semver "^5.5.0" + "@babel/core" "^7.7.5" + "@istanbuljs/schema" "^0.1.2" + istanbul-lib-coverage "^3.0.0" + semver "^6.3.0" -istanbul-lib-report@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-2.0.4.tgz#bfd324ee0c04f59119cb4f07dab157d09f24d7e4" - integrity sha512-sOiLZLAWpA0+3b5w5/dq0cjm2rrNdAfHWaGhmn7XEFW6X++IV9Ohn+pnELAl9K3rfpaeBfbmH9JU5sejacdLeA== +istanbul-lib-report@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#7518fe52ea44de372f460a76b5ecda9ffb73d8a6" + integrity sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw== dependencies: - istanbul-lib-coverage "^2.0.3" - make-dir "^1.3.0" - supports-color "^6.0.0" + istanbul-lib-coverage "^3.0.0" + make-dir "^3.0.0" + supports-color "^7.1.0" -istanbul-lib-source-maps@^3.0.1, istanbul-lib-source-maps@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-3.0.2.tgz#f1e817229a9146e8424a28e5d69ba220fda34156" - integrity sha512-JX4v0CiKTGp9fZPmoxpu9YEkPbEqCqBbO3403VabKjH+NRXo72HafD5UgnjTEqHL2SAjaZK1XDuDOkn6I5QVfQ== +istanbul-lib-source-maps@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.0.tgz#75743ce6d96bb86dc7ee4352cf6366a23f0b1ad9" + integrity sha512-c16LpFRkR8vQXyHZ5nLpY35JZtzj1PQY1iZmesUbf1FZHbIupcWfjgOXBY9YHkLEQ6puz1u4Dgj6qmU/DisrZg== dependencies: debug "^4.1.1" - istanbul-lib-coverage "^2.0.3" - make-dir "^1.3.0" - rimraf "^2.6.2" + istanbul-lib-coverage "^3.0.0" source-map "^0.6.1" -istanbul-reports@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-2.1.1.tgz#72ef16b4ecb9a4a7bd0e2001e00f95d1eec8afa9" - integrity sha512-FzNahnidyEPBCI0HcufJoSEoKykesRlFcSzQqjH9x0+LC8tnnE/p/90PBLu8iZTxr8yYZNyTtiAujUqyN+CIxw== - dependencies: - handlebars "^4.1.0" - -jest-changed-files@^24.5.0: - version "24.5.0" - resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-24.5.0.tgz#4075269ee115d87194fd5822e642af22133cf705" - integrity sha512-Ikl29dosYnTsH9pYa1Tv9POkILBhN/TLZ37xbzgNsZ1D2+2n+8oEZS2yP1BrHn/T4Rs4Ggwwbp/x8CKOS5YJOg== - dependencies: - "@jest/types" "^24.5.0" - execa "^1.0.0" - throat "^4.0.0" - -jest-cli@^24.1.0: - version "24.5.0" - resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-24.5.0.tgz#598139d3446d1942fb7dc93944b9ba766d756d4b" - integrity sha512-P+Jp0SLO4KWN0cGlNtC7JV0dW1eSFR7eRpoOucP2UM0sqlzp/bVHeo71Omonvigrj9AvCKy7NtQANtqJ7FXz8g== - dependencies: - "@jest/core" "^24.5.0" - "@jest/test-result" "^24.5.0" - "@jest/types" "^24.5.0" - chalk "^2.0.1" +istanbul-reports@^3.0.2: + version "3.0.2" + resolved "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.0.2.tgz#d593210e5000683750cb09fc0644e4b6e27fd53b" + integrity sha512-9tZvz7AiR3PEDNGiV9vIouQ/EAcqMXFmkcA1CDFTwOB98OZVDL0PH9glHotf5Ugp6GCOTypfzGWI/OqjWNCRUw== + dependencies: + html-escaper "^2.0.0" + istanbul-lib-report "^3.0.0" + +jest-changed-files@^25.5.0: + version "25.5.0" + resolved "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-25.5.0.tgz#141cc23567ceb3f534526f8614ba39421383634c" + integrity sha512-EOw9QEqapsDT7mKF162m8HFzRPbmP8qJQny6ldVOdOVBz3ACgPm/1nAn5fPQ/NDaYhX/AHkrGwwkCncpAVSXcw== + dependencies: + "@jest/types" "^25.5.0" + execa "^3.2.0" + throat "^5.0.0" + +jest-cli@^25.5.4: + version "25.5.4" + resolved "https://registry.npmjs.org/jest-cli/-/jest-cli-25.5.4.tgz#b9f1a84d1301a92c5c217684cb79840831db9f0d" + integrity sha512-rG8uJkIiOUpnREh1768/N3n27Cm+xPFkSNFO91tgg+8o2rXeVLStz+vkXkGr4UtzH6t1SNbjwoiswd7p4AhHTw== + dependencies: + "@jest/core" "^25.5.4" + "@jest/test-result" "^25.5.0" + "@jest/types" "^25.5.0" + chalk "^3.0.0" exit "^0.1.2" - import-local "^2.0.0" + graceful-fs "^4.2.4" + import-local "^3.0.2" is-ci "^2.0.0" - jest-config "^24.5.0" - jest-util "^24.5.0" - jest-validate "^24.5.0" + jest-config "^25.5.4" + jest-util "^25.5.0" + jest-validate "^25.5.0" prompts "^2.0.1" - realpath-native "^1.1.0" - yargs "^12.0.2" + realpath-native "^2.0.0" + yargs "^15.3.1" -jest-config@^24.5.0: - version "24.5.0" - resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-24.5.0.tgz#404d1bc6bb81aed6bd1890d07e2dca9fbba2e121" - integrity sha512-t2UTh0Z2uZhGBNVseF8wA2DS2SuBiLOL6qpLq18+OZGfFUxTM7BzUVKyHFN/vuN+s/aslY1COW95j1Rw81huOQ== +jest-config@^25.5.4: + version "25.5.4" + resolved "https://registry.npmjs.org/jest-config/-/jest-config-25.5.4.tgz#38e2057b3f976ef7309b2b2c8dcd2a708a67f02c" + integrity sha512-SZwR91SwcdK6bz7Gco8qL7YY2sx8tFJYzvg216DLihTWf+LKY/DoJXpM9nTzYakSyfblbqeU48p/p7Jzy05Atg== dependencies: "@babel/core" "^7.1.0" - "@jest/types" "^24.5.0" - babel-jest "^24.5.0" - chalk "^2.0.1" + "@jest/test-sequencer" "^25.5.4" + "@jest/types" "^25.5.0" + babel-jest "^25.5.1" + chalk "^3.0.0" + deepmerge "^4.2.2" glob "^7.1.1" - jest-environment-jsdom "^24.5.0" - jest-environment-node "^24.5.0" - jest-get-type "^24.3.0" - jest-jasmine2 "^24.5.0" - jest-regex-util "^24.3.0" - jest-resolve "^24.5.0" - jest-util "^24.5.0" - jest-validate "^24.5.0" - micromatch "^3.1.10" - pretty-format "^24.5.0" - realpath-native "^1.1.0" - -jest-diff@^23.6.0: - version "23.6.0" - resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-23.6.0.tgz#1500f3f16e850bb3d71233408089be099f610c7d" - integrity sha512-Gz9l5Ov+X3aL5L37IT+8hoCUsof1CVYBb2QEkOupK64XyRR3h+uRpYIm97K7sY8diFxowR8pIGEdyfMKTixo3g== - dependencies: - chalk "^2.0.1" - diff "^3.2.0" - jest-get-type "^22.1.0" - pretty-format "^23.6.0" - -jest-diff@^24.5.0: - version "24.5.0" - resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-24.5.0.tgz#a2d8627964bb06a91893c0fbcb28ab228c257652" - integrity sha512-mCILZd9r7zqL9Uh6yNoXjwGQx0/J43OD2vvWVKwOEOLZliQOsojXwqboubAQ+Tszrb6DHGmNU7m4whGeB9YOqw== - dependencies: - chalk "^2.0.1" - diff-sequences "^24.3.0" - jest-get-type "^24.3.0" - pretty-format "^24.5.0" - -jest-docblock@^24.3.0: - version "24.3.0" - resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-24.3.0.tgz#b9c32dac70f72e4464520d2ba4aec02ab14db5dd" - integrity sha512-nlANmF9Yq1dufhFlKG9rasfQlrY7wINJbo3q01tu56Jv5eBU5jirylhF2O5ZBnLxzOVBGRDz/9NAwNyBtG4Nyg== - dependencies: - detect-newline "^2.1.0" - -jest-each@^24.5.0: - version "24.5.0" - resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-24.5.0.tgz#da14d017a1b7d0f01fb458d338314cafe7f72318" - integrity sha512-6gy3Kh37PwIT5sNvNY2VchtIFOOBh8UCYnBlxXMb5sr5wpJUDPTUATX2Axq1Vfk+HWTMpsYPeVYp4TXx5uqUBw== + graceful-fs "^4.2.4" + jest-environment-jsdom "^25.5.0" + jest-environment-node "^25.5.0" + jest-get-type "^25.2.6" + jest-jasmine2 "^25.5.4" + jest-regex-util "^25.2.6" + jest-resolve "^25.5.1" + jest-util "^25.5.0" + jest-validate "^25.5.0" + micromatch "^4.0.2" + pretty-format "^25.5.0" + realpath-native "^2.0.0" + +jest-diff@^24.0.0, jest-diff@^24.3.0, jest-diff@^24.9.0: + version "24.9.0" + resolved "https://registry.npmjs.org/jest-diff/-/jest-diff-24.9.0.tgz#931b7d0d5778a1baf7452cb816e325e3724055da" + integrity sha512-qMfrTs8AdJE2iqrTp0hzh7kTd2PQWrsFyj9tORoKmu32xjPjeE4NyjVRDz8ybYwqS2ik8N4hsIpiVTyFeo2lBQ== dependencies: - "@jest/types" "^24.5.0" chalk "^2.0.1" - jest-get-type "^24.3.0" - jest-util "^24.5.0" - pretty-format "^24.5.0" - -jest-environment-jsdom@^24.5.0: - version "24.5.0" - resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-24.5.0.tgz#1c3143063e1374100f8c2723a8b6aad23b6db7eb" - integrity sha512-62Ih5HbdAWcsqBx2ktUnor/mABBo1U111AvZWcLKeWN/n/gc5ZvDBKe4Og44fQdHKiXClrNGC6G0mBo6wrPeGQ== - dependencies: - "@jest/environment" "^24.5.0" - "@jest/fake-timers" "^24.5.0" - "@jest/types" "^24.5.0" - jest-mock "^24.5.0" - jest-util "^24.5.0" - jsdom "^11.5.1" - -jest-environment-node@^24.5.0: - version "24.5.0" - resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-24.5.0.tgz#763eebdf529f75b60aa600c6cf8cb09873caa6ab" - integrity sha512-du6FuyWr/GbKLsmAbzNF9mpr2Iu2zWSaq/BNHzX+vgOcts9f2ayXBweS7RAhr+6bLp6qRpMB6utAMF5Ygktxnw== - dependencies: - "@jest/environment" "^24.5.0" - "@jest/fake-timers" "^24.5.0" - "@jest/types" "^24.5.0" - jest-mock "^24.5.0" - jest-util "^24.5.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" - integrity sha512-/jsz0Y+V29w1chdXVygEKSz2nBoHoYqNShPe+QgxSNjAuP1i8+k4LbQNrfoliKej0P45sivkSCh7yiD6ubHS3w== - -jest-get-type@^24.3.0: - version "24.3.0" - resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-24.3.0.tgz#582cfd1a4f91b5cdad1d43d2932f816d543c65da" - integrity sha512-HYF6pry72YUlVcvUx3sEpMRwXEWGEPlJ0bSPVnB3b3n++j4phUEoSPcS6GC0pPJ9rpyPSe4cb5muFo6D39cXow== + diff-sequences "^24.9.0" + jest-get-type "^24.9.0" + pretty-format "^24.9.0" + +jest-diff@^25.5.0: + version "25.5.0" + resolved "https://registry.npmjs.org/jest-diff/-/jest-diff-25.5.0.tgz#1dd26ed64f96667c068cef026b677dfa01afcfa9" + integrity sha512-z1kygetuPiREYdNIumRpAHY6RXiGmp70YHptjdaxTWGmA085W3iCnXNx0DhflK3vwrKmrRWyY1wUpkPMVxMK7A== + dependencies: + chalk "^3.0.0" + diff-sequences "^25.2.6" + jest-get-type "^25.2.6" + pretty-format "^25.5.0" + +jest-docblock@^25.3.0: + version "25.3.0" + resolved "https://registry.npmjs.org/jest-docblock/-/jest-docblock-25.3.0.tgz#8b777a27e3477cd77a168c05290c471a575623ef" + integrity sha512-aktF0kCar8+zxRHxQZwxMy70stc9R1mOmrLsT5VO3pIT0uzGRSDAXxSlz4NqQWpuLjPpuMhPRl7H+5FRsvIQAg== + dependencies: + detect-newline "^3.0.0" + +jest-each@^25.5.0: + version "25.5.0" + resolved "https://registry.npmjs.org/jest-each/-/jest-each-25.5.0.tgz#0c3c2797e8225cb7bec7e4d249dcd96b934be516" + integrity sha512-QBogUxna3D8vtiItvn54xXde7+vuzqRrEeaw8r1s+1TG9eZLVJE5ZkKoSUlqFwRjnlaA4hyKGiu9OlkFIuKnjA== + dependencies: + "@jest/types" "^25.5.0" + chalk "^3.0.0" + jest-get-type "^25.2.6" + jest-util "^25.5.0" + pretty-format "^25.5.0" + +jest-environment-jsdom@^25.5.0: + version "25.5.0" + resolved "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-25.5.0.tgz#dcbe4da2ea997707997040ecf6e2560aec4e9834" + integrity sha512-7Jr02ydaq4jaWMZLY+Skn8wL5nVIYpWvmeatOHL3tOcV3Zw8sjnPpx+ZdeBfc457p8jCR9J6YCc+Lga0oIy62A== + dependencies: + "@jest/environment" "^25.5.0" + "@jest/fake-timers" "^25.5.0" + "@jest/types" "^25.5.0" + jest-mock "^25.5.0" + jest-util "^25.5.0" + jsdom "^15.2.1" + +jest-environment-node@^25.5.0: + version "25.5.0" + resolved "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-25.5.0.tgz#0f55270d94804902988e64adca37c6ce0f7d07a1" + integrity sha512-iuxK6rQR2En9EID+2k+IBs5fCFd919gVVK5BeND82fYeLWPqvRcFNPKu9+gxTwfB5XwBGBvZ0HFQa+cHtIoslA== + dependencies: + "@jest/environment" "^25.5.0" + "@jest/fake-timers" "^25.5.0" + "@jest/types" "^25.5.0" + jest-mock "^25.5.0" + jest-util "^25.5.0" + semver "^6.3.0" + +jest-get-type@^24.9.0: + version "24.9.0" + resolved "https://registry.npmjs.org/jest-get-type/-/jest-get-type-24.9.0.tgz#1684a0c8a50f2e4901b6644ae861f579eed2ef0e" + integrity sha512-lUseMzAley4LhIcpSP9Jf+fTrQ4a1yHQwLNeeVa2cEmbCGeoZAtYPOIv8JaxLD/sUpKxetKGP+gsHl8f8TSj8Q== + +jest-get-type@^25.2.6: + version "25.2.6" + resolved "https://registry.npmjs.org/jest-get-type/-/jest-get-type-25.2.6.tgz#0b0a32fab8908b44d508be81681487dbabb8d877" + integrity sha512-DxjtyzOHjObRM+sM1knti6or+eOgcGU4xVSb2HNP1TqO4ahsT+rqZg+nyqHWJSvWgKC5cG3QjGFBqxLghiF/Ig== jest-haste-map@24.0.0-alpha.6: version "24.0.0-alpha.6" - resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-24.0.0-alpha.6.tgz#fb2c785080f391b923db51846b86840d0d773076" + resolved "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-24.0.0-alpha.6.tgz#fb2c785080f391b923db51846b86840d0d773076" integrity sha512-+NO2HMbjvrG8BC39ieLukdpFrcPhhjCJGhpbHodHNZygH1Tt06WrlNYGpZtWKx/zpf533tCtMQXO/q59JenjNw== dependencies: fb-watchman "^2.0.0" @@ -4403,204 +6456,258 @@ jest-haste-map@24.0.0-alpha.6: micromatch "^2.3.11" sane "^3.0.0" -jest-haste-map@^24.5.0: - version "24.5.0" - resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-24.5.0.tgz#3f17d0c548b99c0c96ed2893f9c0ccecb2eb9066" - integrity sha512-mb4Yrcjw9vBgSvobDwH8QUovxApdimGcOkp+V1ucGGw4Uvr3VzZQBJhNm1UY3dXYm4XXyTW2G7IBEZ9pM2ggRQ== +jest-haste-map@^25.5.1: + version "25.5.1" + resolved "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-25.5.1.tgz#1df10f716c1d94e60a1ebf7798c9fb3da2620943" + integrity sha512-dddgh9UZjV7SCDQUrQ+5t9yy8iEgKc1AKqZR9YDww8xsVOtzPQSMVLDChc21+g29oTRexb9/B0bIlZL+sWmvAQ== dependencies: - "@jest/types" "^24.5.0" + "@jest/types" "^25.5.0" + "@types/graceful-fs" "^4.1.2" + anymatch "^3.0.3" fb-watchman "^2.0.0" - graceful-fs "^4.1.15" - invariant "^2.2.4" - jest-serializer "^24.4.0" - jest-util "^24.5.0" - jest-worker "^24.4.0" - micromatch "^3.1.10" + graceful-fs "^4.2.4" + jest-serializer "^25.5.0" + jest-util "^25.5.0" + jest-worker "^25.5.0" + micromatch "^4.0.2" sane "^4.0.3" + walker "^1.0.7" + which "^2.0.2" + optionalDependencies: + fsevents "^2.1.2" -jest-jasmine2@^24.5.0: - version "24.5.0" - resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-24.5.0.tgz#e6af4d7f73dc527d007cca5a5b177c0bcc29d111" - integrity sha512-sfVrxVcx1rNUbBeyIyhkqZ4q+seNKyAG6iM0S2TYBdQsXjoFDdqWFfsUxb6uXSsbimbXX/NMkJIwUZ1uT9+/Aw== +jest-jasmine2@^25.5.4: + version "25.5.4" + resolved "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-25.5.4.tgz#66ca8b328fb1a3c5364816f8958f6970a8526968" + integrity sha512-9acbWEfbmS8UpdcfqnDO+uBUgKa/9hcRh983IHdM+pKmJPL77G0sWAAK0V0kr5LK3a8cSBfkFSoncXwQlRZfkQ== dependencies: "@babel/traverse" "^7.1.0" - "@jest/environment" "^24.5.0" - "@jest/test-result" "^24.5.0" - "@jest/types" "^24.5.0" - chalk "^2.0.1" + "@jest/environment" "^25.5.0" + "@jest/source-map" "^25.5.0" + "@jest/test-result" "^25.5.0" + "@jest/types" "^25.5.0" + chalk "^3.0.0" co "^4.6.0" - expect "^24.5.0" + expect "^25.5.0" is-generator-fn "^2.0.0" - jest-each "^24.5.0" - jest-matcher-utils "^24.5.0" - jest-message-util "^24.5.0" - jest-runtime "^24.5.0" - jest-snapshot "^24.5.0" - jest-util "^24.5.0" - pretty-format "^24.5.0" - throat "^4.0.0" - -jest-leak-detector@^24.5.0: - version "24.5.0" - resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-24.5.0.tgz#21ae2b3b0da252c1171cd494f75696d65fb6fa89" - integrity sha512-LZKBjGovFRx3cRBkqmIg+BZnxbrLqhQl09IziMk3oeh1OV81Hg30RUIx885mq8qBv1PA0comB9bjKcuyNO1bCQ== - dependencies: - pretty-format "^24.5.0" - -jest-matcher-utils@^24.5.0: - version "24.5.0" - resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-24.5.0.tgz#5995549dcf09fa94406e89526e877b094dad8770" - integrity sha512-QM1nmLROjLj8GMGzg5VBra3I9hLpjMPtF1YqzQS3rvWn2ltGZLrGAO1KQ9zUCVi5aCvrkbS5Ndm2evIP9yZg1Q== + jest-each "^25.5.0" + jest-matcher-utils "^25.5.0" + jest-message-util "^25.5.0" + jest-runtime "^25.5.4" + jest-snapshot "^25.5.1" + jest-util "^25.5.0" + pretty-format "^25.5.0" + throat "^5.0.0" + +jest-leak-detector@^25.5.0: + version "25.5.0" + resolved "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-25.5.0.tgz#2291c6294b0ce404241bb56fe60e2d0c3e34f0bb" + integrity sha512-rV7JdLsanS8OkdDpZtgBf61L5xZ4NnYLBq72r6ldxahJWWczZjXawRsoHyXzibM5ed7C2QRjpp6ypgwGdKyoVA== + dependencies: + jest-get-type "^25.2.6" + pretty-format "^25.5.0" + +jest-matcher-utils@^24.0.0: + version "24.9.0" + resolved "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-24.9.0.tgz#f5b3661d5e628dffe6dd65251dfdae0e87c3a073" + integrity sha512-OZz2IXsu6eaiMAwe67c1T+5tUAtQyQx27/EMEkbFAGiw52tB9em+uGbzpcgYVpA8wl0hlxKPZxrly4CXU/GjHA== dependencies: chalk "^2.0.1" - jest-diff "^24.5.0" - jest-get-type "^24.3.0" - pretty-format "^24.5.0" + jest-diff "^24.9.0" + jest-get-type "^24.9.0" + pretty-format "^24.9.0" -jest-message-util@^24.5.0: - version "24.5.0" - resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-24.5.0.tgz#181420a65a7ef2e8b5c2f8e14882c453c6d41d07" - integrity sha512-6ZYgdOojowCGiV0D8WdgctZEAe+EcFU+KrVds+0ZjvpZurUW2/oKJGltJ6FWY2joZwYXN5VL36GPV6pNVRqRnQ== +jest-matcher-utils@^25.5.0: + version "25.5.0" + resolved "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-25.5.0.tgz#fbc98a12d730e5d2453d7f1ed4a4d948e34b7867" + integrity sha512-VWI269+9JS5cpndnpCwm7dy7JtGQT30UHfrnM3mXl22gHGt/b7NkjBqXfbhZ8V4B7ANUsjK18PlSBmG0YH7gjw== + dependencies: + chalk "^3.0.0" + jest-diff "^25.5.0" + jest-get-type "^25.2.6" + pretty-format "^25.5.0" + +jest-message-util@^24.9.0: + version "24.9.0" + resolved "https://registry.npmjs.org/jest-message-util/-/jest-message-util-24.9.0.tgz#527f54a1e380f5e202a8d1149b0ec872f43119e3" + integrity sha512-oCj8FiZ3U0hTP4aSui87P4L4jC37BtQwUMqk+zk/b11FR19BJDeZsZAvIHutWnmtw7r85UmR3CEWZ0HWU2mAlw== dependencies: "@babel/code-frame" "^7.0.0" - "@jest/test-result" "^24.5.0" - "@jest/types" "^24.5.0" + "@jest/test-result" "^24.9.0" + "@jest/types" "^24.9.0" "@types/stack-utils" "^1.0.1" chalk "^2.0.1" micromatch "^3.1.10" slash "^2.0.0" stack-utils "^1.0.1" -jest-mock@^24.5.0: - version "24.5.0" - resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-24.5.0.tgz#976912c99a93f2a1c67497a9414aa4d9da4c7b76" - integrity sha512-ZnAtkWrKf48eERgAOiUxVoFavVBziO2pAi2MfZ1+bGXVkDfxWLxU0//oJBkgwbsv6OAmuLBz4XFFqvCFMqnGUw== +jest-message-util@^25.5.0: + version "25.5.0" + resolved "https://registry.npmjs.org/jest-message-util/-/jest-message-util-25.5.0.tgz#ea11d93204cc7ae97456e1d8716251185b8880ea" + integrity sha512-ezddz3YCT/LT0SKAmylVyWWIGYoKHOFOFXx3/nA4m794lfVUskMcwhip6vTgdVrOtYdjeQeis2ypzes9mZb4EA== + dependencies: + "@babel/code-frame" "^7.0.0" + "@jest/types" "^25.5.0" + "@types/stack-utils" "^1.0.1" + chalk "^3.0.0" + graceful-fs "^4.2.4" + micromatch "^4.0.2" + slash "^3.0.0" + stack-utils "^1.0.1" + +jest-mock@^24.9.0: + version "24.9.0" + resolved "https://registry.npmjs.org/jest-mock/-/jest-mock-24.9.0.tgz#c22835541ee379b908673ad51087a2185c13f1c6" + integrity sha512-3BEYN5WbSq9wd+SyLDES7AHnjH9A/ROBwmz7l2y+ol+NtSFO8DYiEBzoO1CeFc9a8DYy10EO4dDFVv/wN3zl1w== + dependencies: + "@jest/types" "^24.9.0" + +jest-mock@^25.5.0: + version "25.5.0" + resolved "https://registry.npmjs.org/jest-mock/-/jest-mock-25.5.0.tgz#a91a54dabd14e37ecd61665d6b6e06360a55387a" + integrity sha512-eXWuTV8mKzp/ovHc5+3USJMYsTBhyQ+5A1Mak35dey/RG8GlM4YWVylZuGgVXinaW6tpvk/RSecmF37FKUlpXA== dependencies: - "@jest/types" "^24.5.0" + "@jest/types" "^25.5.0" jest-pnp-resolver@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/jest-pnp-resolver/-/jest-pnp-resolver-1.2.1.tgz#ecdae604c077a7fbc70defb6d517c3c1c898923a" - integrity sha512-pgFw2tm54fzgYvc/OHrnysABEObZCUNFnhjoRjaVOCN8NYc032/gVjPaHD4Aq6ApkSieWtfKAFQtmDKAmhupnQ== + version "1.2.2" + resolved "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz#b704ac0ae028a89108a4d040b3f919dfddc8e33c" + integrity sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w== -jest-regex-util@^24.3.0: - version "24.3.0" - resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-24.3.0.tgz#d5a65f60be1ae3e310d5214a0307581995227b36" - integrity sha512-tXQR1NEOyGlfylyEjg1ImtScwMq8Oh3iJbGTjN7p0J23EuVX1MA8rwU69K4sLbCmwzgCUbVkm0FkSF9TdzOhtg== +jest-regex-util@^25.2.6: + version "25.2.6" + resolved "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-25.2.6.tgz#d847d38ba15d2118d3b06390056028d0f2fd3964" + integrity sha512-KQqf7a0NrtCkYmZZzodPftn7fL1cq3GQAFVMn5Hg8uKx/fIenLEobNanUxb7abQ1sjADHBseG/2FGpsv/wr+Qw== -jest-resolve-dependencies@^24.5.0: - version "24.5.0" - resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-24.5.0.tgz#1a0dae9cdd41349ca4a84148b3e78da2ba33fd4b" - integrity sha512-dRVM1D+gWrFfrq2vlL5P9P/i8kB4BOYqYf3S7xczZ+A6PC3SgXYSErX/ScW/469pWMboM1uAhgLF+39nXlirCQ== +jest-resolve-dependencies@^25.5.4: + version "25.5.4" + resolved "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-25.5.4.tgz#85501f53957c8e3be446e863a74777b5a17397a7" + integrity sha512-yFmbPd+DAQjJQg88HveObcGBA32nqNZ02fjYmtL16t1xw9bAttSn5UGRRhzMHIQbsep7znWvAvnD4kDqOFM0Uw== dependencies: - "@jest/types" "^24.5.0" - jest-regex-util "^24.3.0" - jest-snapshot "^24.5.0" + "@jest/types" "^25.5.0" + jest-regex-util "^25.2.6" + jest-snapshot "^25.5.1" -jest-resolve@^24.5.0: - version "24.5.0" - resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-24.5.0.tgz#8c16ba08f60a1616c3b1cd7afb24574f50a24d04" - integrity sha512-ZIfGqLX1Rg8xJpQqNjdoO8MuxHV1q/i2OO1hLXjgCWFWs5bsedS8UrOdgjUqqNae6DXA+pCyRmdcB7lQEEbXew== +jest-resolve@^25.5.1: + version "25.5.1" + resolved "https://registry.npmjs.org/jest-resolve/-/jest-resolve-25.5.1.tgz#0e6fbcfa7c26d2a5fe8f456088dc332a79266829" + integrity sha512-Hc09hYch5aWdtejsUZhA+vSzcotf7fajSlPA6EZPE1RmPBAD39XtJhvHWFStid58iit4IPDLI/Da4cwdDmAHiQ== dependencies: - "@jest/types" "^24.5.0" + "@jest/types" "^25.5.0" browser-resolve "^1.11.3" - chalk "^2.0.1" + chalk "^3.0.0" + graceful-fs "^4.2.4" jest-pnp-resolver "^1.2.1" - realpath-native "^1.1.0" - -jest-runner@^24.5.0: - version "24.5.0" - resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-24.5.0.tgz#9be26ece4fd4ab3dfb528b887523144b7c5ffca8" - integrity sha512-oqsiS9TkIZV5dVkD+GmbNfWBRPIvxqmlTQ+AQUJUQ07n+4xTSDc40r+aKBynHw9/tLzafC00DIbJjB2cOZdvMA== - dependencies: - "@jest/console" "^24.3.0" - "@jest/environment" "^24.5.0" - "@jest/test-result" "^24.5.0" - "@jest/types" "^24.5.0" - chalk "^2.4.2" + read-pkg-up "^7.0.1" + realpath-native "^2.0.0" + resolve "^1.17.0" + slash "^3.0.0" + +jest-runner@^25.5.4: + version "25.5.4" + resolved "https://registry.npmjs.org/jest-runner/-/jest-runner-25.5.4.tgz#ffec5df3875da5f5c878ae6d0a17b8e4ecd7c71d" + integrity sha512-V/2R7fKZo6blP8E9BL9vJ8aTU4TH2beuqGNxHbxi6t14XzTb+x90B3FRgdvuHm41GY8ch4xxvf0ATH4hdpjTqg== + dependencies: + "@jest/console" "^25.5.0" + "@jest/environment" "^25.5.0" + "@jest/test-result" "^25.5.0" + "@jest/types" "^25.5.0" + chalk "^3.0.0" exit "^0.1.2" - graceful-fs "^4.1.15" - jest-config "^24.5.0" - jest-docblock "^24.3.0" - jest-haste-map "^24.5.0" - jest-jasmine2 "^24.5.0" - jest-leak-detector "^24.5.0" - jest-message-util "^24.5.0" - jest-resolve "^24.5.0" - jest-runtime "^24.5.0" - jest-util "^24.5.0" - jest-worker "^24.4.0" + graceful-fs "^4.2.4" + jest-config "^25.5.4" + jest-docblock "^25.3.0" + jest-haste-map "^25.5.1" + jest-jasmine2 "^25.5.4" + jest-leak-detector "^25.5.0" + jest-message-util "^25.5.0" + jest-resolve "^25.5.1" + jest-runtime "^25.5.4" + jest-util "^25.5.0" + jest-worker "^25.5.0" source-map-support "^0.5.6" - throat "^4.0.0" - -jest-runtime@^24.5.0: - version "24.5.0" - resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-24.5.0.tgz#3a76e0bfef4db3896d5116e9e518be47ba771aa2" - integrity sha512-GTFHzfLdwpaeoDPilNpBrorlPoNZuZrwKKzKJs09vWwHo+9TOsIIuszK8cWOuKC7ss07aN1922Ge8fsGdsqCuw== - dependencies: - "@jest/console" "^24.3.0" - "@jest/environment" "^24.5.0" - "@jest/source-map" "^24.3.0" - "@jest/transform" "^24.5.0" - "@jest/types" "^24.5.0" - "@types/yargs" "^12.0.2" - chalk "^2.0.1" + throat "^5.0.0" + +jest-runtime@^25.5.4: + version "25.5.4" + resolved "https://registry.npmjs.org/jest-runtime/-/jest-runtime-25.5.4.tgz#dc981fe2cb2137abcd319e74ccae7f7eeffbfaab" + integrity sha512-RWTt8LeWh3GvjYtASH2eezkc8AehVoWKK20udV6n3/gC87wlTbE1kIA+opCvNWyyPeBs6ptYsc6nyHUb1GlUVQ== + dependencies: + "@jest/console" "^25.5.0" + "@jest/environment" "^25.5.0" + "@jest/globals" "^25.5.2" + "@jest/source-map" "^25.5.0" + "@jest/test-result" "^25.5.0" + "@jest/transform" "^25.5.1" + "@jest/types" "^25.5.0" + "@types/yargs" "^15.0.0" + chalk "^3.0.0" + collect-v8-coverage "^1.0.0" exit "^0.1.2" glob "^7.1.3" - graceful-fs "^4.1.15" - jest-config "^24.5.0" - jest-haste-map "^24.5.0" - jest-message-util "^24.5.0" - jest-mock "^24.5.0" - jest-regex-util "^24.3.0" - jest-resolve "^24.5.0" - jest-snapshot "^24.5.0" - jest-util "^24.5.0" - jest-validate "^24.5.0" - realpath-native "^1.1.0" - slash "^2.0.0" - strip-bom "^3.0.0" - yargs "^12.0.2" + graceful-fs "^4.2.4" + jest-config "^25.5.4" + jest-haste-map "^25.5.1" + jest-message-util "^25.5.0" + jest-mock "^25.5.0" + jest-regex-util "^25.2.6" + jest-resolve "^25.5.1" + jest-snapshot "^25.5.1" + jest-util "^25.5.0" + jest-validate "^25.5.0" + realpath-native "^2.0.0" + slash "^3.0.0" + strip-bom "^4.0.0" + yargs "^15.3.1" jest-serializer@24.0.0-alpha.6: version "24.0.0-alpha.6" - resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-24.0.0-alpha.6.tgz#27d2fee4b1a85698717a30c3ec2ab80767312597" + resolved "https://registry.npmjs.org/jest-serializer/-/jest-serializer-24.0.0-alpha.6.tgz#27d2fee4b1a85698717a30c3ec2ab80767312597" integrity sha512-IPA5T6/GhlE6dedSk7Cd7YfuORnYjN0VD5iJVFn1Q81RJjpj++Hen5kJbKcg547vXsQ1TddV15qOA/zeIfOCLw== -jest-serializer@^24.0.0-alpha.6, jest-serializer@^24.4.0: - version "24.4.0" - resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-24.4.0.tgz#f70c5918c8ea9235ccb1276d232e459080588db3" - integrity sha512-k//0DtglVstc1fv+GY/VHDIjrtNjdYvYjMlbLUed4kxrE92sIUewOi5Hj3vrpB8CXfkJntRPDRjCrCvUhBdL8Q== +jest-serializer@^24.0.0-alpha.6: + version "24.9.0" + resolved "https://registry.npmjs.org/jest-serializer/-/jest-serializer-24.9.0.tgz#e6d7d7ef96d31e8b9079a714754c5d5c58288e73" + integrity sha512-DxYipDr8OvfrKH3Kel6NdED3OXxjvxXZ1uIY2I9OFbGg+vUkkg7AGvi65qbhbWNPvDckXmzMPbK3u3HaDO49bQ== -jest-snapshot@^24.5.0: - version "24.5.0" - resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-24.5.0.tgz#e5d224468a759fd19e36f01217aac912f500f779" - integrity sha512-eBEeJb5ROk0NcpodmSKnCVgMOo+Qsu5z9EDl3tGffwPzK1yV37mjGWF2YeIz1NkntgTzP+fUL4s09a0+0dpVWA== +jest-serializer@^25.5.0: + version "25.5.0" + resolved "https://registry.npmjs.org/jest-serializer/-/jest-serializer-25.5.0.tgz#a993f484e769b4ed54e70e0efdb74007f503072b" + integrity sha512-LxD8fY1lByomEPflwur9o4e2a5twSQ7TaVNLlFUuToIdoJuBt8tzHfCsZ42Ok6LkKXWzFWf3AGmheuLAA7LcCA== dependencies: - "@babel/types" "^7.0.0" - "@jest/types" "^24.5.0" - chalk "^2.0.1" - expect "^24.5.0" - jest-diff "^24.5.0" - jest-matcher-utils "^24.5.0" - jest-message-util "^24.5.0" - jest-resolve "^24.5.0" - mkdirp "^0.5.1" - natural-compare "^1.4.0" - pretty-format "^24.5.0" - semver "^5.5.0" + graceful-fs "^4.2.4" -jest-util@^24.5.0: - version "24.5.0" - resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-24.5.0.tgz#9d9cb06d9dcccc8e7cc76df91b1635025d7baa84" - integrity sha512-Xy8JsD0jvBz85K7VsTIQDuY44s+hYJyppAhcsHsOsGisVtdhar6fajf2UOf2mEVEgh15ZSdA0zkCuheN8cbr1Q== +jest-snapshot@^25.5.1: + version "25.5.1" + resolved "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-25.5.1.tgz#1a2a576491f9961eb8d00c2e5fd479bc28e5ff7f" + integrity sha512-C02JE1TUe64p2v1auUJ2ze5vcuv32tkv9PyhEb318e8XOKF7MOyXdJ7kdjbvrp3ChPLU2usI7Rjxs97Dj5P0uQ== dependencies: - "@jest/console" "^24.3.0" - "@jest/fake-timers" "^24.5.0" - "@jest/source-map" "^24.3.0" - "@jest/test-result" "^24.5.0" - "@jest/types" "^24.5.0" - "@types/node" "*" + "@babel/types" "^7.0.0" + "@jest/types" "^25.5.0" + "@types/prettier" "^1.19.0" + chalk "^3.0.0" + expect "^25.5.0" + graceful-fs "^4.2.4" + jest-diff "^25.5.0" + jest-get-type "^25.2.6" + jest-matcher-utils "^25.5.0" + jest-message-util "^25.5.0" + jest-resolve "^25.5.1" + make-dir "^3.0.0" + natural-compare "^1.4.0" + pretty-format "^25.5.0" + semver "^6.3.0" + +jest-util@^24.9.0: + version "24.9.0" + resolved "https://registry.npmjs.org/jest-util/-/jest-util-24.9.0.tgz#7396814e48536d2e85a37de3e4c431d7cb140162" + integrity sha512-x+cZU8VRmOJxbA1K5oDBdxQmdq0OIdADarLxk0Mq+3XS4jgvhG/oKGWcIDCtPG0HgjxOYvF+ilPJQsAyXfbNOg== + dependencies: + "@jest/console" "^24.9.0" + "@jest/fake-timers" "^24.9.0" + "@jest/source-map" "^24.9.0" + "@jest/test-result" "^24.9.0" + "@jest/types" "^24.9.0" callsites "^3.0.0" chalk "^2.0.1" graceful-fs "^4.1.15" @@ -4609,69 +6716,111 @@ jest-util@^24.5.0: slash "^2.0.0" source-map "^0.6.0" -jest-validate@^24.5.0: - version "24.5.0" - resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-24.5.0.tgz#62fd93d81214c070bb2d7a55f329a79d8057c7de" - integrity sha512-gg0dYszxjgK2o11unSIJhkOFZqNRQbWOAB2/LOUdsd2LfD9oXiMeuee8XsT0iRy5EvSccBgB4h/9HRbIo3MHgQ== +jest-util@^25.5.0: + version "25.5.0" + resolved "https://registry.npmjs.org/jest-util/-/jest-util-25.5.0.tgz#31c63b5d6e901274d264a4fec849230aa3fa35b0" + integrity sha512-KVlX+WWg1zUTB9ktvhsg2PXZVdkI1NBevOJSkTKYAyXyH4QSvh+Lay/e/v+bmaFfrkfx43xD8QTfgobzlEXdIA== dependencies: - "@jest/types" "^24.5.0" - camelcase "^5.0.0" - chalk "^2.0.1" - jest-get-type "^24.3.0" - leven "^2.1.0" - pretty-format "^24.5.0" + "@jest/types" "^25.5.0" + chalk "^3.0.0" + graceful-fs "^4.2.4" + is-ci "^2.0.0" + make-dir "^3.0.0" -jest-watcher@^24.5.0: - version "24.5.0" - resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-24.5.0.tgz#da7bd9cb5967e274889b42078c8f501ae1c47761" - integrity sha512-/hCpgR6bg0nKvD3nv4KasdTxuhwfViVMHUATJlnGCD0r1QrmIssimPbmc5KfAQblAVxkD8xrzuij9vfPUk1/rA== +jest-validate@^25.5.0: + version "25.5.0" + resolved "https://registry.npmjs.org/jest-validate/-/jest-validate-25.5.0.tgz#fb4c93f332c2e4cf70151a628e58a35e459a413a" + integrity sha512-okUFKqhZIpo3jDdtUXUZ2LxGUZJIlfdYBvZb1aczzxrlyMlqdnnws9MOxezoLGhSaFc2XYaHNReNQfj5zPIWyQ== dependencies: - "@jest/test-result" "^24.5.0" - "@jest/types" "^24.5.0" - "@types/node" "*" - "@types/yargs" "^12.0.9" + "@jest/types" "^25.5.0" + camelcase "^5.3.1" + chalk "^3.0.0" + jest-get-type "^25.2.6" + leven "^3.1.0" + pretty-format "^25.5.0" + +jest-watch-typeahead@^0.3.1: + version "0.3.1" + resolved "https://registry.npmjs.org/jest-watch-typeahead/-/jest-watch-typeahead-0.3.1.tgz#47701024b64b444aa325d801b4b3a6d61ed70701" + integrity sha512-cDIko96c4Yqg/7mfye1eEYZ6Pvugo9mnOOhGQod3Es7/KptNv1b+9gFVaotzdqNqTlwbkA80BnWHtzV4dc+trA== + dependencies: + ansi-escapes "^3.0.0" + chalk "^2.4.1" + jest-watcher "^24.3.0" + slash "^2.0.0" + string-length "^2.0.0" + strip-ansi "^5.0.0" + +jest-watcher@^24.3.0: + version "24.9.0" + resolved "https://registry.npmjs.org/jest-watcher/-/jest-watcher-24.9.0.tgz#4b56e5d1ceff005f5b88e528dc9afc8dd4ed2b3b" + integrity sha512-+/fLOfKPXXYJDYlks62/4R4GoT+GU1tYZed99JSCOsmzkkF7727RqKrjNAxtfO4YpGv11wybgRvCjR73lK2GZw== + dependencies: + "@jest/test-result" "^24.9.0" + "@jest/types" "^24.9.0" + "@types/yargs" "^13.0.0" ansi-escapes "^3.0.0" chalk "^2.0.1" - jest-util "^24.5.0" + jest-util "^24.9.0" string-length "^2.0.0" +jest-watcher@^25.5.0: + version "25.5.0" + resolved "https://registry.npmjs.org/jest-watcher/-/jest-watcher-25.5.0.tgz#d6110d101df98badebe435003956fd4a465e8456" + integrity sha512-XrSfJnVASEl+5+bb51V0Q7WQx65dTSk7NL4yDdVjPnRNpM0hG+ncFmDYJo9O8jaSRcAitVbuVawyXCRoxGrT5Q== + dependencies: + "@jest/test-result" "^25.5.0" + "@jest/types" "^25.5.0" + ansi-escapes "^4.2.1" + chalk "^3.0.0" + jest-util "^25.5.0" + string-length "^3.1.0" + jest-worker@24.0.0-alpha.6: version "24.0.0-alpha.6" - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-24.0.0-alpha.6.tgz#463681b92c117c57107135c14b9b9d6cd51d80ce" + resolved "https://registry.npmjs.org/jest-worker/-/jest-worker-24.0.0-alpha.6.tgz#463681b92c117c57107135c14b9b9d6cd51d80ce" integrity sha512-iXtH7MR9bjWlNnlnRBcrBRrb4cSVxML96La5vsnmBvDI+mJnkP5uEt6Fgpo5Y8f3z9y2Rd7wuPnKRxqQsiU/dA== dependencies: merge-stream "^1.0.1" -jest-worker@^24.0.0, jest-worker@^24.0.0-alpha.6, jest-worker@^24.4.0: - version "24.4.0" - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-24.4.0.tgz#fbc452b0120bb5c2a70cdc88fa132b48eeb11dd0" - integrity sha512-BH9X/klG9vxwoO99ZBUbZFfV8qO0XNZ5SIiCyYK2zOuJBl6YJVAeNIQjcoOVNu4HGEHeYEKsUWws8kSlSbZ9YQ== +jest-worker@^24.0.0-alpha.6: + version "24.9.0" + resolved "https://registry.npmjs.org/jest-worker/-/jest-worker-24.9.0.tgz#5dbfdb5b2d322e98567898238a9697bcce67b3e5" + integrity sha512-51PE4haMSXcHohnSMdM42anbvZANYTqMrr52tVKPqqsPJMzoP6FYYDVqahX/HrAoKEKz3uUPzSvKs9A3qR4iVw== dependencies: - "@types/node" "*" - merge-stream "^1.0.1" + merge-stream "^2.0.0" supports-color "^6.1.0" -jest@24.1.0: - version "24.1.0" - resolved "https://registry.yarnpkg.com/jest/-/jest-24.1.0.tgz#b1e1135caefcf2397950ecf7f90e395fde866fd2" - integrity sha512-+q91L65kypqklvlRFfXfdzUKyngQLOcwGhXQaLmVHv+d09LkNXuBuGxlofTFW42XMzu3giIcChchTsCNUjQ78A== +jest-worker@^25.5.0: + version "25.5.0" + resolved "https://registry.npmjs.org/jest-worker/-/jest-worker-25.5.0.tgz#2611d071b79cea0f43ee57a3d118593ac1547db1" + integrity sha512-/dsSmUkIy5EBGfv/IjjqmFxrNAUpBERfGs1oHROyD7yxjG/w+t0GOJDX8O1k32ySmd7+a5IhnJU2qQFcJ4n1vw== dependencies: - import-local "^2.0.0" - jest-cli "^24.1.0" + merge-stream "^2.0.0" + supports-color "^7.0.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== +jest@^25.1.0: + version "25.5.4" + resolved "https://registry.npmjs.org/jest/-/jest-25.5.4.tgz#f21107b6489cfe32b076ce2adcadee3587acb9db" + integrity sha512-hHFJROBTqZahnO+X+PMtT6G2/ztqAZJveGqz//FnWWHurizkD05PQGzRZOhF3XP6z7SJmL+5tCfW8qV06JypwQ== + dependencies: + "@jest/core" "^25.5.4" + import-local "^3.0.2" + jest-cli "^25.5.4" + +joycon@^2.2.5: + version "2.2.5" + resolved "https://registry.npmjs.org/joycon/-/joycon-2.2.5.tgz#8d4cf4cbb2544d7b7583c216fcdfec19f6be1615" + integrity sha512-YqvUxoOcVPnCp0VU1/56f+iKSdvIRJYPznH22BdXV3xMk75SFXhWeJkZ8C9XxUWt1b5x2X1SxuFygW1U0FmkEQ== "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" + resolved "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== -js-yaml@^3.12.0, js-yaml@^3.13.0: +js-yaml@^3.13.1: version "3.14.1" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" + resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== dependencies: argparse "^1.0.7" @@ -4679,112 +6828,126 @@ js-yaml@^3.12.0, js-yaml@^3.13.0: jsbn@~0.1.0: version "0.1.1" - resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" + resolved "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM= -jsdom@^11.5.1: - version "11.12.0" - resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-11.12.0.tgz#1a80d40ddd378a1de59656e9e6dc5a3ba8657bc8" - integrity sha512-y8Px43oyiBM13Zc1z780FrfNLJCXTL40EWlty/LXUtcjykRBNgLlCjWXpfSPBl2iv+N7koQN+dvqszHZgT/Fjw== +jsdom@^15.2.1: + version "15.2.1" + resolved "https://registry.npmjs.org/jsdom/-/jsdom-15.2.1.tgz#d2feb1aef7183f86be521b8c6833ff5296d07ec5" + integrity sha512-fAl1W0/7T2G5vURSyxBzrJ1LSdQn6Tr5UX/xD4PXDx/PDgwygedfW6El/KIj3xJ7FU61TTYnc/l/B7P49Eqt6g== dependencies: abab "^2.0.0" - acorn "^5.5.3" - acorn-globals "^4.1.0" + acorn "^7.1.0" + acorn-globals "^4.3.2" array-equal "^1.0.0" - cssom ">= 0.3.2 < 0.4.0" - cssstyle "^1.0.0" - data-urls "^1.0.0" + cssom "^0.4.1" + cssstyle "^2.0.0" + data-urls "^1.1.0" domexception "^1.0.1" - escodegen "^1.9.1" + escodegen "^1.11.1" html-encoding-sniffer "^1.0.2" - left-pad "^1.3.0" - nwsapi "^2.0.7" - parse5 "4.0.0" + nwsapi "^2.2.0" + parse5 "5.1.0" pn "^1.1.0" - request "^2.87.0" - request-promise-native "^1.0.5" - sax "^1.2.4" + request "^2.88.0" + request-promise-native "^1.0.7" + saxes "^3.1.9" symbol-tree "^3.2.2" - tough-cookie "^2.3.4" + tough-cookie "^3.0.1" w3c-hr-time "^1.0.1" + w3c-xmlserializer "^1.1.2" webidl-conversions "^4.0.2" - whatwg-encoding "^1.0.3" - whatwg-mimetype "^2.1.0" - whatwg-url "^6.4.1" - ws "^5.2.0" + whatwg-encoding "^1.0.5" + whatwg-mimetype "^2.3.0" + whatwg-url "^7.0.0" + ws "^7.0.0" xml-name-validator "^3.0.0" jsesc@^2.5.1: version "2.5.2" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" + resolved "https://registry.npmjs.org/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" + resolved "https://registry.npmjs.org/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: +json-parse-better-errors@^1.0.0, 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" + resolved "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== +json-parse-even-better-errors@^2.3.0: + version "2.3.1" + resolved "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" + integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== + 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" + resolved "https://registry.npmjs.org/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" + resolved "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" integrity sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM= 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" + resolved "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz#9a759d39c5f2ff503fd5300646ed445f88c4f9af" integrity sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8= dependencies: jsonify "~0.0.0" -json-stringify-safe@~5.0.1: +json-stringify-safe@^5.0.1, json-stringify-safe@~5.0.1: version "5.0.1" - resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" + resolved "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= -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== +json5@^2.1.2: + version "2.1.3" + resolved "https://registry.npmjs.org/json5/-/json5-2.1.3.tgz#c9b0f7fa9233bfe5807fe66fcf3a5617ed597d43" + integrity sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA== dependencies: - minimist "^1.2.0" - -json@9.0.6: - version "9.0.6" - resolved "https://registry.yarnpkg.com/json/-/json-9.0.6.tgz#7972c2a5a48a42678db2730c7c2c4ee6e4e24585" - integrity sha1-eXLCpaSKQmeNsnMMfCxO5uTiRYU= + minimist "^1.2.5" jsonfile@^2.1.0: version "2.4.0" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-2.4.0.tgz#3736a2b428b87bbda0cc83b53fa3d633a35c2ae8" + resolved "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz#3736a2b428b87bbda0cc83b53fa3d633a35c2ae8" integrity sha1-NzaitCi4e72gzIO1P6PWM6NcKug= optionalDependencies: graceful-fs "^4.1.6" +jsonfile@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" + integrity sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss= + optionalDependencies: + graceful-fs "^4.1.6" + +jsonfile@^6.0.1: + version "6.1.0" + resolved "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" + integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== + dependencies: + universalify "^2.0.0" + 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" + resolved "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73" integrity sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM= +jsonparse@^1.2.0: + version "1.3.1" + resolved "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280" + integrity sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA= + jsprim@^1.2.2: version "1.4.1" - resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" + resolved "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" integrity sha1-MT5mvB5cwG5Di8G3SZwuXFastqI= dependencies: assert-plus "1.0.0" @@ -4794,85 +6957,119 @@ jsprim@^1.2.2: kind-of@^1.1.0: version "1.1.0" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-1.1.0.tgz#140a3d2d41a36d2efcfa9377b62c24f8495a5c44" + resolved "https://registry.npmjs.org/kind-of/-/kind-of-1.1.0.tgz#140a3d2d41a36d2efcfa9377b62c24f8495a5c44" integrity sha1-FAo9LUGjbS78+pN3tiwk+ElaXEQ= 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" + resolved "https://registry.npmjs.org/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" + resolved "https://registry.npmjs.org/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" + resolved "https://registry.npmjs.org/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== +kind-of@^6.0.0, kind-of@^6.0.2, kind-of@^6.0.3: + version "6.0.3" + resolved "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" + integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== klaw@^1.0.0: version "1.3.1" - resolved "https://registry.yarnpkg.com/klaw/-/klaw-1.3.1.tgz#4088433b46b3b1ba259d78785d8e96f73ba02439" + resolved "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz#4088433b46b3b1ba259d78785d8e96f73ba02439" integrity sha1-QIhDO0azsbolnXh4XY6W9zugJDk= optionalDependencies: graceful-fs "^4.1.9" -kleur@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.2.tgz#83c7ec858a41098b613d5998a7b653962b504f68" - integrity sha512-3h7B2WRT5LNXOtQiAaWonilegHcPSf9nLVXlSTci8lu1dZUuui61+EsPEZqSVxY7rXYmB2DVKMQILxaO5WL61Q== +kleur@^3.0.3: + version "3.0.3" + resolved "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" + integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== -konva@^2.6.0: +konva@~2.6.0: version "2.6.0" - resolved "https://registry.yarnpkg.com/konva/-/konva-2.6.0.tgz#43165b95e32a4378ce532d9113c914f4998409c3" + resolved "https://registry.npmjs.org/konva/-/konva-2.6.0.tgz#43165b95e32a4378ce532d9113c914f4998409c3" integrity sha512-LCOoavICTD9PYoAqtWo8sbxYtCiXdgEeY7vj/Sq8b2bwFmrQr9Ak0RkD4/jxAf5fcUQRL5e1zPLyfRpVndp20A== lcid@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835" + resolved "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835" integrity sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU= 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" + resolved "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz#6ef5d2df60e52f82eb228a4c373e8d1f397253cf" integrity sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA== 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" - integrity sha512-XI5MPzVNApjAyhQzphX8BkmKsKUxD4LdyK24iZeQGinBN9yTQT3bFlCBy/aVx2HrNcqQGsdot8ghrjyrvMCoEA== - -leven@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/leven/-/leven-2.1.0.tgz#c2e7a9f772094dee9d34202ae8acce4687875580" - integrity sha1-wuep93IJTe6dNCAq6KzORoeHVYA= +lerna@3.15.0: + version "3.15.0" + resolved "https://registry.npmjs.org/lerna/-/lerna-3.15.0.tgz#b044dba8138d7a1a8dd48ac1d80e7541bdde0d1f" + integrity sha512-kRIQ3bgzkmew5/WZQ0C9WjH0IUf3ZmTNnBwTHfXgLkVY7td0lbwMQFD7zehflUn0zG4ou54o/gn+IfjF0ti/5A== + dependencies: + "@lerna/add" "3.15.0" + "@lerna/bootstrap" "3.15.0" + "@lerna/changed" "3.15.0" + "@lerna/clean" "3.15.0" + "@lerna/cli" "3.13.0" + "@lerna/create" "3.15.0" + "@lerna/diff" "3.15.0" + "@lerna/exec" "3.15.0" + "@lerna/import" "3.15.0" + "@lerna/init" "3.15.0" + "@lerna/link" "3.15.0" + "@lerna/list" "3.15.0" + "@lerna/publish" "3.15.0" + "@lerna/run" "3.15.0" + "@lerna/version" "3.15.0" + import-local "^1.0.0" + npmlog "^4.1.2" + +leven@^3.1.0: + version "3.1.0" + resolved "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" + integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A== levn@~0.3.0: version "0.3.0" - resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" + resolved "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" integrity sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4= dependencies: prelude-ls "~1.1.2" type-check "~0.3.2" +lines-and-columns@^1.1.6: + version "1.1.6" + resolved "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz#1c00c743b433cd0a4e80758f7b64a57440d9ff00" + integrity sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA= + +load-json-file@^1.0.0: + version "1.1.0" + resolved "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0" + integrity sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA= + 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" + resolved "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz#7947e42149af80d696cbf797bcaabcfe1fe29ca8" integrity sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg= dependencies: graceful-fs "^4.1.2" @@ -4882,7 +7079,7 @@ load-json-file@^2.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" + resolved "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz#2f5f45ab91e33216234fd53adab668eb4ec0993b" integrity sha1-L19Fq5HjMhYjT9U62rZo607AmTs= dependencies: graceful-fs "^4.1.2" @@ -4890,23 +7087,9 @@ load-json-file@^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.1.0: - 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" + resolved "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" integrity sha1-K1aLJl7slExtnA3pw9u7ygNUzY4= dependencies: p-locate "^2.0.0" @@ -4914,67 +7097,144 @@ locate-path@^2.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" + resolved "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A== dependencies: p-locate "^3.0.0" path-exists "^3.0.0" -lodash.escape@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/lodash.escape/-/lodash.escape-4.0.1.tgz#c9044690c21e04294beaa517712fded1fa88de98" - integrity sha1-yQRGkMIeBClL6qUXcS/e0fqI3pg= +locate-path@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" + integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== + dependencies: + p-locate "^4.1.0" -lodash.flattendeep@^4.4.0: - version "4.4.0" - resolved "https://registry.yarnpkg.com/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz#fb030917f86a3134e5bc9bec0d69e0013ddfedb2" - integrity sha1-+wMJF/hqMTTlvJvsDWngAT3f7bI= +locate-path@^6.0.0: + version "6.0.0" + resolved "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" + integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== + dependencies: + p-locate "^5.0.0" + +lodash-es@^4.17.11: + version "4.17.15" + resolved "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.15.tgz#21bd96839354412f23d7a10340e5eac6ee455d78" + integrity sha512-rlrc3yU3+JNOpZ9zj5pQtxnx2THmvRykwL4Xlxoa8I9lHBlVbbyPhgyPMioxVZ4NqyxaVVtaJnzsyOidQIhyyQ== + +lodash._reinterpolate@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz#0ccf2d89166af03b3663c796538b75ac6e114d9d" + integrity sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0= -lodash.isequal@^4.5.0: +lodash.clonedeep@^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= + resolved "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef" + integrity sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8= + +lodash.get@^4.4.2: + version "4.4.2" + resolved "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz#2d177f652fa31e939b4438d5341499dfa3825e99" + integrity sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk= + +lodash.ismatch@^4.4.0: + version "4.4.0" + resolved "https://registry.npmjs.org/lodash.ismatch/-/lodash.ismatch-4.4.0.tgz#756cb5150ca3ba6f11085a78849645f188f85f37" + integrity sha1-dWy1FQyjum8RCFp4hJZF8Yj4Xzc= lodash.pad@^4.1.0: version "4.5.1" - resolved "https://registry.yarnpkg.com/lodash.pad/-/lodash.pad-4.5.1.tgz#4330949a833a7c8da22cc20f6a26c4d59debba70" + resolved "https://registry.npmjs.org/lodash.pad/-/lodash.pad-4.5.1.tgz#4330949a833a7c8da22cc20f6a26c4d59debba70" integrity sha1-QzCUmoM6fI2iLMIPaibE1Z3runA= lodash.padend@^4.1.0: version "4.6.1" - resolved "https://registry.yarnpkg.com/lodash.padend/-/lodash.padend-4.6.1.tgz#53ccba047d06e158d311f45da625f4e49e6f166e" + resolved "https://registry.npmjs.org/lodash.padend/-/lodash.padend-4.6.1.tgz#53ccba047d06e158d311f45da625f4e49e6f166e" integrity sha1-U8y6BH0G4VjTEfRdpiX05J5vFm4= lodash.padstart@^4.1.0: version "4.6.1" - resolved "https://registry.yarnpkg.com/lodash.padstart/-/lodash.padstart-4.6.1.tgz#d2e3eebff0d9d39ad50f5cbd1b52a7bce6bb611b" + resolved "https://registry.npmjs.org/lodash.padstart/-/lodash.padstart-4.6.1.tgz#d2e3eebff0d9d39ad50f5cbd1b52a7bce6bb611b" integrity sha1-0uPuv/DZ05rVD1y9G1KnvOa7YRs= +lodash.set@^4.3.2: + version "4.3.2" + resolved "https://registry.npmjs.org/lodash.set/-/lodash.set-4.3.2.tgz#d8757b1da807dde24816b0d6a84bea1a76230b23" + integrity sha1-2HV7HagH3eJIFrDWqEvqGnYjCyM= + lodash.sortby@^4.7.0: version "4.7.0" - resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" + resolved "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" integrity sha1-7dFMgk4sycHgsKG0K7UhBRakJDg= +lodash.template@^4.0.2: + version "4.5.0" + resolved "https://registry.npmjs.org/lodash.template/-/lodash.template-4.5.0.tgz#f976195cf3f347d0d5f52483569fe8031ccce8ab" + integrity sha512-84vYFxIkmidUiFxidA/KjjH9pAycqW+h980j7Fuz5qxRtO9pgB7MDFTdys1N7A5mcucRiDyEq4fusljItR1T/A== + dependencies: + lodash._reinterpolate "^3.0.0" + lodash.templatesettings "^4.0.0" + +lodash.templatesettings@^4.0.0: + version "4.2.0" + resolved "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-4.2.0.tgz#e481310f049d3cf6d47e912ad09313b154f0fb33" + integrity sha512-stgLz+i3Aa9mZgnjr/O+v9ruKZsPsndy7qPZOchbqk2cnTU1ZaldKK+v7m54WoKIyxiuMZTKT2H81F8BeAc3ZQ== + dependencies: + lodash._reinterpolate "^3.0.0" + lodash.throttle@^4.1.1: version "4.1.1" - resolved "https://registry.yarnpkg.com/lodash.throttle/-/lodash.throttle-4.1.1.tgz#c23e91b710242ac70c37f1e1cda9274cc39bf2f4" + resolved "https://registry.npmjs.org/lodash.throttle/-/lodash.throttle-4.1.1.tgz#c23e91b710242ac70c37f1e1cda9274cc39bf2f4" integrity sha1-wj6RtxAkKscMN/HhzaknTMOb8vQ= -lodash@^4.15.0, lodash@^4.17.10, lodash@^4.17.11, lodash@^4.17.5, lodash@^4.3.0, lodash@^4.6.1: - version "4.17.21" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" - integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== +lodash.uniq@^4.5.0: + version "4.5.0" + resolved "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" + integrity sha1-0CJTc662Uq3BvILklFM5qEJ1R3M= + +lodash@^4.17.11, lodash@^4.17.12, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.2, lodash@^4.17.5, lodash@^4.2.1, lodash@^4.3.0, lodash@^4.6.1: + version "4.17.20" + resolved "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz#b44a9b6297bcb698f1c51a3545a2b3b368d59c52" + integrity sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA== + +lolex@^5.0.0: + version "5.1.2" + resolved "https://registry.npmjs.org/lolex/-/lolex-5.1.2.tgz#953694d098ce7c07bc5ed6d0e42bc6c0c6d5a367" + integrity sha512-h4hmjAvHTmd+25JSwrtTIuwbKdwg5NzZVRMLn9saij4SZaepCrTCxPr35H/3bjwfMJtN+t3CX8672UIkglz28A== + dependencies: + "@sinonjs/commons" "^1.7.0" + +loop@^3.0.6, loop@^3.3.2: + version "3.3.4" + resolved "https://registry.npmjs.org/loop/-/loop-3.3.4.tgz#d9bdbefed4aa06f6d2145bc10e9ddbbaa4e107fd" + integrity sha512-P/NEft7c1ouZyseLv4Q3/q23Rvu9EIB7eXfiyZrg6DmNTTpg/YVXCd0ove2LnhXpV646/XqEPVP3j8aOtr8yHA== + dependencies: + async "^3.0.0" + chalk "^3.0.0" + debug "^4.1.0" + lodash "^4.17.2" + meta-exec "^1.4.1" + should "^13.2.3" + yargs "^14.0.0" 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" + resolved "https://registry.npmjs.org/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.npmjs.org/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@^4.0.1: version "4.1.5" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd" + resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd" integrity sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g== dependencies: pseudomap "^1.0.2" @@ -4982,122 +7242,304 @@ lru-cache@^4.0.1: lru-cache@^5.1.1: version "5.1.1" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" + resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== dependencies: yallist "^3.0.2" -magic-string@^0.25.1, 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== +lru-cache@^6.0.0: + version "6.0.0" + resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" + integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== + dependencies: + yallist "^4.0.0" + +lz-string@^1.4.4: + version "1.4.4" + resolved "https://registry.npmjs.org/lz-string/-/lz-string-1.4.4.tgz#c0d8eaf36059f705796e1e344811cf4c498d3a26" + integrity sha1-wNjq82BZ9wV5bh40SBHPTEmNOiY= + +macos-release@^2.2.0: + version "2.4.1" + resolved "https://registry.npmjs.org/macos-release/-/macos-release-2.4.1.tgz#64033d0ec6a5e6375155a74b1a1eba8e509820ac" + integrity sha512-H/QHeBIN1fIGJX517pvK8IEK53yQOW7YcEI55oYtgjDdoCQQz7eJS94qt5kNrscReEyuD/JcdFCm2XBEcGOITg== + +magic-string@^0.25.2: + version "0.25.7" + resolved "https://registry.npmjs.org/magic-string/-/magic-string-0.25.7.tgz#3f497d6fd34c669c6798dcb821f2ef31f5445051" + integrity sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA== dependencies: sourcemap-codec "^1.4.4" -make-dir@^1.3.0: +make-dir@^1.0.0: version "1.3.0" - resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-1.3.0.tgz#79c1033b80515bd6d24ec9933e860ca75ee27f0c" + resolved "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz#79c1033b80515bd6d24ec9933e860ca75ee27f0c" integrity sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ== dependencies: pify "^3.0.0" -make-dir@^2.0.0: +make-dir@^2.0.0, make-dir@^2.1.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5" + resolved "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5" integrity sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA== dependencies: pify "^4.0.1" semver "^5.6.0" +make-dir@^3.0.0: + version "3.1.0" + resolved "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" + integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== + dependencies: + semver "^6.0.0" + +make-fetch-happen@^4.0.2: + version "4.0.2" + resolved "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-4.0.2.tgz#2d156b11696fb32bffbafe1ac1bc085dd6c78a79" + integrity sha512-YMJrAjHSb/BordlsDEcVcPyTbiJKkzqMf48N8dAJZT9Zjctrkb6Yg4TY9Sq2AwSIQJFn5qBBKVTYt3vP5FMIHA== + dependencies: + agentkeepalive "^3.4.1" + cacache "^11.3.3" + http-cache-semantics "^3.8.1" + http-proxy-agent "^2.1.0" + https-proxy-agent "^2.2.1" + lru-cache "^5.1.1" + mississippi "^3.0.0" + node-fetch-npm "^2.0.2" + promise-retry "^1.1.1" + socks-proxy-agent "^4.0.0" + ssri "^6.0.0" + +make-fetch-happen@^5.0.0: + version "5.0.2" + resolved "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-5.0.2.tgz#aa8387104f2687edca01c8687ee45013d02d19bd" + integrity sha512-07JHC0r1ykIoruKO8ifMXu+xEU8qOXDFETylktdug6vJDACnP+HKevOu3PXyNPzFyTSlz8vrBYlBO1JZRe8Cag== + dependencies: + agentkeepalive "^3.4.1" + cacache "^12.0.0" + http-cache-semantics "^3.8.1" + http-proxy-agent "^2.1.0" + https-proxy-agent "^2.2.3" + lru-cache "^5.1.1" + mississippi "^3.0.0" + node-fetch-npm "^2.0.2" + promise-retry "^1.1.1" + socks-proxy-agent "^4.0.0" + ssri "^6.0.0" + makeerror@1.0.x: version "1.0.11" - resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.11.tgz#e01a5c9109f2af79660e4e8b9587790184f5a96c" + resolved "https://registry.npmjs.org/makeerror/-/makeerror-1.0.11.tgz#e01a5c9109f2af79660e4e8b9587790184f5a96c" integrity sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw= dependencies: tmpl "1.0.x" -mamacro@^0.0.3: - version "0.0.3" - resolved "https://registry.yarnpkg.com/mamacro/-/mamacro-0.0.3.tgz#ad2c9576197c9f1abf308d0787865bd975a3f3e4" - integrity sha512-qMEwh+UujcQ+kbz3T6V+wAmO2U8veoq2w+3wY8MquqwVA3jChfwY+Tk52GZKDfACEPjuZ7r2oJLejwpt8jtwTA== - map-age-cleaner@^0.1.1: version "0.1.3" - resolved "https://registry.yarnpkg.com/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz#7d583a7306434c055fe474b0f45078e6e1b4b92a" + resolved "https://registry.npmjs.org/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" + resolved "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" integrity sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8= +map-obj@^1.0.0, map-obj@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d" + integrity sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0= + +map-obj@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/map-obj/-/map-obj-2.0.0.tgz#a65cd29087a92598b8791257a523e021222ac1f9" + integrity sha1-plzSkIepJZi4eRJXpSPgISIqwfk= + +map-obj@^4.0.0: + version "4.1.0" + resolved "https://registry.npmjs.org/map-obj/-/map-obj-4.1.0.tgz#b91221b542734b9f14256c0132c897c5d7256fd5" + integrity sha512-glc9y00wgtwcDmp7GaE/0b0OnxpNJsVf3ael/An6Fe2Q51LLwN1er6sdomLRzz5h0+yMpiYLhWYF5R7HeqVd4g== + map-visit@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" + resolved "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" integrity sha1-7Nyo8TFE5mDxtb1B8S80edmN+48= dependencies: object-visit "^1.0.0" math-random@^1.0.1: version "1.0.4" - resolved "https://registry.yarnpkg.com/math-random/-/math-random-1.0.4.tgz#5dd6943c938548267016d4e34f057583080c514c" + resolved "https://registry.npmjs.org/math-random/-/math-random-1.0.4.tgz#5dd6943c938548267016d4e34f057583080c514c" integrity sha512-rUxjysqif/BZQH2yhd5Aaq7vXMSx9NdEsQcyA07uEzIvxgI7zIr33gGsh+RU0/XjmQpCW7RsVof1vlkvQVCK5A== -md5.js@^1.3.4: - version "1.3.5" - resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f" - integrity sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg== - dependencies: - hash-base "^3.0.0" - inherits "^2.0.1" - safe-buffer "^5.1.2" - mem@^1.1.0: version "1.1.0" - resolved "https://registry.yarnpkg.com/mem/-/mem-1.1.0.tgz#5edd52b485ca1d900fe64895505399a0dfa45f76" + resolved "https://registry.npmjs.org/mem/-/mem-1.1.0.tgz#5edd52b485ca1d900fe64895505399a0dfa45f76" integrity sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y= dependencies: mimic-fn "^1.0.0" mem@^4.0.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/mem/-/mem-4.2.0.tgz#5ee057680ed9cb8dad8a78d820f9a8897a102025" - integrity sha512-5fJxa68urlY0Ir8ijatKa3eRz5lwXnRCTvo9+TbTGAuTFJOwpGcY0X05moBd0nW45965Njt4CDI2GFQoG8DvqA== + version "4.3.0" + resolved "https://registry.npmjs.org/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, 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@^3.3.0: + version "3.7.0" + resolved "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz#72cb668b425228290abbfa856892587308a801fb" + integrity sha1-cstmi0JSKCkKu/qFaJJYcwioAfs= + dependencies: + camelcase-keys "^2.0.0" + decamelize "^1.1.2" + loud-rejection "^1.0.0" + map-obj "^1.0.1" + minimist "^1.1.3" + normalize-package-data "^2.3.4" + object-assign "^4.0.1" + read-pkg-up "^1.0.1" + redent "^1.0.0" + trim-newlines "^1.0.0" -memorystream@^0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/memorystream/-/memorystream-0.3.1.tgz#86d7090b30ce455d63fbae12dda51a47ddcaf9b2" - integrity sha1-htcJCzDORV1j+64S3aUaR93K+bI= +meow@^4.0.0: + version "4.0.1" + resolved "https://registry.npmjs.org/meow/-/meow-4.0.1.tgz#d48598f6f4b1472f35bf6317a95945ace347f975" + integrity sha512-xcSBHD5Z86zaOc+781KrupuHAzeGXSLtiAOmBsiLDiPSaYSB6hdew2ng9EBAnZ62jagG9MHAOdxpDi/lWBFJ/A== + dependencies: + camelcase-keys "^4.0.0" + decamelize-keys "^1.0.0" + loud-rejection "^1.0.0" + minimist "^1.1.3" + 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" + +meow@^8.0.0: + version "8.0.0" + resolved "https://registry.npmjs.org/meow/-/meow-8.0.0.tgz#1aa10ee61046719e334ffdc038bb5069250ec99a" + integrity sha512-nbsTRz2fwniJBFgUkcdISq8y/q9n9VbiHYbfwklFh5V4V2uAcxtKQkDc0yCLPM/kP0d+inZBewn3zJqewHE7kg== + dependencies: + "@types/minimist" "^1.2.0" + camelcase-keys "^6.2.2" + decamelize-keys "^1.1.0" + hard-rejection "^2.1.0" + minimist-options "4.1.0" + normalize-package-data "^3.0.0" + read-pkg-up "^7.0.1" + redent "^3.0.0" + trim-newlines "^3.0.0" + type-fest "^0.18.0" + yargs-parser "^20.2.3" merge-stream@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-1.0.1.tgz#4041202d508a342ba00174008df0c251b8c135e1" + resolved "https://registry.npmjs.org/merge-stream/-/merge-stream-1.0.1.tgz#4041202d508a342ba00174008df0c251b8c135e1" integrity sha1-QEEgLVCKNCugAXQAjfDCUbjBNeE= dependencies: readable-stream "^2.0.1" +merge-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" + integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== + +merge2@^1.2.3: + version "1.4.1" + resolved "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" + integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== + merge@^1.2.0: version "1.2.1" - resolved "https://registry.yarnpkg.com/merge/-/merge-1.2.1.tgz#38bebf80c3220a8a487b6fcfb3941bb11720c145" + resolved "https://registry.npmjs.org/merge/-/merge-1.2.1.tgz#38bebf80c3220a8a487b6fcfb3941bb11720c145" integrity sha512-VjFo4P5Whtj4vsLzsYBu5ayHhoHJ0UqNm7ibvShmbmoz7tGi0vXaoJbGdB+GmDMLUdg8DpQXEIeVDAe8MaABvQ== +meta-exec@^1.0.0, meta-exec@^1.4.1: + version "1.4.2" + resolved "https://registry.npmjs.org/meta-exec/-/meta-exec-1.4.2.tgz#1e88b2a4249f8429c76a8b009831bd1cd6ae2fc9" + integrity sha512-0exKtSTs7hXXTZsiHtNv/T5rB6khLt6ZM0QFMzA4710Oy9cWxwt9Nk8Hoh4vzIWgDBUSjmRAYLNJpdXnVhLKZA== + dependencies: + chalk "^3.0.0" + debug "^4.0.0" + get-meta-file "^1.3.1" + +meta-git@1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/meta-git/-/meta-git-1.0.0.tgz#feec6df6e6d6932d59a50b8b0eabfdeaaa181269" + integrity sha512-vU75bcfbBIzdXlAEcmh0c2uG7X5jrKKq72vvZgZ9xeSx3RYIgnhKEwvd/tCAUQMk2ibkcq8uK4fGxo6Hip/v7A== + dependencies: + chalk "^2.4.1" + commander "^2.9.0" + debug "^4.1.0" + get-meta-file "^1.0.0" + loop "^3.0.6" + meta-exec "^1.0.0" + meta-loop "^1.0.0" + +meta-init@1.0.4: + version "1.0.4" + resolved "https://registry.npmjs.org/meta-init/-/meta-init-1.0.4.tgz#9d9925fa12345e1a22e2d6ef282c486002c7eec4" + integrity sha512-ZoofOd4uAViSfsF3xoLIPxw5mVRRrACQrR9VuFChHoCQyxiYdO9sJnn7eXZxpKFOfNNFiti8VwVOHTtQF+Tjag== + dependencies: + async "^2.3.0" + debug "^4.0.0" + get-meta-file "^1.0.0" + git-remote-origin-url "^3.0.0" + inquirer "^6.0.0" + +meta-loop@1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/meta-loop/-/meta-loop-1.0.0.tgz#971c2dc172908207b10e243214e0df26861449a2" + integrity sha512-4b/QkKvijN7Y1ZJYLLw9V5/xeP1b7ODY19JRL0DXcaIbjRXdDrQsFt4YZRKw2QzftDfUyp7L4ch8hkUvYhCcpw== + dependencies: + debug "^4.1.0" + get-meta-file "^1.0.0" + loop "^3.0.6" + +meta-loop@^1.0.0: + version "1.2.2" + resolved "https://registry.npmjs.org/meta-loop/-/meta-loop-1.2.2.tgz#45d263ea572f3b8a7b7b385b390226b9a6770856" + integrity sha512-B/hNJJF/gKiwrdiCh1sbbdA28o8WBBD+lD/dl3oieZAiAjLs/R5d/KECyjNliWaTruTUHXLoRbQJ43jn4Y/46Q== + dependencies: + debug "^4.1.1" + get-meta-file "^1.3.2" + loop "^3.3.2" + +meta-project@1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/meta-project/-/meta-project-1.0.2.tgz#a03040adfa1a5342ccbbfb3b5f8a0e0990e1113f" + integrity sha512-yCMZFs9Q424IqTQ7Huke2f1dxbDviy0mP7Wb+b9GOg8GCq96NT1ZyJS03+dSRZMfwpYZvB4xL1qS8NPU4KybOA== + dependencies: + chalk "^2.4.1" + commander "^2.9.0" + get-meta-file "^1.0.0" + loop "^3.0.6" + meta-exec "^1.0.0" + mkdirp "^0.5.1" + +meta@^1.2.19: + version "1.2.19" + resolved "https://registry.npmjs.org/meta/-/meta-1.2.19.tgz#0d64150663184376630d12c768da1c98c34c598f" + integrity sha512-78Jy10cBeKPf3KL1kcyc7WG6aRf1TqNH32f+a5F6Ip+VJVd9Is0ARKwPzcclBfo9MVuWU3hjA+6+knut6bj/qQ== + dependencies: + chalk "2.4.2" + commander mateodelnorte/commander.js + debug "4.1.1" + meta-git "1.0.0" + meta-init "1.0.4" + meta-loop "1.0.0" + meta-project "1.0.2" + tabtab "3.0.2" + tildify "1.2.0" + metro-babel-register@^0.49.1: version "0.49.2" - resolved "https://registry.yarnpkg.com/metro-babel-register/-/metro-babel-register-0.49.2.tgz#746c73311135bd6c2af4d83c2cc6c5cbcf0e8a65" + resolved "https://registry.npmjs.org/metro-babel-register/-/metro-babel-register-0.49.2.tgz#746c73311135bd6c2af4d83c2cc6c5cbcf0e8a65" integrity sha512-xx+SNwJ3Dl4MmSNn1RpUGc7b5pyTxXdpqpE7Fuk499rZffypVI1uhKOjKt2lwQhlyD03sXuvB/m3RdEg3mivWg== dependencies: "@babel/core" "^7.0.0" @@ -5115,14 +7557,14 @@ metro-babel-register@^0.49.1: metro-babel7-plugin-react-transform@0.49.2: version "0.49.2" - resolved "https://registry.yarnpkg.com/metro-babel7-plugin-react-transform/-/metro-babel7-plugin-react-transform-0.49.2.tgz#d4c43faa6f2b91cc1b244a36a5d708ae8d39dbb2" + resolved "https://registry.npmjs.org/metro-babel7-plugin-react-transform/-/metro-babel7-plugin-react-transform-0.49.2.tgz#d4c43faa6f2b91cc1b244a36a5d708ae8d39dbb2" integrity sha512-LpJT8UvqF/tvVqEwiLUTMjRPhEGdI8e2dr3424XaRANba3j0nqmrbKdJQsPE8TrcqMWR4RHmfsXk0ti5QrEvJg== dependencies: "@babel/helper-module-imports" "^7.0.0" metro-cache@0.49.2: version "0.49.2" - resolved "https://registry.yarnpkg.com/metro-cache/-/metro-cache-0.49.2.tgz#355dd3dba9fbd805a7ca6f55646216d35ca98225" + resolved "https://registry.npmjs.org/metro-cache/-/metro-cache-0.49.2.tgz#355dd3dba9fbd805a7ca6f55646216d35ca98225" integrity sha512-GFeK4bPQn/U9bbRlVPhu2dYMe/b/GsNOFPEResOxr0kQreHV81rs6Jzcr4pU+9HY7vFiEQ1oggnsLUmANuRyPQ== dependencies: jest-serializer "24.0.0-alpha.6" @@ -5132,7 +7574,7 @@ metro-cache@0.49.2: metro-config@0.49.2, metro-config@^0.49.1: version "0.49.2" - resolved "https://registry.yarnpkg.com/metro-config/-/metro-config-0.49.2.tgz#d9dd0cc32fdb9731b4685b0019c98874a6e4443b" + resolved "https://registry.npmjs.org/metro-config/-/metro-config-0.49.2.tgz#d9dd0cc32fdb9731b4685b0019c98874a6e4443b" integrity sha512-olh50qIMWd+Mj47TQeFnIW9NIquMpfq2g2NT5k+rwI38Xfk+KBnV4BamxtzZuViH7eQI06+Cdyu4NvcZffBXGg== dependencies: cosmiconfig "^5.0.5" @@ -5143,7 +7585,7 @@ metro-config@0.49.2, metro-config@^0.49.1: metro-core@0.49.2, metro-core@^0.49.1: version "0.49.2" - resolved "https://registry.yarnpkg.com/metro-core/-/metro-core-0.49.2.tgz#e3d7f9f02454863fc047bd75c2e37d5544c72d1a" + resolved "https://registry.npmjs.org/metro-core/-/metro-core-0.49.2.tgz#e3d7f9f02454863fc047bd75c2e37d5544c72d1a" integrity sha512-kqhvNPOUTUWOqfm4nFF8l0zWMp2BKO1BUx5KY7osFnVTUpDkuq9Iy433FqEFVhA2jUISrmnd0CTIPcDQyFNllQ== dependencies: jest-haste-map "24.0.0-alpha.6" @@ -5153,19 +7595,19 @@ metro-core@0.49.2, metro-core@^0.49.1: metro-memory-fs@^0.49.1: version "0.49.2" - resolved "https://registry.yarnpkg.com/metro-memory-fs/-/metro-memory-fs-0.49.2.tgz#af3128b8a60d02d4aed427558b42c8d210a5543c" + resolved "https://registry.npmjs.org/metro-memory-fs/-/metro-memory-fs-0.49.2.tgz#af3128b8a60d02d4aed427558b42c8d210a5543c" integrity sha512-bt7ve7iud5gU4Duo9MVMqohJ0nBxILHmQxFhDXOvJnttiDuIfQQUK84pVlo8maNkFbN8uxEJPLBjpD1DC1IOxA== metro-minify-uglify@0.49.2: version "0.49.2" - resolved "https://registry.yarnpkg.com/metro-minify-uglify/-/metro-minify-uglify-0.49.2.tgz#f3b8615cb0e9afd714e4952842bcb9f4d71b4822" + resolved "https://registry.npmjs.org/metro-minify-uglify/-/metro-minify-uglify-0.49.2.tgz#f3b8615cb0e9afd714e4952842bcb9f4d71b4822" integrity sha512-LfnR5N2784pnHe5ShioNkLHyUA1unDU6iLivehX2Waxno1oIP3xKYl/u/VTDET4L8AvLwa5HFACE2hbiWjGQ2Q== dependencies: uglify-es "^3.1.9" metro-react-native-babel-preset@0.49.2: version "0.49.2" - resolved "https://registry.yarnpkg.com/metro-react-native-babel-preset/-/metro-react-native-babel-preset-0.49.2.tgz#8d53610e044e0c9a53a03d307e1c51f9e8577abc" + resolved "https://registry.npmjs.org/metro-react-native-babel-preset/-/metro-react-native-babel-preset-0.49.2.tgz#8d53610e044e0c9a53a03d307e1c51f9e8577abc" integrity sha512-N0+4ramShYCHSAVEPUNWIZuKZskWj8/RDSoinhadHpdpHORMbMxLkexSOVHLluB+XFQ+DENLEx5oVPYwOlENBA== dependencies: "@babel/plugin-proposal-class-properties" "^7.0.0" @@ -5206,21 +7648,21 @@ metro-react-native-babel-preset@0.49.2: metro-resolver@0.49.2: version "0.49.2" - resolved "https://registry.yarnpkg.com/metro-resolver/-/metro-resolver-0.49.2.tgz#b7580d7a24fdf96170a9d4099a66b29a18e6e5f8" + resolved "https://registry.npmjs.org/metro-resolver/-/metro-resolver-0.49.2.tgz#b7580d7a24fdf96170a9d4099a66b29a18e6e5f8" integrity sha512-Si9/A+jNQmVWlLSi6fXSG1tDEanYu99PMz/cAvM+aZy1yX9RyqfJzHzWVdr4lrNh+4DKCgDea94B9BjezqNYyw== dependencies: absolute-path "^0.0.0" metro-source-map@0.49.2: version "0.49.2" - resolved "https://registry.yarnpkg.com/metro-source-map/-/metro-source-map-0.49.2.tgz#0f9e3d0286fc9549652c99b56b7aa2aec12372e7" + resolved "https://registry.npmjs.org/metro-source-map/-/metro-source-map-0.49.2.tgz#0f9e3d0286fc9549652c99b56b7aa2aec12372e7" integrity sha512-gUQ9wq8iR05QeMqRbAJ+L961LVfoNKLBXSeEzHxoDNSwZ7jFYLMKn0ofLlfMy0S1javZGisS51l5OScLt83naQ== dependencies: source-map "^0.5.6" metro@0.49.2, metro@^0.49.1: version "0.49.2" - resolved "https://registry.yarnpkg.com/metro/-/metro-0.49.2.tgz#0fd615d9f451893a0816721b46e94dcf49dda0f6" + resolved "https://registry.npmjs.org/metro/-/metro-0.49.2.tgz#0fd615d9f451893a0816721b46e94dcf49dda0f6" integrity sha512-GSNMigeQq+QQ++qwEnWx0hjtYCZIvogn4JuqpKqOyVqNbg+aIheJPvxfDzjF9OXM5WHuNsTfGLW8n5kbUmQJSg== dependencies: "@babel/core" "^7.0.0" @@ -5275,7 +7717,7 @@ metro@0.49.2, metro@^0.49.1: micromatch@^2.3.11: version "2.3.11" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-2.3.11.tgz#86677c97d1720b363431d04d0d15293bd38c1565" + resolved "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz#86677c97d1720b363431d04d0d15293bd38c1565" integrity sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU= dependencies: arr-diff "^2.0.0" @@ -5292,9 +7734,9 @@ micromatch@^2.3.11: 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.10, micromatch@^3.1.4: version "3.1.10" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" + resolved "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg== dependencies: arr-diff "^4.0.0" @@ -5311,115 +7753,122 @@ micromatch@^3.1.10, micromatch@^3.1.4, micromatch@^3.1.8: 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== +micromatch@^4.0.2: + version "4.0.2" + resolved "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz#4fcb0999bf9fbc2fcbdd212f6d629b9a56c39259" + integrity sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q== dependencies: - bn.js "^4.0.0" - brorand "^1.0.1" + braces "^3.0.1" + picomatch "^2.0.5" + +mime-db@1.44.0: + version "1.44.0" + resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz#fa11c5eb0aca1334b4233cb4d52f10c5a6272f92" + integrity sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg== -"mime-db@>= 1.38.0 < 2", mime-db@~1.38.0: - version "1.38.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.38.0.tgz#1a2aab16da9eb167b49c6e4df2d9c68d63d8e2ad" - integrity sha512-bqVioMFFzc2awcdJZIzR3HjZFX20QhilVS7hytkKrv7xFAn8bM1gzc/FOX2awLISvWe0PV8ptFKcon+wZ5qYkg== +"mime-db@>= 1.43.0 < 2": + version "1.45.0" + resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.45.0.tgz#cceeda21ccd7c3a745eba2decd55d4b73e7879ea" + integrity sha512-CkqLUxUk15hofLoLyljJSrukZi8mAtgd+yE5uO4tqRZsdsAJKv0O+rFMhVDRJgozy+yG6md5KwuXhD4ocIoP+w== mime-db@~1.23.0: version "1.23.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.23.0.tgz#a31b4070adaea27d732ea333740a64d0ec9a6659" + resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.23.0.tgz#a31b4070adaea27d732ea333740a64d0ec9a6659" integrity sha1-oxtAcK2uon1zLqMzdApk0OyaZlk= mime-types@2.1.11: version "2.1.11" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.11.tgz#c259c471bda808a85d6cd193b430a5fae4473b3c" + resolved "https://registry.npmjs.org/mime-types/-/mime-types-2.1.11.tgz#c259c471bda808a85d6cd193b430a5fae4473b3c" integrity sha1-wlnEcb2oCKhdbNGTtDCl+uRHOzw= dependencies: mime-db "~1.23.0" -mime-types@^2.1.12, mime-types@~2.1.18, mime-types@~2.1.19: - version "2.1.22" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.22.tgz#fe6b355a190926ab7698c9a0556a11199b2199bd" - integrity sha512-aGl6TZGnhm/li6F7yx82bJiBZwgiEa4Hf6CNr8YO+r5UHr53tSTYZb102zyU50DOWWKeOv0uQLRL0/9EiKWCog== +mime-types@^2.1.12, mime-types@~2.1.19, mime-types@~2.1.24: + version "2.1.27" + resolved "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz#47949f98e279ea53119f5722e0f34e529bec009f" + integrity sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w== dependencies: - mime-db "~1.38.0" - -mime@1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/mime/-/mime-1.4.1.tgz#121f9ebc49e3766f311a76e1fa1c8003c4b03aa6" - integrity sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ== + mime-db "1.44.0" -mime@^1.3.4: +mime@1.6.0, mime@^1.3.4: version "1.6.0" - resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" + resolved "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== mimic-fn@^1.0.0: version "1.2.0" - resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" + resolved "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" integrity sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ== -mimic-fn@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.0.0.tgz#0913ff0b121db44ef5848242c38bbb35d44cabde" - integrity sha512-jbex9Yd/3lmICXwYT6gA/j2mNQGU48wCh/VzRd+/Y/PjYQtlg1gLMdZqvu9s/xH7qKvngxRObl56XZR609IMbA== +mimic-fn@^2.0.0, mimic-fn@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" + integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== min-document@^2.19.0: version "2.19.0" - resolved "https://registry.yarnpkg.com/min-document/-/min-document-2.19.0.tgz#7bd282e3f5842ed295bb748cdd9f1ffa2c824685" + resolved "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz#7bd282e3f5842ed295bb748cdd9f1ffa2c824685" integrity sha1-e9KC4/WELtKVu3SM3Z8f+iyCRoU= dependencies: dom-walk "^0.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" - integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== - -minimalistic-crypto-utils@^1.0.1: +min-indent@^1.0.0: version "1.0.1" - resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" - integrity sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo= + resolved "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz#a63f681673b30571fbe8bc25686ae746eefa9869" + integrity sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg== -minimatch@^3.0.3, minimatch@^3.0.4: +minimatch@^3.0.0, minimatch@^3.0.3, minimatch@^3.0.4: version "3.0.4" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" + resolved "https://registry.npmjs.org/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-options@4.1.0: + version "4.1.0" + resolved "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz#c0655713c53a8a2ebd77ffa247d342c40f010619" + integrity sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A== + dependencies: + arrify "^1.0.1" + is-plain-obj "^1.1.0" + kind-of "^6.0.3" + +minimist-options@^3.0.1: + version "3.0.2" + resolved "https://registry.npmjs.org/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@^1.1.1, minimist@^1.2.0, minimist@^1.2.5: +minimist@^1.1.1, minimist@^1.1.3, minimist@^1.2.0, minimist@^1.2.5: version "1.2.5" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" + resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== minimist@~0.0.1: version "0.0.10" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf" + resolved "https://registry.npmjs.org/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" - integrity sha512-Gi1W4k059gyRbyVUZQ4mEqLm0YIUiGYfvxhF6SIlk3ui1WVxMTGfGdQ2SInh3PDrRTVvPKgULkpJtT4RH10+VA== +minipass@^2.3.5, minipass@^2.6.0, minipass@^2.8.6, minipass@^2.9.0: + version "2.9.0" + resolved "https://registry.npmjs.org/minipass/-/minipass-2.9.0.tgz#e713762e7d3e32fed803115cf93e04bca9fcc9a6" + integrity sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg== dependencies: safe-buffer "^5.1.2" yallist "^3.0.0" -minizlib@^1.1.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.2.1.tgz#dd27ea6136243c7c880684e8672bb3a45fd9b614" - integrity sha512-7+4oTUOWKg7AuL3vloEWekXY2/D20cevzsrNT2kGWm+39J9hGTCBv8VI5Pm5lXZ/o3/mdR4f8rflAPhnQb8mPA== +minizlib@^1.2.1: + version "1.3.3" + resolved "https://registry.npmjs.org/minizlib/-/minizlib-1.3.3.tgz#2290de96818a34c29551c8a8d301216bd65a861d" + integrity sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q== dependencies: - minipass "^2.2.1" + minipass "^2.9.0" mississippi@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/mississippi/-/mississippi-3.0.0.tgz#ea0a3291f97e0b5e8776b363d5f0a12d94c67022" + resolved "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz#ea0a3291f97e0b5e8776b363d5f0a12d94c67022" integrity sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA== dependencies: concat-stream "^1.5.0" @@ -5435,45 +7884,48 @@ mississippi@^3.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" + resolved "https://registry.npmjs.org/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.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= + version "0.5.5" + resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" + integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== dependencies: - minimist "0.0.8" + minimist "^1.2.5" -mock-raf@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/mock-raf/-/mock-raf-1.0.1.tgz#7567d23fa1220439853317a8ff0eaad1588e9535" - integrity sha512-+25y56bblLzEnv+G4ODsHNck07A5uP5HFfu/1VBKeFrUXoFT9oru+R+jLxLz6rwdM5drUHFdqX9LYBsMP4dz/w== - dependencies: - object-assign "^3.0.0" +mkdirp@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" + integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== + +"mock-raf@npm:@react-spring/mock-raf": + version "1.1.1" + resolved "https://registry.npmjs.org/@react-spring/mock-raf/-/mock-raf-1.1.1.tgz#f3d9e17a8c973c8ce286571f1edd63a80414fe5d" + integrity sha512-SPgq9cenqdkqzxg1zYKEOkao5Boob2sG8QTxiSoHT7NyZoTZKnDcalvRtW9AmZBcbUHy8UtqCKfBWKyB2PSlmQ== -moo@^0.4.3: - version "0.4.3" - resolved "https://registry.yarnpkg.com/moo/-/moo-0.4.3.tgz#3f847a26f31cf625a956a87f2b10fbc013bfd10e" - integrity sha512-gFD2xGCl8YFgGHsqJ9NKRVdwlioeW3mI1iqfLNYQOv0+6JRwG58Zk9DIGQgyIaffSYaO1xsKnMaYzzNr1KyIAw== +modify-values@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/modify-values/-/modify-values-1.0.1.tgz#b3939fa605546474e3e3e3c63d64bd43b4ee6022" + integrity sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw== morgan@^1.9.0: - version "1.9.1" - resolved "https://registry.yarnpkg.com/morgan/-/morgan-1.9.1.tgz#0a8d16734a1d9afbc824b99df87e738e58e2da59" - integrity sha512-HQStPIV4y3afTiCYVxirakhlCfGkI161c76kKFca7Fk1JusM//Qeo1ej2XaMniiNeaZklMVrh3vTtIzpzwbpmA== + version "1.10.0" + resolved "https://registry.npmjs.org/morgan/-/morgan-1.10.0.tgz#091778abc1fc47cd3509824653dae1faab6b17d7" + integrity sha512-AbegBVI4sh6El+1gNwvD5YIck7nSA36weD7xvIxG4in80j/UoK8AEGaWnnz8v1GxonMCltmlNs5ZKbGvl9b1XQ== dependencies: - basic-auth "~2.0.0" + basic-auth "~2.0.1" debug "2.6.9" - depd "~1.1.2" + depd "~2.0.0" on-finished "~2.3.0" - on-headers "~1.0.1" + on-headers "~1.0.2" move-concurrently@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/move-concurrently/-/move-concurrently-1.0.1.tgz#be2c005fda32e0b29af1f05d7c4b33214c701f92" + resolved "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz#be2c005fda32e0b29af1f05d7c4b33214c701f92" integrity sha1-viwAX9oy4LKa8fBdfEszIUxwH5I= dependencies: aproba "^1.1.1" @@ -5484,23 +7936,43 @@ move-concurrently@^1.0.1: run-queue "^1.0.3" mri@^1.1.0: - version "1.1.4" - resolved "https://registry.yarnpkg.com/mri/-/mri-1.1.4.tgz#7cb1dd1b9b40905f1fac053abe25b6720f44744a" - integrity sha512-6y7IjGPm8AzlvoUrwAaw1tLnUBudaS3752vcd8JtrpGGQn+rXIe63LFVHm/YMwtqAuh+LJPCFdlLYPWM1nYn6w== + version "1.1.6" + resolved "https://registry.npmjs.org/mri/-/mri-1.1.6.tgz#49952e1044db21dbf90f6cd92bc9c9a777d415a6" + integrity sha512-oi1b3MfbyGa7FJMP9GmLTttni5JoICpYBRlq+x5V16fZbLsnL9N3wFqqIm/nIG43FjUFkFh9Epzp/kzUGUnJxQ== ms@2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + resolved "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= -ms@^2.1.1: +ms@2.1.1: version "2.1.1" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" + resolved "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg== +ms@2.1.2: + version "2.1.2" + resolved "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + +ms@^2.0.0, ms@^2.1.1: + version "2.1.3" + resolved "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" + integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== + +multimatch@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/multimatch/-/multimatch-2.1.0.tgz#9c7906a22fb4c02919e2f5f75161b4cdbd4b2a2b" + integrity sha1-nHkGoi+0wCkZ4vX3UWG0zb1LKis= + dependencies: + array-differ "^1.0.0" + array-union "^1.0.1" + arrify "^1.0.0" + minimatch "^3.0.0" + multimatch@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/multimatch/-/multimatch-3.0.0.tgz#0e2534cc6bc238d9ab67e1b9cd5fcd85a6dbf70b" + resolved "https://registry.npmjs.org/multimatch/-/multimatch-3.0.0.tgz#0e2534cc6bc238d9ab67e1b9cd5fcd85a6dbf70b" integrity sha512-22foS/gqQfANZ3o+W7ST2x25ueHDVNWl/b9OlGcLpy/iKxjCpvcNCM51YCenUi7Mt/jAjjqv8JwZRs8YP5sRjA== dependencies: array-differ "^2.0.3" @@ -5510,17 +7982,22 @@ multimatch@^3.0.0: mute-stream@0.0.7: version "0.0.7" - resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" + resolved "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" integrity sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s= -nan@^2.9.2: - version "2.13.2" - resolved "https://registry.yarnpkg.com/nan/-/nan-2.13.2.tgz#f51dc7ae66ba7d5d55e1e6d4d8092e802c9aefe7" - integrity sha512-TghvYc72wlMGMVMluVo9WRJc0mB8KxxF/gZ4YYFy7V2ZQX9l7rgbPg7vjS9mt6U5HXODVFVI2bOduCzwOMv/lw== +mute-stream@~0.0.4: + version "0.0.8" + resolved "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" + integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== + +nan@^2.12.1: + version "2.14.2" + resolved "https://registry.npmjs.org/nan/-/nan-2.14.2.tgz#f5376400695168f4cc694ac9393d0c9585eeea19" + integrity sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ== nanomatch@^1.2.9: version "1.2.13" - resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" + resolved "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" integrity sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA== dependencies: arr-diff "^4.0.0" @@ -5537,100 +8014,77 @@ nanomatch@^1.2.9: natural-compare@^1.4.0: version "1.4.0" - resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" + resolved "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= -nearley@^2.7.10: - version "2.16.0" - resolved "https://registry.yarnpkg.com/nearley/-/nearley-2.16.0.tgz#77c297d041941d268290ec84b739d0ee297e83a7" - integrity sha512-Tr9XD3Vt/EujXbZBv6UAHYoLUSMQAxSsTnm9K3koXzjzNWY195NqALeyrzLZBKzAkL3gl92BcSogqrHjD8QuUg== - dependencies: - commander "^2.19.0" - moo "^0.4.3" - railroad-diagrams "^1.0.0" - randexp "0.4.6" - semver "^5.4.1" - -needle@^2.2.1: - version "2.2.4" - resolved "https://registry.yarnpkg.com/needle/-/needle-2.2.4.tgz#51931bff82533b1928b7d1d69e01f1b00ffd2a4e" - integrity sha512-HyoqEb4wr/rsoaIDfTH2aVL9nWtQqba2/HvMv+++m8u0dz808MaagKILxtfeSN7QU7nvbQ79zk3vYOJp9zsNEA== - 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" - integrity sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk= +negotiator@0.6.2: + version "0.6.2" + resolved "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb" + integrity sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw== -neo-async@^2.5.0, neo-async@^2.6.0: +neo-async@^2.6.0: version "2.6.2" - resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" + resolved "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== nice-try@^1.0.4: version "1.0.5" - resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" + resolved "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== +node-fetch-npm@^2.0.2: + version "2.0.4" + resolved "https://registry.npmjs.org/node-fetch-npm/-/node-fetch-npm-2.0.4.tgz#6507d0e17a9ec0be3bec516958a497cec54bf5a4" + integrity sha512-iOuIQDWDyjhv9qSDrj9aq/klt6F9z1p2otB3AV7v3zBDcL/x+OfGsvGQZZCcMZbUf4Ujw1xGNQkjvGnVT22cKg== + dependencies: + encoding "^0.1.11" + json-parse-better-errors "^1.0.0" + safe-buffer "^5.1.1" + node-fetch@^1.0.1: version "1.7.3" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-1.7.3.tgz#980f6f72d85211a5347c6b2bc18c5b84c3eb47ef" + resolved "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz#980f6f72d85211a5347c6b2bc18c5b84c3eb47ef" integrity sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ== dependencies: encoding "^0.1.11" is-stream "^1.0.1" -node-fetch@^2.2.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.3.0.tgz#1a1d940bbfb916a1d3e0219f037e89e71f8c5fa5" - integrity sha512-MOd8pV3fxENbryESLgVIeaGKrdl+uaYhCSSVkjeOb/31/njTpcis5aWfdqgNlHIrKOLRbMnfPINPOML2CIFeXA== +node-fetch@^2.2.0, node-fetch@^2.5.0, node-fetch@^2.6.1: + version "2.6.1" + resolved "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz#045bd323631f76ed2e2b55573394416b639a0052" + integrity sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw== + +node-gyp@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/node-gyp/-/node-gyp-4.0.0.tgz#972654af4e5dd0cd2a19081b4b46fe0442ba6f45" + integrity sha512-2XiryJ8sICNo6ej8d0idXDEMKfVfFK7kekGCtJAuelGsYHQxhj13KTf95swTCN2dZ/4lTfZ84Fu31jqJEEgjWA== + dependencies: + glob "^7.0.3" + graceful-fs "^4.1.2" + mkdirp "^0.5.0" + nopt "2 || 3" + npmlog "0 || 1 || 2 || 3 || 4" + osenv "0" + request "^2.87.0" + rimraf "2" + semver "~5.3.0" + tar "^4.4.8" + which "1" node-int64@^0.4.0: version "0.4.0" - resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" + resolved "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" integrity sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs= -node-libs-browser@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-2.2.0.tgz#c72f60d9d46de08a940dedbb25f3ffa2f9bbaa77" - integrity sha512-5MQunG/oyOaBdttrL40dA7bUfPORLRWMUJLQtMg7nluxUvk5XwnLdL9twQHFAjRx/y7mIMkLKT9++qPbbk6BZA== - 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.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.11.0" - vm-browserify "0.0.4" - node-modules-regexp@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz#8d9dbe28964a4ac5712e9131642107c71e90ec40" + resolved "https://registry.npmjs.org/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz#8d9dbe28964a4ac5712e9131642107c71e90ec40" integrity sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA= node-notifier@^5.2.1: - version "5.4.0" - resolved "https://registry.yarnpkg.com/node-notifier/-/node-notifier-5.4.0.tgz#7b455fdce9f7de0c63538297354f3db468426e6a" - integrity sha512-SUDEb+o71XR5lXSTyivXd9J7fCloE3SyP4lSgt3lU2oSANiox+SxlNRGPjDKrwU1YN3ix2KN/VGGCg0t01rttQ== + version "5.4.3" + resolved "https://registry.npmjs.org/node-notifier/-/node-notifier-5.4.3.tgz#cb72daf94c93904098e28b9c590fd866e464bd50" + integrity sha512-M4UBGcs4jeOK9CjTsYwkvH6/MzuUmGCyTW+kCY7uO+1ZVr0+FHGdPdIf5CCLqAaxnRrWidyoQlNkMIIVwbKB8Q== dependencies: growly "^1.3.0" is-wsl "^1.1.0" @@ -5638,28 +8092,21 @@ node-notifier@^5.2.1: 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" - integrity sha512-d1xFs+C/IPS8Id0qPTZ4bUT8wWryfR/OzzAFxweG+uLN85oPzyo2Iw6bVlLQ/JOdgNonXLCoRyqDzDWq4iw72A== - 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.12: - version "1.1.12" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.12.tgz#1d6baf544316b5422fcd35efe18708370a4e7637" - integrity sha512-Y+AQ1xdjcgaEzpL65PBEF3fnl1FNKnDh9Zm+AUQLIlyyqtSc4u93jyMN4zrjMzdwKQ10RTr3tgY1x7qpsfF/xg== +node-notifier@^6.0.0: + version "6.0.0" + resolved "https://registry.npmjs.org/node-notifier/-/node-notifier-6.0.0.tgz#cea319e06baa16deec8ce5cd7f133c4a46b68e12" + integrity sha512-SVfQ/wMw+DesunOm5cKqr6yDcvUTDl/yc97ybGHMrteNEY6oekXpNpS3lZwgLlwz0FLgHoiW28ZpmBHUDg37cw== dependencies: - semver "^5.3.0" + growly "^1.3.0" + is-wsl "^2.1.1" + semver "^6.3.0" + shellwords "^0.1.1" + which "^1.3.1" + +node-releases@^1.1.67: + version "1.1.67" + resolved "https://registry.npmjs.org/node-releases/-/node-releases-1.1.67.tgz#28ebfcccd0baa6aad8e8d4d8fe4cbc49ae239c12" + integrity sha512-V5QF9noGFl3EymEwUYzO+3NTDpGfQB4ve6Qfnzf3UNydMhjQRVPR1DZTuvWiLzaFJYw2fmDwAfnRNEVb64hSIg== noms@0.0.0: version "0.0.0" @@ -5669,17 +8116,16 @@ noms@0.0.0: inherits "^2.0.1" readable-stream "~1.0.31" -nopt@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.1.tgz#d0d4685afd5415193c8c7505602d0d17cd64474d" - integrity sha1-0NRoWv1UFRk8jHUFYC0NF81kR00= +"nopt@2 || 3": + version "3.0.6" + resolved "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz#c6465dbf08abcd4db359317f79ac68a646b28ff9" + integrity sha1-xkZdvwirzU2zWTF/eaxopkayj/k= dependencies: abbrev "1" - osenv "^0.1.4" -normalize-package-data@^2.3.2: +normalize-package-data@^2.0.0, normalize-package-data@^2.3.0, normalize-package-data@^2.3.2, normalize-package-data@^2.3.4, normalize-package-data@^2.3.5, normalize-package-data@^2.4.0, 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" + resolved "https://registry.npmjs.org/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" @@ -5687,65 +8133,111 @@ normalize-package-data@^2.3.2: semver "2 || 3 || 4 || 5" validate-npm-package-license "^3.0.1" +normalize-package-data@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.0.tgz#1f8a7c423b3d2e85eb36985eaf81de381d01301a" + integrity sha512-6lUjEI0d3v6kFrtgA/lOx4zHCWULXsFNIjHolnZCKCTLA6m/G625cdn3O7eNmT0iD3jfo6HZ9cdImGZwf21prw== + dependencies: + hosted-git-info "^3.0.6" + resolve "^1.17.0" + semver "^7.3.2" + 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" + resolved "https://registry.npmjs.org/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" + resolved "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== +normalize-url@^3.3.0: + version "3.3.0" + resolved "https://registry.npmjs.org/normalize-url/-/normalize-url-3.3.0.tgz#b2e1c4dc4f7c6d57743df733a4f5978d18650559" + integrity sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg== + 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== + version "1.1.1" + resolved "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.1.1.tgz#1edd570865a94cdb1bc8220775e29466c9fb234b" + integrity sha512-gqkfgGePhTpAEgUsGEgcq1rqPXA+tv/aVBlgEzfXwA1yiUJF7xtEt3CtVwOjNYQOVknDk0F20w58Fnm3EtG0fA== + dependencies: + npm-normalize-package-bin "^1.0.1" -npm-packlist@^1.1.6: - version "1.4.1" - resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.4.1.tgz#19064cdf988da80ea3cee45533879d90192bbfbc" - integrity sha512-+TcdO7HJJ8peiiYhvPxsEDhF3PJFGUGRcFsGve3vxvxdcpO2Z4Z7rkosRM0kWj6LfbK/P0gu3dzk5RU1ffvFcw== +npm-lifecycle@^2.1.1: + version "2.1.1" + resolved "https://registry.npmjs.org/npm-lifecycle/-/npm-lifecycle-2.1.1.tgz#0027c09646f0fd346c5c93377bdaba59c6748fdf" + integrity sha512-+Vg6I60Z75V/09pdcH5iUo/99Q/vop35PaI99elvxk56azSVVsdsSsS/sXqKDNwbRRNN1qSxkcO45ZOu0yOWew== + dependencies: + byline "^5.0.0" + graceful-fs "^4.1.15" + node-gyp "^4.0.0" + resolve-from "^4.0.0" + slide "^1.1.6" + uid-number "0.0.6" + umask "^1.1.0" + which "^1.3.1" + +npm-normalize-package-bin@^1.0.0, npm-normalize-package-bin@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz#6e79a41f23fd235c0623218228da7d9c23b8f6e2" + integrity sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA== + +"npm-package-arg@^4.0.0 || ^5.0.0 || ^6.0.0", npm-package-arg@^6.0.0, npm-package-arg@^6.1.0: + version "6.1.1" + resolved "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-6.1.1.tgz#02168cb0a49a2b75bf988a28698de7b529df5cb7" + integrity sha512-qBpssaL3IOZWi5vEKUKW0cO7kzLeT+EQO9W8RsLOZf76KF9E/K9+wH0C7t06HXPpaH8WH5xF1MExLuCwbTqRUg== + dependencies: + hosted-git-info "^2.7.1" + osenv "^0.1.5" + semver "^5.6.0" + validate-npm-package-name "^3.0.0" + +npm-packlist@^1.4.1, npm-packlist@^1.4.4: + version "1.4.8" + resolved "https://registry.npmjs.org/npm-packlist/-/npm-packlist-1.4.8.tgz#56ee6cc135b9f98ad3d51c1c95da22bbb9b2ef3e" + integrity sha512-5+AZgwru5IevF5ZdnFglB5wNlHG1AOOuw28WhUq8/8emhBmLv6jX5by4WJCh7lW0uSYZYS6DXqIsyZVIXRZU9A== dependencies: ignore-walk "^3.0.1" npm-bundled "^1.0.1" + npm-normalize-package-bin "^1.0.1" -npm-run-all@4.1.5: - version "4.1.5" - resolved "https://registry.yarnpkg.com/npm-run-all/-/npm-run-all-4.1.5.tgz#04476202a15ee0e2e214080861bff12a51d98fba" - integrity sha512-Oo82gJDAVcaMdi3nuoKFavkIHBRVqQ1qvMb+9LHk/cF4P6B2m8aP04hGf7oL6wZ9BuGwX1onlLhpuoofSyoQDQ== +npm-pick-manifest@^3.0.0: + version "3.0.2" + resolved "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-3.0.2.tgz#f4d9e5fd4be2153e5f4e5f9b7be8dc419a99abb7" + integrity sha512-wNprTNg+X5nf+tDi+hbjdHhM4bX+mKqv6XmPh7B5eG+QY9VARfQPfCEH013H5GqfNj6ee8Ij2fg8yk0mzps1Vw== dependencies: - ansi-styles "^3.2.1" - chalk "^2.4.1" - cross-spawn "^6.0.5" - memorystream "^0.3.1" - minimatch "^3.0.4" - pidtree "^0.3.0" - read-pkg "^3.0.0" - shell-quote "^1.6.1" - string.prototype.padend "^3.0.0" + figgy-pudding "^3.5.1" + npm-package-arg "^6.0.0" + semver "^5.4.1" 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" + resolved "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" integrity sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8= dependencies: path-key "^2.0.0" -npmlog@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-2.0.4.tgz#98b52530f2514ca90d09ec5b22c8846722375692" - integrity sha1-mLUlMPJRTKkNCexbIsiEZyI3VpI= +npm-run-path@^3.0.0: + version "3.1.0" + resolved "https://registry.npmjs.org/npm-run-path/-/npm-run-path-3.1.0.tgz#7f91be317f6a466efed3c9f2980ad8a4ee8b0fa5" + integrity sha512-Dbl4A/VfiVGLgQv29URL9xshU8XDY1GeLy+fsaZ1AA8JDSfjvr5P5+pzRbWqRSBxk6/DW7MIh8lTM/PaGnP2kg== dependencies: - ansi "~0.3.1" - are-we-there-yet "~1.1.2" - gauge "~1.2.5" + path-key "^3.0.0" + +npm-run-path@^4.0.0: + version "4.0.1" + resolved "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" + integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== + dependencies: + path-key "^3.0.0" -npmlog@^4.0.2: +"npmlog@0 || 1 || 2 || 3 || 4", npmlog@^4.1.2: version "4.1.2" - resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" + resolved "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" integrity sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg== dependencies: are-we-there-yet "~1.1.2" @@ -5753,115 +8245,88 @@ npmlog@^4.0.2: gauge "~2.7.3" set-blocking "~2.0.0" -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== +npmlog@^2.0.4: + version "2.0.4" + resolved "https://registry.npmjs.org/npmlog/-/npmlog-2.0.4.tgz#98b52530f2514ca90d09ec5b22c8846722375692" + integrity sha1-mLUlMPJRTKkNCexbIsiEZyI3VpI= dependencies: - boolbase "~1.0.0" + ansi "~0.3.1" + are-we-there-yet "~1.1.2" + gauge "~1.2.5" nullthrows@^1.1.0: version "1.1.1" - resolved "https://registry.yarnpkg.com/nullthrows/-/nullthrows-1.1.1.tgz#7818258843856ae971eae4208ad7d7eb19a431b1" + resolved "https://registry.npmjs.org/nullthrows/-/nullthrows-1.1.1.tgz#7818258843856ae971eae4208ad7d7eb19a431b1" integrity sha512-2vPPEi+Z7WqML2jZYddDIfy5Dqb0r2fze2zTxNNknZaFpVHU3mFB3R+DWeJWGVx0ecvttSGlJTI+WG+8Z4cDWw== 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" + resolved "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0= -nwsapi@^2.0.7: - version "2.1.3" - resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.1.3.tgz#25f3a5cec26c654f7376df6659cdf84b99df9558" - integrity sha512-RowAaJGEgYXEZfQ7tvvdtAQUKPyTR6T6wNu0fwlNsGQYr/h3yQc6oI8WnVZh3Y/Sylwc+dtAlvPqfFZjhTyk3A== +nwsapi@^2.2.0: + version "2.2.0" + resolved "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.0.tgz#204879a9e3d068ff2a55139c2c772780681a38b7" + integrity sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ== oauth-sign@~0.9.0: version "0.9.0" - resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" + resolved "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== -object-assign@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-3.0.0.tgz#9bedd5ca0897949bca47e7ff408062d549f587f2" - integrity sha1-m+3VygiXlJvKR+f/QIBi1Un1h/I= - 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" + resolved "https://registry.npmjs.org/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" + resolved "https://registry.npmjs.org/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-inspect@^1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.6.0.tgz#c70b6cbf72f274aab4c34c0c82f5167bf82cf15b" - integrity sha512-GJzfBZ6DgDAmnuaM3104jR4s1Myxr3Y3zfIyN4z3UdqN69oSRacNK8UhnobDdC+7J2AHCjGwxQubNJfE70SXXQ== - -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-inspect@^1.8.0: + version "1.9.0" + resolved "https://registry.npmjs.org/object-inspect/-/object-inspect-1.9.0.tgz#c90521d74e1127b67266ded3394ad6116986533a" + integrity sha512-i3Bp9iTqwhaLZBxGkRfo5ZbE07BQRT7MGu8+nNgwW9ItGp1TzCTw2DLEoWwjClxBjOFI/hWljTAmYGCEwmtnOw== -object-keys@^1.0.11, object-keys@^1.0.12: - version "1.1.0" - resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.0.tgz#11bd22348dd2e096a045ab06f6c85bcc340fa032" - integrity sha512-6OO5X1+2tYkNyNEx6TsCxEqFfRWaqx6EtMiSbGrw8Ob8v9Ne+Hl8rBAgLBZn5wjEz3s/s6U1WXFUFOcxxAwUpg== +object-keys@^1.0.12, object-keys@^1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/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" + resolved "https://registry.npmjs.org/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.0.4: - version "1.1.0" - resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.0.tgz#2024fc6d6ba246aee38bdb0ffd5cfbcf371b7519" - integrity sha512-l+H6EQ8qzGRxbkHOd5I/aHRhHDKoQXQ8g0BYt4uSweQU1/J6dZUOyWh9a2Vky35YCKjzmgxOzta2hH6kf9HuXA== +object.assign@^4.1.0, object.assign@^4.1.1: + version "4.1.2" + resolved "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz#0ed54a342eceb37b38ff76eb831a0e788cb63940" + integrity sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ== dependencies: + call-bind "^1.0.0" 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" + has-symbols "^1.0.1" + object-keys "^1.1.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= + version "2.1.1" + resolved "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.1.tgz#0dfda8d108074d9c563e80490c883b6661091544" + integrity sha512-6DtXgZ/lIZ9hqx4GtZETobXLR/ZLaa0aqV0kzbn80Rf8Z2e/XFnhA0I7p07N2wH8bBBltr2xQPi6sbKWAY2Eng== dependencies: - define-properties "^1.1.2" - es-abstract "^1.5.1" + call-bind "^1.0.0" + define-properties "^1.1.3" + es-abstract "^1.18.0-next.1" object.omit@^2.0.0: version "2.0.1" - resolved "https://registry.yarnpkg.com/object.omit/-/object.omit-2.0.1.tgz#1a9c744829f39dbb858c76ca3579ae2a54ebd1fa" + resolved "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz#1a9c744829f39dbb858c76ca3579ae2a54ebd1fa" integrity sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo= dependencies: for-own "^0.1.4" @@ -5869,92 +8334,89 @@ object.omit@^2.0.0: object.pick@^1.3.0: version "1.3.0" - resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" + resolved "https://registry.npmjs.org/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: +octokit-pagination-methods@^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" + resolved "https://registry.npmjs.org/octokit-pagination-methods/-/octokit-pagination-methods-1.1.0.tgz#cf472edc9d551055f9ef73f6e42b4dbb4c80bea4" + integrity sha512-fZ4qZdQ2nxJvtcasX7Ghl+WlWS/d9IgnBIwFZXVNNZUmzpno91SX5bc5vuxiuKoCtK78XxGGNuSCrDC7xYB3OQ== on-finished@~2.3.0: version "2.3.0" - resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" + resolved "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" integrity sha1-IPEzZIGwg811M3mSoWlxqi2QaUc= dependencies: ee-first "1.1.1" -on-headers@~1.0.1, on-headers@~1.0.2: +on-headers@~1.0.2: version "1.0.2" - resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.2.tgz#772b0ae6aaa525c399e489adfad90c403eb3c28f" + resolved "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz#772b0ae6aaa525c399e489adfad90c403eb3c28f" integrity sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA== 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" + resolved "https://registry.npmjs.org/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" + resolved "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4" integrity sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ= dependencies: mimic-fn "^1.0.0" +onetime@^5.1.0: + version "5.1.2" + resolved "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" + integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== + dependencies: + mimic-fn "^2.1.0" + opn@^3.0.2: version "3.0.3" - resolved "https://registry.yarnpkg.com/opn/-/opn-3.0.3.tgz#b6d99e7399f78d65c3baaffef1fb288e9b85243a" + resolved "https://registry.npmjs.org/opn/-/opn-3.0.3.tgz#b6d99e7399f78d65c3baaffef1fb288e9b85243a" integrity sha1-ttmec5n3jWXDuq/+8fsojpuFJDo= dependencies: object-assign "^4.0.1" optimist@^0.6.1: version "0.6.1" - resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.6.1.tgz#da3ea74686fa21a19a111c326e90eb15a0196686" + resolved "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz#da3ea74686fa21a19a111c326e90eb15a0196686" integrity sha1-2j6nRob6IaGaERwybpDrFaAZZoY= dependencies: minimist "~0.0.1" wordwrap "~0.0.2" optionator@^0.8.1: - version "0.8.2" - resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.2.tgz#364c5e409d3f4d6301d6c0b4c05bba50180aeb64" - integrity sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q= + version "0.8.3" + resolved "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495" + integrity sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA== dependencies: deep-is "~0.1.3" - fast-levenshtein "~2.0.4" + fast-levenshtein "~2.0.6" levn "~0.3.0" prelude-ls "~1.1.2" type-check "~0.3.2" - wordwrap "~1.0.0" + word-wrap "~1.2.3" options@>=0.0.5: version "0.0.6" - resolved "https://registry.yarnpkg.com/options/-/options-0.0.6.tgz#ec22d312806bb53e731773e7cdaefcf1c643128f" + resolved "https://registry.npmjs.org/options/-/options-0.0.6.tgz#ec22d312806bb53e731773e7cdaefcf1c643128f" integrity sha1-7CLTEoBrtT5zF3Pnza788cZDEo8= -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" + resolved "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" integrity sha1-/7xJiDNuDoM94MFox+8VISGqf7M= os-locale@^2.0.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-2.1.0.tgz#42bc2900a6b5b8bd17376c8e882b65afccf24bf2" + resolved "https://registry.npmjs.org/os-locale/-/os-locale-2.1.0.tgz#42bc2900a6b5b8bd17376c8e882b65afccf24bf2" integrity sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA== dependencies: execa "^0.7.0" @@ -5963,21 +8425,29 @@ os-locale@^2.0.0: os-locale@^3.0.0: version "3.1.0" - resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-3.1.0.tgz#a802a6ee17f24c10483ab9935719cef4ed16bf1a" + resolved "https://registry.npmjs.org/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-name@^3.1.0: + version "3.1.0" + resolved "https://registry.npmjs.org/os-name/-/os-name-3.1.0.tgz#dec19d966296e1cd62d701a5a66ee1ddeae70801" + integrity sha512-h8L+8aNjNcMpo/mAIBPn5PXCM16iyPGjHNWo6U1YO8sJTMHtEtyczI6QJnLoplswm6goopQkqc7OAnjhWcugVg== + dependencies: + macos-release "^2.2.0" + windows-release "^3.1.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" + resolved "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= -osenv@^0.1.4: +osenv@0, osenv@^0.1.5: version "0.1.5" - resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410" + resolved "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410" integrity sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g== dependencies: os-homedir "^1.0.0" @@ -5985,98 +8455,148 @@ osenv@^0.1.4: p-defer@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/p-defer/-/p-defer-1.0.0.tgz#9f6eb182f6c9aa8cd743004a7d4f96b196b0fb0c" + resolved "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz#9f6eb182f6c9aa8cd743004a7d4f96b196b0fb0c" integrity sha1-n26xgvbJqozXQwBKfU+WsZaw+ww= -p-each-series@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/p-each-series/-/p-each-series-1.0.0.tgz#930f3d12dd1f50e7434457a22cd6f04ac6ad7f71" - integrity sha1-kw89Et0fUOdDRFeiLNbwSsatf3E= - dependencies: - p-reduce "^1.0.0" +p-each-series@^2.1.0: + version "2.2.0" + resolved "https://registry.npmjs.org/p-each-series/-/p-each-series-2.2.0.tgz#105ab0357ce72b202a8a8b94933672657b5e2a9a" + integrity sha512-ycIL2+1V32th+8scbpTvyHNaHe02z0sjgh91XXjAk+ZeXoPN4Z46DVUnzdso0aX4KckKw0FNNFHdjZ2UsZvxiA== p-finally@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" + resolved "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4= +p-finally@^2.0.0: + version "2.0.1" + resolved "https://registry.npmjs.org/p-finally/-/p-finally-2.0.1.tgz#bd6fcaa9c559a096b680806f4d657b3f0f240561" + integrity sha512-vpm09aKwq6H9phqRQzecoDpD8TmVyGw70qmWlyq5onxY7tqyTTFVvxMykxQSQKILBSFlbXpypIw2T1Ml7+DDtw== + p-is-promise@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/p-is-promise/-/p-is-promise-2.0.0.tgz#7554e3d572109a87e1f3f53f6a7d85d1b194f4c5" - integrity sha512-pzQPhYMCAgLAKPWD2jC3Se9fEfrD9npNos0y150EeqZll7akhEgGhTW/slB6lHku8AvYGiJ+YJ5hfHKePPgFWg== + version "2.1.0" + resolved "https://registry.npmjs.org/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" + resolved "https://registry.npmjs.org/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== +p-limit@^2.0.0, p-limit@^2.2.0: + version "2.3.0" + resolved "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" + integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== dependencies: p-try "^2.0.0" +p-limit@^3.0.2: + version "3.1.0" + resolved "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" + integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== + dependencies: + yocto-queue "^0.1.0" + p-locate@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" + resolved "https://registry.npmjs.org/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== +p-locate@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/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.npmjs.org/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" + integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== + dependencies: + p-limit "^2.2.0" + +p-locate@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" + integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== + dependencies: + p-limit "^3.0.2" + +p-map-series@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/p-map-series/-/p-map-series-1.0.0.tgz#bf98fe575705658a9e1351befb85ae4c1f07bdca" + integrity sha1-v5j+V1cFZYqeE1G++4WuTB8Hvco= + dependencies: + p-reduce "^1.0.0" + +p-map@^1.2.0: + version "1.2.0" + resolved "https://registry.npmjs.org/p-map/-/p-map-1.2.0.tgz#e4e94f311eabbc8633a1e79908165fca26241b6b" + integrity sha512-r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA== + +p-pipe@^1.2.0: + version "1.2.0" + resolved "https://registry.npmjs.org/p-pipe/-/p-pipe-1.2.0.tgz#4b1a11399a11520a67790ee5a0c1d5881d6befe9" + integrity sha1-SxoROZoRUgpneQ7loMHViB1r7+k= + +p-queue@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/p-queue/-/p-queue-4.0.0.tgz#ed0eee8798927ed6f2c2f5f5b77fdb2061a5d346" + integrity sha512-3cRXXn3/O0o3+eVmUroJPSj/esxoEFIm0ZOno/T+NzG/VZgPOqQ8WKmlNqubSEpZmCIngEy34unkHGg83ZIBmg== dependencies: - p-limit "^2.0.0" + eventemitter3 "^3.1.0" p-reduce@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/p-reduce/-/p-reduce-1.0.0.tgz#18c2b0dd936a4690a529f8231f58a0fdb6a47dfa" + resolved "https://registry.npmjs.org/p-reduce/-/p-reduce-1.0.0.tgz#18c2b0dd936a4690a529f8231f58a0fdb6a47dfa" integrity sha1-GMKw3ZNqRpClKfgjH1ig/bakffo= p-try@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" + resolved "https://registry.npmjs.org/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" + resolved "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== -pako@~1.0.5: - version "1.0.10" - resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.10.tgz#4328badb5086a426aa90f541977d4955da5c9732" - integrity sha512-0DTvPVU3ed8+HNXOu5Bs+o//Mbdj9VNQMUOe9oKCwh8l0GNwpTDMKCWbRjgtD291AWnkAgkqA/LOnQS8AmS1tw== +p-waterfall@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/p-waterfall/-/p-waterfall-1.0.0.tgz#7ed94b3ceb3332782353af6aae11aa9fc235bb00" + integrity sha1-ftlLPOszMngjU69qrhGqn8I1uwA= + dependencies: + p-reduce "^1.0.0" 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= + version "1.2.0" + resolved "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.2.0.tgz#9049ca37d6cb2182c3b1d2c720be94d14a5814fc" + integrity sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg== dependencies: - cyclist "~0.2.2" + cyclist "^1.0.1" inherits "^2.0.3" readable-stream "^2.1.5" -parse-asn1@^5.0.0: - version "5.1.4" - resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.4.tgz#37f6628f823fbdeb2273b4d540434a22f3ef1fcc" - integrity sha512-Qs5duJcuvNExRfFZ99HDD3z4mAi3r9Wl/FOjEOijlxwCZs7E7mW2vjTpgQ4J8LpTF8x5v+1Vn5UQFejmWT11aw== +parent-module@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" + integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== 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" + callsites "^3.0.0" + +parse-github-repo-url@^1.3.0: + version "1.4.1" + resolved "https://registry.npmjs.org/parse-github-repo-url/-/parse-github-repo-url-1.4.1.tgz#9e7d8bb252a6cb6ba42595060b7bf6df3dbc1f50" + integrity sha1-nn2LslKmy2ukJZUGC3v23z28H1A= parse-glob@^3.0.4: version "3.0.4" - resolved "https://registry.yarnpkg.com/parse-glob/-/parse-glob-3.0.4.tgz#b2c376cfb11f35513badd173ef0bb6e3a388391c" + resolved "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz#b2c376cfb11f35513badd173ef0bb6e3a388391c" integrity sha1-ssN2z7EfNVE7rdFz7wu246OIORw= dependencies: glob-base "^0.3.0" @@ -6086,150 +8606,217 @@ parse-glob@^3.0.4: parse-json@^2.2.0: version "2.2.0" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" + resolved "https://registry.npmjs.org/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" + resolved "https://registry.npmjs.org/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-json@^5.0.0: + version "5.1.0" + resolved "https://registry.npmjs.org/parse-json/-/parse-json-5.1.0.tgz#f96088cdf24a8faa9aea9a009f2d9d942c999646" + integrity sha512-+mi/lmVVNKFNVyLXV31ERiy2CY5E1/F6QtJFEzoChPRwwngMNXRDQ9GJ5WdE2Z2P4AujsOi0/+2qHID68KwfIQ== + dependencies: + "@babel/code-frame" "^7.0.0" + error-ex "^1.3.1" + json-parse-even-better-errors "^2.3.0" + lines-and-columns "^1.1.6" + parse-node-version@^1.0.0: version "1.0.1" - resolved "https://registry.yarnpkg.com/parse-node-version/-/parse-node-version-1.0.1.tgz#e2b5dbede00e7fa9bc363607f53327e8b073189b" + resolved "https://registry.npmjs.org/parse-node-version/-/parse-node-version-1.0.1.tgz#e2b5dbede00e7fa9bc363607f53327e8b073189b" integrity sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA== -parse5@4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/parse5/-/parse5-4.0.0.tgz#6d78656e3da8d78b4ec0b906f7c08ef1dfe3f608" - integrity sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA== +parse-passwd@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz#6d5b934a456993b23d37f40a382d6f1666a8e5c6" + integrity sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY= -parse5@^3.0.1: - version "3.0.3" - resolved "https://registry.yarnpkg.com/parse5/-/parse5-3.0.3.tgz#042f792ffdd36851551cf4e9e066b3874ab45b5c" - integrity sha512-rgO9Zg5LLLkfJF9E6CCmXlSE4UVceloys8JrFqCcHloC3usd/kJCyPDwH2SOlzix2j3xaP9sUX3e8+kvkuleAA== +parse-path@^4.0.0: + version "4.0.2" + resolved "https://registry.npmjs.org/parse-path/-/parse-path-4.0.2.tgz#ef14f0d3d77bae8dd4bc66563a4c151aac9e65aa" + integrity sha512-HSqVz6iuXSiL8C1ku5Gl1Z5cwDd9Wo0q8CoffdAghP6bz8pJa1tcMC+m4N+z6VAS8QdksnIGq1TB6EgR4vPR6w== dependencies: - "@types/node" "*" + is-ssh "^1.3.0" + protocols "^1.4.0" -parseurl@~1.3.2: - version "1.3.2" - resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.2.tgz#fc289d4ed8993119460c156253262cdc8de65bf3" - integrity sha1-/CidTtiZMRlGDBViUyYs3I3mW/M= +parse-url@^5.0.0: + version "5.0.2" + resolved "https://registry.npmjs.org/parse-url/-/parse-url-5.0.2.tgz#856a3be1fcdf78dc93fc8b3791f169072d898b59" + integrity sha512-Czj+GIit4cdWtxo3ISZCvLiUjErSo0iI3wJ+q9Oi3QuMYTI6OZu+7cewMWZ+C1YAnKhYTk6/TLuhIgCypLthPA== + dependencies: + is-ssh "^1.3.0" + normalize-url "^3.3.0" + parse-path "^4.0.0" + protocols "^1.4.0" + +parse5@5.1.0: + version "5.1.0" + resolved "https://registry.npmjs.org/parse5/-/parse5-5.1.0.tgz#c59341c9723f414c452975564c7c00a68d58acd2" + integrity sha512-fxNG2sQjHvlVAYmzBZS9YlDp6PTSSDwa98vkD4QgVDDCAo84z5X1t5XyJQ62ImdLXx5NdIIfihey6xpum9/gRQ== + +parseurl@~1.3.3: + version "1.3.3" + resolved "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" + integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== pascalcase@^0.1.1: version "0.1.1" - resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" + resolved "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ= -path-browserify@0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.0.tgz#a0b870729aae214005b7d5032ec2cbbb0fb4451a" - integrity sha1-oLhwcpquIUAFt9UDLsLLuw+0RRo= - path-dirname@^1.0.0: version "1.0.2" - resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0" + resolved "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0" integrity sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA= +path-exists@^2.0.0: + version "2.1.0" + resolved "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b" + integrity sha1-D+tsZPD8UY2adU3V77YscCJ2H0s= + 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" + resolved "https://registry.npmjs.org/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.npmjs.org/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" + resolved "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= 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" + resolved "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= +path-key@^3.0.0, path-key@^3.1.0: + version "3.1.1" + resolved "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" + integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== + path-parse@^1.0.6: version "1.0.6" - resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" + resolved "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw== +path-type@^1.0.0: + version "1.1.0" + resolved "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441" + integrity sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE= + 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" + resolved "https://registry.npmjs.org/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" + resolved "https://registry.npmjs.org/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" +path-type@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" + integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== performance-now@^2.1.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" + resolved "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= -pidtree@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/pidtree/-/pidtree-0.3.0.tgz#f6fada10fccc9f99bf50e90d0b23d72c9ebc2e6b" - integrity sha512-9CT4NFlDcosssyg8KVFltgokyKZIFjoBxw8CTGy+5F38Y1eQWrt8tRayiUOXE+zVKQnYu5BR8JjCtvK3BcnBhg== +picomatch@^2.0.4, picomatch@^2.0.5, picomatch@^2.2.2: + version "2.2.2" + resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad" + integrity sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg== -pify@^2.0.0: +pify@^2.0.0, pify@^2.3.0: version "2.3.0" - resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" + resolved "https://registry.npmjs.org/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" + resolved "https://registry.npmjs.org/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" + resolved "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== +pinkie-promise@^2.0.0: + version "2.0.1" + resolved "https://registry.npmjs.org/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.npmjs.org/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" + integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA= + pirates@^4.0.0, pirates@^4.0.1: version "4.0.1" - resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.1.tgz#643a92caf894566f91b2b986d2c66950a8e2fb87" + resolved "https://registry.npmjs.org/pirates/-/pirates-4.0.1.tgz#643a92caf894566f91b2b986d2c66950a8e2fb87" integrity sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA== dependencies: node-modules-regexp "^1.0.0" +pkg-dir@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/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" + resolved "https://registry.npmjs.org/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.2.0: + version "4.2.0" + resolved "https://registry.npmjs.org/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.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== + version "3.2.0" + resolved "https://registry.npmjs.org/please-upgrade-node/-/please-upgrade-node-3.2.0.tgz#aeddd3f994c933e4ad98b99d9a556efa0e2fe942" + integrity sha512-gQR3WpIgNIKwBMVLkpMUeR3e1/E1y42bqDQZfql+kDeXd8COYfM8PQA4X6y7a8u9Ua9FHmsrrmirW2vHs45hWg== dependencies: semver-compare "^1.0.0" plist@2.0.1: version "2.0.1" - resolved "https://registry.yarnpkg.com/plist/-/plist-2.0.1.tgz#0a32ca9481b1c364e92e18dc55c876de9d01da8b" + resolved "https://registry.npmjs.org/plist/-/plist-2.0.1.tgz#0a32ca9481b1c364e92e18dc55c876de9d01da8b" integrity sha1-CjLKlIGxw2TpLhjcVch23p0B2os= dependencies: base64-js "1.1.2" @@ -6238,7 +8825,7 @@ plist@2.0.1: plist@^3.0.0: version "3.0.1" - resolved "https://registry.yarnpkg.com/plist/-/plist-3.0.1.tgz#a9b931d17c304e8912ef0ba3bdd6182baf2e1f8c" + resolved "https://registry.npmjs.org/plist/-/plist-3.0.1.tgz#a9b931d17c304e8912ef0ba3bdd6182baf2e1f8c" integrity sha512-GpgvHHocGRyQm74b6FWEZZVRroHKE1I0/BTjAmySaohK+cUn+hZpbqXkc3KWgW3gQYkqcQej35FohcT0FRlkRQ== dependencies: base64-js "^1.2.3" @@ -6247,7 +8834,7 @@ plist@^3.0.0: plugin-error@^0.1.2: version "0.1.2" - resolved "https://registry.yarnpkg.com/plugin-error/-/plugin-error-0.1.2.tgz#3b9bb3335ccf00f425e07437e19276967da47ace" + resolved "https://registry.npmjs.org/plugin-error/-/plugin-error-0.1.2.tgz#3b9bb3335ccf00f425e07437e19276967da47ace" integrity sha1-O5uzM1zPAPQl4HQ34ZJ2ln2kes4= dependencies: ansi-cyan "^0.1.1" @@ -6258,58 +8845,75 @@ plugin-error@^0.1.2: pn@^1.1.0: version "1.1.0" - resolved "https://registry.yarnpkg.com/pn/-/pn-1.1.0.tgz#e2f4cef0e219f463c179ab37463e4e1ecdccbafb" + resolved "https://registry.npmjs.org/pn/-/pn-1.1.0.tgz#e2f4cef0e219f463c179ab37463e4e1ecdccbafb" integrity sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA== +pointer-events-polyfill@^0.4.4-pre: + version "0.4.4-pre" + resolved "https://registry.npmjs.org/pointer-events-polyfill/-/pointer-events-polyfill-0.4.4-pre.tgz#d745eb0cef8aa3f661cdba1364b9728b46d0872f" + integrity sha512-t7iitVY5jW9mGOFZEHphJOzB8eMhoYaE6I5HqsUX14rjsPa9F6OlMOCj3EpqDzNb/8XtMk2BxMpOyePPyuefHw== + 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" + resolved "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs= prelude-ls@~1.1.2: version "1.1.2" - resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" + resolved "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ= preserve@^0.2.0: version "0.2.0" - resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b" + resolved "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b" integrity sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks= -prettier@1.16.4: - version "1.16.4" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.16.4.tgz#73e37e73e018ad2db9c76742e2647e21790c9717" - integrity sha512-ZzWuos7TI5CKUeQAtFd6Zhm2s6EpAD/ZLApIhsF9pRvRtM1RFo61dM/4MSRUA0SuLugA/zgrZD8m0BaY46Og7g== +prettier@^2.0.5: + version "2.2.1" + resolved "https://registry.npmjs.org/prettier/-/prettier-2.2.1.tgz#795a1a78dd52f073da0cd42b21f9c91381923ff5" + integrity sha512-PqyhM2yCjg/oKkFPtTGUojv7gnZAoG80ttl45O6x2Ug/rMJw4wcc9k6aaf2hibP7BGVCCM33gZoGjyvt9mm16Q== pretty-format@24.0.0-alpha.6: version "24.0.0-alpha.6" - resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-24.0.0-alpha.6.tgz#25ad2fa46b342d6278bf241c5d2114d4376fbac1" + resolved "https://registry.npmjs.org/pretty-format/-/pretty-format-24.0.0-alpha.6.tgz#25ad2fa46b342d6278bf241c5d2114d4376fbac1" integrity sha512-zG2m6YJeuzwBFqb5EIdmwYVf30sap+iMRuYNPytOccEXZMAJbPIFGKVJ/U0WjQegmnQbRo9CI7j6j3HtDaifiA== dependencies: ansi-regex "^4.0.0" ansi-styles "^3.2.0" -pretty-format@^23.6.0: - version "23.6.0" - resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-23.6.0.tgz#5eaac8eeb6b33b987b7fe6097ea6a8a146ab5760" - integrity sha512-zf9NV1NSlDLDjycnwm6hpFATCGl/K1lt0R/GdkAK2O5LN/rwJoB+Mh93gGJjut4YbmecbfgLWVGSTCr0Ewvvbw== - dependencies: - ansi-regex "^3.0.0" - ansi-styles "^3.2.0" - -pretty-format@^24.5.0: - version "24.5.0" - resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-24.5.0.tgz#cc69a0281a62cd7242633fc135d6930cd889822d" - integrity sha512-/3RuSghukCf8Riu5Ncve0iI+BzVkbRU5EeUoArKARZobREycuH5O4waxvaNIloEXdb0qwgmEAed5vTpX1HNROQ== +pretty-format@^24.0.0, pretty-format@^24.3.0, pretty-format@^24.9.0: + version "24.9.0" + resolved "https://registry.npmjs.org/pretty-format/-/pretty-format-24.9.0.tgz#12fac31b37019a4eea3c11aa9a959eb7628aa7c9" + integrity sha512-00ZMZUiHaJrNfk33guavqgvfJS30sLYf0f8+Srklv0AMPodGGHcoHgksZ3OThYnIvOd+8yMCn0YiEOogjlgsnA== dependencies: - "@jest/types" "^24.5.0" + "@jest/types" "^24.9.0" ansi-regex "^4.0.0" ansi-styles "^3.2.0" react-is "^16.8.4" +pretty-format@^25.1.0, pretty-format@^25.5.0: + version "25.5.0" + resolved "https://registry.npmjs.org/pretty-format/-/pretty-format-25.5.0.tgz#7873c1d774f682c34b8d48b6743a2bf2ac55791a" + integrity sha512-kbo/kq2LQ/A/is0PQwsEHM7Ca6//bGPPvU6UnsdDRSKTWxT/ru/xb88v4BJf6a69H+uTytOEsTusT9ksd/1iWQ== + dependencies: + "@jest/types" "^25.5.0" + ansi-regex "^5.0.0" + ansi-styles "^4.0.0" + react-is "^16.12.0" + +pretty-format@^26.6.2: + version "26.6.2" + resolved "https://registry.npmjs.org/pretty-format/-/pretty-format-26.6.2.tgz#e35c2705f14cb7fe2fe94fa078345b444120fc93" + integrity sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg== + dependencies: + "@jest/types" "^26.6.2" + ansi-regex "^5.0.0" + ansi-styles "^4.0.0" + react-is "^17.0.1" + pretty-quick@1.10.0: version "1.10.0" - resolved "https://registry.yarnpkg.com/pretty-quick/-/pretty-quick-1.10.0.tgz#d86cc46fe92ed8cfcfba6a082ec5949c53858198" + resolved "https://registry.npmjs.org/pretty-quick/-/pretty-quick-1.10.0.tgz#d86cc46fe92ed8cfcfba6a082ec5949c53858198" integrity sha512-uNvm2N3UWmnZRZrClyQI45hIbV20f5BpSyZY51Spbvn4APp9+XLyX4bCjWRGT3fGyVyQ/2/iw7dbQq1UUaq7SQ== dependencies: chalk "^2.3.0" @@ -6319,85 +8923,97 @@ pretty-quick@1.10.0: mri "^1.1.0" multimatch "^3.0.0" -private@^0.1.6: - version "0.1.8" - resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff" - integrity sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg== - process-nextick-args@~2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.0.tgz#a37d732f4271b4ab1ad070d35508e8290788ffaa" - integrity sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw== + version "2.0.1" + resolved "https://registry.npmjs.org/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" + resolved "https://registry.npmjs.org/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" integrity sha1-czIwDoQBYb2j5podHZGn1LwW8YI= -process@~0.5.1: - version "0.5.2" - resolved "https://registry.yarnpkg.com/process/-/process-0.5.2.tgz#1638d8a8e34c2f440a91db95ab9aeb677fc185cf" - integrity sha1-FjjYqONML0QKkduVq5rrZ3/Bhc8= - promise-inflight@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" + resolved "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" integrity sha1-mEcocL8igTL8vdhoEputEsPAKeM= +promise-retry@^1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/promise-retry/-/promise-retry-1.1.1.tgz#6739e968e3051da20ce6497fb2b50f6911df3d6d" + integrity sha1-ZznpaOMFHaIM5kl/srUPaRHfPW0= + dependencies: + err-code "^1.0.0" + retry "^0.10.0" + promise@^7.1.1: version "7.3.1" - resolved "https://registry.yarnpkg.com/promise/-/promise-7.3.1.tgz#064b72602b18f90f29192b8b1bc418ffd1ebd3bf" + resolved "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz#064b72602b18f90f29192b8b1bc418ffd1ebd3bf" integrity sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg== dependencies: asap "~2.0.3" +prompt-sync@^4.1.5: + version "4.2.0" + resolved "https://registry.npmjs.org/prompt-sync/-/prompt-sync-4.2.0.tgz#0198f73c5b70e3b03e4b9033a50540a7c9a1d7f4" + integrity sha512-BuEzzc5zptP5LsgV5MZETjDaKSWfchl5U9Luiu8SKp7iZWD5tZalOxvNcZRwv+d2phNFr8xlbxmFNcRKfJOzJw== + dependencies: + strip-ansi "^5.0.0" + prompts@^2.0.1: - version "2.0.4" - resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.0.4.tgz#179f9d4db3128b9933aa35f93a800d8fce76a682" - integrity sha512-HTzM3UWp/99A0gk51gAegwo1QRYA7xjcZufMNe33rCclFszUYAuHe1fIN/3ZmiHeGPkUsNaRyQm1hHOfM0PKxA== + version "2.4.0" + resolved "https://registry.npmjs.org/prompts/-/prompts-2.4.0.tgz#4aa5de0723a231d1ee9121c40fdf663df73f61d7" + integrity sha512-awZAKrk3vN6CroQukBL+R9051a4R3zCZBlJm/HBfrSZ8iTpYix3VX1vU4mveiLpiwmOJT4wokTF9m6HUk4KqWQ== + dependencies: + kleur "^3.0.3" + sisteransi "^1.0.5" + +promzard@^0.3.0: + version "0.3.0" + resolved "https://registry.npmjs.org/promzard/-/promzard-0.3.0.tgz#26a5d6ee8c7dee4cb12208305acfb93ba382a9ee" + integrity sha1-JqXW7ox97kyxIggwWs+5O6OCqe4= dependencies: - kleur "^3.0.2" - sisteransi "^1.0.0" + read "1" -prop-types@^15.5.8, prop-types@^15.6.2, prop-types@^15.7.2: +prop-types@^15.5.8, prop-types@^15.6.2: version "15.7.2" - resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.7.2.tgz#52c41e75b8c87e72b9d9360e0206b99dcbffa6c5" + resolved "https://registry.npmjs.org/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" -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= +proto-list@~1.2.1: + version "1.2.4" + resolved "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz#212d5bfe1318306a420f6402b8e26ff39647a849" + integrity sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk= + +protocols@^1.1.0, protocols@^1.4.0: + version "1.4.8" + resolved "https://registry.npmjs.org/protocols/-/protocols-1.4.8.tgz#48eea2d8f58d9644a4a32caae5d5db290a075ce8" + integrity sha512-IgjKyaUSjsROSO8/D49Ab7hP8mJgTYcqApOqdPhLoPxAplXmkp+zRvsrSQjFn5by0rhm4VH0GAUELIPpx7B1yg== + +protoduck@^5.0.1: + version "5.0.1" + resolved "https://registry.npmjs.org/protoduck/-/protoduck-5.0.1.tgz#03c3659ca18007b69a50fd82a7ebcc516261151f" + integrity sha512-WxoCeDCoCBY55BMvj4cAEjdVUFGRWed9ZxPlqTKYyw1nDDTQ4pqmnIMAGfJlg7Dx35uB/M+PHJPTmGOvaCaPTg== + dependencies: + genfun "^5.0.0" pseudomap@^1.0.2: version "1.0.2" - resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" + resolved "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" integrity sha1-8FKijacOYYkX7wqKw0wa5aaChrM= -psl@^1.1.24, psl@^1.1.28: - version "1.1.31" - resolved "https://registry.yarnpkg.com/psl/-/psl-1.1.31.tgz#e9aa86d0101b5b105cbe93ac6b784cd547276184" - integrity sha512-/6pt4+C+T+wZUieKR620OpzN/LlnNKuWjy1iFLQ/UG35JqHlR/89MP1d96dUfkf6Dne3TuLQzOYEYshJ+Hx8mw== - -public-encrypt@^4.0.0: - version "4.0.3" - resolved "https://registry.yarnpkg.com/public-encrypt/-/public-encrypt-4.0.3.tgz#4fcc9d77a07e48ba7527e7cbe0de33d0701331e0" - integrity sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q== - dependencies: - bn.js "^4.1.0" - browserify-rsa "^4.0.0" - create-hash "^1.1.0" - parse-asn1 "^5.0.0" - randombytes "^2.0.1" - safe-buffer "^5.1.2" +psl@^1.1.28: + version "1.8.0" + resolved "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz#9326f8bcfb013adcc005fdff056acce020e51c24" + integrity sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ== pump@^2.0.0: version "2.0.1" - resolved "https://registry.yarnpkg.com/pump/-/pump-2.0.1.tgz#12399add6e4cf7526d973cbc8b5ce2e2908b3909" + resolved "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz#12399add6e4cf7526d973cbc8b5ce2e2908b3909" integrity sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA== dependencies: end-of-stream "^1.1.0" @@ -6405,7 +9021,7 @@ pump@^2.0.0: pump@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" + resolved "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== dependencies: end-of-stream "^1.1.0" @@ -6413,146 +9029,140 @@ pump@^3.0.0: pumpify@^1.3.3: version "1.5.1" - resolved "https://registry.yarnpkg.com/pumpify/-/pumpify-1.5.1.tgz#36513be246ab27570b1a374a5ce278bfd74370ce" + resolved "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz#36513be246ab27570b1a374a5ce278bfd74370ce" integrity sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ== dependencies: duplexify "^3.6.0" inherits "^2.0.3" pump "^2.0.0" -punycode@1.3.2: - version "1.3.2" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" - integrity sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0= - -punycode@^1.2.4, punycode@^1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" - integrity sha1-wNWmOycYgArY4esPpSachN1BhF4= - punycode@^2.1.0, punycode@^2.1.1: version "2.1.1" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" + resolved "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== +q@^1.5.1: + version "1.5.1" + resolved "https://registry.npmjs.org/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" + resolved "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA== -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.npmjs.org/quick-lru/-/quick-lru-1.1.0.tgz#4360b17c61136ad38078397ff11416e186dcfbb8" + integrity sha1-Q2CxfGETatOAeDl/8RQW4Ybc+7g= -raf@^3.4.0: - version "3.4.1" - resolved "https://registry.yarnpkg.com/raf/-/raf-3.4.1.tgz#0742e99a4a6552f445d73e3ee0328af0ff1ede39" - integrity sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA== - dependencies: - performance-now "^2.1.0" +quick-lru@^4.0.1: + version "4.0.1" + resolved "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz#5b8878f113a58217848c6482026c73e1ba57727f" + integrity sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g== -railroad-diagrams@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/railroad-diagrams/-/railroad-diagrams-1.0.0.tgz#eb7e6267548ddedfb899c1b90e57374559cddb7e" - integrity sha1-635iZ1SN3t+4mcG5Dlc3RVnN234= +rafz@^0.1.13: + version "0.1.14" + resolved "https://registry.npmjs.org/rafz/-/rafz-0.1.14.tgz#164f01cf7cc6094e08467247ef351ef5c8d278fe" + integrity sha512-YiQkedSt1urYtYbvHhTQR3l67M8SZbUvga5eJFM/v4vx/GmDdtXlE2hjJIyRjhhO/PjcdGC+CXCYOUA4onit8w== -randexp@0.4.6: - version "0.4.6" - resolved "https://registry.yarnpkg.com/randexp/-/randexp-0.4.6.tgz#e986ad5e5e31dae13ddd6f7b3019aa7c87f60ca3" - integrity sha512-80WNmd9DA0tmZrw9qQa62GPPWfuXJknrmVmLcxvq4uZBdYqb1wYoKTmnlGUchvVWe0XiLupYkBoXVOxz3C8DYQ== - dependencies: - discontinuous-range "1.0.0" - ret "~0.1.10" +"rafz@link:packages/shared/node_modules/rafz": + version "0.0.0" + uid "" randomatic@^3.0.0: version "3.1.1" - resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-3.1.1.tgz#b776efc59375984e36c537b2f51a1f0aff0da1ed" + resolved "https://registry.npmjs.org/randomatic/-/randomatic-3.1.1.tgz#b776efc59375984e36c537b2f51a1f0aff0da1ed" integrity sha512-TuDE5KxZ0J461RVjrJZCJc+J+zCkTb1MbH9AQUq68sMhOMcy9jLcb3BrZKgp9q9Ncltdg4QVqWrH02W2EFFVYw== 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.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" - -range-parser@~1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.0.tgz#f49be6b487894ddc40dcc94a322f611092e00d5e" - integrity sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4= - -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" +range-parser@~1.2.1: + version "1.2.1" + resolved "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" + integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== react-clone-referenced-element@^1.0.1: version "1.1.0" - resolved "https://registry.yarnpkg.com/react-clone-referenced-element/-/react-clone-referenced-element-1.1.0.tgz#9cdda7f2aeb54fea791f3ab8c6ab96c7a77d0158" + resolved "https://registry.npmjs.org/react-clone-referenced-element/-/react-clone-referenced-element-1.1.0.tgz#9cdda7f2aeb54fea791f3ab8c6ab96c7a77d0158" integrity sha512-FKOsfKbBkPxYE8576EM6uAfHC4rnMpLyH6/TJUL4WcHUEB3EUn8AxPjnnV/IiwSSzsClvHYK+sDELKN/EJ0WYg== react-deep-force-update@^1.0.0: version "1.1.2" - resolved "https://registry.yarnpkg.com/react-deep-force-update/-/react-deep-force-update-1.1.2.tgz#3d2ae45c2c9040cbb1772be52f8ea1ade6ca2ee1" + resolved "https://registry.npmjs.org/react-deep-force-update/-/react-deep-force-update-1.1.2.tgz#3d2ae45c2c9040cbb1772be52f8ea1ade6ca2ee1" integrity sha512-WUSQJ4P/wWcusaH+zZmbECOk7H5N2pOIl0vzheeornkIMhu+qrNdGFm0bDZLCb0hSF0jf/kH1SgkNGfBdTc4wA== react-devtools-core@^3.4.2: - version "3.6.1" - resolved "https://registry.yarnpkg.com/react-devtools-core/-/react-devtools-core-3.6.1.tgz#51af81ceada65209bbccb8b547a01187cd1cbf04" - integrity sha512-I/LSX+tpeTrGKaF1wXSfJ/kP+6iaP2JfshEjW8LtQBdz6c6HhzOJtjZXhqOUrAdysuey8M1/JgPY1flSVVt8Ig== + version "3.6.3" + resolved "https://registry.npmjs.org/react-devtools-core/-/react-devtools-core-3.6.3.tgz#977d95b684c6ad28205f0c62e1e12c5f16675814" + integrity sha512-+P+eFy/yo8Z/UH9J0DqHZuUM5+RI2wl249TNvMx3J2jpUomLQa4Zxl56GEotGfw3PIP1eI+hVf1s53FlUONStQ== dependencies: shell-quote "^1.6.1" ws "^3.3.1" -react-dom@16.8.1: - version "16.8.1" - resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-16.8.1.tgz#ec860f98853d09d39bafd3a6f1e12389d283dbb4" - integrity sha512-N74IZUrPt6UiDjXaO7UbDDFXeUXnVhZzeRLy/6iqqN1ipfjrhR60Bp5NuBK+rv3GMdqdIuwIl22u1SYwf330bg== +react-dom@^16.12.0: + version "16.14.0" + resolved "https://registry.npmjs.org/react-dom/-/react-dom-16.14.0.tgz#7ad838ec29a777fb3c75c3a190f661cf92ab8b89" + integrity sha512-1gCeQXDLoIqMgqD3IO2Ah9bnf0w9kzhwN5q4FGnHZ67hBm9yePzB5JJAIQCc8x3pFnNlwFq4RidZggNAAkzWWw== dependencies: loose-envify "^1.1.0" object-assign "^4.1.1" prop-types "^15.6.2" - scheduler "^0.13.1" + scheduler "^0.19.1" -react-is@^16.7.0, react-is@^16.8.1, react-is@^16.8.4, react-is@^16.8.6: +react-dom@~16.8.0: version "16.8.6" - resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.8.6.tgz#5bbc1e2d29141c9fbdfed456343fe2bc430a6a16" - integrity sha512-aUk3bHfZ2bRSVFFbbeVS4i+lNPZr3/WM5jT2J5omUVV1zzcs1nAaf3l51ctA5FFvCRbhrH0bdAsRRQddFJZPtA== + resolved "https://registry.npmjs.org/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-dom@~16.9.0: + version "16.9.0" + resolved "https://registry.npmjs.org/react-dom/-/react-dom-16.9.0.tgz#5e65527a5e26f22ae3701131bcccaee9fb0d3962" + integrity sha512-YFT2rxO9hM70ewk9jq0y6sQk8cL02xm4+IzYBz75CQGlClQQ1Bxq0nhHF6OtSbit+AIahujJgb/CPRibFkMNJQ== + dependencies: + loose-envify "^1.1.0" + object-assign "^4.1.1" + prop-types "^15.6.2" + scheduler "^0.15.0" + +react-is@^16.12.0, react-is@^16.8.1, react-is@^16.8.4: + version "16.13.1" + resolved "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" + integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== + +react-is@^17.0.1: + version "17.0.1" + resolved "https://registry.npmjs.org/react-is/-/react-is-17.0.1.tgz#5b3531bd76a645a4c9fb6e693ed36419e3301339" + integrity sha512-NAnt2iGDXohE5LI7uBnLnqvLQMtzhkiAOLXTmv+qnF9Ky7xAPcX8Up/xWIhxvLVGJvuLiNc4xQLtuqDRzb4fSA== -react-konva@^16.8.0: +react-konva@~16.8.0: version "16.8.6" - resolved "https://registry.yarnpkg.com/react-konva/-/react-konva-16.8.6.tgz#0fe7ef2b6c75eeeec71ba9ca9db1829b5889293c" + resolved "https://registry.npmjs.org/react-konva/-/react-konva-16.8.6.tgz#0fe7ef2b6c75eeeec71ba9ca9db1829b5889293c" integrity sha512-6KRIqHyJuTTMuAehDIXvw+ZrtEj2aMc2fwolhmFlg1HBzH4PJimsMByTcEx292Afh9d38TcHdjXP1C58qqDOlg== dependencies: react-reconciler "^0.20.4" scheduler "^0.13.6" -react-native@^0.58.4: +react-layout-effect@^1.0.1: + version "1.0.5" + resolved "https://registry.npmjs.org/react-layout-effect/-/react-layout-effect-1.0.5.tgz#0dc4e24452aee5de66c93c166f0ec512dfb1be80" + integrity sha512-zdRXHuch+OBHU6bvjTelOGUCM+UDr/iCY+c0wXLEAc+G4/FlcJruD/hUOzlKH5XgO90Y/BUJPNhI/g9kl+VAsA== + +react-merge-refs@^1.0.0, react-merge-refs@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/react-merge-refs/-/react-merge-refs-1.1.0.tgz#73d88b892c6c68cbb7a66e0800faa374f4c38b06" + integrity sha512-alTKsjEL0dKH/ru1Iyn7vliS2QRcBp9zZPGoWxUOvRGWPUYgjo+V01is7p04It6KhgrzhJGnIj9GgX8W4bZoCQ== + +react-native@~0.58.0: version "0.58.6" - resolved "https://registry.yarnpkg.com/react-native/-/react-native-0.58.6.tgz#a6d273cd2f51b0e3b141dad5f19622e0000497b3" + resolved "https://registry.npmjs.org/react-native/-/react-native-0.58.6.tgz#a6d273cd2f51b0e3b141dad5f19622e0000497b3" integrity sha512-m/7L0gYXS4yHjs+PKmyurh1LLr7/tpobAX8Iv7Dwu4XT1ZcZFeCATn420E9U3nC2XsT54AmRR2Fv7VGgf+M2vQ== dependencies: "@babel/runtime" "^7.0.0" @@ -6609,89 +9219,180 @@ react-native@^0.58.4: xmldoc "^0.4.0" yargs "^9.0.0" +react-promise-suspense@^0.3.2: + version "0.3.3" + resolved "https://registry.npmjs.org/react-promise-suspense/-/react-promise-suspense-0.3.3.tgz#b085c7e0ac22b85fd3d605b1c4f181cda4310bc9" + integrity sha512-OdehKsCEWYoV6pMcwxbvJH99UrbXylmXJ1QpEL9OfHaUBzcAihyfSJV8jFq325M/wW9iKc/BoiLROXxMul+MxA== + dependencies: + fast-deep-equal "^2.0.1" + react-proxy@^1.1.7: version "1.1.8" - resolved "https://registry.yarnpkg.com/react-proxy/-/react-proxy-1.1.8.tgz#9dbfd9d927528c3aa9f444e4558c37830ab8c26a" + resolved "https://registry.npmjs.org/react-proxy/-/react-proxy-1.1.8.tgz#9dbfd9d927528c3aa9f444e4558c37830ab8c26a" integrity sha1-nb/Z2SdSjDqp9ETkVYw3gwq4wmo= dependencies: lodash "^4.6.1" react-deep-force-update "^1.0.0" -react-reconciler@^0.20.4: - version "0.20.4" - resolved "https://registry.yarnpkg.com/react-reconciler/-/react-reconciler-0.20.4.tgz#3da6a95841592f849cb4edd3d38676c86fd920b2" - integrity sha512-kxERc4H32zV2lXMg/iMiwQHOtyqf15qojvkcZ5Ja2CPkjVohHw9k70pdDBwrnQhLVetUJBSYyqU3yqrlVTOajA== +react-reconciler@0.25.1: + version "0.25.1" + resolved "https://registry.npmjs.org/react-reconciler/-/react-reconciler-0.25.1.tgz#f9814d59d115e1210762287ce987801529363aaa" + integrity sha512-R5UwsIvRcSs3w8n9k3tBoTtUHdVhu9u84EG7E5M0Jk9F5i6DA1pQzPfUZd6opYWGy56MJOtV3VADzy6DRwYDjw== dependencies: loose-envify "^1.1.0" object-assign "^4.1.1" prop-types "^15.6.2" - scheduler "^0.13.6" + scheduler "^0.19.1" -react-test-renderer@16.8.1: - version "16.8.1" - resolved "https://registry.yarnpkg.com/react-test-renderer/-/react-test-renderer-16.8.1.tgz#72845ad9269be526126e97853311982f781767be" - integrity sha512-Bd21TN3+YVl6GZwav6O0T6m5UwGfOj+2+xZH5VH93ToD6M5uclN/c+R1DGX49ueG413KZPUx7Kw3sOYz2aJgfg== +react-reconciler@0.26.1: + version "0.26.1" + resolved "https://registry.yarnpkg.com/react-reconciler/-/react-reconciler-0.26.1.tgz#860952dd359fd870f94895c254271e3a9de3b2d6" + integrity sha512-6E/CvH9zcDmHjhiNJlP0qJ8+3ufnY2b5RWs774Uy8XKWN0l6qfnlkz0XnDacxqj2rbJdq76w9dlFXjPPOQrmqA== dependencies: + loose-envify "^1.1.0" object-assign "^4.1.1" - prop-types "^15.6.2" - react-is "^16.8.1" - scheduler "^0.13.1" + scheduler "^0.20.1" -react-test-renderer@^16.0.0-0: - version "16.8.6" - resolved "https://registry.yarnpkg.com/react-test-renderer/-/react-test-renderer-16.8.6.tgz#188d8029b8c39c786f998aa3efd3ffe7642d5ba1" - integrity sha512-H2srzU5IWYT6cZXof6AhUcx/wEyJddQ8l7cLM/F7gDXYyPr4oq+vCIxJYXVGhId1J706sqziAjuOEjyNkfgoEw== +react-reconciler@^0.20.4: + version "0.20.4" + resolved "https://registry.npmjs.org/react-reconciler/-/react-reconciler-0.20.4.tgz#3da6a95841592f849cb4edd3d38676c86fd920b2" + integrity sha512-kxERc4H32zV2lXMg/iMiwQHOtyqf15qojvkcZ5Ja2CPkjVohHw9k70pdDBwrnQhLVetUJBSYyqU3yqrlVTOajA== dependencies: + loose-envify "^1.1.0" object-assign "^4.1.1" prop-types "^15.6.2" - react-is "^16.8.6" scheduler "^0.13.6" -react-testing-library@5.6.1: - version "5.6.1" - resolved "https://registry.yarnpkg.com/react-testing-library/-/react-testing-library-5.6.1.tgz#fe352198e84275590b7654fc3deb7e20d46120a3" - integrity sha512-e3ssuBrHBh/3D6kBQkkoSfuS1gPpPAQPrwB9H0L8Ktwbv95rRn6VVRl+KlgkkqrkA+9OV+TL6u64IG1LpfrlJQ== - dependencies: - "@babel/runtime" "^7.3.1" - dom-testing-library "^3.13.1" +react-three-fiber@^4.0.0: + version "4.2.21" + resolved "https://registry.npmjs.org/react-three-fiber/-/react-three-fiber-4.2.21.tgz#bb335fee090a44f2ba48762a8c42308c31f4238f" + integrity sha512-lbopEkL36cbAaG/y+iEGT1EFbVaVZBrOe2XGt2+HxsCL8AeWWiQQERo1HYiiqFc4p6DuoNq1hhOSxr1TKQjXuQ== + dependencies: + "@babel/runtime" "^7.9.2" + "@juggle/resize-observer" "^3.1.3" + react-merge-refs "^1.0.0" + react-promise-suspense "^0.3.2" + react-reconciler "0.25.1" + react-use-measure "^2.0.0" + resize-observer-polyfill "^1.5.1" + scheduler "0.19.1" + tiny-emitter "^2.1.0" + utility-types "^3.10.0" react-transform-hmr@^1.0.4: version "1.0.4" - resolved "https://registry.yarnpkg.com/react-transform-hmr/-/react-transform-hmr-1.0.4.tgz#e1a40bd0aaefc72e8dfd7a7cda09af85066397bb" + resolved "https://registry.npmjs.org/react-transform-hmr/-/react-transform-hmr-1.0.4.tgz#e1a40bd0aaefc72e8dfd7a7cda09af85066397bb" integrity sha1-4aQL0Krvxy6N/Xp82gmvhQZjl7s= dependencies: global "^4.3.0" react-proxy "^1.1.7" -react@16.8.1: - version "16.8.1" - resolved "https://registry.yarnpkg.com/react/-/react-16.8.1.tgz#ae11831f6cb2a05d58603a976afc8a558e852c4a" - integrity sha512-wLw5CFGPdo7p/AgteFz7GblI2JPOos0+biSoxf1FPsGxWQZdN/pj6oToJs1crn61DL3Ln7mN86uZ4j74p31ELQ== +react-use-measure@^2.0.0: + version "2.0.3" + resolved "https://registry.npmjs.org/react-use-measure/-/react-use-measure-2.0.3.tgz#7b56ae3ca19ccf62326933678625a8ff6b3f90a3" + integrity sha512-57O8Os9MbgFEHuOHOXNdPmBHhXjCBIwtB3YxyrM/MgaX44a1o97Mu9YqiOA6cAF8kXIw4fO3XK0r2Taa4SqaqQ== + dependencies: + debounce "^1.2.0" + +react-use-measure@^2.0.3: + version "2.0.4" + resolved "https://registry.yarnpkg.com/react-use-measure/-/react-use-measure-2.0.4.tgz#cb675b36eaeaf3681b94d5f5e08b2a1e081fedc9" + integrity sha512-7K2HIGaPMl3Q9ZQiEVjen3tRXl4UDda8LiTPy/QxP8dP2rl5gPBhf7mMH6MVjjRNv3loU7sNzey/ycPNnHVTxQ== + dependencies: + debounce "^1.2.0" + +react-zdog@~1.0.0: + version "1.0.11" + resolved "https://registry.npmjs.org/react-zdog/-/react-zdog-1.0.11.tgz#b43474304b0c8731d0fa84a906c0ece4fb9d9f2b" + integrity sha512-L6/8Zi+Nf+faNMsSZ31HLmLlu6jcbs/jqqFvme7CFnYjAeYfhJ4HyuHKd7Pu/zk9tegv6FaJj1v+hmUwUpKLQw== + dependencies: + "@babel/runtime" "^7.4.4" + lodash-es "^4.17.11" + pointer-events-polyfill "^0.4.4-pre" + react-reconciler "^0.20.4" + resize-observer-polyfill "^1.5.1" + scheduler "0.13.3" + +react@~16.9.0: + version "16.9.0" + resolved "https://registry.npmjs.org/react/-/react-16.9.0.tgz#40ba2f9af13bc1a38d75dbf2f4359a5185c4f7aa" + integrity sha512-+7LQnFBwkiw+BobzOF6N//BdoNw0ouwmSJTEm9cglOOmsg/TMiFHZLe2sEoN5M7LgJTj9oHH0gxklfnQe66S1w== dependencies: loose-envify "^1.1.0" object-assign "^4.1.1" prop-types "^15.6.2" - scheduler "^0.13.1" + +read-cmd-shim@^1.0.1: + version "1.0.5" + resolved "https://registry.npmjs.org/read-cmd-shim/-/read-cmd-shim-1.0.5.tgz#87e43eba50098ba5a32d0ceb583ab8e43b961c16" + integrity sha512-v5yCqQ/7okKoZZkBQUAfTsQ3sVJtXdNfbPnI5cceppoxEVLYA3k+VtV2omkeo8MS94JCy4fSiUwlRBAwCVRPUA== + dependencies: + graceful-fs "^4.1.2" + +"read-package-json@1 || 2", read-package-json@^2.0.0, read-package-json@^2.0.13: + version "2.1.2" + resolved "https://registry.npmjs.org/read-package-json/-/read-package-json-2.1.2.tgz#6992b2b66c7177259feb8eaac73c3acd28b9222a" + integrity sha512-D1KmuLQr6ZSJS0tW8hf3WGpRlwszJOXZ3E8Yd/DNRaM5d+1wVRZdHlpGBLAuovjr28LbWvjpWkBHMxpRGGjzNA== + dependencies: + glob "^7.1.1" + json-parse-even-better-errors "^2.3.0" + normalize-package-data "^2.0.0" + npm-normalize-package-bin "^1.0.0" + +read-package-tree@^5.1.6: + version "5.3.1" + resolved "https://registry.npmjs.org/read-package-tree/-/read-package-tree-5.3.1.tgz#a32cb64c7f31eb8a6f31ef06f9cedf74068fe636" + integrity sha512-mLUDsD5JVtlZxjSlPPx1RETkNjjvQYuweKwNVt1Sn8kP5Jh44pvYuUHCp6xSVDZWbNxVxG5lyZJ921aJH61sTw== + dependencies: + read-package-json "^2.0.0" + readdir-scoped-modules "^1.0.0" + util-promisify "^2.1.0" + +read-pkg-up@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02" + integrity sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI= + 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" + resolved "https://registry.npmjs.org/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@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-4.0.0.tgz#1b221c6088ba7799601c808f91161c66e58f8978" - integrity sha512-6etQSH7nJGsK0RbG/2TeDzZFa8shjQ1um+SwQQ5cwKy0dhSXdOncEhb1CPpvQG4h7FyOV6EB6YlV0yJvZQNAkA== +read-pkg-up@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz#3ed496685dba0f8fe118d0691dc51f4a1ff96f07" + integrity sha1-PtSWaF26D4/hGNBpHcUfSh/5bwc= dependencies: - find-up "^3.0.0" + find-up "^2.0.0" read-pkg "^3.0.0" +read-pkg-up@^7.0.1: + version "7.0.1" + resolved "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz#f3a6135758459733ae2b95638056e1854e7ef507" + integrity sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg== + dependencies: + find-up "^4.1.0" + read-pkg "^5.2.0" + type-fest "^0.8.1" + +read-pkg@^1.0.0: + version "1.1.0" + resolved "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28" + integrity sha1-9f+qXs0pyzHAR0vKfXVra7KePyg= + 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" + resolved "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz#8ef1c0623c6a6db0dc6713c4bfac46332b2368f8" integrity sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg= dependencies: load-json-file "^2.0.0" @@ -6700,7 +9401,7 @@ read-pkg@^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" + resolved "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz#9cbc686978fee65d16c00e2b19c237fcf6e38389" integrity sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k= dependencies: load-json-file "^4.0.0" @@ -6709,17 +9410,34 @@ read-pkg@^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" + resolved "https://registry.npmjs.org/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 || 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== +read-pkg@^5.2.0: + version "5.2.0" + resolved "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz#7bf295438ca5a33e56cd30e053b34ee7250c93cc" + integrity sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg== + dependencies: + "@types/normalize-package-data" "^2.4.0" + normalize-package-data "^2.5.0" + parse-json "^5.0.0" + type-fest "^0.6.0" + +read@1, read@~1.0.1: + version "1.0.7" + resolved "https://registry.npmjs.org/read/-/read-1.0.7.tgz#b3da19bd052431a97671d44a42634adf710b40c4" + integrity sha1-s9oZvQUkMal2cdRKQmNK33ELQMQ= + dependencies: + mute-stream "~0.0.4" + +"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.6, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.6, readable-stream@~2.3.6: + version "2.3.7" + resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" + integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== dependencies: core-util-is "~1.0.0" inherits "~2.0.3" @@ -6729,10 +9447,10 @@ read-pkg@^4.0.1: string_decoder "~1.1.1" util-deprecate "~1.0.1" -readable-stream@^3.1.1: - version "3.2.0" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.2.0.tgz#de17f229864c120a9f56945756e4f32c4045245d" - integrity sha512-RV20kLjdmpZuTF1INEb9IA3L68Nmi+Ri7ppZqo78wj//Pn62fCoJyV9zalccNzDD/OuJpMG4f+pfMl8+L6QdGw== +"readable-stream@2 || 3", readable-stream@3, readable-stream@^3.0.2: + version "3.6.0" + resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" + integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== dependencies: inherits "^2.0.3" string_decoder "^1.1.1" @@ -6748,135 +9466,173 @@ readable-stream@~1.0.31: isarray "0.0.1" string_decoder "~0.10.x" -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== +readdir-scoped-modules@^1.0.0: + version "1.1.0" + resolved "https://registry.npmjs.org/readdir-scoped-modules/-/readdir-scoped-modules-1.1.0.tgz#8d45407b4f870a0dcaebc0e28670d18e74514309" + integrity sha512-asaikDeqAQg7JifRsZn1NJZXo9E+VwlyCfbkZhwyISinqk5zNS6266HS5kah6P0SaQKGF6SkNnZVHUzHFYxYDw== dependencies: - graceful-fs "^4.1.11" - micromatch "^3.1.10" - readable-stream "^2.0.2" + debuglog "^1.0.1" + dezalgo "^1.0.0" + graceful-fs "^4.1.2" + once "^1.3.0" -realpath-native@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/realpath-native/-/realpath-native-1.1.0.tgz#2003294fea23fb0672f2476ebe22fcf498a2d65c" - integrity sha512-wlgPA6cCIIg9gKz0fgAPjnzh4yR/LnXovwuo9hvyGvx3h8nX4+/iLZplfUWasXpqD8BdnGnP5njOFjkUwPzvjA== +realpath-native@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/realpath-native/-/realpath-native-2.0.0.tgz#7377ac429b6e1fd599dc38d08ed942d0d7beb866" + integrity sha512-v1SEYUOXXdbBZK8ZuNgO4TBjamPsiSgcFr0aP+tEKpQZK8vooEUqV6nm6Cv502mX4NF2EfsnVqtNAHG+/6Ur1Q== + +recrawl-sync@^1.2.2: + version "1.2.3" + resolved "https://registry.npmjs.org/recrawl-sync/-/recrawl-sync-1.2.3.tgz#1f5e5aec3439f17b8a01a20e22e360ba6685673e" + integrity sha512-FO5GaJfgsRT3KpGZgV0BJKqm0ZQGZahYtK3BPSau0DFgMGQaJEzMxHe7L29vuWur30jabMzsqE85ovf+aSeAJA== dependencies: - util.promisify "^1.0.0" + "@cush/relative" "^0.1.0" + glob-regex "^0.3.0" + tslib "^1.9.3" -regenerate-unicode-properties@^8.0.2: - version "8.0.2" - resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-8.0.2.tgz#7b38faa296252376d363558cfbda90c9ce709662" - integrity sha512-SbA/iNrBUf6Pv2zU8Ekv1Qbhv92yxL4hiDa2siuxs4KKn4oOoMDHXjAf7+Nz9qinUQ46B1LcWEi/PhJfPWpZWQ== +recrawl@^1.1.1: + version "1.2.3" + resolved "https://registry.npmjs.org/recrawl/-/recrawl-1.2.3.tgz#5b35c83cd47611c4e83a321d76f9c18e83fea140" + integrity sha512-BJjwjefrfI4/OYPrZ+I2SEfSE3+BoIom15KpNYLabNJJ/G0zn/2niS4AILT60aRjqLR4+IucD5YU8D96z32EvQ== + dependencies: + "@cush/relative" "^0.1.0" + glob-regex "^0.3.0" + tslib "^1.9.3" + +redent@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz#cf916ab1fd5f1f16dfb20822dd6ec7f730c2afde" + integrity sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94= + dependencies: + indent-string "^2.1.0" + strip-indent "^1.0.1" + +redent@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/redent/-/redent-2.0.0.tgz#c1b2007b42d57eb1389079b3c8333639d5e1ccaa" + integrity sha1-wbIAe0LVfrE4kHmzyDM2OdXhzKo= + dependencies: + indent-string "^3.0.0" + strip-indent "^2.0.0" + +redent@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz#e557b7998316bb53c9f1f56fa626352c6963059f" + integrity sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg== + dependencies: + indent-string "^4.0.0" + strip-indent "^3.0.0" + +regenerate-unicode-properties@^8.2.0: + version "8.2.0" + resolved "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz#e5de7111d655e7ba60c057dbe9ff37c87e65cdec" + integrity sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA== 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.10.5: - version "0.10.5" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz#336c3efc1220adcedda2c9fab67b5a7955a33658" - integrity sha1-M2w+/BIgrc7dosn6tntaeVWjNlg= + version "1.4.2" + resolved "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz#b9346d8827e8f5a32f7ba29637d398b69014848a" + integrity sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A== regenerator-runtime@^0.11.0: version "0.11.1" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9" + resolved "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9" integrity sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg== -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-runtime@^0.13.4: + version "0.13.7" + resolved "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz#cac2dacc8a1ea675feaabaeb8ae833898ae46f55" + integrity sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew== -regenerator-transform@^0.13.4: - version "0.13.4" - resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.13.4.tgz#18f6763cf1382c69c36df76c6ce122cc694284fb" - integrity sha512-T0QMBjK3J0MtxjPmdIMXm72Wvj2Abb0Bd4HADdfijwMdoIsyQZ6fWC7kDFhk2YinBBEMZDL7Y7wh0J1sGx3S4A== +regenerator-transform@^0.14.2: + version "0.14.5" + resolved "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.5.tgz#c98da154683671c9c4dcb16ece736517e1b7feb4" + integrity sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw== dependencies: - private "^0.1.6" + "@babel/runtime" "^7.8.4" regex-cache@^0.4.2: version "0.4.4" - resolved "https://registry.yarnpkg.com/regex-cache/-/regex-cache-0.4.4.tgz#75bdc58a2a1496cec48a12835bc54c8d562336dd" + resolved "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.4.tgz#75bdc58a2a1496cec48a12835bc54c8d562336dd" integrity sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ== 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" + resolved "https://registry.npmjs.org/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.0: - version "0.1.5" - resolved "https://registry.yarnpkg.com/regexp-tree/-/regexp-tree-0.1.5.tgz#7cd71fca17198d04b4176efd79713f2998009397" - integrity sha512-nUmxvfJyAODw+0B13hj8CFVAxhe7fDEAgJgaotBu3nnR+IgGgZq59YedJP5VYTlkEfqjuK6TuRpnymKdatLZfQ== - -regexpu-core@^4.1.3, 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== +regexpu-core@^4.7.1: + version "4.7.1" + resolved "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.7.1.tgz#2dea5a9a07233298fbf0db91fa9abc4c6e0f8ad6" + integrity sha512-ywH2VUraA44DZQuRKzARmw6S66mr48pQVva4LBeRhcOltJ6hExvWly5ZjFLYo67xbIxb6W1q4bAGtgfEl20zfQ== dependencies: regenerate "^1.4.0" - regenerate-unicode-properties "^8.0.2" - regjsgen "^0.5.0" - regjsparser "^0.6.0" + regenerate-unicode-properties "^8.2.0" + regjsgen "^0.5.1" + regjsparser "^0.6.4" unicode-match-property-ecmascript "^1.0.4" - unicode-match-property-value-ecmascript "^1.1.0" + unicode-match-property-value-ecmascript "^1.2.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== +regjsgen@^0.5.1: + version "0.5.2" + resolved "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.2.tgz#92ff295fb1deecbf6ecdab2543d207e91aa33733" + integrity sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A== -regjsparser@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.6.0.tgz#f1e6ae8b7da2bae96c99399b868cd6c933a2ba9c" - integrity sha512-RQ7YyokLiQBomUJuUG8iGVvkgOLxwyZM8k6d3q5SAXpg4r5TZJZigKFvC6PpD+qQ98bCDC5YelPeA3EucDoNeQ== +regjsparser@^0.6.4: + version "0.6.4" + resolved "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.4.tgz#a769f8684308401a66e9b529d2436ff4d0666272" + integrity sha512-64O87/dPDgfk8/RQqC4gkZoGyyWFIEUTTh80CU6CWuK5vkCGyekIx+oKcEIYtP/RAxSQltCZHCNu/mdd7fqlJw== dependencies: jsesc "~0.5.0" remove-trailing-separator@^1.0.1: version "1.1.0" - resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" + resolved "https://registry.npmjs.org/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" + resolved "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz#782e0d825c0c5a3bb39731f84efee6b742e6b1ce" integrity sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g== repeat-string@^1.5.2, repeat-string@^1.6.1: version "1.6.1" - resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" + resolved "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc= -request-promise-core@1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/request-promise-core/-/request-promise-core-1.1.2.tgz#339f6aababcafdb31c799ff158700336301d3346" - integrity sha512-UHYyq1MO8GsefGEt7EprS8UrXsm1TxEvFUX1IMTuSLU2Rh7fTIdFtl8xD7JiEYiWU2dl+NYAjCTksTehQUxPag== +repeating@^2.0.0: + version "2.0.1" + resolved "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda" + integrity sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo= dependencies: - lodash "^4.17.11" + is-finite "^1.0.0" -request-promise-native@^1.0.5: - version "1.0.7" - resolved "https://registry.yarnpkg.com/request-promise-native/-/request-promise-native-1.0.7.tgz#a49868a624bdea5069f1251d0a836e0d89aa2c59" - integrity sha512-rIMnbBdgNViL37nZ1b3L/VfPOpSi0TqVDQPAvO6U14lMzOLrt5nilxCQqtDKhZeDiW0/hkCXGoQjhgJd/tCh6w== +request-promise-core@1.1.4: + version "1.1.4" + resolved "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.4.tgz#3eedd4223208d419867b78ce815167d10593a22f" + integrity sha512-TTbAfBBRdWD7aNNOoVOBH4pN/KigV6LyapYNNlAPA8JwbovRti1E88m3sYAwsLi5ryhPKsE9APwnjFTgdUjTpw== + dependencies: + lodash "^4.17.19" + +request-promise-native@^1.0.7: + version "1.0.9" + resolved "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.9.tgz#e407120526a5efdc9a39b28a5679bf47b9d9dc28" + integrity sha512-wcW+sIUiWnKgNY0dqCpOZkUbF/I+YPi+f09JZIDa39Ec+q82CpSYniDp+ISgTTbKmnpJWASeJBPZmoxH84wt3g== dependencies: - request-promise-core "1.1.2" + request-promise-core "1.1.4" stealthy-require "^1.1.1" tough-cookie "^2.3.3" -request@^2.87.0: - version "2.88.0" - resolved "https://registry.yarnpkg.com/request/-/request-2.88.0.tgz#9c2fca4f7d35b592efe57c7f0a55e81052124fef" - integrity sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg== +request@^2.87.0, request@^2.88.0: + version "2.88.2" + resolved "https://registry.npmjs.org/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3" + integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw== dependencies: aws-sign2 "~0.7.0" aws4 "^1.8.0" @@ -6885,7 +9641,7 @@ request@^2.87.0: extend "~3.0.2" forever-agent "~0.6.1" form-data "~2.3.2" - har-validator "~5.1.0" + har-validator "~5.1.3" http-signature "~1.2.0" is-typedarray "~1.0.0" isstream "~0.1.2" @@ -6895,52 +9651,95 @@ request@^2.87.0: performance-now "^2.1.0" qs "~6.5.2" safe-buffer "^5.1.2" - tough-cookie "~2.4.3" + tough-cookie "~2.5.0" 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" + resolved "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= 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" + resolved "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1" integrity sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE= -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= +require-main-filename@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" + integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== + +resize-observer-polyfill@^1.5.1: + version "1.5.1" + resolved "https://registry.npmjs.org/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz#0e9020dd3d21024458d4ebd27e23e40269810464" + integrity sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg== + +resolve-cwd@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-2.0.0.tgz#00a9f7387556e27038eae232caa372a6a59b665a" + integrity sha1-AKn3OHVW4nA46uIyyqNypqWbZlo= + dependencies: + resolve-from "^3.0.0" + +resolve-cwd@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d" + integrity sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg== + dependencies: + resolve-from "^5.0.0" + +resolve-dir@^1.0.0, resolve-dir@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz#79a40644c362be82f26effe739c9bb5382046f43" + integrity sha1-eaQGRMNivoLybv/nOcm7U4IEb0M= dependencies: - resolve-from "^3.0.0" + expand-tilde "^2.0.0" + global-modules "^1.0.0" + +resolve-from@5.0.0, resolve-from@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" + integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== resolve-from@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748" + resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748" integrity sha1-six699nWiBvItuZTM17rywoYh0g= +resolve-from@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" + integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== + +resolve-global@1.0.0, resolve-global@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/resolve-global/-/resolve-global-1.0.0.tgz#a2a79df4af2ca3f49bf77ef9ddacd322dad19255" + integrity sha512-zFa12V4OLtT5XUX/Q4VLvTfBf+Ok0SPc1FNGM/z9ctUdiU618qwKpWnd0CHs3+RqROfyEg/DhuHbMWYqcgljEw== + dependencies: + global-dirs "^0.1.1" + resolve-url@^0.2.1: version "0.2.1" - resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" + resolved "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= resolve@1.1.7: version "1.1.7" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" + resolved "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" integrity sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs= -resolve@^1.10.0, resolve@^1.3.2, resolve@^1.5.0, resolve@^1.8.1: - version "1.10.0" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.10.0.tgz#3bdaaeaf45cc07f375656dfd2e54ed0810b101ba" - integrity sha512-3sUr9aq5OfSg2S9pNtPA9hL1FVEAjvfOC4leW0SNf/mpnaakz2a9femSd6LqAww2RaFctwyf1lCqnTHuF1rxDg== +resolve@^1.10.0, resolve@^1.11.0, resolve@^1.14.2, resolve@^1.17.0, resolve@^1.5.0: + version "1.19.0" + resolved "https://registry.npmjs.org/resolve/-/resolve-1.19.0.tgz#1af5bf630409734a067cae29318aac7fa29a267c" + integrity sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg== dependencies: + is-core-module "^2.1.0" 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" + resolved "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf" integrity sha1-n37ih/gv0ybU/RYpI9YhKe7g368= dependencies: onetime "^2.0.0" @@ -6948,175 +9747,141 @@ restore-cursor@^2.0.0: ret@~0.1.10: version "0.1.15" - resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" + resolved "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== -rimraf@2.6.3, rimraf@^2.5.4, rimraf@^2.6.1, rimraf@^2.6.2: +retry@^0.10.0: + version "0.10.1" + resolved "https://registry.npmjs.org/retry/-/retry-0.10.1.tgz#e76388d217992c252750241d3d3956fed98d8ff4" + integrity sha1-52OI0heZLCUnUCQdPTlW/tmNj/Q= + +rimraf@2, rimraf@^2.5.4, rimraf@^2.6.2, rimraf@^2.6.3: + version "2.7.1" + resolved "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" + integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== + dependencies: + glob "^7.1.3" + +rimraf@2.6.3: version "2.6.3" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab" + resolved "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab" integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA== dependencies: glob "^7.1.3" +rimraf@^3.0.0: + version "3.0.2" + resolved "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" + integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== + dependencies: + glob "^7.1.3" + rimraf@~2.2.6: version "2.2.8" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.2.8.tgz#e439be2aaee327321952730f99a8929e4fc50582" + resolved "https://registry.npmjs.org/rimraf/-/rimraf-2.2.8.tgz#e439be2aaee327321952730f99a8929e4fc50582" integrity sha1-5Dm+Kq7jJzIZUnMPmaiSnk/FBYI= -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.3.2: - 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.2.0" - resolved "https://registry.yarnpkg.com/rollup-plugin-commonjs/-/rollup-plugin-commonjs-9.2.0.tgz#4604e25069e0c78a09e08faa95dc32dec27f7c89" - integrity sha512-0RM5U4Vd6iHjL6rLvr3lKBwnPsaVml+qxOGaaNUWN1lSq6S33KhITOfHmvxV3z2vy9Mk4t0g4rNlVaJJsNQPWA== - dependencies: - estree-walker "^0.5.2" - magic-string "^0.25.1" - resolve "^1.8.1" - rollup-pluginutils "^2.3.3" - -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" - integrity sha512-7Ni+/M5RPSUBfUaP9alwYQiIKnKeXCOHiqBpKUl9kwp3jX5ZJtgXAait1cne6pGEVUUztPD6skIKH9Kq9sNtfw== - dependencies: - builtin-modules "^3.0.0" - is-module "^1.0.0" - resolve "^1.8.1" - -rollup-plugin-replace@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/rollup-plugin-replace/-/rollup-plugin-replace-2.1.1.tgz#e49cb8d07d6f91a7bf28b90b66692f2c8c0b9bba" - integrity sha512-IS5ZYBb3px0UfbDCYzKaKxelLd5dbPHhfplEXbymfvGlz9Ok44At4AjTOWe2qEax73bE8+pnMZN9C7PcVpFNlw== - dependencies: - magic-string "^0.25.2" - rollup-pluginutils "^2.4.1" - -rollup-plugin-size-snapshot@0.8.0: - version "0.8.0" - resolved "https://registry.yarnpkg.com/rollup-plugin-size-snapshot/-/rollup-plugin-size-snapshot-0.8.0.tgz#cb094a8e146a969d620335c4f126da8563a1f35c" - integrity sha512-Hb1u15UY5diVjpY2hItjhBjtAQv3O5s24FpyGMLlsxztxqT3mTwz1ArWI0YNxZMUGa1YTr9lrf11YQXC/BeVQQ== - dependencies: - acorn "^6.0.5" - bytes "^3.0.0" - chalk "^2.4.2" - gzip-size "^5.0.0" - jest-diff "^23.6.0" - memory-fs "^0.4.1" - rollup-plugin-replace "^2.1.0" - terser "^3.14.1" - webpack "^4.28.4" - -rollup-plugin-uglify@6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/rollup-plugin-uglify/-/rollup-plugin-uglify-6.0.2.tgz#681042cfdf7ea4e514971946344e1a95bc2772fe" - integrity sha512-qwz2Tryspn5QGtPUowq5oumKSxANKdrnfz7C0jm4lKxvRDsNe/hSGsB9FntUul7UeC4TsZEWKErVgE1qWSO0gw== - dependencies: - "@babel/code-frame" "^7.0.0" - jest-worker "^24.0.0" - serialize-javascript "^1.6.1" - uglify-js "^3.4.9" - -rollup-pluginutils@^2.3.0, rollup-pluginutils@^2.3.3, rollup-pluginutils@^2.4.1: - version "2.5.0" - resolved "https://registry.yarnpkg.com/rollup-pluginutils/-/rollup-pluginutils-2.5.0.tgz#23be0f05ac3972ea7b08fc7870cb91fde5b23a09" - integrity sha512-9Muh1H+XB5f5ONmKMayUoTYR1EZwHbwJJ9oZLrKT5yuTf/RLIQ5mYIGsrERquVucJmjmaAW0Y7+6Qo1Ep+5w3Q== - dependencies: - estree-walker "^0.6.0" - micromatch "^3.1.10" +rollup-plugin-dts@^1.4.11: + version "1.4.14" + resolved "https://registry.npmjs.org/rollup-plugin-dts/-/rollup-plugin-dts-1.4.14.tgz#f049ac5729c1f2618f96a93c4c8bf28e20f1456a" + integrity sha512-H33aGCUbp/Lm+tbkG5gZePnuWvvaafkwh7Uh4RYJs0/ChOfWlENCby1wOn+xBVsCzpV/g/+OVYqgzVjT80dNJg== + optionalDependencies: + "@babel/code-frame" "^7.10.4" -rollup@1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/rollup/-/rollup-1.1.2.tgz#8d094b85683b810d0c05a16bd7618cf70d48eba7" - integrity sha512-OkdMxqMl8pWoQc5D8y1cIinYQPPLV8ZkfLgCzL6SytXeNA2P7UHynEQXI9tYxuAjAMsSyvRaWnyJDLHMxq0XAg== +rollup-plugin-esbuild@^2.5.0: + version "2.6.1" + resolved "https://registry.npmjs.org/rollup-plugin-esbuild/-/rollup-plugin-esbuild-2.6.1.tgz#5785532940d49adf1bff5b38e9bd9089262d4e7a" + integrity sha512-hskMEQQ4Vxlyoeg1OWlFTwWHIhpNaw6q+diOT7p9pdkk34m9Mbk3aymS/JbTqLXy/AbJi22iuXrucknKpeczfg== dependencies: - "@types/estree" "0.0.39" - "@types/node" "*" - acorn "^6.0.5" + "@rollup/pluginutils" "^4.1.0" + joycon "^2.2.5" + strip-json-comments "^3.1.1" -rst-selector-parser@^2.2.3: - version "2.2.3" - resolved "https://registry.yarnpkg.com/rst-selector-parser/-/rst-selector-parser-2.2.3.tgz#81b230ea2fcc6066c89e3472de794285d9b03d91" - integrity sha1-gbIw6i/MYGbInjRy3nlChdmwPZE= - dependencies: - lodash.flattendeep "^4.4.0" - nearley "^2.7.10" +rollup@^2.7.6: + version "2.35.1" + resolved "https://registry.npmjs.org/rollup/-/rollup-2.35.1.tgz#e6bc8d10893556a638066f89e8c97f422d03968c" + integrity sha512-q5KxEyWpprAIcainhVy6HfRttD9kutQpHbeqDTWnqAFNJotiojetK6uqmcydNMymBEtC4I8bCYR+J3mTMqeaUA== + optionalDependencies: + fsevents "~2.1.2" rsvp@^3.3.3: version "3.6.2" - resolved "https://registry.yarnpkg.com/rsvp/-/rsvp-3.6.2.tgz#2e96491599a96cde1b515d5674a8f7a91452926a" + resolved "https://registry.npmjs.org/rsvp/-/rsvp-3.6.2.tgz#2e96491599a96cde1b515d5674a8f7a91452926a" integrity sha512-OfWGQTb9vnwRjwtA2QwpG2ICclHC3pgXZO5xt8H2EfgDquO0qVdSb5T88L4qJVAEugbS56pAuV4XZM58UX8ulw== rsvp@^4.8.4: - version "4.8.4" - resolved "https://registry.yarnpkg.com/rsvp/-/rsvp-4.8.4.tgz#b50e6b34583f3dd89329a2f23a8a2be072845911" - integrity sha512-6FomvYPfs+Jy9TfXmBpBuMWNH94SgCsZmJKcanySzgNNP6LjWxBvyLTa9KaMfDDM5oxRfrKDB0r/qeRsLwnBfA== + version "4.8.5" + resolved "https://registry.npmjs.org/rsvp/-/rsvp-4.8.5.tgz#c8f155311d167f68f21e168df71ec5b083113734" + integrity sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA== 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" + version "2.4.1" + resolved "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455" + integrity sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ== run-node@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/run-node/-/run-node-1.0.0.tgz#46b50b946a2aa2d4947ae1d886e9856fd9cabe5e" + resolved "https://registry.npmjs.org/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" + resolved "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz#e848396f057d223f24386924618e25694161ec47" integrity sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec= dependencies: aproba "^1.1.1" rx-lite-aggregates@^4.0.8: version "4.0.8" - resolved "https://registry.yarnpkg.com/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz#753b87a89a11c95467c4ac1626c4efc4e05c67be" + resolved "https://registry.npmjs.org/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz#753b87a89a11c95467c4ac1626c4efc4e05c67be" integrity sha1-dTuHqJoRyVRnxKwWJsTvxOBcZ74= dependencies: rx-lite "*" rx-lite@*, rx-lite@^4.0.8: version "4.0.8" - resolved "https://registry.yarnpkg.com/rx-lite/-/rx-lite-4.0.8.tgz#0b1e11af8bc44836f04a6407e92da42467b79444" + resolved "https://registry.npmjs.org/rx-lite/-/rx-lite-4.0.8.tgz#0b1e11af8bc44836f04a6407e92da42467b79444" integrity sha1-Cx4Rr4vESDbwSmQH6S2kJGe3lEQ= -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: +rxjs@^6.4.0: + version "6.6.3" + resolved "https://registry.npmjs.org/rxjs/-/rxjs-6.6.3.tgz#8ca84635c4daa900c0d3967a6ee7ac60271ee552" + integrity sha512-trsQc+xYYXZ3urjOiJOuCOa5N3jAZ3eiSpQB5hIT8zGlL2QfnHLJ2r7GMkBGuIausdJN1OneaI6gQlsqNHHmZQ== + dependencies: + tslib "^1.9.0" + +sade@^1.6.1: + version "1.7.4" + resolved "https://registry.npmjs.org/sade/-/sade-1.7.4.tgz#ea681e0c65d248d2095c90578c03ca0bb1b54691" + integrity sha512-y5yauMD93rX840MwUJr7C1ysLFBgMspsdTo4UVrDg3fXDvtwOyIqykhVAAm6fk/3au77773itJStObgK+LKaiA== + dependencies: + mri "^1.1.0" + +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" + resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== +safe-buffer@^5.0.1, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@~5.2.0: + version "5.2.1" + resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== + safe-regex@^1.1.0: version "1.1.0" - resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" + resolved "https://registry.npmjs.org/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: +"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0", 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" + resolved "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== sane@^3.0.0: version "3.1.0" - resolved "https://registry.yarnpkg.com/sane/-/sane-3.1.0.tgz#995193b7dc1445ef1fe41ddfca2faf9f111854c6" + resolved "https://registry.npmjs.org/sane/-/sane-3.1.0.tgz#995193b7dc1445ef1fe41ddfca2faf9f111854c6" integrity sha512-G5GClRRxT1cELXfdAq7UKtUsv8q/ZC5k8lQGmjEm4HcAl3HzBy68iglyNCmw4+0tiXPCBZntslHlRhbnsSws+Q== dependencies: anymatch "^2.0.0" @@ -7133,7 +9898,7 @@ sane@^3.0.0: sane@^4.0.3: version "4.1.0" - resolved "https://registry.yarnpkg.com/sane/-/sane-4.1.0.tgz#ed881fd922733a6c461bc189dc2b6c006f3ffded" + resolved "https://registry.npmjs.org/sane/-/sane-4.1.0.tgz#ed881fd922733a6c461bc189dc2b6c006f3ffded" integrity sha512-hhbzAgTIX8O7SHfp2c8/kREfEn4qO/9q8C9beyY6+tvZ87EpoZ3i1RIEvp27YBswnNbY9mWd6paKVmKbAgLfZA== dependencies: "@cnakazawa/watch" "^1.0.3" @@ -7146,47 +9911,106 @@ sane@^4.0.3: minimist "^1.1.1" walker "~1.0.5" -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== - sax@~1.1.1: version "1.1.6" - resolved "https://registry.yarnpkg.com/sax/-/sax-1.1.6.tgz#5d616be8a5e607d54e114afae55b7eaf2fcc3240" + resolved "https://registry.npmjs.org/sax/-/sax-1.1.6.tgz#5d616be8a5e607d54e114afae55b7eaf2fcc3240" integrity sha1-XWFr6KXmB9VOEUr65Vt+ry/MMkA= -scheduler@^0.13.1, scheduler@^0.13.6: +saxes@^3.1.9: + version "3.1.11" + resolved "https://registry.npmjs.org/saxes/-/saxes-3.1.11.tgz#d59d1fd332ec92ad98a2e0b2ee644702384b1c5b" + integrity sha512-Ydydq3zC+WYDJK1+gRxRapLIED9PWeSuuS41wqyoRmzvhhh9nc+QQrVMKJYzJFULazeGhzSV0QleN2wD3boh2g== + dependencies: + xmlchars "^2.1.1" + +saxon@^0.1.15: + version "0.1.18" + resolved "https://registry.npmjs.org/saxon/-/saxon-0.1.18.tgz#fbedb05150ae2e4f307202efc84e9e7ad48f88a1" + integrity sha512-JMdJjBJCSquNY7Glyl+FNMQyZhbny6wKta8KE5PWrEbU5oB2FfONbtBPHlMOXJrFc9FqUYBJ9QsavygJW1QiBg== + dependencies: + graceful-fs "^4.1.11" + +scheduler@0.13.3: + version "0.13.3" + resolved "https://registry.npmjs.org/scheduler/-/scheduler-0.13.3.tgz#bed3c5850f62ea9c716a4d781f9daeb9b2a58896" + integrity sha512-UxN5QRYWtpR1egNWzJcVLk8jlegxAugswQc984lD3kU7NuobsO37/sRfbpTdBjtnD5TBNFA2Q2oLV5+UmPSmEQ== + dependencies: + loose-envify "^1.1.0" + object-assign "^4.1.1" + +scheduler@0.19.1, scheduler@^0.19.1: + version "0.19.1" + resolved "https://registry.npmjs.org/scheduler/-/scheduler-0.19.1.tgz#4f3e2ed2c1a7d65681f4c854fa8c5a1ccb40f196" + integrity sha512-n/zwRWRYSUj0/3g/otKDRPMh6qv2SYMWNq85IEa8iZyAv8od9zDYpGSnpBEjNgcMNq6Scbu5KfIPxNF72R/2EA== + dependencies: + loose-envify "^1.1.0" + object-assign "^4.1.1" + +scheduler@0.20.1, scheduler@^0.20.1: + version "0.20.1" + resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.20.1.tgz#da0b907e24026b01181ecbc75efdc7f27b5a000c" + integrity sha512-LKTe+2xNJBNxu/QhHvDR14wUXHRQbVY5ZOYpOGWRzhydZUqrLb2JBvLPY7cAqFmqrWuDED0Mjk7013SZiOz6Bw== + dependencies: + loose-envify "^1.1.0" + object-assign "^4.1.1" + +scheduler@^0.13.6: version "0.13.6" - resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.13.6.tgz#466a4ec332467b31a91b9bf74e5347072e4cd889" + resolved "https://registry.npmjs.org/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@^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== +scheduler@^0.15.0: + version "0.15.0" + resolved "https://registry.npmjs.org/scheduler/-/scheduler-0.15.0.tgz#6bfcf80ff850b280fed4aeecc6513bc0b4f17f8e" + integrity sha512-xAefmSfN6jqAa7Kuq7LIJY0bwAPG3xlCj0HMEBQk1lxYiDKZscY2xJ5U/61ZTrYbmNQbXa+gc7czPkVo11tnCg== dependencies: - ajv "^6.1.0" - ajv-errors "^1.0.0" - ajv-keywords "^3.1.0" + 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" + resolved "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz#0dee216a1c941ab37e9efb1788f6afc5ff5537fc" integrity sha1-De4hahyUGrN+nvsXiPavxf9VN/w= -"semver@2 || 3 || 4 || 5", semver@^5.0.3, semver@^5.1.0, 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@2 || 3 || 4 || 5", "semver@2.x || 3.x || 4 || 5", semver@^5.0.3, semver@^5.1.0, semver@^5.4.1, semver@^5.5.0, semver@^5.5.1, semver@^5.6.0, semver@^5.7.0: + version "5.7.1" + resolved "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" + integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== + +semver@7.0.0: + version "7.0.0" + resolved "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e" + integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A== + +semver@7.3.2: + version "7.3.2" + resolved "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz#604962b052b81ed0786aae84389ffba70ffd3938" + integrity sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ== + +semver@^6.0.0, semver@^6.3.0: + version "6.3.0" + resolved "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" + integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== + +semver@^7.3.2: + version "7.3.4" + resolved "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz#27aaa7d2e4ca76452f98d3add093a72c943edc97" + integrity sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw== + dependencies: + lru-cache "^6.0.0" + +semver@~5.3.0: + version "5.3.0" + resolved "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f" + integrity sha1-myzl094C0XxgEq0yaqa00M9U+U8= -send@0.16.2: - version "0.16.2" - resolved "https://registry.yarnpkg.com/send/-/send-0.16.2.tgz#6ecca1e0f8c156d141597559848df64730a6bbc1" - integrity sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw== +send@0.17.1: + version "0.17.1" + resolved "https://registry.npmjs.org/send/-/send-0.17.1.tgz#c1d8b059f7900f7466dd4938bdc44e11ddb376c8" + integrity sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg== dependencies: debug "2.6.9" depd "~1.1.2" @@ -7195,91 +10019,80 @@ send@0.16.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" + http-errors "~1.7.2" + mime "1.6.0" + ms "2.1.1" on-finished "~2.3.0" - range-parser "~1.2.0" - statuses "~1.4.0" + range-parser "~1.2.1" + statuses "~1.5.0" serialize-error@^2.1.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/serialize-error/-/serialize-error-2.1.0.tgz#50b679d5635cdf84667bdc8e59af4e5b81d5f60a" + resolved "https://registry.npmjs.org/serialize-error/-/serialize-error-2.1.0.tgz#50b679d5635cdf84667bdc8e59af4e5b81d5f60a" integrity sha1-ULZ51WNc34Rme9yOWa9OW4HV9go= -serialize-javascript@^1.4.0, serialize-javascript@^1.6.1: - version "1.6.1" - resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-1.6.1.tgz#4d1f697ec49429a847ca6f442a2a755126c4d879" - integrity sha512-A5MOagrPFga4YaKQSWHryl7AXvbQkEqpw4NNYMTNYUNV51bA8ABHgYFpqKx+YFFrw59xMV1qGH1R4AgoNIVgCw== - serve-static@^1.13.1: - version "1.13.2" - resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.13.2.tgz#095e8472fd5b46237db50ce486a43f4b86c6cec1" - integrity sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw== + version "1.14.1" + resolved "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz#666e636dc4f010f7ef29970a88a674320898b2f9" + integrity sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg== dependencies: encodeurl "~1.0.2" escape-html "~1.0.3" - parseurl "~1.3.2" - send "0.16.2" + parseurl "~1.3.3" + send "0.17.1" 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" + resolved "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= -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== +set-value@^2.0.0, set-value@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/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: +setimmediate@^1.0.5: version "1.0.5" - resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" + resolved "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" integrity sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU= -setprototypeof@1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656" - integrity sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ== - -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" +setprototypeof@1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz#7e95acb24aa92f5885e0abef5ba131330d4ae683" + integrity sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw== shebang-command@^1.2.0: version "1.2.0" - resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" + resolved "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo= dependencies: shebang-regex "^1.0.0" +shebang-command@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" + integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== + dependencies: + shebang-regex "^3.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" + resolved "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= -shell-quote@1.6.1, shell-quote@^1.6.1: +shebang-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" + integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== + +shell-quote@1.6.1: version "1.6.1" - resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.6.1.tgz#f4781949cce402697127430ea3b3c5476f481767" + resolved "https://registry.npmjs.org/shell-quote/-/shell-quote-1.6.1.tgz#f4781949cce402697127430ea3b3c5476f481767" integrity sha1-9HgZSczkAmlxJ0MOo7PFR29IF2c= dependencies: array-filter "~0.0.0" @@ -7287,43 +10100,107 @@ shell-quote@1.6.1, shell-quote@^1.6.1: array-reduce "~0.0.0" jsonify "~0.0.0" +shell-quote@^1.6.1: + version "1.7.2" + resolved "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.2.tgz#67a7d02c76c9da24f99d20808fcaded0e0e04be2" + integrity sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg== + shellwords@^0.1.1: version "0.1.1" - resolved "https://registry.yarnpkg.com/shellwords/-/shellwords-0.1.1.tgz#d6b9181c1a48d397324c84871efbcfc73fc0654b" + resolved "https://registry.npmjs.org/shellwords/-/shellwords-0.1.1.tgz#d6b9181c1a48d397324c84871efbcfc73fc0654b" integrity sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww== +should-equal@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/should-equal/-/should-equal-2.0.0.tgz#6072cf83047360867e68e98b09d71143d04ee0c3" + integrity sha512-ZP36TMrK9euEuWQYBig9W55WPC7uo37qzAEmbjHz4gfyuXrEUgF8cUvQVO+w+d3OMfPvSRQJ22lSm8MQJ43LTA== + dependencies: + should-type "^1.4.0" + +should-format@^3.0.3: + version "3.0.3" + resolved "https://registry.npmjs.org/should-format/-/should-format-3.0.3.tgz#9bfc8f74fa39205c53d38c34d717303e277124f1" + integrity sha1-m/yPdPo5IFxT04w01xcwPidxJPE= + dependencies: + should-type "^1.3.0" + should-type-adaptors "^1.0.1" + +should-type-adaptors@^1.0.1: + version "1.1.0" + resolved "https://registry.npmjs.org/should-type-adaptors/-/should-type-adaptors-1.1.0.tgz#401e7f33b5533033944d5cd8bf2b65027792e27a" + integrity sha512-JA4hdoLnN+kebEp2Vs8eBe9g7uy0zbRo+RMcU0EsNy+R+k049Ki+N5tT5Jagst2g7EAja+euFuoXFCa8vIklfA== + dependencies: + should-type "^1.3.0" + should-util "^1.0.0" + +should-type@^1.3.0, should-type@^1.4.0: + version "1.4.0" + resolved "https://registry.npmjs.org/should-type/-/should-type-1.4.0.tgz#0756d8ce846dfd09843a6947719dfa0d4cff5cf3" + integrity sha1-B1bYzoRt/QmEOmlHcZ36DUz/XPM= + +should-util@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/should-util/-/should-util-1.0.1.tgz#fb0d71338f532a3a149213639e2d32cbea8bcb28" + integrity sha512-oXF8tfxx5cDk8r2kYqlkUJzZpDBqVY/II2WhvU0n9Y3XYvAYRmeaf1PvvIvTgPnv4KJ+ES5M0PyDq5Jp+Ygy2g== + +should@^13.2.3: + version "13.2.3" + resolved "https://registry.npmjs.org/should/-/should-13.2.3.tgz#96d8e5acf3e97b49d89b51feaa5ae8d07ef58f10" + integrity sha512-ggLesLtu2xp+ZxI+ysJTmNjh2U0TsC+rQ/pfED9bUZZ4DKefP27D+7YJVVTvKsmjLpIi9jAa7itwDGkDDmt1GQ== + dependencies: + should-equal "^2.0.0" + should-format "^3.0.3" + should-type "^1.4.0" + should-type-adaptors "^1.0.1" + should-util "^1.0.0" + 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= + version "3.0.3" + resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" + integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA== simple-plist@^0.2.1: version "0.2.1" - resolved "https://registry.yarnpkg.com/simple-plist/-/simple-plist-0.2.1.tgz#71766db352326928cf3a807242ba762322636723" + resolved "https://registry.npmjs.org/simple-plist/-/simple-plist-0.2.1.tgz#71766db352326928cf3a807242ba762322636723" integrity sha1-cXZts1IyaSjPOoByQrp2IyJjZyM= dependencies: bplist-creator "0.0.7" bplist-parser "0.1.1" plist "2.0.1" -sisteransi@^1.0.0: +sisteransi@^1.0.5: + version "1.0.5" + resolved "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed" + integrity sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg== + +slash@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.0.tgz#77d9622ff909080f1c19e5f4a1df0c1b0a27b88c" - integrity sha512-N+z4pHB4AmUv0SjveWRd6q1Nj5w62m5jodv+GD8lvmbY/83T/rpbJGZOnK5T149OldDj4Db07BSv9xY4K6NTPQ== + resolved "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55" + integrity sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU= slash@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/slash/-/slash-2.0.0.tgz#de552851a1759df3a8f206535442f5ec4ddeab44" + resolved "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz#de552851a1759df3a8f206535442f5ec4ddeab44" integrity sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A== -slide@^1.1.5: +slash@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" + integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== + +slide@^1.1.5, slide@^1.1.6: version "1.1.6" - resolved "https://registry.yarnpkg.com/slide/-/slide-1.1.6.tgz#56eb027d65b4d2dce6cb2e2d32c4d4afc9e1d707" + resolved "https://registry.npmjs.org/slide/-/slide-1.1.6.tgz#56eb027d65b4d2dce6cb2e2d32c4d4afc9e1d707" integrity sha1-VusCfWW00tzmyy4tMsTUr8nh1wc= +smart-buffer@^4.1.0: + version "4.1.0" + resolved "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.1.0.tgz#91605c25d91652f4661ea69ccf45f1b331ca21ba" + integrity sha512-iVICrxOzCynf/SNaBQCw34eM9jROU/s5rzIhpOvzhzuYHfJR/DhZfDkXiZSgKXfgv26HT3Yni3AV/DGw0cGnnw== + snapdragon-node@^2.0.1: version "2.1.1" - resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" + resolved "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" integrity sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw== dependencies: define-property "^1.0.0" @@ -7332,14 +10209,14 @@ snapdragon-node@^2.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" + resolved "https://registry.npmjs.org/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" + resolved "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d" integrity sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg== dependencies: base "^0.11.1" @@ -7351,91 +10228,146 @@ snapdragon@^0.8.1: source-map-resolve "^0.5.0" use "^3.1.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== +socks-proxy-agent@^4.0.0: + version "4.0.2" + resolved "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-4.0.2.tgz#3c8991f3145b2799e70e11bd5fbc8b1963116386" + integrity sha512-NT6syHhI9LmuEMSK6Kd2V7gNv5KFZoLE7V5udWmn0de+3Mkj3UMA/AJPLyeNUVmElCurSHtUdM3ETpR3z770Wg== + dependencies: + agent-base "~4.2.1" + socks "~2.3.2" -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== +socks@~2.3.2: + version "2.3.3" + resolved "https://registry.npmjs.org/socks/-/socks-2.3.3.tgz#01129f0a5d534d2b897712ed8aceab7ee65d78e3" + integrity sha512-o5t52PCNtVdiOvzMry7wU4aOqYWL0PeCXRWBEiJow4/i/wr+wpsJQ9awEu1EonLIqsfGd5qSgDdxEOvCdmBEpA== + dependencies: + ip "1.1.5" + smart-buffer "^4.1.0" + +sort-keys@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/sort-keys/-/sort-keys-2.0.0.tgz#658535584861ec97d730d6cf41822e1f56684128" + integrity sha1-ZYU1WEhh7JfXMNbPQYIuH1ZoQSg= + dependencies: + is-plain-obj "^1.0.0" + +sort-object-keys@^1.1.2: + version "1.1.3" + resolved "https://registry.npmjs.org/sort-object-keys/-/sort-object-keys-1.1.3.tgz#bff833fe85cab147b34742e45863453c1e190b45" + integrity sha512-855pvK+VkU7PaKYPc+Jjnmt4EzejQHyhhF33q31qG8x7maDzkeFhAAThdCYay11CISO+qAMwjOBP+fPZe0IPyg== + +sort-package-json@1.22.1: + version "1.22.1" + resolved "https://registry.npmjs.org/sort-package-json/-/sort-package-json-1.22.1.tgz#384ce7a098cd13be4109800d5ce2f0cf7826052e" + integrity sha512-uVINQraFQvnlzNHFnQOT4MYy0qonIEzKwhrI2yrTiQjNo5QF4h3ffrnCk7a95QAwoK/RdkO/w8W9tJIcaOWC7g== + dependencies: + detect-indent "^5.0.0" + sort-object-keys "^1.1.2" + +source-map-resolve@^0.5.0, source-map-resolve@^0.5.2: + version "0.5.3" + resolved "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz#190866bece7553e1f8f267a2ee82c606b5509a1a" + integrity sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw== dependencies: - atob "^2.1.1" + atob "^2.1.2" 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.6, source-map-support@^0.5.9, source-map-support@~0.5.10: - version "0.5.11" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.11.tgz#efac2ce0800355d026326a0ca23e162aeac9a4e2" - integrity sha512-//sajEx/fGL3iw6fltKMdPvy8kL3kJ2O3iuYlRoT3k9Kb4BjOoZ+BZzaNHeuaruSt+Kf3Zk9tnfAQg9/AJqUVQ== +source-map-support@^0.5.16, source-map-support@^0.5.6: + version "0.5.19" + resolved "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz#a98b62f86dcaf4f67399648c085291ab9e8fed61" + integrity sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw== 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" + resolved "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3" integrity sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM= 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" + resolved "https://registry.npmjs.org/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" + resolved "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== +source-map@^0.7.3: + version "0.7.3" + resolved "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383" + integrity sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ== + 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== + version "1.4.8" + resolved "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz#ea804bd94857402e6992d05a38ef1ae35a9ab4c4" + integrity sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA== 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== + version "3.1.1" + resolved "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz#dece81ac9c1e6713e5f7d1b6f17d468fa53d89a9" + integrity sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w== 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== + version "2.3.0" + resolved "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz#3f28ce1a77a00372683eade4a433183527a2163d" + integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A== 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== + version "3.0.1" + resolved "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679" + integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== dependencies: spdx-exceptions "^2.1.0" spdx-license-ids "^3.0.0" spdx-license-ids@^3.0.0: - version "3.0.3" - resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.3.tgz#81c0ce8f21474756148bbb5f3bfc0f36bf15d76e" - integrity sha512-uBIcIl3Ih6Phe3XHK1NqboJLdGfwr1UN3k6wSD1dZpmPsIkb8AGNbZYJ1fOBk834+Gxy8rpfDxrS6XLEMZMY2g== + version "3.0.7" + resolved "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.7.tgz#e9c18a410e5ed7e12442a549fbd8afa767038d65" + integrity sha512-U+MTEOO0AiDzxwFvoa4JVnMV6mZlJKk2sBLt90s7G0Gd0Mlknc7kxEn3nuDPNZRta7O2uy8oLcZLVT+4sqNZHQ== + +spec.ts@1.1.3: + version "1.1.3" + resolved "https://registry.npmjs.org/spec.ts/-/spec.ts-1.1.3.tgz#2951ed40a984386fdd5bb287719e67a1ceaafff1" + integrity sha512-xDzHAwbHqe9OIHT1c+pnVpVuYSHNC5vk51aFKKoql2aH1RCzHplkd7MoSV7uLfzgm3GmlfpAfwLtfH2T3lQMmw== 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" + resolved "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" integrity sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw== dependencies: extend-shallow "^3.0.0" +split2@^2.0.0: + version "2.2.0" + resolved "https://registry.npmjs.org/split2/-/split2-2.2.0.tgz#186b2575bcf83e85b7d18465756238ee4ee42493" + integrity sha512-RAb22TG39LhI31MbreBgIuKiIKhVsawfTgEGqKHTK87aG+ul/PB8Sqoi3I7kVdRWiCfrKxK3uo4/YUkpNvhPbw== + dependencies: + through2 "^2.0.2" + +split@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/split/-/split-1.0.1.tgz#605bd9be303aa59fb35f9229fbea0ddec9ea07d9" + integrity sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg== + dependencies: + through "2" + sprintf-js@~1.0.2: version "1.0.3" - resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" + resolved "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= sshpk@^1.7.0: version "1.16.1" - resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.16.1.tgz#fb661c0bef29b39db40769ee39fa70093d6f6877" + resolved "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz#fb661c0bef29b39db40769ee39fa70093d6f6877" integrity sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg== dependencies: asn1 "~0.2.3" @@ -7448,99 +10380,82 @@ sshpk@^1.7.0: safer-buffer "^2.0.2" tweetnacl "~0.14.0" -ssri@^6.0.1: +ssri@^6.0.0, ssri@^6.0.1: version "6.0.1" - resolved "https://registry.yarnpkg.com/ssri/-/ssri-6.0.1.tgz#2a3c41b28dd45b62b63676ecb74001265ae9edd8" + resolved "https://registry.npmjs.org/ssri/-/ssri-6.0.1.tgz#2a3c41b28dd45b62b63676ecb74001265ae9edd8" integrity sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA== dependencies: figgy-pudding "^3.5.1" stack-utils@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-1.0.2.tgz#33eba3897788558bebfc2db059dc158ec36cebb8" - integrity sha512-MTX+MeG5U994cazkjd/9KNAapsHnibjMLnfXodlkXw76JEea0UiNzrqidzo1emMwk7w5Qhc9jd4Bn9TBb1MFwA== + version "1.0.4" + resolved "https://registry.npmjs.org/stack-utils/-/stack-utils-1.0.4.tgz#4b600971dcfc6aed0cbdf2a8268177cc916c87c8" + integrity sha512-IPDJfugEGbfizBwBZRZ3xpccMdRyP5lqsBWXGQWimVjua/ccLCeMOAVjlc1R7LxFjo5sEDhyNIXd8mo/AiDS9w== + dependencies: + escape-string-regexp "^2.0.0" stacktrace-parser@^0.1.3: - version "0.1.4" - resolved "https://registry.yarnpkg.com/stacktrace-parser/-/stacktrace-parser-0.1.4.tgz#01397922e5f62ecf30845522c95c4fe1d25e7d4e" - integrity sha1-ATl5IuX2Ls8whFUiyVxP4dJefU4= + version "0.1.10" + resolved "https://registry.npmjs.org/stacktrace-parser/-/stacktrace-parser-0.1.10.tgz#29fb0cae4e0d0b85155879402857a1639eb6051a" + integrity sha512-KJP1OCML99+8fhOHxwwzyWrlUuVX5GQ0ZpJTd1DFXhdkrvg1szxfHhawXUZ3g9TkXORQd4/WG68jMlQZ2p8wlg== + dependencies: + type-fest "^0.7.1" static-extend@^0.1.1: version "0.1.2" - resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" + resolved "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" integrity sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY= dependencies: define-property "^0.2.5" object-copy "^0.1.0" -"statuses@>= 1.4.0 < 2": +"statuses@>= 1.5.0 < 2", statuses@~1.5.0: version "1.5.0" - resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" + resolved "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow= -statuses@~1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.3.1.tgz#faf51b9eb74aaef3b3acf4ad5f61abf24cb7b93e" - integrity sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4= - -statuses@~1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.4.0.tgz#bb73d446da2796106efcc1b601a253d6c46bd087" - integrity sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew== - stealthy-require@^1.1.1: version "1.1.1" - resolved "https://registry.yarnpkg.com/stealthy-require/-/stealthy-require-1.1.1.tgz#35b09875b4ff49f26a777e509b3090a3226bf24b" + resolved "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz#35b09875b4ff49f26a777e509b3090a3226bf24b" integrity sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks= -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-buffers@~2.2.0: version "2.2.0" - resolved "https://registry.yarnpkg.com/stream-buffers/-/stream-buffers-2.2.0.tgz#91d5f5130d1cef96dcfa7f726945188741d09ee4" + resolved "https://registry.npmjs.org/stream-buffers/-/stream-buffers-2.2.0.tgz#91d5f5130d1cef96dcfa7f726945188741d09ee4" integrity sha1-kdX1Ew0c75bc+n9yaUUYh0HQnuQ= stream-each@^1.1.0: version "1.2.3" - resolved "https://registry.yarnpkg.com/stream-each/-/stream-each-1.2.3.tgz#ebe27a0c389b04fbcc233642952e10731afa9bae" + resolved "https://registry.npmjs.org/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= + version "1.0.1" + resolved "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz#d7088281559ab2778424279b0877da3c392d5a3d" + integrity sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ== string-length@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/string-length/-/string-length-2.0.0.tgz#d40dbb686a3ace960c1cffca562bf2c45f8363ed" + resolved "https://registry.npmjs.org/string-length/-/string-length-2.0.0.tgz#d40dbb686a3ace960c1cffca562bf2c45f8363ed" integrity sha1-1A27aGo6zpYMHP/KVivyxF+DY+0= dependencies: astral-regex "^1.0.0" strip-ansi "^4.0.0" +string-length@^3.1.0: + version "3.1.0" + resolved "https://registry.npmjs.org/string-length/-/string-length-3.1.0.tgz#107ef8c23456e187a8abd4a61162ff4ac6e25837" + integrity sha512-Ttp5YvkGm5v9Ijagtaz1BnN+k9ObpvS0eIBblPMp2YWL8FBmi9qblQ9fexc2k/CXFgrTIteU3jAw3payCnwSTA== + dependencies: + astral-regex "^1.0.0" + strip-ansi "^5.2.0" + string-width@^1.0.1: version "1.0.2" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" + resolved "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" integrity sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M= dependencies: code-point-at "^1.0.0" @@ -7549,36 +10464,52 @@ string-width@^1.0.1: "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" + resolved "https://registry.npmjs.org/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.prototype.padend@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/string.prototype.padend/-/string.prototype.padend-3.0.0.tgz#f3aaef7c1719f170c5eab1c32bf780d96e21f2f0" - integrity sha1-86rvfBcZ8XDF6rHDK/eA2W4h8vA= +string-width@^3.0.0, string-width@^3.1.0: + version "3.1.0" + resolved "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" + integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== dependencies: - define-properties "^1.1.2" - es-abstract "^1.4.3" - function-bind "^1.0.2" + emoji-regex "^7.0.1" + is-fullwidth-code-point "^2.0.0" + strip-ansi "^5.1.0" -string.prototype.trim@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.1.2.tgz#d04de2c89e137f4d7d206f086b5ed2fae6be8cea" - integrity sha1-0E3iyJ4Tf019IG8Ia17S+ua+jOo= +string-width@^4.1.0, string-width@^4.2.0: + version "4.2.0" + resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz#952182c46cc7b2c313d1596e623992bd163b72b5" + integrity sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg== dependencies: - define-properties "^1.1.2" - es-abstract "^1.5.0" - function-bind "^1.0.2" + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.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" - integrity sha512-6YqyX6ZWEYguAxgZzHGL7SsCeGx3V2TtOTqZz1xSTSWnqsbWwbptafNyvf/ACquZUXV3DANr5BDIwNYe1mN42w== +string.prototype.trimend@^1.0.1: + version "1.0.3" + resolved "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.3.tgz#a22bd53cca5c7cf44d7c9d5c732118873d6cd18b" + integrity sha512-ayH0pB+uf0U28CtjlLvL7NaohvR1amUvVZk+y3DYb0Ey2PUV5zPkkKy9+U1ndVEIXO8hNg18eIv9Jntbii+dKw== dependencies: - safe-buffer "~5.1.0" + call-bind "^1.0.0" + define-properties "^1.1.3" + +string.prototype.trimstart@^1.0.1: + version "1.0.3" + resolved "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.3.tgz#9b4cb590e123bb36564401d59824298de50fd5aa" + integrity sha512-oBIBUy5lea5tt0ovtOFiEQaBkoBBkyJhZXzJYrSmDo5IUUqbOPvVezuRs/agBIdZ2p2Eo1FD6bD9USyBLfl3xg== + dependencies: + call-bind "^1.0.0" + define-properties "^1.1.3" + +string_decoder@^1.1.1: + version "1.3.0" + resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" + integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== + dependencies: + safe-buffer "~5.2.0" string_decoder@~0.10.x: version "0.10.31" @@ -7587,200 +10518,322 @@ string_decoder@~0.10.x: string_decoder@~1.1.1: version "1.1.1" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" + resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== dependencies: safe-buffer "~5.1.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" + resolved "https://registry.npmjs.org/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" + resolved "https://registry.npmjs.org/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.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" + resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== dependencies: ansi-regex "^4.1.0" +strip-ansi@^6.0.0: + version "6.0.0" + resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532" + integrity sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w== + dependencies: + ansi-regex "^5.0.0" + +strip-bom@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e" + integrity sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4= + dependencies: + is-utf8 "^0.2.0" + strip-bom@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" + resolved "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM= +strip-bom@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz#9c3505c1db45bcedca3d9cf7a16f5c5aa3901878" + integrity sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w== + strip-eof@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" + resolved "https://registry.npmjs.org/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= +strip-final-newline@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" + integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== + +strip-indent@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz#0c7962a6adefa7bbd4ac366460a638552ae1a0a2" + integrity sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI= + dependencies: + get-stdin "^4.0.1" + +strip-indent@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/strip-indent/-/strip-indent-2.0.0.tgz#5ef8db295d01e6ed6cbf7aab96998d7822527b68" + integrity sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g= + +strip-indent@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz#c32e1cee940b6b3432c771bc2c54bcce73cd3001" + integrity sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ== + dependencies: + min-indent "^1.0.0" + +strip-json-comments@^3.1.1: + version "3.1.1" + resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" + integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== + +strong-log-transformer@^2.0.0: + version "2.1.0" + resolved "https://registry.npmjs.org/strong-log-transformer/-/strong-log-transformer-2.1.0.tgz#0f5ed78d325e0421ac6f90f7f10e691d6ae3ae10" + integrity sha512-B3Hgul+z0L9a236FAUC9iZsL+nVHgoCJnqCbN588DjYxvGXaXaaFbfmQ/JhvKjZwsOukuR72XbHv71Qkug0HxA== + dependencies: + duplexer "^0.1.1" + minimist "^1.2.0" + through "^2.3.4" supports-color@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" + resolved "https://registry.npmjs.org/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" + resolved "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== dependencies: has-flag "^3.0.0" -supports-color@^6.0.0, supports-color@^6.1.0: +supports-color@^6.1.0: version "6.1.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.1.0.tgz#0764abc69c63d5ac842dd4867e8d025e880df8f3" + resolved "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz#0764abc69c63d5ac842dd4867e8d025e880df8f3" integrity sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ== dependencies: has-flag "^3.0.0" +supports-color@^7.0.0, supports-color@^7.1.0: + version "7.2.0" + resolved "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" + integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== + dependencies: + has-flag "^4.0.0" + +supports-hyperlinks@^2.0.0: + version "2.1.0" + resolved "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.1.0.tgz#f663df252af5f37c5d49bbd7eeefa9e0b9e59e47" + integrity sha512-zoE5/e+dnEijk6ASB6/qrK+oYdm2do1hjoLWrqUC/8WEIW1gbxFcKuBof7sW8ArN6e+AYvsE8HBGiVRWL/F5CA== + dependencies: + has-flag "^4.0.0" + supports-color "^7.0.0" + symbol-tree@^3.2.2: - version "3.2.2" - resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.2.tgz#ae27db38f660a7ae2e1c3b7d1bc290819b8519e6" - integrity sha1-rifbOPZgp64uHDt9G8KQgZuFGeY= + version "3.2.4" + resolved "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2" + integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw== -tapable@^1.0.0, tapable@^1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.1.tgz#4d297923c5a72a42360de2ab52dadfaaec00018e" - integrity sha512-9I2ydhj8Z9veORCw5PRm4u9uebCn0mcCa6scWoNcbZ6dAtoo2618u9UUzxgmsCOreJpqDDuv61LvwofW7hLcBA== +tabtab@3.0.2: + version "3.0.2" + resolved "https://registry.npmjs.org/tabtab/-/tabtab-3.0.2.tgz#a2cea0f1035f88d145d7da77eaabbd3fe03e1ec9" + integrity sha512-jANKmUe0sIQc/zTALTBy186PoM/k6aPrh3A7p6AaAfF6WPSbTx1JYeGIGH162btpH+mmVEXln+UxwViZHO2Jhg== + dependencies: + debug "^4.0.1" + es6-promisify "^6.0.0" + inquirer "^6.0.0" + minimist "^1.2.0" + mkdirp "^0.5.1" + untildify "^3.0.3" -tar@^4: - version "4.4.8" - resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.8.tgz#b19eec3fde2a96e64666df9fdb40c5ca1bc3747d" - integrity sha512-LzHF64s5chPQQS0IYBn9IN5h3i98c12bo4NCO7e0sGM2llXQ3p2FGC5sdENN4cTW48O915Sh+x+EXx7XW96xYQ== +tar@^4.4.10, tar@^4.4.8: + version "4.4.13" + resolved "https://registry.npmjs.org/tar/-/tar-4.4.13.tgz#43b364bc52888d555298637b10d60790254ab525" + integrity sha512-w2VwSrBoHa5BsSyH+KxEqeQBAllHhccyMFVHtGtdMpF4W7IRWfZjFiQceJPChOeTsSDVUpER2T8FA93pr0L+QA== dependencies: chownr "^1.1.1" fs-minipass "^1.2.5" - minipass "^2.3.4" - minizlib "^1.1.1" + minipass "^2.8.6" + minizlib "^1.2.1" mkdirp "^0.5.0" safe-buffer "^5.1.2" - yallist "^3.0.2" + yallist "^3.0.3" + +temp-dir@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/temp-dir/-/temp-dir-1.0.0.tgz#0a7c0ea26d3a39afa7e0ebea9c1fc0bc4daa011d" + integrity sha1-CnwOom06Oa+n4OvqnB/AvE2qAR0= + +temp-write@^3.4.0: + version "3.4.0" + resolved "https://registry.npmjs.org/temp-write/-/temp-write-3.4.0.tgz#8cff630fb7e9da05f047c74ce4ce4d685457d492" + integrity sha1-jP9jD7fp2gXwR8dM5M5NaFRX1JI= + dependencies: + graceful-fs "^4.1.2" + is-stream "^1.1.0" + make-dir "^1.0.0" + pify "^3.0.0" + temp-dir "^1.0.0" + uuid "^3.0.1" temp@0.8.3: version "0.8.3" - resolved "https://registry.yarnpkg.com/temp/-/temp-0.8.3.tgz#e0c6bc4d26b903124410e4fed81103014dfc1f59" + resolved "https://registry.npmjs.org/temp/-/temp-0.8.3.tgz#e0c6bc4d26b903124410e4fed81103014dfc1f59" integrity sha1-4Ma8TSa5AxJEEOT+2BEDAU38H1k= dependencies: os-tmpdir "^1.0.0" rimraf "~2.2.6" -terser-webpack-plugin@^1.1.0: - version "1.2.3" - resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-1.2.3.tgz#3f98bc902fac3e5d0de730869f50668561262ec8" - integrity sha512-GOK7q85oAb/5kE12fMuLdn2btOS9OBZn4VsecpHDywoUC/jLhSAKOiYo0ezx7ss2EXPMzyEWFoE0s1WLE+4+oA== - 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.16.1" - webpack-sources "^1.1.0" - worker-farm "^1.5.2" - -terser@^3.14.1, terser@^3.16.1: - version "3.17.0" - resolved "https://registry.yarnpkg.com/terser/-/terser-3.17.0.tgz#f88ffbeda0deb5637f9d24b0da66f4e15ab10cb2" - integrity sha512-/FQzzPJmCpjAH9Xvk2paiWrFq+5M6aVOf+2KRbwhByISDX/EujxsK+BAvrhb6H+2rtrLCHK9N01wO014vrIwVQ== +terminal-link@^2.0.0: + version "2.1.1" + resolved "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz#14a64a27ab3c0df933ea546fba55f2d078edc994" + integrity sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ== dependencies: - commander "^2.19.0" - source-map "~0.6.1" - source-map-support "~0.5.10" + ansi-escapes "^4.2.1" + supports-hyperlinks "^2.0.0" -test-exclude@^5.0.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-5.1.0.tgz#6ba6b25179d2d38724824661323b73e03c0c1de1" - integrity sha512-gwf0S2fFsANC55fSeSqpb8BYk6w3FDvwZxfNjeF6FRgvFa43r+7wRiA/Q0IxoRU37wB/LE8IQ4221BsNucTaCA== +test-exclude@^6.0.0: + version "6.0.0" + resolved "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz#04a8698661d805ea6fa293b6cb9e63ac044ef15e" + integrity sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w== dependencies: - arrify "^1.0.1" + "@istanbuljs/schema" "^0.1.2" + glob "^7.1.4" minimatch "^3.0.4" - read-pkg-up "^4.0.0" - require-main-filename "^1.0.1" -throat@^4.0.0, throat@^4.1.0: +text-extensions@^1.0.0: + version "1.9.0" + resolved "https://registry.npmjs.org/text-extensions/-/text-extensions-1.9.0.tgz#1853e45fee39c945ce6f6c36b2d659b5aabc2a26" + integrity sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ== + +three@^0.115.0: + version "0.115.0" + resolved "https://registry.npmjs.org/three/-/three-0.115.0.tgz#540d800c381b9da2334c024f0fbe4d23f84eb05e" + integrity sha512-mAV2Ky3RdcbdSbR9capI+tKLvRldWYxd4151PZTT/o7+U2jh9Is3a4KmnYwzyUAhB2ZA3pXSgCd2DOY4Tj5kow== + +three@^0.126.1: + version "0.126.1" + resolved "https://registry.yarnpkg.com/three/-/three-0.126.1.tgz#cf4e4e52060fd952f6f0d5440cbd422c66bc4be7" + integrity sha512-eOEXnZeE1FDV0XgL1u08auIP13jxdN9LQBAEmlErYzMxtIIfuGIAZbijOyookALUhqVzVOx0Tywj6n192VM+nQ== + +throat@^4.1.0: version "4.1.0" - resolved "https://registry.yarnpkg.com/throat/-/throat-4.1.0.tgz#89037cbc92c56ab18926e6ba4cbb200e15672a6a" + resolved "https://registry.npmjs.org/throat/-/throat-4.1.0.tgz#89037cbc92c56ab18926e6ba4cbb200e15672a6a" integrity sha1-iQN8vJLFarGJJua6TLsgDhVnKmo= -through2@^2.0.0, through2@^2.0.1: +throat@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/throat/-/throat-5.0.0.tgz#c5199235803aad18754a667d659b5e72ce16764b" + integrity sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA== + +through2@^2.0.0, through2@^2.0.1, through2@^2.0.2: version "2.0.5" - resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" + resolved "https://registry.npmjs.org/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: +through2@^3.0.0: + version "3.0.2" + resolved "https://registry.npmjs.org/through2/-/through2-3.0.2.tgz#99f88931cfc761ec7678b41d5d7336b5b6a07bf4" + integrity sha512-enaDQ4MUyP2W6ZyT6EsMzqBPZaM/avg8iuo+l2d3QCs0J+6RaqkHV/2/lOwDTueBHeJ/2LG9lrLW3d5rWPucuQ== + dependencies: + inherits "^2.0.4" + readable-stream "2 || 3" + +through2@^4.0.0: + version "4.0.2" + resolved "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz#a7ce3ac2a7a8b0b966c80e7c49f0484c3b239764" + integrity sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw== + dependencies: + readable-stream "3" + +through@2, "through@>=2.2.7 <3", through@^2.3.4, through@^2.3.6: version "2.3.8" - resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" + resolved "https://registry.npmjs.org/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= +tildify@1.2.0: + version "1.2.0" + resolved "https://registry.npmjs.org/tildify/-/tildify-1.2.0.tgz#dcec03f55dca9b7aa3e5b04f21817eb56e63588a" + integrity sha1-3OwD9V3Km3qj5bBPIYF+tW5jWIo= + dependencies: + os-homedir "^1.0.0" + +tildify@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/tildify/-/tildify-2.0.0.tgz#f205f3674d677ce698b7067a99e949ce03b4754a" + integrity sha512-Cc+OraorugtXNfs50hU9KS369rFXCfgGLpfCfvlc+Ud5u6VWmUQsOAa9HbTvheQdYnrdJqqv1e5oIqXppMYnSw== + time-stamp@^1.0.0: version "1.1.0" - resolved "https://registry.yarnpkg.com/time-stamp/-/time-stamp-1.1.0.tgz#764a5a11af50561921b133f3b44e618687e0f5c3" + resolved "https://registry.npmjs.org/time-stamp/-/time-stamp-1.1.0.tgz#764a5a11af50561921b133f3b44e618687e0f5c3" integrity sha1-dkpaEa9QVhkhsTPztE5hhofg9cM= -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" +tiny-emitter@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/tiny-emitter/-/tiny-emitter-2.1.0.tgz#1d1a56edfc51c43e863cbb5382a72330e3555423" + integrity sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q== tmp@^0.0.33: version "0.0.33" - resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" + resolved "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== 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" + resolved "https://registry.npmjs.org/tmpl/-/tmpl-1.0.4.tgz#23640dd7b42d00433911140820e5cf440e521dd1" integrity sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE= -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" + resolved "https://registry.npmjs.org/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" + resolved "https://registry.npmjs.org/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" + resolved "https://registry.npmjs.org/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.npmjs.org/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" + resolved "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce" integrity sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw== dependencies: define-property "^2.0.2" @@ -7788,374 +10841,426 @@ to-regex@^3.0.1, to-regex@^3.0.2: regex-not "^1.0.2" safe-regex "^1.1.0" -tough-cookie@^2.3.3, tough-cookie@^2.3.4: +toidentifier@1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553" + integrity sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw== + +tough-cookie@^2.3.3, tough-cookie@~2.5.0: version "2.5.0" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2" + resolved "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2" integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g== 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" - integrity sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ== +tough-cookie@^3.0.1: + version "3.0.1" + resolved "https://registry.npmjs.org/tough-cookie/-/tough-cookie-3.0.1.tgz#9df4f57e739c26930a018184887f4adb7dca73b2" + integrity sha512-yQyJ0u4pZsv9D4clxO69OEjLWYw+jbgspjTue4lTQZLfV0c5l1VmK2y1JK8E9ahdpltPOaAThPcp5nKPUgSnsg== dependencies: - psl "^1.1.24" - punycode "^1.4.1" + ip-regex "^2.1.0" + psl "^1.1.28" + punycode "^2.1.1" tr46@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/tr46/-/tr46-1.0.1.tgz#a8b13fd6bfd2489519674ccde55ba3693b706d09" + resolved "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz#a8b13fd6bfd2489519674ccde55ba3693b706d09" integrity sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk= dependencies: punycode "^2.1.0" -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-newlines@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz#5887966bb582a4503a41eb524f7d35011815a613" + integrity sha1-WIeWa7WCpFA6QetST301ARgVphM= -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== +trim-newlines@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/trim-newlines/-/trim-newlines-2.0.0.tgz#b403d0b91be50c331dfc4b82eeceb22c3de16d20" + integrity sha1-tAPQuRvlDDMd/EuC7s6yLD3hbSA= -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= +trim-newlines@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.0.tgz#79726304a6a898aa8373427298d54c2ee8b1cb30" + integrity sha512-C4+gOpvmxaSMKuEf9Qc134F1ZuOHVXKRbtEflf4NTtuuJDEIJ9p5PXsalL8SkeRw+qit1Mo+yuvMPAKwWg/1hA== + +trim-off-newlines@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/trim-off-newlines/-/trim-off-newlines-1.0.1.tgz#9f9ba9d9efa8764c387698bcbfeb2c848f11adb3" + integrity sha1-n5up2e+odkw4dpi8v+sshI8RrbM= + +tslib@^1.9.0, tslib@^1.9.3: + version "1.14.1" + resolved "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" + integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== tunnel-agent@^0.6.0: version "0.6.0" - resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" + resolved "https://registry.npmjs.org/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" + resolved "https://registry.npmjs.org/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" + resolved "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" integrity sha1-WITKtRLPHTVeP7eE8wgEsrUg23I= dependencies: prelude-ls "~1.1.2" +type-detect@4.0.8: + version "4.0.8" + resolved "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" + integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== + +type-fest@^0.11.0: + version "0.11.0" + resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.11.0.tgz#97abf0872310fed88a5c466b25681576145e33f1" + integrity sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ== + +type-fest@^0.18.0: + version "0.18.1" + resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz#db4bc151a4a2cf4eebf9add5db75508db6cc841f" + integrity sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw== + +type-fest@^0.6.0: + version "0.6.0" + resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz#8d2a2370d3df886eb5c90ada1c5bf6188acf838b" + integrity sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg== + +type-fest@^0.7.1: + version "0.7.1" + resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.7.1.tgz#8dda65feaf03ed78f0a3f9678f1869147f7c5c48" + integrity sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg== + +type-fest@^0.8.1: + version "0.8.1" + resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" + integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== + +typedarray-to-buffer@^3.1.5: + version "3.1.5" + resolved "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080" + integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q== + dependencies: + is-typedarray "^1.0.0" + typedarray@^0.0.6: version "0.0.6" - resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" + resolved "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= -typescript@3.3.3: - version "3.3.3" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.3.3.tgz#f1657fc7daa27e1a8930758ace9ae8da31403221" - integrity sha512-Y21Xqe54TBVp+VDSNbuDYdGw0BpoR/Q6wo/+35M8PAU0vipahnyduJWirxxdxjsAkS7hue53x2zp8gz7F05u0A== +typescript-rewrite-paths@^1.2.0: + version "1.2.0" + resolved "https://registry.npmjs.org/typescript-rewrite-paths/-/typescript-rewrite-paths-1.2.0.tgz#0c90cb7de90da787cd669bea42ecb70e3ab18f4d" + integrity sha512-4rYNw8He/RFQttZKrnkU8PVTPfRaOUYBGuT/oKQZY0/xLSELV6UrAgFRLOcGn2icLuxWcQa7eZnNHXo03nzU9w== + dependencies: + magic-string "^0.25.2" + +typescript@^4.0.0: + version "4.1.3" + resolved "https://registry.npmjs.org/typescript/-/typescript-4.1.3.tgz#519d582bd94cba0cf8934c7d8e8467e473f53bb7" + integrity sha512-B3ZIOf1IKeH2ixgHhj6la6xdwR9QrLC5d1VKeCSY4tvkqhF2eqd9O7txNlS0PO3GrBAFIdr3L1ndNwteUbZLYg== ua-parser-js@^0.7.18: - version "0.7.19" - resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.19.tgz#94151be4c0a7fb1d001af7022fdaca4642659e4b" - integrity sha512-T3PVJ6uz8i0HzPxOF9SWzWAlfN/DavlpQqepn22xgve/5QecC+XMCAtmUNnY7C9StehaV6exjUCI801lOI7QlQ== + version "0.7.23" + resolved "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.23.tgz#704d67f951e13195fbcd3d78818577f5bc1d547b" + integrity sha512-m4hvMLxgGHXG3O3fQVAyyAQpZzDOvwnhOTjYz5Xmr7r/+LpkNy3vJXdVRWgd1TkAb7NGROZuSy96CrlNVjA7KA== uglify-es@^3.1.9: version "3.3.9" - resolved "https://registry.yarnpkg.com/uglify-es/-/uglify-es-3.3.9.tgz#0c1c4f0700bed8dbc124cdb304d2592ca203e677" + resolved "https://registry.npmjs.org/uglify-es/-/uglify-es-3.3.9.tgz#0c1c4f0700bed8dbc124cdb304d2592ca203e677" integrity sha512-r+MU0rfv4L/0eeW3xZrd16t4NZfK8Ld4SWVglYBb7ez5uXFWHuVRs6xCTrf1yirs9a4j4Y27nn7SRfO6v67XsQ== dependencies: commander "~2.13.0" source-map "~0.6.1" uglify-js@^3.1.4: - version "3.13.1" - resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.13.1.tgz#2749d4b8b5b7d67460b4a418023ff73c3fefa60a" - integrity sha512-EWhx3fHy3M9JbaeTnO+rEqzCe1wtyQClv6q3YWq0voOj4E+bMZBErVS1GAHPDiRGONYq34M1/d8KuQMgvi6Gjw== + version "3.12.2" + resolved "https://registry.npmjs.org/uglify-js/-/uglify-js-3.12.2.tgz#c7ae89da0ed1bb58999c7fce07190b347fdbdaba" + integrity sha512-rWYleAvfJPjduYCt+ELvzybNah/zIkRteGXIBO8X0lteRZPGladF61hFi8tU7qKTsF7u6DUQCtT9k00VlFOgkg== -uglify-js@^3.4.9: - version "3.5.2" - resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.5.2.tgz#dc0c7ac2da0a4b7d15e84266818ff30e82529474" - integrity sha512-imog1WIsi9Yb56yRt5TfYVxGmnWs3WSGU73ieSOlMVFwhJCA9W8fqFFMMj4kgDqiS/80LGdsYnWL7O9UcjEBlg== - dependencies: - commander "~2.19.0" - source-map "~0.6.1" +uid-number@0.0.6: + version "0.0.6" + resolved "https://registry.npmjs.org/uid-number/-/uid-number-0.0.6.tgz#0ea10e8035e8eb5b8e4449f06da1c730663baa81" + integrity sha1-DqEOgDXo61uOREnwbaHHMGY7qoE= ultron@1.0.x: version "1.0.2" - resolved "https://registry.yarnpkg.com/ultron/-/ultron-1.0.2.tgz#ace116ab557cd197386a4e88f4685378c8b2e4fa" + resolved "https://registry.npmjs.org/ultron/-/ultron-1.0.2.tgz#ace116ab557cd197386a4e88f4685378c8b2e4fa" integrity sha1-rOEWq1V80Zc4ak6I9GhTeMiy5Po= ultron@~1.1.0: version "1.1.1" - resolved "https://registry.yarnpkg.com/ultron/-/ultron-1.1.1.tgz#9fe1536a10a664a65266a1e3ccf85fd36302bc9c" + resolved "https://registry.npmjs.org/ultron/-/ultron-1.1.1.tgz#9fe1536a10a664a65266a1e3ccf85fd36302bc9c" integrity sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og== +umask@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/umask/-/umask-1.1.0.tgz#f29cebf01df517912bb58ff9c4e50fde8e33320d" + integrity sha1-8pzr8B31F5ErtY/5xOUP3o4zMg0= + 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" + resolved "https://registry.npmjs.org/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" + resolved "https://registry.npmjs.org/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-match-property-value-ecmascript@^1.2.0: + version "1.2.0" + resolved "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz#0d91f600eeeb3096aa962b1d6fc88876e64ea531" + integrity sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ== 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== + version "1.1.0" + resolved "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz#dd57a99f6207bedff4628abefb94c50db941c8f4" + integrity sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg== 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= + version "1.0.1" + resolved "https://registry.npmjs.org/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 "^0.4.3" + set-value "^2.0.1" unique-filename@^1.1.1: version "1.1.1" - resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-1.1.1.tgz#1d69769369ada0583103a1e6ae87681b56573230" + resolved "https://registry.npmjs.org/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.1" - resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-2.0.1.tgz#5e9edc6d1ce8fb264db18a507ef9bd8544451ca6" - integrity sha512-n9cU6+gITaVu7VGj1Z8feKMmfAjEAQGhwD9fE3zvpRRa0wEIx8ODYkVGfSc94M2OX00tUFV8wH3zYbm1I8mxFg== + version "2.0.2" + resolved "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz#baabce91083fc64e945b0f3ad613e264f7cd4e6c" + integrity sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w== dependencies: imurmurhash "^0.1.4" +universal-user-agent@^4.0.0: + version "4.0.1" + resolved "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-4.0.1.tgz#fd8d6cb773a679a709e967ef8288a31fcc03e557" + integrity sha512-LnST3ebHwVL2aNe4mejI9IQh2HfZ1RLo8Io2HugSif8ekzD1TlWpHpColOB/eh8JHMLkGH3Akqf040I+4ylNxg== + dependencies: + os-name "^3.1.0" + +universal-user-agent@^6.0.0: + version "6.0.0" + resolved "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.0.tgz#3381f8503b251c0d9cd21bc1de939ec9df5480ee" + integrity sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w== + +universalify@^0.1.0: + version "0.1.2" + resolved "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" + integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== + +universalify@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/universalify/-/universalify-1.0.0.tgz#b61a1da173e8435b2fe3c67d29b9adf8594bd16d" + integrity sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug== + +universalify@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717" + integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== + unpipe@~1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" + resolved "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw= unset-value@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" + resolved "https://registry.npmjs.org/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== +untildify@^3.0.3: + version "3.0.3" + resolved "https://registry.npmjs.org/untildify/-/untildify-3.0.3.tgz#1e7b42b140bcfd922b22e70ca1265bfe3634c7c9" + integrity sha512-iSk/J8efr8uPT/Z4eSUywnqyrQU7DSdMfdqK4iWEaUVVmcP5JcnpRqmVMwcwcnmI1ATFNgC5V90u09tBynNFKA== + +untildify@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/untildify/-/untildify-4.0.0.tgz#2bc947b953652487e4600949fb091e3ae8cd919b" + integrity sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw== 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== + version "4.4.0" + resolved "https://registry.npmjs.org/uri-js/-/uri-js-4.4.0.tgz#aa714261de793e8a82347a7bcc9ce74e86f28602" + integrity sha512-B0yRTzYdUCCn9n+F4+Gh4yIDtMQcaJsmYBDsTSG8g/OejKBodLQ2IHfN3bM7jUsRXndopT7OIXWdYqc1fjmV6g== 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" + resolved "https://registry.npmjs.org/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= +use-asset@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/use-asset/-/use-asset-1.0.2.tgz#d98a506ba480d113639de60631f89907794ead84" + integrity sha512-ewqcm1+SmRIpIhanbP2Kdt03u7IQfxGixi3dq2AP90GK5J0fFXBeSp4hO43tx3HG5AXvh6U4hQ00x4JXr5Dhiw== dependencies: - punycode "1.3.2" - querystring "0.2.0" + fast-deep-equal "^3.1.3" use@^3.1.0: version "3.1.1" - resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" + resolved "https://registry.npmjs.org/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" + resolved "https://registry.npmjs.org/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== +util-promisify@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/util-promisify/-/util-promisify-2.1.0.tgz#3c2236476c4d32c5ff3c47002add7c13b9a82a53" + integrity sha1-PCI2R2xNMsX/PEcAKt18E7moKlM= 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" - 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" +utility-types@^3.10.0: + version "3.10.0" + resolved "https://registry.npmjs.org/utility-types/-/utility-types-3.10.0.tgz#ea4148f9a741015f05ed74fd615e1d20e6bed82b" + integrity sha512-O11mqxmi7wMKCo6HKFt5AhO4BwY3VV68YU07tgxfz8zJTIxr4BpsezN49Ffwy9j3ZpwwJp4fkRwjRzq3uWE6Rg== utils-merge@1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" + resolved "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM= -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== +uuid@^3.0.1, uuid@^3.3.2: + version "3.4.0" + resolved "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" + integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== + +v8-to-istanbul@^4.1.3: + version "4.1.4" + resolved "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-4.1.4.tgz#b97936f21c0e2d9996d4985e5c5156e9d4e49cd6" + integrity sha512-Rw6vJHj1mbdK8edjR7+zuJrpDtKIgNdAvTSAcpYfgMIw+u2dPDntD3dgN4XQFLU2/fvFQdzj+EeSGfd/jnY5fQ== + dependencies: + "@types/istanbul-lib-coverage" "^2.0.1" + convert-source-map "^1.6.0" + source-map "^0.7.3" -validate-npm-package-license@^3.0.1: +validate-npm-package-license@^3.0.1, validate-npm-package-license@^3.0.3: version "3.0.4" - resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" + resolved "https://registry.npmjs.org/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-npm-package-name@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz#5fa912d81eb7d0c74afc140de7317f0ca7df437e" + integrity sha1-X6kS2B630MdK/BQN5zF/DKffQ34= + dependencies: + builtins "^1.0.3" + vary@~1.1.2: version "1.1.2" - resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" + resolved "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" integrity sha1-IpnwLG3tMNSllhsLn3RSShj2NPw= verror@1.10.0: version "1.10.0" - resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" + resolved "https://registry.npmjs.org/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" -vm-browserify@0.0.4: - version "0.0.4" - resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-0.0.4.tgz#5d7ea45bbef9e4a6ff65f95438e0a87c357d5a73" - integrity sha1-XX6kW7755Kb/ZflUOOCofDV9WnM= +w3c-hr-time@^1.0.1: + version "1.0.2" + resolved "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz#0a89cdf5cc15822df9c360543676963e0cc308cd" + integrity sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ== dependencies: - indexof "0.0.1" + browser-process-hrtime "^1.0.0" -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" - integrity sha1-gqwr/2PZUOqeMYmlimViX+3xkEU= +w3c-xmlserializer@^1.1.2: + version "1.1.2" + resolved "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-1.1.2.tgz#30485ca7d70a6fd052420a3d12fd90e6339ce794" + integrity sha512-p10l/ayESzrBMYWRID6xbuCKh2Fp77+sA0doRuGn4tTIMrrZVeqfpKjXHY+oDh3K4nLdPgNwMTVP6Vp4pvqbNg== dependencies: - browser-process-hrtime "^0.1.2" + domexception "^1.0.1" + webidl-conversions "^4.0.2" + xml-name-validator "^3.0.0" -wait-for-expect@^1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/wait-for-expect/-/wait-for-expect-1.1.1.tgz#9cd10e07d52810af9e0aaf509872e38f3c3d81ae" - integrity sha512-vd9JOqqEcBbCDhARWhW85ecjaEcfBLuXgVBqatfS3iw6oU4kzAcs+sCNjF+TC9YHPImCW7ypsuQc+htscIAQCw== +wait-for-expect@^3.0.2: + version "3.0.2" + resolved "https://registry.npmjs.org/wait-for-expect/-/wait-for-expect-3.0.2.tgz#d2f14b2f7b778c9b82144109c8fa89ceaadaa463" + integrity sha512-cfS1+DZxuav1aBYbaO/kE06EOS8yRw7qOFoD3XtjTkYvCvh3zUvNST8DXK/nPaeqIzIv3P3kL3lRJn8iwOiSag== -walker@~1.0.5: +walker@^1.0.7, walker@~1.0.5: version "1.0.7" - resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.7.tgz#2f7f9b8fd10d677262b18a884e28d19618e028fb" + resolved "https://registry.npmjs.org/walker/-/walker-1.0.7.tgz#2f7f9b8fd10d677262b18a884e28d19618e028fb" integrity sha1-L3+bj9ENZ3JisYqITijRlhjgKPs= 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" + resolved "https://registry.npmjs.org/watch/-/watch-0.18.0.tgz#28095476c6df7c90c963138990c0a5423eb4b986" integrity sha1-KAlUdsbffJDJYxOJkMClQj60uYY= 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" - integrity sha512-i6dHe3EyLjMmDlU1/bGQpEw25XSjkJULPuAVKCbNRefQVq48yXKUpwg538F7AZTf9kyr57zj++pQFltUa5H7yA== +wcwidth@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8" + integrity sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g= dependencies: - chokidar "^2.0.2" - graceful-fs "^4.1.2" - neo-async "^2.5.0" + defaults "^1.0.3" webidl-conversions@^4.0.2: version "4.0.2" - resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad" + resolved "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad" integrity sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg== -webpack-sources@^1.1.0, 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.28.4: - version "4.29.6" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.29.6.tgz#66bf0ec8beee4d469f8b598d3988ff9d8d90e955" - integrity sha512-MwBwpiE1BQpMDkbnUUaW6K8RFZjljJHArC6tWQJoFm0oQtfoSebtg4Y7/QHnJ/SddtjYLHaKGX64CFjG5rehJw== - dependencies: - "@webassemblyjs/ast" "1.8.5" - "@webassemblyjs/helper-module-context" "1.8.5" - "@webassemblyjs/wasm-edit" "1.8.5" - "@webassemblyjs/wasm-parser" "1.8.5" - acorn "^6.0.5" - acorn-dynamic-import "^4.0.0" - ajv "^6.1.0" - ajv-keywords "^3.1.0" - chrome-trace-event "^1.0.0" - enhanced-resolve "^4.1.0" - eslint-scope "^4.0.0" - json-parse-better-errors "^1.0.2" - loader-runner "^2.3.0" - loader-utils "^1.1.0" - memory-fs "~0.4.1" - micromatch "^3.1.8" - mkdirp "~0.5.0" - neo-async "^2.5.0" - node-libs-browser "^2.0.0" - schema-utils "^1.0.0" - tapable "^1.1.0" - terser-webpack-plugin "^1.1.0" - watchpack "^1.5.0" - webpack-sources "^1.3.0" - -whatwg-encoding@^1.0.1, whatwg-encoding@^1.0.3: +whatwg-encoding@^1.0.1, whatwg-encoding@^1.0.5: version "1.0.5" - resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz#5abacf777c32166a51d085d6b4f3e7d27113ddb0" + resolved "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz#5abacf777c32166a51d085d6b4f3e7d27113ddb0" integrity sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw== dependencies: iconv-lite "0.4.24" 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== + version "3.5.0" + resolved "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.5.0.tgz#605a2cd0a7146e5db141e29d1c62ab84c0c4c868" + integrity sha512-jXkLtsR42xhXg7akoDKvKWE40eJeI+2KZqcp2h3NsOrRnDvtWX36KcKl30dy+hxECivdk2BVUHVNrPtoMBUx6A== -whatwg-mimetype@^2.1.0, whatwg-mimetype@^2.2.0: +whatwg-mimetype@^2.2.0, whatwg-mimetype@^2.3.0: version "2.3.0" - resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz#3d4b1e0312d2079879f826aff18dbeeca5960fbf" + resolved "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz#3d4b1e0312d2079879f826aff18dbeeca5960fbf" integrity sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g== -whatwg-url@^6.4.1: - version "6.5.0" - resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-6.5.0.tgz#f2df02bff176fd65070df74ad5ccbb5a199965a8" - integrity sha512-rhRZRqx/TLJQWUpQ6bmrt2UV4f0HCQ463yQuONJqC6fO2VoEb1pTYddbe59SkYq87aoM5A3bdhMZiUiVws+fzQ== - 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" - integrity sha512-37GeVSIJ3kn1JgKyjiYNmSLP1yzbpb29jdmwBSgkD9h40/hyrR/OifpVUndji3tmwGgD8qpw7iQu3RSbCrBpsQ== + version "7.1.0" + resolved "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz#c2c492f1eca612988efd3d2266be1b9fc6170d06" + integrity sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg== dependencies: lodash.sortby "^4.7.0" tr46 "^1.0.1" @@ -8163,74 +11268,143 @@ whatwg-url@^7.0.0: which-module@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" + resolved "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= -which@^1.2.9, which@^1.3.0: +which@1, which@^1.2.12, which@^1.2.14, which@^1.2.9, which@^1.3.0, which@^1.3.1: version "1.3.1" - resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" + resolved "https://registry.npmjs.org/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== dependencies: isexe "^2.0.0" +which@^2.0.1, which@^2.0.2: + version "2.0.2" + resolved "https://registry.npmjs.org/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" + integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== + 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" + resolved "https://registry.npmjs.org/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, wordwrap@~1.0.0: +windows-release@^3.1.0: + version "3.3.3" + resolved "https://registry.npmjs.org/windows-release/-/windows-release-3.3.3.tgz#1c10027c7225743eec6b89df160d64c2e0293999" + integrity sha512-OSOGH1QYiW5yVor9TtmXKQvt2vjQqbYS+DqmsZw+r7xDwLXEeT3JGW0ZppFmHx4diyXmxt238KFR3N9jzevBRg== + dependencies: + execa "^1.0.0" + +word-wrap@~1.2.3: + version "1.2.3" + resolved "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" + integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== + +wordwrap@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" + resolved "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" integrity sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus= wordwrap@~0.0.2: version "0.0.3" - resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107" + resolved "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107" integrity sha1-o9XabNXAvAAI03I0u68b7WMFkQc= -worker-farm@^1.5.2: - version "1.6.0" - resolved "https://registry.yarnpkg.com/worker-farm/-/worker-farm-1.6.0.tgz#aecc405976fab5a95526180846f0dba288f3a4a0" - integrity sha512-6w+3tHbM87WnSWnENBUvA2pxJPLhQUg5LKwUQHq3r+XPhIM+Gh2R5ycbwPCyuGbNg+lPgdcnQUhuC02kJCvffQ== - 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" + resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85" integrity sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU= dependencies: string-width "^1.0.1" strip-ansi "^3.0.1" +wrap-ansi@^5.1.0: + version "5.1.0" + resolved "https://registry.npmjs.org/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" + +wrap-ansi@^6.2.0: + version "6.2.0" + resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53" + integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + +wrap-ansi@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + wrappy@1: version "1.0.2" - resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + resolved "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= -write-file-atomic@2.4.1: - version "2.4.1" - resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-2.4.1.tgz#d0b05463c188ae804396fd5ab2a370062af87529" - integrity sha512-TGHFeZEZMnv+gBFRfjAcxL5bPHrsGKtnb4qsFAws7/vlh+QfwAaySIw4AXP9ZskTTh5GWu3FLuJhsWVdiJPGvg== - dependencies: - graceful-fs "^4.1.11" - imurmurhash "^0.1.4" - signal-exit "^3.0.2" - write-file-atomic@^1.2.0: version "1.3.4" - resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-1.3.4.tgz#f807a4f0b1d9e913ae7a48112e6cc3af1991b45f" + resolved "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-1.3.4.tgz#f807a4f0b1d9e913ae7a48112e6cc3af1991b45f" integrity sha1-+Aek8LHZ6ROuekgRLmzDrxmRtF8= dependencies: graceful-fs "^4.1.11" imurmurhash "^0.1.4" slide "^1.1.5" +write-file-atomic@^2.0.0, write-file-atomic@^2.3.0: + version "2.4.3" + resolved "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz#1fd2e9ae1df3e75b8d8c367443c692d4ca81f481" + integrity sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ== + dependencies: + graceful-fs "^4.1.11" + imurmurhash "^0.1.4" + signal-exit "^3.0.2" + +write-file-atomic@^3.0.0: + version "3.0.3" + resolved "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz#56bd5c5a5c70481cd19c571bd39ab965a5de56e8" + integrity sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q== + dependencies: + imurmurhash "^0.1.4" + is-typedarray "^1.0.0" + signal-exit "^3.0.2" + typedarray-to-buffer "^3.1.5" + +write-json-file@^2.2.0, write-json-file@^2.3.0: + version "2.3.0" + resolved "https://registry.npmjs.org/write-json-file/-/write-json-file-2.3.0.tgz#2b64c8a33004d54b8698c76d585a77ceb61da32f" + integrity sha1-K2TIozAE1UuGmMdtWFp3zrYdoy8= + dependencies: + detect-indent "^5.0.0" + graceful-fs "^4.1.2" + make-dir "^1.0.0" + pify "^3.0.0" + sort-keys "^2.0.0" + write-file-atomic "^2.0.0" + +write-pkg@^3.1.0: + version "3.2.0" + resolved "https://registry.npmjs.org/write-pkg/-/write-pkg-3.2.0.tgz#0e178fe97820d389a8928bc79535dbe68c2cff21" + integrity sha512-tX2ifZ0YqEFOF1wjRW2Pk93NLsj02+n1UP5RvO6rCs0K6R2g1padvf006cY74PQJKMGS2r42NK7FD0dG6Y6paw== + dependencies: + sort-keys "^2.0.0" + write-json-file "^2.2.0" + ws@^1.1.0, ws@^1.1.5: version "1.1.5" - resolved "https://registry.yarnpkg.com/ws/-/ws-1.1.5.tgz#cbd9e6e75e09fc5d2c90015f21f0c40875e0dd51" + resolved "https://registry.npmjs.org/ws/-/ws-1.1.5.tgz#cbd9e6e75e09fc5d2c90015f21f0c40875e0dd51" integrity sha512-o3KqipXNUdS7wpQzBHSe180lBGO60SoK0yVo3CYJgb2MkobuWuBX6dhkYP5ORCLd55y+SaflMOV5fqAB53ux4w== dependencies: options ">=0.0.5" @@ -8238,23 +11412,21 @@ ws@^1.1.0, ws@^1.1.5: ws@^3.3.1: version "3.3.3" - resolved "https://registry.yarnpkg.com/ws/-/ws-3.3.3.tgz#f1cf84fe2d5e901ebce94efaece785f187a228f2" + resolved "https://registry.npmjs.org/ws/-/ws-3.3.3.tgz#f1cf84fe2d5e901ebce94efaece785f187a228f2" integrity sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA== dependencies: async-limiter "~1.0.0" safe-buffer "~5.1.0" ultron "~1.1.0" -ws@^5.2.0: - version "5.2.2" - resolved "https://registry.yarnpkg.com/ws/-/ws-5.2.2.tgz#dffef14866b8e8dc9133582514d1befaf96e980f" - integrity sha512-jaHFD6PFv6UgoIVda6qZllptQsMlDEJkTQcybzzXDYM1XO9Y8em691FGMPmM46WGyLU4z9KMgQN+qrux/nhlHA== - dependencies: - async-limiter "~1.0.0" +ws@^7.0.0: + version "7.4.1" + resolved "https://registry.npmjs.org/ws/-/ws-7.4.1.tgz#a333be02696bd0e54cea0434e21dcc8a9ac294bb" + integrity sha512-pTsP8UAfhy3sk1lSk/O/s4tjD0CRwvMnzvwr4OKGX7ZvqZtUyx4KIJB5JWbkykPoc55tixMGgTNoh3k4FkNGFQ== xcode@^1.0.0: version "1.1.0" - resolved "https://registry.yarnpkg.com/xcode/-/xcode-1.1.0.tgz#9fcb63f417a9af377bfb743a5c22afce4e1da964" + resolved "https://registry.npmjs.org/xcode/-/xcode-1.1.0.tgz#9fcb63f417a9af377bfb743a5c22afce4e1da964" integrity sha512-hllHFtfsNu5WbVzj8KbGNdI3NgOYmTLZqyF4a9c9J1aGMhAdxmLLsXlpG0Bz8fEtKh6I3pyargRXN0ZlLpcF5w== dependencies: simple-plist "^0.2.1" @@ -8262,104 +11434,125 @@ xcode@^1.0.0: 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" + resolved "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a" integrity sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw== xmlbuilder@8.2.2: version "8.2.2" - resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-8.2.2.tgz#69248673410b4ba42e1a6136551d2922335aa773" + resolved "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-8.2.2.tgz#69248673410b4ba42e1a6136551d2922335aa773" integrity sha1-aSSGc0ELS6QuGmE2VR0pIjNap3M= xmlbuilder@^9.0.7: version "9.0.7" - resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-9.0.7.tgz#132ee63d2ec5565c557e20f4c22df9aca686b10d" + resolved "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz#132ee63d2ec5565c557e20f4c22df9aca686b10d" integrity sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0= +xmlchars@^2.1.1: + version "2.2.0" + resolved "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb" + integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw== + xmldoc@^0.4.0: version "0.4.0" - resolved "https://registry.yarnpkg.com/xmldoc/-/xmldoc-0.4.0.tgz#d257224be8393eaacbf837ef227fd8ec25b36888" + resolved "https://registry.npmjs.org/xmldoc/-/xmldoc-0.4.0.tgz#d257224be8393eaacbf837ef227fd8ec25b36888" integrity sha1-0lciS+g5PqrL+DfvIn/Y7CWzaIg= dependencies: sax "~1.1.1" xmldom@0.1.x: - version "0.1.27" - resolved "https://registry.yarnpkg.com/xmldom/-/xmldom-0.1.27.tgz#d501f97b3bdb403af8ef9ecc20573187aadac0e9" - integrity sha1-1QH5ezvbQDr4757MIFcxh6rawOk= + version "0.1.31" + resolved "https://registry.npmjs.org/xmldom/-/xmldom-0.1.31.tgz#b76c9a1bd9f0a9737e5a72dc37231cf38375e2ff" + integrity sha512-yS2uJflVQs6n+CyjHoaBmVSqIDevTAWrzMmjG1Gc7h1qQ7uVozNhEPJAwZXWyGQ/Gafo3fCwrcaokezLPupVyQ== xpipe@^1.0.5: version "1.0.5" - resolved "https://registry.yarnpkg.com/xpipe/-/xpipe-1.0.5.tgz#8dd8bf45fc3f7f55f0e054b878f43a62614dafdf" + resolved "https://registry.npmjs.org/xpipe/-/xpipe-1.0.5.tgz#8dd8bf45fc3f7f55f0e054b878f43a62614dafdf" integrity sha1-jdi/Rfw/f1Xw4FS4ePQ6YmFNr98= -xtend@^4.0.0, xtend@~4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af" - integrity sha1-pcbVMr5lbiPbgg77lDofBJmNY68= +xtend@~4.0.1: + version "4.0.2" + resolved "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" + integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== y18n@^3.2.1: version "3.2.1" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41" + resolved "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41" integrity sha1-bRX7qITAhnnA136I53WegR4H+kE= "y18n@^3.2.1 || ^4.0.0", y18n@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b" - integrity sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w== + version "4.0.1" + resolved "https://registry.npmjs.org/y18n/-/y18n-4.0.1.tgz#8db2b83c31c5d75099bb890b23f3094891e247d4" + integrity sha512-wNcy4NvjMYL8gogWWYAO7ZFWFfHcbdbE57tZO8e4cbpj8tfUcwrwqSl3ad8HxpYWCdXcJUCeKKZS62Av1affwQ== + +y18n@^5.0.5: + version "5.0.5" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.5.tgz#8769ec08d03b1ea2df2500acef561743bbb9ab18" + integrity sha512-hsRUr4FFrvhhRH12wOdfs38Gy7k2FFzB9qgN9v3aLykRq0dRcdcpz5C9FxdS2NuhOrI/628b/KSTJ3rwHysYSg== yallist@^2.1.2: version "2.1.2" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" + resolved "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" integrity sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI= -yallist@^3.0.0, yallist@^3.0.2: - version "3.0.3" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.0.3.tgz#b4b049e314be545e3ce802236d6cd22cd91c3de9" - integrity sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A== +yallist@^3.0.0, yallist@^3.0.2, yallist@^3.0.3: + version "3.1.1" + resolved "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" + integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== + +yallist@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" + integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== + +yaml@^1.10.0: + version "1.10.0" + resolved "https://registry.npmjs.org/yaml/-/yaml-1.10.0.tgz#3b593add944876077d4d683fee01081bd9fff31e" + integrity sha512-yr2icI4glYaNG+KWONODapy2/jDdMSDnrONSjblABjD9B4Z5LgiircSt8m8sRZFNi08kG9Sm0uSHtEmP3zaEGg== yargs-parser@^11.1.1: version "11.1.1" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-11.1.1.tgz#879a0865973bca9f6bab5cbdf3b1c67ec7d3bcf4" + resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-11.1.1.tgz#879a0865973bca9f6bab5cbdf3b1c67ec7d3bcf4" integrity sha512-C6kB/WJDiaxONLJQnF8ccx9SEeoTTLek8RVbaOIsrAUS8VrBEXfmeSnCZxygc+XC2sNMBIwOOnfcxiynjHsVSQ== dependencies: camelcase "^5.0.0" decamelize "^1.2.0" -yargs-parser@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-7.0.0.tgz#8d0ac42f16ea55debd332caf4c4038b3e3f5dfd9" - integrity sha1-jQrELxbqVd69MyyvTEA4s+P139k= +yargs-parser@^15.0.1: + version "15.0.1" + resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-15.0.1.tgz#54786af40b820dcb2fb8025b11b4d659d76323b3" + integrity sha512-0OAMV2mAZQrs3FkNpDQcBk1x5HXb8X4twADss4S0Iuk+2dGnLOE/fRHrsYm542GduMveyA77OF4wrNJuanRCWw== dependencies: - camelcase "^4.1.0" + camelcase "^5.0.0" + decamelize "^1.2.0" -yargs-parser@^9.0.2: - version "9.0.2" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-9.0.2.tgz#9ccf6a43460fe4ed40a9bb68f48d43b8a68cc077" - integrity sha1-nM9qQ0YP5O1Aqbto9I1DuKaMwHc= +yargs-parser@^18.1.2: + version "18.1.3" + resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz#be68c4975c6b2abf469236b0c870362fab09a7b0" + integrity sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ== dependencies: - camelcase "^4.1.0" + camelcase "^5.0.0" + decamelize "^1.2.0" -yargs@^11.0.0: - version "11.1.0" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-11.1.0.tgz#90b869934ed6e871115ea2ff58b03f4724ed2d77" - integrity sha512-NwW69J42EsCSanF8kyn5upxvjp5ds+t3+udGBeTbFnERA+lF541DDpMawzo4z6W/QrzNM18D+BPMiOBibnFV5A== +yargs-parser@^20.2.2: + version "20.2.7" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.7.tgz#61df85c113edfb5a7a4e36eb8aa60ef423cbc90a" + integrity sha512-FiNkvbeHzB/syOjIUxFDCnhSfzAL8R5vs40MgLFBorXACCOAEaWu0gRZl14vG8MR9AOJIZbmkjhusqBYZ3HTHw== + +yargs-parser@^20.2.3: + version "20.2.4" + resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz#b42890f14566796f85ae8e3a25290d205f154a54" + integrity sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA== + +yargs-parser@^7.0.0: + version "7.0.0" + resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-7.0.0.tgz#8d0ac42f16ea55debd332caf4c4038b3e3f5dfd9" + integrity sha1-jQrELxbqVd69MyyvTEA4s+P139k= 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" + camelcase "^4.1.0" -yargs@^12.0.2: +yargs@^12.0.1: version "12.0.5" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-12.0.5.tgz#05f5997b609647b64f66b81e3b4b10a368e7ad13" + resolved "https://registry.npmjs.org/yargs/-/yargs-12.0.5.tgz#05f5997b609647b64f66b81e3b4b10a368e7ad13" integrity sha512-Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw== dependencies: cliui "^4.0.0" @@ -8375,9 +11568,56 @@ yargs@^12.0.2: y18n "^3.2.1 || ^4.0.0" yargs-parser "^11.1.1" +yargs@^14.0.0: + version "14.2.3" + resolved "https://registry.npmjs.org/yargs/-/yargs-14.2.3.tgz#1a1c3edced1afb2a2fea33604bc6d1d8d688a414" + integrity sha512-ZbotRWhF+lkjijC/VhmOT9wSgyBQ7+zr13+YLkhfsSiTriYsMzkTUFP18pFhWwBeMa5gUc1MzbhrO6/VB7c9Xg== + dependencies: + cliui "^5.0.0" + decamelize "^1.2.0" + find-up "^3.0.0" + get-caller-file "^2.0.1" + require-directory "^2.1.1" + require-main-filename "^2.0.0" + set-blocking "^2.0.0" + string-width "^3.0.0" + which-module "^2.0.0" + y18n "^4.0.0" + yargs-parser "^15.0.1" + +yargs@^15.1.0, yargs@^15.3.1: + version "15.4.1" + resolved "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz#0d87a16de01aee9d8bec2bfbf74f67851730f4f8" + integrity sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A== + dependencies: + cliui "^6.0.0" + decamelize "^1.2.0" + find-up "^4.1.0" + get-caller-file "^2.0.1" + require-directory "^2.1.1" + require-main-filename "^2.0.0" + set-blocking "^2.0.0" + string-width "^4.2.0" + which-module "^2.0.0" + y18n "^4.0.0" + yargs-parser "^18.1.2" + +yargs@^16.1.0: + version "16.2.0" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" + integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== + dependencies: + cliui "^7.0.2" + escalade "^3.1.1" + get-caller-file "^2.0.5" + require-directory "^2.1.1" + string-width "^4.2.0" + y18n "^5.0.5" + yargs-parser "^20.2.2" + yargs@^9.0.0: version "9.0.1" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-9.0.1.tgz#52acc23feecac34042078ee78c0c007f5085db4c" + resolved "https://registry.npmjs.org/yargs/-/yargs-9.0.1.tgz#52acc23feecac34042078ee78c0c007f5085db4c" integrity sha1-UqzCP+7Kw0BCB47njAwAf1CF20w= dependencies: camelcase "^4.1.0" @@ -8393,3 +11633,13 @@ yargs@^9.0.0: which-module "^2.0.0" y18n "^3.2.1" yargs-parser "^7.0.0" + +yocto-queue@^0.1.0: + version "0.1.0" + resolved "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" + integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== + +zdog@~1.0.0: + version "1.0.2" + resolved "https://registry.npmjs.org/zdog/-/zdog-1.0.2.tgz#f2a64a727ff0c3d1a067083124e652abcb392a15" + integrity sha512-QjLJ5G5H9X4wowICh8Gx7EC4D738qtspaEr6JnUwXcbZ5bDwgHWG/Q3099Lj91mrFODKL3V/ob8VWZUdXr1YoA==