diff --git a/.eslintignore b/.eslintignore index 016351f511ae9..e748682fbadd5 100644 --- a/.eslintignore +++ b/.eslintignore @@ -8,4 +8,8 @@ packages/next/compiled/**/* packages/react-refresh-utils/**/*.js packages/react-dev-overlay/lib/** **/__tmp__/** -.github/actions/next-stats-action/.work \ No newline at end of file +.github/actions/next-stats-action/.work +packages/next-codemod/transforms/__testfixtures__/**/* +packages/next-codemod/transforms/__tests__/**/* +packages/next-codemod/**/*.js +packages/next-codemod/**/*.d.ts diff --git a/.prettierignore b/.prettierignore index b1adbf783a5a5..d40368c6af1f0 100644 --- a/.prettierignore +++ b/.prettierignore @@ -8,4 +8,8 @@ packages/react-refresh-utils/**/*.d.ts packages/react-dev-overlay/lib/** **/__tmp__/** lerna.json -.github/actions/next-stats-action/.work \ No newline at end of file +.github/actions/next-stats-action/.work +packages/next-codemod/transforms/__testfixtures__/**/* +packages/next-codemod/transforms/__tests__/**/* +packages/next-codemod/**/*.js +packages/next-codemod/**/*.d.ts diff --git a/.prettierignore_staged b/.prettierignore_staged index 3e87a0d626523..00f3e004f5736 100644 --- a/.prettierignore_staged +++ b/.prettierignore_staged @@ -3,3 +3,5 @@ **/dist/** packages/next/compiled/**/* lerna.json +packages/next-codemod/transforms/__testfixtures__/**/* +packages/next-codemod/transforms/__tests__/**/* diff --git a/package.json b/package.json index 8f8e504e3c95b..bffbed04c383f 100644 --- a/package.json +++ b/package.json @@ -13,7 +13,7 @@ "testsafari": "cross-env BROWSER_NAME=safari yarn testonly", "testfirefox": "cross-env BROWSER_NAME=firefox yarn testonly", "testie": "cross-env BROWSER_NAME=\"internet explorer\" yarn testonly", - "testall": "yarn run testonly -- --ci --forceExit", + "testall": "yarn run testonly -- --ci --forceExit && lerna run --scope @next/codemod test", "genstats": "cross-env LOCAL_STATS=true node .github/actions/next-stats-action/src/index.js", "pretest": "yarn run lint", "git-reset": "git reset --hard HEAD", diff --git a/packages/next-codemod/.gitignore b/packages/next-codemod/.gitignore new file mode 100644 index 0000000000000..5eadbe5734c45 --- /dev/null +++ b/packages/next-codemod/.gitignore @@ -0,0 +1,5 @@ +*.d.ts +*.js +*.js.map +!transforms/__tests__/**/*.js +!transforms/__testfixtures__/**/*.js \ No newline at end of file diff --git a/packages/next-codemod/README.md b/packages/next-codemod/README.md new file mode 100644 index 0000000000000..7aa721c899503 --- /dev/null +++ b/packages/next-codemod/README.md @@ -0,0 +1,171 @@ +# Next.js Codemod + +This repository contains Codemod transformations to help upgrade Next.js codebases. + +## v9 + +### `name-default-component` + +Transforms anonymous components into named components to make sure they work with [Fast Refresh](https://nextjs.org/blog/next-9-4#fast-refresh). + +For example + +```jsx +// my-component.js +export default function () { + return
Hello World
+} +``` + +Transforms into: + +```jsx +// my-component.js +export default function MyComponent() { + return
Hello World
+} +``` + +The component will have a camel cased name based on the name of the file, and it also works with arrow functions. + +#### Usage + +Go to your project + +``` +cd path-to-your-project/ +``` + +Download the codemod: + +``` +curl -L https://github.com/zeit/next-codemod/archive/master.tar.gz | tar -xz --strip=2 next-codemod-master/transforms/name-default-component.js +``` + +Run the transformation: + +``` +npx jscodeshift -t ./name-default-component.js components/**/*.js +``` + +TypeScript files can use this codemod too: + +``` +npx jscodeshift -t ./name-default-component.js --parser=tsx components/**/*.tsx +``` + +If you have components in multiple folders, change the path to `**/*.js` and add `--ignore-pattern="**/node_modules/**"`. + +After the transformation is done the `name-default-component.js` file in the root of your project can be removed. + +### `withamp-to-config` + +Transforms the `withAmp` HOC into Next.js 9 page configuration. + +For example: + +```js +// Before +import { withAmp } from 'next/amp' + +function Home() { + return

My AMP Page

+} + +export default withAmp(Home) +``` + +```js +// After +export default function Home() { + return

My AMP Page

+} + +export const config = { + amp: true, +} +``` + +#### Usage + +Go to your project + +``` +cd path-to-your-project/ +``` + +Download the codemod: + +``` +curl -L https://github.com/zeit/next-codemod/archive/master.tar.gz | tar -xz --strip=2 next-codemod-master/transforms/withamp-to-config.js +``` + +Run the transformation: + +``` +npx jscodeshift -t ./withamp-to-config.js pages/**/*.js +``` + +After the transformation is done the `withamp-to-config.js` file in the root of your project can be removed. + +## v6 + +### `url-to-withrouter` + +Tranforms the deprecated automatically injected `url` property on top level pages to using `withRouter` and the `router` property it injects. Read more here: [err.sh/next.js/url-deprecated](https://err.sh/next.js/url-deprecated) + +For example: + +```js +// From +import React from 'react' +export default class extends React.Component { + render() { + const { pathname } = this.props.url + return
Current pathname: {pathname}
+ } +} +``` + +```js +// To +import React from 'react' +import { withRouter } from 'next/router' +export default withRouter( + class extends React.Component { + render() { + const { pathname } = this.props.router + return
Current pathname: {pathname}
+ } + } +) +``` + +This is just one case. All the cases that are transformed (and tested) can be found in the [`__testfixtures__` directory](./transforms/__testfixtures__/url-to-withrouter). + +#### Usage + +Go to your project + +``` +cd path-to-your-project/ +``` + +Download the codemod: + +``` +curl -L https://github.com/zeit/next-codemod/archive/master.tar.gz | tar -xz --strip=2 next-codemod-master/transforms/url-to-withrouter.js +``` + +Run the transformation: + +``` +npx jscodeshift -t ./url-to-withrouter.js pages/**/*.js +``` + +After the transformation is done the `url-to-withrouter.js` file in the root of your project can be removed. + +## Authors + +- Tim Neutkens ([@timneutkens](https://twitter.com/timneutkens)) – [ZEIT](https://zeit.co) +- Joe Haddad ([@timer150](https://twitter.com/timer150)) - [ZEIT](https://zeit.co) diff --git a/packages/next-codemod/license.md b/packages/next-codemod/license.md new file mode 100644 index 0000000000000..fa5d39b6213f8 --- /dev/null +++ b/packages/next-codemod/license.md @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2020 Vercel, 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. diff --git a/packages/next-codemod/package.json b/packages/next-codemod/package.json new file mode 100644 index 0000000000000..1365fe49d0067 --- /dev/null +++ b/packages/next-codemod/package.json @@ -0,0 +1,13 @@ +{ + "name": "@next/codemod", + "version": "1.1.0", + "license": "MIT", + "dependencies": { + "jscodeshift": "^0.6.4" + }, + "scripts": { + "prepublish": "tsc -d -p tsconfig.json", + "build": "tsc -d -w -p tsconfig.json", + "test": "jest" + } +} diff --git a/packages/next-codemod/transforms/__testfixtures__/name-default-component/1-starts-with-number.input.js b/packages/next-codemod/transforms/__testfixtures__/name-default-component/1-starts-with-number.input.js new file mode 100644 index 0000000000000..026e0bc4e2420 --- /dev/null +++ b/packages/next-codemod/transforms/__testfixtures__/name-default-component/1-starts-with-number.input.js @@ -0,0 +1 @@ +export default () =>
Anonymous function
; diff --git a/packages/next-codemod/transforms/__testfixtures__/name-default-component/1-starts-with-number.output.js b/packages/next-codemod/transforms/__testfixtures__/name-default-component/1-starts-with-number.output.js new file mode 100644 index 0000000000000..e69de29bb2d1d diff --git a/packages/next-codemod/transforms/__testfixtures__/name-default-component/existing-name-2.input.js b/packages/next-codemod/transforms/__testfixtures__/name-default-component/existing-name-2.input.js new file mode 100644 index 0000000000000..c09b1109d0dda --- /dev/null +++ b/packages/next-codemod/transforms/__testfixtures__/name-default-component/existing-name-2.input.js @@ -0,0 +1,11 @@ +class ExistingName2Input { + render() {} +} + +class nested { + render() { + const ExistingName2InputComponent = null; + } +} + +export default () =>
Anonymous function
; diff --git a/packages/next-codemod/transforms/__testfixtures__/name-default-component/existing-name-2.output.js b/packages/next-codemod/transforms/__testfixtures__/name-default-component/existing-name-2.output.js new file mode 100644 index 0000000000000..84ddb2d3ca6a4 --- /dev/null +++ b/packages/next-codemod/transforms/__testfixtures__/name-default-component/existing-name-2.output.js @@ -0,0 +1,13 @@ +class ExistingName2Input { + render() {} +} + +class nested { + render() { + const ExistingName2InputComponent = null; + } +} + +const ExistingName2InputComponent = () =>
Anonymous function
; + +export default ExistingName2InputComponent; diff --git a/packages/next-codemod/transforms/__testfixtures__/name-default-component/existing-name-3.input.js b/packages/next-codemod/transforms/__testfixtures__/name-default-component/existing-name-3.input.js new file mode 100644 index 0000000000000..4c4f34eff64b6 --- /dev/null +++ b/packages/next-codemod/transforms/__testfixtures__/name-default-component/existing-name-3.input.js @@ -0,0 +1,7 @@ +function ExistingName3Input() {} + +function nested() { + const ExistingName3InputComponent = null; +} + +export default () =>
Anonymous function
; diff --git a/packages/next-codemod/transforms/__testfixtures__/name-default-component/existing-name-3.output.js b/packages/next-codemod/transforms/__testfixtures__/name-default-component/existing-name-3.output.js new file mode 100644 index 0000000000000..4fb06fa35d34b --- /dev/null +++ b/packages/next-codemod/transforms/__testfixtures__/name-default-component/existing-name-3.output.js @@ -0,0 +1,9 @@ +function ExistingName3Input() {} + +function nested() { + const ExistingName3InputComponent = null; +} + +const ExistingName3InputComponent = () =>
Anonymous function
; + +export default ExistingName3InputComponent; diff --git a/packages/next-codemod/transforms/__testfixtures__/name-default-component/existing-name-ignore.input.js b/packages/next-codemod/transforms/__testfixtures__/name-default-component/existing-name-ignore.input.js new file mode 100644 index 0000000000000..6a3ad640958ee --- /dev/null +++ b/packages/next-codemod/transforms/__testfixtures__/name-default-component/existing-name-ignore.input.js @@ -0,0 +1,4 @@ +const ExistingNameIgnoreInput = null; +const ExistingNameIgnoreInputComponent = null; + +export default () =>
Anonymous function
; diff --git a/packages/next-codemod/transforms/__testfixtures__/name-default-component/existing-name-ignore.output.js b/packages/next-codemod/transforms/__testfixtures__/name-default-component/existing-name-ignore.output.js new file mode 100644 index 0000000000000..e69de29bb2d1d diff --git a/packages/next-codemod/transforms/__testfixtures__/name-default-component/existing-name.input.js b/packages/next-codemod/transforms/__testfixtures__/name-default-component/existing-name.input.js new file mode 100644 index 0000000000000..53c4840edbc15 --- /dev/null +++ b/packages/next-codemod/transforms/__testfixtures__/name-default-component/existing-name.input.js @@ -0,0 +1,7 @@ +const ExistingNameInput = null; + +function nested() { + const ExistingNameInputComponent = null; +} + +export default () =>
Anonymous function
; diff --git a/packages/next-codemod/transforms/__testfixtures__/name-default-component/existing-name.output.js b/packages/next-codemod/transforms/__testfixtures__/name-default-component/existing-name.output.js new file mode 100644 index 0000000000000..3725f53ad203c --- /dev/null +++ b/packages/next-codemod/transforms/__testfixtures__/name-default-component/existing-name.output.js @@ -0,0 +1,9 @@ +const ExistingNameInput = null; + +function nested() { + const ExistingNameInputComponent = null; +} + +const ExistingNameInputComponent = () =>
Anonymous function
; + +export default ExistingNameInputComponent; diff --git a/packages/next-codemod/transforms/__testfixtures__/name-default-component/function-component-2.input.js b/packages/next-codemod/transforms/__testfixtures__/name-default-component/function-component-2.input.js new file mode 100644 index 0000000000000..026e0bc4e2420 --- /dev/null +++ b/packages/next-codemod/transforms/__testfixtures__/name-default-component/function-component-2.input.js @@ -0,0 +1 @@ +export default () =>
Anonymous function
; diff --git a/packages/next-codemod/transforms/__testfixtures__/name-default-component/function-component-2.output.js b/packages/next-codemod/transforms/__testfixtures__/name-default-component/function-component-2.output.js new file mode 100644 index 0000000000000..b5ba56fdce3b5 --- /dev/null +++ b/packages/next-codemod/transforms/__testfixtures__/name-default-component/function-component-2.output.js @@ -0,0 +1,2 @@ +const FunctionComponent2Input = () =>
Anonymous function
; +export default FunctionComponent2Input; diff --git a/packages/next-codemod/transforms/__testfixtures__/name-default-component/function-component-ignore.input.js b/packages/next-codemod/transforms/__testfixtures__/name-default-component/function-component-ignore.input.js new file mode 100644 index 0000000000000..32ea5ec533710 --- /dev/null +++ b/packages/next-codemod/transforms/__testfixtures__/name-default-component/function-component-ignore.input.js @@ -0,0 +1,7 @@ +export default () => { + const x = 'y'; + if (true) { + return ''; + } + return null; +}; diff --git a/packages/next-codemod/transforms/__testfixtures__/name-default-component/function-component-ignore.output.js b/packages/next-codemod/transforms/__testfixtures__/name-default-component/function-component-ignore.output.js new file mode 100644 index 0000000000000..e69de29bb2d1d diff --git a/packages/next-codemod/transforms/__testfixtures__/name-default-component/function-component.input.js b/packages/next-codemod/transforms/__testfixtures__/name-default-component/function-component.input.js new file mode 100644 index 0000000000000..35898a0fab67b --- /dev/null +++ b/packages/next-codemod/transforms/__testfixtures__/name-default-component/function-component.input.js @@ -0,0 +1,7 @@ +export default () => { + const x = 'y'; + if (true) { + return
Anonymous function
; + } + return null; +}; diff --git a/packages/next-codemod/transforms/__testfixtures__/name-default-component/function-component.output.js b/packages/next-codemod/transforms/__testfixtures__/name-default-component/function-component.output.js new file mode 100644 index 0000000000000..58fc251967425 --- /dev/null +++ b/packages/next-codemod/transforms/__testfixtures__/name-default-component/function-component.output.js @@ -0,0 +1,9 @@ +const FunctionComponentInput = () => { + const x = 'y'; + if (true) { + return
Anonymous function
; + } + return null; +}; + +export default FunctionComponentInput; diff --git a/packages/next-codemod/transforms/__testfixtures__/name-default-component/function-expression-ignore.input.js b/packages/next-codemod/transforms/__testfixtures__/name-default-component/function-expression-ignore.input.js new file mode 100644 index 0000000000000..abad3a2b3d868 --- /dev/null +++ b/packages/next-codemod/transforms/__testfixtures__/name-default-component/function-expression-ignore.input.js @@ -0,0 +1,7 @@ +export default function Name() { + const x = 'y'; + if (true) { + return
Anonymous function
; + } + return null; +} diff --git a/packages/next-codemod/transforms/__testfixtures__/name-default-component/function-expression-ignore.output.js b/packages/next-codemod/transforms/__testfixtures__/name-default-component/function-expression-ignore.output.js new file mode 100644 index 0000000000000..e69de29bb2d1d diff --git a/packages/next-codemod/transforms/__testfixtures__/name-default-component/function-expression.input.js b/packages/next-codemod/transforms/__testfixtures__/name-default-component/function-expression.input.js new file mode 100644 index 0000000000000..dfccf3900c48f --- /dev/null +++ b/packages/next-codemod/transforms/__testfixtures__/name-default-component/function-expression.input.js @@ -0,0 +1,7 @@ +export default function () { + const x = 'y'; + if (true) { + return
Anonymous function
; + } + return null; +} diff --git a/packages/next-codemod/transforms/__testfixtures__/name-default-component/function-expression.output.js b/packages/next-codemod/transforms/__testfixtures__/name-default-component/function-expression.output.js new file mode 100644 index 0000000000000..6a6e7381e71af --- /dev/null +++ b/packages/next-codemod/transforms/__testfixtures__/name-default-component/function-expression.output.js @@ -0,0 +1,7 @@ +export default function FunctionExpressionInput() { + const x = 'y'; + if (true) { + return
Anonymous function
; + } + return null; +} diff --git a/packages/next-codemod/transforms/__testfixtures__/name-default-component/special-ch@racter.input.js b/packages/next-codemod/transforms/__testfixtures__/name-default-component/special-ch@racter.input.js new file mode 100644 index 0000000000000..026e0bc4e2420 --- /dev/null +++ b/packages/next-codemod/transforms/__testfixtures__/name-default-component/special-ch@racter.input.js @@ -0,0 +1 @@ +export default () =>
Anonymous function
; diff --git a/packages/next-codemod/transforms/__testfixtures__/name-default-component/special-ch@racter.output.js b/packages/next-codemod/transforms/__testfixtures__/name-default-component/special-ch@racter.output.js new file mode 100644 index 0000000000000..e69de29bb2d1d diff --git a/packages/next-codemod/transforms/__testfixtures__/url-to-withrouter/already-using-withrouter.input.js b/packages/next-codemod/transforms/__testfixtures__/url-to-withrouter/already-using-withrouter.input.js new file mode 100644 index 0000000000000..7f50651bece2c --- /dev/null +++ b/packages/next-codemod/transforms/__testfixtures__/url-to-withrouter/already-using-withrouter.input.js @@ -0,0 +1,7 @@ +import {withRouter} from 'next/router' + +export default withRouter(class extends React.Component { + render() { + const test = this.props.url + } +}) diff --git a/packages/next-codemod/transforms/__testfixtures__/url-to-withrouter/already-using-withrouter.output.js b/packages/next-codemod/transforms/__testfixtures__/url-to-withrouter/already-using-withrouter.output.js new file mode 100644 index 0000000000000..9d40a584db745 --- /dev/null +++ b/packages/next-codemod/transforms/__testfixtures__/url-to-withrouter/already-using-withrouter.output.js @@ -0,0 +1,7 @@ +import {withRouter} from 'next/router' + +export default withRouter(class extends React.Component { + render() { + const test = this.props.router + } +}) diff --git a/packages/next-codemod/transforms/__testfixtures__/url-to-withrouter/arrow-function-component.input.js b/packages/next-codemod/transforms/__testfixtures__/url-to-withrouter/arrow-function-component.input.js new file mode 100644 index 0000000000000..271218c108ea5 --- /dev/null +++ b/packages/next-codemod/transforms/__testfixtures__/url-to-withrouter/arrow-function-component.input.js @@ -0,0 +1,3 @@ +export default withAppContainer(withAuth(props => { + const test = props.url +})) diff --git a/packages/next-codemod/transforms/__testfixtures__/url-to-withrouter/arrow-function-component.output.js b/packages/next-codemod/transforms/__testfixtures__/url-to-withrouter/arrow-function-component.output.js new file mode 100644 index 0000000000000..4fb38acd7ca12 --- /dev/null +++ b/packages/next-codemod/transforms/__testfixtures__/url-to-withrouter/arrow-function-component.output.js @@ -0,0 +1,5 @@ +import { withRouter } from "next/router"; + +export default withRouter(withAppContainer(withAuth(props => { + const test = props.router +}))); \ No newline at end of file diff --git a/packages/next-codemod/transforms/__testfixtures__/url-to-withrouter/componentdidupdate.input.js b/packages/next-codemod/transforms/__testfixtures__/url-to-withrouter/componentdidupdate.input.js new file mode 100644 index 0000000000000..16ec4c102d8c6 --- /dev/null +++ b/packages/next-codemod/transforms/__testfixtures__/url-to-withrouter/componentdidupdate.input.js @@ -0,0 +1,7 @@ +export default class extends React.Component { + componentDidUpdate(prevProps) { + if (prevProps.url.query.f !== this.props.router.query.f) { + const test = this.props.url + } + } +} diff --git a/packages/next-codemod/transforms/__testfixtures__/url-to-withrouter/componentdidupdate.output.js b/packages/next-codemod/transforms/__testfixtures__/url-to-withrouter/componentdidupdate.output.js new file mode 100644 index 0000000000000..44ab887c0c698 --- /dev/null +++ b/packages/next-codemod/transforms/__testfixtures__/url-to-withrouter/componentdidupdate.output.js @@ -0,0 +1,9 @@ +import { withRouter } from "next/router"; + +export default withRouter(class extends React.Component { + componentDidUpdate(prevProps) { + if (prevProps.router.query.f !== this.props.router.query.f) { + const test = this.props.router + } + } +}); diff --git a/packages/next-codemod/transforms/__testfixtures__/url-to-withrouter/componentwillreceiveprops.input.js b/packages/next-codemod/transforms/__testfixtures__/url-to-withrouter/componentwillreceiveprops.input.js new file mode 100644 index 0000000000000..f54c76f76db47 --- /dev/null +++ b/packages/next-codemod/transforms/__testfixtures__/url-to-withrouter/componentwillreceiveprops.input.js @@ -0,0 +1,7 @@ +export default class extends React.Component { + componentWillReceiveProps(nextProps) { + if (this.props.url.query !== nextProps.url.query) { + const test = this.props.url + } + } +} diff --git a/packages/next-codemod/transforms/__testfixtures__/url-to-withrouter/componentwillreceiveprops.output.js b/packages/next-codemod/transforms/__testfixtures__/url-to-withrouter/componentwillreceiveprops.output.js new file mode 100644 index 0000000000000..d01741d953103 --- /dev/null +++ b/packages/next-codemod/transforms/__testfixtures__/url-to-withrouter/componentwillreceiveprops.output.js @@ -0,0 +1,9 @@ +import { withRouter } from "next/router"; + +export default withRouter(class extends React.Component { + componentWillReceiveProps(nextProps) { + if (this.props.router.query !== nextProps.router.query) { + const test = this.props.router + } + } +}); diff --git a/packages/next-codemod/transforms/__testfixtures__/url-to-withrouter/destructuring-this-class.input.js b/packages/next-codemod/transforms/__testfixtures__/url-to-withrouter/destructuring-this-class.input.js new file mode 100644 index 0000000000000..bf1827d95fb60 --- /dev/null +++ b/packages/next-codemod/transforms/__testfixtures__/url-to-withrouter/destructuring-this-class.input.js @@ -0,0 +1,7 @@ +export default class Something extends React.Component { + render() { + const {props, stats} = this + + const test = props.url + } +} diff --git a/packages/next-codemod/transforms/__testfixtures__/url-to-withrouter/destructuring-this-class.output.js b/packages/next-codemod/transforms/__testfixtures__/url-to-withrouter/destructuring-this-class.output.js new file mode 100644 index 0000000000000..c305ef33ce007 --- /dev/null +++ b/packages/next-codemod/transforms/__testfixtures__/url-to-withrouter/destructuring-this-class.output.js @@ -0,0 +1,9 @@ +import { withRouter } from "next/router"; + +export default withRouter(class Something extends React.Component { + render() { + const {props, stats} = this + + const test = props.router + } +}); diff --git a/packages/next-codemod/transforms/__testfixtures__/url-to-withrouter/destructuring-this-props-nested.input.js b/packages/next-codemod/transforms/__testfixtures__/url-to-withrouter/destructuring-this-props-nested.input.js new file mode 100644 index 0000000000000..bddad56b38538 --- /dev/null +++ b/packages/next-codemod/transforms/__testfixtures__/url-to-withrouter/destructuring-this-props-nested.input.js @@ -0,0 +1,23 @@ +export default withAppContainer( + withAuth( + class BuyDomains extends React.Component { + render() { + const { url } = this.props + + return ( + +
{ + onUser(null) + url.push('/login') + }} + onLogoRightClick={() => url.push('/logos')} + /> + + ) + } + } + ) +) diff --git a/packages/next-codemod/transforms/__testfixtures__/url-to-withrouter/destructuring-this-props-nested.output.js b/packages/next-codemod/transforms/__testfixtures__/url-to-withrouter/destructuring-this-props-nested.output.js new file mode 100644 index 0000000000000..8ffab0b1e6f23 --- /dev/null +++ b/packages/next-codemod/transforms/__testfixtures__/url-to-withrouter/destructuring-this-props-nested.output.js @@ -0,0 +1,23 @@ +import { withRouter } from "next/router"; + +export default withRouter(withAppContainer(withAuth( + class BuyDomains extends React.Component { + render() { + const { router } = this.props + + return ( + +
{ + onUser(null) + router.push('/login') + }} + onLogoRightClick={() => router.push('/logos')} + /> + + ); + } + } +))); \ No newline at end of file diff --git a/packages/next-codemod/transforms/__testfixtures__/url-to-withrouter/destructuring-this-props.input.js b/packages/next-codemod/transforms/__testfixtures__/url-to-withrouter/destructuring-this-props.input.js new file mode 100644 index 0000000000000..576a9065126cb --- /dev/null +++ b/packages/next-codemod/transforms/__testfixtures__/url-to-withrouter/destructuring-this-props.input.js @@ -0,0 +1,26 @@ +class AddonsPage extends React.Component { + render() { + const { + url + } = this.props + return ( + +
onUser(null)} + onLogoRightClick={() => Router.push('/logos')} + /> + + + ) + } +} + +export default withAppContainer(withAuthRequired(withError(AddonsPage))) diff --git a/packages/next-codemod/transforms/__testfixtures__/url-to-withrouter/destructuring-this-props.output.js b/packages/next-codemod/transforms/__testfixtures__/url-to-withrouter/destructuring-this-props.output.js new file mode 100644 index 0000000000000..2bc886769b95c --- /dev/null +++ b/packages/next-codemod/transforms/__testfixtures__/url-to-withrouter/destructuring-this-props.output.js @@ -0,0 +1,27 @@ +import { withRouter } from "next/router"; +class AddonsPage extends React.Component { + render() { + const { + router + } = this.props + return ( + +
onUser(null)} + onLogoRightClick={() => Router.push('/logos')} + /> + + + ); + } +} + +export default withRouter(withAppContainer(withAuthRequired(withError(AddonsPage)))); diff --git a/packages/next-codemod/transforms/__testfixtures__/url-to-withrouter/destructuring-this.input.js b/packages/next-codemod/transforms/__testfixtures__/url-to-withrouter/destructuring-this.input.js new file mode 100644 index 0000000000000..08f635ac0cccb --- /dev/null +++ b/packages/next-codemod/transforms/__testfixtures__/url-to-withrouter/destructuring-this.input.js @@ -0,0 +1,7 @@ +export default withApp(withAuth(class Something extends React.Component { + render() { + const {props, stats} = this + + const test = props.url + } +})) diff --git a/packages/next-codemod/transforms/__testfixtures__/url-to-withrouter/destructuring-this.output.js b/packages/next-codemod/transforms/__testfixtures__/url-to-withrouter/destructuring-this.output.js new file mode 100644 index 0000000000000..85c4a0204534c --- /dev/null +++ b/packages/next-codemod/transforms/__testfixtures__/url-to-withrouter/destructuring-this.output.js @@ -0,0 +1,9 @@ +import { withRouter } from "next/router"; + +export default withRouter(withApp(withAuth(class Something extends React.Component { + render() { + const {props, stats} = this + + const test = props.router + } +}))); \ No newline at end of file diff --git a/packages/next-codemod/transforms/__testfixtures__/url-to-withrouter/export-default-variable-wrapping.input.js b/packages/next-codemod/transforms/__testfixtures__/url-to-withrouter/export-default-variable-wrapping.input.js new file mode 100644 index 0000000000000..e424bc4bffe7c --- /dev/null +++ b/packages/next-codemod/transforms/__testfixtures__/url-to-withrouter/export-default-variable-wrapping.input.js @@ -0,0 +1,7 @@ +class Test extends React.Component { + render() { + const test = this.props.url + } +} + +export default wrappingFunction(Test) diff --git a/packages/next-codemod/transforms/__testfixtures__/url-to-withrouter/export-default-variable-wrapping.output.js b/packages/next-codemod/transforms/__testfixtures__/url-to-withrouter/export-default-variable-wrapping.output.js new file mode 100644 index 0000000000000..77922797d2cfb --- /dev/null +++ b/packages/next-codemod/transforms/__testfixtures__/url-to-withrouter/export-default-variable-wrapping.output.js @@ -0,0 +1,8 @@ +import { withRouter } from "next/router"; +class Test extends React.Component { + render() { + const test = this.props.router + } +} + +export default withRouter(wrappingFunction(Test)); diff --git a/packages/next-codemod/transforms/__testfixtures__/url-to-withrouter/export-default-variable.input.js b/packages/next-codemod/transforms/__testfixtures__/url-to-withrouter/export-default-variable.input.js new file mode 100644 index 0000000000000..9d1dda768ac2f --- /dev/null +++ b/packages/next-codemod/transforms/__testfixtures__/url-to-withrouter/export-default-variable.input.js @@ -0,0 +1,7 @@ +class Test extends React.Component { + render() { + const test = this.props.url + } +} + +export default Test diff --git a/packages/next-codemod/transforms/__testfixtures__/url-to-withrouter/export-default-variable.output.js b/packages/next-codemod/transforms/__testfixtures__/url-to-withrouter/export-default-variable.output.js new file mode 100644 index 0000000000000..6a358340e677b --- /dev/null +++ b/packages/next-codemod/transforms/__testfixtures__/url-to-withrouter/export-default-variable.output.js @@ -0,0 +1,8 @@ +import { withRouter } from "next/router"; +class Test extends React.Component { + render() { + const test = this.props.router + } +} + +export default withRouter(Test); diff --git a/packages/next-codemod/transforms/__testfixtures__/url-to-withrouter/first-parameter-hoc.input.js b/packages/next-codemod/transforms/__testfixtures__/url-to-withrouter/first-parameter-hoc.input.js new file mode 100644 index 0000000000000..7dedddc88994a --- /dev/null +++ b/packages/next-codemod/transforms/__testfixtures__/url-to-withrouter/first-parameter-hoc.input.js @@ -0,0 +1,26 @@ +class Plan extends React.Component { + render() { + const { url} = this.props + + return ( + +
onUser(null)} + onLogoRightClick={() => Router.push('/logos')} + /> + + + + ) + } +} + +export default withAppContainer(withAuthRequired(Plan, 'signup')) diff --git a/packages/next-codemod/transforms/__testfixtures__/url-to-withrouter/first-parameter-hoc.output.js b/packages/next-codemod/transforms/__testfixtures__/url-to-withrouter/first-parameter-hoc.output.js new file mode 100644 index 0000000000000..5ebb27eb27338 --- /dev/null +++ b/packages/next-codemod/transforms/__testfixtures__/url-to-withrouter/first-parameter-hoc.output.js @@ -0,0 +1,27 @@ +import { withRouter } from "next/router"; +class Plan extends React.Component { + render() { + const { router} = this.props + + return ( + +
onUser(null)} + onLogoRightClick={() => Router.push('/logos')} + /> + + + + ); + } +} + +export default withRouter(withAppContainer(withAuthRequired(Plan, 'signup'))); diff --git a/packages/next-codemod/transforms/__testfixtures__/url-to-withrouter/no-transform-method.input.js b/packages/next-codemod/transforms/__testfixtures__/url-to-withrouter/no-transform-method.input.js new file mode 100644 index 0000000000000..f7fba3acef681 --- /dev/null +++ b/packages/next-codemod/transforms/__testfixtures__/url-to-withrouter/no-transform-method.input.js @@ -0,0 +1,9 @@ +export default withAppContainer( + withAuth( + class BuyDomains extends React.Component { + something = ({url}) => { + + } + } + ) +) diff --git a/packages/next-codemod/transforms/__testfixtures__/url-to-withrouter/no-transform-method.output.js b/packages/next-codemod/transforms/__testfixtures__/url-to-withrouter/no-transform-method.output.js new file mode 100644 index 0000000000000..f7fba3acef681 --- /dev/null +++ b/packages/next-codemod/transforms/__testfixtures__/url-to-withrouter/no-transform-method.output.js @@ -0,0 +1,9 @@ +export default withAppContainer( + withAuth( + class BuyDomains extends React.Component { + something = ({url}) => { + + } + } + ) +) diff --git a/packages/next-codemod/transforms/__testfixtures__/url-to-withrouter/no-transform.input.js b/packages/next-codemod/transforms/__testfixtures__/url-to-withrouter/no-transform.input.js new file mode 100644 index 0000000000000..5bd292441d893 --- /dev/null +++ b/packages/next-codemod/transforms/__testfixtures__/url-to-withrouter/no-transform.input.js @@ -0,0 +1 @@ +export default class extends React.Component {} \ No newline at end of file diff --git a/packages/next-codemod/transforms/__testfixtures__/url-to-withrouter/no-transform.output.js b/packages/next-codemod/transforms/__testfixtures__/url-to-withrouter/no-transform.output.js new file mode 100644 index 0000000000000..5bd292441d893 --- /dev/null +++ b/packages/next-codemod/transforms/__testfixtures__/url-to-withrouter/no-transform.output.js @@ -0,0 +1 @@ +export default class extends React.Component {} \ No newline at end of file diff --git a/packages/next-codemod/transforms/__testfixtures__/url-to-withrouter/url-property-not-part-of-this-props.input.js b/packages/next-codemod/transforms/__testfixtures__/url-to-withrouter/url-property-not-part-of-this-props.input.js new file mode 100644 index 0000000000000..96e7d77e7970e --- /dev/null +++ b/packages/next-codemod/transforms/__testfixtures__/url-to-withrouter/url-property-not-part-of-this-props.input.js @@ -0,0 +1,11 @@ +const examples = [{ name: 'ex1', url: 'https://google.fr/' }] + +export default () => ( +
+ {examples.map(example => ( +
+ {example.name} - {example.url} +
+ ))} +
+) \ No newline at end of file diff --git a/packages/next-codemod/transforms/__testfixtures__/url-to-withrouter/url-property-not-part-of-this-props.output.js b/packages/next-codemod/transforms/__testfixtures__/url-to-withrouter/url-property-not-part-of-this-props.output.js new file mode 100644 index 0000000000000..96e7d77e7970e --- /dev/null +++ b/packages/next-codemod/transforms/__testfixtures__/url-to-withrouter/url-property-not-part-of-this-props.output.js @@ -0,0 +1,11 @@ +const examples = [{ name: 'ex1', url: 'https://google.fr/' }] + +export default () => ( +
+ {examples.map(example => ( +
+ {example.name} - {example.url} +
+ ))} +
+) \ No newline at end of file diff --git a/packages/next-codemod/transforms/__testfixtures__/url-to-withrouter/using-inline-class.input.js b/packages/next-codemod/transforms/__testfixtures__/url-to-withrouter/using-inline-class.input.js new file mode 100644 index 0000000000000..a401330d0c62a --- /dev/null +++ b/packages/next-codemod/transforms/__testfixtures__/url-to-withrouter/using-inline-class.input.js @@ -0,0 +1,5 @@ +export default (class extends React.Component { + render() { + const test = this.props.url + } +}) diff --git a/packages/next-codemod/transforms/__testfixtures__/url-to-withrouter/using-inline-class.output.js b/packages/next-codemod/transforms/__testfixtures__/url-to-withrouter/using-inline-class.output.js new file mode 100644 index 0000000000000..e5887145d0eb4 --- /dev/null +++ b/packages/next-codemod/transforms/__testfixtures__/url-to-withrouter/using-inline-class.output.js @@ -0,0 +1,7 @@ +import { withRouter } from "next/router"; + +export default withRouter(class extends React.Component { + render() { + const test = this.props.router + } +}); diff --git a/packages/next-codemod/transforms/__testfixtures__/url-to-withrouter/variable-export.input.js b/packages/next-codemod/transforms/__testfixtures__/url-to-withrouter/variable-export.input.js new file mode 100644 index 0000000000000..7f3d171adb91d --- /dev/null +++ b/packages/next-codemod/transforms/__testfixtures__/url-to-withrouter/variable-export.input.js @@ -0,0 +1,7 @@ +const Test = class extends React.Component { + render() { + const test = this.props.url + } +} + +export default abc(wrappingFunction(Test)) diff --git a/packages/next-codemod/transforms/__testfixtures__/url-to-withrouter/variable-export.output.js b/packages/next-codemod/transforms/__testfixtures__/url-to-withrouter/variable-export.output.js new file mode 100644 index 0000000000000..9d5f37a1ede69 --- /dev/null +++ b/packages/next-codemod/transforms/__testfixtures__/url-to-withrouter/variable-export.output.js @@ -0,0 +1,8 @@ +import { withRouter } from "next/router"; +const Test = class extends React.Component { + render() { + const test = this.props.router + } +} + +export default withRouter(abc(wrappingFunction(Test))); \ No newline at end of file diff --git a/packages/next-codemod/transforms/__testfixtures__/url-to-withrouter/with-nested-arrow-function.input.js b/packages/next-codemod/transforms/__testfixtures__/url-to-withrouter/with-nested-arrow-function.input.js new file mode 100644 index 0000000000000..14b733830c37d --- /dev/null +++ b/packages/next-codemod/transforms/__testfixtures__/url-to-withrouter/with-nested-arrow-function.input.js @@ -0,0 +1,22 @@ +export default withAppContainer( + withAuth( + class Blog extends React.Component { + render() { + const { props, state } = this + + return ( +
{ + props.onUser(null) + props.url.push('/login') + }} + onLogoRightClick={() => props.url.push('/logos')} + /> + ) + } + } + ) +) diff --git a/packages/next-codemod/transforms/__testfixtures__/url-to-withrouter/with-nested-arrow-function.output.js b/packages/next-codemod/transforms/__testfixtures__/url-to-withrouter/with-nested-arrow-function.output.js new file mode 100644 index 0000000000000..577c51ff7db2d --- /dev/null +++ b/packages/next-codemod/transforms/__testfixtures__/url-to-withrouter/with-nested-arrow-function.output.js @@ -0,0 +1,22 @@ +import { withRouter } from "next/router"; + +export default withRouter(withAppContainer(withAuth( + class Blog extends React.Component { + render() { + const { props, state } = this + + return ( +
{ + props.onUser(null) + props.router.push('/login') + }} + onLogoRightClick={() => props.router.push('/logos')} + /> + ); + } + } +))); \ No newline at end of file diff --git a/packages/next-codemod/transforms/__testfixtures__/url-to-withrouter/with-router-import.input.js b/packages/next-codemod/transforms/__testfixtures__/url-to-withrouter/with-router-import.input.js new file mode 100644 index 0000000000000..dca33d63c0614 --- /dev/null +++ b/packages/next-codemod/transforms/__testfixtures__/url-to-withrouter/with-router-import.input.js @@ -0,0 +1,7 @@ +import Router from 'next/router' + +export default class extends React.Component { + render() { + const test = this.props.url + } +} diff --git a/packages/next-codemod/transforms/__testfixtures__/url-to-withrouter/with-router-import.output.js b/packages/next-codemod/transforms/__testfixtures__/url-to-withrouter/with-router-import.output.js new file mode 100644 index 0000000000000..8dc44f19e8319 --- /dev/null +++ b/packages/next-codemod/transforms/__testfixtures__/url-to-withrouter/with-router-import.output.js @@ -0,0 +1,7 @@ +import Router, { withRouter } from 'next/router'; + +export default withRouter(class extends React.Component { + render() { + const test = this.props.router + } +}); diff --git a/packages/next-codemod/transforms/__testfixtures__/url-to-withrouter/without-import.input.js b/packages/next-codemod/transforms/__testfixtures__/url-to-withrouter/without-import.input.js new file mode 100644 index 0000000000000..2886da41279ba --- /dev/null +++ b/packages/next-codemod/transforms/__testfixtures__/url-to-withrouter/without-import.input.js @@ -0,0 +1,5 @@ +export default class extends React.Component { + render() { + const test = this.props.url + } +} diff --git a/packages/next-codemod/transforms/__testfixtures__/url-to-withrouter/without-import.output.js b/packages/next-codemod/transforms/__testfixtures__/url-to-withrouter/without-import.output.js new file mode 100644 index 0000000000000..e5887145d0eb4 --- /dev/null +++ b/packages/next-codemod/transforms/__testfixtures__/url-to-withrouter/without-import.output.js @@ -0,0 +1,7 @@ +import { withRouter } from "next/router"; + +export default withRouter(class extends React.Component { + render() { + const test = this.props.router + } +}); diff --git a/packages/next-codemod/transforms/__testfixtures__/url-to-withrouter/wrapping-export.input.js b/packages/next-codemod/transforms/__testfixtures__/url-to-withrouter/wrapping-export.input.js new file mode 100644 index 0000000000000..c4ee2580b4874 --- /dev/null +++ b/packages/next-codemod/transforms/__testfixtures__/url-to-withrouter/wrapping-export.input.js @@ -0,0 +1,5 @@ +export default withSomethingElse(class extends React.Component { + render() { + const test = this.props.url + } +}) diff --git a/packages/next-codemod/transforms/__testfixtures__/url-to-withrouter/wrapping-export.output.js b/packages/next-codemod/transforms/__testfixtures__/url-to-withrouter/wrapping-export.output.js new file mode 100644 index 0000000000000..c20747a0ddb58 --- /dev/null +++ b/packages/next-codemod/transforms/__testfixtures__/url-to-withrouter/wrapping-export.output.js @@ -0,0 +1,7 @@ +import { withRouter } from "next/router"; + +export default withRouter(withSomethingElse(class extends React.Component { + render() { + const test = this.props.router + } +})); diff --git a/packages/next-codemod/transforms/__testfixtures__/withamp-to-config/full-amp-inline.input.js b/packages/next-codemod/transforms/__testfixtures__/withamp-to-config/full-amp-inline.input.js new file mode 100644 index 0000000000000..8ee8286d0550a --- /dev/null +++ b/packages/next-codemod/transforms/__testfixtures__/withamp-to-config/full-amp-inline.input.js @@ -0,0 +1,5 @@ +import { withAmp, withAmp as alternative } from 'next/amp' + +export default alternative(function Home() { + return

My AMP Page

+}) diff --git a/packages/next-codemod/transforms/__testfixtures__/withamp-to-config/full-amp-inline.output.js b/packages/next-codemod/transforms/__testfixtures__/withamp-to-config/full-amp-inline.output.js new file mode 100644 index 0000000000000..1cabea829471f --- /dev/null +++ b/packages/next-codemod/transforms/__testfixtures__/withamp-to-config/full-amp-inline.output.js @@ -0,0 +1,7 @@ +export default function Home() { + return

My AMP Page

+}; + +export const config = { + amp: true +}; diff --git a/packages/next-codemod/transforms/__testfixtures__/withamp-to-config/full-amp-with-config-dupe.input.js b/packages/next-codemod/transforms/__testfixtures__/withamp-to-config/full-amp-with-config-dupe.input.js new file mode 100644 index 0000000000000..4c5eaf2ed30b5 --- /dev/null +++ b/packages/next-codemod/transforms/__testfixtures__/withamp-to-config/full-amp-with-config-dupe.input.js @@ -0,0 +1,12 @@ +import { withAmp } from 'next/amp' + +function Home() { + return

My AMP Page

+} + +export const config = { + foo: 'bar', + amp: false +} + +export default withAmp(Home) diff --git a/packages/next-codemod/transforms/__testfixtures__/withamp-to-config/full-amp-with-config-dupe.output.js b/packages/next-codemod/transforms/__testfixtures__/withamp-to-config/full-amp-with-config-dupe.output.js new file mode 100644 index 0000000000000..27b478ca8ea02 --- /dev/null +++ b/packages/next-codemod/transforms/__testfixtures__/withamp-to-config/full-amp-with-config-dupe.output.js @@ -0,0 +1,10 @@ +function Home() { + return

My AMP Page

+} + +export const config = { + foo: 'bar', + amp: true +} + +export default Home; diff --git a/packages/next-codemod/transforms/__testfixtures__/withamp-to-config/full-amp-with-config-var.input.js b/packages/next-codemod/transforms/__testfixtures__/withamp-to-config/full-amp-with-config-var.input.js new file mode 100644 index 0000000000000..a421ce85c10f0 --- /dev/null +++ b/packages/next-codemod/transforms/__testfixtures__/withamp-to-config/full-amp-with-config-var.input.js @@ -0,0 +1,14 @@ +import { withAmp } from 'next/amp' + +function Home() { + const config = {} + return

My AMP Page

+} + +const config = { + foo: 'bar', +} + +export default withAmp(Home) + +export { config } diff --git a/packages/next-codemod/transforms/__testfixtures__/withamp-to-config/full-amp-with-config-var.output.js b/packages/next-codemod/transforms/__testfixtures__/withamp-to-config/full-amp-with-config-var.output.js new file mode 100644 index 0000000000000..d80bfcfc7ffd2 --- /dev/null +++ b/packages/next-codemod/transforms/__testfixtures__/withamp-to-config/full-amp-with-config-var.output.js @@ -0,0 +1,13 @@ +function Home() { + const config = {} + return

My AMP Page

+} + +const config = { + foo: 'bar', + amp: true +} + +export default Home; + +export { config } diff --git a/packages/next-codemod/transforms/__testfixtures__/withamp-to-config/full-amp-with-config.input.js b/packages/next-codemod/transforms/__testfixtures__/withamp-to-config/full-amp-with-config.input.js new file mode 100644 index 0000000000000..d98d63a4e2147 --- /dev/null +++ b/packages/next-codemod/transforms/__testfixtures__/withamp-to-config/full-amp-with-config.input.js @@ -0,0 +1,12 @@ +import { withAmp, useAmp } from 'next/amp' + +function Home() { + const config = {} + return

My AMP Page

+} + +export const config = { + foo: 'bar', +} + +export default withAmp(Home) diff --git a/packages/next-codemod/transforms/__testfixtures__/withamp-to-config/full-amp-with-config.output.js b/packages/next-codemod/transforms/__testfixtures__/withamp-to-config/full-amp-with-config.output.js new file mode 100644 index 0000000000000..1cf6895e61e61 --- /dev/null +++ b/packages/next-codemod/transforms/__testfixtures__/withamp-to-config/full-amp-with-config.output.js @@ -0,0 +1,13 @@ +import { useAmp } from 'next/amp'; + +function Home() { + const config = {} + return

My AMP Page

+} + +export const config = { + foo: 'bar', + amp: true +} + +export default Home; diff --git a/packages/next-codemod/transforms/__testfixtures__/withamp-to-config/full-amp.input.js b/packages/next-codemod/transforms/__testfixtures__/withamp-to-config/full-amp.input.js new file mode 100644 index 0000000000000..a9b21f59ba39c --- /dev/null +++ b/packages/next-codemod/transforms/__testfixtures__/withamp-to-config/full-amp.input.js @@ -0,0 +1,8 @@ +import { withAmp } from 'next/amp' + +function Home() { + const config = {} + return

My AMP Page

+} + +export default withAmp(Home) diff --git a/packages/next-codemod/transforms/__testfixtures__/withamp-to-config/full-amp.output.js b/packages/next-codemod/transforms/__testfixtures__/withamp-to-config/full-amp.output.js new file mode 100644 index 0000000000000..cbd7c4690fb48 --- /dev/null +++ b/packages/next-codemod/transforms/__testfixtures__/withamp-to-config/full-amp.output.js @@ -0,0 +1,10 @@ +function Home() { + const config = {} + return

My AMP Page

+} + +export default Home; + +export const config = { + amp: true +}; diff --git a/packages/next-codemod/transforms/__testfixtures__/withamp-to-config/hybrid-amp-with-config.input.js b/packages/next-codemod/transforms/__testfixtures__/withamp-to-config/hybrid-amp-with-config.input.js new file mode 100644 index 0000000000000..e28aad5f862c7 --- /dev/null +++ b/packages/next-codemod/transforms/__testfixtures__/withamp-to-config/hybrid-amp-with-config.input.js @@ -0,0 +1,12 @@ +import { withAmp } from 'next/amp' + +function Home() { + const config = {} + return

My AMP Page

+} + +export const config = { + foo: 'bar', +} + +export default withAmp(Home, { hybrid: true }) diff --git a/packages/next-codemod/transforms/__testfixtures__/withamp-to-config/hybrid-amp-with-config.output.js b/packages/next-codemod/transforms/__testfixtures__/withamp-to-config/hybrid-amp-with-config.output.js new file mode 100644 index 0000000000000..901ed4d09a5ef --- /dev/null +++ b/packages/next-codemod/transforms/__testfixtures__/withamp-to-config/hybrid-amp-with-config.output.js @@ -0,0 +1,11 @@ +function Home() { + const config = {} + return

My AMP Page

+} + +export const config = { + foo: 'bar', + amp: "hybrid" +} + +export default Home; diff --git a/packages/next-codemod/transforms/__testfixtures__/withamp-to-config/hybrid-amp.input.js b/packages/next-codemod/transforms/__testfixtures__/withamp-to-config/hybrid-amp.input.js new file mode 100644 index 0000000000000..6b70454c97a25 --- /dev/null +++ b/packages/next-codemod/transforms/__testfixtures__/withamp-to-config/hybrid-amp.input.js @@ -0,0 +1,8 @@ +import { withAmp } from 'next/amp' + +function Home() { + const config = {} + return

My AMP Page

+} + +export default withAmp(Home, { hybrid: true }) diff --git a/packages/next-codemod/transforms/__testfixtures__/withamp-to-config/hybrid-amp.output.js b/packages/next-codemod/transforms/__testfixtures__/withamp-to-config/hybrid-amp.output.js new file mode 100644 index 0000000000000..85e2d7e53c8b9 --- /dev/null +++ b/packages/next-codemod/transforms/__testfixtures__/withamp-to-config/hybrid-amp.output.js @@ -0,0 +1,10 @@ +function Home() { + const config = {} + return

My AMP Page

+} + +export default Home; + +export const config = { + amp: "hybrid" +}; diff --git a/packages/next-codemod/transforms/__testfixtures__/withamp-to-config/remove-import-renamed.input.js b/packages/next-codemod/transforms/__testfixtures__/withamp-to-config/remove-import-renamed.input.js new file mode 100644 index 0000000000000..36df14997eb86 --- /dev/null +++ b/packages/next-codemod/transforms/__testfixtures__/withamp-to-config/remove-import-renamed.input.js @@ -0,0 +1 @@ +import { withAmp as apples } from 'next/amp' diff --git a/packages/next-codemod/transforms/__testfixtures__/withamp-to-config/remove-import-renamed.output.js b/packages/next-codemod/transforms/__testfixtures__/withamp-to-config/remove-import-renamed.output.js new file mode 100644 index 0000000000000..e69de29bb2d1d diff --git a/packages/next-codemod/transforms/__testfixtures__/withamp-to-config/remove-import-single.input.js b/packages/next-codemod/transforms/__testfixtures__/withamp-to-config/remove-import-single.input.js new file mode 100644 index 0000000000000..99c6e3837baeb --- /dev/null +++ b/packages/next-codemod/transforms/__testfixtures__/withamp-to-config/remove-import-single.input.js @@ -0,0 +1 @@ +import { withAmp, useAmp } from 'next/amp' diff --git a/packages/next-codemod/transforms/__testfixtures__/withamp-to-config/remove-import-single.output.js b/packages/next-codemod/transforms/__testfixtures__/withamp-to-config/remove-import-single.output.js new file mode 100644 index 0000000000000..1a971e2d0feb8 --- /dev/null +++ b/packages/next-codemod/transforms/__testfixtures__/withamp-to-config/remove-import-single.output.js @@ -0,0 +1 @@ +import { useAmp } from 'next/amp'; diff --git a/packages/next-codemod/transforms/__testfixtures__/withamp-to-config/remove-import.input.js b/packages/next-codemod/transforms/__testfixtures__/withamp-to-config/remove-import.input.js new file mode 100644 index 0000000000000..687189ee59f73 --- /dev/null +++ b/packages/next-codemod/transforms/__testfixtures__/withamp-to-config/remove-import.input.js @@ -0,0 +1 @@ +import { withAmp } from 'next/amp' diff --git a/packages/next-codemod/transforms/__testfixtures__/withamp-to-config/remove-import.output.js b/packages/next-codemod/transforms/__testfixtures__/withamp-to-config/remove-import.output.js new file mode 100644 index 0000000000000..e69de29bb2d1d diff --git a/packages/next-codemod/transforms/__tests__/name-default-component-test.js b/packages/next-codemod/transforms/__tests__/name-default-component-test.js new file mode 100644 index 0000000000000..07c32fc636239 --- /dev/null +++ b/packages/next-codemod/transforms/__tests__/name-default-component-test.js @@ -0,0 +1,27 @@ +/* global jest */ +jest.autoMockOff() + +const defineTest = require('jscodeshift/dist/testUtils').defineTest + +const fixtures = [ + 'function-component', + 'function-component-2', + 'function-component-ignore', + 'function-expression', + 'function-expression-ignore', + 'existing-name', + 'existing-name-2', + 'existing-name-3', + 'existing-name-ignore', + '1-starts-with-number', + 'special-ch@racter', +] + +fixtures.forEach((test) => + defineTest( + __dirname, + 'name-default-component', + null, + `name-default-component/${test}` + ) +) diff --git a/packages/next-codemod/transforms/__tests__/url-to-withrouter.test.js b/packages/next-codemod/transforms/__tests__/url-to-withrouter.test.js new file mode 100644 index 0000000000000..afd2cc8271d64 --- /dev/null +++ b/packages/next-codemod/transforms/__tests__/url-to-withrouter.test.js @@ -0,0 +1,35 @@ +/* global jest */ +jest.autoMockOff() +const defineTest = require('jscodeshift/dist/testUtils').defineTest + +const fixtures = [ + 'with-router-import', + 'without-import', + 'already-using-withrouter', + 'using-inline-class', + 'export-default-variable', + 'export-default-variable-wrapping', + 'no-transform', + 'no-transform-method', + 'wrapping-export', + 'variable-export', + 'arrow-function-component', + 'destructuring-this', + 'destructuring-this-class', + 'destructuring-this-props', + 'destructuring-this-props-nested', + 'with-nested-arrow-function', + 'componentdidupdate', + 'componentwillreceiveprops', + 'first-parameter-hoc', + 'url-property-not-part-of-this-props', +] + +for (const fixture of fixtures) { + defineTest( + __dirname, + 'url-to-withrouter', + null, + `url-to-withrouter/${fixture}` + ) +} diff --git a/packages/next-codemod/transforms/__tests__/withamp-to-config.test.js b/packages/next-codemod/transforms/__tests__/withamp-to-config.test.js new file mode 100644 index 0000000000000..5229b56dfd46b --- /dev/null +++ b/packages/next-codemod/transforms/__tests__/withamp-to-config.test.js @@ -0,0 +1,25 @@ +/* global jest */ +jest.autoMockOff() +const defineTest = require('jscodeshift/dist/testUtils').defineTest + +const fixtures = [ + 'remove-import', + 'remove-import-renamed', + 'remove-import-single', + 'full-amp', + 'full-amp-inline', + 'full-amp-with-config', + 'full-amp-with-config-dupe', + 'full-amp-with-config-var', + 'hybrid-amp', + 'hybrid-amp-with-config', +] + +for (const fixture of fixtures) { + defineTest( + __dirname, + 'withamp-to-config', + null, + `withamp-to-config/${fixture}` + ) +} diff --git a/packages/next-codemod/transforms/name-default-component.ts b/packages/next-codemod/transforms/name-default-component.ts new file mode 100644 index 0000000000000..745de4aaf4f10 --- /dev/null +++ b/packages/next-codemod/transforms/name-default-component.ts @@ -0,0 +1,89 @@ +import { basename, extname } from 'path' + +const camelCase = (value) => { + const val = value.replace(/[-_\s.]+(.)?/g, (_match, chr) => + chr ? chr.toUpperCase() : '' + ) + return val.substr(0, 1).toUpperCase() + val.substr(1) +} + +const isValidIdentifier = (value) => /^[a-zA-ZÀ-ÿ][0-9a-zA-ZÀ-ÿ]+$/.test(value) + +export default function transformer(file, api, options) { + const j = api.jscodeshift + const root = j(file.source) + + let hasModifications + + const returnsJSX = (node) => + node.type === 'JSXElement' || + (node.type === 'BlockStatement' && + j(node) + .find(j.ReturnStatement) + .some( + (path) => + path.value.argument && path.value.argument.type === 'JSXElement' + )) + + const hasRootAsParent = (path) => { + const program = path.parentPath.parentPath.parentPath.parentPath.parentPath + return ( + !program || (program && program.value && program.value.type === 'Program') + ) + } + + const nameFunctionComponent = (path) => { + const node = path.value + + if (!node.declaration) { + return + } + + const isArrowFunction = + node.declaration.type === 'ArrowFunctionExpression' && + returnsJSX(node.declaration.body) + const isAnonymousFunction = + node.declaration.type === 'FunctionDeclaration' && !node.declaration.id + + if (!(isArrowFunction || isAnonymousFunction)) { + return + } + + const fileName = basename(file.path, extname(file.path)) + let name = camelCase(fileName) + + // If the generated name looks off, don't add a name + if (!isValidIdentifier(name)) { + return + } + + // Add `Component` to the end of the name if an identifier with the + // same name already exists + while (root.find(j.Identifier, { name }).some(hasRootAsParent)) { + // If the name is still duplicated then don't add a name + if (name.endsWith('Component')) { + return + } + name += 'Component' + } + + hasModifications = true + + if (isArrowFunction) { + path.insertBefore( + j.variableDeclaration('const', [ + j.variableDeclarator(j.identifier(name), node.declaration), + ]) + ) + + node.declaration = j.identifier(name) + } else { + // Anonymous Function + node.declaration.id = j.identifier(name) + } + } + + root.find(j.ExportDefaultDeclaration).forEach(nameFunctionComponent) + + return hasModifications ? root.toSource(options) : null +} diff --git a/packages/next-codemod/transforms/url-to-withrouter.ts b/packages/next-codemod/transforms/url-to-withrouter.ts new file mode 100644 index 0000000000000..27f6c702a02bf --- /dev/null +++ b/packages/next-codemod/transforms/url-to-withrouter.ts @@ -0,0 +1,393 @@ +// One-time usage file. You can delete me after running the codemod! + +function addWithRouterImport(j, root) { + // We create an import specifier, this is the value of an import, eg: + // import {withRouter} from 'next/router + // The specifier would be `withRouter` + const withRouterSpecifier = j.importSpecifier(j.identifier('withRouter')) + + // Check if this file is already import `next/router` + // so that we can just attach `withRouter` instead of creating a new `import` node + const originalRouterImport = root.find(j.ImportDeclaration, { + source: { + value: 'next/router', + }, + }) + if (originalRouterImport.length > 0) { + // Check if `withRouter` is already imported. In that case we don't have to do anything + if ( + originalRouterImport.find(j.ImportSpecifier, { + imported: { name: 'withRouter' }, + }).length > 0 + ) { + return + } + + // Attach `withRouter` to the existing `next/router` import node + originalRouterImport.forEach((node) => { + node.value.specifiers.push(withRouterSpecifier) + }) + return + } + + // Create import node + // import {withRouter} from 'next/router' + const withRouterImport = j.importDeclaration( + [withRouterSpecifier], + j.stringLiteral('next/router') + ) + + // Find the Program, this is the top level AST node + const Program = root.find(j.Program) + // Attach the import at the top of the body + Program.forEach((node) => { + node.value.body.unshift(withRouterImport) + }) +} + +function getThisPropsUrlNodes(j, tree) { + return tree.find(j.MemberExpression, { + object: { + type: 'MemberExpression', + object: { type: 'ThisExpression' }, + property: { name: 'props' }, + }, + property: { name: 'url' }, + }) +} + +function getPropsUrlNodes(j, tree, name) { + return tree.find(j.MemberExpression, { + object: { name }, + property: { name: 'url' }, + }) +} + +// Wraps the provided node in a function call +// For example if `functionName` is `withRouter` it will wrap the provided node in `withRouter(NODE_CONTENT)` +function wrapNodeInFunction(j, functionName, args) { + const mappedArgs = args.map((node) => { + // If the node is a ClassDeclaration we have to turn it into a ClassExpression + // since ClassDeclarations can't be wrapped in a function + if (node.type === 'ClassDeclaration') { + node.type = 'ClassExpression' + } + + return node + }) + return j.callExpression(j.identifier(functionName), mappedArgs) +} + +function turnUrlIntoRouter(j, tree) { + tree.find(j.Identifier, { name: 'url' }).replaceWith(j.identifier('router')) +} + +export default function transformer(file, api) { + // j is just a shorthand for the jscodeshift api + const j = api.jscodeshift + // this is the AST root on which we can call methods like `.find` + const root = j(file.source) + + // We search for `export default` + const defaultExports = root.find(j.ExportDefaultDeclaration) + + // We loop over the `export default` instances + // This is just how jscodeshift works, there can only be one export default instance + defaultExports.forEach((rule) => { + // rule.value is an AST node + const { value: node } = rule + // declaration holds the AST node for what comes after `export default` + const { declaration } = node + + function wrapDefaultExportInWithRouter() { + if ( + j(rule).find(j.CallExpression, { callee: { name: 'withRouter' } }) + .length > 0 + ) { + return + } + j(rule).replaceWith( + j.exportDefaultDeclaration( + wrapNodeInFunction(j, 'withRouter', [declaration]) + ) + ) + } + + // The `Identifier` type is given in this case: + // export default Test + // where `Test` is the identifier + if (declaration.type === 'Identifier') { + // the variable name + const { name } = declaration + + // find the implementation of the variable, can be a class, function, etc + let implementation = root.find(j.Declaration, { id: { name } }) + if (implementation.length === 0) { + implementation = root.find(j.VariableDeclarator, { id: { name } }) + } + + implementation + .find(j.Property, { key: { name: 'url' } }) + .forEach((propertyRule) => { + const isThisPropsDestructure = j(propertyRule).closest( + j.VariableDeclarator, + { + init: { + object: { + type: 'ThisExpression', + }, + property: { name: 'props' }, + }, + } + ) + if (isThisPropsDestructure.length === 0) { + return + } + const originalKeyValue = propertyRule.value.value.name + propertyRule.value.key.name = 'router' + wrapDefaultExportInWithRouter() + addWithRouterImport(j, root) + // If the property is reassigned to another variable we don't have to transform it + if (originalKeyValue !== 'url') { + return + } + + propertyRule.value.value.name = 'router' + j(propertyRule) + .closest(j.BlockStatement) + .find(j.Identifier, (identifierNode) => { + if (identifierNode.type === 'JSXIdentifier') { + return false + } + + if (identifierNode.name !== 'url') { + return false + } + + return true + }) + .replaceWith(j.identifier('router')) + }) + + // Find usage of `this.props.url` + const thisPropsUrlUsage = getThisPropsUrlNodes(j, implementation) + + if (thisPropsUrlUsage.length === 0) { + return + } + + // rename `url` to `router` + turnUrlIntoRouter(j, thisPropsUrlUsage) + wrapDefaultExportInWithRouter() + addWithRouterImport(j, root) + return + } + + const arrowFunctions = j(rule).find(j.ArrowFunctionExpression) + ;(() => { + if (arrowFunctions.length === 0) { + return + } + + arrowFunctions.forEach((r) => { + // This makes sure we don't match nested functions, only the top one + if (j(r).closest(j.Expression).length !== 0) { + return + } + + if (!r.value.params || !r.value.params[0]) { + return + } + + const name = r.value.params[0].name + const propsUrlUsage = getPropsUrlNodes(j, j(r), name) + if (propsUrlUsage.length === 0) { + return + } + + turnUrlIntoRouter(j, propsUrlUsage) + wrapDefaultExportInWithRouter() + addWithRouterImport(j, root) + }) + return + })() + + if (declaration.type === 'CallExpression') { + j(rule) + .find(j.CallExpression, (haystack) => { + const firstArgument = haystack.arguments[0] || {} + if (firstArgument.type === 'Identifier') { + return true + } + + return false + }) + .forEach((callRule) => { + const { name } = callRule.value.arguments[0] + + // find the implementation of the variable, can be a class, function, etc + let implementation = root.find(j.Declaration, { id: { name } }) + if (implementation.length === 0) { + implementation = root.find(j.VariableDeclarator, { id: { name } }) + } + // Find usage of `this.props.url` + const thisPropsUrlUsage = getThisPropsUrlNodes(j, implementation) + + implementation + .find(j.Property, { key: { name: 'url' } }) + .forEach((propertyRule) => { + const isThisPropsDestructure = j(propertyRule).closest( + j.VariableDeclarator, + { + init: { + object: { + type: 'ThisExpression', + }, + property: { name: 'props' }, + }, + } + ) + if (isThisPropsDestructure.length === 0) { + return + } + const originalKeyValue = propertyRule.value.value.name + propertyRule.value.key.name = 'router' + wrapDefaultExportInWithRouter() + addWithRouterImport(j, root) + // If the property is reassigned to another variable we don't have to transform it + if (originalKeyValue !== 'url') { + return + } + + propertyRule.value.value.name = 'router' + j(propertyRule) + .closest(j.BlockStatement) + .find(j.Identifier, (identifierNode) => { + if (identifierNode.type === 'JSXIdentifier') { + return false + } + + if (identifierNode.name !== 'url') { + return false + } + + return true + }) + .replaceWith(j.identifier('router')) + }) + + if (thisPropsUrlUsage.length === 0) { + return + } + + // rename `url` to `router` + turnUrlIntoRouter(j, thisPropsUrlUsage) + wrapDefaultExportInWithRouter() + addWithRouterImport(j, root) + return + }) + } + + j(rule) + .find(j.Property, { key: { name: 'url' } }) + .forEach((propertyRule) => { + const isThisPropsDestructure = j(propertyRule).closest( + j.VariableDeclarator, + { + init: { + object: { + type: 'ThisExpression', + }, + property: { name: 'props' }, + }, + } + ) + if (isThisPropsDestructure.length === 0) { + return + } + const originalKeyValue = propertyRule.value.value.name + propertyRule.value.key.name = 'router' + wrapDefaultExportInWithRouter() + addWithRouterImport(j, root) + // If the property is reassigned to another variable we don't have to transform it + if (originalKeyValue !== 'url') { + return + } + + propertyRule.value.value.name = 'router' + j(propertyRule) + .closest(j.BlockStatement) + .find(j.Identifier, (identifierNode) => { + if (identifierNode.type === 'JSXIdentifier') { + return false + } + + if (identifierNode.name !== 'url') { + return false + } + + return true + }) + .replaceWith(j.identifier('router')) + }) + + j(rule) + .find(j.MethodDefinition, { key: { name: 'componentWillReceiveProps' } }) + .forEach((methodRule) => { + const func = methodRule.value.value + if (!func.params[0]) { + return + } + const firstArgumentName = func.params[0].name + const propsUrlUsage = getPropsUrlNodes( + j, + j(methodRule), + firstArgumentName + ) + turnUrlIntoRouter(j, propsUrlUsage) + if (propsUrlUsage.length === 0) { + return + } + wrapDefaultExportInWithRouter() + addWithRouterImport(j, root) + }) + + j(rule) + .find(j.MethodDefinition, { key: { name: 'componentDidUpdate' } }) + .forEach((methodRule) => { + const func = methodRule.value.value + if (!func.params[0]) { + return + } + const firstArgumentName = func.params[0].name + const propsUrlUsage = getPropsUrlNodes( + j, + j(methodRule), + firstArgumentName + ) + turnUrlIntoRouter(j, propsUrlUsage) + if (propsUrlUsage.length === 0) { + return + } + wrapDefaultExportInWithRouter() + addWithRouterImport(j, root) + }) + + const thisPropsUrlUsage = getThisPropsUrlNodes(j, j(rule)) + const propsUrlUsage = getPropsUrlNodes(j, j(rule), 'props') + + // rename `url` to `router` + turnUrlIntoRouter(j, thisPropsUrlUsage) + turnUrlIntoRouter(j, propsUrlUsage) + + if (thisPropsUrlUsage.length === 0 && propsUrlUsage.length === 0) { + return + } + + wrapDefaultExportInWithRouter() + addWithRouterImport(j, root) + return + }) + + return root.toSource() +} diff --git a/packages/next-codemod/transforms/withamp-to-config.ts b/packages/next-codemod/transforms/withamp-to-config.ts new file mode 100644 index 0000000000000..9bd6f3ea3883d --- /dev/null +++ b/packages/next-codemod/transforms/withamp-to-config.ts @@ -0,0 +1,175 @@ +// One-time usage file. You can delete me after running the codemod! + +function injectAmp(j, o, desiredAmpValue) { + const init = o.node.init + + switch (init.type) { + case 'ObjectExpression': { + const overwroteAmpKey = init.properties.some((prop) => { + switch (prop.type) { + case 'Property': + case 'ObjectProperty': + if (!(prop.key.type === 'Identifier' && prop.key.name === 'amp')) { + return false + } + + prop.value = desiredAmpValue + return true + default: + return false + } + }) + + if (!overwroteAmpKey) { + init.properties.push( + j.objectProperty(j.identifier('amp'), desiredAmpValue) + ) + } + + return true + } + default: { + return false + } + } +} + +export default function transformer(file, api) { + const j = api.jscodeshift + const root = j(file.source) + const done = () => root.toSource() + + const imports = root.find(j.ImportDeclaration, { + source: { value: 'next/amp' }, + }) + + if (imports.length < 1) { + return + } + + let hadWithAmp = false + const ampImportNames = [] + + imports.forEach((ampImport) => { + const ampImportShift = j(ampImport) + + const withAmpImport = ampImportShift.find(j.ImportSpecifier, { + imported: { name: 'withAmp' }, + }) + + if (withAmpImport.length < 1) { + return + } + + hadWithAmp = true + withAmpImport.forEach((element) => { + ampImportNames.push(element.value.local.name) + j(element).remove() + }) + + if (ampImport.value.specifiers.length === 0) { + ampImportShift.remove() + } + }) + + if (!hadWithAmp) { + return done() + } + + const defaultExportsShift = root.find(j.ExportDefaultDeclaration) + if (defaultExportsShift.length < 1) { + return done() + } + + let desiredAmpValue = j.booleanLiteral(true) + + const defaultExport = defaultExportsShift.nodes()[0] + const removedWrapper = ampImportNames.some((ampImportName) => { + const ampWrapping = j(defaultExport).find(j.CallExpression, { + callee: { name: ampImportName }, + }) + + if (ampWrapping.length < 1) { + return false + } + + ampWrapping.forEach((e) => { + if (e.value.arguments.length < 1) { + j(e).remove() + } else { + const withAmpOptions = e.value.arguments[1] + if (withAmpOptions && withAmpOptions.type === 'ObjectExpression') { + const isHybrid = withAmpOptions.properties.some((prop) => { + if (!(prop.type === 'Property' || prop.type === 'ObjectProperty')) { + return false + } + + if (!(prop.key && prop.key.name === 'hybrid')) { + return false + } + + return ( + (prop.value.type === 'Literal' || + prop.value.type === 'BooleanLiteral') && + prop.value.value === true + ) + }) + + if (isHybrid) { + desiredAmpValue = j.stringLiteral('hybrid') + } + } + + j(e).replaceWith(e.value.arguments[0]) + } + }) + return true + }) + + if (!removedWrapper) { + return done() + } + + const namedExportsShift = root.find(j.ExportNamedDeclaration) + const hadExistingConfig = namedExportsShift.some((namedExport) => { + const configExportedObject = j(namedExport).find(j.VariableDeclarator, { + id: { name: 'config' }, + }) + if (configExportedObject.length > 0) { + return configExportedObject.some((exportedObject) => + injectAmp(j, exportedObject, desiredAmpValue) + ) + } + + const configReexported = j(namedExport).find(j.ExportSpecifier, { + local: { name: 'config' }, + }) + if (configReexported.length > 0) { + const configObjects = root + .findVariableDeclarators('config') + .filter((el) => el.scope.isGlobal) + return configObjects.some((configObject) => + injectAmp(j, configObject, desiredAmpValue) + ) + } + + return false + }) + + if (!hadExistingConfig) { + defaultExportsShift.insertAfter( + j.exportNamedDeclaration( + j.variableDeclaration('const', [ + j.variableDeclarator( + j.identifier('config'), + j.objectExpression([ + j.objectProperty(j.identifier('amp'), desiredAmpValue), + ]) + ), + ]) + ) + ) + } + + return done() +} diff --git a/packages/next-codemod/tsconfig.json b/packages/next-codemod/tsconfig.json new file mode 100644 index 0000000000000..bad5755406a6a --- /dev/null +++ b/packages/next-codemod/tsconfig.json @@ -0,0 +1,12 @@ +{ + "compilerOptions": { + "module": "commonjs", + "sourceMap": true, + "esModuleInterop": true, + "target": "es2015", + "downlevelIteration": true, + "preserveWatchOutput": true + }, + "include": ["**/*.ts"], + "exclude": ["node_modules"] +} diff --git a/packages/next/next-server/lib/post-process.ts b/packages/next/next-server/lib/post-process.ts index 7917c9b7dbcdf..de320058af418 100644 --- a/packages/next/next-server/lib/post-process.ts +++ b/packages/next/next-server/lib/post-process.ts @@ -115,13 +115,16 @@ class FontOptimizerMiddleware implements PostProcessMiddleware { (tag: HTMLElement) => tag.getAttribute('rel') === 'stylesheet' && tag.hasAttribute('data-href') && - OPTIMIZED_FONT_PROVIDERS.some((url) => - tag.getAttribute('data-href').startsWith(url) - ) + OPTIMIZED_FONT_PROVIDERS.some((url) => { + const dataHref = tag.getAttribute('data-href') + return dataHref ? dataHref.startsWith(url) : false + }) ) .forEach((element: HTMLElement) => { const url = element.getAttribute('data-href') - this.fontDefinitions.push(url) + if (url) { + this.fontDefinitions.push(url) + } }) } mutate = async ( @@ -164,7 +167,15 @@ class ImageOptimizerMiddleware implements PostProcessMiddleware { break } } - _data.preloads.images = eligibleImages.map((el) => el.getAttribute('src')) + + _data.preloads.images = [] + + for (const imgEl of eligibleImages) { + const src = imgEl.getAttribute('src') + if (src) { + _data.preloads.images.push(src) + } + } } mutate = async (markup: string, _data: postProcessData) => { let result = markup @@ -203,9 +214,14 @@ function imageIsNotTooSmall(imgElement: HTMLElement): boolean { return true } try { + const heightAttr = imgElement.getAttribute('height') + const widthAttr = imgElement.getAttribute('width') + if (!heightAttr || !widthAttr) { + return true + } + if ( - parseInt(imgElement.getAttribute('height')) * - parseInt(imgElement.getAttribute('width')) <= + parseInt(heightAttr) * parseInt(widthAttr) <= IMAGE_PRELOAD_SIZE_THRESHOLD ) { return false diff --git a/yarn.lock b/yarn.lock index d366f5c7016fb..4580370555128 100644 --- a/yarn.lock +++ b/yarn.lock @@ -58,6 +58,22 @@ dependencies: "@babel/highlight" "^7.8.3" +"@babel/code-frame@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.10.4.tgz#168da1a36e90da68ae8d49c0f1b48c7c6249213a" + integrity sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg== + dependencies: + "@babel/highlight" "^7.10.4" + +"@babel/compat-data@^7.10.4", "@babel/compat-data@^7.11.0": + version "7.11.0" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.11.0.tgz#e9f73efe09af1355b723a7f39b11bad637d7c99c" + integrity sha512-TPSvJfv73ng0pfnEOh17bYMPQbI95+nGWc71Ss4vZdRBHTDqmM9Z8ZV4rYz8Ks7sfzc95n30k6ODIq5UGnXcYQ== + dependencies: + browserslist "^4.12.0" + invariant "^2.2.4" + semver "^5.5.0" + "@babel/compat-data@^7.9.6": version "7.9.6" resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.9.6.tgz#3f604c40e420131affe6f2c8052e9a275ae2049b" @@ -105,6 +121,28 @@ semver "^5.4.1" source-map "^0.5.0" +"@babel/core@^7.1.6": + version "7.11.1" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.11.1.tgz#2c55b604e73a40dc21b0e52650b11c65cf276643" + integrity sha512-XqF7F6FWQdKGGWAzGELL+aCO1p+lRY5Tj5/tbT3St1G8NaH70jhhDIKknIZaDans0OQBG5wRAldROLHSt44BgQ== + dependencies: + "@babel/code-frame" "^7.10.4" + "@babel/generator" "^7.11.0" + "@babel/helper-module-transforms" "^7.11.0" + "@babel/helpers" "^7.10.4" + "@babel/parser" "^7.11.1" + "@babel/template" "^7.10.4" + "@babel/traverse" "^7.11.0" + "@babel/types" "^7.11.0" + convert-source-map "^1.7.0" + debug "^4.1.0" + gensync "^1.0.0-beta.1" + json5 "^2.1.2" + lodash "^4.17.19" + resolve "^1.3.2" + semver "^5.4.1" + source-map "^0.5.0" + "@babel/core@^7.7.5": version "7.9.6" resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.9.6.tgz#d9aa1f580abf3b2286ef40b6904d390904c63376" @@ -126,6 +164,15 @@ semver "^5.4.1" source-map "^0.5.0" +"@babel/generator@^7.11.0": + version "7.11.0" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.11.0.tgz#4b90c78d8c12825024568cbe83ee6c9af193585c" + integrity sha512-fEm3Uzw7Mc9Xi//qU20cBKatTfs2aOtKqmvy/Vm7RkJEGFQ4xc9myCfbXxqK//ZS8MR/ciOHw6meGASJuKmDfQ== + dependencies: + "@babel/types" "^7.11.0" + jsesc "^2.5.1" + source-map "^0.5.0" + "@babel/generator@^7.4.0", "@babel/generator@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.8.3.tgz#0e22c005b0a94c1c74eafe19ef78ce53a4d45c03" @@ -159,6 +206,21 @@ dependencies: "@babel/types" "^7.8.3" +"@babel/helper-annotate-as-pure@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.10.4.tgz#5bf0d495a3f757ac3bda48b5bf3b3ba309c72ba3" + integrity sha512-XQlqKQP4vXFB7BN8fEEerrmYvHp3fK/rBkRFz9jaJbzK0B1DSfej9Kc7ZzE8Z/OnId1jpJdNAZ3BFQjWG68rcA== + dependencies: + "@babel/types" "^7.10.4" + +"@babel/helper-builder-binary-assignment-operator-visitor@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@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/helper-explode-assignable-expression" "^7.10.4" + "@babel/types" "^7.10.4" + "@babel/helper-builder-binary-assignment-operator-visitor@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.8.3.tgz#c84097a427a061ac56a1c30ebf54b7b22d241503" @@ -181,6 +243,17 @@ "@babel/helper-annotate-as-pure" "^7.8.3" "@babel/types" "^7.9.0" +"@babel/helper-compilation-targets@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.10.4.tgz#804ae8e3f04376607cc791b9d47d540276332bd2" + integrity sha512-a3rYhlsGV0UHNDvrtOXBg8/OpfV0OKTkxKPzIplS1zpx7CygDcWWxckxZeDd3gzPzC4kUT0A4nVFDK0wGMh4MQ== + dependencies: + "@babel/compat-data" "^7.10.4" + browserslist "^4.12.0" + invariant "^2.2.4" + levenary "^1.1.1" + semver "^5.5.0" + "@babel/helper-compilation-targets@^7.9.6": version "7.9.6" resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.9.6.tgz#1e05b7ccc9d38d2f8b40b458b380a04dcfadd38a" @@ -191,6 +264,18 @@ levenary "^1.1.1" semver "^5.5.0" +"@babel/helper-create-class-features-plugin@^7.10.4", "@babel/helper-create-class-features-plugin@^7.10.5": + version "7.10.5" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.10.5.tgz#9f61446ba80e8240b0a5c85c6fdac8459d6f259d" + integrity sha512-0nkdeijB7VlZoLT3r/mY3bUkw3T8WG/hNw+FATs/6+pG2039IJWjTYL0VTISqsNHMUTEnwbVnc89WIJX9Qed0A== + dependencies: + "@babel/helper-function-name" "^7.10.4" + "@babel/helper-member-expression-to-functions" "^7.10.5" + "@babel/helper-optimise-call-expression" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-replace-supers" "^7.10.4" + "@babel/helper-split-export-declaration" "^7.10.4" + "@babel/helper-create-class-features-plugin@^7.2.1", "@babel/helper-create-class-features-plugin@^7.7.4": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.8.3.tgz#5b94be88c255f140fd2c10dd151e7f98f4bff397" @@ -213,6 +298,15 @@ "@babel/helper-replace-supers" "^7.8.6" "@babel/helper-split-export-declaration" "^7.8.3" +"@babel/helper-create-regexp-features-plugin@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.10.4.tgz#fdd60d88524659a0b6959c0579925e425714f3b8" + integrity sha512-2/hu58IEPKeoLF45DBwx3XFqsbCXmkdAay4spVr2x0jYgRxrSNp+ePwvSsy9g6YSaNDcKIQVPXk1Ov8S2edk2g== + dependencies: + "@babel/helper-annotate-as-pure" "^7.10.4" + "@babel/helper-regex" "^7.10.4" + regexpu-core "^4.7.0" + "@babel/helper-create-regexp-features-plugin@^7.7.4": version "7.7.4" resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.7.4.tgz#6d5762359fd34f4da1500e4cff9955b5299aaf59" @@ -228,6 +322,15 @@ "@babel/helper-regex" "^7.8.3" regexpu-core "^4.7.0" +"@babel/helper-define-map@^7.10.4": + version "7.10.5" + resolved "https://registry.yarnpkg.com/@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-define-map@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/helper-define-map/-/helper-define-map-7.8.3.tgz#a0655cad5451c3760b726eba875f1cd8faa02c15" @@ -236,6 +339,14 @@ "@babel/types" "^7.8.3" lodash "^4.17.13" +"@babel/helper-explode-assignable-expression@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.10.4.tgz#40a1cd917bff1288f699a94a75b37a1a2dbd8c7c" + integrity sha512-4K71RyRQNPRrR85sr5QY4X3VwG4wtVoXZB9+L3r1Gp38DhELyHCtovqydRi7c1Ovb17eRGiQ/FD5s8JdU0Uy5A== + dependencies: + "@babel/traverse" "^7.10.4" + "@babel/types" "^7.10.4" + "@babel/helper-explode-assignable-expression@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.8.3.tgz#a728dc5b4e89e30fc2dfc7d04fa28a930653f982" @@ -243,6 +354,15 @@ "@babel/traverse" "^7.8.3" "@babel/types" "^7.8.3" +"@babel/helper-function-name@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz#d2d3b20c59ad8c47112fa7d2a94bc09d5ef82f1a" + integrity sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ== + dependencies: + "@babel/helper-get-function-arity" "^7.10.4" + "@babel/template" "^7.10.4" + "@babel/types" "^7.10.4" + "@babel/helper-function-name@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.8.3.tgz#eeeb665a01b1f11068e9fb86ad56a1cb1a824cca" @@ -259,18 +379,39 @@ "@babel/template" "^7.8.3" "@babel/types" "^7.9.5" +"@babel/helper-get-function-arity@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz#98c1cbea0e2332f33f9a4661b8ce1505b2c19ba2" + integrity sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A== + dependencies: + "@babel/types" "^7.10.4" + "@babel/helper-get-function-arity@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.8.3.tgz#b894b947bd004381ce63ea1db9f08547e920abd5" dependencies: "@babel/types" "^7.8.3" +"@babel/helper-hoist-variables@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@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-hoist-variables@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.8.3.tgz#1dbe9b6b55d78c9b4183fc8cdc6e30ceb83b7134" dependencies: "@babel/types" "^7.8.3" +"@babel/helper-member-expression-to-functions@^7.10.4", "@babel/helper-member-expression-to-functions@^7.10.5": + version "7.11.0" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.11.0.tgz#ae69c83d84ee82f4b42f96e2a09410935a8f26df" + integrity sha512-JbFlKHFntRV5qKw3YC0CvQnDZ4XMwgzzBbld7Ly4Mj4cbFy3KywcR8NtNctRToMWJOVvLINJv525Gd6wwVEx/Q== + dependencies: + "@babel/types" "^7.11.0" + "@babel/helper-member-expression-to-functions@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.8.3.tgz#659b710498ea6c1d9907e0c73f206eee7dadc24c" @@ -283,12 +424,32 @@ dependencies: "@babel/types" "^7.7.4" +"@babel/helper-module-imports@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.10.4.tgz#4c5c54be04bd31670a7382797d75b9fa2e5b5620" + integrity sha512-nEQJHqYavI217oD9+s5MUBzk6x1IlvoS9WTPfgG43CbMEeStE0v+r+TucWdx8KFGowPGvyOkDT9+7DHedIDnVw== + dependencies: + "@babel/types" "^7.10.4" + "@babel/helper-module-imports@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.8.3.tgz#7fe39589b39c016331b6b8c3f441e8f0b1419498" dependencies: "@babel/types" "^7.8.3" +"@babel/helper-module-transforms@^7.10.4", "@babel/helper-module-transforms@^7.10.5", "@babel/helper-module-transforms@^7.11.0": + version "7.11.0" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.11.0.tgz#b16f250229e47211abdd84b34b64737c2ab2d359" + integrity sha512-02EVu8COMuTRO1TAzdMtpBPbe6aQ1w/8fePD2YgQmxZU4gpNWaL9gK3Jp7dxlkUlUCJOTaSeA+Hrm1BRQwqIhg== + dependencies: + "@babel/helper-module-imports" "^7.10.4" + "@babel/helper-replace-supers" "^7.10.4" + "@babel/helper-simple-access" "^7.10.4" + "@babel/helper-split-export-declaration" "^7.11.0" + "@babel/template" "^7.10.4" + "@babel/types" "^7.11.0" + lodash "^4.17.19" + "@babel/helper-module-transforms@^7.9.0": version "7.9.0" resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.9.0.tgz#43b34dfe15961918707d247327431388e9fe96e5" @@ -301,6 +462,13 @@ "@babel/types" "^7.9.0" lodash "^4.17.13" +"@babel/helper-optimise-call-expression@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.10.4.tgz#50dc96413d594f995a77905905b05893cd779673" + integrity sha512-n3UGKY4VXwXThEiKrgRAoVPBMqeoPgHVqiHZOanAJCG9nQUL2pLRQirUzl0ioKclHGpGqRgIOkgcIJaIWLpygg== + dependencies: + "@babel/types" "^7.10.4" + "@babel/helper-optimise-call-expression@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.8.3.tgz#7ed071813d09c75298ef4f208956006b6111ecb9" @@ -316,6 +484,13 @@ resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz#2f75a831269d4f677de49986dff59927533cf375" integrity sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg== +"@babel/helper-regex@^7.10.4": + version "7.10.5" + resolved "https://registry.yarnpkg.com/@babel/helper-regex/-/helper-regex-7.10.5.tgz#32dfbb79899073c415557053a19bd055aae50ae0" + integrity sha512-68kdUAzDrljqBrio7DYAEgCoJHxppJOERHOgOrDN7WjOzP0ZQ1LsSDRXcemzVZaLvjaJsJEESb6qt+znNuENDg== + dependencies: + lodash "^4.17.19" + "@babel/helper-regex@^7.4.4": version "7.5.5" resolved "https://registry.yarnpkg.com/@babel/helper-regex/-/helper-regex-7.5.5.tgz#0aa6824f7100a2e0e89c1527c23936c152cab351" @@ -328,6 +503,17 @@ dependencies: lodash "^4.17.13" +"@babel/helper-remap-async-to-generator@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.10.4.tgz#fce8bea4e9690bbe923056ded21e54b4e8b68ed5" + integrity sha512-86Lsr6NNw3qTNl+TBcF1oRZMaVzJtbWTyTko+CQL/tvNvcGYEFKbLXDPxtW0HKk3McNOk4KzY55itGWCAGK5tg== + dependencies: + "@babel/helper-annotate-as-pure" "^7.10.4" + "@babel/helper-wrap-function" "^7.10.4" + "@babel/template" "^7.10.4" + "@babel/traverse" "^7.10.4" + "@babel/types" "^7.10.4" + "@babel/helper-remap-async-to-generator@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.8.3.tgz#273c600d8b9bf5006142c1e35887d555c12edd86" @@ -338,6 +524,16 @@ "@babel/traverse" "^7.8.3" "@babel/types" "^7.8.3" +"@babel/helper-replace-supers@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.10.4.tgz#d585cd9388ea06e6031e4cd44b6713cbead9e6cf" + integrity sha512-sPxZfFXocEymYTdVK1UNmFPBN+Hv5mJkLPsYWwGBxZAxaWfFu+xqp7b6qWD0yjNuNL2VKc6L5M18tOXUP7NU0A== + dependencies: + "@babel/helper-member-expression-to-functions" "^7.10.4" + "@babel/helper-optimise-call-expression" "^7.10.4" + "@babel/traverse" "^7.10.4" + "@babel/types" "^7.10.4" + "@babel/helper-replace-supers@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.8.3.tgz#91192d25f6abbcd41da8a989d4492574fb1530bc" @@ -356,6 +552,14 @@ "@babel/traverse" "^7.8.6" "@babel/types" "^7.8.6" +"@babel/helper-simple-access@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.10.4.tgz#0f5ccda2945277a2a7a2d3a821e15395edcf3461" + integrity sha512-0fMy72ej/VEvF8ULmX6yb5MtHG4uH4Dbd6I/aHDb/JVg0bbivwt9Wg+h3uMvX+QSFtwr5MeItvazbrc4jtRAXw== + dependencies: + "@babel/template" "^7.10.4" + "@babel/types" "^7.10.4" + "@babel/helper-simple-access@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.8.3.tgz#7f8109928b4dab4654076986af575231deb639ae" @@ -363,16 +567,45 @@ "@babel/template" "^7.8.3" "@babel/types" "^7.8.3" +"@babel/helper-skip-transparent-expression-wrappers@^7.11.0": + version "7.11.0" + resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.11.0.tgz#eec162f112c2f58d3af0af125e3bb57665146729" + integrity sha512-0XIdiQln4Elglgjbwo9wuJpL/K7AGCY26kmEt0+pRP0TAj4jjyNq1MjoRvikrTVqKcx4Gysxt4cXvVFXP/JO2Q== + dependencies: + "@babel/types" "^7.11.0" + +"@babel/helper-split-export-declaration@^7.10.4", "@babel/helper-split-export-declaration@^7.11.0": + version "7.11.0" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.11.0.tgz#f8a491244acf6a676158ac42072911ba83ad099f" + integrity sha512-74Vejvp6mHkGE+m+k5vHY93FX2cAtrw1zXrZXRlG4l410Nm9PxfEiVTn1PjDPV5SnmieiueY4AFg2xqhNFuuZg== + dependencies: + "@babel/types" "^7.11.0" + "@babel/helper-split-export-declaration@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.8.3.tgz#31a9f30070f91368a7182cf05f831781065fc7a9" dependencies: "@babel/types" "^7.8.3" +"@babel/helper-validator-identifier@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz#a78c7a7251e01f616512d31b10adcf52ada5e0d2" + integrity sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw== + "@babel/helper-validator-identifier@^7.9.5": version "7.9.5" resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.9.5.tgz#90977a8e6fbf6b431a7dc31752eee233bf052d80" +"@babel/helper-wrap-function@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.10.4.tgz#8a6f701eab0ff39f765b5a1cfef409990e624b87" + integrity sha512-6py45WvEF0MhiLrdxtRjKjufwLL1/ob2qDJgg5JgNdojBAZSAKnAjkyOCNug6n+OBl4VW76XjvgSFTdaMcW0Ug== + dependencies: + "@babel/helper-function-name" "^7.10.4" + "@babel/template" "^7.10.4" + "@babel/traverse" "^7.10.4" + "@babel/types" "^7.10.4" + "@babel/helper-wrap-function@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.8.3.tgz#9dbdb2bb55ef14aaa01fe8c99b629bd5352d8610" @@ -382,6 +615,15 @@ "@babel/traverse" "^7.8.3" "@babel/types" "^7.8.3" +"@babel/helpers@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.10.4.tgz#2abeb0d721aff7c0a97376b9e1f6f65d7a475044" + integrity sha512-L2gX/XeUONeEbI78dXSrJzGdz4GQ+ZTA/aazfUsFaWjSe95kiCuOZ5HsXvkiw3iwF+mFHSRUfJU8t6YavocdXA== + dependencies: + "@babel/template" "^7.10.4" + "@babel/traverse" "^7.10.4" + "@babel/types" "^7.10.4" + "@babel/helpers@^7.7.4", "@babel/helpers@^7.9.6": version "7.9.6" resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.9.6.tgz#092c774743471d0bb6c7de3ad465ab3d3486d580" @@ -398,6 +640,15 @@ "@babel/traverse" "^7.8.3" "@babel/types" "^7.8.3" +"@babel/highlight@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@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/highlight@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.8.3.tgz#28f173d04223eaaa59bc1d439a3836e6d1265797" @@ -410,6 +661,11 @@ version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.8.3.tgz#790874091d2001c9be6ec426c2eed47bc7679081" +"@babel/parser@^7.1.6", "@babel/parser@^7.10.4", "@babel/parser@^7.11.0", "@babel/parser@^7.11.1": + version "7.11.3" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.11.3.tgz#9e1eae46738bcd08e23e867bab43e7b95299a8f9" + integrity sha512-REo8xv7+sDxkKvoxEywIdsNFiZLybwdI7hcT5uEPyQrSMB4YQ973BfC9OOrD/81MaIjh6UxdulIQXkjmiH3PcA== + "@babel/parser@^7.7.7", "@babel/parser@^7.9.6": version "7.9.6" resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.9.6.tgz#3b1bbb30dabe600cd72db58720998376ff653bc7" @@ -418,6 +674,15 @@ version "7.9.4" resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.9.4.tgz#68a35e6b0319bbc014465be43828300113f2f2e8" +"@babel/plugin-proposal-async-generator-functions@^7.10.4": + version "7.10.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.10.5.tgz#3491cabf2f7c179ab820606cec27fed15e0e8558" + integrity sha512-cNMCVezQbrRGvXJwm9fu/1sJj9bHdGAgKodZdLqOQIpfoH3raqmRPBM17+lh7CzhiKRRBrGtZL9WcjxSoGYUSg== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-remap-async-to-generator" "^7.10.4" + "@babel/plugin-syntax-async-generators" "^7.8.0" + "@babel/plugin-proposal-async-generator-functions@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.8.3.tgz#bad329c670b382589721b27540c7d288601c6e6f" @@ -440,6 +705,22 @@ "@babel/helper-create-class-features-plugin" "^7.8.3" "@babel/helper-plugin-utils" "^7.8.3" +"@babel/plugin-proposal-class-properties@^7.1.0", "@babel/plugin-proposal-class-properties@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.10.4.tgz#a33bf632da390a59c7a8c570045d1115cd778807" + integrity sha512-vhwkEROxzcHGNu2mzUC0OFFNXdZ4M23ib8aRRcJSsW8BZK9pQMD7QB7csl97NBbgGZO7ZyHUyKDnxzOaP4IrCg== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-proposal-dynamic-import@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.10.4.tgz#ba57a26cb98b37741e9d5bca1b8b0ddf8291f17e" + integrity sha512-up6oID1LeidOOASNXgv/CFbgBqTuKJ0cJjz6An5tWD+NVBNlp3VNSBxv2ZdU7SYl3NxJC7agAQDApZusV6uFwQ== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-dynamic-import" "^7.8.0" + "@babel/plugin-proposal-dynamic-import@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.8.3.tgz#38c4fe555744826e97e2ae930b0fb4cc07e66054" @@ -447,7 +728,7 @@ "@babel/helper-plugin-utils" "^7.8.3" "@babel/plugin-syntax-dynamic-import" "^7.8.0" -"@babel/plugin-proposal-export-namespace-from@7.10.4": +"@babel/plugin-proposal-export-namespace-from@7.10.4", "@babel/plugin-proposal-export-namespace-from@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.10.4.tgz#570d883b91031637b3e2958eea3c438e62c05f54" integrity sha512-aNdf0LY6/3WXkhh0Fdb6Zk9j1NMD8ovj3F6r0+3j837Pn1S1PdNtcwJ5EG9WkVPNHPxyJDaxMaAOVq4eki0qbg== @@ -455,6 +736,14 @@ "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-syntax-export-namespace-from" "^7.8.3" +"@babel/plugin-proposal-json-strings@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.10.4.tgz#593e59c63528160233bd321b1aebe0820c2341db" + integrity sha512-fCL7QF0Jo83uy1K0P2YXrfX11tj3lkpN7l4dMv9Y9VkowkhkQDwFHFd8IiwyK5MZjE8UpbgokkgtcReH88Abaw== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-json-strings" "^7.8.0" + "@babel/plugin-proposal-json-strings@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.8.3.tgz#da5216b238a98b58a1e05d6852104b10f9a70d6b" @@ -462,6 +751,14 @@ "@babel/helper-plugin-utils" "^7.8.3" "@babel/plugin-syntax-json-strings" "^7.8.0" +"@babel/plugin-proposal-logical-assignment-operators@^7.11.0": + version "7.11.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.11.0.tgz#9f80e482c03083c87125dee10026b58527ea20c8" + integrity sha512-/f8p4z+Auz0Uaf+i8Ekf1iM7wUNLcViFUGiPxKeXvxTSl63B875YPiVdUDdem7hREcI0E0kSpEhS8tF5RphK7Q== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" + "@babel/plugin-proposal-nullish-coalescing-operator@7.8.3", "@babel/plugin-proposal-nullish-coalescing-operator@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.8.3.tgz#e4572253fdeed65cddeecfdab3f928afeb2fd5d2" @@ -469,6 +766,14 @@ "@babel/helper-plugin-utils" "^7.8.3" "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.0" +"@babel/plugin-proposal-nullish-coalescing-operator@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.10.4.tgz#02a7e961fc32e6d5b2db0649e01bf80ddee7e04a" + integrity sha512-wq5n1M3ZUlHl9sqT2ok1T2/MTt6AXE0e1Lz4WzWBr95LsAZ5qDXe4KnFuauYyEyLiohvXFMdbsOTMyLZs91Zlw== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.0" + "@babel/plugin-proposal-numeric-separator@7.8.3", "@babel/plugin-proposal-numeric-separator@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.8.3.tgz#5d6769409699ec9b3b68684cd8116cedff93bad8" @@ -476,6 +781,14 @@ "@babel/helper-plugin-utils" "^7.8.3" "@babel/plugin-syntax-numeric-separator" "^7.8.3" +"@babel/plugin-proposal-numeric-separator@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.10.4.tgz#ce1590ff0a65ad12970a609d78855e9a4c1aef06" + integrity sha512-73/G7QoRoeNkLZFxsoCCvlg4ezE4eM+57PnOqgaPOozd5myfj7p0muD1mRVJvbUWbOzD+q3No2bWbaKy+DJ8DA== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-numeric-separator" "^7.10.4" + "@babel/plugin-proposal-object-rest-spread@7.9.6", "@babel/plugin-proposal-object-rest-spread@^7.9.6": version "7.9.6" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.9.6.tgz#7a093586fcb18b08266eb1a7177da671ac575b63" @@ -484,6 +797,15 @@ "@babel/plugin-syntax-object-rest-spread" "^7.8.0" "@babel/plugin-transform-parameters" "^7.9.5" +"@babel/plugin-proposal-object-rest-spread@^7.0.0", "@babel/plugin-proposal-object-rest-spread@^7.11.0": + version "7.11.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.11.0.tgz#bd81f95a1f746760ea43b6c2d3d62b11790ad0af" + integrity sha512-wzch41N4yztwoRw0ak+37wxwJM2oiIiy6huGCoqkvSTA9acYWcPfn9Y4aJqmFFJ70KTJUu29f3DQ43uJ9HXzEA== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-object-rest-spread" "^7.8.0" + "@babel/plugin-transform-parameters" "^7.10.4" + "@babel/plugin-proposal-object-rest-spread@^7.3.2": version "7.7.7" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.7.7.tgz#9f27075004ab99be08c5c1bd653a2985813cb370" @@ -491,6 +813,14 @@ "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-syntax-object-rest-spread" "^7.7.4" +"@babel/plugin-proposal-optional-catch-binding@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.10.4.tgz#31c938309d24a78a49d68fdabffaa863758554dd" + integrity sha512-LflT6nPh+GK2MnFiKDyLiqSqVHkQnVf7hdoAvyTnnKj9xB3docGRsdPuxp6qqqW19ifK3xgc9U5/FwrSaCNX5g== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.0" + "@babel/plugin-proposal-optional-catch-binding@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.8.3.tgz#9dee96ab1650eed88646ae9734ca167ac4a9c5c9" @@ -505,6 +835,31 @@ "@babel/helper-plugin-utils" "^7.8.3" "@babel/plugin-syntax-optional-chaining" "^7.8.0" +"@babel/plugin-proposal-optional-chaining@^7.11.0": + version "7.11.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.11.0.tgz#de5866d0646f6afdaab8a566382fe3a221755076" + integrity sha512-v9fZIu3Y8562RRwhm1BbMRxtqZNFmFA2EG+pT2diuU8PT3H6T/KXoZ54KgYisfOFZHV6PfvAiBIZ9Rcz+/JCxA== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-skip-transparent-expression-wrappers" "^7.11.0" + "@babel/plugin-syntax-optional-chaining" "^7.8.0" + +"@babel/plugin-proposal-private-methods@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.10.4.tgz#b160d972b8fdba5c7d111a145fc8c421fc2a6909" + integrity sha512-wh5GJleuI8k3emgTg5KkJK6kHNsGEr0uBTDBuQUBJwckk9xs1ez79ioheEVVxMLyPscB0LfkbVHslQqIzWV6Bw== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-proposal-unicode-property-regex@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.10.4.tgz#4483cda53041ce3413b7fe2f00022665ddfaa75d" + integrity sha512-H+3fOgPnEXFL9zGYtKQe4IDOPKYlZdF1kqFDQRRb8PK4B8af1vAGK04tF5iQAAsui+mHNBQSAtd2/ndEDe9wuA== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-proposal-unicode-property-regex@^7.4.4": version "7.7.7" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.7.7.tgz#433fa9dac64f953c12578b29633f456b68831c4e" @@ -531,6 +886,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.0" +"@babel/plugin-syntax-class-properties@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.10.4.tgz#6644e6a0baa55a61f9e3231f6c9eeb6ee46c124c" + integrity sha512-GCSBF7iUle6rNugfURwNmCGG3Z/2+opxAMLs1nND4bhEG5PuxTIggDBoeYYSujAlLtsupzOHYJQgPS3pivwXIA== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-class-properties@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.8.3.tgz#6cb933a8872c8d359bfde69bbeaae5162fd1e8f7" @@ -550,6 +912,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.3" +"@babel/plugin-syntax-flow@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.10.4.tgz#53351dd7ae01995e567d04ce42af1a6e0ba846a6" + integrity sha512-yxQsX1dJixF4qEEdzVbst3SZQ58Nrooz8NV9Z9GL4byTE25BvJgl5lf0RECUf0fh28rZBb/RYTWn/eeKwCMrZQ== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-flow@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.8.3.tgz#f2c883bd61a6316f2c89380ae5122f923ba4527f" @@ -574,6 +943,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.3" +"@babel/plugin-syntax-logical-assignment-operators@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@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.10.4" + "@babel/plugin-syntax-logical-assignment-operators@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.8.3.tgz#3995d7d7ffff432f6ddc742b47e730c054599897" @@ -586,6 +962,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.0" +"@babel/plugin-syntax-numeric-separator@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@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.10.4" + "@babel/plugin-syntax-numeric-separator@^7.8.0", "@babel/plugin-syntax-numeric-separator@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.8.3.tgz#0e3fb63e09bea1b11e96467271c8308007e7c41f" @@ -616,12 +999,26 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.0" +"@babel/plugin-syntax-top-level-await@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.10.4.tgz#4bbeb8917b54fcf768364e0a81f560e33a3ef57d" + integrity sha512-ni1brg4lXEmWyafKr0ccFWkJG0CeMt4WV1oyeBW6EFObF4oOHclbkj5cARxAPQyAQ2UTuplJyK4nfkXIMMFvsQ== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-top-level-await@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.8.3.tgz#3acdece695e6b13aaf57fc291d1a800950c71391" dependencies: "@babel/helper-plugin-utils" "^7.8.3" +"@babel/plugin-syntax-typescript@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.10.4.tgz#2f55e770d3501e83af217d782cb7517d7bb34d25" + integrity sha512-oSAEz1YkBCAKr5Yiq8/BNtvSAPwkp/IyUnwZogd8p+F0RuYQQrLeRUzIQhueQTTBy/F+a40uS7OFKxnkRvmvFQ== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-typescript@^7.7.4": version "7.7.4" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.7.4.tgz#5d037ffa10f3b25a16f32570ebbe7a8c2efa304b" @@ -634,12 +1031,28 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.3" +"@babel/plugin-transform-arrow-functions@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.10.4.tgz#e22960d77e697c74f41c501d44d73dbf8a6a64cd" + integrity sha512-9J/oD1jV0ZCBcgnoFWFq1vJd4msoKb/TCpGNFyyLt0zABdcvgK3aYikZ8HjzB14c26bc7E3Q1yugpwGy2aTPNA== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-transform-arrow-functions@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.8.3.tgz#82776c2ed0cd9e1a49956daeb896024c9473b8b6" dependencies: "@babel/helper-plugin-utils" "^7.8.3" +"@babel/plugin-transform-async-to-generator@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.10.4.tgz#41a5017e49eb6f3cda9392a51eef29405b245a37" + integrity sha512-F6nREOan7J5UXTLsDsZG3DXmZSVofr2tGNwfdrVwkDWHfQckbQXnXSPfD7iO+c/2HGqycwyLST3DnZ16n+cBJQ== + dependencies: + "@babel/helper-module-imports" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-remap-async-to-generator" "^7.10.4" + "@babel/plugin-transform-async-to-generator@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.8.3.tgz#4308fad0d9409d71eafb9b1a6ee35f9d64b64086" @@ -648,12 +1061,26 @@ "@babel/helper-plugin-utils" "^7.8.3" "@babel/helper-remap-async-to-generator" "^7.8.3" +"@babel/plugin-transform-block-scoped-functions@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.10.4.tgz#1afa595744f75e43a91af73b0d998ecfe4ebc2e8" + integrity sha512-WzXDarQXYYfjaV1szJvN3AD7rZgZzC1JtjJZ8dMHUyiK8mxPRahynp14zzNjU3VkPqPsO38CzxiWO1c9ARZ8JA== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-transform-block-scoped-functions@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.8.3.tgz#437eec5b799b5852072084b3ae5ef66e8349e8a3" dependencies: "@babel/helper-plugin-utils" "^7.8.3" +"@babel/plugin-transform-block-scoping@^7.10.4": + version "7.11.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.11.1.tgz#5b7efe98852bef8d652c0b28144cd93a9e4b5215" + integrity sha512-00dYeDE0EVEHuuM+26+0w/SCL0BH2Qy7LwHuI4Hi4MH5gkC8/AqMN5uWFJIsoXZrAphiMm1iXzBw6L2T+eA0ew== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-transform-block-scoping@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.8.3.tgz#97d35dab66857a437c166358b91d09050c868f3a" @@ -661,6 +1088,20 @@ "@babel/helper-plugin-utils" "^7.8.3" lodash "^4.17.13" +"@babel/plugin-transform-classes@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.10.4.tgz#405136af2b3e218bc4a1926228bc917ab1a0adc7" + integrity sha512-2oZ9qLjt161dn1ZE0Ms66xBncQH4In8Sqw1YWgBUZuGVJJS5c0OFZXL6dP2MRHrkU/eKhWg8CzFJhRQl50rQxA== + dependencies: + "@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.10.4" + "@babel/helper-split-export-declaration" "^7.10.4" + globals "^11.1.0" + "@babel/plugin-transform-classes@^7.9.5": version "7.9.5" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.9.5.tgz#800597ddb8aefc2c293ed27459c1fcc935a26c2c" @@ -674,18 +1115,40 @@ "@babel/helper-split-export-declaration" "^7.8.3" globals "^11.1.0" +"@babel/plugin-transform-computed-properties@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.10.4.tgz#9ded83a816e82ded28d52d4b4ecbdd810cdfc0eb" + integrity sha512-JFwVDXcP/hM/TbyzGq3l/XWGut7p46Z3QvqFMXTfk6/09m7xZHJUN9xHfsv7vqqD4YnfI5ueYdSJtXqqBLyjBw== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-transform-computed-properties@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.8.3.tgz#96d0d28b7f7ce4eb5b120bb2e0e943343c86f81b" dependencies: "@babel/helper-plugin-utils" "^7.8.3" +"@babel/plugin-transform-destructuring@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.10.4.tgz#70ddd2b3d1bea83d01509e9bb25ddb3a74fc85e5" + integrity sha512-+WmfvyfsyF603iPa6825mq6Qrb7uLjTOsa3XOFzlYcYDHSS4QmpOWOL0NNBY5qMbvrcf3tq0Cw+v4lxswOBpgA== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-transform-destructuring@^7.9.5": version "7.9.5" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.9.5.tgz#72c97cf5f38604aea3abf3b935b0e17b1db76a50" dependencies: "@babel/helper-plugin-utils" "^7.8.3" +"@babel/plugin-transform-dotall-regex@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.10.4.tgz#469c2062105c1eb6a040eaf4fac4b488078395ee" + integrity sha512-ZEAVvUTCMlMFAbASYSVQoxIbHm2OkG2MseW6bV2JjIygOjdVv8tuxrCTzj1+Rynh7ODb8GivUy7dzEXzEhuPaA== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-transform-dotall-regex@^7.4.4": version "7.7.7" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.7.7.tgz#3e9713f1b69f339e87fa796b097d73ded16b937b" @@ -700,12 +1163,27 @@ "@babel/helper-create-regexp-features-plugin" "^7.8.3" "@babel/helper-plugin-utils" "^7.8.3" +"@babel/plugin-transform-duplicate-keys@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.10.4.tgz#697e50c9fee14380fe843d1f306b295617431e47" + integrity sha512-GL0/fJnmgMclHiBTTWXNlYjYsA7rDrtsazHG6mglaGSTh0KsrW04qml+Bbz9FL0LcJIRwBWL5ZqlNHKTkU3xAA== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-transform-duplicate-keys@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.8.3.tgz#8d12df309aa537f272899c565ea1768e286e21f1" dependencies: "@babel/helper-plugin-utils" "^7.8.3" +"@babel/plugin-transform-exponentiation-operator@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.10.4.tgz#5ae338c57f8cf4001bdb35607ae66b92d665af2e" + integrity sha512-S5HgLVgkBcRdyQAHbKj+7KyuWx8C6t5oETmUuwz1pt3WTWJhsUV0WIIXuVvfXMxl/QQyHKlSCNNtaIamG8fysw== + dependencies: + "@babel/helper-builder-binary-assignment-operator-visitor" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-transform-exponentiation-operator@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.8.3.tgz#581a6d7f56970e06bf51560cd64f5e947b70d7b7" @@ -713,6 +1191,14 @@ "@babel/helper-builder-binary-assignment-operator-visitor" "^7.8.3" "@babel/helper-plugin-utils" "^7.8.3" +"@babel/plugin-transform-flow-strip-types@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.10.4.tgz#c497957f09e86e3df7296271e9eb642876bf7788" + integrity sha512-XTadyuqNst88UWBTdLjM+wEY7BFnY2sYtPyAidfC7M/QaZnSuIZpMvLxqGT7phAcnGyWh/XQFLKcGf04CnvxSQ== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-flow" "^7.10.4" + "@babel/plugin-transform-flow-strip-types@^7.9.0": version "7.9.0" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.9.0.tgz#8a3538aa40434e000b8f44a3c5c9ac7229bd2392" @@ -720,12 +1206,27 @@ "@babel/helper-plugin-utils" "^7.8.3" "@babel/plugin-syntax-flow" "^7.8.3" +"@babel/plugin-transform-for-of@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.10.4.tgz#c08892e8819d3a5db29031b115af511dbbfebae9" + integrity sha512-ItdQfAzu9AlEqmusA/65TqJ79eRcgGmpPPFvBnGILXZH975G0LNjP1yjHvGgfuCxqrPPueXOPe+FsvxmxKiHHQ== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-transform-for-of@^7.9.0": version "7.9.0" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.9.0.tgz#0f260e27d3e29cd1bb3128da5e76c761aa6c108e" dependencies: "@babel/helper-plugin-utils" "^7.8.3" +"@babel/plugin-transform-function-name@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.10.4.tgz#6a467880e0fc9638514ba369111811ddbe2644b7" + integrity sha512-OcDCq2y5+E0dVD5MagT5X+yTRbcvFjDI2ZVAottGH6tzqjx/LKpgkUepu3hp/u4tZBzxxpNGwLsAvGBvQ2mJzg== + dependencies: + "@babel/helper-function-name" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-transform-function-name@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.8.3.tgz#279373cb27322aaad67c2683e776dfc47196ed8b" @@ -733,18 +1234,41 @@ "@babel/helper-function-name" "^7.8.3" "@babel/helper-plugin-utils" "^7.8.3" +"@babel/plugin-transform-literals@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.10.4.tgz#9f42ba0841100a135f22712d0e391c462f571f3c" + integrity sha512-Xd/dFSTEVuUWnyZiMu76/InZxLTYilOSr1UlHV+p115Z/Le2Fi1KXkJUYz0b42DfndostYlPub3m8ZTQlMaiqQ== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-transform-literals@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.8.3.tgz#aef239823d91994ec7b68e55193525d76dbd5dc1" dependencies: "@babel/helper-plugin-utils" "^7.8.3" +"@babel/plugin-transform-member-expression-literals@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.10.4.tgz#b1ec44fcf195afcb8db2c62cd8e551c881baf8b7" + integrity sha512-0bFOvPyAoTBhtcJLr9VcwZqKmSjFml1iVxvPL0ReomGU53CX53HsM4h2SzckNdkQcHox1bpAqzxBI1Y09LlBSw== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-transform-member-expression-literals@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.8.3.tgz#963fed4b620ac7cbf6029c755424029fa3a40410" dependencies: "@babel/helper-plugin-utils" "^7.8.3" +"@babel/plugin-transform-modules-amd@^7.10.4": + version "7.10.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.10.5.tgz#1b9cddaf05d9e88b3aad339cb3e445c4f020a9b1" + integrity sha512-elm5uruNio7CTLFItVC/rIzKLfQ17+fX7EVz5W0TMgIHFo1zY0Ozzx+lgwhL4plzl8OzVn6Qasx5DeEFyoNiRw== + dependencies: + "@babel/helper-module-transforms" "^7.10.5" + "@babel/helper-plugin-utils" "^7.10.4" + babel-plugin-dynamic-import-node "^2.3.3" + "@babel/plugin-transform-modules-amd@^7.9.6": version "7.9.6" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.9.6.tgz#8539ec42c153d12ea3836e0e3ac30d5aae7b258e" @@ -762,6 +1286,26 @@ "@babel/helper-simple-access" "^7.8.3" babel-plugin-dynamic-import-node "^2.3.3" +"@babel/plugin-transform-modules-commonjs@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.10.4.tgz#66667c3eeda1ebf7896d41f1f16b17105a2fbca0" + integrity sha512-Xj7Uq5o80HDLlW64rVfDBhao6OX89HKUmb+9vWYaLXBZOma4gA6tw4Ni1O5qVDoZWUV0fxMYA0aYzOawz0l+1w== + dependencies: + "@babel/helper-module-transforms" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-simple-access" "^7.10.4" + babel-plugin-dynamic-import-node "^2.3.3" + +"@babel/plugin-transform-modules-systemjs@^7.10.4": + version "7.10.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.10.5.tgz#6270099c854066681bae9e05f87e1b9cadbe8c85" + integrity sha512-f4RLO/OL14/FP1AEbcsWMzpbUz6tssRaeQg11RH1BP/XnPpRoVwgeYViMFacnkaw4k4wjRSjn3ip1Uw9TaXuMw== + dependencies: + "@babel/helper-hoist-variables" "^7.10.4" + "@babel/helper-module-transforms" "^7.10.5" + "@babel/helper-plugin-utils" "^7.10.4" + babel-plugin-dynamic-import-node "^2.3.3" + "@babel/plugin-transform-modules-systemjs@^7.9.6": version "7.9.6" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.9.6.tgz#207f1461c78a231d5337a92140e52422510d81a4" @@ -771,6 +1315,14 @@ "@babel/helper-plugin-utils" "^7.8.3" babel-plugin-dynamic-import-node "^2.3.3" +"@babel/plugin-transform-modules-umd@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.10.4.tgz#9a8481fe81b824654b3a0b65da3df89f3d21839e" + integrity sha512-mohW5q3uAEt8T45YT7Qc5ws6mWgJAaL/8BfWD9Dodo1A3RKWli8wTS+WiQ/knF+tXlPirW/1/MqzzGfCExKECA== + dependencies: + "@babel/helper-module-transforms" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-transform-modules-umd@^7.9.0": version "7.9.0" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.9.0.tgz#e909acae276fec280f9b821a5f38e1f08b480697" @@ -778,18 +1330,40 @@ "@babel/helper-module-transforms" "^7.9.0" "@babel/helper-plugin-utils" "^7.8.3" +"@babel/plugin-transform-named-capturing-groups-regex@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.10.4.tgz#78b4d978810b6f3bcf03f9e318f2fc0ed41aecb6" + integrity sha512-V6LuOnD31kTkxQPhKiVYzYC/Jgdq53irJC/xBSmqcNcqFGV+PER4l6rU5SH2Vl7bH9mLDHcc0+l9HUOe4RNGKA== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.10.4" + "@babel/plugin-transform-named-capturing-groups-regex@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.8.3.tgz#a2a72bffa202ac0e2d0506afd0939c5ecbc48c6c" dependencies: "@babel/helper-create-regexp-features-plugin" "^7.8.3" +"@babel/plugin-transform-new-target@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.10.4.tgz#9097d753cb7b024cb7381a3b2e52e9513a9c6888" + integrity sha512-YXwWUDAH/J6dlfwqlWsztI2Puz1NtUAubXhOPLQ5gjR/qmQ5U96DY4FQO8At33JN4XPBhrjB8I4eMmLROjjLjw== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-transform-new-target@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.8.3.tgz#60cc2ae66d85c95ab540eb34babb6434d4c70c43" dependencies: "@babel/helper-plugin-utils" "^7.8.3" +"@babel/plugin-transform-object-super@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.10.4.tgz#d7146c4d139433e7a6526f888c667e314a093894" + integrity sha512-5iTw0JkdRdJvr7sY0vHqTpnruUpTea32JHmq/atIWqsnNussbRzjEDyWep8UNztt1B5IusBYg8Irb0bLbiEBCQ== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-replace-supers" "^7.10.4" + "@babel/plugin-transform-object-super@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.8.3.tgz#ebb6a1e7a86ffa96858bd6ac0102d65944261725" @@ -797,6 +1371,14 @@ "@babel/helper-plugin-utils" "^7.8.3" "@babel/helper-replace-supers" "^7.8.3" +"@babel/plugin-transform-parameters@^7.10.4": + version "7.10.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.10.5.tgz#59d339d58d0b1950435f4043e74e2510005e2c4a" + integrity sha512-xPHwUj5RdFV8l1wuYiu5S9fqWGM2DrYc24TMvUiRrPVm+SM3XeqU9BcokQX/kEUe+p2RBwy+yoiR1w/Blq6ubw== + dependencies: + "@babel/helper-get-function-arity" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-transform-parameters@^7.9.5": version "7.9.5" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.9.5.tgz#173b265746f5e15b2afe527eeda65b73623a0795" @@ -804,6 +1386,13 @@ "@babel/helper-get-function-arity" "^7.8.3" "@babel/helper-plugin-utils" "^7.8.3" +"@babel/plugin-transform-property-literals@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.10.4.tgz#f6fe54b6590352298785b83edd815d214c42e3c0" + integrity sha512-ofsAcKiUxQ8TY4sScgsGeR2vJIsfrzqvFb9GvJ5UdXDzl+MyYCaBj/FGzXuv7qE0aJcjWMILny1epqelnFlz8g== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-transform-property-literals@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.8.3.tgz#33194300d8539c1ed28c62ad5087ba3807b98263" @@ -847,12 +1436,26 @@ "@babel/helper-plugin-utils" "^7.8.3" "@babel/plugin-syntax-jsx" "^7.8.3" +"@babel/plugin-transform-regenerator@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.10.4.tgz#2015e59d839074e76838de2159db421966fd8b63" + integrity sha512-3thAHwtor39A7C04XucbMg17RcZ3Qppfxr22wYzZNcVIkPHfpM9J0SO8zuCV6SZa265kxBJSrfKTvDCYqBFXGw== + dependencies: + regenerator-transform "^0.14.2" + "@babel/plugin-transform-regenerator@^7.8.7": version "7.8.7" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.8.7.tgz#5e46a0dca2bee1ad8285eb0527e6abc9c37672f8" dependencies: regenerator-transform "^0.14.2" +"@babel/plugin-transform-reserved-words@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.10.4.tgz#8f2682bcdcef9ed327e1b0861585d7013f8a54dd" + integrity sha512-hGsw1O6Rew1fkFbDImZIEqA8GoidwTAilwCyWqLBM9f+e/u/sQMQu7uX6dyokfOayRuuVfKOW4O7HvaBWM+JlQ== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-transform-reserved-words@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.8.3.tgz#9a0635ac4e665d29b162837dd3cc50745dfdf1f5" @@ -868,18 +1471,41 @@ resolve "^1.8.1" semver "^5.5.1" +"@babel/plugin-transform-shorthand-properties@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.10.4.tgz#9fd25ec5cdd555bb7f473e5e6ee1c971eede4dd6" + integrity sha512-AC2K/t7o07KeTIxMoHneyX90v3zkm5cjHJEokrPEAGEy3UCp8sLKfnfOIGdZ194fyN4wfX/zZUWT9trJZ0qc+Q== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-transform-shorthand-properties@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.8.3.tgz#28545216e023a832d4d3a1185ed492bcfeac08c8" dependencies: "@babel/helper-plugin-utils" "^7.8.3" +"@babel/plugin-transform-spread@^7.11.0": + version "7.11.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.11.0.tgz#fa84d300f5e4f57752fe41a6d1b3c554f13f17cc" + integrity sha512-UwQYGOqIdQJe4aWNyS7noqAnN2VbaczPLiEtln+zPowRNlD+79w3oi2TWfYe0eZgd+gjZCbsydN7lzWysDt+gw== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-skip-transparent-expression-wrappers" "^7.11.0" + "@babel/plugin-transform-spread@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.8.3.tgz#9c8ffe8170fdfb88b114ecb920b82fb6e95fe5e8" dependencies: "@babel/helper-plugin-utils" "^7.8.3" +"@babel/plugin-transform-sticky-regex@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.10.4.tgz#8f3889ee8657581130a29d9cc91d7c73b7c4a28d" + integrity sha512-Ddy3QZfIbEV0VYcVtFDCjeE4xwVTJWTmUtorAJkn6u/92Z/nWJNV+mILyqHKrUxXYKA2EoCilgoPePymKL4DvQ== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-regex" "^7.10.4" + "@babel/plugin-transform-sticky-regex@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.8.3.tgz#be7a1290f81dae767475452199e1f76d6175b100" @@ -887,6 +1513,14 @@ "@babel/helper-plugin-utils" "^7.8.3" "@babel/helper-regex" "^7.8.3" +"@babel/plugin-transform-template-literals@^7.10.4": + version "7.10.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.10.5.tgz#78bc5d626a6642db3312d9d0f001f5e7639fde8c" + integrity sha512-V/lnPGIb+KT12OQikDvgSuesRX14ck5FfJXt6+tXhdkJ+Vsd0lDCVtF6jcB4rNClYFzaB2jusZ+lNISDk2mMMw== + dependencies: + "@babel/helper-annotate-as-pure" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-transform-template-literals@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.8.3.tgz#7bfa4732b455ea6a43130adc0ba767ec0e402a80" @@ -894,12 +1528,28 @@ "@babel/helper-annotate-as-pure" "^7.8.3" "@babel/helper-plugin-utils" "^7.8.3" +"@babel/plugin-transform-typeof-symbol@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.10.4.tgz#9509f1a7eec31c4edbffe137c16cc33ff0bc5bfc" + integrity sha512-QqNgYwuuW0y0H+kUE/GWSR45t/ccRhe14Fs/4ZRouNNQsyd4o3PG4OtHiIrepbM2WKUBDAXKCAK/Lk4VhzTaGA== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-transform-typeof-symbol@^7.8.4": version "7.8.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.8.4.tgz#ede4062315ce0aaf8a657a920858f1a2f35fc412" dependencies: "@babel/helper-plugin-utils" "^7.8.3" +"@babel/plugin-transform-typescript@^7.10.4": + version "7.11.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.11.0.tgz#2b4879676af37342ebb278216dd090ac67f13abb" + integrity sha512-edJsNzTtvb3MaXQwj8403B7mZoGu9ElDJQZOKjGUnvilquxBA3IQoEIOvkX/1O8xfAsnHS/oQhe2w/IXrr+w0w== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.10.5" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-typescript" "^7.10.4" + "@babel/plugin-transform-typescript@^7.7.4": version "7.7.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.7.4.tgz#2974fd05f4e85c695acaf497f432342de9fc0636" @@ -916,6 +1566,21 @@ "@babel/helper-plugin-utils" "^7.8.3" "@babel/plugin-syntax-typescript" "^7.8.3" +"@babel/plugin-transform-unicode-escapes@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.10.4.tgz#feae523391c7651ddac115dae0a9d06857892007" + integrity sha512-y5XJ9waMti2J+e7ij20e+aH+fho7Wb7W8rNuu72aKRwCHFqQdhkdU2lo3uZ9tQuboEJcUFayXdARhcxLQ3+6Fg== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-unicode-regex@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.10.4.tgz#e56d71f9282fac6db09c82742055576d5e6d80a8" + integrity sha512-wNfsc4s8N2qnIwpO/WP2ZiSyjfpTamT2C9V9FDH/Ljub9zw6P3SjkXcFmc0RQUt96k2fmIvtla2MMjgTwIAC+A== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-transform-unicode-regex@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.8.3.tgz#0cef36e3ba73e5c57273effb182f46b91a1ecaad" @@ -995,6 +1660,80 @@ levenary "^1.1.1" semver "^5.5.0" +"@babel/preset-env@^7.1.6": + version "7.11.0" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.11.0.tgz#860ee38f2ce17ad60480c2021ba9689393efb796" + integrity sha512-2u1/k7rG/gTh02dylX2kL3S0IJNF+J6bfDSp4DI2Ma8QN6Y9x9pmAax59fsCk6QUQG0yqH47yJWA+u1I1LccAg== + dependencies: + "@babel/compat-data" "^7.11.0" + "@babel/helper-compilation-targets" "^7.10.4" + "@babel/helper-module-imports" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-proposal-async-generator-functions" "^7.10.4" + "@babel/plugin-proposal-class-properties" "^7.10.4" + "@babel/plugin-proposal-dynamic-import" "^7.10.4" + "@babel/plugin-proposal-export-namespace-from" "^7.10.4" + "@babel/plugin-proposal-json-strings" "^7.10.4" + "@babel/plugin-proposal-logical-assignment-operators" "^7.11.0" + "@babel/plugin-proposal-nullish-coalescing-operator" "^7.10.4" + "@babel/plugin-proposal-numeric-separator" "^7.10.4" + "@babel/plugin-proposal-object-rest-spread" "^7.11.0" + "@babel/plugin-proposal-optional-catch-binding" "^7.10.4" + "@babel/plugin-proposal-optional-chaining" "^7.11.0" + "@babel/plugin-proposal-private-methods" "^7.10.4" + "@babel/plugin-proposal-unicode-property-regex" "^7.10.4" + "@babel/plugin-syntax-async-generators" "^7.8.0" + "@babel/plugin-syntax-class-properties" "^7.10.4" + "@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.10.4" + "@babel/plugin-transform-arrow-functions" "^7.10.4" + "@babel/plugin-transform-async-to-generator" "^7.10.4" + "@babel/plugin-transform-block-scoped-functions" "^7.10.4" + "@babel/plugin-transform-block-scoping" "^7.10.4" + "@babel/plugin-transform-classes" "^7.10.4" + "@babel/plugin-transform-computed-properties" "^7.10.4" + "@babel/plugin-transform-destructuring" "^7.10.4" + "@babel/plugin-transform-dotall-regex" "^7.10.4" + "@babel/plugin-transform-duplicate-keys" "^7.10.4" + "@babel/plugin-transform-exponentiation-operator" "^7.10.4" + "@babel/plugin-transform-for-of" "^7.10.4" + "@babel/plugin-transform-function-name" "^7.10.4" + "@babel/plugin-transform-literals" "^7.10.4" + "@babel/plugin-transform-member-expression-literals" "^7.10.4" + "@babel/plugin-transform-modules-amd" "^7.10.4" + "@babel/plugin-transform-modules-commonjs" "^7.10.4" + "@babel/plugin-transform-modules-systemjs" "^7.10.4" + "@babel/plugin-transform-modules-umd" "^7.10.4" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.10.4" + "@babel/plugin-transform-new-target" "^7.10.4" + "@babel/plugin-transform-object-super" "^7.10.4" + "@babel/plugin-transform-parameters" "^7.10.4" + "@babel/plugin-transform-property-literals" "^7.10.4" + "@babel/plugin-transform-regenerator" "^7.10.4" + "@babel/plugin-transform-reserved-words" "^7.10.4" + "@babel/plugin-transform-shorthand-properties" "^7.10.4" + "@babel/plugin-transform-spread" "^7.11.0" + "@babel/plugin-transform-sticky-regex" "^7.10.4" + "@babel/plugin-transform-template-literals" "^7.10.4" + "@babel/plugin-transform-typeof-symbol" "^7.10.4" + "@babel/plugin-transform-unicode-escapes" "^7.10.4" + "@babel/plugin-transform-unicode-regex" "^7.10.4" + "@babel/preset-modules" "^0.1.3" + "@babel/types" "^7.11.0" + browserslist "^4.12.0" + core-js-compat "^3.6.2" + invariant "^2.2.2" + levenary "^1.1.1" + semver "^5.5.0" + "@babel/preset-flow@7.9.0": version "7.9.0" resolved "https://registry.yarnpkg.com/@babel/preset-flow/-/preset-flow-7.9.0.tgz#fee847c3e090b0b2d9227c1949e4da1d1379280d" @@ -1002,6 +1741,14 @@ "@babel/helper-plugin-utils" "^7.8.3" "@babel/plugin-transform-flow-strip-types" "^7.9.0" +"@babel/preset-flow@^7.0.0": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/preset-flow/-/preset-flow-7.10.4.tgz#e0d9c72f8cb02d1633f6a5b7b16763aa2edf659f" + integrity sha512-XI6l1CptQCOBv+ZKYwynyswhtOKwpZZp5n0LG1QKCo8erRhqjoQV6nvx61Eg30JHpysWQSBwA2AWRU3pBbSY5g== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-transform-flow-strip-types" "^7.10.4" + "@babel/preset-modules@0.1.3", "@babel/preset-modules@^0.1.3": version "0.1.3" resolved "https://registry.yarnpkg.com/@babel/preset-modules/-/preset-modules-0.1.3.tgz#13242b53b5ef8c883c3cf7dddd55b36ce80fbc72" @@ -1037,6 +1784,25 @@ "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-transform-typescript" "^7.7.4" +"@babel/preset-typescript@^7.1.0": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.10.4.tgz#7d5d052e52a682480d6e2cc5aa31be61c8c25e36" + integrity sha512-SdYnvGPv+bLlwkF2VkJnaX/ni1sMNetcGI1+nThF1gyv6Ph8Qucc4ZZAjM5yZcE/AKRXIOTZz7eSRDWOEjPyRQ== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-transform-typescript" "^7.10.4" + +"@babel/register@^7.0.0": + version "7.10.5" + resolved "https://registry.yarnpkg.com/@babel/register/-/register-7.10.5.tgz#354f3574895f1307f79efe37a51525e52fd38d89" + integrity sha512-eYHdLv43nyvmPn9bfNfrcC4+iYNwdQ8Pxk1MFJuU/U5LpSYl/PH4dFMazCYZDFVi8ueG3shvO+AQfLrxpYulQw== + 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@7.9.6": version "7.9.6" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.9.6.tgz#a9102eb5cadedf3f31d08a9ecf294af7827ea29f" @@ -1049,6 +1815,15 @@ dependencies: regenerator-runtime "^0.13.4" +"@babel/template@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.10.4.tgz#3251996c4200ebc71d1a8fc405fba940f36ba278" + integrity sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA== + dependencies: + "@babel/code-frame" "^7.10.4" + "@babel/parser" "^7.10.4" + "@babel/types" "^7.10.4" + "@babel/template@^7.3.3", "@babel/template@^7.7.4", "@babel/template@^7.8.6": version "7.8.6" resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.8.6.tgz#86b22af15f828dfb086474f964dcc3e39c43ce2b" @@ -1079,6 +1854,21 @@ globals "^11.1.0" lodash "^4.17.13" +"@babel/traverse@^7.10.4", "@babel/traverse@^7.11.0": + version "7.11.0" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.11.0.tgz#9b996ce1b98f53f7c3e4175115605d56ed07dd24" + integrity sha512-ZB2V+LskoWKNpMq6E5UUCrjtDUh5IOTAyIl0dTjIEoXum/iKWkoIEKIRDnUucO6f+2FzNkE0oD4RLKoPIufDtg== + dependencies: + "@babel/code-frame" "^7.10.4" + "@babel/generator" "^7.11.0" + "@babel/helper-function-name" "^7.10.4" + "@babel/helper-split-export-declaration" "^7.11.0" + "@babel/parser" "^7.11.0" + "@babel/types" "^7.11.0" + debug "^4.1.0" + globals "^11.1.0" + lodash "^4.17.19" + "@babel/traverse@^7.4.5", "@babel/traverse@^7.7.4", "@babel/traverse@^7.9.6": version "7.9.6" resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.9.6.tgz#5540d7577697bf619cc57b92aa0f1c231a94f442" @@ -1123,6 +1913,15 @@ lodash "^4.17.13" to-fast-properties "^2.0.0" +"@babel/types@^7.10.4", "@babel/types@^7.10.5", "@babel/types@^7.11.0": + version "7.11.0" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.11.0.tgz#2ae6bf1ba9ae8c3c43824e5861269871b206e90d" + integrity sha512-O53yME4ZZI0jO1EVGtF1ePGl0LHirG4P1ibcD80XyzZcKhcMFeCXmh4Xb1ifGBIV233Qg12x4rBfQgA+tmOukA== + dependencies: + "@babel/helper-validator-identifier" "^7.10.4" + lodash "^4.17.19" + to-fast-properties "^2.0.0" + "@babel/types@^7.8.6": version "7.9.5" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.9.5.tgz#89231f82915a8a566a703b3b20133f73da6b9444" @@ -3612,6 +4411,11 @@ assign-symbols@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" +ast-types@0.11.7: + version "0.11.7" + resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.11.7.tgz#f318bf44e339db6a320be0009ded64ec1471f46c" + integrity sha512-2mP3TwtkY/aTv5X3ZsMpNAbOnyoC/aMJwJSoaELPkHId0nSQgFcnU4dRW3isxiz7+zBexk0ym3WNVjMiQBnJSw== + ast-types@0.13.2: version "0.13.2" resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.13.2.tgz#df39b677a911a83f3a049644fb74fdded23cea48" @@ -3724,7 +4528,7 @@ babel-code-frame@^6.26.0: esutils "^2.0.2" js-tokens "^3.0.2" -babel-core@7.0.0-bridge.0: +babel-core@7.0.0-bridge.0, 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" @@ -4121,7 +4925,7 @@ browserify-zlib@^0.2.0: dependencies: pako "~1.0.5" -browserslist@4.13.0, browserslist@^4.0.0, browserslist@^4.11.1, browserslist@^4.13.0, browserslist@^4.3.6, browserslist@^4.6.4, browserslist@^4.8.3, browserslist@^4.8.5: +browserslist@4.13.0, browserslist@^1.3.6, browserslist@^1.5.2, browserslist@^1.7.6, browserslist@^4.0.0, browserslist@^4.11.1, browserslist@^4.12.0, browserslist@^4.13.0, browserslist@^4.3.6, browserslist@^4.6.4, browserslist@^4.8.3, browserslist@^4.8.5: version "4.13.0" resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.13.0.tgz#42556cba011e1b0a2775b611cba6a8eca18e940d" integrity sha512-MINatJ5ZNrLnQ6blGvePd/QOz9Xtu+Ne+x29iQSCHfkU5BugKVJwZKn/iiL8UbpIpa3JhviKjz+XxMo0m2caFQ== @@ -4131,14 +4935,6 @@ browserslist@4.13.0, browserslist@^4.0.0, browserslist@^4.11.1, browserslist@^4. escalade "^3.0.1" node-releases "^1.1.58" -browserslist@^1.3.6, browserslist@^1.5.2, browserslist@^1.7.6: - version "1.7.7" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-1.7.7.tgz#0bd76704258be829b2398bb50e4b62d1a166b0b9" - integrity sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk= - dependencies: - caniuse-db "^1.0.30000639" - electron-to-chromium "^1.2.7" - browserstack-local@1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/browserstack-local/-/browserstack-local-1.4.0.tgz#d979cac056f57b9af159b3bcd7fdc09b4354537c" @@ -4468,21 +5264,11 @@ caniuse-db@^1.0.30000529, caniuse-db@^1.0.30000634: version "1.0.30001023" resolved "https://registry.yarnpkg.com/caniuse-db/-/caniuse-db-1.0.30001023.tgz#f856f71af16a5a44e81f1fcefc1673912a43da72" -caniuse-db@^1.0.30000639: - version "1.0.30001112" - resolved "https://registry.yarnpkg.com/caniuse-db/-/caniuse-db-1.0.30001112.tgz#89cb249402af2ebf2c23a5585d1bd78cb5e38732" - integrity sha512-Xrn3lVEIsvAAUmFVHKKComfyCRM59NfuV3EwCXqs2XLgOxAqYgrfEs0vDk+Dk7KctlAMh6CH/CSd1srJt503ZA== - -caniuse-lite@^1.0.0, caniuse-lite@^1.0.30000981, caniuse-lite@^1.0.30001019, caniuse-lite@^1.0.30001020: +caniuse-lite@^1.0.0, caniuse-lite@^1.0.30000981, caniuse-lite@^1.0.30001019, caniuse-lite@^1.0.30001020, caniuse-lite@^1.0.30001093: version "1.0.30001066" resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001066.tgz#0a8a58a10108f2b9bf38e7b65c237b12fd9c5f04" integrity sha512-Gfj/WAastBtfxLws0RCh2sDbTK/8rJuSeZMecrSkNGYxPcv7EzblmDGfWQCFEQcSqYE2BRgQiJh8HOD07N5hIw== -caniuse-lite@^1.0.30001093: - version "1.0.30001112" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001112.tgz#0fffc3b934ff56ff0548c37bc9dad7d882bcf672" - integrity sha512-J05RTQlqsatidif/38aN3PGULCLrg8OYQOlJUKbeYVzC2mGZkZLIztwRlB3MtrfLmawUmjFlNJvy/uhwniIe1Q== - capitalize@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/capitalize/-/capitalize-1.0.0.tgz#dc802c580aee101929020d2ca14b4ca8a0ae44be" @@ -4927,6 +5713,11 @@ colors@1.2.5: version "1.2.5" resolved "https://registry.yarnpkg.com/colors/-/colors-1.2.5.tgz#89c7ad9a374bc030df8013241f68136ed8835afc" +colors@^1.1.2: + version "1.4.0" + resolved "https://registry.yarnpkg.com/colors/-/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78" + integrity sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA== + colors@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/colors/-/colors-1.1.2.tgz#168a4701756b6a7f51a12ce0c97bfa28c084ed63" @@ -6208,11 +6999,6 @@ ejs@^2.6.1: version "2.7.4" resolved "https://registry.yarnpkg.com/ejs/-/ejs-2.7.4.tgz#48661287573dcc53e366c7a1ae52c3a120eec9ba" -electron-to-chromium@^1.2.7: - version "1.3.526" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.526.tgz#0e004899edf75afc172cce1b8189aac5dca646aa" - integrity sha512-HiroW5ZbGwgT8kCnoEO8qnGjoTPzJxduvV/Vv/wH63eo2N6Zj3xT5fmmaSPAPUM05iN9/5fIEkIg3owTtV6QZg== - electron-to-chromium@^1.3.488: version "1.3.501" resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.501.tgz#faa17a2cb0105ee30d5e1ca87eae7d8e85dd3175" @@ -7042,7 +7828,7 @@ find-cache-dir@3.3.1, find-cache-dir@^3.0.0, find-cache-dir@^3.3.1: make-dir "^3.0.2" pkg-dir "^4.1.0" -find-cache-dir@^2.1.0: +find-cache-dir@^2.0.0, find-cache-dir@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-2.1.0.tgz#8d0f94cd13fe43c6c7c261a0d86115ca918c05f7" dependencies: @@ -7125,6 +7911,11 @@ flatten@^1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/flatten/-/flatten-1.0.3.tgz#c1283ac9f27b368abc1e36d1ff7b04501a30356b" +flow-parser@0.*: + version "0.131.0" + resolved "https://registry.yarnpkg.com/flow-parser/-/flow-parser-0.131.0.tgz#25c8923870d63d867714c0563409b8184afdea19" + integrity sha512-S61g70eHtnSn6SQqCgA+aXArupZp/0oku4Uyb8sFZH2HldSUkLUwWeh1Afl9BpQutNfNKaO+efpD2Yvek+EGuA== + flow-remove-types@^1.1.0: version "1.2.3" resolved "https://registry.yarnpkg.com/flow-remove-types/-/flow-remove-types-1.2.3.tgz#6131aefc7da43364bb8b479758c9dec7735d1a18" @@ -7814,11 +8605,6 @@ he@1.1.1: resolved "https://registry.yarnpkg.com/he/-/he-1.1.1.tgz#93410fd21b009735151f8868c2f271f3427e23fd" integrity sha1-k0EP0hsAlzUVH4howvJx80J+I/0= -he@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/he/-/he-1.1.1.tgz#93410fd21b009735151f8868c2f271f3427e23fd" - integrity sha1-k0EP0hsAlzUVH4howvJx80J+I/0= - header-case@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/header-case/-/header-case-1.0.1.tgz#9535973197c144b09613cd65d317ef19963bd02d" @@ -9403,6 +10189,30 @@ jsbn@~0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" +jscodeshift@^0.6.4: + version "0.6.4" + resolved "https://registry.yarnpkg.com/jscodeshift/-/jscodeshift-0.6.4.tgz#e19ab86214edac86a75c4557fc88b3937d558a8e" + integrity sha512-+NF/tlNbc2WEhXUuc4WEJLsJumF84tnaMUZW2hyJw3jThKKRvsPX4sPJVgO1lPE28z0gNL+gwniLG9d8mYvQCQ== + dependencies: + "@babel/core" "^7.1.6" + "@babel/parser" "^7.1.6" + "@babel/plugin-proposal-class-properties" "^7.1.0" + "@babel/plugin-proposal-object-rest-spread" "^7.0.0" + "@babel/preset-env" "^7.1.6" + "@babel/preset-flow" "^7.0.0" + "@babel/preset-typescript" "^7.1.0" + "@babel/register" "^7.0.0" + babel-core "^7.0.0-bridge.0" + colors "^1.1.2" + flow-parser "0.*" + graceful-fs "^4.1.11" + micromatch "^3.1.10" + neo-async "^2.5.0" + node-dir "^0.1.17" + recast "^0.16.1" + temp "^0.8.1" + write-file-atomic "^2.3.0" + jsdom@^11.5.1: version "11.12.0" resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-11.12.0.tgz#1a80d40ddd378a1de59656e9e6dc5a3ba8657bc8" @@ -10041,6 +10851,11 @@ lodash@^4.0.0, lodash@^4.17.11, lodash@^4.17.12, lodash@^4.17.13, lodash@^4.17.1 version "4.17.15" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548" +lodash@^4.17.19: + version "4.17.19" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.19.tgz#e48ddedbe30b3321783c5b4301fbd353bc1e4a4b" + integrity sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ== + log-driver@^1.2.7: version "1.2.7" resolved "https://registry.yarnpkg.com/log-driver/-/log-driver-1.2.7.tgz#63b95021f0702fedfa2c9bb0a24e7797d71871d8" @@ -10800,6 +11615,13 @@ node-addon-api@^1.7.1: version "1.7.1" resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-1.7.1.tgz#cf813cd69bb8d9100f6bdca6755fc268f54ac492" +node-dir@^0.1.17: + version "0.1.17" + resolved "https://registry.yarnpkg.com/node-dir/-/node-dir-0.1.17.tgz#5f5665d93351335caabef8f1c554516cf5f1e4e5" + integrity sha1-X1Zl2TNRM1yqvvjxxVRRbPXx5OU= + dependencies: + minimatch "^3.0.2" + node-emoji@^1.8.1: version "1.10.0" resolved "https://registry.yarnpkg.com/node-emoji/-/node-emoji-1.10.0.tgz#8886abd25d9c7bb61802a658523d1f8d2a89b2da" @@ -10859,9 +11681,9 @@ node-gyp@^4.0.0: which "1" node-html-parser@^1.2.19: - version "1.2.19" - resolved "https://registry.yarnpkg.com/node-html-parser/-/node-html-parser-1.2.19.tgz#2cb14ce7981dfe2c0f5af53cf8654a3d49cded7d" - integrity sha512-MQvBz+qk7SbqNPp0c7hR0F8lRTPXK5n2tww4eFmXf+cXp5hZHtL5rJHlAWlcjzRep+T5Pd5lz3lqFgN7IFYEiw== + version "1.2.20" + resolved "https://registry.yarnpkg.com/node-html-parser/-/node-html-parser-1.2.20.tgz#37e9ebc627dbe3ff446eea4ac93e3d254b7c6ee4" + integrity sha512-1fUpYjAducDrrBSE0etRUV1tM+wSFTudmrslMXuk35wL/L29E7e1CLQn4CNzFLnqtYpmDlWhkD6VUloyHA0dwA== dependencies: he "1.1.1" @@ -11855,7 +12677,7 @@ pinkie@^2.0.0: version "2.0.4" resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" -pirates@^4.0.1: +pirates@^4.0.0, pirates@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.1.tgz#643a92caf894566f91b2b986d2c66950a8e2fb87" dependencies: @@ -12919,7 +13741,7 @@ pretty-ms@7.0.0: dependencies: parse-ms "^2.1.0" -private@^0.1.8: +private@^0.1.8, private@~0.1.5: version "0.1.8" resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff" @@ -13422,6 +14244,16 @@ recast@0.18.5: private "^0.1.8" source-map "~0.6.1" +recast@^0.16.1: + version "0.16.2" + resolved "https://registry.yarnpkg.com/recast/-/recast-0.16.2.tgz#3796ebad5fe49ed85473b479cd6df554ad725dc2" + integrity sha512-O/7qXi51DPjRVdbrpNzoBQH5dnAPQNbfoOFyRiUwreTMJfIHYOEBzwuH+c0+/BTSJ3CQyKs6ILSWXhESH6Op3A== + dependencies: + ast-types "0.11.7" + esprima "~4.0.0" + private "~0.1.5" + source-map "~0.6.1" + redent@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/redent/-/redent-1.0.0.tgz#cf916ab1fd5f1f16dfb20822dd6ec7f730c2afde" @@ -13906,7 +14738,7 @@ rimraf@2, rimraf@^2.5.4, rimraf@^2.6.2, rimraf@^2.6.3, rimraf@^2.7.1: dependencies: glob "^7.1.3" -rimraf@2.6.3: +rimraf@2.6.3, rimraf@~2.6.2: version "2.6.3" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab" dependencies: @@ -14563,6 +15395,14 @@ source-map-resolve@^0.5.0, source-map-resolve@^0.5.2: source-map-url "^0.4.0" urix "^0.1.0" +source-map-support@^0.5.16: + version "0.5.19" + resolved "https://registry.yarnpkg.com/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-support@^0.5.6, source-map-support@~0.5.10, source-map-support@~0.5.12: version "0.5.16" resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.16.tgz#0ae069e7fe3ba7538c64c98515e35339eac5a042" @@ -15257,6 +16097,13 @@ temp-write@^3.4.0: temp-dir "^1.0.0" uuid "^3.0.1" +temp@^0.8.1: + version "0.8.4" + resolved "https://registry.yarnpkg.com/temp/-/temp-0.8.4.tgz#8c97a33a4770072e0a05f919396c7665a7dd59f2" + integrity sha512-s0ZZzd0BzYv5tLSptZooSjK8oj6C+c19p7Vqta9+6NPOf7r+fxq0cJe6/oN4LTC79sy5NY8ucOJNgwsKCSbfqg== + dependencies: + rimraf "~2.6.2" + terser-webpack-plugin@3.0.8: version "3.0.8" resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-3.0.8.tgz#d1a53442a143e09e00c880e8d77c1e79cb05318b"