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"