From a82d5ad1e17cd64d3579aa207abfc18346ff0107 Mon Sep 17 00:00:00 2001 From: Jacky Efendi Date: Fri, 10 Jan 2020 02:06:14 +0700 Subject: [PATCH] feat: add codemods to migrate from react-loadable (#463) --- .eslintignore | 3 +- .prettierignore | 3 +- packages/codemod/README.md | 11 + packages/codemod/bin/main.js | 74 +++++ packages/codemod/bin/utils/CodemodError.js | 9 + packages/codemod/package.json | 35 +++ ...oadable-component_arrow-no-params.input.js | 9 + ...adable-component_arrow-no-params.output.js | 7 + ...loadable-component_arrow-w-params.input.js | 15 + ...oadable-component_arrow-w-params.output.js | 17 ++ ...adable-to-loadable-component_expr.input.js | 17 ++ ...dable-to-loadable-component_expr.output.js | 19 ++ ...act-loadable-to-loadable-component-test.js | 7 + .../react-loadable-to-loadable-component.js | 129 ++++++++ website/src/pages/docs/using-codemod.mdx | 46 +++ yarn.lock | 284 +++++++++++++++++- 16 files changed, 672 insertions(+), 13 deletions(-) create mode 100644 packages/codemod/README.md create mode 100755 packages/codemod/bin/main.js create mode 100644 packages/codemod/bin/utils/CodemodError.js create mode 100644 packages/codemod/package.json create mode 100644 packages/codemod/transforms/__testfixtures__/react-loadable-to-loadable-component_arrow-no-params.input.js create mode 100644 packages/codemod/transforms/__testfixtures__/react-loadable-to-loadable-component_arrow-no-params.output.js create mode 100644 packages/codemod/transforms/__testfixtures__/react-loadable-to-loadable-component_arrow-w-params.input.js create mode 100644 packages/codemod/transforms/__testfixtures__/react-loadable-to-loadable-component_arrow-w-params.output.js create mode 100644 packages/codemod/transforms/__testfixtures__/react-loadable-to-loadable-component_expr.input.js create mode 100644 packages/codemod/transforms/__testfixtures__/react-loadable-to-loadable-component_expr.output.js create mode 100644 packages/codemod/transforms/__tests__/react-loadable-to-loadable-component-test.js create mode 100644 packages/codemod/transforms/react-loadable-to-loadable-component.js create mode 100644 website/src/pages/docs/using-codemod.mdx diff --git a/.eslintignore b/.eslintignore index d6a14443..e16d6681 100644 --- a/.eslintignore +++ b/.eslintignore @@ -4,4 +4,5 @@ dist/ lib/ build/ /website/.cache/ -/website/public/ \ No newline at end of file +/website/public/ +__testfixtures__/ \ No newline at end of file diff --git a/.prettierignore b/.prettierignore index 5255f596..cf3f2a0d 100644 --- a/.prettierignore +++ b/.prettierignore @@ -6,4 +6,5 @@ CHANGELOG.md package.json lerna.json /website/.cache/ -/website/public/ \ No newline at end of file +/website/public/ +__testfixtures__/ \ No newline at end of file diff --git a/packages/codemod/README.md b/packages/codemod/README.md new file mode 100644 index 00000000..36363a82 --- /dev/null +++ b/packages/codemod/README.md @@ -0,0 +1,11 @@ +# @loadable/codemod + +This package is a collection of codemod that can be used to help making big changes easier to a project, for example: migrating from `react-loadable` to `@loadable/component` + +## Notes about `react-loadable-to-loadable-component` transform +`react-loadable-to-loadable-component` transform will help codemod all of your `Loadable()` declaration to `loadable()` with mostly equivalent params, barring some behavior that do not exist in `@loadable/component` such as `Loadable.Map()`, `timeout`, `delay`, etc. + +After running the codemod, you will still need to update some of your code manually, namely: +1. Using `loadableReady` to hydrate your app on the client side. +2. Updating your webpack configuration to use `@loadable` +3. Updating your server side rendering code to use `ChunkExtractor` diff --git a/packages/codemod/bin/main.js b/packages/codemod/bin/main.js new file mode 100755 index 00000000..1266258e --- /dev/null +++ b/packages/codemod/bin/main.js @@ -0,0 +1,74 @@ +#!/usr/bin/env node + +/* eslint-disable no-console */ +const yargs = require('yargs') +const execa = require('execa') +const path = require('path') +const fs = require('fs') +const chalk = require('chalk') +const CodemodError = require('./utils/CodemodError') + +const jscodeshiftExecutable = require.resolve('.bin/jscodeshift') +const transformsDir = path.resolve(__dirname, '../transforms') + +const { argv } = yargs + +try { + const selectedCodemod = argv._[0] + const directoryToApplyTo = argv._[1] + + if (!selectedCodemod || !directoryToApplyTo) { + throw new CodemodError({ + type: 'Invalid params', + }) + } + + const availableTransforms = fs + .readdirSync(transformsDir) + .filter(v => v !== '__tests__' && v !== '__testfixtures__') + .map(v => v.replace('.js', '')) + + if (!availableTransforms.some(t => t === selectedCodemod)) { + throw new CodemodError({ + type: 'Unrecognised transform', + payload: selectedCodemod, + }) + } + + const result = execa.commandSync( + `${jscodeshiftExecutable} --parser babylon -t ${transformsDir}/${selectedCodemod}.js ${directoryToApplyTo}`, + { + stdio: 'inherit', + stripEof: false, + }, + ) + + if (result.error) { + throw result.error + } +} catch (err) { + if (err.type === 'Invalid params') { + console.error(chalk.red('Invalid params passed!')) + console.error( + chalk.red( + 'loadable-codemod requires 2 params to be passed, the name of the codemod, and a directory to apply the codemod to.', + ), + ) + console.error( + chalk.red( + 'Example: npx loadable-codemod react-loadable-to-loadable-component ./src/client', + ), + ) + + process.exit(1) + } + + if (err.type === 'Unrecognised transform') { + console.error(chalk.red(`Unrecognised transform passed: '${err.payload}'`)) + + process.exit(2) + } + + // For other errors, just re-throw it + throw err +} diff --git a/packages/codemod/bin/utils/CodemodError.js b/packages/codemod/bin/utils/CodemodError.js new file mode 100644 index 00000000..a546e638 --- /dev/null +++ b/packages/codemod/bin/utils/CodemodError.js @@ -0,0 +1,9 @@ +class CodemodError extends Error { + constructor(args){ + super(args); + this.type = args.type; + this.payload = args.payload; + } +} + +module.exports = CodemodError; \ No newline at end of file diff --git a/packages/codemod/package.json b/packages/codemod/package.json new file mode 100644 index 00000000..2215f572 --- /dev/null +++ b/packages/codemod/package.json @@ -0,0 +1,35 @@ +{ + "name": "loadable-codemod", + "description": "Various codemods related to @loadable/components for easier migration/ugprades", + "version": "0.0.1", + "repository": "git@github.com:smooth-code/loadable-components.git", + "author": "Jacky Efendi ", + "bin": { + "loadable-codemod": "./bin/main.js" + }, + "publishConfig": { + "access": "public" + }, + "keywords": [ + "react", + "ssr", + "webpack", + "code-splitting", + "react-router", + "server-side-rendering", + "dynamic-import", + "react-loadable", + "react-async-components", + "codemod" + ], + "engines": { + "node": ">=8" + }, + "license": "MIT", + "dependencies": { + "chalk": "^3.0.0", + "execa": "^3.3.0", + "jscodeshift": "0.6.4", + "yargs": "^14.2.0" + } +} diff --git a/packages/codemod/transforms/__testfixtures__/react-loadable-to-loadable-component_arrow-no-params.input.js b/packages/codemod/transforms/__testfixtures__/react-loadable-to-loadable-component_arrow-no-params.input.js new file mode 100644 index 00000000..9e5426e8 --- /dev/null +++ b/packages/codemod/transforms/__testfixtures__/react-loadable-to-loadable-component_arrow-no-params.input.js @@ -0,0 +1,9 @@ +/* eslint-disable */ +import Loadable from 'react-loadable' + +const CustomLinkLoadable = Loadable({ + loader: () => + import(/* webpackChunkName: "custom-link" */ '@components/CustomLink/Link'), + loading: () =>
loading...
, + delay: 0, +}) diff --git a/packages/codemod/transforms/__testfixtures__/react-loadable-to-loadable-component_arrow-no-params.output.js b/packages/codemod/transforms/__testfixtures__/react-loadable-to-loadable-component_arrow-no-params.output.js new file mode 100644 index 00000000..eb3497db --- /dev/null +++ b/packages/codemod/transforms/__testfixtures__/react-loadable-to-loadable-component_arrow-no-params.output.js @@ -0,0 +1,7 @@ +/* eslint-disable */ +import loadable from '@loadable/component' + +const CustomLinkLoadable = loadable(() => + import(/* webpackChunkName: "custom-link" */ '@components/CustomLink/Link'), { + fallback: (() =>
loading...
)(), +}) diff --git a/packages/codemod/transforms/__testfixtures__/react-loadable-to-loadable-component_arrow-w-params.input.js b/packages/codemod/transforms/__testfixtures__/react-loadable-to-loadable-component_arrow-w-params.input.js new file mode 100644 index 00000000..4f06c5f4 --- /dev/null +++ b/packages/codemod/transforms/__testfixtures__/react-loadable-to-loadable-component_arrow-w-params.input.js @@ -0,0 +1,15 @@ +/* eslint-disable */ +import Loadable from 'react-loadable' + +const CustomLinkLoadable = Loadable({ + loader: () => + import(/* webpackChunkName: "custom-link" */ '@components/CustomLink/Link'), + loading: (props) => { + if (props.error || props.timedOut) { + throw new Error('Failed to load custom link chunk') + } else if (props.loading) { + return
loading...
; + } + }, + delay: 0, +}) diff --git a/packages/codemod/transforms/__testfixtures__/react-loadable-to-loadable-component_arrow-w-params.output.js b/packages/codemod/transforms/__testfixtures__/react-loadable-to-loadable-component_arrow-w-params.output.js new file mode 100644 index 00000000..30aa50a9 --- /dev/null +++ b/packages/codemod/transforms/__testfixtures__/react-loadable-to-loadable-component_arrow-w-params.output.js @@ -0,0 +1,17 @@ +/* eslint-disable */ +import loadable from '@loadable/component' + +const CustomLinkLoadable = loadable(() => + import(/* webpackChunkName: "custom-link" */ '@components/CustomLink/Link'), { + fallback: (props => { + if (props.error || props.timedOut) { + throw new Error('Failed to load custom link chunk') + } else if (props.loading) { + return
loading...
; + } + })({ + pastDelay: true, + error: false, + timedOut: false, + }), +}) diff --git a/packages/codemod/transforms/__testfixtures__/react-loadable-to-loadable-component_expr.input.js b/packages/codemod/transforms/__testfixtures__/react-loadable-to-loadable-component_expr.input.js new file mode 100644 index 00000000..fad3f56f --- /dev/null +++ b/packages/codemod/transforms/__testfixtures__/react-loadable-to-loadable-component_expr.input.js @@ -0,0 +1,17 @@ +/* eslint-disable */ +import Loadable from 'react-loadable' + +const Loading = props => { + if (props.error || props.timedOut) { + throw new Error('Failed to load custom link chunk') + } else { + return null + } +} + +const CustomLinkLoadable = Loadable({ + loader: () => + import(/* webpackChunkName: "custom-link" */ '@components/CustomLink/Link'), + loading: Loading, + delay: 0, +}) diff --git a/packages/codemod/transforms/__testfixtures__/react-loadable-to-loadable-component_expr.output.js b/packages/codemod/transforms/__testfixtures__/react-loadable-to-loadable-component_expr.output.js new file mode 100644 index 00000000..64d225b1 --- /dev/null +++ b/packages/codemod/transforms/__testfixtures__/react-loadable-to-loadable-component_expr.output.js @@ -0,0 +1,19 @@ +/* eslint-disable */ +import loadable from '@loadable/component' + +const Loading = props => { + if (props.error || props.timedOut) { + throw new Error('Failed to load custom link chunk') + } else { + return null + } +} + +const CustomLinkLoadable = loadable(() => + import(/* webpackChunkName: "custom-link" */ '@components/CustomLink/Link'), { + fallback: Loading({ + pastDelay: true, + error: false, + timedOut: false, + }), +}) diff --git a/packages/codemod/transforms/__tests__/react-loadable-to-loadable-component-test.js b/packages/codemod/transforms/__tests__/react-loadable-to-loadable-component-test.js new file mode 100644 index 00000000..5d7109ab --- /dev/null +++ b/packages/codemod/transforms/__tests__/react-loadable-to-loadable-component-test.js @@ -0,0 +1,7 @@ +jest.autoMockOff(); + +const { defineTest } = require('jscodeshift/dist/testUtils'); + +defineTest(__dirname, 'react-loadable-to-loadable-component', null, 'react-loadable-to-loadable-component_expr'); +defineTest(__dirname, 'react-loadable-to-loadable-component', null, 'react-loadable-to-loadable-component_arrow-no-params'); +defineTest(__dirname, 'react-loadable-to-loadable-component', null, 'react-loadable-to-loadable-component_arrow-w-params'); \ No newline at end of file diff --git a/packages/codemod/transforms/react-loadable-to-loadable-component.js b/packages/codemod/transforms/react-loadable-to-loadable-component.js new file mode 100644 index 00000000..70cbba32 --- /dev/null +++ b/packages/codemod/transforms/react-loadable-to-loadable-component.js @@ -0,0 +1,129 @@ +/* eslint-disable no-param-reassign */ +/* eslint-disable no-console */ +const chalk = require('chalk') + +const invokeWithMockedUpProp = (jscodeshift, file, prop) => { + // We invoke the function previously passed as `loading` to react-loadable with this props + // { + // pastDelay: true, + // error: false, + // timedOut: false, + // } + const j = jscodeshift + + const defaultPropsObjProperties = [] + + defaultPropsObjProperties.push( + j.objectProperty(j.identifier('pastDelay'), j.booleanLiteral(true)), + ) + defaultPropsObjProperties.push( + j.objectProperty(j.identifier('error'), j.booleanLiteral(false)), + ) + defaultPropsObjProperties.push( + j.objectProperty(j.identifier('timedOut'), j.booleanLiteral(false)), + ) + + const defaultPropsObj = j.objectExpression(defaultPropsObjProperties) + + const callExpr = j.callExpression(prop.value, [defaultPropsObj]) + + prop.value = callExpr + + console.warn( + chalk.yellow( + `[WARN] '${file.path}' has some react-loadable specific logic in it. We could not codemod while keeping all the behaviors the same. Please check this file manually.`, + ), + ) +} + +export default (file, api) => { + const { source } = file + const { jscodeshift: j } = api + + const root = j(source) + + // Rename `import Loadable from 'react-loadable';` to `import loadable from '@loadable/component'; + root.find(j.ImportDeclaration).forEach(({ node }) => { + if ( + node.specifiers[0] && + node.specifiers[0].local.name === 'Loadable' && + node.source.value === 'react-loadable' + ) { + node.specifiers[0].local.name = 'loadable' + node.source.value = '@loadable/component' + } + }) + + // Change Loadable({ ... }) invocation to loadable(() => {}, { ... }) invocation + root + .find(j.CallExpression, { callee: { name: 'Loadable' } }) + .forEach(path => { + const { node } = path + const initialArgsProps = node.arguments[0].properties + let loader // this will be a function returning a dynamic import promise + + // loop through the first argument (object) passed to `Loadable({ ... })` + const newProps = initialArgsProps + .map(prop => { + if (prop.key.name === 'loader') { + /** + * In react-loadable, this is the function that returns a dynamic import + * We'll keep it to `loader` variable for now, and remove it from the arg object + */ + loader = prop.value + + return undefined + } + + if (prop.key.name === 'loading') { + prop.key.name = 'fallback' // rename to fallback + + /** + * react-loadable accepts a Function that returns JSX as the `loading` arg. + * @loadable/component accepts a React.Element (what returned from React.createElement() calls) + * + */ + if (prop.value.type === 'ArrowFunctionExpression') { + // if it's an ArrowFunctionExpression like `() =>
loading...
`, + + if ( + (prop.value.params && prop.value.params.length > 0) || + prop.value.type === 'Identifier' + ) { + // If the function accept props, we can invoke it and pass it a mocked-up props to get the component to + // a should-be-acceptable default state, while also logs out a warning. + // { + // pastDelay: true, + // error: false, + // timedOut: false, + // } + + invokeWithMockedUpProp(j, file, prop) + } else { + // If the function doesn't accept any params, we can safely just invoke it directly + // we can change it to `(() =>
loading...
)()` + const callExpr = j.callExpression(prop.value, []) + + prop.value = callExpr + } + } else if (prop.value.type === 'Identifier') { + // if it's an identifier like `Loading`, let's just invoke it with a mocked-up props + invokeWithMockedUpProp(j, file, prop) + } + + return prop + } + + // for all other props, just remove them + return undefined + }) + .filter(Boolean) + + // add the function that return a dynamic import we stored earlier as the first argument to `loadable()` call + node.arguments.unshift(loader) + node.arguments[1].properties = newProps + node.callee.name = 'loadable' + }) + + return root.toSource({ quote: 'single', trailingComma: true }) +} diff --git a/website/src/pages/docs/using-codemod.mdx b/website/src/pages/docs/using-codemod.mdx new file mode 100644 index 00000000..eca8dc1d --- /dev/null +++ b/website/src/pages/docs/using-codemod.mdx @@ -0,0 +1,46 @@ +--- +menu: Guides +title: Using Codemod +order: 90 +--- + +# Using Codemod + +Codemods are tools that can help us make changes in our code automatically. Think of it like 'find and replace', but more flexible. + +Loadable provides `loadable-codemod` to help with some use cases. +For example, you can use `loadable-codemod` to help you migrate from another react code-splitting library to `@loadable/components`. +Simply run the following to get started. +``` +npx loadable-codemod [name-of-transform] [path-to-your-project] +``` + +For now, only 1 transform is available, which is: `react-loadable-to-loadable-component`. + +## Transforms +### react-loadable-to-loadable-component +This transformation helps you make the changes necessary to update your codebase that is using [`react-loadable`](https://github.com/jamiebuilds/react-loadable) to `@loadable/component`. + +#### Usage +```sh +npx loadable-codemod react-loadable-to-loadable-component ./client/src +``` +#### Caveats +Since `react-loadable` and `@loadable/component` do have differences, it is not possible to make a 100% fully automated codemod to handle all of the change needed. +You still need to set up server-side rendering yourself. + - Updating your server side rendering code to use `ChunkExtractor` + - Updating your webpack configuration to use `@loadable` + - Using `loadableReady` to hydrate your app on the client side. + +Please also note that `react-loadable` comes with stuffs like `Loadable.Map`, `pastDelay`, `timedOut`, `delay`, etc that do not exist in `@loadable/components`. +If your code were using those features, you will still need to migrate them manually. + +For `loading` placeholder, this codemod already tries to render the loader as usual, but with a mocked up props as follows: +```javascript +{ + pastDelay: true, + error: false, + timedOut: false, +} +``` +Your app should still works, but this means some of your app logic will be lost because `@loadable/component` simply does not support these features out of the box yet. diff --git a/yarn.lock b/yarn.lock index b6cc6410..b4d848d1 100644 --- a/yarn.lock +++ b/yarn.lock @@ -25,7 +25,7 @@ dependencies: "@babel/highlight" "^7.0.0" -"@babel/core@^7.1.0", "@babel/core@^7.7.4": +"@babel/core@^7.1.0", "@babel/core@^7.1.6", "@babel/core@^7.7.4": version "7.7.5" resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.7.5.tgz#ae1323cd035b5160293307f50647e83f8ba62f7e" integrity sha512-M42+ScN4+1S9iB6f+TL7QBpoQETxbclx+KNoKJABghnKYE+fMzSGqst0BZJc8CpI625bwPwYgUyRvxZ+0mZzpw== @@ -269,7 +269,7 @@ regenerator-runtime "^0.13.3" v8flags "^3.1.1" -"@babel/parser@^7.0.0", "@babel/parser@^7.1.0", "@babel/parser@^7.4.3", "@babel/parser@^7.7.4", "@babel/parser@^7.7.5": +"@babel/parser@^7.0.0", "@babel/parser@^7.1.0", "@babel/parser@^7.1.6", "@babel/parser@^7.4.3", "@babel/parser@^7.7.4", "@babel/parser@^7.7.5": version "7.7.5" resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.7.5.tgz#cbf45321619ac12d83363fcf9c94bb67fa646d71" integrity sha512-KNlOe9+/nk4i29g0VXgl8PEXIRms5xKLJeuZ6UptN0fHv+jDiriG+y94X6qAgWTR0h3KaoM1wK5G5h7MHFRSig== @@ -283,7 +283,7 @@ "@babel/helper-remap-async-to-generator" "^7.7.4" "@babel/plugin-syntax-async-generators" "^7.7.4" -"@babel/plugin-proposal-class-properties@^7.7.4": +"@babel/plugin-proposal-class-properties@^7.1.0", "@babel/plugin-proposal-class-properties@^7.7.4": version "7.7.4" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.7.4.tgz#2f964f0cb18b948450362742e33e15211e77c2ba" integrity sha512-EcuXeV4Hv1X3+Q1TsuOmyyxeTRiSqurGJ26+I/FW1WbymmRRapVORm6x1Zl3iDIHyRxEs+VXWp6qnlcfcJSbbw== @@ -307,7 +307,7 @@ "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-syntax-json-strings" "^7.7.4" -"@babel/plugin-proposal-object-rest-spread@^7.7.4": +"@babel/plugin-proposal-object-rest-spread@^7.0.0", "@babel/plugin-proposal-object-rest-spread@^7.7.4": version "7.7.4" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.7.4.tgz#cc57849894a5c774214178c8ab64f6334ec8af71" integrity sha512-rnpnZR3/iWKmiQyJ3LKJpSwLDcX/nSXhdLk4Aq/tXOApIvyu7qoabrige0ylsAJffaUC51WiBu209Q0U+86OWQ== @@ -345,6 +345,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.0.0" +"@babel/plugin-syntax-flow@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.7.4.tgz#6d91b59e1a0e4c17f36af2e10dd64ef220919d7b" + integrity sha512-2AMAWl5PsmM5KPkB22cvOkUyWk6MjUaqhHNU5nSPUl/ns3j5qLfw2SuYP5RbVZ0tfLvePr4zUScbICtDP2CUNw== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-syntax-json-strings@^7.7.4": version "7.7.4" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.7.4.tgz#86e63f7d2e22f9e27129ac4e83ea989a382e86cc" @@ -380,6 +387,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.0.0" +"@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" + integrity sha512-77blgY18Hud4NM1ggTA8xVT/dBENQf17OpiToSa2jSmEY3fWXD2jwrdVlO4kq5yzUTeF15WSQ6b4fByNvJcjpQ== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-transform-arrow-functions@^7.7.4": version "7.7.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.7.4.tgz#76309bd578addd8aee3b379d809c802305a98a12" @@ -462,6 +476,14 @@ "@babel/helper-builder-binary-assignment-operator-visitor" "^7.7.4" "@babel/helper-plugin-utils" "^7.0.0" +"@babel/plugin-transform-flow-strip-types@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.7.4.tgz#cc73f85944782df1d77d80977bc097920a8bf31a" + integrity sha512-w9dRNlHY5ElNimyMYy0oQowvQpwt/PRHI0QS98ZJCTZU2bvSnKXo5zEiD5u76FBPigTm8TkqzmnUTg16T7qbkA== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-syntax-flow" "^7.7.4" + "@babel/plugin-transform-for-of@^7.7.4": version "7.7.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.7.4.tgz#248800e3a5e507b1f103d8b4ca998e77c63932bc" @@ -658,6 +680,15 @@ dependencies: "@babel/helper-plugin-utils" "^7.0.0" +"@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" + integrity sha512-X8e3tcPEKnwwPVG+vP/vSqEShkwODOEeyQGod82qrIuidwIrfnsGn11qPM1jBLF4MqguTXXYzm58d0dY+/wdpg== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.7.4" + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-syntax-typescript" "^7.7.4" + "@babel/plugin-transform-unicode-regex@^7.7.4": version "7.7.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.7.4.tgz#a3c0f65b117c4c81c5b6484f2a5e7b95346b83ae" @@ -666,6 +697,63 @@ "@babel/helper-create-regexp-features-plugin" "^7.7.4" "@babel/helper-plugin-utils" "^7.0.0" +"@babel/preset-env@^7.1.6": + version "7.7.6" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.7.6.tgz#39ac600427bbb94eec6b27953f1dfa1d64d457b2" + integrity sha512-k5hO17iF/Q7tR9Jv8PdNBZWYW6RofxhnxKjBMc0nG4JTaWvOTiPoO/RLFwAKcA4FpmuBFm6jkoqaRJLGi0zdaQ== + dependencies: + "@babel/helper-module-imports" "^7.7.4" + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-proposal-async-generator-functions" "^7.7.4" + "@babel/plugin-proposal-dynamic-import" "^7.7.4" + "@babel/plugin-proposal-json-strings" "^7.7.4" + "@babel/plugin-proposal-object-rest-spread" "^7.7.4" + "@babel/plugin-proposal-optional-catch-binding" "^7.7.4" + "@babel/plugin-proposal-unicode-property-regex" "^7.7.4" + "@babel/plugin-syntax-async-generators" "^7.7.4" + "@babel/plugin-syntax-dynamic-import" "^7.7.4" + "@babel/plugin-syntax-json-strings" "^7.7.4" + "@babel/plugin-syntax-object-rest-spread" "^7.7.4" + "@babel/plugin-syntax-optional-catch-binding" "^7.7.4" + "@babel/plugin-syntax-top-level-await" "^7.7.4" + "@babel/plugin-transform-arrow-functions" "^7.7.4" + "@babel/plugin-transform-async-to-generator" "^7.7.4" + "@babel/plugin-transform-block-scoped-functions" "^7.7.4" + "@babel/plugin-transform-block-scoping" "^7.7.4" + "@babel/plugin-transform-classes" "^7.7.4" + "@babel/plugin-transform-computed-properties" "^7.7.4" + "@babel/plugin-transform-destructuring" "^7.7.4" + "@babel/plugin-transform-dotall-regex" "^7.7.4" + "@babel/plugin-transform-duplicate-keys" "^7.7.4" + "@babel/plugin-transform-exponentiation-operator" "^7.7.4" + "@babel/plugin-transform-for-of" "^7.7.4" + "@babel/plugin-transform-function-name" "^7.7.4" + "@babel/plugin-transform-literals" "^7.7.4" + "@babel/plugin-transform-member-expression-literals" "^7.7.4" + "@babel/plugin-transform-modules-amd" "^7.7.5" + "@babel/plugin-transform-modules-commonjs" "^7.7.5" + "@babel/plugin-transform-modules-systemjs" "^7.7.4" + "@babel/plugin-transform-modules-umd" "^7.7.4" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.7.4" + "@babel/plugin-transform-new-target" "^7.7.4" + "@babel/plugin-transform-object-super" "^7.7.4" + "@babel/plugin-transform-parameters" "^7.7.4" + "@babel/plugin-transform-property-literals" "^7.7.4" + "@babel/plugin-transform-regenerator" "^7.7.5" + "@babel/plugin-transform-reserved-words" "^7.7.4" + "@babel/plugin-transform-shorthand-properties" "^7.7.4" + "@babel/plugin-transform-spread" "^7.7.4" + "@babel/plugin-transform-sticky-regex" "^7.7.4" + "@babel/plugin-transform-template-literals" "^7.7.4" + "@babel/plugin-transform-typeof-symbol" "^7.7.4" + "@babel/plugin-transform-unicode-regex" "^7.7.4" + "@babel/types" "^7.7.4" + browserslist "^4.6.0" + core-js-compat "^3.4.7" + invariant "^2.2.2" + js-levenshtein "^1.1.3" + semver "^5.5.0" + "@babel/preset-env@^7.7.4": version "7.7.5" resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.7.5.tgz#f28573ed493edb4ba763b37fb4fbb85601469370" @@ -723,6 +811,14 @@ js-levenshtein "^1.1.3" semver "^5.5.0" +"@babel/preset-flow@^7.0.0": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/preset-flow/-/preset-flow-7.7.4.tgz#99c1349b6fd7132783196de181e6b32d0949427e" + integrity sha512-6LbUqcHD8BcRtXMOp5bc5nJeU8RlKh6q5U8TgZeCrf9ebBdW8Wyy5ujAUnbJfmzQ56Kkq5XtwErC/5+5RHyFYA== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-transform-flow-strip-types" "^7.7.4" + "@babel/preset-react@^7.7.4": version "7.7.4" resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.7.4.tgz#3fe2ea698d8fb536d8e7881a592c3c1ee8bf5707" @@ -734,7 +830,15 @@ "@babel/plugin-transform-react-jsx-self" "^7.7.4" "@babel/plugin-transform-react-jsx-source" "^7.7.4" -"@babel/register@^7.7.4": +"@babel/preset-typescript@^7.1.0": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.7.4.tgz#780059a78e6fa7f7a4c87f027292a86b31ce080a" + integrity sha512-rqrjxfdiHPsnuPur0jKrIIGQCIgoTWMTjlbWE69G4QJ6TIOVnnRnIJhUxNTL/VwDmEAVX08Tq3B1nirer5341w== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-transform-typescript" "^7.7.4" + +"@babel/register@^7.0.0", "@babel/register@^7.7.4": version "7.7.4" resolved "https://registry.yarnpkg.com/@babel/register/-/register-7.7.4.tgz#45a4956471a9df3b012b747f5781cc084ee8f128" integrity sha512-/fmONZqL6ZMl9KJUYajetCrID6m0xmL4odX7v+Xvoxcv0DdbP/oO0TWIeLUCHqczQ6L6njDMqmqHFy2cp3FFsA== @@ -1846,6 +1950,11 @@ dependencies: "@babel/types" "^7.3.0" +"@types/color-name@^1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@types/color-name/-/color-name-1.1.1.tgz#1c1261bbeaa10a8055bbc5d8ab84b7b2afc846a0" + integrity sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ== + "@types/estree@*": version "0.0.40" resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.40.tgz#0e6cb9b9bbd098031fa19e4b4e8131bc70e5de13" @@ -2255,6 +2364,14 @@ ansi-styles@^3.1.0, ansi-styles@^3.2.0, ansi-styles@^3.2.1: dependencies: color-convert "^1.9.0" +ansi-styles@^4.1.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.2.0.tgz#5681f0dcf7ae5880a7841d8831c4724ed9cc0172" + integrity sha512-7kFQgnEaMdRtwf6uSfUnVr9gSGC7faurn+J/Mv90/W+iTtN0405/nLdopfMWwchyxhbGYl6TC4Sccn9TUkGAgg== + dependencies: + "@types/color-name" "^1.1.1" + color-convert "^2.0.1" + any-promise@^1.0.0: version "1.3.0" resolved "https://registry.yarnpkg.com/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f" @@ -2410,6 +2527,11 @@ ast-types-flow@0.0.7, ast-types-flow@^0.0.7: resolved "https://registry.yarnpkg.com/ast-types-flow/-/ast-types-flow-0.0.7.tgz#f70b735c6bca1a5c9c22d982c3e39e7feba3bdad" integrity sha1-9wtzXGvKGlycItmCw+Oef+ujva0= +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== + astral-regex@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9" @@ -2934,6 +3056,14 @@ chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.3.1, chalk@^2.4.1, chalk@^2.4 escape-string-regexp "^1.0.5" supports-color "^5.3.0" +chalk@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-3.0.0.tgz#3f73c2bf526591f574cc492c51e2456349f844e4" + integrity sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + chardet@^0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" @@ -3072,11 +3202,28 @@ color-convert@^1.9.0: dependencies: color-name "1.1.3" +color-convert@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== + dependencies: + color-name "~1.1.4" + color-name@1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= +color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + +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== + columnify@^1.5.4: version "1.5.4" resolved "https://registry.yarnpkg.com/columnify/-/columnify-1.5.4.tgz#4737ddf1c7b69a8a7c340570782e947eec8e78bb" @@ -4152,7 +4299,7 @@ esprima@^3.1.3: resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633" integrity sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM= -esprima@^4.0.0: +esprima@^4.0.0, esprima@~4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== @@ -4222,6 +4369,22 @@ execa@^1.0.0: signal-exit "^3.0.0" strip-eof "^1.0.0" +execa@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-3.3.0.tgz#7e348eef129a1937f21ecbbd53390942653522c1" + integrity sha512-j5Vit5WZR/cbHlqU97+qcnw9WHRCIL4V1SVe75VcHcD1JRBdt8fv0zw89b7CQHQdUHTt2VjuhcF5ibAgVOxqpg== + dependencies: + cross-spawn "^7.0.0" + get-stream "^5.0.0" + human-signals "^1.1.1" + is-stream "^2.0.0" + merge-stream "^2.0.0" + npm-run-path "^4.0.0" + onetime "^5.1.0" + p-finally "^2.0.0" + signal-exit "^3.0.2" + strip-final-newline "^2.0.0" + exit@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" @@ -4425,6 +4588,11 @@ flatted@^2.0.0: resolved "https://registry.yarnpkg.com/flatted/-/flatted-2.0.1.tgz#69e57caa8f0eacbc281d2e2cb458d46fdb449e08" integrity sha512-a1hQMktqW9Nmqr5aktAux3JMNqaucxGcjtjWnZLHX7yyPCmlSV3M54nGYbqT8K+0GhF3NBgmJCc3ma+WOgX8Jg== +flow-parser@0.*: + version "0.112.0" + resolved "https://registry.yarnpkg.com/flow-parser/-/flow-parser-0.112.0.tgz#938d7949068f147a196ebc2bd982ea066b024df5" + integrity sha512-sxjnwhR76B/fUN6n/XerYzn8R1HvtVo3SM8Il3WiZ4nkAlb2BBzKe1TSVKGSyZgD6FW9Bsxom/57ktkqrqmXGA== + flush-write-stream@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/flush-write-stream/-/flush-write-stream-1.1.1.tgz#8dd7d873a1babc207d94ead0c2e0e44276ebf2e8" @@ -4595,6 +4763,13 @@ get-stream@^4.0.0, get-stream@^4.1.0: dependencies: pump "^3.0.0" +get-stream@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.1.0.tgz#01203cdc92597f9b909067c3e656cc1f4d3c4dc9" + integrity sha512-EXr1FOzrzTfGeL0gQdeFEvOMm2mzMOglyiOXSTpPC+iAjAKftbr3jpCMWynogwYnM+eSj9sHGc6wjIcDvYiygw== + dependencies: + pump "^3.0.0" + get-value@^2.0.3, get-value@^2.0.6: version "2.0.6" resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" @@ -4817,6 +4992,11 @@ has-flag@^3.0.0: resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= +has-flag@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" + integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== + has-symbol-support-x@^1.4.1: version "1.4.2" resolved "https://registry.yarnpkg.com/has-symbol-support-x/-/has-symbol-support-x-1.4.2.tgz#1409f98bc00247da45da67cee0a36f282ff26455" @@ -4963,6 +5143,11 @@ https-proxy-agent@^2.2.3: agent-base "^4.3.0" debug "^3.1.0" +human-signals@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-1.1.1.tgz#c5b1cd14f50aeae09ab6c59fe63ba3395fe4dfa3" + integrity sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw== + humanize-ms@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/humanize-ms/-/humanize-ms-1.2.1.tgz#c46e3159a293f6b896da29316d8b6fe8bb79bbed" @@ -5393,6 +5578,11 @@ is-stream@^1.1.0: resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= +is-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.0.tgz#bde9c32680d6fae04129d6ac9d921ce7815f78e3" + integrity sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw== + is-symbol@^1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.3.tgz#38e1014b9e6329be0de9d24a414fd7441ec61937" @@ -5904,6 +6094,30 @@ jsbn@~0.1.0: resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM= +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" @@ -6494,7 +6708,7 @@ minimalistic-crypto-utils@^1.0.0, minimalistic-crypto-utils@^1.0.1: resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" integrity sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo= -minimatch@^3.0.4: +minimatch@^3.0.2, minimatch@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== @@ -6691,6 +6905,13 @@ node-abi@^2.7.0: dependencies: semver "^5.4.1" +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-environment-flags@^1.0.5: version "1.0.6" resolved "https://registry.yarnpkg.com/node-environment-flags/-/node-environment-flags-1.0.6.tgz#a30ac13621f6f7d674260a54dede048c3982c088" @@ -6912,6 +7133,13 @@ npm-run-path@^2.0.0: dependencies: path-key "^2.0.0" +npm-run-path@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.0.tgz#d644ec1bd0569187d2a52909971023a0a58e8438" + integrity sha512-8eyAOAH+bYXFPSnNnKr3J+yoybe8O87Is5rtAQ8qRczJz1ajcsjg8l2oZqP+Ppx15Ii3S1vUTjQN2h4YO2tWWQ== + dependencies: + path-key "^3.0.0" + "npmlog@0 || 1 || 2 || 3 || 4", npmlog@^4.0.1, npmlog@^4.0.2, npmlog@^4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" @@ -7117,6 +7345,11 @@ p-finally@^1.0.0: resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4= +p-finally@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-2.0.1.tgz#bd6fcaa9c559a096b680806f4d657b3f0f240561" + integrity sha512-vpm09aKwq6H9phqRQzecoDpD8TmVyGw70qmWlyq5onxY7tqyTTFVvxMykxQSQKILBSFlbXpypIw2T1Ml7+DDtw== + p-is-promise@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/p-is-promise/-/p-is-promise-1.1.0.tgz#9c9456989e9f6588017b0434d56097675c3da05e" @@ -7321,7 +7554,7 @@ path-key@^2.0.0, path-key@^2.0.1: resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= -path-key@^3.1.0: +path-key@^3.0.0, path-key@^3.1.0: version "3.1.1" resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== @@ -7489,7 +7722,7 @@ prettycli@^1.4.3: dependencies: chalk "2.1.0" -private@^0.1.6: +private@^0.1.6, private@~0.1.5: version "0.1.8" resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff" integrity sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg== @@ -7850,6 +8083,16 @@ realpath-native@^1.1.0: dependencies: util.promisify "^1.0.0" +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" + rechoir@^0.6.2: version "0.6.2" resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.6.2.tgz#85204b54dba82d5742e28c96756ef43af50e3384" @@ -8090,7 +8333,7 @@ rimraf@2, rimraf@^2.5.4, rimraf@^2.6.1, rimraf@^2.6.2, rimraf@^2.6.3: 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" integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA== @@ -8774,6 +9017,11 @@ strip-eof@^1.0.0: resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8= +strip-final-newline@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" + integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== + strip-indent@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-1.0.1.tgz#0c7962a6adefa7bbd4ac366460a638552ae1a0a2" @@ -8833,6 +9081,13 @@ supports-color@^6.1.0: dependencies: has-flag "^3.0.0" +supports-color@^7.1.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.1.0.tgz#68e32591df73e25ad1c4b49108a2ec507962bfd1" + integrity sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g== + dependencies: + has-flag "^4.0.0" + symbol-tree@^3.2.2: version "3.2.4" resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2" @@ -8904,6 +9159,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@^1.4.1: version "1.4.1" resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-1.4.1.tgz#61b18e40eaee5be97e771cdbb10ed1280888c2b4" @@ -9634,7 +9896,7 @@ yargs@^13.3.0: y18n "^4.0.0" yargs-parser "^13.1.1" -yargs@^14.2.2: +yargs@^14.2.0, yargs@^14.2.2: version "14.2.2" resolved "https://registry.yarnpkg.com/yargs/-/yargs-14.2.2.tgz#2769564379009ff8597cdd38fba09da9b493c4b5" integrity sha512-/4ld+4VV5RnrynMhPZJ/ZpOCGSCeghMykZ3BhdFBDa9Wy/RH6uEGNWDJog+aUlq+9OM1CFTgtYRW5Is1Po9NOA==