├── .github └── workflows │ └── ci.yml ├── .gitignore ├── CHANGELOG.md ├── LICENSE ├── README.md ├── package.json ├── rollup.config.js ├── src ├── index.ts └── useEditable.ts ├── tsconfig.json ├── use-editable-Hero.png └── yarn.lock /.github/workflows/ci.yml: -------------------------------------------------------------------------------- 1 | name: Continuous Integration 2 | 3 | on: 4 | pull_request: 5 | push: 6 | branches: [main] 7 | 8 | jobs: 9 | build: 10 | runs-on: ubuntu-latest 11 | strategy: 12 | matrix: 13 | node-version: [18.x] 14 | 15 | steps: 16 | - uses: actions/checkout@v4 17 | 18 | - name: Use Node.js ${{ matrix.node-version }} 19 | uses: actions/setup-node@v4 20 | with: 21 | node-version: ${{ matrix.node-version }} 22 | 23 | - name: Get Yarn cache directory 24 | id: yarn-cache-dir-path 25 | run: echo "dir=$(yarn cache dir)" >> $GITHUB_OUTPUT 26 | 27 | - name: Use Yarn cache 28 | uses: actions/cache@v4 29 | id: yarn-cache 30 | with: 31 | path: ${{ steps.yarn-cache-dir-path.outputs.dir }} 32 | key: ${{ runner.os }}-yarn-${{ matrix.node-version }}-${{ hashFiles('**/yarn.lock') }} 33 | 34 | - name: Install dependencies 35 | run: yarn install --prefer-offline --frozen-lockfile 36 | 37 | - name: TypeScript Check 38 | run: yarn run check 39 | 40 | - name: Build 41 | run: yarn run build 42 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | yarn-error.log 2 | dist/ 3 | node_modules/ 4 | coverage/ 5 | -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # use-editable 2 | 3 | ## 2.3.3 4 | 5 | - Prevent empty text from being inserted 6 | (See [`82ac3eb`](https://github.com/kitten/use-editable/commit/82ac3eb5000e0fa4967924ab54a98738270a1183)) 7 | - Prevent empty or negative ranges from being created for empty elements 8 | (See [`b79d013`](https://github.com/kitten/use-editable/commit/b79d0130527baa9ba703e5193dd9beddc00904e8)) 9 | 10 | ## 2.3.2 11 | 12 | - Fix missing backspace behaviour on `opts.indentation` for non-plaintext-only browsers 13 | (See [`093b10e`](https://github.com/kitten/use-editable/commit/093b10eb645aece3e8e974721fe8ebf9c1e7a1a3)) 14 | 15 | ## 2.3.1 16 | 17 | - Fix Chrome quirk where initial focus would immediately lose its selected range by switching to `selectstart` and checking for `window.getSelection().rangeCount` 18 | (See [`71ae9a2`](https://github.com/kitten/use-editable/commit/71ae9a20bdf09b1bff8b6cb9ee460b5f828ffa69)) 19 | 20 | ## 2.3.0 21 | 22 | - Add `Edit#getState()` method to returned `Edit` handle. `useEditable` returns the `Edit` object with several methods to allow manipulating the current editable. 23 | The `getState()` method allows you to retrieve the current text and position of the editable. 24 | (See [`98cb706`](https://github.com/kitten/use-editable/commit/98cb70625f35254c0e349f129a05edb43d39a3c3)) 25 | 26 | ## 2.2.2 27 | 28 | - Fix regression from `2.2.1`, which would misplace the indentation pattern and not recognise lines with content when backspace is pressed. 29 | (See [`bc2be15`](https://github.com/kitten/use-editable/commit/bc2be1530e1d85949bd9300d62547ed62e04e43a)) 30 | 31 | ## 2.2.1 32 | 33 | - Add space-only indentation when `opts.indentation` is passed. This means that `useEditable` now inserts spaces over tabs when `opts.indentation` is set and overrides the 34 | default backspace behaviour to delete multiple spaces as needed. 35 | (See [`9291f6c`](https://github.com/kitten/use-editable/commit/9291f6ccdb9a6cfcfba38f59ead89a2024ec2bee)) 36 | 37 | ## 2.2.0 38 | 39 | - Add `Edit#move()` method to edit the caret position programmatically. The caret can now be moved to a specific character index or row/column coordinates. 40 | (See [`15cea68`](https://github.com/kitten/use-editable/commit/15cea6817242e30deb8bda9996060b9dd11db1ab)) 41 | 42 | ## 2.1.2 43 | 44 | - Fix undo/redo key combination, which regressed previously, since it was switched to `event.key` rather than `event.code` 45 | (See [`7147dca`](https://github.com/kitten/use-editable/commit/7147dcaa70e389ad9e0cdc6f92f76f6f6bcd724d)) 46 | - Fix changes from being flushed to eagerly, which was meant to preserve the selected ranges more eagerly 47 | (See [`1feaec5`](https://github.com/kitten/use-editable/commit/1feaec57e72c0edbefaf81464856656662baf89c)) 48 | 49 | ## 2.1.1 50 | 51 | - Fix key repeats (held keys) not flushing changes correctly 52 | (See [`3807bbf`](https://github.com/kitten/use-editable/commit/3807bbf6c143259d46cba52becf2c4f100fb6f69)) 53 | 54 | ## 2.1.0 55 | 56 | - Support non-collpsed selection restoration, in other words, when a range is selected and the component updates in the meantime, the selection is restored correctly. 57 | This is achieved by storing the selection's "extent", i.e. the number of characters it selects past its start. 58 | (See [`a15f8fc`](https://github.com/kitten/use-editable/commit/a15f8fcd9c1731c98c1ee2d96b6b0ed19ad40355)) 59 | 60 | ## 2.0.2 61 | 62 | - Fix inconsistency of deletion behaviour on the beginning of lines. Due to the lack of `plaintext-only` support in Firefox, 63 | computing the current position would be relative to the root element, when plain text is selected. This makes it extremely difficult 64 | to get the current position without small offsets. 65 | (See [`1644f51`](https://github.com/kitten/use-editable/commit/1644f516ad7d4f3367f4fa9fad41268dd9084ddc)) 66 | 67 | ## 2.0.1 68 | 69 | - Fix `onChange` not being triggered when the cursor moves 70 | (See [`9dfadda`](https://github.com/kitten/use-editable/commit/9dfadda649e7f4d2b850a7d90ddc0ed62f81a041)) 71 | 72 | ## 2.0.0 73 | 74 | - Add `Edit` return value to `useEditable`. The `useEditable` hook now returns an object with multiple methods that may be useful 75 | for controlling the editable's content, behaviour and cursor. Specifically it returns `Edit#update`, which was its previous return value 76 | for updating its content, and `Edit#insert` to append new text. 77 | (See [`c031d7e`](https://github.com/kitten/use-editable/commit/c031d7ee3e2551f6230df7fae0b03a3ce287d202)) 78 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2020 Phil Plückthun, 4 | Copyright (c) 2021 Formidable 5 | 6 | Permission is hereby granted, free of charge, to any person obtaining a copy 7 | of this software and associated documentation files (the "Software"), to deal 8 | in the Software without restriction, including without limitation the rights 9 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | copies of the Software, and to permit persons to whom the Software is 11 | furnished to do so, subject to the following conditions: 12 | 13 | The above copyright notice and this permission notice shall be included in all 14 | copies or substantial portions of the Software. 15 | 16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 22 | SOFTWARE. 23 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 |
2 | 3 | Use Editable — Formidable, We build the modern web 4 | 5 |

A small React hook to turn elements into fully renderable & editable content surfaces, like code editors, using contenteditable (and magic)

6 |
7 | 8 | NPM Version 9 | 10 | 11 | License 12 | 13 | 14 | Minified gzip size 15 | 16 |
17 |
18 |
19 | 20 | `useEditable` is a small hook that enables elements to be `contenteditable` while still being fully renderable. This is ideal for creating small code editors or prose textareas in just `2kB`! 21 | 22 | It aims to allow any element to be editable while still being able to render normal React elements to it — no `innerHTML` and having to deal with operating with or rendering to raw HTML, or starting a full editor project from scratch. 23 | 24 | **Check out [the full demo on CodeSandbox](https://codesandbox.io/s/use-editable-0l9kc) with `prism-react-renderer`!** 25 | 26 | ## Usage 27 | 28 | First install `use-editable` alongside `react`: 29 | 30 | ```sh 31 | yarn add use-editable 32 | # or 33 | npm install --save use-editable 34 | ``` 35 | 36 | You'll then be able to import `useEditable` and pass it an `HTMLElement` ref and an `onChange` handler. 37 | 38 | ```js 39 | import React, { useState, useRef } from 'react'; 40 | import { useEditable } from 'use-editable'; 41 | 42 | const RainbowCode = () => { 43 | const [code, setCode] = useState('function test() {}\nconsole.log("hello");'); 44 | const editorRef = useRef(null); 45 | 46 | useEditable(editorRef, setCode); 47 | 48 | return ( 49 |
50 |
 54 |         {code.split(/\r?\n/).map((content, i, arr) => (
 55 |           
 56 |             
 57 |               {content}
 58 |             
 59 |             {i < arr.length - 1 ? '\n' : null}
 60 |           
 61 |         ))}
 62 |       
63 |
64 | ); 65 | }; 66 | ``` 67 | 68 | And just like that we've hooked up `useEditable` to our `editorRef`, which points to the `
`
 69 | element that is being rendered, and to `setCode` which drives our state containing some code.
 70 | 
 71 | ## Browser Compatibility
 72 | 
 73 | This library has been tested against and **should work properly** using:
 74 | 
 75 | - Chrome
 76 | - Safari
 77 | - iOS Safari
 78 | - Firefox
 79 | 
 80 | There are known issues in **IE 11** due to the `MutationObserver` method being unable to
 81 | read text nodes that have been removed via the `contenteditable`.
 82 | 
 83 | ## FAQ
 84 | 
 85 | ### How does it work?
 86 | 
 87 | Traditionally, there have been three options when choosing editing surfaces in React. Either one
 88 | could go for a large project like ProseMirror / CodeMirror or similar which take control over much
 89 | of the editing and rendering events and are hence rather opinionated, or it's possible to just
 90 | use `contenteditable` and render to raw HTML that is replaced in the element's content, or lastly one
 91 | could combine a `textarea` with an overlapping `div` that renders stylised content.
 92 | 
 93 | All three options don't allow much customisation in terms of what actually gets rendered or put
 94 | unreasonable restrictions on how easy it is to render and manage an editable's content.
 95 | 
 96 | **So what makes rendering to a `contenteditable` element so hard?**
 97 | 
 98 | Typically this is tough because they edit the DOM directly. This causes most rendering libraries, like
 99 | React and Preact to be confused, since their underlying Virtual DOMs don't match up with the actual
100 | DOM structure anymore. To prevent this issue `use-editable` creates a `MutationObserver`, which watches
101 | over all changes that are made to the `contenteditable` element. Before it reports these changes to
102 | React it first rolls back all changes to the DOM so that React sees what it expects.
103 | 
104 | Furthermore it also preserves the current position of the caret, the selection, and restores it once
105 | React has updated the DOM itself. This is a rather common technique for `contenteditable` editors, but
106 | the `MutationObserver` addition is what enables `use-editable` to let another view library update the element's
107 | content.
108 | 
109 | ### What's currently possible?
110 | 
111 | Currently either the rendered elements' text content has to eventually exactly match the code input,
112 | or your implementation must be able to convert the rendered text content back into what you're using
113 | as state. This is a limitation of how `contenteditable`'s work, since they'll only capture the actual
114 | DOM content. Since `use-editable` doesn't aim to be a full component that manages the render cycle, it
115 | doesn't have to keep any extra state, but will only pass the DOM's text back to the `onChange` callback.
116 | 
117 | Using the `onChange` callback you'll also receive a `Position` object describing the cursor position,
118 | the current line number, and the line's contents up until the cursor, which is useful for auto-suggestions,
119 | which could then be applied with the `update` function that `useEditable` returns to update the cursor
120 | position.
121 | 
122 | ## API
123 | 
124 | ### useEditable
125 | 
126 | The **first argument** is `elementRef` and accepts a ref object of type `RefObject` which
127 | points to the element that should become editable. This ref is allowed to be `null` or change during
128 | the runtime of the hook. As long as the changes of the ref are triggered by React, everything should
129 | behave as expected.
130 | 
131 | The **second argument** is `onChange` and accepts a callback of type `(text: string, pos: Position) => void`
132 | that's called whenever the content of the `contenteditable` changes. This needs to be set up so that
133 | it'll trigger a rerender of the element's contents.
134 | 
135 | The `text` that `onChange` receives is just the textual representation of the element's contents, while the
136 | `Position` it receives contains the current position of the cursor, the line number (zero-indexed), and
137 | the content of the current line up until the cursor, which is useful for autosuggestions.
138 | 
139 | The **third argument** is an optional `options` object. This accepts currently two options to change
140 | the editing behavior of the hook:
141 | 
142 | - The `disabled` option disables editing on the editable by removing the `contentEditable` attribute from
143 |   it again.
144 | - The `indentation` option may be a number of displayed spaces for indentation. This also enables the
145 |   improved `Tab` key behavior, which will indent the current line or dedent the current line when shift is
146 |   held (Be aware that this will make the editor act as a focus trap!)
147 | 
148 | When `options.indentation` is set then `useEditable` will prevent the insertion of tab characters and
149 | will instead insert the specified amount of whitespaces, which makes handling of columns much easier.
150 | 
151 | Additionally the `useEditable` hook returns an `Edit` handle with several methods, as documented below.
152 | 
153 | #### Edit.update
154 | 
155 | `Edit.update(content: string): void`
156 | 
157 | Replaces the entire content of the editable while adjusting the caret position.
158 | This will shift the caret by the difference in length between the current content and the passed content.
159 | 
160 | #### Edit.insert
161 | 
162 | `Edit.insert(append: string, offset?: number): void`
163 | 
164 | Inserts new text at the caret position while deleting text in range of the offset (which accepts negative offsets).
165 | For example, when `offset` is set to `-1` then a single character is deleted to the left of the caret before
166 | inserting any new text. When it's set to `2` then two characters to the right of the carets are deleted.
167 | The `append` text may also be set to an empty string to only apply deletions without inserting any text.
168 | When any text is selected then it's simply erased first and `offset` is ignored.
169 | 
170 | #### Edit.move
171 | 
172 | `Edit.move(pos: number | { row: number; column: number }): void`
173 | 
174 | This moves the caret to the specified position. The position may either be a character index (a `number`)
175 | or coordinates specifying a `row` and `column` separately.
176 | 
177 | #### Edit.getState
178 | 
179 | `Edit.getState(): { text: string; position: Position }`
180 | 
181 | This method allows getting the current state of the editable, which is the same as what `onChange` usually
182 | receives. This is useful when adding custom editing actions in a key down handler or when programmatically
183 | imitating `onChange` otherwise, while the editable is selected.
184 | 
185 | ## Acknowledgments
186 | 
187 | - [`react-live`](https://github.com/FormidableLabs/react-live/blob/v1.12.0/src/components/Editor/index.js), which I've worked on
188 |   had one of the early tiny `contenteditable` editors. (But with raw HTML updates)
189 | - [`react-simple-code-editor`](https://github.com/satya164/react-simple-code-editor) was the first (?) library to use a split textarea
190 |   and rendering surface implementation, which presented what a nice editing API should look like.
191 | - [`codejar`](https://github.com/antonmedv/codejar) contains the best tricks to manage selections, although it lacks some
192 |   Firefox workarounds. It also uses raw HTML highlighting / updating.
193 | - [`codemirror.next`](https://github.com/codemirror/codemirror.next) is an invaluable source to see different techniques when
194 |   handling text input and DOM update tricks.
195 | 
196 | 
197 | ## Maintenance Status
198 | 
199 | **Stable:** Formidable is not planning to develop any new features for this project. We are still responding to bug reports and security concerns. We are still welcoming PRs for this project, but PRs that include new features should be small and easy to integrate and should not include breaking changes.
200 | 


--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "name": "use-editable",
 3 |   "description": "A small React hook to turn elements into fully renderable & editable content surfaces, like code editors, using contenteditable (and magic)",
 4 |   "version": "2.3.3",
 5 |   "main": "dist/use-editable.js",
 6 |   "module": "dist/use-editable.es.js",
 7 |   "types": "dist/types/index.d.ts",
 8 |   "source": "src/index.ts",
 9 |   "sideEffects": false,
10 |   "license": "MIT",
11 |   "files": [
12 |     "LICENSE",
13 |     "README.md",
14 |     "dist/"
15 |   ],
16 |   "keywords": [
17 |     "contenteditable",
18 |     "text editing",
19 |     "react",
20 |     "hook"
21 |   ],
22 |   "repository": "https://github.com/FormidableLabs/use-editable",
23 |   "bugs": {
24 |     "url": "https://github.com/FormidableLabs/use-editable/issues"
25 |   },
26 |   "scripts": {
27 |     "check": "tsc",
28 |     "build": "rollup -c rollup.config.js",
29 |     "prepublishOnly": "run-s check build"
30 |   },
31 |   "prettier": {
32 |     "singleQuote": true,
33 |     "arrowParens": "avoid",
34 |     "trailingComma": "es5"
35 |   },
36 |   "lint-staged": {
37 |     "*.{js,ts}": "prettier --write",
38 |     "*.json": "prettier --write",
39 |     "*.md": "prettier --write"
40 |   },
41 |   "husky": {
42 |     "hooks": {
43 |       "pre-commit": "lint-staged --quiet --relative"
44 |     }
45 |   },
46 |   "peerDependencies": {
47 |     "react": ">= 16.8.0"
48 |   },
49 |   "devDependencies": {
50 |     "@ampproject/rollup-plugin-closure-compiler": "^0.26.0",
51 |     "@babel/core": "^7.11.6",
52 |     "@babel/plugin-transform-object-assign": "^7.10.4",
53 |     "@rollup/plugin-buble": "^0.21.3",
54 |     "@rollup/plugin-commonjs": "^15.0.0",
55 |     "@rollup/plugin-node-resolve": "^9.0.0",
56 |     "@types/react": "^16.9.49",
57 |     "babel-plugin-closure-elimination": "^1.3.2",
58 |     "husky": "^4.3.0",
59 |     "lint-staged": "^10.4.0",
60 |     "npm-run-all": "^4.1.5",
61 |     "prettier": "^2.1.2",
62 |     "react": "^16.13.1",
63 |     "rollup": "^2.27.1",
64 |     "rollup-plugin-babel": "^4.4.0",
65 |     "rollup-plugin-terser": "^7.0.2",
66 |     "rollup-plugin-typescript2": "^0.27.2",
67 |     "typescript": "^4.0.3"
68 |   }
69 | }
70 | 


--------------------------------------------------------------------------------
/rollup.config.js:
--------------------------------------------------------------------------------
  1 | import commonjs from '@rollup/plugin-commonjs';
  2 | import resolve from '@rollup/plugin-node-resolve';
  3 | import typescript from 'rollup-plugin-typescript2';
  4 | import buble from '@rollup/plugin-buble';
  5 | import babel from 'rollup-plugin-babel';
  6 | import { terser } from 'rollup-plugin-terser';
  7 | import compiler from '@ampproject/rollup-plugin-closure-compiler';
  8 | 
  9 | const pkg = require('./package.json');
 10 | 
 11 | export const externalModules = ['dns', 'fs', 'path', 'url'];
 12 | if (pkg.peerDependencies)
 13 |   externalModules.push(...Object.keys(pkg.peerDependencies));
 14 | if (pkg.dependencies) externalModules.push(...Object.keys(pkg.dependencies));
 15 | 
 16 | const externalPredicate = new RegExp(`^(${externalModules.join('|')})($|/)`);
 17 | 
 18 | export const isExternal = id => {
 19 |   if (id === 'babel-plugin-transform-async-to-promises/helpers') return false;
 20 |   return externalPredicate.test(id);
 21 | };
 22 | 
 23 | const config = {
 24 |   input: {
 25 |     [pkg.name]: './src/index.ts',
 26 |   },
 27 |   onwarn() {},
 28 |   external: isExternal,
 29 |   treeshake: {
 30 |     unknownGlobalSideEffects: false,
 31 |     tryCatchDeoptimization: false,
 32 |     moduleSideEffects: false,
 33 |   },
 34 | };
 35 | 
 36 | const plugins = [
 37 |   resolve({
 38 |     extensions: ['.js', '.jsx', '.ts', '.tsx'],
 39 |     mainFields: ['module', 'jsnext', 'main'],
 40 |     preferBuiltins: false,
 41 |     browser: true,
 42 |   }),
 43 | 
 44 |   commonjs({
 45 |     ignoreGlobal: true,
 46 |     include: /\/node_modules\//,
 47 |     namedExports: {},
 48 |   }),
 49 | 
 50 |   typescript({
 51 |     useTsconfigDeclarationDir: true,
 52 |     tsconfigOverride: {
 53 |       compilerOptions: {
 54 |         sourceMap: true,
 55 |         noEmit: false,
 56 |         declaration: true,
 57 |         declarationDir: './dist/types',
 58 |         target: 'esnext',
 59 |       },
 60 |     },
 61 |   }),
 62 | 
 63 |   buble({
 64 |     transforms: {
 65 |       unicodeRegExp: false,
 66 |       dangerousForOf: true,
 67 |       dangerousTaggedTemplateString: true,
 68 |       asyncAwait: false,
 69 |     },
 70 |     objectAssign: 'Object.assign',
 71 |   }),
 72 | 
 73 |   babel({
 74 |     babelrc: false,
 75 |     extensions: ['js', 'jsx', 'ts', 'tsx'],
 76 |     presets: [],
 77 |     plugins: [
 78 |       'babel-plugin-closure-elimination',
 79 |       '@babel/plugin-transform-object-assign',
 80 |     ].filter(Boolean),
 81 |   }),
 82 | 
 83 |   compiler({
 84 |     formatting: 'PRETTY_PRINT',
 85 |     compilation_level: 'SIMPLE_OPTIMIZATIONS',
 86 |   }),
 87 | 
 88 |   terser({
 89 |     warnings: true,
 90 |     ecma: 5,
 91 |     keep_fnames: true,
 92 |     ie8: false,
 93 |     compress: {
 94 |       hoist_vars: false,
 95 |       hoist_funs: false,
 96 |       pure_getters: true,
 97 |       toplevel: true,
 98 |       booleans_as_integers: false,
 99 |       keep_fnames: true,
100 |       keep_fargs: true,
101 |       if_return: false,
102 |       ie8: false,
103 |       sequences: false,
104 |       loops: false,
105 |       conditionals: false,
106 |       join_vars: false,
107 |     },
108 |     mangle: false,
109 |     output: {
110 |       beautify: true,
111 |       braces: true,
112 |       indent_level: 2,
113 |     },
114 |   }),
115 | ];
116 | 
117 | const output = (format = 'cjs', extension = '.js') => ({
118 |   chunkFileNames: '[hash]' + extension,
119 |   entryFileNames: '[name]' + extension,
120 |   dir: './dist',
121 |   exports: 'named',
122 |   externalLiveBindings: false,
123 |   sourcemap: true,
124 |   esModule: false,
125 |   indent: false,
126 |   freeze: false,
127 |   strict: false,
128 |   format,
129 | });
130 | 
131 | export default [
132 |   {
133 |     ...config,
134 |     shimMissingExports: true,
135 |     plugins,
136 |     output: [output('esm', '.es.js'), output('cjs', '.js')],
137 |   },
138 | ];
139 | 


--------------------------------------------------------------------------------
/src/index.ts:
--------------------------------------------------------------------------------
1 | export * from './useEditable';
2 | 


--------------------------------------------------------------------------------
/src/useEditable.ts:
--------------------------------------------------------------------------------
  1 | import { useState, useLayoutEffect, useMemo } from 'react';
  2 | 
  3 | export interface Position {
  4 |   position: number;
  5 |   extent: number;
  6 |   content: string;
  7 |   line: number;
  8 | }
  9 | 
 10 | type History = [Position, string];
 11 | 
 12 | const observerSettings = {
 13 |   characterData: true,
 14 |   characterDataOldValue: true,
 15 |   childList: true,
 16 |   subtree: true,
 17 | };
 18 | 
 19 | const getCurrentRange = () => window.getSelection()!.getRangeAt(0)!;
 20 | 
 21 | const setCurrentRange = (range: Range) => {
 22 |   const selection = window.getSelection()!;
 23 |   selection.empty();
 24 |   selection.addRange(range);
 25 | };
 26 | 
 27 | const isUndoRedoKey = (event: KeyboardEvent): boolean =>
 28 |   (event.metaKey || event.ctrlKey) && !event.altKey && event.code === 'KeyZ';
 29 | 
 30 | const toString = (element: HTMLElement): string => {
 31 |   const queue: Node[] = [element.firstChild!];
 32 | 
 33 |   let content = '';
 34 |   let node: Node;
 35 |   while ((node = queue.pop()!)) {
 36 |     if (node.nodeType === Node.TEXT_NODE) {
 37 |       content += node.textContent;
 38 |     } else if (node.nodeType === Node.ELEMENT_NODE && node.nodeName === 'BR') {
 39 |       content += '\n';
 40 |     }
 41 | 
 42 |     if (node.nextSibling) queue.push(node.nextSibling);
 43 |     if (node.firstChild) queue.push(node.firstChild);
 44 |   }
 45 | 
 46 |   // contenteditable Quirk: Without plaintext-only a pre/pre-wrap element must always
 47 |   // end with at least one newline character
 48 |   if (content[content.length - 1] !== '\n') content += '\n';
 49 | 
 50 |   return content;
 51 | };
 52 | 
 53 | const setStart = (range: Range, node: Node, offset: number) => {
 54 |   if (offset < node.textContent!.length) {
 55 |     range.setStart(node, offset);
 56 |   } else {
 57 |     range.setStartAfter(node);
 58 |   }
 59 | };
 60 | 
 61 | const setEnd = (range: Range, node: Node, offset: number) => {
 62 |   if (offset < node.textContent!.length) {
 63 |     range.setEnd(node, offset);
 64 |   } else {
 65 |     range.setEndAfter(node);
 66 |   }
 67 | };
 68 | 
 69 | const getPosition = (element: HTMLElement): Position => {
 70 |   // Firefox Quirk: Since plaintext-only is unsupported the position
 71 |   // of the text here is retrieved via a range, rather than traversal
 72 |   // as seen in makeRange()
 73 |   const range = getCurrentRange();
 74 |   const extent = !range.collapsed ? range.toString().length : 0;
 75 |   const untilRange = document.createRange();
 76 |   untilRange.setStart(element, 0);
 77 |   untilRange.setEnd(range.startContainer, range.startOffset);
 78 |   let content = untilRange.toString();
 79 |   const position = content.length;
 80 |   const lines = content.split('\n');
 81 |   const line = lines.length - 1;
 82 |   content = lines[line];
 83 |   return { position, extent, content, line };
 84 | };
 85 | 
 86 | const makeRange = (
 87 |   element: HTMLElement,
 88 |   start: number,
 89 |   end?: number
 90 | ): Range => {
 91 |   if (start <= 0) start = 0;
 92 |   if (!end || end < 0) end = start;
 93 | 
 94 |   const range = document.createRange();
 95 |   const queue: Node[] = [element.firstChild!];
 96 |   let current = 0;
 97 | 
 98 |   let node: Node;
 99 |   let position = start;
100 |   while ((node = queue[queue.length - 1])) {
101 |     if (node.nodeType === Node.TEXT_NODE) {
102 |       const length = node.textContent!.length;
103 |       if (current + length >= position) {
104 |         const offset = position - current;
105 |         if (position === start) {
106 |           setStart(range, node, offset);
107 |           if (end !== start) {
108 |             position = end;
109 |             continue;
110 |           } else {
111 |             break;
112 |           }
113 |         } else {
114 |           setEnd(range, node, offset);
115 |           break;
116 |         }
117 |       }
118 | 
119 |       current += node.textContent!.length;
120 |     } else if (node.nodeType === Node.ELEMENT_NODE && node.nodeName === 'BR') {
121 |       if (current + 1 >= position) {
122 |         if (position === start) {
123 |           setStart(range, node, 0);
124 |           if (end !== start) {
125 |             position = end;
126 |             continue;
127 |           } else {
128 |             break;
129 |           }
130 |         } else {
131 |           setEnd(range, node, 0);
132 |           break;
133 |         }
134 |       }
135 | 
136 |       current++;
137 |     }
138 | 
139 |     queue.pop();
140 |     if (node.nextSibling) queue.push(node.nextSibling);
141 |     if (node.firstChild) queue.push(node.firstChild);
142 |   }
143 | 
144 |   return range;
145 | };
146 | 
147 | interface State {
148 |   observer: MutationObserver;
149 |   disconnected: boolean;
150 |   onChange(text: string, position: Position): void;
151 |   queue: MutationRecord[];
152 |   history: History[];
153 |   historyAt: number;
154 |   position: Position | null;
155 | }
156 | 
157 | export interface Options {
158 |   disabled?: boolean;
159 |   indentation?: number;
160 | }
161 | 
162 | export interface Edit {
163 |   /** Replaces the entire content of the editable while adjusting the caret position. */
164 |   update(content: string): void;
165 |   /** Inserts new text at the caret position while deleting text in range of the offset (which accepts negative offsets). */
166 |   insert(append: string, offset?: number): void;
167 |   /** Positions the caret where specified */
168 |   move(pos: number | { row: number; column: number }): void;
169 |   /** Returns the current editor state, as usually received in onChange */
170 |   getState(): { text: string; position: Position };
171 | }
172 | 
173 | export const useEditable = (
174 |   elementRef: { current: HTMLElement | undefined | null },
175 |   onChange: (text: string, position: Position) => void,
176 |   opts?: Options
177 | ): Edit => {
178 |   if (!opts) opts = {};
179 | 
180 |   const unblock = useState([])[1];
181 |   const state: State = useState(() => {
182 |     const state: State = {
183 |       observer: null as any,
184 |       disconnected: false,
185 |       onChange,
186 |       queue: [],
187 |       history: [],
188 |       historyAt: -1,
189 |       position: null,
190 |     };
191 | 
192 |     if (typeof MutationObserver !== 'undefined') {
193 |       state.observer = new MutationObserver(batch => {
194 |         state.queue.push(...batch);
195 |       });
196 |     }
197 | 
198 |     return state;
199 |   })[0];
200 | 
201 |   const edit = useMemo(
202 |     () => ({
203 |       update(content: string) {
204 |         const { current: element } = elementRef;
205 |         if (element) {
206 |           const position = getPosition(element);
207 |           const prevContent = toString(element);
208 |           position.position += content.length - prevContent.length;
209 |           state.position = position;
210 |           state.onChange(content, position);
211 |         }
212 |       },
213 |       insert(append: string, deleteOffset?: number) {
214 |         const { current: element } = elementRef;
215 |         if (element) {
216 |           let range = getCurrentRange();
217 |           range.deleteContents();
218 |           range.collapse();
219 |           const position = getPosition(element);
220 |           const offset = deleteOffset || 0;
221 |           const start = position.position + (offset < 0 ? offset : 0);
222 |           const end = position.position + (offset > 0 ? offset : 0);
223 |           range = makeRange(element, start, end);
224 |           range.deleteContents();
225 |           if (append) range.insertNode(document.createTextNode(append));
226 |           setCurrentRange(makeRange(element, start + append.length));
227 |         }
228 |       },
229 |       move(pos: number | { row: number; column: number }) {
230 |         const { current: element } = elementRef;
231 |         if (element) {
232 |           element.focus();
233 |           let position = 0;
234 |           if (typeof pos === 'number') {
235 |             position = pos;
236 |           } else {
237 |             const lines = toString(element).split('\n').slice(0, pos.row);
238 |             if (pos.row) position += lines.join('\n').length + 1;
239 |             position += pos.column;
240 |           }
241 | 
242 |           setCurrentRange(makeRange(element, position));
243 |         }
244 |       },
245 |       getState() {
246 |         const { current: element } = elementRef;
247 |         const text = toString(element!);
248 |         const position = getPosition(element!);
249 |         return { text, position };
250 |       },
251 |     }),
252 |     []
253 |   );
254 | 
255 |   // Only for SSR / server-side logic
256 |   if (typeof navigator !== 'object') return edit;
257 | 
258 |   useLayoutEffect(() => {
259 |     state.onChange = onChange;
260 | 
261 |     if (!elementRef.current || opts!.disabled) return;
262 | 
263 |     state.disconnected = false;
264 |     state.observer.observe(elementRef.current, observerSettings);
265 |     if (state.position) {
266 |       const { position, extent } = state.position;
267 |       setCurrentRange(
268 |         makeRange(elementRef.current, position, position + extent)
269 |       );
270 |     }
271 | 
272 |     return () => {
273 |       state.observer.disconnect();
274 |     };
275 |   });
276 | 
277 |   useLayoutEffect(() => {
278 |     if (!elementRef.current || opts!.disabled) {
279 |       state.history.length = 0;
280 |       state.historyAt = -1;
281 |       return;
282 |     }
283 | 
284 |     const element = elementRef.current!;
285 |     if (state.position) {
286 |       element.focus();
287 |       const { position, extent } = state.position;
288 |       setCurrentRange(makeRange(element, position, position + extent));
289 |     }
290 | 
291 |     const prevWhiteSpace = element.style.whiteSpace;
292 |     const prevContentEditable = element.contentEditable;
293 |     let hasPlaintextSupport = true;
294 |     try {
295 |       // Firefox and IE11 do not support plaintext-only mode
296 |       element.contentEditable = 'plaintext-only';
297 |     } catch (_error) {
298 |       element.contentEditable = 'true';
299 |       hasPlaintextSupport = false;
300 |     }
301 | 
302 |     if (prevWhiteSpace !== 'pre') element.style.whiteSpace = 'pre-wrap';
303 | 
304 |     if (opts!.indentation) {
305 |       element.style.tabSize = (element.style as any).MozTabSize =
306 |         '' + opts!.indentation;
307 |     }
308 | 
309 |     const indentPattern = `${' '.repeat(opts!.indentation || 0)}`;
310 |     const indentRe = new RegExp(`^(?:${indentPattern})`);
311 |     const blanklineRe = new RegExp(`^(?:${indentPattern})*(${indentPattern})$`);
312 | 
313 |     let _trackStateTimestamp: number;
314 |     const trackState = (ignoreTimestamp?: boolean) => {
315 |       if (!elementRef.current || !state.position) return;
316 | 
317 |       const content = toString(element);
318 |       const position = getPosition(element);
319 |       const timestamp = new Date().valueOf();
320 | 
321 |       // Prevent recording new state in list if last one has been new enough
322 |       const lastEntry = state.history[state.historyAt];
323 |       if (
324 |         (!ignoreTimestamp && timestamp - _trackStateTimestamp < 500) ||
325 |         (lastEntry && lastEntry[1] === content)
326 |       ) {
327 |         _trackStateTimestamp = timestamp;
328 |         return;
329 |       }
330 | 
331 |       const at = ++state.historyAt;
332 |       state.history[at] = [position, content];
333 |       state.history.splice(at + 1);
334 |       if (at > 500) {
335 |         state.historyAt--;
336 |         state.history.shift();
337 |       }
338 |     };
339 | 
340 |     const disconnect = () => {
341 |       state.observer.disconnect();
342 |       state.disconnected = true;
343 |     };
344 | 
345 |     const flushChanges = () => {
346 |       state.queue.push(...state.observer.takeRecords());
347 |       const position = getPosition(element);
348 |       if (state.queue.length) {
349 |         disconnect();
350 |         const content = toString(element);
351 |         state.position = position;
352 |         let mutation: MutationRecord | void;
353 |         let i = 0;
354 |         while ((mutation = state.queue.pop())) {
355 |           if (mutation.oldValue !== null)
356 |             mutation.target.textContent = mutation.oldValue;
357 |           for (i = mutation.removedNodes.length - 1; i >= 0; i--)
358 |             mutation.target.insertBefore(
359 |               mutation.removedNodes[i],
360 |               mutation.nextSibling
361 |             );
362 |           for (i = mutation.addedNodes.length - 1; i >= 0; i--)
363 |             if (mutation.addedNodes[i].parentNode)
364 |               mutation.target.removeChild(mutation.addedNodes[i]);
365 |         }
366 | 
367 |         state.onChange(content, position);
368 |       }
369 |     };
370 | 
371 |     const onKeyDown = (event: HTMLElementEventMap['keydown']) => {
372 |       if (event.defaultPrevented || event.target !== element) {
373 |         return;
374 |       } else if (state.disconnected) {
375 |         // React Quirk: It's expected that we may lose events while disconnected, which is why
376 |         // we'd like to block some inputs if they're unusually fast. However, this always
377 |         // coincides with React not executing the update immediately and then getting stuck,
378 |         // which can be prevented by issuing a dummy state change.
379 |         event.preventDefault();
380 |         return unblock([]);
381 |       }
382 | 
383 |       if (isUndoRedoKey(event)) {
384 |         event.preventDefault();
385 | 
386 |         let history: History;
387 |         if (!event.shiftKey) {
388 |           const at = --state.historyAt;
389 |           history = state.history[at];
390 |           if (!history) state.historyAt = 0;
391 |         } else {
392 |           const at = ++state.historyAt;
393 |           history = state.history[at];
394 |           if (!history) state.historyAt = state.history.length - 1;
395 |         }
396 | 
397 |         if (history) {
398 |           disconnect();
399 |           state.position = history[0];
400 |           state.onChange(history[1], history[0]);
401 |         }
402 |         return;
403 |       } else {
404 |         trackState();
405 |       }
406 | 
407 |       if (event.key === 'Enter') {
408 |         event.preventDefault();
409 |         // Firefox Quirk: Since plaintext-only is unsupported we must
410 |         // ensure that only newline characters are inserted
411 |         const position = getPosition(element);
412 |         // We also get the current line and preserve indentation for the next
413 |         // line that's created
414 |         const match = /\S/g.exec(position.content);
415 |         const index = match ? match.index : position.content.length;
416 |         const text = '\n' + position.content.slice(0, index);
417 |         edit.insert(text);
418 |       } else if (
419 |         (!hasPlaintextSupport || opts!.indentation) &&
420 |         event.key === 'Backspace'
421 |       ) {
422 |         // Firefox Quirk: Since plaintext-only is unsupported we must
423 |         // ensure that only a single character is deleted
424 |         event.preventDefault();
425 |         const range = getCurrentRange();
426 |         if (!range.collapsed) {
427 |           edit.insert('', 0);
428 |         } else {
429 |           const position = getPosition(element);
430 |           const match = blanklineRe.exec(position.content);
431 |           edit.insert('', match ? -match[1].length : -1);
432 |         }
433 |       } else if (opts!.indentation && event.key === 'Tab') {
434 |         event.preventDefault();
435 |         const position = getPosition(element);
436 |         const start = position.position - position.content.length;
437 |         const content = toString(element);
438 |         const newContent = event.shiftKey
439 |           ? content.slice(0, start) +
440 |             position.content.replace(indentRe, '') +
441 |             content.slice(start + position.content.length)
442 |           : content.slice(0, start) +
443 |             (opts!.indentation ? ' '.repeat(opts!.indentation) : '\t') +
444 |             content.slice(start);
445 |         edit.update(newContent);
446 |       }
447 | 
448 |       // Flush changes as a key is held so the app can catch up
449 |       if (event.repeat) flushChanges();
450 |     };
451 | 
452 |     const onKeyUp = (event: HTMLElementEventMap['keyup']) => {
453 |       if (event.defaultPrevented || event.isComposing) return;
454 |       if (!isUndoRedoKey(event)) trackState();
455 |       flushChanges();
456 |       // Chrome Quirk: The contenteditable may lose focus after the first edit or so
457 |       element.focus();
458 |     };
459 | 
460 |     const onSelect = (event: Event) => {
461 |       // Chrome Quirk: The contenteditable may lose its selection immediately on first focus
462 |       state.position =
463 |         window.getSelection()!.rangeCount && event.target === element
464 |           ? getPosition(element)
465 |           : null;
466 |     };
467 | 
468 |     const onPaste = (event: HTMLElementEventMap['paste']) => {
469 |       event.preventDefault();
470 |       trackState(true);
471 |       edit.insert(event.clipboardData!.getData('text/plain'));
472 |       trackState(true);
473 |       flushChanges();
474 |     };
475 | 
476 |     document.addEventListener('selectstart', onSelect);
477 |     window.addEventListener('keydown', onKeyDown);
478 |     element.addEventListener('paste', onPaste);
479 |     element.addEventListener('keyup', onKeyUp);
480 | 
481 |     return () => {
482 |       document.removeEventListener('selectstart', onSelect);
483 |       window.removeEventListener('keydown', onKeyDown);
484 |       element.removeEventListener('paste', onPaste);
485 |       element.removeEventListener('keyup', onKeyUp);
486 |       element.style.whiteSpace = prevWhiteSpace;
487 |       element.contentEditable = prevContentEditable;
488 |     };
489 |   }, [elementRef.current!, opts!.disabled, opts!.indentation]);
490 | 
491 |   return edit;
492 | };
493 | 


--------------------------------------------------------------------------------
/tsconfig.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "compilerOptions": {
 3 |     "baseUrl": "./",
 4 |     "esModuleInterop": true,
 5 |     "forceConsistentCasingInFileNames": true,
 6 |     "noUnusedLocals": true,
 7 |     "noEmit": true,
 8 |     "lib": ["dom", "esnext"],
 9 |     "jsx": "react",
10 |     "module": "es2015",
11 |     "moduleResolution": "node",
12 |     "target": "esnext",
13 |     "strict": true,
14 |     "noImplicitAny": false,
15 |     "noUnusedParameters": true
16 |   }
17 | }
18 | 


--------------------------------------------------------------------------------
/use-editable-Hero.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/FormidableLabs/use-editable/008a0b51a9bc7c9812fe74633b4117bd74477627/use-editable-Hero.png


--------------------------------------------------------------------------------
/yarn.lock:
--------------------------------------------------------------------------------
   1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
   2 | # yarn lockfile v1
   3 | 
   4 | 
   5 | "@ampproject/remapping@0.2.0":
   6 |   version "0.2.0"
   7 |   resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-0.2.0.tgz#07290a5c0f5eac8a4c33d38aa0d15a3416db432e"
   8 |   integrity sha512-a4EztS9/GOVQjX5Ol+Iz33TFhaXvYBF7aB6D8+Qz0/SCIxOm3UNRhGZiwcCuJ8/Ifc6NCogp3S48kc5hFxRpUw==
   9 |   dependencies:
  10 |     "@jridgewell/resolve-uri" "1.0.0"
  11 |     sourcemap-codec "1.4.8"
  12 | 
  13 | "@ampproject/rollup-plugin-closure-compiler@^0.26.0":
  14 |   version "0.26.0"
  15 |   resolved "https://registry.yarnpkg.com/@ampproject/rollup-plugin-closure-compiler/-/rollup-plugin-closure-compiler-0.26.0.tgz#69f8265e5fdbf3e26905eaaedc60cb5982bd6be0"
  16 |   integrity sha512-wuHzGE6BDhDR0L7nUPlpQDPGiGnMw+b0B+cDPG0S5TatOmFNQva8KSNdBHan3L9RbvNyYXOXicuCrZtSoBfrBg==
  17 |   dependencies:
  18 |     "@ampproject/remapping" "0.2.0"
  19 |     acorn "7.2.0"
  20 |     acorn-walk "7.1.1"
  21 |     estree-walker "2.0.1"
  22 |     google-closure-compiler "20200517.0.0"
  23 |     magic-string "0.25.7"
  24 |     uuid "8.1.0"
  25 | 
  26 | "@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4":
  27 |   version "7.10.4"
  28 |   resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.10.4.tgz#168da1a36e90da68ae8d49c0f1b48c7c6249213a"
  29 |   integrity sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==
  30 |   dependencies:
  31 |     "@babel/highlight" "^7.10.4"
  32 | 
  33 | "@babel/core@^7.11.6":
  34 |   version "7.11.6"
  35 |   resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.11.6.tgz#3a9455dc7387ff1bac45770650bc13ba04a15651"
  36 |   integrity sha512-Wpcv03AGnmkgm6uS6k8iwhIwTrcP0m17TL1n1sy7qD0qelDu4XNeW0dN0mHfa+Gei211yDaLoEe/VlbXQzM4Bg==
  37 |   dependencies:
  38 |     "@babel/code-frame" "^7.10.4"
  39 |     "@babel/generator" "^7.11.6"
  40 |     "@babel/helper-module-transforms" "^7.11.0"
  41 |     "@babel/helpers" "^7.10.4"
  42 |     "@babel/parser" "^7.11.5"
  43 |     "@babel/template" "^7.10.4"
  44 |     "@babel/traverse" "^7.11.5"
  45 |     "@babel/types" "^7.11.5"
  46 |     convert-source-map "^1.7.0"
  47 |     debug "^4.1.0"
  48 |     gensync "^1.0.0-beta.1"
  49 |     json5 "^2.1.2"
  50 |     lodash "^4.17.19"
  51 |     resolve "^1.3.2"
  52 |     semver "^5.4.1"
  53 |     source-map "^0.5.0"
  54 | 
  55 | "@babel/generator@^7.11.5", "@babel/generator@^7.11.6":
  56 |   version "7.11.6"
  57 |   resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.11.6.tgz#b868900f81b163b4d464ea24545c61cbac4dc620"
  58 |   integrity sha512-DWtQ1PV3r+cLbySoHrwn9RWEgKMBLLma4OBQloPRyDYvc5msJM9kvTLo1YnlJd1P/ZuKbdli3ijr5q3FvAF3uA==
  59 |   dependencies:
  60 |     "@babel/types" "^7.11.5"
  61 |     jsesc "^2.5.1"
  62 |     source-map "^0.5.0"
  63 | 
  64 | "@babel/helper-function-name@^7.10.4":
  65 |   version "7.10.4"
  66 |   resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz#d2d3b20c59ad8c47112fa7d2a94bc09d5ef82f1a"
  67 |   integrity sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==
  68 |   dependencies:
  69 |     "@babel/helper-get-function-arity" "^7.10.4"
  70 |     "@babel/template" "^7.10.4"
  71 |     "@babel/types" "^7.10.4"
  72 | 
  73 | "@babel/helper-get-function-arity@^7.10.4":
  74 |   version "7.10.4"
  75 |   resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz#98c1cbea0e2332f33f9a4661b8ce1505b2c19ba2"
  76 |   integrity sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==
  77 |   dependencies:
  78 |     "@babel/types" "^7.10.4"
  79 | 
  80 | "@babel/helper-member-expression-to-functions@^7.10.4":
  81 |   version "7.11.0"
  82 |   resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.11.0.tgz#ae69c83d84ee82f4b42f96e2a09410935a8f26df"
  83 |   integrity sha512-JbFlKHFntRV5qKw3YC0CvQnDZ4XMwgzzBbld7Ly4Mj4cbFy3KywcR8NtNctRToMWJOVvLINJv525Gd6wwVEx/Q==
  84 |   dependencies:
  85 |     "@babel/types" "^7.11.0"
  86 | 
  87 | "@babel/helper-module-imports@^7.0.0", "@babel/helper-module-imports@^7.10.4":
  88 |   version "7.10.4"
  89 |   resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.10.4.tgz#4c5c54be04bd31670a7382797d75b9fa2e5b5620"
  90 |   integrity sha512-nEQJHqYavI217oD9+s5MUBzk6x1IlvoS9WTPfgG43CbMEeStE0v+r+TucWdx8KFGowPGvyOkDT9+7DHedIDnVw==
  91 |   dependencies:
  92 |     "@babel/types" "^7.10.4"
  93 | 
  94 | "@babel/helper-module-transforms@^7.11.0":
  95 |   version "7.11.0"
  96 |   resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.11.0.tgz#b16f250229e47211abdd84b34b64737c2ab2d359"
  97 |   integrity sha512-02EVu8COMuTRO1TAzdMtpBPbe6aQ1w/8fePD2YgQmxZU4gpNWaL9gK3Jp7dxlkUlUCJOTaSeA+Hrm1BRQwqIhg==
  98 |   dependencies:
  99 |     "@babel/helper-module-imports" "^7.10.4"
 100 |     "@babel/helper-replace-supers" "^7.10.4"
 101 |     "@babel/helper-simple-access" "^7.10.4"
 102 |     "@babel/helper-split-export-declaration" "^7.11.0"
 103 |     "@babel/template" "^7.10.4"
 104 |     "@babel/types" "^7.11.0"
 105 |     lodash "^4.17.19"
 106 | 
 107 | "@babel/helper-optimise-call-expression@^7.10.4":
 108 |   version "7.10.4"
 109 |   resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.10.4.tgz#50dc96413d594f995a77905905b05893cd779673"
 110 |   integrity sha512-n3UGKY4VXwXThEiKrgRAoVPBMqeoPgHVqiHZOanAJCG9nQUL2pLRQirUzl0ioKclHGpGqRgIOkgcIJaIWLpygg==
 111 |   dependencies:
 112 |     "@babel/types" "^7.10.4"
 113 | 
 114 | "@babel/helper-plugin-utils@^7.10.4":
 115 |   version "7.10.4"
 116 |   resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz#2f75a831269d4f677de49986dff59927533cf375"
 117 |   integrity sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==
 118 | 
 119 | "@babel/helper-replace-supers@^7.10.4":
 120 |   version "7.10.4"
 121 |   resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.10.4.tgz#d585cd9388ea06e6031e4cd44b6713cbead9e6cf"
 122 |   integrity sha512-sPxZfFXocEymYTdVK1UNmFPBN+Hv5mJkLPsYWwGBxZAxaWfFu+xqp7b6qWD0yjNuNL2VKc6L5M18tOXUP7NU0A==
 123 |   dependencies:
 124 |     "@babel/helper-member-expression-to-functions" "^7.10.4"
 125 |     "@babel/helper-optimise-call-expression" "^7.10.4"
 126 |     "@babel/traverse" "^7.10.4"
 127 |     "@babel/types" "^7.10.4"
 128 | 
 129 | "@babel/helper-simple-access@^7.10.4":
 130 |   version "7.10.4"
 131 |   resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.10.4.tgz#0f5ccda2945277a2a7a2d3a821e15395edcf3461"
 132 |   integrity sha512-0fMy72ej/VEvF8ULmX6yb5MtHG4uH4Dbd6I/aHDb/JVg0bbivwt9Wg+h3uMvX+QSFtwr5MeItvazbrc4jtRAXw==
 133 |   dependencies:
 134 |     "@babel/template" "^7.10.4"
 135 |     "@babel/types" "^7.10.4"
 136 | 
 137 | "@babel/helper-split-export-declaration@^7.11.0":
 138 |   version "7.11.0"
 139 |   resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.11.0.tgz#f8a491244acf6a676158ac42072911ba83ad099f"
 140 |   integrity sha512-74Vejvp6mHkGE+m+k5vHY93FX2cAtrw1zXrZXRlG4l410Nm9PxfEiVTn1PjDPV5SnmieiueY4AFg2xqhNFuuZg==
 141 |   dependencies:
 142 |     "@babel/types" "^7.11.0"
 143 | 
 144 | "@babel/helper-validator-identifier@^7.10.4":
 145 |   version "7.10.4"
 146 |   resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz#a78c7a7251e01f616512d31b10adcf52ada5e0d2"
 147 |   integrity sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==
 148 | 
 149 | "@babel/helpers@^7.10.4":
 150 |   version "7.10.4"
 151 |   resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.10.4.tgz#2abeb0d721aff7c0a97376b9e1f6f65d7a475044"
 152 |   integrity sha512-L2gX/XeUONeEbI78dXSrJzGdz4GQ+ZTA/aazfUsFaWjSe95kiCuOZ5HsXvkiw3iwF+mFHSRUfJU8t6YavocdXA==
 153 |   dependencies:
 154 |     "@babel/template" "^7.10.4"
 155 |     "@babel/traverse" "^7.10.4"
 156 |     "@babel/types" "^7.10.4"
 157 | 
 158 | "@babel/highlight@^7.10.4":
 159 |   version "7.10.4"
 160 |   resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.10.4.tgz#7d1bdfd65753538fabe6c38596cdb76d9ac60143"
 161 |   integrity sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==
 162 |   dependencies:
 163 |     "@babel/helper-validator-identifier" "^7.10.4"
 164 |     chalk "^2.0.0"
 165 |     js-tokens "^4.0.0"
 166 | 
 167 | "@babel/parser@^7.10.4", "@babel/parser@^7.11.5":
 168 |   version "7.11.5"
 169 |   resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.11.5.tgz#c7ff6303df71080ec7a4f5b8c003c58f1cf51037"
 170 |   integrity sha512-X9rD8qqm695vgmeaQ4fvz/o3+Wk4ZzQvSHkDBgpYKxpD4qTAUm88ZKtHkVqIOsYFFbIQ6wQYhC6q7pjqVK0E0Q==
 171 | 
 172 | "@babel/plugin-transform-object-assign@^7.10.4":
 173 |   version "7.10.4"
 174 |   resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-assign/-/plugin-transform-object-assign-7.10.4.tgz#f7c8f54ce8052ccd8b9da9b3358848423221c338"
 175 |   integrity sha512-6zccDhYEICfMeQqIjuY5G09/yhKzG30DKHJeYBQUHIsJH7c2jXSGvgwRalufLAXAq432OSlsEfAOLlzEsQzxVw==
 176 |   dependencies:
 177 |     "@babel/helper-plugin-utils" "^7.10.4"
 178 | 
 179 | "@babel/template@^7.10.4":
 180 |   version "7.10.4"
 181 |   resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.10.4.tgz#3251996c4200ebc71d1a8fc405fba940f36ba278"
 182 |   integrity sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==
 183 |   dependencies:
 184 |     "@babel/code-frame" "^7.10.4"
 185 |     "@babel/parser" "^7.10.4"
 186 |     "@babel/types" "^7.10.4"
 187 | 
 188 | "@babel/traverse@^7.10.4", "@babel/traverse@^7.11.5":
 189 |   version "7.11.5"
 190 |   resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.11.5.tgz#be777b93b518eb6d76ee2e1ea1d143daa11e61c3"
 191 |   integrity sha512-EjiPXt+r7LiCZXEfRpSJd+jUMnBd4/9OUv7Nx3+0u9+eimMwJmG0Q98lw4/289JCoxSE8OolDMNZaaF/JZ69WQ==
 192 |   dependencies:
 193 |     "@babel/code-frame" "^7.10.4"
 194 |     "@babel/generator" "^7.11.5"
 195 |     "@babel/helper-function-name" "^7.10.4"
 196 |     "@babel/helper-split-export-declaration" "^7.11.0"
 197 |     "@babel/parser" "^7.11.5"
 198 |     "@babel/types" "^7.11.5"
 199 |     debug "^4.1.0"
 200 |     globals "^11.1.0"
 201 |     lodash "^4.17.19"
 202 | 
 203 | "@babel/types@^7.10.4", "@babel/types@^7.11.0", "@babel/types@^7.11.5":
 204 |   version "7.11.5"
 205 |   resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.11.5.tgz#d9de577d01252d77c6800cee039ee64faf75662d"
 206 |   integrity sha512-bvM7Qz6eKnJVFIn+1LPtjlBFPVN5jNDc1XmN15vWe7Q3DPBufWWsLiIvUu7xW87uTG6QoggpIDnUgLQvPheU+Q==
 207 |   dependencies:
 208 |     "@babel/helper-validator-identifier" "^7.10.4"
 209 |     lodash "^4.17.19"
 210 |     to-fast-properties "^2.0.0"
 211 | 
 212 | "@jridgewell/resolve-uri@1.0.0":
 213 |   version "1.0.0"
 214 |   resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-1.0.0.tgz#3fdf5798f0b49e90155896f6291df186eac06c83"
 215 |   integrity sha512-9oLAnygRMi8Q5QkYEU4XWK04B+nuoXoxjRvRxgjuChkLZFBja0YPSgdZ7dZtwhncLBcQe/I/E+fLuk5qxcYVJA==
 216 | 
 217 | "@rollup/plugin-buble@^0.21.3":
 218 |   version "0.21.3"
 219 |   resolved "https://registry.yarnpkg.com/@rollup/plugin-buble/-/plugin-buble-0.21.3.tgz#1649a915b1d051a4f430d40e7734a7f67a69b33e"
 220 |   integrity sha512-Iv8cCuFPnMdqV4pcyU+OrfjOfagPArRQ1PyQjx5KgHk3dARedI+8PNTLSMpJts0lQJr8yF2pAU4GxpxCBJ9HYw==
 221 |   dependencies:
 222 |     "@rollup/pluginutils" "^3.0.8"
 223 |     "@types/buble" "^0.19.2"
 224 |     buble "^0.20.0"
 225 | 
 226 | "@rollup/plugin-commonjs@^15.0.0":
 227 |   version "15.0.0"
 228 |   resolved "https://registry.yarnpkg.com/@rollup/plugin-commonjs/-/plugin-commonjs-15.0.0.tgz#690d15a9d54ba829db93555bff9b98ff34e08574"
 229 |   integrity sha512-8uAdikHqVyrT32w1zB9VhW6uGwGjhKgnDNP4pQJsjdnyF4FgCj6/bmv24c7v2CuKhq32CcyCwRzMPEElaKkn0w==
 230 |   dependencies:
 231 |     "@rollup/pluginutils" "^3.1.0"
 232 |     commondir "^1.0.1"
 233 |     estree-walker "^2.0.1"
 234 |     glob "^7.1.6"
 235 |     is-reference "^1.2.1"
 236 |     magic-string "^0.25.7"
 237 |     resolve "^1.17.0"
 238 | 
 239 | "@rollup/plugin-node-resolve@^9.0.0":
 240 |   version "9.0.0"
 241 |   resolved "https://registry.yarnpkg.com/@rollup/plugin-node-resolve/-/plugin-node-resolve-9.0.0.tgz#39bd0034ce9126b39c1699695f440b4b7d2b62e6"
 242 |   integrity sha512-gPz+utFHLRrd41WMP13Jq5mqqzHL3OXrfj3/MkSyB6UBIcuNt9j60GCbarzMzdf1VHFpOxfQh/ez7wyadLMqkg==
 243 |   dependencies:
 244 |     "@rollup/pluginutils" "^3.1.0"
 245 |     "@types/resolve" "1.17.1"
 246 |     builtin-modules "^3.1.0"
 247 |     deepmerge "^4.2.2"
 248 |     is-module "^1.0.0"
 249 |     resolve "^1.17.0"
 250 | 
 251 | "@rollup/pluginutils@^3.0.8", "@rollup/pluginutils@^3.1.0":
 252 |   version "3.1.0"
 253 |   resolved "https://registry.yarnpkg.com/@rollup/pluginutils/-/pluginutils-3.1.0.tgz#706b4524ee6dc8b103b3c995533e5ad680c02b9b"
 254 |   integrity sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==
 255 |   dependencies:
 256 |     "@types/estree" "0.0.39"
 257 |     estree-walker "^1.0.1"
 258 |     picomatch "^2.2.2"
 259 | 
 260 | "@types/buble@^0.19.2":
 261 |   version "0.19.2"
 262 |   resolved "https://registry.yarnpkg.com/@types/buble/-/buble-0.19.2.tgz#a4289d20b175b3c206aaad80caabdabe3ecdfdd1"
 263 |   integrity sha512-uUD8zIfXMKThmFkahTXDGI3CthFH1kMg2dOm3KLi4GlC5cbARA64bEcUMbbWdWdE73eoc/iBB9PiTMqH0dNS2Q==
 264 |   dependencies:
 265 |     magic-string "^0.25.0"
 266 | 
 267 | "@types/color-name@^1.1.1":
 268 |   version "1.1.1"
 269 |   resolved "https://registry.yarnpkg.com/@types/color-name/-/color-name-1.1.1.tgz#1c1261bbeaa10a8055bbc5d8ab84b7b2afc846a0"
 270 |   integrity sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==
 271 | 
 272 | "@types/estree@*":
 273 |   version "0.0.45"
 274 |   resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.45.tgz#e9387572998e5ecdac221950dab3e8c3b16af884"
 275 |   integrity sha512-jnqIUKDUqJbDIUxm0Uj7bnlMnRm1T/eZ9N+AVMqhPgzrba2GhGG5o/jCTwmdPK709nEZsGoMzXEDUjcXHa3W0g==
 276 | 
 277 | "@types/estree@0.0.39":
 278 |   version "0.0.39"
 279 |   resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.39.tgz#e177e699ee1b8c22d23174caaa7422644389509f"
 280 |   integrity sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==
 281 | 
 282 | "@types/node@*":
 283 |   version "14.11.1"
 284 |   resolved "https://registry.yarnpkg.com/@types/node/-/node-14.11.1.tgz#56af902ad157e763f9ba63d671c39cda3193c835"
 285 |   integrity sha512-oTQgnd0hblfLsJ6BvJzzSL+Inogp3lq9fGgqRkMB/ziKMgEUaFl801OncOzUmalfzt14N0oPHMK47ipl+wbTIw==
 286 | 
 287 | "@types/parse-json@^4.0.0":
 288 |   version "4.0.0"
 289 |   resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0"
 290 |   integrity sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==
 291 | 
 292 | "@types/prop-types@*":
 293 |   version "15.7.3"
 294 |   resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.3.tgz#2ab0d5da2e5815f94b0b9d4b95d1e5f243ab2ca7"
 295 |   integrity sha512-KfRL3PuHmqQLOG+2tGpRO26Ctg+Cq1E01D2DMriKEATHgWLfeNDmq9e29Q9WIky0dQ3NPkd1mzYH8Lm936Z9qw==
 296 | 
 297 | "@types/react@^16.9.49":
 298 |   version "16.9.49"
 299 |   resolved "https://registry.yarnpkg.com/@types/react/-/react-16.9.49.tgz#09db021cf8089aba0cdb12a49f8021a69cce4872"
 300 |   integrity sha512-DtLFjSj0OYAdVLBbyjhuV9CdGVHCkHn2R+xr3XkBvK2rS1Y1tkc14XSGjYgm5Fjjr90AxH9tiSzc1pCFMGO06g==
 301 |   dependencies:
 302 |     "@types/prop-types" "*"
 303 |     csstype "^3.0.2"
 304 | 
 305 | "@types/resolve@1.17.1":
 306 |   version "1.17.1"
 307 |   resolved "https://registry.yarnpkg.com/@types/resolve/-/resolve-1.17.1.tgz#3afd6ad8967c77e4376c598a82ddd58f46ec45d6"
 308 |   integrity sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==
 309 |   dependencies:
 310 |     "@types/node" "*"
 311 | 
 312 | acorn-dynamic-import@^4.0.0:
 313 |   version "4.0.0"
 314 |   resolved "https://registry.yarnpkg.com/acorn-dynamic-import/-/acorn-dynamic-import-4.0.0.tgz#482210140582a36b83c3e342e1cfebcaa9240948"
 315 |   integrity sha512-d3OEjQV4ROpoflsnUA8HozoIR504TFxNivYEUi6uwz0IYhBkTDXGuWlNdMtybRt3nqVx/L6XqMt0FxkXuWKZhw==
 316 | 
 317 | acorn-jsx@^5.2.0:
 318 |   version "5.3.1"
 319 |   resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.1.tgz#fc8661e11b7ac1539c47dbfea2e72b3af34d267b"
 320 |   integrity sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng==
 321 | 
 322 | acorn-walk@7.1.1:
 323 |   version "7.1.1"
 324 |   resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-7.1.1.tgz#345f0dffad5c735e7373d2fec9a1023e6a44b83e"
 325 |   integrity sha512-wdlPY2tm/9XBr7QkKlq0WQVgiuGTX6YWPyRyBviSoScBuLfTVQhvwg6wJ369GJ/1nPfTLMfnrFIfjqVg6d+jQQ==
 326 | 
 327 | acorn@7.2.0:
 328 |   version "7.2.0"
 329 |   resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.2.0.tgz#17ea7e40d7c8640ff54a694c889c26f31704effe"
 330 |   integrity sha512-apwXVmYVpQ34m/i71vrApRrRKCWQnZZF1+npOD0WV5xZFfwWOmKGQ2RWlfdy9vWITsenisM8M0Qeq8agcFHNiQ==
 331 | 
 332 | acorn@^6.4.1:
 333 |   version "6.4.1"
 334 |   resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.1.tgz#531e58ba3f51b9dacb9a6646ca4debf5b14ca474"
 335 |   integrity sha512-ZVA9k326Nwrj3Cj9jlh3wGFutC2ZornPNARZwsNYqQYgN0EsV2d53w5RN/co65Ohn4sUAUtb1rSUAOD6XN9idA==
 336 | 
 337 | aggregate-error@^3.0.0:
 338 |   version "3.1.0"
 339 |   resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a"
 340 |   integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==
 341 |   dependencies:
 342 |     clean-stack "^2.0.0"
 343 |     indent-string "^4.0.0"
 344 | 
 345 | ansi-colors@^4.1.1:
 346 |   version "4.1.1"
 347 |   resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348"
 348 |   integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==
 349 | 
 350 | ansi-escapes@^4.3.0:
 351 |   version "4.3.1"
 352 |   resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.1.tgz#a5c47cc43181f1f38ffd7076837700d395522a61"
 353 |   integrity sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA==
 354 |   dependencies:
 355 |     type-fest "^0.11.0"
 356 | 
 357 | ansi-regex@^5.0.0:
 358 |   version "5.0.0"
 359 |   resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75"
 360 |   integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==
 361 | 
 362 | ansi-styles@^3.2.1:
 363 |   version "3.2.1"
 364 |   resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d"
 365 |   integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==
 366 |   dependencies:
 367 |     color-convert "^1.9.0"
 368 | 
 369 | ansi-styles@^4.0.0, ansi-styles@^4.1.0:
 370 |   version "4.2.1"
 371 |   resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.2.1.tgz#90ae75c424d008d2624c5bf29ead3177ebfcf359"
 372 |   integrity sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==
 373 |   dependencies:
 374 |     "@types/color-name" "^1.1.1"
 375 |     color-convert "^2.0.1"
 376 | 
 377 | astral-regex@^2.0.0:
 378 |   version "2.0.0"
 379 |   resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31"
 380 |   integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==
 381 | 
 382 | babel-plugin-closure-elimination@^1.3.2:
 383 |   version "1.3.2"
 384 |   resolved "https://registry.yarnpkg.com/babel-plugin-closure-elimination/-/babel-plugin-closure-elimination-1.3.2.tgz#2c9a90360bdf888fd3b3694391a745a70ce18c34"
 385 |   integrity sha512-GJnezbVp5ejiwh74fXJPznsrrWHR9bTuJV20FhXivbgEtg1WyNG/9KaDyHEpfU7G9iB6Gy+F2UffYLZ7DJh+Jw==
 386 | 
 387 | balanced-match@^1.0.0:
 388 |   version "1.0.0"
 389 |   resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767"
 390 |   integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c=
 391 | 
 392 | brace-expansion@^1.1.7:
 393 |   version "1.1.11"
 394 |   resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd"
 395 |   integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==
 396 |   dependencies:
 397 |     balanced-match "^1.0.0"
 398 |     concat-map "0.0.1"
 399 | 
 400 | braces@^3.0.1:
 401 |   version "3.0.2"
 402 |   resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107"
 403 |   integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==
 404 |   dependencies:
 405 |     fill-range "^7.0.1"
 406 | 
 407 | buble@^0.20.0:
 408 |   version "0.20.0"
 409 |   resolved "https://registry.yarnpkg.com/buble/-/buble-0.20.0.tgz#a143979a8d968b7f76b57f38f2e7ce7cfe938d1f"
 410 |   integrity sha512-/1gnaMQE8xvd5qsNBl+iTuyjJ9XxeaVxAMF86dQ4EyxFJOZtsgOS8Ra+7WHgZTam5IFDtt4BguN0sH0tVTKrOw==
 411 |   dependencies:
 412 |     acorn "^6.4.1"
 413 |     acorn-dynamic-import "^4.0.0"
 414 |     acorn-jsx "^5.2.0"
 415 |     chalk "^2.4.2"
 416 |     magic-string "^0.25.7"
 417 |     minimist "^1.2.5"
 418 |     regexpu-core "4.5.4"
 419 | 
 420 | buffer-from@^1.0.0:
 421 |   version "1.1.1"
 422 |   resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef"
 423 |   integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==
 424 | 
 425 | builtin-modules@^3.1.0:
 426 |   version "3.1.0"
 427 |   resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-3.1.0.tgz#aad97c15131eb76b65b50ef208e7584cd76a7484"
 428 |   integrity sha512-k0KL0aWZuBt2lrxrcASWDfwOLMnodeQjodT/1SxEQAXsHANgo6ZC/VEaSEHCXt7aSTZ4/4H5LKa+tBXmW7Vtvw==
 429 | 
 430 | callsites@^3.0.0:
 431 |   version "3.1.0"
 432 |   resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73"
 433 |   integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==
 434 | 
 435 | chalk@2.x, chalk@^2.0.0, chalk@^2.4.1, chalk@^2.4.2:
 436 |   version "2.4.2"
 437 |   resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424"
 438 |   integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==
 439 |   dependencies:
 440 |     ansi-styles "^3.2.1"
 441 |     escape-string-regexp "^1.0.5"
 442 |     supports-color "^5.3.0"
 443 | 
 444 | chalk@^4.0.0, chalk@^4.1.0:
 445 |   version "4.1.0"
 446 |   resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.0.tgz#4e14870a618d9e2edd97dd8345fd9d9dc315646a"
 447 |   integrity sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==
 448 |   dependencies:
 449 |     ansi-styles "^4.1.0"
 450 |     supports-color "^7.1.0"
 451 | 
 452 | ci-info@^2.0.0:
 453 |   version "2.0.0"
 454 |   resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46"
 455 |   integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==
 456 | 
 457 | clean-stack@^2.0.0:
 458 |   version "2.2.0"
 459 |   resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b"
 460 |   integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==
 461 | 
 462 | cli-cursor@^3.1.0:
 463 |   version "3.1.0"
 464 |   resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307"
 465 |   integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==
 466 |   dependencies:
 467 |     restore-cursor "^3.1.0"
 468 | 
 469 | cli-truncate@^2.1.0:
 470 |   version "2.1.0"
 471 |   resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-2.1.0.tgz#c39e28bf05edcde5be3b98992a22deed5a2b93c7"
 472 |   integrity sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==
 473 |   dependencies:
 474 |     slice-ansi "^3.0.0"
 475 |     string-width "^4.2.0"
 476 | 
 477 | clone-buffer@^1.0.0:
 478 |   version "1.0.0"
 479 |   resolved "https://registry.yarnpkg.com/clone-buffer/-/clone-buffer-1.0.0.tgz#e3e25b207ac4e701af721e2cb5a16792cac3dc58"
 480 |   integrity sha1-4+JbIHrE5wGvch4staFnksrD3Fg=
 481 | 
 482 | clone-stats@^1.0.0:
 483 |   version "1.0.0"
 484 |   resolved "https://registry.yarnpkg.com/clone-stats/-/clone-stats-1.0.0.tgz#b3782dff8bb5474e18b9b6bf0fdfe782f8777680"
 485 |   integrity sha1-s3gt/4u1R04Yuba/D9/ngvh3doA=
 486 | 
 487 | clone@^2.1.1:
 488 |   version "2.1.2"
 489 |   resolved "https://registry.yarnpkg.com/clone/-/clone-2.1.2.tgz#1b7f4b9f591f1e8f83670401600345a02887435f"
 490 |   integrity sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=
 491 | 
 492 | cloneable-readable@^1.0.0:
 493 |   version "1.1.3"
 494 |   resolved "https://registry.yarnpkg.com/cloneable-readable/-/cloneable-readable-1.1.3.tgz#120a00cb053bfb63a222e709f9683ea2e11d8cec"
 495 |   integrity sha512-2EF8zTQOxYq70Y4XKtorQupqF0m49MBz2/yf5Bj+MHjvpG3Hy7sImifnqD6UA+TKYxeSV+u6qqQPawN5UvnpKQ==
 496 |   dependencies:
 497 |     inherits "^2.0.1"
 498 |     process-nextick-args "^2.0.0"
 499 |     readable-stream "^2.3.5"
 500 | 
 501 | color-convert@^1.9.0:
 502 |   version "1.9.3"
 503 |   resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8"
 504 |   integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==
 505 |   dependencies:
 506 |     color-name "1.1.3"
 507 | 
 508 | color-convert@^2.0.1:
 509 |   version "2.0.1"
 510 |   resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3"
 511 |   integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==
 512 |   dependencies:
 513 |     color-name "~1.1.4"
 514 | 
 515 | color-name@1.1.3:
 516 |   version "1.1.3"
 517 |   resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25"
 518 |   integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=
 519 | 
 520 | color-name@~1.1.4:
 521 |   version "1.1.4"
 522 |   resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2"
 523 |   integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==
 524 | 
 525 | commander@^2.20.0:
 526 |   version "2.20.3"
 527 |   resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33"
 528 |   integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==
 529 | 
 530 | commander@^6.0.0:
 531 |   version "6.1.0"
 532 |   resolved "https://registry.yarnpkg.com/commander/-/commander-6.1.0.tgz#f8d722b78103141006b66f4c7ba1e97315ba75bc"
 533 |   integrity sha512-wl7PNrYWd2y5mp1OK/LhTlv8Ff4kQJQRXXAvF+uU/TPNiVJUxZLRYGj/B0y/lPGAVcSbJqH2Za/cvHmrPMC8mA==
 534 | 
 535 | commondir@^1.0.1:
 536 |   version "1.0.1"
 537 |   resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b"
 538 |   integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=
 539 | 
 540 | compare-versions@^3.6.0:
 541 |   version "3.6.0"
 542 |   resolved "https://registry.yarnpkg.com/compare-versions/-/compare-versions-3.6.0.tgz#1a5689913685e5a87637b8d3ffca75514ec41d62"
 543 |   integrity sha512-W6Af2Iw1z4CB7q4uU4hv646dW9GQuBM+YpC0UvUCWSD8w90SJjp+ujJuXaEMtAXBtSqGfMPuFOVn4/+FlaqfBA==
 544 | 
 545 | concat-map@0.0.1:
 546 |   version "0.0.1"
 547 |   resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
 548 |   integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=
 549 | 
 550 | convert-source-map@^1.7.0:
 551 |   version "1.7.0"
 552 |   resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.7.0.tgz#17a2cb882d7f77d3490585e2ce6c524424a3a442"
 553 |   integrity sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==
 554 |   dependencies:
 555 |     safe-buffer "~5.1.1"
 556 | 
 557 | core-util-is@~1.0.0:
 558 |   version "1.0.2"
 559 |   resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"
 560 |   integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=
 561 | 
 562 | cosmiconfig@^7.0.0:
 563 |   version "7.0.0"
 564 |   resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-7.0.0.tgz#ef9b44d773959cae63ddecd122de23853b60f8d3"
 565 |   integrity sha512-pondGvTuVYDk++upghXJabWzL6Kxu6f26ljFw64Swq9v6sQPUL3EUlVDV56diOjpCayKihL6hVe8exIACU4XcA==
 566 |   dependencies:
 567 |     "@types/parse-json" "^4.0.0"
 568 |     import-fresh "^3.2.1"
 569 |     parse-json "^5.0.0"
 570 |     path-type "^4.0.0"
 571 |     yaml "^1.10.0"
 572 | 
 573 | cross-spawn@^6.0.5:
 574 |   version "6.0.5"
 575 |   resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4"
 576 |   integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==
 577 |   dependencies:
 578 |     nice-try "^1.0.4"
 579 |     path-key "^2.0.1"
 580 |     semver "^5.5.0"
 581 |     shebang-command "^1.2.0"
 582 |     which "^1.2.9"
 583 | 
 584 | cross-spawn@^7.0.0:
 585 |   version "7.0.3"
 586 |   resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6"
 587 |   integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==
 588 |   dependencies:
 589 |     path-key "^3.1.0"
 590 |     shebang-command "^2.0.0"
 591 |     which "^2.0.1"
 592 | 
 593 | csstype@^3.0.2:
 594 |   version "3.0.3"
 595 |   resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.0.3.tgz#2b410bbeba38ba9633353aff34b05d9755d065f8"
 596 |   integrity sha512-jPl+wbWPOWJ7SXsWyqGRk3lGecbar0Cb0OvZF/r/ZU011R4YqiRehgkQ9p4eQfo9DSDLqLL3wHwfxeJiuIsNag==
 597 | 
 598 | debug@^4.1.0, debug@^4.1.1:
 599 |   version "4.2.0"
 600 |   resolved "https://registry.yarnpkg.com/debug/-/debug-4.2.0.tgz#7f150f93920e94c58f5574c2fd01a3110effe7f1"
 601 |   integrity sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg==
 602 |   dependencies:
 603 |     ms "2.1.2"
 604 | 
 605 | dedent@^0.7.0:
 606 |   version "0.7.0"
 607 |   resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c"
 608 |   integrity sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw=
 609 | 
 610 | deepmerge@^4.2.2:
 611 |   version "4.2.2"
 612 |   resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.2.2.tgz#44d2ea3679b8f4d4ffba33f03d865fc1e7bf4955"
 613 |   integrity sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==
 614 | 
 615 | define-properties@^1.1.3:
 616 |   version "1.1.3"
 617 |   resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1"
 618 |   integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==
 619 |   dependencies:
 620 |     object-keys "^1.0.12"
 621 | 
 622 | emoji-regex@^8.0.0:
 623 |   version "8.0.0"
 624 |   resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37"
 625 |   integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==
 626 | 
 627 | end-of-stream@^1.1.0:
 628 |   version "1.4.4"
 629 |   resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0"
 630 |   integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==
 631 |   dependencies:
 632 |     once "^1.4.0"
 633 | 
 634 | enquirer@^2.3.6:
 635 |   version "2.3.6"
 636 |   resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d"
 637 |   integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==
 638 |   dependencies:
 639 |     ansi-colors "^4.1.1"
 640 | 
 641 | error-ex@^1.3.1:
 642 |   version "1.3.2"
 643 |   resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf"
 644 |   integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==
 645 |   dependencies:
 646 |     is-arrayish "^0.2.1"
 647 | 
 648 | es-abstract@^1.17.0-next.1, es-abstract@^1.17.5:
 649 |   version "1.17.6"
 650 |   resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.17.6.tgz#9142071707857b2cacc7b89ecb670316c3e2d52a"
 651 |   integrity sha512-Fr89bON3WFyUi5EvAeI48QTWX0AyekGgLA8H+c+7fbfCkJwRWRMLd8CQedNEyJuoYYhmtEqY92pgte1FAhBlhw==
 652 |   dependencies:
 653 |     es-to-primitive "^1.2.1"
 654 |     function-bind "^1.1.1"
 655 |     has "^1.0.3"
 656 |     has-symbols "^1.0.1"
 657 |     is-callable "^1.2.0"
 658 |     is-regex "^1.1.0"
 659 |     object-inspect "^1.7.0"
 660 |     object-keys "^1.1.1"
 661 |     object.assign "^4.1.0"
 662 |     string.prototype.trimend "^1.0.1"
 663 |     string.prototype.trimstart "^1.0.1"
 664 | 
 665 | es-abstract@^1.18.0-next.0:
 666 |   version "1.18.0-next.0"
 667 |   resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.18.0-next.0.tgz#b302834927e624d8e5837ed48224291f2c66e6fc"
 668 |   integrity sha512-elZXTZXKn51hUBdJjSZGYRujuzilgXo8vSPQzjGYXLvSlGiCo8VO8ZGV3kjo9a0WNJJ57hENagwbtlRuHuzkcQ==
 669 |   dependencies:
 670 |     es-to-primitive "^1.2.1"
 671 |     function-bind "^1.1.1"
 672 |     has "^1.0.3"
 673 |     has-symbols "^1.0.1"
 674 |     is-callable "^1.2.0"
 675 |     is-negative-zero "^2.0.0"
 676 |     is-regex "^1.1.1"
 677 |     object-inspect "^1.8.0"
 678 |     object-keys "^1.1.1"
 679 |     object.assign "^4.1.0"
 680 |     string.prototype.trimend "^1.0.1"
 681 |     string.prototype.trimstart "^1.0.1"
 682 | 
 683 | es-to-primitive@^1.2.1:
 684 |   version "1.2.1"
 685 |   resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a"
 686 |   integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==
 687 |   dependencies:
 688 |     is-callable "^1.1.4"
 689 |     is-date-object "^1.0.1"
 690 |     is-symbol "^1.0.2"
 691 | 
 692 | escape-string-regexp@^1.0.5:
 693 |   version "1.0.5"
 694 |   resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
 695 |   integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=
 696 | 
 697 | estree-walker@2.0.1, estree-walker@^2.0.1:
 698 |   version "2.0.1"
 699 |   resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-2.0.1.tgz#f8e030fb21cefa183b44b7ad516b747434e7a3e0"
 700 |   integrity sha512-tF0hv+Yi2Ot1cwj9eYHtxC0jB9bmjacjQs6ZBTj82H8JwUywFuc+7E83NWfNMwHXZc11mjfFcVXPe9gEP4B8dg==
 701 | 
 702 | estree-walker@^0.6.1:
 703 |   version "0.6.1"
 704 |   resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-0.6.1.tgz#53049143f40c6eb918b23671d1fe3219f3a1b362"
 705 |   integrity sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==
 706 | 
 707 | estree-walker@^1.0.1:
 708 |   version "1.0.1"
 709 |   resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-1.0.1.tgz#31bc5d612c96b704106b477e6dd5d8aa138cb700"
 710 |   integrity sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==
 711 | 
 712 | execa@^4.0.3:
 713 |   version "4.0.3"
 714 |   resolved "https://registry.yarnpkg.com/execa/-/execa-4.0.3.tgz#0a34dabbad6d66100bd6f2c576c8669403f317f2"
 715 |   integrity sha512-WFDXGHckXPWZX19t1kCsXzOpqX9LWYNqn4C+HqZlk/V0imTkzJZqf87ZBhvpHaftERYknpk0fjSylnXVlVgI0A==
 716 |   dependencies:
 717 |     cross-spawn "^7.0.0"
 718 |     get-stream "^5.0.0"
 719 |     human-signals "^1.1.1"
 720 |     is-stream "^2.0.0"
 721 |     merge-stream "^2.0.0"
 722 |     npm-run-path "^4.0.0"
 723 |     onetime "^5.1.0"
 724 |     signal-exit "^3.0.2"
 725 |     strip-final-newline "^2.0.0"
 726 | 
 727 | figures@^3.2.0:
 728 |   version "3.2.0"
 729 |   resolved "https://registry.yarnpkg.com/figures/-/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af"
 730 |   integrity sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==
 731 |   dependencies:
 732 |     escape-string-regexp "^1.0.5"
 733 | 
 734 | fill-range@^7.0.1:
 735 |   version "7.0.1"
 736 |   resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40"
 737 |   integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==
 738 |   dependencies:
 739 |     to-regex-range "^5.0.1"
 740 | 
 741 | find-cache-dir@^3.3.1:
 742 |   version "3.3.1"
 743 |   resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-3.3.1.tgz#89b33fad4a4670daa94f855f7fbe31d6d84fe880"
 744 |   integrity sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ==
 745 |   dependencies:
 746 |     commondir "^1.0.1"
 747 |     make-dir "^3.0.2"
 748 |     pkg-dir "^4.1.0"
 749 | 
 750 | find-up@^4.0.0:
 751 |   version "4.1.0"
 752 |   resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19"
 753 |   integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==
 754 |   dependencies:
 755 |     locate-path "^5.0.0"
 756 |     path-exists "^4.0.0"
 757 | 
 758 | find-versions@^3.2.0:
 759 |   version "3.2.0"
 760 |   resolved "https://registry.yarnpkg.com/find-versions/-/find-versions-3.2.0.tgz#10297f98030a786829681690545ef659ed1d254e"
 761 |   integrity sha512-P8WRou2S+oe222TOCHitLy8zj+SIsVJh52VP4lvXkaFVnOFFdoWv1H1Jjvel1aI6NCFOAaeAVm8qrI0odiLcww==
 762 |   dependencies:
 763 |     semver-regex "^2.0.0"
 764 | 
 765 | fs-extra@8.1.0:
 766 |   version "8.1.0"
 767 |   resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0"
 768 |   integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==
 769 |   dependencies:
 770 |     graceful-fs "^4.2.0"
 771 |     jsonfile "^4.0.0"
 772 |     universalify "^0.1.0"
 773 | 
 774 | fs.realpath@^1.0.0:
 775 |   version "1.0.0"
 776 |   resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
 777 |   integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8=
 778 | 
 779 | fsevents@~2.1.2:
 780 |   version "2.1.3"
 781 |   resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.1.3.tgz#fb738703ae8d2f9fe900c33836ddebee8b97f23e"
 782 |   integrity sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==
 783 | 
 784 | function-bind@^1.1.1:
 785 |   version "1.1.1"
 786 |   resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d"
 787 |   integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==
 788 | 
 789 | gensync@^1.0.0-beta.1:
 790 |   version "1.0.0-beta.1"
 791 |   resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.1.tgz#58f4361ff987e5ff6e1e7a210827aa371eaac269"
 792 |   integrity sha512-r8EC6NO1sngH/zdD9fiRDLdcgnbayXah+mLgManTaIZJqEC1MZstmnox8KpnI2/fxQwrp5OpCOYWLp4rBl4Jcg==
 793 | 
 794 | get-own-enumerable-property-symbols@^3.0.0:
 795 |   version "3.0.2"
 796 |   resolved "https://registry.yarnpkg.com/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz#b5fde77f22cbe35f390b4e089922c50bce6ef664"
 797 |   integrity sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==
 798 | 
 799 | get-stream@^5.0.0:
 800 |   version "5.2.0"
 801 |   resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3"
 802 |   integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==
 803 |   dependencies:
 804 |     pump "^3.0.0"
 805 | 
 806 | glob@^7.1.6:
 807 |   version "7.1.6"
 808 |   resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6"
 809 |   integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==
 810 |   dependencies:
 811 |     fs.realpath "^1.0.0"
 812 |     inflight "^1.0.4"
 813 |     inherits "2"
 814 |     minimatch "^3.0.4"
 815 |     once "^1.3.0"
 816 |     path-is-absolute "^1.0.0"
 817 | 
 818 | globals@^11.1.0:
 819 |   version "11.12.0"
 820 |   resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e"
 821 |   integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==
 822 | 
 823 | google-closure-compiler-java@^20200517.0.0:
 824 |   version "20200517.0.0"
 825 |   resolved "https://registry.yarnpkg.com/google-closure-compiler-java/-/google-closure-compiler-java-20200517.0.0.tgz#778370c22273c9085f4cf959ce063f8f112c02ac"
 826 |   integrity sha512-JVZBiyyXwcYi6Yc3lO6dF2hMLJA4OzPm4/mgsem/tF1vk2HsWTnL3GTaBsPB2ENVZp0hoqsd4KgpPiG9ssNWxw==
 827 | 
 828 | google-closure-compiler-js@^20200517.0.0:
 829 |   version "20200517.0.0"
 830 |   resolved "https://registry.yarnpkg.com/google-closure-compiler-js/-/google-closure-compiler-js-20200517.0.0.tgz#9cb0861f764073d1c4d3b7453b74073ccb1ecfb1"
 831 |   integrity sha512-dz6dOUHx5nhdIqMRXacAYS8aJfLvw4IKxGg28Hq/zeeDPHlX3P3iBK20NgFDfT8zdushThymtMqChSy7C5eyfA==
 832 | 
 833 | google-closure-compiler-linux@^20200517.0.0:
 834 |   version "20200517.0.0"
 835 |   resolved "https://registry.yarnpkg.com/google-closure-compiler-linux/-/google-closure-compiler-linux-20200517.0.0.tgz#2b9ecb634130060174aff5c52329a694ea4be68b"
 836 |   integrity sha512-S5xPh6TtP+ESzZrmQLcDDqtZAsCVTbdI4VS98wQlN6IMZTd94nAnOCg9mrxQNAgop2t4sdsv/KuH0BGPUWEZ+w==
 837 | 
 838 | google-closure-compiler-osx@^20200517.0.0:
 839 |   version "20200517.0.0"
 840 |   resolved "https://registry.yarnpkg.com/google-closure-compiler-osx/-/google-closure-compiler-osx-20200517.0.0.tgz#9394e9a2fd97e3729fc3bd2abcffff6aab2cfcaa"
 841 |   integrity sha512-FWIcsKqLllLjdOBZd7azijVaObydgRd0obVNi63eUfC5MX6T4qxKumGCyor2UCNY6by2ESz+PlGqCFzFhZ6b2g==
 842 | 
 843 | google-closure-compiler-windows@^20200517.0.0:
 844 |   version "20200517.0.0"
 845 |   resolved "https://registry.yarnpkg.com/google-closure-compiler-windows/-/google-closure-compiler-windows-20200517.0.0.tgz#c5cdde438c29458666a83358567b12072924ed6c"
 846 |   integrity sha512-UXhjRGwS8deTkRla/riyVq3psscgMuw78lepEPtq5NgbumgJzY2+IQP9q+4MVOfJW58Rv0JUWKAFOnBBSZWcAQ==
 847 | 
 848 | google-closure-compiler@20200517.0.0:
 849 |   version "20200517.0.0"
 850 |   resolved "https://registry.yarnpkg.com/google-closure-compiler/-/google-closure-compiler-20200517.0.0.tgz#6c47f99fc1be59bd4f9e23c5a8f2e66d64b54143"
 851 |   integrity sha512-80W9zBS9Ajk1T5InWCfsoPohDmo5T1AAyw1rHh5+dgb/jPgwC65KhY+oJozTncf+/7tyQHJXozTARwhSlBUcMg==
 852 |   dependencies:
 853 |     chalk "2.x"
 854 |     google-closure-compiler-java "^20200517.0.0"
 855 |     google-closure-compiler-js "^20200517.0.0"
 856 |     minimist "1.x"
 857 |     vinyl "2.x"
 858 |     vinyl-sourcemaps-apply "^0.2.0"
 859 |   optionalDependencies:
 860 |     google-closure-compiler-linux "^20200517.0.0"
 861 |     google-closure-compiler-osx "^20200517.0.0"
 862 |     google-closure-compiler-windows "^20200517.0.0"
 863 | 
 864 | graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0:
 865 |   version "4.2.4"
 866 |   resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb"
 867 |   integrity sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==
 868 | 
 869 | has-flag@^3.0.0:
 870 |   version "3.0.0"
 871 |   resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd"
 872 |   integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0=
 873 | 
 874 | has-flag@^4.0.0:
 875 |   version "4.0.0"
 876 |   resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b"
 877 |   integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==
 878 | 
 879 | has-symbols@^1.0.1:
 880 |   version "1.0.1"
 881 |   resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.1.tgz#9f5214758a44196c406d9bd76cebf81ec2dd31e8"
 882 |   integrity sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==
 883 | 
 884 | has@^1.0.3:
 885 |   version "1.0.3"
 886 |   resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796"
 887 |   integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==
 888 |   dependencies:
 889 |     function-bind "^1.1.1"
 890 | 
 891 | hosted-git-info@^2.1.4:
 892 |   version "2.8.8"
 893 |   resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.8.tgz#7539bd4bc1e0e0a895815a2e0262420b12858488"
 894 |   integrity sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg==
 895 | 
 896 | human-signals@^1.1.1:
 897 |   version "1.1.1"
 898 |   resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-1.1.1.tgz#c5b1cd14f50aeae09ab6c59fe63ba3395fe4dfa3"
 899 |   integrity sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==
 900 | 
 901 | husky@^4.3.0:
 902 |   version "4.3.0"
 903 |   resolved "https://registry.yarnpkg.com/husky/-/husky-4.3.0.tgz#0b2ec1d66424e9219d359e26a51c58ec5278f0de"
 904 |   integrity sha512-tTMeLCLqSBqnflBZnlVDhpaIMucSGaYyX6855jM4AguGeWCeSzNdb1mfyWduTZ3pe3SJVvVWGL0jO1iKZVPfTA==
 905 |   dependencies:
 906 |     chalk "^4.0.0"
 907 |     ci-info "^2.0.0"
 908 |     compare-versions "^3.6.0"
 909 |     cosmiconfig "^7.0.0"
 910 |     find-versions "^3.2.0"
 911 |     opencollective-postinstall "^2.0.2"
 912 |     pkg-dir "^4.2.0"
 913 |     please-upgrade-node "^3.2.0"
 914 |     slash "^3.0.0"
 915 |     which-pm-runs "^1.0.0"
 916 | 
 917 | import-fresh@^3.2.1:
 918 |   version "3.2.1"
 919 |   resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.2.1.tgz#633ff618506e793af5ac91bf48b72677e15cbe66"
 920 |   integrity sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ==
 921 |   dependencies:
 922 |     parent-module "^1.0.0"
 923 |     resolve-from "^4.0.0"
 924 | 
 925 | indent-string@^4.0.0:
 926 |   version "4.0.0"
 927 |   resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251"
 928 |   integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==
 929 | 
 930 | inflight@^1.0.4:
 931 |   version "1.0.6"
 932 |   resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
 933 |   integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=
 934 |   dependencies:
 935 |     once "^1.3.0"
 936 |     wrappy "1"
 937 | 
 938 | inherits@2, inherits@^2.0.1, inherits@~2.0.3:
 939 |   version "2.0.4"
 940 |   resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
 941 |   integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
 942 | 
 943 | is-arrayish@^0.2.1:
 944 |   version "0.2.1"
 945 |   resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d"
 946 |   integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=
 947 | 
 948 | is-callable@^1.1.4, is-callable@^1.2.0:
 949 |   version "1.2.1"
 950 |   resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.1.tgz#4d1e21a4f437509d25ce55f8184350771421c96d"
 951 |   integrity sha512-wliAfSzx6V+6WfMOmus1xy0XvSgf/dlStkvTfq7F0g4bOIW0PSUbnyse3NhDwdyYS1ozfUtAAySqTws3z9Eqgg==
 952 | 
 953 | is-date-object@^1.0.1:
 954 |   version "1.0.2"
 955 |   resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.2.tgz#bda736f2cd8fd06d32844e7743bfa7494c3bfd7e"
 956 |   integrity sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==
 957 | 
 958 | is-fullwidth-code-point@^3.0.0:
 959 |   version "3.0.0"
 960 |   resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d"
 961 |   integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==
 962 | 
 963 | is-module@^1.0.0:
 964 |   version "1.0.0"
 965 |   resolved "https://registry.yarnpkg.com/is-module/-/is-module-1.0.0.tgz#3258fb69f78c14d5b815d664336b4cffb6441591"
 966 |   integrity sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE=
 967 | 
 968 | is-negative-zero@^2.0.0:
 969 |   version "2.0.0"
 970 |   resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.0.tgz#9553b121b0fac28869da9ed459e20c7543788461"
 971 |   integrity sha1-lVOxIbD6wohp2p7UWeIMdUN4hGE=
 972 | 
 973 | is-number@^7.0.0:
 974 |   version "7.0.0"
 975 |   resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b"
 976 |   integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==
 977 | 
 978 | is-obj@^1.0.1:
 979 |   version "1.0.1"
 980 |   resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f"
 981 |   integrity sha1-PkcprB9f3gJc19g6iW2rn09n2w8=
 982 | 
 983 | is-reference@^1.2.1:
 984 |   version "1.2.1"
 985 |   resolved "https://registry.yarnpkg.com/is-reference/-/is-reference-1.2.1.tgz#8b2dac0b371f4bc994fdeaba9eb542d03002d0b7"
 986 |   integrity sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==
 987 |   dependencies:
 988 |     "@types/estree" "*"
 989 | 
 990 | is-regex@^1.1.0, is-regex@^1.1.1:
 991 |   version "1.1.1"
 992 |   resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.1.tgz#c6f98aacc546f6cec5468a07b7b153ab564a57b9"
 993 |   integrity sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg==
 994 |   dependencies:
 995 |     has-symbols "^1.0.1"
 996 | 
 997 | is-regexp@^1.0.0:
 998 |   version "1.0.0"
 999 |   resolved "https://registry.yarnpkg.com/is-regexp/-/is-regexp-1.0.0.tgz#fd2d883545c46bac5a633e7b9a09e87fa2cb5069"
1000 |   integrity sha1-/S2INUXEa6xaYz57mgnof6LLUGk=
1001 | 
1002 | is-stream@^2.0.0:
1003 |   version "2.0.0"
1004 |   resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.0.tgz#bde9c32680d6fae04129d6ac9d921ce7815f78e3"
1005 |   integrity sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==
1006 | 
1007 | is-symbol@^1.0.2:
1008 |   version "1.0.3"
1009 |   resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.3.tgz#38e1014b9e6329be0de9d24a414fd7441ec61937"
1010 |   integrity sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==
1011 |   dependencies:
1012 |     has-symbols "^1.0.1"
1013 | 
1014 | isarray@~1.0.0:
1015 |   version "1.0.0"
1016 |   resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11"
1017 |   integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=
1018 | 
1019 | isexe@^2.0.0:
1020 |   version "2.0.0"
1021 |   resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10"
1022 |   integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=
1023 | 
1024 | jest-worker@^26.2.1:
1025 |   version "26.3.0"
1026 |   resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-26.3.0.tgz#7c8a97e4f4364b4f05ed8bca8ca0c24de091871f"
1027 |   integrity sha512-Vmpn2F6IASefL+DVBhPzI2J9/GJUsqzomdeN+P+dK8/jKxbh8R3BtFnx3FIta7wYlPU62cpJMJQo4kuOowcMnw==
1028 |   dependencies:
1029 |     "@types/node" "*"
1030 |     merge-stream "^2.0.0"
1031 |     supports-color "^7.0.0"
1032 | 
1033 | "js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0:
1034 |   version "4.0.0"
1035 |   resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499"
1036 |   integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==
1037 | 
1038 | jsesc@^2.5.1:
1039 |   version "2.5.2"
1040 |   resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4"
1041 |   integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==
1042 | 
1043 | jsesc@~0.5.0:
1044 |   version "0.5.0"
1045 |   resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d"
1046 |   integrity sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=
1047 | 
1048 | json-parse-better-errors@^1.0.1:
1049 |   version "1.0.2"
1050 |   resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9"
1051 |   integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==
1052 | 
1053 | json-parse-even-better-errors@^2.3.0:
1054 |   version "2.3.1"
1055 |   resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d"
1056 |   integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==
1057 | 
1058 | json5@^2.1.2:
1059 |   version "2.1.3"
1060 |   resolved "https://registry.yarnpkg.com/json5/-/json5-2.1.3.tgz#c9b0f7fa9233bfe5807fe66fcf3a5617ed597d43"
1061 |   integrity sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA==
1062 |   dependencies:
1063 |     minimist "^1.2.5"
1064 | 
1065 | jsonfile@^4.0.0:
1066 |   version "4.0.0"
1067 |   resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb"
1068 |   integrity sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=
1069 |   optionalDependencies:
1070 |     graceful-fs "^4.1.6"
1071 | 
1072 | lines-and-columns@^1.1.6:
1073 |   version "1.1.6"
1074 |   resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.1.6.tgz#1c00c743b433cd0a4e80758f7b64a57440d9ff00"
1075 |   integrity sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=
1076 | 
1077 | lint-staged@^10.4.0:
1078 |   version "10.4.0"
1079 |   resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-10.4.0.tgz#d18628f737328e0bbbf87d183f4020930e9a984e"
1080 |   integrity sha512-uaiX4U5yERUSiIEQc329vhCTDDwUcSvKdRLsNomkYLRzijk3v8V9GWm2Nz0RMVB87VcuzLvtgy6OsjoH++QHIg==
1081 |   dependencies:
1082 |     chalk "^4.1.0"
1083 |     cli-truncate "^2.1.0"
1084 |     commander "^6.0.0"
1085 |     cosmiconfig "^7.0.0"
1086 |     debug "^4.1.1"
1087 |     dedent "^0.7.0"
1088 |     enquirer "^2.3.6"
1089 |     execa "^4.0.3"
1090 |     listr2 "^2.6.0"
1091 |     log-symbols "^4.0.0"
1092 |     micromatch "^4.0.2"
1093 |     normalize-path "^3.0.0"
1094 |     please-upgrade-node "^3.2.0"
1095 |     string-argv "0.3.1"
1096 |     stringify-object "^3.3.0"
1097 | 
1098 | listr2@^2.6.0:
1099 |   version "2.6.2"
1100 |   resolved "https://registry.yarnpkg.com/listr2/-/listr2-2.6.2.tgz#4912eb01e1e2dd72ec37f3895a56bf2622d6f36a"
1101 |   integrity sha512-6x6pKEMs8DSIpA/tixiYY2m/GcbgMplMVmhQAaLFxEtNSKLeWTGjtmU57xvv6QCm2XcqzyNXL/cTSVf4IChCRA==
1102 |   dependencies:
1103 |     chalk "^4.1.0"
1104 |     cli-truncate "^2.1.0"
1105 |     figures "^3.2.0"
1106 |     indent-string "^4.0.0"
1107 |     log-update "^4.0.0"
1108 |     p-map "^4.0.0"
1109 |     rxjs "^6.6.2"
1110 |     through "^2.3.8"
1111 | 
1112 | load-json-file@^4.0.0:
1113 |   version "4.0.0"
1114 |   resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-4.0.0.tgz#2f5f45ab91e33216234fd53adab668eb4ec0993b"
1115 |   integrity sha1-L19Fq5HjMhYjT9U62rZo607AmTs=
1116 |   dependencies:
1117 |     graceful-fs "^4.1.2"
1118 |     parse-json "^4.0.0"
1119 |     pify "^3.0.0"
1120 |     strip-bom "^3.0.0"
1121 | 
1122 | locate-path@^5.0.0:
1123 |   version "5.0.0"
1124 |   resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0"
1125 |   integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==
1126 |   dependencies:
1127 |     p-locate "^4.1.0"
1128 | 
1129 | lodash@^4.17.19:
1130 |   version "4.17.20"
1131 |   resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.20.tgz#b44a9b6297bcb698f1c51a3545a2b3b368d59c52"
1132 |   integrity sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==
1133 | 
1134 | log-symbols@^4.0.0:
1135 |   version "4.0.0"
1136 |   resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.0.0.tgz#69b3cc46d20f448eccdb75ea1fa733d9e821c920"
1137 |   integrity sha512-FN8JBzLx6CzeMrB0tg6pqlGU1wCrXW+ZXGH481kfsBqer0hToTIiHdjH4Mq8xJUbvATujKCvaREGWpGUionraA==
1138 |   dependencies:
1139 |     chalk "^4.0.0"
1140 | 
1141 | log-update@^4.0.0:
1142 |   version "4.0.0"
1143 |   resolved "https://registry.yarnpkg.com/log-update/-/log-update-4.0.0.tgz#589ecd352471f2a1c0c570287543a64dfd20e0a1"
1144 |   integrity sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==
1145 |   dependencies:
1146 |     ansi-escapes "^4.3.0"
1147 |     cli-cursor "^3.1.0"
1148 |     slice-ansi "^4.0.0"
1149 |     wrap-ansi "^6.2.0"
1150 | 
1151 | loose-envify@^1.1.0, loose-envify@^1.4.0:
1152 |   version "1.4.0"
1153 |   resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf"
1154 |   integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==
1155 |   dependencies:
1156 |     js-tokens "^3.0.0 || ^4.0.0"
1157 | 
1158 | magic-string@0.25.7, magic-string@^0.25.0, magic-string@^0.25.7:
1159 |   version "0.25.7"
1160 |   resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.25.7.tgz#3f497d6fd34c669c6798dcb821f2ef31f5445051"
1161 |   integrity sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA==
1162 |   dependencies:
1163 |     sourcemap-codec "^1.4.4"
1164 | 
1165 | make-dir@^3.0.2:
1166 |   version "3.1.0"
1167 |   resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f"
1168 |   integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==
1169 |   dependencies:
1170 |     semver "^6.0.0"
1171 | 
1172 | memorystream@^0.3.1:
1173 |   version "0.3.1"
1174 |   resolved "https://registry.yarnpkg.com/memorystream/-/memorystream-0.3.1.tgz#86d7090b30ce455d63fbae12dda51a47ddcaf9b2"
1175 |   integrity sha1-htcJCzDORV1j+64S3aUaR93K+bI=
1176 | 
1177 | merge-stream@^2.0.0:
1178 |   version "2.0.0"
1179 |   resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60"
1180 |   integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==
1181 | 
1182 | micromatch@^4.0.2:
1183 |   version "4.0.2"
1184 |   resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.2.tgz#4fcb0999bf9fbc2fcbdd212f6d629b9a56c39259"
1185 |   integrity sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==
1186 |   dependencies:
1187 |     braces "^3.0.1"
1188 |     picomatch "^2.0.5"
1189 | 
1190 | mimic-fn@^2.1.0:
1191 |   version "2.1.0"
1192 |   resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b"
1193 |   integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==
1194 | 
1195 | minimatch@^3.0.4:
1196 |   version "3.0.4"
1197 |   resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083"
1198 |   integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==
1199 |   dependencies:
1200 |     brace-expansion "^1.1.7"
1201 | 
1202 | minimist@1.x, minimist@^1.2.5:
1203 |   version "1.2.5"
1204 |   resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602"
1205 |   integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==
1206 | 
1207 | ms@2.1.2:
1208 |   version "2.1.2"
1209 |   resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009"
1210 |   integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==
1211 | 
1212 | nice-try@^1.0.4:
1213 |   version "1.0.5"
1214 |   resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366"
1215 |   integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==
1216 | 
1217 | normalize-package-data@^2.3.2:
1218 |   version "2.5.0"
1219 |   resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8"
1220 |   integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==
1221 |   dependencies:
1222 |     hosted-git-info "^2.1.4"
1223 |     resolve "^1.10.0"
1224 |     semver "2 || 3 || 4 || 5"
1225 |     validate-npm-package-license "^3.0.1"
1226 | 
1227 | normalize-path@^3.0.0:
1228 |   version "3.0.0"
1229 |   resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65"
1230 |   integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==
1231 | 
1232 | npm-run-all@^4.1.5:
1233 |   version "4.1.5"
1234 |   resolved "https://registry.yarnpkg.com/npm-run-all/-/npm-run-all-4.1.5.tgz#04476202a15ee0e2e214080861bff12a51d98fba"
1235 |   integrity sha512-Oo82gJDAVcaMdi3nuoKFavkIHBRVqQ1qvMb+9LHk/cF4P6B2m8aP04hGf7oL6wZ9BuGwX1onlLhpuoofSyoQDQ==
1236 |   dependencies:
1237 |     ansi-styles "^3.2.1"
1238 |     chalk "^2.4.1"
1239 |     cross-spawn "^6.0.5"
1240 |     memorystream "^0.3.1"
1241 |     minimatch "^3.0.4"
1242 |     pidtree "^0.3.0"
1243 |     read-pkg "^3.0.0"
1244 |     shell-quote "^1.6.1"
1245 |     string.prototype.padend "^3.0.0"
1246 | 
1247 | npm-run-path@^4.0.0:
1248 |   version "4.0.1"
1249 |   resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea"
1250 |   integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==
1251 |   dependencies:
1252 |     path-key "^3.0.0"
1253 | 
1254 | object-assign@^4.1.1:
1255 |   version "4.1.1"
1256 |   resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
1257 |   integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=
1258 | 
1259 | object-inspect@^1.7.0, object-inspect@^1.8.0:
1260 |   version "1.8.0"
1261 |   resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.8.0.tgz#df807e5ecf53a609cc6bfe93eac3cc7be5b3a9d0"
1262 |   integrity sha512-jLdtEOB112fORuypAyl/50VRVIBIdVQOSUUGQHzJ4xBSbit81zRarz7GThkEFZy1RceYrWYcPcBFPQwHyAc1gA==
1263 | 
1264 | object-keys@^1.0.12, object-keys@^1.1.1:
1265 |   version "1.1.1"
1266 |   resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e"
1267 |   integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==
1268 | 
1269 | object.assign@^4.1.0:
1270 |   version "4.1.1"
1271 |   resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.1.tgz#303867a666cdd41936ecdedfb1f8f3e32a478cdd"
1272 |   integrity sha512-VT/cxmx5yaoHSOTSyrCygIDFco+RsibY2NM0a4RdEeY/4KgqezwFtK1yr3U67xYhqJSlASm2pKhLVzPj2lr4bA==
1273 |   dependencies:
1274 |     define-properties "^1.1.3"
1275 |     es-abstract "^1.18.0-next.0"
1276 |     has-symbols "^1.0.1"
1277 |     object-keys "^1.1.1"
1278 | 
1279 | once@^1.3.0, once@^1.3.1, once@^1.4.0:
1280 |   version "1.4.0"
1281 |   resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
1282 |   integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E=
1283 |   dependencies:
1284 |     wrappy "1"
1285 | 
1286 | onetime@^5.1.0:
1287 |   version "5.1.2"
1288 |   resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e"
1289 |   integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==
1290 |   dependencies:
1291 |     mimic-fn "^2.1.0"
1292 | 
1293 | opencollective-postinstall@^2.0.2:
1294 |   version "2.0.3"
1295 |   resolved "https://registry.yarnpkg.com/opencollective-postinstall/-/opencollective-postinstall-2.0.3.tgz#7a0fff978f6dbfa4d006238fbac98ed4198c3259"
1296 |   integrity sha512-8AV/sCtuzUeTo8gQK5qDZzARrulB3egtLzFgteqB2tcT4Mw7B8Kt7JcDHmltjz6FOAHsvTevk70gZEbhM4ZS9Q==
1297 | 
1298 | p-limit@^2.2.0:
1299 |   version "2.3.0"
1300 |   resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1"
1301 |   integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==
1302 |   dependencies:
1303 |     p-try "^2.0.0"
1304 | 
1305 | p-locate@^4.1.0:
1306 |   version "4.1.0"
1307 |   resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07"
1308 |   integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==
1309 |   dependencies:
1310 |     p-limit "^2.2.0"
1311 | 
1312 | p-map@^4.0.0:
1313 |   version "4.0.0"
1314 |   resolved "https://registry.yarnpkg.com/p-map/-/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b"
1315 |   integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==
1316 |   dependencies:
1317 |     aggregate-error "^3.0.0"
1318 | 
1319 | p-try@^2.0.0:
1320 |   version "2.2.0"
1321 |   resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6"
1322 |   integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==
1323 | 
1324 | parent-module@^1.0.0:
1325 |   version "1.0.1"
1326 |   resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2"
1327 |   integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==
1328 |   dependencies:
1329 |     callsites "^3.0.0"
1330 | 
1331 | parse-json@^4.0.0:
1332 |   version "4.0.0"
1333 |   resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0"
1334 |   integrity sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=
1335 |   dependencies:
1336 |     error-ex "^1.3.1"
1337 |     json-parse-better-errors "^1.0.1"
1338 | 
1339 | parse-json@^5.0.0:
1340 |   version "5.1.0"
1341 |   resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.1.0.tgz#f96088cdf24a8faa9aea9a009f2d9d942c999646"
1342 |   integrity sha512-+mi/lmVVNKFNVyLXV31ERiy2CY5E1/F6QtJFEzoChPRwwngMNXRDQ9GJ5WdE2Z2P4AujsOi0/+2qHID68KwfIQ==
1343 |   dependencies:
1344 |     "@babel/code-frame" "^7.0.0"
1345 |     error-ex "^1.3.1"
1346 |     json-parse-even-better-errors "^2.3.0"
1347 |     lines-and-columns "^1.1.6"
1348 | 
1349 | path-exists@^4.0.0:
1350 |   version "4.0.0"
1351 |   resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3"
1352 |   integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==
1353 | 
1354 | path-is-absolute@^1.0.0:
1355 |   version "1.0.1"
1356 |   resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
1357 |   integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18=
1358 | 
1359 | path-key@^2.0.1:
1360 |   version "2.0.1"
1361 |   resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40"
1362 |   integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=
1363 | 
1364 | path-key@^3.0.0, path-key@^3.1.0:
1365 |   version "3.1.1"
1366 |   resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375"
1367 |   integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==
1368 | 
1369 | path-parse@^1.0.6:
1370 |   version "1.0.6"
1371 |   resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c"
1372 |   integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==
1373 | 
1374 | path-type@^3.0.0:
1375 |   version "3.0.0"
1376 |   resolved "https://registry.yarnpkg.com/path-type/-/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f"
1377 |   integrity sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==
1378 |   dependencies:
1379 |     pify "^3.0.0"
1380 | 
1381 | path-type@^4.0.0:
1382 |   version "4.0.0"
1383 |   resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b"
1384 |   integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==
1385 | 
1386 | picomatch@^2.0.5, picomatch@^2.2.2:
1387 |   version "2.2.2"
1388 |   resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad"
1389 |   integrity sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==
1390 | 
1391 | pidtree@^0.3.0:
1392 |   version "0.3.1"
1393 |   resolved "https://registry.yarnpkg.com/pidtree/-/pidtree-0.3.1.tgz#ef09ac2cc0533df1f3250ccf2c4d366b0d12114a"
1394 |   integrity sha512-qQbW94hLHEqCg7nhby4yRC7G2+jYHY4Rguc2bjw7Uug4GIJuu1tvf2uHaZv5Q8zdt+WKJ6qK1FOI6amaWUo5FA==
1395 | 
1396 | pify@^3.0.0:
1397 |   version "3.0.0"
1398 |   resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176"
1399 |   integrity sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=
1400 | 
1401 | pkg-dir@^4.1.0, pkg-dir@^4.2.0:
1402 |   version "4.2.0"
1403 |   resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3"
1404 |   integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==
1405 |   dependencies:
1406 |     find-up "^4.0.0"
1407 | 
1408 | please-upgrade-node@^3.2.0:
1409 |   version "3.2.0"
1410 |   resolved "https://registry.yarnpkg.com/please-upgrade-node/-/please-upgrade-node-3.2.0.tgz#aeddd3f994c933e4ad98b99d9a556efa0e2fe942"
1411 |   integrity sha512-gQR3WpIgNIKwBMVLkpMUeR3e1/E1y42bqDQZfql+kDeXd8COYfM8PQA4X6y7a8u9Ua9FHmsrrmirW2vHs45hWg==
1412 |   dependencies:
1413 |     semver-compare "^1.0.0"
1414 | 
1415 | prettier@^2.1.2:
1416 |   version "2.1.2"
1417 |   resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.1.2.tgz#3050700dae2e4c8b67c4c3f666cdb8af405e1ce5"
1418 |   integrity sha512-16c7K+x4qVlJg9rEbXl7HEGmQyZlG4R9AgP+oHKRMsMsuk8s+ATStlf1NpDqyBI1HpVyfjLOeMhH2LvuNvV5Vg==
1419 | 
1420 | process-nextick-args@^2.0.0, process-nextick-args@~2.0.0:
1421 |   version "2.0.1"
1422 |   resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2"
1423 |   integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==
1424 | 
1425 | prop-types@^15.6.2:
1426 |   version "15.7.2"
1427 |   resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.7.2.tgz#52c41e75b8c87e72b9d9360e0206b99dcbffa6c5"
1428 |   integrity sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==
1429 |   dependencies:
1430 |     loose-envify "^1.4.0"
1431 |     object-assign "^4.1.1"
1432 |     react-is "^16.8.1"
1433 | 
1434 | pump@^3.0.0:
1435 |   version "3.0.0"
1436 |   resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64"
1437 |   integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==
1438 |   dependencies:
1439 |     end-of-stream "^1.1.0"
1440 |     once "^1.3.1"
1441 | 
1442 | randombytes@^2.1.0:
1443 |   version "2.1.0"
1444 |   resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a"
1445 |   integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==
1446 |   dependencies:
1447 |     safe-buffer "^5.1.0"
1448 | 
1449 | react-is@^16.8.1:
1450 |   version "16.13.1"
1451 |   resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4"
1452 |   integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==
1453 | 
1454 | react@^16.13.1:
1455 |   version "16.13.1"
1456 |   resolved "https://registry.yarnpkg.com/react/-/react-16.13.1.tgz#2e818822f1a9743122c063d6410d85c1e3afe48e"
1457 |   integrity sha512-YMZQQq32xHLX0bz5Mnibv1/LHb3Sqzngu7xstSM+vrkE5Kzr9xE0yMByK5kMoTK30YVJE61WfbxIFFvfeDKT1w==
1458 |   dependencies:
1459 |     loose-envify "^1.1.0"
1460 |     object-assign "^4.1.1"
1461 |     prop-types "^15.6.2"
1462 | 
1463 | read-pkg@^3.0.0:
1464 |   version "3.0.0"
1465 |   resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-3.0.0.tgz#9cbc686978fee65d16c00e2b19c237fcf6e38389"
1466 |   integrity sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=
1467 |   dependencies:
1468 |     load-json-file "^4.0.0"
1469 |     normalize-package-data "^2.3.2"
1470 |     path-type "^3.0.0"
1471 | 
1472 | readable-stream@^2.3.5:
1473 |   version "2.3.7"
1474 |   resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57"
1475 |   integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==
1476 |   dependencies:
1477 |     core-util-is "~1.0.0"
1478 |     inherits "~2.0.3"
1479 |     isarray "~1.0.0"
1480 |     process-nextick-args "~2.0.0"
1481 |     safe-buffer "~5.1.1"
1482 |     string_decoder "~1.1.1"
1483 |     util-deprecate "~1.0.1"
1484 | 
1485 | regenerate-unicode-properties@^8.0.2:
1486 |   version "8.2.0"
1487 |   resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz#e5de7111d655e7ba60c057dbe9ff37c87e65cdec"
1488 |   integrity sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA==
1489 |   dependencies:
1490 |     regenerate "^1.4.0"
1491 | 
1492 | regenerate@^1.4.0:
1493 |   version "1.4.1"
1494 |   resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.1.tgz#cad92ad8e6b591773485fbe05a485caf4f457e6f"
1495 |   integrity sha512-j2+C8+NtXQgEKWk49MMP5P/u2GhnahTtVkRIHr5R5lVRlbKvmQ+oS+A5aLKWp2ma5VkT8sh6v+v4hbH0YHR66A==
1496 | 
1497 | regexpu-core@4.5.4:
1498 |   version "4.5.4"
1499 |   resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.5.4.tgz#080d9d02289aa87fe1667a4f5136bc98a6aebaae"
1500 |   integrity sha512-BtizvGtFQKGPUcTy56o3nk1bGRp4SZOTYrDtGNlqCQufptV5IkkLN6Emw+yunAJjzf+C9FQFtvq7IoA3+oMYHQ==
1501 |   dependencies:
1502 |     regenerate "^1.4.0"
1503 |     regenerate-unicode-properties "^8.0.2"
1504 |     regjsgen "^0.5.0"
1505 |     regjsparser "^0.6.0"
1506 |     unicode-match-property-ecmascript "^1.0.4"
1507 |     unicode-match-property-value-ecmascript "^1.1.0"
1508 | 
1509 | regjsgen@^0.5.0:
1510 |   version "0.5.2"
1511 |   resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.5.2.tgz#92ff295fb1deecbf6ecdab2543d207e91aa33733"
1512 |   integrity sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A==
1513 | 
1514 | regjsparser@^0.6.0:
1515 |   version "0.6.4"
1516 |   resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.6.4.tgz#a769f8684308401a66e9b529d2436ff4d0666272"
1517 |   integrity sha512-64O87/dPDgfk8/RQqC4gkZoGyyWFIEUTTh80CU6CWuK5vkCGyekIx+oKcEIYtP/RAxSQltCZHCNu/mdd7fqlJw==
1518 |   dependencies:
1519 |     jsesc "~0.5.0"
1520 | 
1521 | remove-trailing-separator@^1.0.1:
1522 |   version "1.1.0"
1523 |   resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef"
1524 |   integrity sha1-wkvOKig62tW8P1jg1IJJuSN52O8=
1525 | 
1526 | replace-ext@^1.0.0:
1527 |   version "1.0.1"
1528 |   resolved "https://registry.yarnpkg.com/replace-ext/-/replace-ext-1.0.1.tgz#2d6d996d04a15855d967443631dd5f77825b016a"
1529 |   integrity sha512-yD5BHCe7quCgBph4rMQ+0KkIRKwWCrHDOX1p1Gp6HwjPM5kVoCdKGNhN7ydqqsX6lJEnQDKZ/tFMiEdQ1dvPEw==
1530 | 
1531 | resolve-from@^4.0.0:
1532 |   version "4.0.0"
1533 |   resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6"
1534 |   integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==
1535 | 
1536 | resolve@1.17.0, resolve@^1.10.0, resolve@^1.17.0, resolve@^1.3.2:
1537 |   version "1.17.0"
1538 |   resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.17.0.tgz#b25941b54968231cc2d1bb76a79cb7f2c0bf8444"
1539 |   integrity sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==
1540 |   dependencies:
1541 |     path-parse "^1.0.6"
1542 | 
1543 | restore-cursor@^3.1.0:
1544 |   version "3.1.0"
1545 |   resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e"
1546 |   integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==
1547 |   dependencies:
1548 |     onetime "^5.1.0"
1549 |     signal-exit "^3.0.2"
1550 | 
1551 | rollup-plugin-babel@^4.4.0:
1552 |   version "4.4.0"
1553 |   resolved "https://registry.yarnpkg.com/rollup-plugin-babel/-/rollup-plugin-babel-4.4.0.tgz#d15bd259466a9d1accbdb2fe2fff17c52d030acb"
1554 |   integrity sha512-Lek/TYp1+7g7I+uMfJnnSJ7YWoD58ajo6Oarhlex7lvUce+RCKRuGRSgztDO3/MF/PuGKmUL5iTHKf208UNszw==
1555 |   dependencies:
1556 |     "@babel/helper-module-imports" "^7.0.0"
1557 |     rollup-pluginutils "^2.8.1"
1558 | 
1559 | rollup-plugin-terser@^7.0.2:
1560 |   version "7.0.2"
1561 |   resolved "https://registry.yarnpkg.com/rollup-plugin-terser/-/rollup-plugin-terser-7.0.2.tgz#e8fbba4869981b2dc35ae7e8a502d5c6c04d324d"
1562 |   integrity sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ==
1563 |   dependencies:
1564 |     "@babel/code-frame" "^7.10.4"
1565 |     jest-worker "^26.2.1"
1566 |     serialize-javascript "^4.0.0"
1567 |     terser "^5.0.0"
1568 | 
1569 | rollup-plugin-typescript2@^0.27.2:
1570 |   version "0.27.2"
1571 |   resolved "https://registry.yarnpkg.com/rollup-plugin-typescript2/-/rollup-plugin-typescript2-0.27.2.tgz#871a7f5d2a774f9cef50d25da868eec72acc2ed8"
1572 |   integrity sha512-zarMH2F8oT/NO6p20gl/jkts+WxyzOlhOIUwUU/EDx5e6ewdDPS/flwLj5XFuijUCr64bZwqKuRVwCPdXXYefQ==
1573 |   dependencies:
1574 |     "@rollup/pluginutils" "^3.1.0"
1575 |     find-cache-dir "^3.3.1"
1576 |     fs-extra "8.1.0"
1577 |     resolve "1.17.0"
1578 |     tslib "2.0.1"
1579 | 
1580 | rollup-pluginutils@^2.8.1:
1581 |   version "2.8.2"
1582 |   resolved "https://registry.yarnpkg.com/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz#72f2af0748b592364dbd3389e600e5a9444a351e"
1583 |   integrity sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==
1584 |   dependencies:
1585 |     estree-walker "^0.6.1"
1586 | 
1587 | rollup@^2.27.1:
1588 |   version "2.27.1"
1589 |   resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.27.1.tgz#372744e1d36eba0fd942d997600c2fc2ca266305"
1590 |   integrity sha512-GiWHQvnmMgBktSpY/1+nrGpwPsTw4b9P28og2uedfeq4JZ16rzAmnQ5Pm/E0/BEmDNia1ZbY7+qu3nBgNa19Hg==
1591 |   optionalDependencies:
1592 |     fsevents "~2.1.2"
1593 | 
1594 | rxjs@^6.6.2:
1595 |   version "6.6.3"
1596 |   resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.6.3.tgz#8ca84635c4daa900c0d3967a6ee7ac60271ee552"
1597 |   integrity sha512-trsQc+xYYXZ3urjOiJOuCOa5N3jAZ3eiSpQB5hIT8zGlL2QfnHLJ2r7GMkBGuIausdJN1OneaI6gQlsqNHHmZQ==
1598 |   dependencies:
1599 |     tslib "^1.9.0"
1600 | 
1601 | safe-buffer@^5.1.0:
1602 |   version "5.2.1"
1603 |   resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6"
1604 |   integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==
1605 | 
1606 | safe-buffer@~5.1.0, safe-buffer@~5.1.1:
1607 |   version "5.1.2"
1608 |   resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d"
1609 |   integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==
1610 | 
1611 | semver-compare@^1.0.0:
1612 |   version "1.0.0"
1613 |   resolved "https://registry.yarnpkg.com/semver-compare/-/semver-compare-1.0.0.tgz#0dee216a1c941ab37e9efb1788f6afc5ff5537fc"
1614 |   integrity sha1-De4hahyUGrN+nvsXiPavxf9VN/w=
1615 | 
1616 | semver-regex@^2.0.0:
1617 |   version "2.0.0"
1618 |   resolved "https://registry.yarnpkg.com/semver-regex/-/semver-regex-2.0.0.tgz#a93c2c5844539a770233379107b38c7b4ac9d338"
1619 |   integrity sha512-mUdIBBvdn0PLOeP3TEkMH7HHeUP3GjsXCwKarjv/kGmUFOYg1VqEemKhoQpWMu6X2I8kHeuVdGibLGkVK+/5Qw==
1620 | 
1621 | "semver@2 || 3 || 4 || 5", semver@^5.4.1, semver@^5.5.0:
1622 |   version "5.7.1"
1623 |   resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7"
1624 |   integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==
1625 | 
1626 | semver@^6.0.0:
1627 |   version "6.3.0"
1628 |   resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d"
1629 |   integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==
1630 | 
1631 | serialize-javascript@^4.0.0:
1632 |   version "4.0.0"
1633 |   resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-4.0.0.tgz#b525e1238489a5ecfc42afacc3fe99e666f4b1aa"
1634 |   integrity sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==
1635 |   dependencies:
1636 |     randombytes "^2.1.0"
1637 | 
1638 | shebang-command@^1.2.0:
1639 |   version "1.2.0"
1640 |   resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea"
1641 |   integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=
1642 |   dependencies:
1643 |     shebang-regex "^1.0.0"
1644 | 
1645 | shebang-command@^2.0.0:
1646 |   version "2.0.0"
1647 |   resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea"
1648 |   integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==
1649 |   dependencies:
1650 |     shebang-regex "^3.0.0"
1651 | 
1652 | shebang-regex@^1.0.0:
1653 |   version "1.0.0"
1654 |   resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3"
1655 |   integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=
1656 | 
1657 | shebang-regex@^3.0.0:
1658 |   version "3.0.0"
1659 |   resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172"
1660 |   integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==
1661 | 
1662 | shell-quote@^1.6.1:
1663 |   version "1.7.2"
1664 |   resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.7.2.tgz#67a7d02c76c9da24f99d20808fcaded0e0e04be2"
1665 |   integrity sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg==
1666 | 
1667 | signal-exit@^3.0.2:
1668 |   version "3.0.3"
1669 |   resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c"
1670 |   integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==
1671 | 
1672 | slash@^3.0.0:
1673 |   version "3.0.0"
1674 |   resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634"
1675 |   integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==
1676 | 
1677 | slice-ansi@^3.0.0:
1678 |   version "3.0.0"
1679 |   resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-3.0.0.tgz#31ddc10930a1b7e0b67b08c96c2f49b77a789787"
1680 |   integrity sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==
1681 |   dependencies:
1682 |     ansi-styles "^4.0.0"
1683 |     astral-regex "^2.0.0"
1684 |     is-fullwidth-code-point "^3.0.0"
1685 | 
1686 | slice-ansi@^4.0.0:
1687 |   version "4.0.0"
1688 |   resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-4.0.0.tgz#500e8dd0fd55b05815086255b3195adf2a45fe6b"
1689 |   integrity sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==
1690 |   dependencies:
1691 |     ansi-styles "^4.0.0"
1692 |     astral-regex "^2.0.0"
1693 |     is-fullwidth-code-point "^3.0.0"
1694 | 
1695 | source-map-support@~0.5.12:
1696 |   version "0.5.19"
1697 |   resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.19.tgz#a98b62f86dcaf4f67399648c085291ab9e8fed61"
1698 |   integrity sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==
1699 |   dependencies:
1700 |     buffer-from "^1.0.0"
1701 |     source-map "^0.6.0"
1702 | 
1703 | source-map@^0.5.0, source-map@^0.5.1:
1704 |   version "0.5.7"
1705 |   resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc"
1706 |   integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=
1707 | 
1708 | source-map@^0.6.0, source-map@~0.6.1:
1709 |   version "0.6.1"
1710 |   resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263"
1711 |   integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==
1712 | 
1713 | sourcemap-codec@1.4.8, sourcemap-codec@^1.4.4:
1714 |   version "1.4.8"
1715 |   resolved "https://registry.yarnpkg.com/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz#ea804bd94857402e6992d05a38ef1ae35a9ab4c4"
1716 |   integrity sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==
1717 | 
1718 | spdx-correct@^3.0.0:
1719 |   version "3.1.1"
1720 |   resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.1.tgz#dece81ac9c1e6713e5f7d1b6f17d468fa53d89a9"
1721 |   integrity sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==
1722 |   dependencies:
1723 |     spdx-expression-parse "^3.0.0"
1724 |     spdx-license-ids "^3.0.0"
1725 | 
1726 | spdx-exceptions@^2.1.0:
1727 |   version "2.3.0"
1728 |   resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz#3f28ce1a77a00372683eade4a433183527a2163d"
1729 |   integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==
1730 | 
1731 | spdx-expression-parse@^3.0.0:
1732 |   version "3.0.1"
1733 |   resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679"
1734 |   integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==
1735 |   dependencies:
1736 |     spdx-exceptions "^2.1.0"
1737 |     spdx-license-ids "^3.0.0"
1738 | 
1739 | spdx-license-ids@^3.0.0:
1740 |   version "3.0.6"
1741 |   resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.6.tgz#c80757383c28abf7296744998cbc106ae8b854ce"
1742 |   integrity sha512-+orQK83kyMva3WyPf59k1+Y525csj5JejicWut55zeTWANuN17qSiSLUXWtzHeNWORSvT7GLDJ/E/XiIWoXBTw==
1743 | 
1744 | string-argv@0.3.1:
1745 |   version "0.3.1"
1746 |   resolved "https://registry.yarnpkg.com/string-argv/-/string-argv-0.3.1.tgz#95e2fbec0427ae19184935f816d74aaa4c5c19da"
1747 |   integrity sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg==
1748 | 
1749 | string-width@^4.1.0, string-width@^4.2.0:
1750 |   version "4.2.0"
1751 |   resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.0.tgz#952182c46cc7b2c313d1596e623992bd163b72b5"
1752 |   integrity sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==
1753 |   dependencies:
1754 |     emoji-regex "^8.0.0"
1755 |     is-fullwidth-code-point "^3.0.0"
1756 |     strip-ansi "^6.0.0"
1757 | 
1758 | string.prototype.padend@^3.0.0:
1759 |   version "3.1.0"
1760 |   resolved "https://registry.yarnpkg.com/string.prototype.padend/-/string.prototype.padend-3.1.0.tgz#dc08f57a8010dc5c153550318f67e13adbb72ac3"
1761 |   integrity sha512-3aIv8Ffdp8EZj8iLwREGpQaUZiPyrWrpzMBHvkiSW/bK/EGve9np07Vwy7IJ5waydpGXzQZu/F8Oze2/IWkBaA==
1762 |   dependencies:
1763 |     define-properties "^1.1.3"
1764 |     es-abstract "^1.17.0-next.1"
1765 | 
1766 | string.prototype.trimend@^1.0.1:
1767 |   version "1.0.1"
1768 |   resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz#85812a6b847ac002270f5808146064c995fb6913"
1769 |   integrity sha512-LRPxFUaTtpqYsTeNKaFOw3R4bxIzWOnbQ837QfBylo8jIxtcbK/A/sMV7Q+OAV/vWo+7s25pOE10KYSjaSO06g==
1770 |   dependencies:
1771 |     define-properties "^1.1.3"
1772 |     es-abstract "^1.17.5"
1773 | 
1774 | string.prototype.trimstart@^1.0.1:
1775 |   version "1.0.1"
1776 |   resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz#14af6d9f34b053f7cfc89b72f8f2ee14b9039a54"
1777 |   integrity sha512-XxZn+QpvrBI1FOcg6dIpxUPgWCPuNXvMD72aaRaUQv1eD4e/Qy8i/hFTe0BUmD60p/QA6bh1avmuPTfNjqVWRw==
1778 |   dependencies:
1779 |     define-properties "^1.1.3"
1780 |     es-abstract "^1.17.5"
1781 | 
1782 | string_decoder@~1.1.1:
1783 |   version "1.1.1"
1784 |   resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8"
1785 |   integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==
1786 |   dependencies:
1787 |     safe-buffer "~5.1.0"
1788 | 
1789 | stringify-object@^3.3.0:
1790 |   version "3.3.0"
1791 |   resolved "https://registry.yarnpkg.com/stringify-object/-/stringify-object-3.3.0.tgz#703065aefca19300d3ce88af4f5b3956d7556629"
1792 |   integrity sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==
1793 |   dependencies:
1794 |     get-own-enumerable-property-symbols "^3.0.0"
1795 |     is-obj "^1.0.1"
1796 |     is-regexp "^1.0.0"
1797 | 
1798 | strip-ansi@^6.0.0:
1799 |   version "6.0.0"
1800 |   resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532"
1801 |   integrity sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==
1802 |   dependencies:
1803 |     ansi-regex "^5.0.0"
1804 | 
1805 | strip-bom@^3.0.0:
1806 |   version "3.0.0"
1807 |   resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3"
1808 |   integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=
1809 | 
1810 | strip-final-newline@^2.0.0:
1811 |   version "2.0.0"
1812 |   resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad"
1813 |   integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==
1814 | 
1815 | supports-color@^5.3.0:
1816 |   version "5.5.0"
1817 |   resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f"
1818 |   integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==
1819 |   dependencies:
1820 |     has-flag "^3.0.0"
1821 | 
1822 | supports-color@^7.0.0, supports-color@^7.1.0:
1823 |   version "7.2.0"
1824 |   resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da"
1825 |   integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==
1826 |   dependencies:
1827 |     has-flag "^4.0.0"
1828 | 
1829 | terser@^5.0.0:
1830 |   version "5.3.2"
1831 |   resolved "https://registry.yarnpkg.com/terser/-/terser-5.3.2.tgz#f4bea90eb92945b2a028ceef79181b9bb586e7af"
1832 |   integrity sha512-H67sydwBz5jCUA32ZRL319ULu+Su1cAoZnnc+lXnenGRYWyLE3Scgkt8mNoAsMx0h5kdo758zdoS0LG9rYZXDQ==
1833 |   dependencies:
1834 |     commander "^2.20.0"
1835 |     source-map "~0.6.1"
1836 |     source-map-support "~0.5.12"
1837 | 
1838 | through@^2.3.8:
1839 |   version "2.3.8"
1840 |   resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5"
1841 |   integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=
1842 | 
1843 | to-fast-properties@^2.0.0:
1844 |   version "2.0.0"
1845 |   resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e"
1846 |   integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=
1847 | 
1848 | to-regex-range@^5.0.1:
1849 |   version "5.0.1"
1850 |   resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4"
1851 |   integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==
1852 |   dependencies:
1853 |     is-number "^7.0.0"
1854 | 
1855 | tslib@2.0.1:
1856 |   version "2.0.1"
1857 |   resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.0.1.tgz#410eb0d113e5b6356490eec749603725b021b43e"
1858 |   integrity sha512-SgIkNheinmEBgx1IUNirK0TUD4X9yjjBRTqqjggWCU3pUEqIk3/Uwl3yRixYKT6WjQuGiwDv4NomL3wqRCj+CQ==
1859 | 
1860 | tslib@^1.9.0:
1861 |   version "1.13.0"
1862 |   resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.13.0.tgz#c881e13cc7015894ed914862d276436fa9a47043"
1863 |   integrity sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q==
1864 | 
1865 | type-fest@^0.11.0:
1866 |   version "0.11.0"
1867 |   resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.11.0.tgz#97abf0872310fed88a5c466b25681576145e33f1"
1868 |   integrity sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ==
1869 | 
1870 | typescript@^4.0.3:
1871 |   version "4.0.3"
1872 |   resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.0.3.tgz#153bbd468ef07725c1df9c77e8b453f8d36abba5"
1873 |   integrity sha512-tEu6DGxGgRJPb/mVPIZ48e69xCn2yRmCgYmDugAVwmJ6o+0u1RI18eO7E7WBTLYLaEVVOhwQmcdhQHweux/WPg==
1874 | 
1875 | unicode-canonical-property-names-ecmascript@^1.0.4:
1876 |   version "1.0.4"
1877 |   resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz#2619800c4c825800efdd8343af7dd9933cbe2818"
1878 |   integrity sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==
1879 | 
1880 | unicode-match-property-ecmascript@^1.0.4:
1881 |   version "1.0.4"
1882 |   resolved "https://registry.yarnpkg.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz#8ed2a32569961bce9227d09cd3ffbb8fed5f020c"
1883 |   integrity sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==
1884 |   dependencies:
1885 |     unicode-canonical-property-names-ecmascript "^1.0.4"
1886 |     unicode-property-aliases-ecmascript "^1.0.4"
1887 | 
1888 | unicode-match-property-value-ecmascript@^1.1.0:
1889 |   version "1.2.0"
1890 |   resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz#0d91f600eeeb3096aa962b1d6fc88876e64ea531"
1891 |   integrity sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ==
1892 | 
1893 | unicode-property-aliases-ecmascript@^1.0.4:
1894 |   version "1.1.0"
1895 |   resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz#dd57a99f6207bedff4628abefb94c50db941c8f4"
1896 |   integrity sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg==
1897 | 
1898 | universalify@^0.1.0:
1899 |   version "0.1.2"
1900 |   resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66"
1901 |   integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==
1902 | 
1903 | util-deprecate@~1.0.1:
1904 |   version "1.0.2"
1905 |   resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
1906 |   integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=
1907 | 
1908 | uuid@8.1.0:
1909 |   version "8.1.0"
1910 |   resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.1.0.tgz#6f1536eb43249f473abc6bd58ff983da1ca30d8d"
1911 |   integrity sha512-CI18flHDznR0lq54xBycOVmphdCYnQLKn8abKn7PXUiKUGdEd+/l9LWNJmugXel4hXq7S+RMNl34ecyC9TntWg==
1912 | 
1913 | validate-npm-package-license@^3.0.1:
1914 |   version "3.0.4"
1915 |   resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a"
1916 |   integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==
1917 |   dependencies:
1918 |     spdx-correct "^3.0.0"
1919 |     spdx-expression-parse "^3.0.0"
1920 | 
1921 | vinyl-sourcemaps-apply@^0.2.0:
1922 |   version "0.2.1"
1923 |   resolved "https://registry.yarnpkg.com/vinyl-sourcemaps-apply/-/vinyl-sourcemaps-apply-0.2.1.tgz#ab6549d61d172c2b1b87be5c508d239c8ef87705"
1924 |   integrity sha1-q2VJ1h0XLCsbh75cUI0jnI74dwU=
1925 |   dependencies:
1926 |     source-map "^0.5.1"
1927 | 
1928 | vinyl@2.x:
1929 |   version "2.2.0"
1930 |   resolved "https://registry.yarnpkg.com/vinyl/-/vinyl-2.2.0.tgz#d85b07da96e458d25b2ffe19fece9f2caa13ed86"
1931 |   integrity sha512-MBH+yP0kC/GQ5GwBqrTPTzEfiiLjta7hTtvQtbxBgTeSXsmKQRQecjibMbxIXzVT3Y9KJK+drOz1/k+vsu8Nkg==
1932 |   dependencies:
1933 |     clone "^2.1.1"
1934 |     clone-buffer "^1.0.0"
1935 |     clone-stats "^1.0.0"
1936 |     cloneable-readable "^1.0.0"
1937 |     remove-trailing-separator "^1.0.1"
1938 |     replace-ext "^1.0.0"
1939 | 
1940 | which-pm-runs@^1.0.0:
1941 |   version "1.0.0"
1942 |   resolved "https://registry.yarnpkg.com/which-pm-runs/-/which-pm-runs-1.0.0.tgz#670b3afbc552e0b55df6b7780ca74615f23ad1cb"
1943 |   integrity sha1-Zws6+8VS4LVd9rd4DKdGFfI60cs=
1944 | 
1945 | which@^1.2.9:
1946 |   version "1.3.1"
1947 |   resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a"
1948 |   integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==
1949 |   dependencies:
1950 |     isexe "^2.0.0"
1951 | 
1952 | which@^2.0.1:
1953 |   version "2.0.2"
1954 |   resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1"
1955 |   integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==
1956 |   dependencies:
1957 |     isexe "^2.0.0"
1958 | 
1959 | wrap-ansi@^6.2.0:
1960 |   version "6.2.0"
1961 |   resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53"
1962 |   integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==
1963 |   dependencies:
1964 |     ansi-styles "^4.0.0"
1965 |     string-width "^4.1.0"
1966 |     strip-ansi "^6.0.0"
1967 | 
1968 | wrappy@1:
1969 |   version "1.0.2"
1970 |   resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
1971 |   integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=
1972 | 
1973 | yaml@^1.10.0:
1974 |   version "1.10.0"
1975 |   resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.0.tgz#3b593add944876077d4d683fee01081bd9fff31e"
1976 |   integrity sha512-yr2icI4glYaNG+KWONODapy2/jDdMSDnrONSjblABjD9B4Z5LgiircSt8m8sRZFNi08kG9Sm0uSHtEmP3zaEGg==
1977 | 


--------------------------------------------------------------------------------