diff --git a/package.json b/package.json index b973418a51..58e470b447 100644 --- a/package.json +++ b/package.json @@ -41,7 +41,7 @@ "redux-persist": "^6.0.0", "redux-undo": "^1.0.0", "reselect": "^4.0.0", - "typescript": "^3.7.5", + "typescript": "4.2.2", "webfontloader": "^1.6.28" }, "scripts": { @@ -49,7 +49,10 @@ "build": "react-app-rewired --max_old_space_size=4096 build", "test": "react-app-rewired test --env=jsdom", "analyze": "BUNDLE_VISUALIZE=1 react-app-rewired build", - "docs": "jsdoc -c jsdoc.conf.json" + "source-bloat": "source-map-explorer 'build/static/js/*.js'", + "docs": "jsdoc -c jsdoc.conf.json", + "typecheck": "tsc", + "typecheck:watch": "tsc -w" }, "eslintConfig": { "extends": "react-app" @@ -87,6 +90,7 @@ "lint-staged": "^10.0.7", "pretty-quick": "^2.0.1", "react-app-rewired": "^2.1.5", + "source-map-explorer": "^2.5.2", "typedoc": "^0.16.9" }, "husky": { diff --git a/src/babel-plugins/add-component-plugin.ts b/src/babel-plugins/add-component-plugin.ts index 258c7978d8..534802c90e 100644 --- a/src/babel-plugins/add-component-plugin.ts +++ b/src/babel-plugins/add-component-plugin.ts @@ -37,21 +37,22 @@ const addComponentPlugin = ( const openingElement = path.node.openingElement const visitedComponentId = getComponentId(openingElement) - if (visitedComponentId && visitedComponentId === parentId) { - // Change the JSX element in the string to node template - const node = template.ast(componentCode, { - plugins: ['jsx'], - }).expression - - const newLineText = t.jsxText('\n') - - // Add to the children of the parent component - if (path.node.children.length > 0) { - path.node.children.push(node) - path.node.children.push(newLineText) - } else { - path.node.children = [newLineText, node, newLineText] - } + if (visitedComponentId && visitedComponentId !== parentId) { + return + } + // Change the JSX element in the string to node template + const node = template.ast(componentCode, { + plugins: ['jsx'], + }).expression + + const newLineText = t.jsxText('\n') + + // Add to the children of the parent component + if (path.node.children.length > 0) { + path.node.children.push(node) + path.node.children.push(newLineText) + } else { + path.node.children = [newLineText, node, newLineText] } }, }, diff --git a/src/babel-plugins/add-custom-component-plugin.ts b/src/babel-plugins/add-custom-component-plugin.ts index cbe972d4f1..3d82db35a1 100644 --- a/src/babel-plugins/add-custom-component-plugin.ts +++ b/src/babel-plugins/add-custom-component-plugin.ts @@ -23,6 +23,8 @@ const addCustomComponentPlugin = ( // If the value of the prop is a component-id, then the box component should be added. // or else its respective value will be added. + //TODO remove scope and pass as argument + //TODO break into two function, filter, then map const defaultPropsProvider = () => { return defaultProps .filter(prop => prop.name !== 'children') @@ -67,31 +69,33 @@ const addCustomComponentPlugin = ( const openingElement = path.node.openingElement const visitedComponentId = getComponentId(openingElement) - if (visitedComponentId && visitedComponentId === parentId) { - let component: string = `` + if (visitedComponentId && visitedComponentId !== parentId) { + return + } - // If the component is container component, the element will be - // If the component is not a container component, the element will be + let component: string = `` - if (isContainerComponent) { - component = `<${type} compId="${componentId}" ${defaultPropsProvider()}>` - } else { - component = `<${type} compId="${componentId}" ${defaultPropsProvider()}/>` - } + // If the component is container component, the element will be + // If the component is not a container component, the element will be - // Change the JSX element in the string to node template - const node = template.ast(component, { - plugins: ['jsx'], - }).expression - const newLineText = t.jsxText('\n') + if (isContainerComponent) { + component = `<${type} compId="${componentId}" ${defaultPropsProvider()}>` + } else { + component = `<${type} compId="${componentId}" ${defaultPropsProvider()}/>` + } - // Add to the children of the parent component - if (path.node.children.length > 0) { - path.node.children.push(node) - path.node.children.push(newLineText) - } else { - path.node.children = [newLineText, node, newLineText] - } + // Change the JSX element in the string to node template + const node = template.ast(component, { + plugins: ['jsx'], + }).expression + const newLineText = t.jsxText('\n') + + // Add to the children of the parent component + if (path.node.children.length > 0) { + path.node.children.push(node) + path.node.children.push(newLineText) + } else { + path.node.children = [newLineText, node, newLineText] } }, }, diff --git a/src/babel-plugins/add-prop-in-all-instances.ts b/src/babel-plugins/add-prop-in-all-instances.ts index 4ed1ff413f..951a67e0f9 100644 --- a/src/babel-plugins/add-prop-in-all-instances.ts +++ b/src/babel-plugins/add-prop-in-all-instances.ts @@ -19,23 +19,22 @@ const addPropInAllInstances = ( visitor: { JSXOpeningElement(path: any) { const visitedComponentName = path.node.name.name + if (visitedComponentName !== componentName) return - if (visitedComponentName === componentName) { - if (boxId) { - const boxComponent = `` + if (boxId) { + const boxComponent = `` - const element = getJSXElement(boxComponent) + const element = getJSXElement(boxComponent) - const jsxAttribute = t.jsxAttribute( - t.jsxIdentifier(propName), - t.jsxExpressionContainer(element), - ) - path.node.attributes.push(jsxAttribute) - } else { - const jsxAttribute = toJsxAttribute(propName, propValue) - path.node.attributes.push(jsxAttribute) - } - } else return + const jsxAttribute = t.jsxAttribute( + t.jsxIdentifier(propName), + t.jsxExpressionContainer(element), + ) + path.node.attributes.push(jsxAttribute) + } else { + const jsxAttribute = toJsxAttribute(propName, propValue) + path.node.attributes.push(jsxAttribute) + } }, }, } diff --git a/src/components/editor/ComponentPreview.test.tsx b/src/components/editor/ComponentPreview.test.tsx index d7fe38ae76..50c126326c 100644 --- a/src/components/editor/ComponentPreview.test.tsx +++ b/src/components/editor/ComponentPreview.test.tsx @@ -1,3 +1,4 @@ +//@ts-nocheck import React from 'react' import { render } from '@testing-library/react' import { init } from '@rematch/core' @@ -87,7 +88,7 @@ const componentsToTest = [ 'MenuMeta', ] -test.each(componentsToTest)('Component Preview for %s', componentName => { +test.each(componentsToTest)('Component Preview for %s', (componentName) => { // const spy = jest.spyOn(global.console, 'error') // @ts-ignore const store = init(storeConfig) diff --git a/src/components/editor/PreviewContainer.tsx b/src/components/editor/PreviewContainer.tsx index 635defea7f..9560b8e97e 100644 --- a/src/components/editor/PreviewContainer.tsx +++ b/src/components/editor/PreviewContainer.tsx @@ -2,20 +2,12 @@ import React, { FunctionComponent, ComponentClass, Suspense } from 'react' import { useInteractive } from '../../hooks/useInteractive' import { Box } from '@chakra-ui/core' import findAndReplaceExposedPropValue from '../../utils/findAndReplaceExposedPropValue' -import stringToIconConvertor from '../../utils/stringToIconConvertor' +import reactIcon from '../../utils/stringToIconConvertor' import { useDropComponent } from '../../hooks/useDropComponent' -import { CopyIcon } from '@chakra-ui/icons' - -export const isPropRelatedToIcon = (type: string, propName: string) => { - if ( - (type === 'Icon' && propName === 'as') || - propName === 'icon' || - propName === 'leftIcon' || - propName === 'rightIcon' - ) - return true - return false -} +import { + isInlineIconComponent, + isInlineIconString, +} from '../../utils/isInlineIcon' const PreviewContainer: React.FC<{ component: IComponent @@ -51,21 +43,26 @@ const PreviewContainer: React.FC<{ //Converting the icon in string to reactElement Object.keys(propsKeyValue).forEach((key: string) => { - if (isPropRelatedToIcon(component.type, key)) - propsKeyValue[key] = ( - }> - {stringToIconConvertor(key, propsKeyValue[key])} - - ) + if (isInlineIconString(component.type, key)) { + propsKeyValue[key] = reactIcon(propsKeyValue[key]) + } + if (isInlineIconComponent(key)) { + propsKeyValue[key] = React.createElement(reactIcon(propsKeyValue[key])) + } }) - console.log(propsKeyValue) - - const children = React.createElement(type, { + let props = { ...propsKeyValue, ...forwardedProps, ref: drop(ref), - }) + } + if (component.type === 'Icon') { + delete props.ref + } + + const children = ( + {React.createElement(type, props)} + ) if (isBoxWrapped) { let boxProps: any = {} diff --git a/src/components/editor/previews/CustomComponentPreview.tsx b/src/components/editor/previews/CustomComponentPreview.tsx index 6a2225a00b..1fc2dbecba 100644 --- a/src/components/editor/previews/CustomComponentPreview.tsx +++ b/src/components/editor/previews/CustomComponentPreview.tsx @@ -5,7 +5,6 @@ import ComponentPreview from '../ComponentPreview' import { useInteractive } from '../../../hooks/useInteractive' import { getChildrenBy, - getPropsBy, checkIsContainerComponent, } from '../../../core/selectors/components' import findAndReplaceExposedPropValue from '../../../utils/findAndReplaceExposedPropValue' @@ -51,18 +50,6 @@ const CustomComponentPreview: React.FC<{ const componentChildren = useSelector(getChildrenBy(component.type)) - //width of outer container will be the with of the child component - let widthProp = useSelector(getPropsBy(componentChildren[0])).find( - prop => prop.name === 'width', - ) - if (widthProp?.derivedFromComponentType) { - widthProp = componentProps.find( - prop => prop.name === widthProp?.derivedFromPropName, - ) - } - - const width = widthProp ? widthProp.value : '100%' - const propsKeyValue = findAndReplaceExposedPropValue( componentProps, customProps, @@ -73,7 +60,7 @@ const CustomComponentPreview: React.FC<{ ) return ( - + {componentChildren.map((key: string) => ( { - if (isPropRelatedToIcon(component.type, key)) { - const Icon = stringToIconConvertor(key, propsKeyValue[key]) - console.log(Icon) - console.log() - - propsKeyValue[key] = ( - }> - {stringToIconConvertor(key, propsKeyValue[key])} - - ) - } + if (isInlineIconString(component.type, key)) + propsKeyValue[key] = reactIcon(propsKeyValue[key]) + if (isInlineIconComponent(key)) + propsKeyValue[key] = React.createElement(reactIcon(propsKeyValue[key])) }) - console.log(propsKeyValue) - const Element = React.createElement(type, { ...propsKeyValue, ...forwardedProps, @@ -138,9 +130,11 @@ const EditablePreviewContainer: React.FC<{ />, ) - return inputTextFocused && component.id === selectedId - ? contentEditableElement - : Element + return inputTextFocused && component.id === selectedId ? ( + contentEditableElement + ) : ( + {Element} + ) } export default EditablePreviewContainer diff --git a/src/components/inspector/controls/IconControl.tsx b/src/components/inspector/controls/IconControl.tsx index 548ee8237d..001107a82c 100644 --- a/src/components/inspector/controls/IconControl.tsx +++ b/src/components/inspector/controls/IconControl.tsx @@ -12,17 +12,18 @@ type IconControlProps = { const IconControl: React.FC = ({ name, label }) => { const { propId, propValue } = usePropsSelector(name) - const iconsArray = Object.keys(icons).filter(icon => icon !== 'createIcon') + const iconsArray = Object.keys(icons).filter((icon) => icon !== 'createIcon') return ( { + renderOptions={(option) => { const iconName = option // @ts-ignore const Icon = React.createElement(icons[iconName]) diff --git a/src/core/models/components.test.ts b/src/core/models/components.test.ts index 23f441f7af..4cee611774 100644 --- a/src/core/models/components.test.ts +++ b/src/core/models/components.test.ts @@ -1,3 +1,4 @@ +//@ts-nocheck import components, { ComponentsState, INITIAL_COMPONENTS, diff --git a/src/utils/isInlineIcon.ts b/src/utils/isInlineIcon.ts new file mode 100644 index 0000000000..d2f6430473 --- /dev/null +++ b/src/utils/isInlineIcon.ts @@ -0,0 +1,7 @@ +export const isInlineIconString = (componentName: string, propName: string) => { + return componentName === 'Icon' && propName === 'as' +} + +export const isInlineIconComponent = (prop: string) => { + return ['leftIcon', 'icon', 'rightIcon'].includes(prop) +} diff --git a/src/utils/recursive.test.ts b/src/utils/recursive.test.ts index dc28e5d95d..c30f9979e5 100644 --- a/src/utils/recursive.test.ts +++ b/src/utils/recursive.test.ts @@ -1,3 +1,4 @@ +//@ts-nocheck import { generateId } from './generateId' import { duplicateComponent, deleteComponent } from './recursive' @@ -67,10 +68,10 @@ describe('recursive functions', () => { } const avatars = Object.keys(finalTree).filter( - compKey => finalTree[compKey].type === 'Avatar', + (compKey) => finalTree[compKey].type === 'Avatar', ) const boxes = Object.keys(finalTree).filter( - compKey => finalTree[compKey].type === 'Box', + (compKey) => finalTree[compKey].type === 'Box', ) expect(avatars.length).toEqual(2) diff --git a/src/utils/stringToIconConvertor.ts b/src/utils/stringToIconConvertor.ts index 7d940b3cf6..2dda9a64f9 100644 --- a/src/utils/stringToIconConvertor.ts +++ b/src/utils/stringToIconConvertor.ts @@ -1,36 +1,76 @@ -// @ts-nocheck +import React from 'react' +import { ComponentWithAs } from '@chakra-ui/core' +import type { IconType } from 'react-icons' +type faIcons = typeof import('react-icons/fa') +type mdIcons = typeof import('react-icons/md') +type aiIcons = typeof import('react-icons/ai') -export const getFirstTwoCharacters = (value: string) => value.substring(0, 2) +type ckIcons = typeof import('@chakra-ui/icons') +//default is being infered by ts: +//due to https://www.typescriptlang.org/tsconfig#allowSyntheticDefaultImports +//https://stackoverflow.com/questions/66404694/ +type nonIconImports = 'default' | 'createIcon' +type chakraIcons = Exclude -// This function will find the type of icon and return the icon based on the type. -// const findIconType = (iconValue: string) => { -// const subValue = getFirstTwoCharacters(iconValue) +type keysImported = keyof faIcons | keyof mdIcons | keyof aiIcons | chakraIcons +type IconName = Exclude +//todo need stricter typing for props +type ReactChakraIcon = IconType | ComponentWithAs<'svg', any> -// switch (subValue) { -// case 'Fa': { -// return fontAwesomeIcons[iconValue] -// } -// case 'Md': { -// return materialDesignIcons[iconValue] -// } -// case 'Ai': { -// return antDesignIcons[iconValue] -// } -// default: { -// return chakraIcons[iconValue] -// } -// } -// } +//make key as default export from module export +//required for react lazy -const stringToIconConvertor = (propName: string, propValue: string) => { - let Icon: any +const makeDefaultExport = ( + promise: Promise, + key: Exclude, +) => { + return promise.then((module) => { + return { + default: module[key], + } + }) +} - //convert to icon element - if (propName !== 'as') { - if (Icon !== undefined) Icon = propValue - else Icon = '' +const isFaIcon = (name: IconName): name is keyof faIcons => { + return name.substring(0, 2) === 'Fa' +} +const isMdIcon = (name: IconName): name is keyof mdIcons => { + return name.substring(0, 2) === 'Md' +} +const isAiIcon = (name: IconName): name is keyof aiIcons => { + return name.substring(0, 2) === 'Ai' +} +const isChakraIcon = (name: IconName): name is chakraIcons => { + return !['Ai, Md, Fa'].includes(name.substring(0, 2)) +} + +const ReactIcon = ( + iconName: IconName, +): React.LazyExoticComponent => { + if (isFaIcon(iconName)) { + return React.lazy(() => { + return makeDefaultExport(import('react-icons/fa'), iconName) + }) + } + if (isMdIcon(iconName)) { + return React.lazy(() => { + return makeDefaultExport(import('react-icons/md'), iconName) + }) + } + if (isAiIcon(iconName)) { + return React.lazy(() => { + return makeDefaultExport(import('react-icons/ai'), iconName) + }) + } + if (isChakraIcon(iconName)) { + return React.lazy(() => { + return makeDefaultExport(import('@chakra-ui/icons'), iconName) + }) } - return Icon + //check if valid chakra icon and return , then else default icon + return React.lazy(() => { + return makeDefaultExport(import('react-icons/ai'), 'AiFillAlert') + }) } -export default stringToIconConvertor +export default ReactIcon diff --git a/yarn.lock b/yarn.lock index f46973c217..cf00a110a9 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2102,11 +2102,6 @@ "@types/yargs" "^15.0.0" chalk "^4.0.0" -"@mdx-js/react@^1.5.5": - version "1.6.18" - resolved "https://registry.yarnpkg.com/@mdx-js/react/-/react-1.6.18.tgz#f83cbb2355de9cf36a213140ce21647da1e34fa7" - integrity sha512-aFHsZVu7r9WamlP+WO/lyvHHZAubkQjkcRYlvS7fQElypfJvjKdHevjC3xiqlsQpasx/4KqRMoEIb++wNtd+6w== - "@monaco-editor/react@^3.7.1": version "3.7.1" resolved "https://registry.yarnpkg.com/@monaco-editor/react/-/react-3.7.1.tgz#7e2565272b31863255ea5326e60a0bfb80b87171" @@ -2240,11 +2235,6 @@ resolved "https://registry.yarnpkg.com/@react-types/shared/-/shared-3.2.1.tgz#cbcffec02a7592f019916e4bd0807950a1376bcf" integrity sha512-Yi+zB+wvIGrxomjG7JZWsOPm8/tKPBtEsJI4cS2QbSho/bQWsw6xufJ6YlXxmx4BiBcktkp5VeP43E5nWqMQ5w== -"@rehooks/local-storage@^2.1.1": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@rehooks/local-storage/-/local-storage-2.4.0.tgz#fb884b2b657cad5f77aa6ab60bb3532f0e0725d2" - integrity sha512-LoXDbEHsuIckVgBsFAv8SuU/M7memjyfWut9Zf36TQXqqCHBRFv8bweg9PymQCa1aWIMjNrZQflFdo55FDlXYg== - "@rematch/core@^1.3.0": version "1.4.0" resolved "https://registry.yarnpkg.com/@rematch/core/-/core-1.4.0.tgz#686ce814e1cf125029c5e9fba23ef3ab7c3eb2a7" @@ -2990,11 +2980,6 @@ acorn-walk@^6.0.1: resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-6.2.0.tgz#123cb8f3b84c2171f1f7fb252615b1c78a6b1a8c" integrity sha512-7evsyfH1cLOCdAzZAd43Cic04yKydNx0cF+7tiA19p1XnLLPU4dpCQOqpjqwokFe//vS0QqfqqjCS2JkiIs0cA== -acorn-walk@^7.1.1: - version "7.2.0" - resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-7.2.0.tgz#0de889a601203909b0fbe07b8938dc21d2e967bc" - integrity sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA== - acorn@^3.1.0: version "3.3.0" resolved "https://registry.yarnpkg.com/acorn/-/acorn-3.3.0.tgz#45e37fb39e8da3f25baee3ff5369e2bb5f22017a" @@ -3389,6 +3374,11 @@ async-limiter@~1.0.0: resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd" integrity sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ== +async@0.9.x: + version "0.9.2" + resolved "https://registry.yarnpkg.com/async/-/async-0.9.2.tgz#aea74d5e61c1f899613bf64bda66d4c78f2fd17d" + integrity sha1-rqdNXmHB+JlhO/ZL2mbUx48v0X0= + async@^2.6.2: version "2.6.3" resolved "https://registry.yarnpkg.com/async/-/async-2.6.3.tgz#d72625e2344a3656e3a3ad4fa749fa83299d82ff" @@ -3683,16 +3673,6 @@ better-docs@^2.3.2: vue-docgen-api "^3.22.0" vue2-ace-editor "^0.0.13" -bfj@^6.1.1: - version "6.1.2" - resolved "https://registry.yarnpkg.com/bfj/-/bfj-6.1.2.tgz#325c861a822bcb358a41c78a33b8e6e2086dde7f" - integrity sha512-BmBJa4Lip6BPRINSZ0BPEIfB1wUY/9rwbwvIHQA1KjX9om29B6id0wnWXq7m3bn5JrUVjeOTnVuhPT1FiHwPGw== - dependencies: - bluebird "^3.5.5" - check-types "^8.0.3" - hoopy "^0.1.4" - tryer "^1.0.1" - big.js@^5.2.2: version "5.2.2" resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328" @@ -3935,6 +3915,11 @@ bser@2.1.1: dependencies: node-int64 "^0.4.0" +btoa@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/btoa/-/btoa-1.2.1.tgz#01a9909f8b2c93f6bf680ba26131eb30f7fa3d73" + integrity sha512-SB4/MIGlsiVkMcHmT+pSmIPoNDoHg+7cMzmt3Uxt628MTz2487DKSqK/fuhFBrkuqrYv5UCEnACpF4dTFNKc/g== + buffer-alloc-unsafe@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz#bd7dc26ae2972d0eda253be061dba992349c19f0" @@ -4262,11 +4247,6 @@ chardet@^0.7.0: resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== -check-types@^8.0.3: - version "8.0.3" - resolved "https://registry.yarnpkg.com/check-types/-/check-types-8.0.3.tgz#3356cca19c889544f2d7a95ed49ce508a0ecf552" - integrity sha512-YpeKZngUmG65rLudJ4taU7VLkOCTMhNl/u4ctNC56LQS/zJTyNH0Lrtwm1tfTsbLlwvlfsA2d1c8vCf/Kh2KwQ== - chokidar@^2.1.8: version "2.1.8" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.1.8.tgz#804b3a7b6a99358c3c5c61e71d8728f041cff917" @@ -4427,6 +4407,15 @@ cliui@^5.0.0: strip-ansi "^5.2.0" wrap-ansi "^5.1.0" +cliui@^7.0.2: + version "7.0.4" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" + integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== + dependencies: + string-width "^4.2.0" + strip-ansi "^6.0.0" + wrap-ansi "^7.0.0" + clone-deep@^0.2.4: version "0.2.4" resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-0.2.4.tgz#4e73dd09e9fb971cc38670c5dced9c1896481cc6" @@ -4581,7 +4570,7 @@ combined-stream@^1.0.6, combined-stream@~1.0.6: dependencies: delayed-stream "~1.0.0" -commander@^2.11.0, commander@^2.18.0, commander@^2.19.0, commander@^2.20.0, commander@^2.9.0: +commander@^2.11.0, commander@^2.19.0, commander@^2.20.0, commander@^2.9.0: version "2.20.3" resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== @@ -5642,7 +5631,7 @@ duplexer3@^0.1.4: resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2" integrity sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI= -duplexer@^0.1.1: +duplexer@^0.1.1, duplexer@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.2.tgz#3abe43aef3835f8ae077d136ddce0f276b0400e6" integrity sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg== @@ -5678,10 +5667,12 @@ ee-first@1.1.1: resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= -ejs@^2.6.1: - version "2.7.4" - resolved "https://registry.yarnpkg.com/ejs/-/ejs-2.7.4.tgz#48661287573dcc53e366c7a1ae52c3a120eec9ba" - integrity sha512-7vmuyh5+kuUyJKePhQfRQBhXV5Ce+RnaeeQArKu1EAMpL3WbgMt5WG6uQZpEVvYSSsxMXRKOewtDk9RaTKXRlA== +ejs@^3.1.5: + version "3.1.6" + resolved "https://registry.yarnpkg.com/ejs/-/ejs-3.1.6.tgz#5bfd0a0689743bb5268b3550cceeebbc1702822a" + integrity sha512-9lt9Zse4hPucPkoP7FHDF0LQAlGyF9JVpnClFLFH3aSSbxmyoqINRpp/9wePWJTUl4KOQwRL72Iw3InHPDkoGw== + dependencies: + jake "^10.6.1" electron-to-chromium@^1.3.378, electron-to-chromium@^1.3.571: version "1.3.582" @@ -5884,12 +5875,12 @@ es6-symbol@^3.1.1, es6-symbol@~3.1.3: d "^1.0.1" ext "^1.1.2" -escalade@^3.1.0: +escalade@^3.1.0, escalade@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== -escape-html@~1.0.3: +escape-html@^1.0.3, escape-html@~1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg= @@ -6259,7 +6250,7 @@ expect@^24.9.0: jest-message-util "^24.9.0" jest-regex-util "^24.9.0" -express@^4.16.3, express@^4.17.1: +express@^4.17.1: version "4.17.1" resolved "https://registry.yarnpkg.com/express/-/express-4.17.1.tgz#4491fc38605cf51f8629d39c2b5d026f98a4c134" integrity sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g== @@ -6465,6 +6456,13 @@ file-uri-to-path@1.0.0: resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd" integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw== +filelist@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/filelist/-/filelist-1.0.2.tgz#80202f21462d4d1c2e214119b1807c1bc0380e5b" + integrity sha512-z7O0IS8Plc39rTCq6i6iHxk43duYOn8uFJiWSewIq0Bww1RNybVHSCjahmcC87ZqAm4OTvFzlzeGu3XAzG1ctQ== + dependencies: + minimatch "^3.0.4" + filesize@6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/filesize/-/filesize-6.0.1.tgz#f850b509909c7c86f7e450ea19006c31c2ed3d2f" @@ -6814,7 +6812,7 @@ get-caller-file@^1.0.1: resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.3.tgz#f978fa4c90d1dfe7ff2d6beda2a515e713bdcf4a" integrity sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w== -get-caller-file@^2.0.1: +get-caller-file@^2.0.1, get-caller-file@^2.0.5: version "2.0.5" resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== @@ -7027,7 +7025,7 @@ growly@^1.3.0: resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081" integrity sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE= -gzip-size@5.1.1, gzip-size@^5.0.0: +gzip-size@5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/gzip-size/-/gzip-size-5.1.1.tgz#cb9bee692f87c0612b232840a873904e4c135274" integrity sha512-FNHi6mmoHvs1mxZAds4PpdCS6QG8B4C1krxJsMutgxl5t3+GlRTzzI3NEkifXx2pVsOvJdOGSmIgDhQ55FwdPA== @@ -7035,6 +7033,13 @@ gzip-size@5.1.1, gzip-size@^5.0.0: duplexer "^0.1.1" pify "^4.0.1" +gzip-size@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/gzip-size/-/gzip-size-6.0.0.tgz#065367fd50c239c0671cbcbad5be3e2eeb10e462" + integrity sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q== + dependencies: + duplexer "^0.1.2" + handle-thing@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/handle-thing/-/handle-thing-2.0.1.tgz#857f79ce359580c340d43081cc648970d0bb234e" @@ -7219,11 +7224,6 @@ homedir-polyfill@^1.0.0: dependencies: parse-passwd "^1.0.0" -hoopy@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/hoopy/-/hoopy-0.1.4.tgz#609207d661100033a9a9402ad3dea677381c1b1d" - integrity sha512-HRcs+2mr52W0K+x8RzcLzuPPmVIKMSv97RGHy0Ea9y/mpcaK+xTrjICA04KAHi4GRzxliNqNJEFYWHghy3rSfQ== - hosted-git-info@^2.1.4, hosted-git-info@^2.4.2: version "2.8.8" resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.8.tgz#7539bd4bc1e0e0a895815a2e0262420b12858488" @@ -8170,6 +8170,16 @@ istextorbinary@^2.2.1: editions "^2.2.0" textextensions "^2.5.0" +jake@^10.6.1: + version "10.8.2" + resolved "https://registry.yarnpkg.com/jake/-/jake-10.8.2.tgz#ebc9de8558160a66d82d0eadc6a2e58fbc500a7b" + integrity sha512-eLpKyrfG3mzvGE2Du8VoPbeSkRry093+tyNjdYaBbJS9v17knImYGNXQCUV0gLxQtF82m3E8iRb/wdSQZLoq7A== + dependencies: + async "0.9.x" + chalk "^2.4.2" + filelist "^1.0.1" + minimatch "^3.0.4" + jest-changed-files@^24.9.0: version "24.9.0" resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-24.9.0.tgz#08d8c15eb79a7fa3fc98269bc14b451ee82f8039" @@ -9050,11 +9060,6 @@ locate-path@^5.0.0: dependencies: p-locate "^4.1.0" -lodash-es@^4.17.15: - version "4.17.15" - resolved "https://registry.yarnpkg.com/lodash-es/-/lodash-es-4.17.15.tgz#21bd96839354412f23d7a10340e5eac6ee455d78" - integrity sha512-rlrc3yU3+JNOpZ9zj5pQtxnx2THmvRykwL4Xlxoa8I9lHBlVbbyPhgyPMioxVZ4NqyxaVVtaJnzsyOidQIhyyQ== - lodash._reinterpolate@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz#0ccf2d89166af03b3663c796538b75ac6e114d9d" @@ -10114,16 +10119,19 @@ open@^7.0.2: is-docker "^2.0.0" is-wsl "^2.1.1" +open@^7.3.1: + version "7.4.2" + resolved "https://registry.yarnpkg.com/open/-/open-7.4.2.tgz#b8147e26dcf3e426316c730089fd71edd29c2321" + integrity sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q== + dependencies: + is-docker "^2.0.0" + is-wsl "^2.1.1" + opencollective-postinstall@^2.0.2: version "2.0.3" resolved "https://registry.yarnpkg.com/opencollective-postinstall/-/opencollective-postinstall-2.0.3.tgz#7a0fff978f6dbfa4d006238fbac98ed4198c3259" integrity sha512-8AV/sCtuzUeTo8gQK5qDZzARrulB3egtLzFgteqB2tcT4Mw7B8Kt7JcDHmltjz6FOAHsvTevk70gZEbhM4ZS9Q== -opener@^1.5.1: - version "1.5.2" - resolved "https://registry.yarnpkg.com/opener/-/opener-1.5.2.tgz#5d37e1f35077b9dcac4301372271afdeb2a13598" - integrity sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A== - opn@^5.5.0: version "5.5.0" resolved "https://registry.yarnpkg.com/opn/-/opn-5.5.0.tgz#fc7164fab56d235904c51c3b27da6758ca3b9bfc" @@ -11393,11 +11401,6 @@ pretty-quick@^2.0.1: mri "^1.1.4" multimatch "^4.0.0" -prism-react-renderer@^1.0.2: - version "1.1.1" - resolved "https://registry.yarnpkg.com/prism-react-renderer/-/prism-react-renderer-1.1.1.tgz#1c1be61b1eb9446a146ca7a50b7bcf36f2a70a44" - integrity sha512-MgMhSdHuHymNRqD6KM3eGS0PNqgK9q4QF5P0yoQQvpB6jNjeSAi3jcSAz0Sua/t9fa4xDOMar9HJbLa08gl9ug== - private@^0.1.8: version "0.1.8" resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff" @@ -12622,7 +12625,7 @@ right-align@^0.1.1: dependencies: align-text "^0.1.1" -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== @@ -13114,6 +13117,24 @@ source-list-map@^2.0.0: resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.1.tgz#3993bd873bfc48479cca9ea3a547835c7c154b34" integrity sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw== +source-map-explorer@^2.5.2: + version "2.5.2" + resolved "https://registry.yarnpkg.com/source-map-explorer/-/source-map-explorer-2.5.2.tgz#857cab5dd9d1d7175e9c5c2739dc9ccfb99f2dc5" + integrity sha512-gBwOyCcHPHcdLbgw6Y6kgoH1uLKL6hN3zz0xJcNI2lpnElZliIlmSYAjUVwAWnc7+HscoTyh1ScR7ITtFuEnxg== + dependencies: + btoa "^1.2.1" + chalk "^4.1.0" + convert-source-map "^1.7.0" + ejs "^3.1.5" + escape-html "^1.0.3" + glob "^7.1.6" + gzip-size "^6.0.0" + lodash "^4.17.20" + open "^7.3.1" + source-map "^0.7.3" + temp "^0.9.4" + yargs "^16.2.0" + source-map-resolve@^0.5.0, source-map-resolve@^0.5.2: version "0.5.3" resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.3.tgz#190866bece7553e1f8f267a2ee82c606b5509a1a" @@ -13156,6 +13177,11 @@ source-map@^0.5.0, source-map@^0.5.6, source-map@^0.5.7, source-map@~0.5.1: resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= +source-map@^0.7.3: + version "0.7.3" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383" + integrity sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ== + spdx-correct@^3.0.0: version "3.1.1" resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.1.tgz#dece81ac9c1e6713e5f7d1b6f17d468fa53d89a9" @@ -13631,6 +13657,14 @@ tar-stream@^1.1.2, tar-stream@^1.5.4: to-buffer "^1.1.1" xtend "^4.0.0" +temp@^0.9.4: + version "0.9.4" + resolved "https://registry.yarnpkg.com/temp/-/temp-0.9.4.tgz#cd20a8580cb63635d0e4e9d4bd989d44286e7620" + integrity sha512-yYrrsWnrXMcdsnu/7YMYAofM1ktpL5By7vZhf15CrXijWWrEYZks5AXBudalfSWJLlnen/QUJUB5aoB0kqZUGA== + dependencies: + mkdirp "^0.5.1" + rimraf "~2.6.2" + term-size@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/term-size/-/term-size-1.2.0.tgz#458b83887f288fc56d6fffbfad262e26638efa69" @@ -13851,11 +13885,6 @@ tr46@^1.0.1: dependencies: punycode "^2.1.0" -tryer@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/tryer/-/tryer-1.0.1.tgz#f2c85406800b9b0f74c9f7465b81eaad241252f8" - integrity sha512-c3zayb8/kWWpycWYg87P71E1S1ZL6b6IJxfb5fvsUgsf0S2MVGaDhDXXjDMpdCpfWXqptc+4mXwmiy1ypXqRAA== - ts-map@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/ts-map/-/ts-map-1.0.3.tgz#1c4d218dec813d2103b7e04e4bcf348e1471c1ff" @@ -13977,6 +14006,11 @@ typescript@3.7.x: resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.7.5.tgz#0692e21f65fd4108b9330238aac11dd2e177a1ae" integrity sha512-/P5lkRXkWHNAbcJIiHPfRoKqyd7bsyCma1hZNUGfn20qm64T6ZBlrzprymeu918H+mB/0rIg2gGK/BXkhhYgBw== +typescript@4.2.2: + version "4.2.2" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.2.2.tgz#1450f020618f872db0ea17317d16d8da8ddb8c4c" + integrity sha512-tbb+NVrLfnsJy3M59lsDgrzWIflR4d4TIUjz+heUnHZwdF7YsrMTKoRERiIvI2lvBG95dfpLxB21WZhys1bgaQ== + typescript@^3.2.2, typescript@^3.7.5: version "3.9.7" resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.9.7.tgz#98d600a5ebdc38f40cb277522f12dc800e9e25fa" @@ -14404,25 +14438,6 @@ webidl-conversions@^4.0.2: resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad" integrity sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg== -webpack-bundle-analyzer@^3.6.0: - version "3.9.0" - resolved "https://registry.yarnpkg.com/webpack-bundle-analyzer/-/webpack-bundle-analyzer-3.9.0.tgz#f6f94db108fb574e415ad313de41a2707d33ef3c" - integrity sha512-Ob8amZfCm3rMB1ScjQVlbYYUEJyEjdEtQ92jqiFUYt5VkEeO2v5UMbv49P/gnmCZm3A6yaFQzCBvpZqN4MUsdA== - dependencies: - acorn "^7.1.1" - acorn-walk "^7.1.1" - bfj "^6.1.1" - chalk "^2.4.1" - commander "^2.18.0" - ejs "^2.6.1" - express "^4.16.3" - filesize "^3.6.1" - gzip-size "^5.0.0" - lodash "^4.17.19" - mkdirp "^0.5.1" - opener "^1.5.1" - ws "^6.0.0" - webpack-dev-middleware@^3.7.2: version "3.7.2" resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-3.7.2.tgz#0019c3db716e3fa5cecbf64f2ab88a74bab331f3" @@ -14811,6 +14826,15 @@ wrap-ansi@^6.2.0: string-width "^4.1.0" strip-ansi "^6.0.0" +wrap-ansi@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + wrappy@1: version "1.0.2" resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" @@ -14848,7 +14872,7 @@ ws@^5.2.0: dependencies: async-limiter "~1.0.0" -ws@^6.0.0, ws@^6.1.2, ws@^6.2.1: +ws@^6.1.2, ws@^6.2.1: version "6.2.1" resolved "https://registry.yarnpkg.com/ws/-/ws-6.2.1.tgz#442fdf0a47ed64f59b6a5d8ff130f4748ed524fb" integrity sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA== @@ -14890,6 +14914,11 @@ y18n@^3.2.1: resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b" integrity sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w== +y18n@^5.0.5: + version "5.0.5" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.5.tgz#8769ec08d03b1ea2df2500acef561743bbb9ab18" + integrity sha512-hsRUr4FFrvhhRH12wOdfs38Gy7k2FFzB9qgN9v3aLykRq0dRcdcpz5C9FxdS2NuhOrI/628b/KSTJ3rwHysYSg== + yallist@^2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" @@ -14926,6 +14955,11 @@ yargs-parser@^13.1.2: camelcase "^5.0.0" decamelize "^1.2.0" +yargs-parser@^20.2.2: + version "20.2.6" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.6.tgz#69f920addf61aafc0b8b89002f5d66e28f2d8b20" + integrity sha512-AP1+fQIWSM/sMiET8fyayjx/J+JmTPt2Mr0FkrgqB4todtfa53sOsrSAcIrJRD5XS20bKUwaDIuMkWKCEiQLKA== + yargs@12.0.5: version "12.0.5" resolved "https://registry.yarnpkg.com/yargs/-/yargs-12.0.5.tgz#05f5997b609647b64f66b81e3b4b10a368e7ad13" @@ -14960,6 +14994,19 @@ yargs@^13.3.0: y18n "^4.0.0" yargs-parser "^13.1.2" +yargs@^16.2.0: + version "16.2.0" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" + integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== + dependencies: + cliui "^7.0.2" + escalade "^3.1.1" + get-caller-file "^2.0.5" + require-directory "^2.1.1" + string-width "^4.2.0" + y18n "^5.0.5" + yargs-parser "^20.2.2" + yargs@~3.10.0: version "3.10.0" resolved "https://registry.yarnpkg.com/yargs/-/yargs-3.10.0.tgz#f7ee7bd857dd7c1d2d38c0e74efbd681d1431fd1"