@samitouri / QOS-React-2 / commits / a33c0b897c

Initial commit

Xuan Huang (黄玄) committed May 11, 2021 at 16:10 UTC a33c0b897c502f82f59fe283e71323b9cb0503a6
319 files changed +66060
compiler/.github/workflows/ci.yml new
+25
@@ -0,0 +1,25 @@
1 +name: CI
2 +
3 +on:
4 + push:
5 + branches: [main]
6 + pull_request:
7 +
8 +jobs:
9 + forget:
10 + runs-on: ubuntu-latest
11 + steps:
12 + - uses: actions/checkout@v3
13 + - uses: actions/setup-node@v3
14 + with:
15 + node-version: 18.x
16 + cache: "yarn"
17 + cache-dependency-path: forget/yarn.lock
18 + - run: yarn install --immutable --immutable-cache
19 + working-directory: forget
20 + - run: yarn prettier --check .
21 + working-directory: forget
22 + - run: yarn build
23 + working-directory: forget
24 + - run: yarn test
25 + working-directory: forget
compiler/.gitignore new
+2
@@ -0,0 +1,2 @@
1 +.DS_Store
2 +.spr.yml
compiler/.vscode/settings.json new
+13
@@ -0,0 +1,13 @@
1 +{
2 + "editor.formatOnSave": true,
3 + "[typescript]": {
4 + "editor.codeActionsOnSave": {
5 + "source.organizeImports": true
6 + },
7 + },
8 + "[typescriptreact]": {
9 + "editor.codeActionsOnSave": {
10 + "source.organizeImports": true
11 + }
12 + }
13 +}
compiler/.watchmanconfig new
+1
@@ -0,0 +1 @@
1 +{}
compiler/CODE_OF_CONDUCT.md new
+80
@@ -0,0 +1,80 @@
1 +# Code of Conduct
2 +
3 +## Our Pledge
4 +
5 +In the interest of fostering an open and welcoming environment, we as
6 +contributors and maintainers pledge to make participation in our project and
7 +our community a harassment-free experience for everyone, regardless of age, body
8 +size, disability, ethnicity, sex characteristics, gender identity and expression,
9 +level of experience, education, socio-economic status, nationality, personal
10 +appearance, race, religion, or sexual identity and orientation.
11 +
12 +## Our Standards
13 +
14 +Examples of behavior that contributes to creating a positive environment
15 +include:
16 +
17 +* Using welcoming and inclusive language
18 +* Being respectful of differing viewpoints and experiences
19 +* Gracefully accepting constructive criticism
20 +* Focusing on what is best for the community
21 +* Showing empathy towards other community members
22 +
23 +Examples of unacceptable behavior by participants include:
24 +
25 +* The use of sexualized language or imagery and unwelcome sexual attention or
26 + advances
27 +* Trolling, insulting/derogatory comments, and personal or political attacks
28 +* Public or private harassment
29 +* Publishing others' private information, such as a physical or electronic
30 + address, without explicit permission
31 +* Other conduct which could reasonably be considered inappropriate in a
32 + professional setting
33 +
34 +## Our Responsibilities
35 +
36 +Project maintainers are responsible for clarifying the standards of acceptable
37 +behavior and are expected to take appropriate and fair corrective action in
38 +response to any instances of unacceptable behavior.
39 +
40 +Project maintainers have the right and responsibility to remove, edit, or
41 +reject comments, commits, code, wiki edits, issues, and other contributions
42 +that are not aligned to this Code of Conduct, or to ban temporarily or
43 +permanently any contributor for other behaviors that they deem inappropriate,
44 +threatening, offensive, or harmful.
45 +
46 +## Scope
47 +
48 +This Code of Conduct applies within all project spaces, and it also applies when
49 +an individual is representing the project or its community in public spaces.
50 +Examples of representing a project or community include using an official
51 +project e-mail address, posting via an official social media account, or acting
52 +as an appointed representative at an online or offline event. Representation of
53 +a project may be further defined and clarified by project maintainers.
54 +
55 +This Code of Conduct also applies outside the project spaces when there is a
56 +reasonable belief that an individual's behavior may have a negative impact on
57 +the project or its community.
58 +
59 +## Enforcement
60 +
61 +Instances of abusive, harassing, or otherwise unacceptable behavior may be
62 +reported by contacting the project team at <opensource-conduct@fb.com>. All
63 +complaints will be reviewed and investigated and will result in a response that
64 +is deemed necessary and appropriate to the circumstances. The project team is
65 +obligated to maintain confidentiality with regard to the reporter of an incident.
66 +Further details of specific enforcement policies may be posted separately.
67 +
68 +Project maintainers who do not follow or enforce the Code of Conduct in good
69 +faith may face temporary or permanent repercussions as determined by other
70 +members of the project's leadership.
71 +
72 +## Attribution
73 +
74 +This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4,
75 +available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html
76 +
77 +[homepage]: https://www.contributor-covenant.org
78 +
79 +For answers to common questions about this code of conduct, see
80 +https://www.contributor-covenant.org/faq
compiler/CONTRIBUTING.md new
+31
@@ -0,0 +1,31 @@
1 +# Contributing to react-forget
2 +We want to make contributing to this project as easy and transparent as
3 +possible.
4 +
5 +## Pull Requests
6 +We actively welcome your pull requests.
7 +
8 +1. Fork the repo and create your branch from `main`.
9 +2. If you've added code that should be tested, add tests.
10 +3. If you've changed APIs, update the documentation.
11 +4. Ensure the test suite passes.
12 +5. Make sure your code lints.
13 +6. If you haven't already, complete the Contributor License Agreement ("CLA").
14 +
15 +## Contributor License Agreement ("CLA")
16 +In order to accept your pull request, we need you to submit a CLA. You only need
17 +to do this once to work on any of Facebook's open source projects.
18 +
19 +Complete your CLA here: <https://code.facebook.com/cla>
20 +
21 +## Issues
22 +We use GitHub issues to track public bugs. Please ensure your description is
23 +clear and has sufficient instructions to be able to reproduce the issue.
24 +
25 +Facebook has a [bounty program](https://www.facebook.com/whitehat/) for the safe
26 +disclosure of security bugs. In those cases, please go through the process
27 +outlined on that page and do not file a public issue.
28 +
29 +## License
30 +By contributing to react-forget, you agree that your contributions will be licensed
31 +under the LICENSE file in the root directory of this source tree.
\ No newline at end of file
compiler/forget/.gitignore new
+8
@@ -0,0 +1,8 @@
1 +.DS_Store
2 +node_modules
3 +.watchmanconfig
4 +dist
5 +package-lock.json
6 +.vscode
7 +!packages/playground/.vscode
8 +.spr.yml
compiler/forget/.prettierignore new
+4
@@ -0,0 +1,4 @@
1 +/packages/demo-*
2 +/dist/
3 +**/__tests__/fixtures/**/*.expect.md
4 +**/.next
compiler/forget/.prettierrc.json new
+3
@@ -0,0 +1,3 @@
1 +{
2 + "requirePragma": false
3 +}
compiler/forget/ARCHITECTURE.md new
+67
@@ -0,0 +1,67 @@
1 +# Architecture Overview
2 +
3 +## Diagnostics
4 +
5 +Diagnostics are a way to indicate to the user that the compiler has encountered an unexpected issue, and are created in a structured format that is reused in the Playground to imperatively draw model markers ("squigglies") at their respective node locations.
6 +
7 +### Diagnostic levels
8 +
9 +Rough guidelines for diagnostic levels:
10 +
11 +- `Error`: This is emitted by the compiler when it detects an issue that makes it unable to compile the program. This is typically because the program is invalid, or when we have decided to make a specific `Warning` an error. An example for the latter might be when we want to introduce constraints into React programs that the compiler enforces.
12 +
13 +- `Warning`: This is emitted by the compiler when we've detected something strange in the program that causes a bailout/deopt.
14 +
15 +### Adding new diagnostics
16 +
17 +- Define a new error code, monotonically increasing the previous error code by 1. Error codes are in the format `E0000` and must be unique.
18 +
19 +## Terminology
20 +
21 +### AST
22 +
23 +(Babel) Abstract Syntax Tree
24 +
25 +### IR
26 +
27 +Intermediate Representation.
28 +
29 +The purpose of IR is to represent the program in the way to help with static analysis (e.g. mutability of values, dependencies between values).
30 +
31 +### LIR
32 +
33 +Low-Level Intermediate Representation.
34 +
35 +The purpose of LIR is to represent the program in the way to help with
36 +code generation (e.g. grouping, re-ordering).
37 +
38 +### ValGraph
39 +
40 +Graph representing IR values and their direct dependencies on other IR values.
41 +
42 +### SCCGraph
43 +
44 +The ValGraph condensed into [strongly connected components](https://en.wikipedia.org/wiki/Strongly_connected_component) to group mututally dependent Vals.
45 +
46 +### RedGraph
47 +
48 +The SCCGraph processed after a topological iterative algorithm to reduce the dependency relations between SCCs.
49 +
50 +This can be seen as the final "Reactive Graph" that captured the relations of "what invalidates me" and "what do I invalidate" (directly and transitively) which will be utilized by the Back End and eventually be materialized by the memoization.
51 +
52 +## Compiler Passes
53 +
54 +### Middle End Passes
55 +
56 +1. `ReactFuncsInfer` uses heurstics to infer functions that are considered as "React Functions" (functional components and hook definitions) and will be used as compilation units.
57 +2. `ParamAnalysis` analyzes React function parameters resolve inputs. For components these are individual props and for Hooks all arguments.
58 +3. `BodyAnalysis` analyzes the body of React functions to create an `IR.Block` for each top level statement. This classifies calls to hooks and records what variable bindings are used as function inputs or going into JSX calls.
59 +4. `DumpIR` optionally records the IR in the compiler context for debugging purposes.
60 +5. `DepGraphAnalysis` collects dependencies for a React function into a `DepGraph.ValGraph` according to syntax-directed rules and analyzes the graph with graph algorithms like graph condensation and topological-orderred iteration.
61 +
62 +### Back End Passes
63 +
64 +1. `LIRGen` lowers `IR.Func` to `LIR.Func` which groups statements by their inputs into non-reactive or reactive blocks.
65 +2. `MemoCacheAlloc` allocates memo cache locations for change tracking and caching of intermediate values or outputs.
66 +3. `DumpLIR` optionally records the LIR in the compiler context for debugging purposes.
67 +4. `JSGen` the last step that actually modifies the Babel AST with the result of the LIR.
compiler/forget/CODE_OF_CONDUCT.md new
+80
@@ -0,0 +1,80 @@
1 +# Code of Conduct
2 +
3 +## Our Pledge
4 +
5 +In the interest of fostering an open and welcoming environment, we as
6 +contributors and maintainers pledge to make participation in our project and
7 +our community a harassment-free experience for everyone, regardless of age, body
8 +size, disability, ethnicity, sex characteristics, gender identity and expression,
9 +level of experience, education, socio-economic status, nationality, personal
10 +appearance, race, religion, or sexual identity and orientation.
11 +
12 +## Our Standards
13 +
14 +Examples of behavior that contributes to creating a positive environment
15 +include:
16 +
17 +- Using welcoming and inclusive language
18 +- Being respectful of differing viewpoints and experiences
19 +- Gracefully accepting constructive criticism
20 +- Focusing on what is best for the community
21 +- Showing empathy towards other community members
22 +
23 +Examples of unacceptable behavior by participants include:
24 +
25 +- The use of sexualized language or imagery and unwelcome sexual attention or
26 + advances
27 +- Trolling, insulting/derogatory comments, and personal or political attacks
28 +- Public or private harassment
29 +- Publishing others' private information, such as a physical or electronic
30 + address, without explicit permission
31 +- Other conduct which could reasonably be considered inappropriate in a
32 + professional setting
33 +
34 +## Our Responsibilities
35 +
36 +Project maintainers are responsible for clarifying the standards of acceptable
37 +behavior and are expected to take appropriate and fair corrective action in
38 +response to any instances of unacceptable behavior.
39 +
40 +Project maintainers have the right and responsibility to remove, edit, or
41 +reject comments, commits, code, wiki edits, issues, and other contributions
42 +that are not aligned to this Code of Conduct, or to ban temporarily or
43 +permanently any contributor for other behaviors that they deem inappropriate,
44 +threatening, offensive, or harmful.
45 +
46 +## Scope
47 +
48 +This Code of Conduct applies within all project spaces, and it also applies when
49 +an individual is representing the project or its community in public spaces.
50 +Examples of representing a project or community include using an official
51 +project e-mail address, posting via an official social media account, or acting
52 +as an appointed representative at an online or offline event. Representation of
53 +a project may be further defined and clarified by project maintainers.
54 +
55 +This Code of Conduct also applies outside the project spaces when there is a
56 +reasonable belief that an individual's behavior may have a negative impact on
57 +the project or its community.
58 +
59 +## Enforcement
60 +
61 +Instances of abusive, harassing, or otherwise unacceptable behavior may be
62 +reported by contacting the project team at <opensource-conduct@fb.com>. All
63 +complaints will be reviewed and investigated and will result in a response that
64 +is deemed necessary and appropriate to the circumstances. The project team is
65 +obligated to maintain confidentiality with regard to the reporter of an incident.
66 +Further details of specific enforcement policies may be posted separately.
67 +
68 +Project maintainers who do not follow or enforce the Code of Conduct in good
69 +faith may face temporary or permanent repercussions as determined by other
70 +members of the project's leadership.
71 +
72 +## Attribution
73 +
74 +This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4,
75 +available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html
76 +
77 +[homepage]: https://www.contributor-covenant.org
78 +
79 +For answers to common questions about this code of conduct, see
80 +https://www.contributor-covenant.org/faq
compiler/forget/CODING_STYLE.md new
+86
@@ -0,0 +1,86 @@
1 +# Coding Style
2 +
3 +## Naming
4 +
5 +### Abbrevations
6 +
7 +Abbrevations can be preferable over full name when it helps with making things
8 +stand out for recognition and code searching, e.g.
9 +
10 +1. when we naming a notion specific to us (e.g. `MemoCache`, `SCCGraph`).
11 +2. when it helps with avoid naming clash with 3rd-party libraries (e.g. Babel).
12 +3. when it forms a nice symmetry with its counter parts (e.g. `Val`/`Ref`).
13 +4. when it's canonical in the indursty/academia (e.g. `Def`/`Use`).
14 +5. when it helps with differentiating internal concepts, e.g. it's very common
15 + to name AST and IR a bit differently (alternatively, always use namespace).
16 +
17 +- `Val`: Value
18 +- `Ref`: Reference
19 +- `Stmt`: Statement
20 +- `Expr`: Expression
21 +- `Decl`: Declaration
22 +- `Func`: Function
23 +- `Param`: Parameter
24 +- `Ident`: Identifier
25 +
26 +- `Mut`: Mutable
27 +- `Immut`: Immutable
28 +
29 +- `Def`: Definition
30 +- `Use`: Uses
31 +- `Instr`: Instruction
32 +
33 +- `Dep`: Dependency
34 +- `Infer`: Inference
35 +- `Alloc`: Allocation
36 +- `Gen`: Generator
37 +
38 +## ADT vs Classes
39 +
40 +For trivial cases where ADT and classes are interchangble, classes are favorable
41 +due to its conciseness.
42 +
43 +For cases where some algebraic structures or type gynastics are needed
44 +(e.g. IR/LIR), the constraints of classes and subtyping can be a burden to work
45 +around so we prefer to use our own ADT-like encoding for its flexibility and
46 +extensibility.
47 +
48 +For instance, `IR.Val` is an ADT tagged by `ValKind`:
49 +
50 +1. It would have been more difficult to encode `InputVal` and `ReactiveVal` as
51 + types since they are defined upon refinements.
52 +2. It's impossible (or at least non-trivial and painful) to type things like
53 + `Val#reference`, `Ref<V>` and `ValAST<Val>` accurately with classes since
54 + things may not follow the subtyping rules (it may be possible, but painful,
55 + to manually annotate every variance carefully, which TS only recently add
56 + support, to get things type check). Instead, we have more freedom to define
57 + types for each variants. We can even pattern match on type parameter with
58 + [conditional types](https://www.typescriptlang.org/docs/handbook/2/conditional-types.html#handbook-content) to get pretty far to somewhere like [GADT](https://en.wikipedia.org/wiki/Generalized_algebraic_data_type).
59 +3. It offers more safety gurantees over `instanceof` by default unless you opted
60 + into visitor pattern which is also painful to write because it's closing at
61 + data axis instead of operation axis (see [Expresion Problem](https://wiki.c2.com/?ExpressionProblem)).
62 +
63 +N.B. The fact that we are not encoding ADT like [the way TS handbook suggested to encode discrinminated unions](https://www.typescriptlang.org/docs/handbook/typescript-in-5-minutes-func.html#discriminated-unions) but instead encoding it
64 +as a combination of `enum` + `interface` + factory functions is merely a mean to
65 +take some advantage of subtyping for more code sharing (e.g. the common part of
66 +`Val` variants are therefore extracted in `Val`).
67 +
68 +## Type Safety
69 +
70 +TBD
71 +
72 +## Test
73 +
74 +TBD
75 +
76 +## Format
77 +
78 +TBD
79 +
80 +## Commit Messages
81 +
82 +Add `[Tag]` to help with finding reviewers (Github tags are not visible everywhere)
83 +
84 +## Code Review
85 +
86 +TBD
compiler/forget/CONTRIBUTING.md new
+36
@@ -0,0 +1,36 @@
1 +# Contributing to react-forget
2 +
3 +We want to make contributing to this project as easy and transparent as
4 +possible.
5 +
6 +## Pull Requests
7 +
8 +We actively welcome your pull requests.
9 +
10 +1. Fork the repo and create your branch from `main`.
11 +2. If you've added code that should be tested, add tests.
12 +3. If you've changed APIs, update the documentation.
13 +4. Ensure the test suite passes.
14 +5. Make sure your code lints.
15 +6. If you haven't already, complete the Contributor License Agreement ("CLA").
16 +
17 +## Contributor License Agreement ("CLA")
18 +
19 +In order to accept your pull request, we need you to submit a CLA. You only need
20 +to do this once to work on any of Facebook's open source projects.
21 +
22 +Complete your CLA here: <https://code.facebook.com/cla>
23 +
24 +## Issues
25 +
26 +We use GitHub issues to track public bugs. Please ensure your description is
27 +clear and has sufficient instructions to be able to reproduce the issue.
28 +
29 +Facebook has a [bounty program](https://www.facebook.com/whitehat/) for the safe
30 +disclosure of security bugs. In those cases, please go through the process
31 +outlined on that page and do not file a public issue.
32 +
33 +## License
34 +
35 +By contributing to react-forget, you agree that your contributions will be licensed
36 +under the LICENSE file in the root directory of this source tree.
compiler/forget/LICENSE new
+21
@@ -0,0 +1,21 @@
1 +MIT License
2 +
3 +Copyright (c) Facebook, Inc. and its affiliates.
4 +
5 +Permission is hereby granted, free of charge, to any person obtaining a copy
6 +of this software and associated documentation files (the "Software"), to deal
7 +in the Software without restriction, including without limitation the rights
8 +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 +copies of the Software, and to permit persons to whom the Software is
10 +furnished to do so, subject to the following conditions:
11 +
12 +The above copyright notice and this permission notice shall be included in all
13 +copies or substantial portions of the Software.
14 +
15 +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 +SOFTWARE.
compiler/forget/README.md new
+35
@@ -0,0 +1,35 @@
1 +# React Forget
2 +
3 +React Forget is an experimental Babel plugin to automatically memoize React Hooks and Components.
4 +
5 +## Development
6 +
7 +```sh
8 +# tsc --watch
9 +$ yarn dev
10 +
11 +# in another terminal window
12 +$ yarn test --watch
13 +```
14 +
15 +## Notes
16 +
17 +An overview of the implementation can be found in the [Architecture Overview](./ARCHITECTURE.md).
18 +
19 +This transform
20 +
21 +- needs [plugin-syntax-jsx](https://babeljs.io/docs/en/babel-plugin-syntax-jsx) as a dependency to inherit the syntax from.
22 +- should be run before [plugin-transform-react-jsx](https://github.com/babel/babel/tree/main/packages/babel-plugin-transform-react-jsx)
23 +- assume the enforcement of [rules of hooks](https://reactjs.org/docs/hooks-rules.html), i.e.
24 + - only call hooks from React functions
25 + - only call hooks at the top level
26 + - <https://www.npmjs.com/package/eslint-plugin-react-hooks>
27 +
28 +Scaffolding
29 +
30 +- <https://github.com/facebook/flow/tree/master/packages/babel-plugin-transform-flow-enums>
31 +- <https://github.com/babel/babel/blob/main/packages/babel-plugin-transform-react-jsx/src/create-plugin.ts>
32 +
33 +Reference
34 +
35 +- [Babel Plugin Handbook](https://github.com/jamiebuilds/babel-handbook/blob/master/translations/en/plugin-handbook.md)
compiler/forget/jest.config.js new
+13
@@ -0,0 +1,13 @@
1 +/**
2 + * Copyright (c) Meta Platforms, Inc. and affiliates.
3 + *
4 + * This source code is licensed under the MIT license found in the
5 + * LICENSE file in the root directory of this source tree.
6 + */
7 +
8 +/** @type {import('jest').Config} */
9 +const config = {
10 + projects: ["<rootDir>/scripts/jest/*.config.js"],
11 +};
12 +
13 +module.exports = config;
compiler/forget/package.json new
+58
@@ -0,0 +1,58 @@
1 +{
2 + "name": "babel-plugin-react-forget",
3 + "version": "0.0.1",
4 + "description": "Babel plugin for React Forget.",
5 + "main": "dist/index.js",
6 + "license": "MIT",
7 + "files": [
8 + "src"
9 + ],
10 + "scripts": {
11 + "build": "tsc",
12 + "bundle:meta": "scripts/bundle-meta.sh",
13 + "dev": "concurrently \"yarn:build --watch\" \"yarn:playground\"",
14 + "playground": "cd packages/playground && yarn && yarn dev",
15 + "test": "yarn build && jest"
16 + },
17 + "repository": {
18 + "type": "git",
19 + "url": "git+https://github.com/huxpro/react-forget.git"
20 + },
21 + "dependencies": {
22 + "@babel/plugin-syntax-jsx": "^7.18.6",
23 + "invariant": "^2.2.4",
24 + "pretty-format": "^24"
25 + },
26 + "devDependencies": {
27 + "@babel/core": "^7.19.1",
28 + "@babel/generator": "^7.19.0",
29 + "@babel/plugin-syntax-typescript": "^7.18.6",
30 + "@babel/plugin-transform-block-scoping": "^7.18.9",
31 + "@babel/plugin-transform-modules-commonjs": "^7.18.6",
32 + "@babel/preset-react": "^7.18.6",
33 + "@babel/preset-typescript": "^7.18.6",
34 + "@babel/types": "^7.19.0",
35 + "@testing-library/react": "^13.4.0",
36 + "@tsconfig/node16-strictest": "^1.0.3",
37 + "@types/invariant": "^2.2.35",
38 + "@types/jest": "^29.0.3",
39 + "@types/node": "^18.7.18",
40 + "babel-jest": "^29.0.3",
41 + "concurrently": "^7.4.0",
42 + "jest": "^29.0.3",
43 + "jest-environment-jsdom": "^29.0.3",
44 + "prettier": "2.7.1",
45 + "react": "^18.2.0",
46 + "react-dom": "^18.2.0",
47 + "ts-jest": "^29.0.1",
48 + "ts-node": "^10.9.1",
49 + "typescript": "^4.8.3"
50 + },
51 + "resolutions": {
52 + "./**/@babel/parser": "7.7.4",
53 + "./**/@babel/types": "7.7.4",
54 + "@babel/core": "7.2.0",
55 + "@babel/generator": "7.2.0",
56 + "@babel/traverse": "7.1.6"
57 + }
58 +}
compiler/forget/packages/demo-2021Q3/.babelrc new
+3
@@ -0,0 +1,3 @@
1 +{
2 + "plugins": ["../../"]
3 +}
compiler/forget/packages/demo-2021Q3/.env new
+1
@@ -0,0 +1 @@
1 + SKIP_PREFLIGHT_CHECK=true
compiler/forget/packages/demo-2021Q3/.gitignore new
+21
@@ -0,0 +1,21 @@
1 +# dependencies
2 +/node_modules
3 +/.pnp
4 +.pnp.js
5 +
6 +# testing
7 +/coverage
8 +
9 +# production
10 +/build
11 +
12 +# misc
13 +.DS_Store
14 +.env.local
15 +.env.development.local
16 +.env.test.local
17 +.env.production.local
18 +
19 +npm-debug.log*
20 +yarn-debug.log*
21 +yarn-error.log*
compiler/forget/packages/demo-2021Q3/README.md new
+29
@@ -0,0 +1,29 @@
1 +# React Forget Demo - 2021 Q3
2 +
3 +[Google Slides (FB.com permission)](https://docs.google.com/presentation/d/1W4heHbak1GrfYQIJpUCMkn1g68z8ab3B_nIy7_ZXHI8/edit?usp=sharing)
4 +
5 +## Get Started
6 +
7 +This is a Create-React-App project.
8 +
9 +### Compile
10 +
11 +Currently the compilation is all ad-hoc
12 +
13 +1. Add your file in `run-forget.sh`
14 +
15 +2. Run the sh
16 +
17 +```
18 +# or npm run forget
19 +./run-forget.sh
20 +```
21 +
22 +### Measurement
23 +
24 +Currently, the measurement is done by manually
25 +
26 +1. Copy/Paste JSX lowered file
27 +2. add the file to `uglify_gzip.sh`
28 +3. run `uglify_gzip.sh`
29 +4. `ls -l`
compiler/forget/packages/demo-2021Q3/measurement/Demo2.babel.js new
+133
@@ -0,0 +1,133 @@
1 +import React, { createContext, useRef, useReducer, useContext } from "react";
2 +import "./styles.css";
3 +import { jsx as _jsx } from "react/jsx-runtime";
4 +import { jsxs as _jsxs } from "react/jsx-runtime";
5 +const initialStore = {
6 + left: undefined,
7 + right: undefined,
8 +};
9 +
10 +const reducer = (state, action) => {
11 + switch (action.tag) {
12 + case "left":
13 + return { ...state, left: action.payload };
14 +
15 + case "right":
16 + return { ...state, right: action.payload };
17 +
18 + default:
19 + return state;
20 + }
21 +};
22 +
23 +const BinaryContext = /*#__PURE__*/ createContext(initialStore);
24 +
25 +function Input({ value, onChange }) {
26 + return /*#__PURE__*/ _jsx("input", {
27 + className: "Search",
28 + placeholder: "...",
29 + value: value,
30 + onChange: onChange,
31 + });
32 +}
33 +
34 +function Left() {
35 + const [{ left }, dispatch] = useContext(BinaryContext);
36 + const rerenderCount = useRef(0);
37 + return /*#__PURE__*/ _jsxs("div", {
38 + className: "column Demo2",
39 + children: [
40 + /*#__PURE__*/ _jsxs("header", {
41 + className: "Header row",
42 + children: [
43 + /*#__PURE__*/ _jsx("div", {
44 + className: "Icon",
45 + children: "\u269B\uFE0F",
46 + }),
47 + /*#__PURE__*/ _jsx(Input, {
48 + value: left,
49 + onChange: (e) =>
50 + dispatch({
51 + tag: "left",
52 + payload: e.target.value,
53 + }),
54 + }),
55 + ],
56 + }),
57 + /*#__PURE__*/ _jsxs("div", {
58 + className: "Feed",
59 + children: [
60 + /*#__PURE__*/ _jsx("h3", {
61 + children: rerenderCount.current++,
62 + }),
63 + /*#__PURE__*/ _jsx("div", {
64 + className: "FeedItem",
65 + children: left,
66 + }),
67 + ],
68 + }),
69 + ],
70 + });
71 +}
72 +
73 +function Right() {
74 + const [{ right }, dispatch] = useContext(BinaryContext);
75 + const rerenderCount = useRef(0);
76 + return /*#__PURE__*/ _jsxs("div", {
77 + className: "column Demo2",
78 + children: [
79 + /*#__PURE__*/ _jsxs("header", {
80 + className: "Header row",
81 + children: [
82 + /*#__PURE__*/ _jsx("div", {
83 + className: "Icon",
84 + children: "\u269B\uFE0F",
85 + }),
86 + /*#__PURE__*/ _jsx(Input, {
87 + value: right,
88 + onChange: (e) =>
89 + dispatch({
90 + tag: "right",
91 + payload: e.target.value,
92 + }),
93 + }),
94 + ],
95 + }),
96 + /*#__PURE__*/ _jsxs("div", {
97 + className: "Feed",
98 + children: [
99 + /*#__PURE__*/ _jsx("h3", {
100 + children: rerenderCount.current++,
101 + }),
102 + /*#__PURE__*/ _jsx("div", {
103 + className: "FeedItem",
104 + children: right,
105 + }),
106 + ],
107 + }),
108 + ],
109 + });
110 +}
111 +
112 +export default function Demo2() {
113 + const [state, dispatch] = useReducer(reducer, initialStore);
114 + const store = [state, dispatch];
115 + return /*#__PURE__*/ _jsx(BinaryContext.Provider, {
116 + value: store,
117 + children: /*#__PURE__*/ _jsxs("div", {
118 + className: "App",
119 + children: [
120 + /*#__PURE__*/ _jsx("h2", {
121 + children: "Demo2 - Context",
122 + }),
123 + /*#__PURE__*/ _jsxs("div", {
124 + className: "row",
125 + children: [
126 + /*#__PURE__*/ _jsx(Left, {}),
127 + /*#__PURE__*/ _jsx(Right, {}),
128 + ],
129 + }),
130 + ],
131 + }),
132 + });
133 +}
compiler/forget/packages/demo-2021Q3/measurement/Demo2.forget.babel.js new
+181
@@ -0,0 +1,181 @@
1 +import { useMemoCache } from "./useMemoCache";
2 +import React, { createContext, useRef, useReducer, useContext } from "react";
3 +import "./styles.css";
4 +import { jsx as _jsx } from "react/jsx-runtime";
5 +import { jsxs as _jsxs } from "react/jsx-runtime";
6 +const initialStore = {
7 + left: undefined,
8 + right: undefined,
9 +};
10 +
11 +const reducer = (state, action) => {
12 + switch (action.tag) {
13 + case "left":
14 + return { ...state, left: action.payload };
15 +
16 + case "right":
17 + return { ...state, right: action.payload };
18 +
19 + default:
20 + return state;
21 + }
22 +};
23 +
24 +const BinaryContext = /*#__PURE__*/ createContext(initialStore);
25 +
26 +function Input(props) {
27 + let $ = useMemoCache(2);
28 + let prevProps = $[0];
29 + let c_props = !prevProps || prevProps !== props;
30 + if (c_props) $[0] = props;
31 + let c_value = c_props && prevProps.value !== props.value;
32 + let c_onChange = c_props && prevProps.onChange !== props.onChange;
33 + return c_value || c_onChange
34 + ? ($[1] = /*#__PURE__*/ _jsx("input", {
35 + className: "Search",
36 + placeholder: "...",
37 + value: props.value,
38 + onChange: props.onChange,
39 + }))
40 + : $[1];
41 +}
42 +
43 +function Left() {
44 + let $ = useMemoCache(9);
45 + const [{ left }, dispatch] = useContext(BinaryContext);
46 + let c_dispatch = $[2] !== dispatch;
47 + if (c_dispatch) $[2] = dispatch;
48 + let c_left = $[1] !== left;
49 + if (c_left) $[1] = left;
50 + const rerenderCount = useRef(0);
51 + return c_left || c_dispatch
52 + ? ($[8] = /*#__PURE__*/ _jsxs("div", {
53 + className: "column Demo2",
54 + children: [
55 + c_left || c_dispatch
56 + ? ($[5] = /*#__PURE__*/ _jsxs("header", {
57 + className: "Header row",
58 + children: [
59 + /*#__PURE__*/ _jsx("div", {
60 + className: "Icon",
61 + children: "\u269B\uFE0F",
62 + }),
63 + c_left || c_dispatch
64 + ? ($[4] = /*#__PURE__*/ _jsx(Input, {
65 + value: left,
66 + onChange: c_dispatch
67 + ? ($[3] = (e) =>
68 + dispatch({
69 + tag: "left",
70 + payload: e.target.value,
71 + }))
72 + : $[3],
73 + }))
74 + : $[4],
75 + ],
76 + }))
77 + : $[5],
78 + c_left
79 + ? ($[7] = /*#__PURE__*/ _jsxs("div", {
80 + className: "Feed",
81 + children: [
82 + /*#__PURE__*/ _jsx("h3", {
83 + children: rerenderCount.current++,
84 + }),
85 + c_left
86 + ? ($[6] = /*#__PURE__*/ _jsx("div", {
87 + className: "FeedItem",
88 + children: left,
89 + }))
90 + : $[6],
91 + ],
92 + }))
93 + : $[7],
94 + ],
95 + }))
96 + : $[8];
97 +}
98 +
99 +function Right() {
100 + let $ = useMemoCache(9);
101 + const [{ right }, dispatch] = useContext(BinaryContext);
102 + let c_dispatch = $[2] !== dispatch;
103 + if (c_dispatch) $[2] = dispatch;
104 + let c_right = $[1] !== right;
105 + if (c_right) $[1] = right;
106 + const rerenderCount = useRef(0);
107 + return c_right || c_dispatch
108 + ? ($[8] = /*#__PURE__*/ _jsxs("div", {
109 + className: "column Demo2",
110 + children: [
111 + c_right || c_dispatch
112 + ? ($[5] = /*#__PURE__*/ _jsxs("header", {
113 + className: "Header row",
114 + children: [
115 + /*#__PURE__*/ _jsx("div", {
116 + className: "Icon",
117 + children: "\u269B\uFE0F",
118 + }),
119 + c_right || c_dispatch
120 + ? ($[4] = /*#__PURE__*/ _jsx(Input, {
121 + value: right,
122 + onChange: c_dispatch
123 + ? ($[3] = (e) =>
124 + dispatch({
125 + tag: "right",
126 + payload: e.target.value,
127 + }))
128 + : $[3],
129 + }))
130 + : $[4],
131 + ],
132 + }))
133 + : $[5],
134 + c_right
135 + ? ($[7] = /*#__PURE__*/ _jsxs("div", {
136 + className: "Feed",
137 + children: [
138 + /*#__PURE__*/ _jsx("h3", {
139 + children: rerenderCount.current++,
140 + }),
141 + c_right
142 + ? ($[6] = /*#__PURE__*/ _jsx("div", {
143 + className: "FeedItem",
144 + children: right,
145 + }))
146 + : $[6],
147 + ],
148 + }))
149 + : $[7],
150 + ],
151 + }))
152 + : $[8];
153 +}
154 +
155 +export default function Demo2() {
156 + let $ = useMemoCache(4);
157 + const [state, dispatch] = useReducer(reducer, initialStore);
158 + let c_state = $[1] !== state;
159 + if (c_state) $[1] = state;
160 + const store = c_state ? ($[2] = [state, dispatch]) : $[2];
161 + return c_state
162 + ? ($[3] = /*#__PURE__*/ _jsx(BinaryContext.Provider, {
163 + value: store,
164 + children: /*#__PURE__*/ _jsxs("div", {
165 + className: "App",
166 + children: [
167 + /*#__PURE__*/ _jsx("h2", {
168 + children: "Demo2 - Context",
169 + }),
170 + /*#__PURE__*/ _jsxs("div", {
171 + className: "row",
172 + children: [
173 + /*#__PURE__*/ _jsx(Left, {}),
174 + /*#__PURE__*/ _jsx(Right, {}),
175 + ],
176 + }),
177 + ],
178 + }),
179 + }))
180 + : $[3];
181 +}
compiler/forget/packages/demo-2021Q3/measurement/Demo2.forget.min.js new
+1
@@ -0,0 +1 @@
1 +import{useMemoCache}from"./useMemoCache";import React,{createContext,useRef,useReducer,useContext}from"react";import"./styles.css";import{jsx as _jsx}from"react/jsx-runtime";import{jsxs as _jsxs}from"react/jsx-runtime";const initialStore={left:void 0,right:void 0},reducer=(e,t)=>{switch(t.tag){case"left":return{...e,left:t.payload};case"right":return{...e,right:t.payload};default:return e}},BinaryContext=createContext(initialStore);function Input(e){let t=useMemoCache(2);var a=t[0],s=!a||a!==e;s&&(t[0]=e);var r=s&&a.value!==e.value,a=s&&a.onChange!==e.onChange;return r||a?t[1]=_jsx("input",{className:"Search",placeholder:"...",value:e.value,onChange:e.onChange}):t[1]}function Left(){let e=useMemoCache(9);const[{left:t},a]=useContext(BinaryContext);var s=e[2]!==a;s&&(e[2]=a);var r=e[1]!==t;r&&(e[1]=t);const n=useRef(0);return r||s?e[8]=_jsxs("div",{className:"column Demo2",children:[r||s?e[5]=_jsxs("header",{className:"Header row",children:[_jsx("div",{className:"Icon",children:"⚛️"}),r||s?e[4]=_jsx(Input,{value:t,onChange:s?e[3]=e=>a({tag:"left",payload:e.target.value}):e[3]}):e[4]]}):e[5],r?e[7]=_jsxs("div",{className:"Feed",children:[_jsx("h3",{children:n.current++}),r?e[6]=_jsx("div",{className:"FeedItem",children:t}):e[6]]}):e[7]]}):e[8]}function Right(){let e=useMemoCache(9);const[{right:t},a]=useContext(BinaryContext);var s=e[2]!==a;s&&(e[2]=a);var r=e[1]!==t;r&&(e[1]=t);const n=useRef(0);return r||s?e[8]=_jsxs("div",{className:"column Demo2",children:[r||s?e[5]=_jsxs("header",{className:"Header row",children:[_jsx("div",{className:"Icon",children:"⚛️"}),r||s?e[4]=_jsx(Input,{value:t,onChange:s?e[3]=e=>a({tag:"right",payload:e.target.value}):e[3]}):e[4]]}):e[5],r?e[7]=_jsxs("div",{className:"Feed",children:[_jsx("h3",{children:n.current++}),r?e[6]=_jsx("div",{className:"FeedItem",children:t}):e[6]]}):e[7]]}):e[8]}export default function Demo2(){let e=useMemoCache(4);var[t,a]=useReducer(reducer,initialStore),s=e[1]!==t;s&&(e[1]=t);a=s?e[2]=[t,a]:e[2];return s?e[3]=_jsx(BinaryContext.Provider,{value:a,children:_jsxs("div",{className:"App",children:[_jsx("h2",{children:"Demo2 - Context"}),_jsxs("div",{className:"row",children:[_jsx(Left,{}),_jsx(Right,{})]})]})}):e[3]}
compiler/forget/packages/demo-2021Q3/measurement/Demo2.forget.min.js.gz
Binary files /dev/null and b/compiler/forget/packages/demo-2021Q3/measurement/Demo2.forget.min.js.gz differ
compiler/forget/packages/demo-2021Q3/measurement/Demo2.min.js new
+1
@@ -0,0 +1 @@
1 +import React,{createContext,useRef,useReducer,useContext}from"react";import"./styles.css";import{jsx as _jsx}from"react/jsx-runtime";import{jsxs as _jsxs}from"react/jsx-runtime";const initialStore={left:void 0,right:void 0},reducer=(e,t)=>{switch(t.tag){case"left":return{...e,left:t.payload};case"right":return{...e,right:t.payload};default:return e}},BinaryContext=createContext(initialStore);function Input({value:e,onChange:t}){return _jsx("input",{className:"Search",placeholder:"...",value:e,onChange:t})}function Left(){const[{left:e},t]=useContext(BinaryContext),s=useRef(0);return _jsxs("div",{className:"column Demo2",children:[_jsxs("header",{className:"Header row",children:[_jsx("div",{className:"Icon",children:"⚛️"}),_jsx(Input,{value:e,onChange:e=>t({tag:"left",payload:e.target.value})})]}),_jsxs("div",{className:"Feed",children:[_jsx("h3",{children:s.current++}),_jsx("div",{className:"FeedItem",children:e})]})]})}function Right(){const[{right:e},t]=useContext(BinaryContext),s=useRef(0);return _jsxs("div",{className:"column Demo2",children:[_jsxs("header",{className:"Header row",children:[_jsx("div",{className:"Icon",children:"⚛️"}),_jsx(Input,{value:e,onChange:e=>t({tag:"right",payload:e.target.value})})]}),_jsxs("div",{className:"Feed",children:[_jsx("h3",{children:s.current++}),_jsx("div",{className:"FeedItem",children:e})]})]})}export default function Demo2(){var[e,t]=useReducer(reducer,initialStore),t=[e,t];return _jsx(BinaryContext.Provider,{value:t,children:_jsxs("div",{className:"App",children:[_jsx("h2",{children:"Demo2 - Context"}),_jsxs("div",{className:"row",children:[_jsx(Left,{}),_jsx(Right,{})]})]})})}
compiler/forget/packages/demo-2021Q3/measurement/Demo2.min.js.gz
Binary files /dev/null and b/compiler/forget/packages/demo-2021Q3/measurement/Demo2.min.js.gz differ
compiler/forget/packages/demo-2021Q3/measurement/Feed.babel.js new
+39
@@ -0,0 +1,39 @@
1 +import React, { useRef } from "react";
2 +import { jsx as _jsx } from "react/jsx-runtime";
3 +import { jsxs as _jsxs } from "react/jsx-runtime";
4 +export function FeedItem({ data, onClick }) {
5 + const rerenderCount = useRef(0);
6 + return /*#__PURE__*/ _jsx("a", {
7 + href: `./item/${data.value}`,
8 + className: "FeedItem",
9 + onClick: onClick,
10 + children: rerenderCount.current++,
11 + });
12 +}
13 +export function Feed({ items }) {
14 + const rerenderCount = useRef(0);
15 +
16 + const onClick = (e) => {
17 + e.preventDefault();
18 + alert(e.target.href);
19 + };
20 +
21 + return /*#__PURE__*/ _jsxs("div", {
22 + className: "Feed",
23 + children: [
24 + /*#__PURE__*/ _jsx("h3", {
25 + children: rerenderCount.current++,
26 + }),
27 + items.map((item, index) =>
28 + /*#__PURE__*/ _jsx(
29 + FeedItem,
30 + {
31 + data: item,
32 + onClick: onClick,
33 + },
34 + index
35 + )
36 + ),
37 + ],
38 + });
39 +}
compiler/forget/packages/demo-2021Q3/measurement/Feed.forget.babel.js new
+57
@@ -0,0 +1,57 @@
1 +import { useMemoCache } from "./useMemoCache";
2 +import React, { useRef } from "react";
3 +import { jsx as _jsx } from "react/jsx-runtime";
4 +import { jsxs as _jsxs } from "react/jsx-runtime";
5 +export function FeedItem(props) {
6 + let $ = useMemoCache(2);
7 + let prevProps = $[0];
8 + let c_props = !prevProps || prevProps !== props;
9 + if (c_props) $[0] = props;
10 + let c_data = c_props && prevProps.data !== props.data;
11 + let c_onClick = c_props && prevProps.onClick !== props.onClick;
12 + const rerenderCount = useRef(0);
13 + return c_data || c_onClick
14 + ? ($[1] = /*#__PURE__*/ _jsx("a", {
15 + href: `./item/${props.data.value}`,
16 + className: "FeedItem",
17 + onClick: props.onClick,
18 + children: rerenderCount.current++,
19 + }))
20 + : $[1];
21 +}
22 +export function Feed(props) {
23 + let $ = useMemoCache(3);
24 + let prevProps = $[0];
25 + let c_props = !prevProps || prevProps !== props;
26 + if (c_props) $[0] = props;
27 + let c_items = c_props && prevProps.items !== props.items;
28 + const rerenderCount = useRef(0);
29 +
30 + const onClick =
31 + $[1] ||
32 + ($[1] = (e) => {
33 + e.preventDefault();
34 + alert(e.target.href);
35 + });
36 +
37 + return c_items
38 + ? ($[2] = /*#__PURE__*/ _jsxs("div", {
39 + className: "Feed",
40 + children: [
41 + /*#__PURE__*/ _jsx("h3", {
42 + children: rerenderCount.current++,
43 + }),
44 + props.items.map((item, index) =>
45 + /*#__PURE__*/ _jsx(
46 + FeedItem,
47 + {
48 + data: item,
49 + onClick: onClick,
50 + },
51 + index
52 + )
53 + ),
54 + ],
55 + }))
56 + : $[2];
57 +}
compiler/forget/packages/demo-2021Q3/measurement/Feed.forget.min.js new
+1
@@ -0,0 +1 @@
1 +import{useMemoCache}from"./useMemoCache";import React,{useRef}from"react";import{jsx as _jsx}from"react/jsx-runtime";import{jsxs as _jsxs}from"react/jsx-runtime";function FeedItem(e){let t=useMemoCache(2);var r=t[0],a=!r||r!==e;a&&(t[0]=e);var s=a&&r.data!==e.data,r=a&&r.onClick!==e.onClick;const m=useRef(0);return s||r?t[1]=_jsx("a",{href:`./item/${e.data.value}`,className:"FeedItem",onClick:e.onClick,children:m.current++}):t[1]}function Feed(e){let t=useMemoCache(3);var r=t[0],a=!r||r!==e;a&&(t[0]=e);r=a&&r.items!==e.items;const s=useRef(0),m=t[1]||(t[1]=e=>{e.preventDefault(),alert(e.target.href)});return r?t[2]=_jsxs("div",{className:"Feed",children:[_jsx("h3",{children:s.current++}),e.items.map((e,t)=>_jsx(FeedItem,{data:e,onClick:m},t))]}):t[2]}export{FeedItem,Feed};
compiler/forget/packages/demo-2021Q3/measurement/Feed.forget.min.js.gz
Binary files /dev/null and b/compiler/forget/packages/demo-2021Q3/measurement/Feed.forget.min.js.gz differ
compiler/forget/packages/demo-2021Q3/measurement/Feed.hook.babel.js new
+40
@@ -0,0 +1,40 @@
1 +import React, { useRef, useCallback } from "react";
2 +import { jsx as _jsx } from "react/jsx-runtime";
3 +import { jsxs as _jsxs } from "react/jsx-runtime";
4 +
5 +function FeedItem({ data, onClick }) {
6 + const rerenderCount = useRef(0);
7 + return /*#__PURE__*/ _jsx("a", {
8 + href: `./item/${data.value}`,
9 + className: "FeedItem",
10 + onClick: onClick,
11 + children: rerenderCount.current++,
12 + });
13 +}
14 +
15 +const FeedItemMemoized = /*#__PURE__*/ React.memo(FeedItem);
16 +export const Feed = /*#__PURE__*/ React.memo(({ items }) => {
17 + const rerenderCount = useRef(0);
18 + const onClick = useCallback((e) => {
19 + e.preventDefault();
20 + alert(e.target.href);
21 + }, []);
22 + return /*#__PURE__*/ _jsxs("div", {
23 + className: "Feed",
24 + children: [
25 + /*#__PURE__*/ _jsx("h3", {
26 + children: rerenderCount.current++,
27 + }),
28 + items.map((item, index) =>
29 + /*#__PURE__*/ _jsx(
30 + FeedItemMemoized,
31 + {
32 + data: item,
33 + onClick: onClick,
34 + },
35 + index
36 + )
37 + ),
38 + ],
39 + });
40 +});
compiler/forget/packages/demo-2021Q3/measurement/Feed.hook.min.js new
+1
@@ -0,0 +1 @@
1 +import React,{useRef,useCallback}from"react";import{jsx as _jsx}from"react/jsx-runtime";import{jsxs as _jsxs}from"react/jsx-runtime";function FeedItem({data:e,onClick:t}){const r=useRef(0);return _jsx("a",{href:`./item/${e.value}`,className:"FeedItem",onClick:t,children:r.current++})}const FeedItemMemoized=React.memo(FeedItem),Feed=React.memo(({items:e})=>{const t=useRef(0),r=useCallback(e=>{e.preventDefault(),alert(e.target.href)},[]);return _jsxs("div",{className:"Feed",children:[_jsx("h3",{children:t.current++}),e.map((e,t)=>_jsx(FeedItemMemoized,{data:e,onClick:r},t))]})});export{Feed};
compiler/forget/packages/demo-2021Q3/measurement/Feed.hook.min.js.gz
Binary files /dev/null and b/compiler/forget/packages/demo-2021Q3/measurement/Feed.hook.min.js.gz differ
compiler/forget/packages/demo-2021Q3/measurement/Feed.min.js new
+1
@@ -0,0 +1 @@
1 +import React,{useRef}from"react";import{jsx as _jsx}from"react/jsx-runtime";import{jsxs as _jsxs}from"react/jsx-runtime";function FeedItem({data:e,onClick:t}){const r=useRef(0);return _jsx("a",{href:`./item/${e.value}`,className:"FeedItem",onClick:t,children:r.current++})}function Feed({items:e}){const t=useRef(0),r=e=>{e.preventDefault(),alert(e.target.href)};return _jsxs("div",{className:"Feed",children:[_jsx("h3",{children:t.current++}),e.map((e,t)=>_jsx(FeedItem,{data:e,onClick:r},t))]})}export{FeedItem,Feed};
compiler/forget/packages/demo-2021Q3/measurement/Feed.min.js.gz
Binary files /dev/null and b/compiler/forget/packages/demo-2021Q3/measurement/Feed.min.js.gz differ
compiler/forget/packages/demo-2021Q3/measurement/uglify_gzip.sh new
+12
@@ -0,0 +1,12 @@
1 +uglifyjs --compress --mangle -- Feed.babel.js > Feed.min.js
2 +uglifyjs --compress --mangle -- Feed.hook.babel.js > Feed.hook.min.js
3 +uglifyjs --compress --mangle -- Feed.forget.babel.js > Feed.forget.min.js
4 +
5 +uglifyjs --compress --mangle -- Demo2.babel.js > Demo2.min.js
6 +uglifyjs --compress --mangle -- Demo2.forget.babel.js > Demo2.forget.min.js
7 +
8 +gzip -k Feed.min.js
9 +gzip -k Feed.hook.min.js
10 +gzip -k Feed.forget.min.js
11 +gzip -k Demo2.min.js
12 +gzip -k Demo2.forget.min.js
compiler/forget/packages/demo-2021Q3/package.json new
+35
@@ -0,0 +1,35 @@
1 +{
2 + "name": "react",
3 + "version": "1.0.0",
4 + "description": "React example starter project",
5 + "keywords": [
6 + "react",
7 + "starter"
8 + ],
9 + "main": "src/index.js",
10 + "dependencies": {
11 + "react": "17.0.2",
12 + "react-dom": "17.0.2",
13 + "react-scripts": "4.0.0",
14 + "uglify-js": "^3.14.2"
15 + },
16 + "devDependencies": {
17 + "@babel/cli": "^7.15.7",
18 + "@babel/core": "^7.15.5",
19 + "@babel/runtime": "7.13.8",
20 + "typescript": "4.1.3"
21 + },
22 + "scripts": {
23 + "start": "react-scripts start",
24 + "build": "react-scripts build",
25 + "test": "react-scripts test --env=jsdom",
26 + "eject": "react-scripts eject",
27 + "forget": "./run-forget.sh"
28 + },
29 + "browserslist": [
30 + ">0.2%",
31 + "not dead",
32 + "not ie <= 11",
33 + "not op_mini all"
34 + ]
35 +}
compiler/forget/packages/demo-2021Q3/public/index.html new
+43
@@ -0,0 +1,43 @@
1 +<!DOCTYPE html>
2 +<html lang="en">
3 +
4 +<head>
5 + <meta charset="utf-8">
6 + <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
7 + <meta name="theme-color" content="#000000">
8 + <!--
9 + manifest.json provides metadata used when your web app is added to the
10 + homescreen on Android. See https://developers.google.com/web/fundamentals/engage-and-retain/web-app-manifest/
11 + -->
12 + <link rel="manifest" href="%PUBLIC_URL%/manifest.json">
13 + <link rel="shortcut icon" href="%PUBLIC_URL%/favicon.ico">
14 + <!--
15 + Notice the use of %PUBLIC_URL% in the tags above.
16 + It will be replaced with the URL of the `public` folder during the build.
17 + Only files inside the `public` folder can be referenced from the HTML.
18 +
19 + Unlike "/favicon.ico" or "favicon.ico", "%PUBLIC_URL%/favicon.ico" will
20 + work correctly both with client-side routing and a non-root public URL.
21 + Learn how to configure a non-root public URL by running `npm run build`.
22 + -->
23 + <title>React App</title>
24 +</head>
25 +
26 +<body>
27 + <noscript>
28 + You need to enable JavaScript to run this app.
29 + </noscript>
30 + <div id="root"></div>
31 + <!--
32 + This HTML file is a template.
33 + If you open it directly in the browser, you will see an empty page.
34 +
35 + You can add webfonts, meta tags, or analytics to this file.
36 + The build step will place the bundled scripts into the <body> tag.
37 +
38 + To begin the development, run `npm start` or `yarn start`.
39 + To create a production bundle, use `npm run build` or `yarn build`.
40 + -->
41 +</body>
42 +
43 +</html>
\ No newline at end of file
compiler/forget/packages/demo-2021Q3/run-forget.sh new
+14
@@ -0,0 +1,14 @@
1 +# this is so temporary otherwise we should use a makefile or at least a loop?
2 +
3 +npx babel src/Feed.js --out-file src/Feed.forget.js
4 +
5 +echo "import { useMemoCache } from \"./useMemoCache\"; \n$(cat src/Feed.forget.js)" > src/Feed.forget.js
6 +
7 +
8 +npx babel src/Demo1.js --out-file src/Demo1.forget.js
9 +
10 +echo "import { useMemoCache } from \"./useMemoCache\"; \n$(cat src/Demo1.forget.js)" > src/Demo1.forget.js
11 +
12 +npx babel src/Demo2.js --out-file src/Demo2.forget.js
13 +
14 +echo "import { useMemoCache } from \"./useMemoCache\"; \n$(cat src/Demo2.forget.js)" > src/Demo2.forget.js
compiler/forget/packages/demo-2021Q3/src/App.js new
+15
@@ -0,0 +1,15 @@
1 +import Demo1 from "./Demo1";
2 +import Demo1Forget from "./Demo1.forget.js";
3 +import Demo2 from "./Demo2";
4 +import Demo2Forget from "./Demo2.forget.js";
5 +
6 +export default function App() {
7 + return (
8 + <>
9 + <Demo1 />
10 + {/* <Demo1Forget /> */}
11 + {/* <Demo2 /> */}
12 + {/* <Demo2Forget /> */}
13 + </>
14 + );
15 +}
compiler/forget/packages/demo-2021Q3/src/Demo1.forget.js new
+64
@@ -0,0 +1,64 @@
1 +import { useMemoCache } from "./useMemoCache";
2 +import React, { useState } from "react";
3 +import "./styles.css";
4 +import * as Feed from "./Feed";
5 +import * as FeedMemoized from "./FeedMemoized";
6 +import * as FeedForget from "./Feed.forget.js";
7 +const mockServer = {
8 + usePaginatedData() {
9 + let $ = useMemoCache(3);
10 + let [data, setData] = useState([]);
11 + let c_data = $[1] !== data;
12 + if (c_data) $[1] = data;
13 + const loadNext = c_data ? $[2] = num => {
14 + let newData = new Array(num).fill(0).map((_, idx) => ({
15 + value: data.length + idx
16 + }));
17 + setData([...data, ...newData]);
18 + } : $[2];
19 + return {
20 + data,
21 + loadNext
22 + };
23 + }
24 +
25 +};
26 +export default function Demo1() {
27 + let $ = useMemoCache(17);
28 + let [text, setText] = useState("");
29 + let c_text = $[1] !== text;
30 + if (c_text) $[1] = text;
31 + let {
32 + data,
33 + loadNext
34 + } = mockServer.usePaginatedData();
35 + let c_loadNext = $[3] !== loadNext;
36 + if (c_loadNext) $[3] = loadNext;
37 + let c_data = $[2] !== data;
38 + if (c_data) $[2] = data;
39 + return c_text || c_loadNext || c_data ? $[16] = <div className="App">
40 + <h2>Demo1 - Feeds</h2>
41 + {c_text || c_loadNext ? $[8] = <header className="Header row">
42 + <div className="Icon">⚛️</div>
43 + {
44 + /* TODO: no need to memo for host component? */
45 + }
46 + {c_text ? $[5] = <input className="Search" placeholder="Search" value={text} onChange={$[4] || ($[4] = e => setText(e.target.value))} /> : $[5]}
47 + {c_loadNext ? $[7] = <button className="Load" onClick={c_loadNext ? $[6] = e => loadNext(1) : $[6]}>
48 + 🎲
49 + </button> : $[7]}
50 + </header> : $[8]}
51 +
52 + {c_data ? $[15] = <div className="Feeds row">
53 + {c_data ? $[10] = <div className="column">
54 + {c_data ? $[9] = <Feed.Feed items={data} /> : $[9]}
55 + </div> : $[10]}
56 + {c_data ? $[12] = <div className="column">
57 + {c_data ? $[11] = <FeedMemoized.Feed items={data} /> : $[11]}
58 + </div> : $[12]}
59 + {c_data ? $[14] = <div className="column">
60 + {c_data ? $[13] = <FeedForget.Feed items={data} /> : $[13]}
61 + </div> : $[14]}
62 + </div> : $[15]}
63 + </div> : $[16];
64 +}
compiler/forget/packages/demo-2021Q3/src/Demo1.js new
+57
@@ -0,0 +1,57 @@
1 +import React, { useState } from "react";
2 +import "./styles.css";
3 +import * as Feed from "./Feed";
4 +import * as FeedMemoized from "./FeedMemoized";
5 +import * as FeedForget from "./Feed.forget.js";
6 +
7 +const mockServer = {
8 + usePaginatedData() {
9 + let [data, setData] = useState([]);
10 +
11 + const loadNext = (num) => {
12 + let newData = new Array(num)
13 + .fill(0)
14 + .map((_, idx) => ({ value: data.length + idx }));
15 +
16 + setData([...data, ...newData]);
17 + };
18 +
19 + return { data, loadNext };
20 + },
21 +};
22 +
23 +export default function Demo1() {
24 + let [text, setText] = useState("");
25 + let { data, loadNext } = mockServer.usePaginatedData();
26 +
27 + return (
28 + <div className="App">
29 + <h2>Demo1 - Feeds</h2>
30 + <header className="Header row">
31 + <div className="Icon">⚛️</div>
32 + {/* TODO: no need to memo for host component? */}
33 + <input
34 + className="Search"
35 + placeholder="Search"
36 + value={text}
37 + onChange={(e) => setText(e.target.value)}
38 + />
39 + <button className="Load" onClick={(e) => loadNext(1)}>
40 + 🎲
41 + </button>
42 + </header>
43 +
44 + <div className="Feeds row">
45 + <div className="column">
46 + <Feed.Feed items={data} />
47 + </div>
48 + <div className="column">
49 + <FeedMemoized.Feed items={data} />
50 + </div>
51 + <div className="column">
52 + <FeedForget.Feed items={data} />
53 + </div>
54 + </div>
55 + </div>
56 + );
57 +}
compiler/forget/packages/demo-2021Q3/src/Demo2.forget.js new
+104
@@ -0,0 +1,104 @@
1 +import { useMemoCache } from "./useMemoCache";
2 +import React, { createContext, useRef, useReducer, useContext } from "react";
3 +import "./styles.css";
4 +const initialStore = {
5 + left: undefined,
6 + right: undefined
7 +};
8 +
9 +const reducer = (state, action) => {
10 + switch (action.tag) {
11 + case "left":
12 + return { ...state,
13 + left: action.payload
14 + };
15 +
16 + case "right":
17 + return { ...state,
18 + right: action.payload
19 + };
20 +
21 + default:
22 + return state;
23 + }
24 +};
25 +
26 +const BinaryContext = createContext(initialStore);
27 +
28 +function Input(props) {
29 + let $ = useMemoCache(2);
30 + let prevProps = $[0];
31 + let c_props = !prevProps || prevProps !== props;
32 + if (c_props) $[0] = props;
33 + let c_value = c_props && prevProps.value !== props.value;
34 + let c_onChange = c_props && prevProps.onChange !== props.onChange;
35 + return c_value || c_onChange ? $[1] = <input className="Search" placeholder="..." value={props.value} onChange={props.onChange} /> : $[1];
36 +}
37 +
38 +function Left() {
39 + let $ = useMemoCache(9);
40 + const [{
41 + left
42 + }, dispatch] = useContext(BinaryContext);
43 + let c_dispatch = $[2] !== dispatch;
44 + if (c_dispatch) $[2] = dispatch;
45 + let c_left = $[1] !== left;
46 + if (c_left) $[1] = left;
47 + const rerenderCount = useRef(0);
48 + return c_left || c_dispatch ? $[8] = <div className="column Demo2">
49 + {c_left || c_dispatch ? $[5] = <header className="Header row">
50 + <div className="Icon">⚛️</div>
51 + {c_left || c_dispatch ? $[4] = <Input value={left} onChange={c_dispatch ? $[3] = e => dispatch({
52 + tag: "left",
53 + payload: e.target.value
54 + }) : $[3]} /> : $[4]}
55 + </header> : $[5]}
56 + {c_left ? $[7] = <div className="Feed">
57 + <h3>{rerenderCount.current++}</h3>
58 + {c_left ? $[6] = <div className="FeedItem">{left}</div> : $[6]}
59 + </div> : $[7]}
60 + </div> : $[8];
61 +}
62 +
63 +function Right() {
64 + let $ = useMemoCache(9);
65 + const [{
66 + right
67 + }, dispatch] = useContext(BinaryContext);
68 + let c_dispatch = $[2] !== dispatch;
69 + if (c_dispatch) $[2] = dispatch;
70 + let c_right = $[1] !== right;
71 + if (c_right) $[1] = right;
72 + const rerenderCount = useRef(0);
73 + return c_right || c_dispatch ? $[8] = <div className="column Demo2">
74 + {c_right || c_dispatch ? $[5] = <header className="Header row">
75 + <div className="Icon">⚛️</div>
76 + {c_right || c_dispatch ? $[4] = <Input value={right} onChange={c_dispatch ? $[3] = e => dispatch({
77 + tag: "right",
78 + payload: e.target.value
79 + }) : $[3]} /> : $[4]}
80 + </header> : $[5]}
81 + {c_right ? $[7] = <div className="Feed">
82 + <h3>{rerenderCount.current++}</h3>
83 + {c_right ? $[6] = <div className="FeedItem">{right}</div> : $[6]}
84 + </div> : $[7]}
85 + </div> : $[8];
86 +}
87 +
88 +export default function Demo2() {
89 + let $ = useMemoCache(4);
90 + const [state, dispatch] = useReducer(reducer, initialStore);
91 + let c_state = $[1] !== state;
92 + if (c_state) $[1] = state;
93 + const store = c_state ? $[2] = [state, dispatch] : $[2]; // const store = React.useMemo(() => [state, dispatch], [state]);
94 +
95 + return c_state ? $[3] = <BinaryContext.Provider value={store}>
96 + <div className="App">
97 + <h2>Demo2 - Context</h2>
98 + <div className="row">
99 + <Left />
100 + <Right />
101 + </div>
102 + </div>
103 + </BinaryContext.Provider> : $[3];
104 +}
compiler/forget/packages/demo-2021Q3/src/Demo2.js new
+89
@@ -0,0 +1,89 @@
1 +import React, { createContext, useRef, useReducer, useContext } from "react";
2 +import "./styles.css";
3 +
4 +const initialStore = {
5 + left: undefined,
6 + right: undefined,
7 +};
8 +
9 +const reducer = (state, action) => {
10 + switch (action.tag) {
11 + case "left":
12 + return { ...state, left: action.payload };
13 + case "right":
14 + return { ...state, right: action.payload };
15 + default:
16 + return state;
17 + }
18 +};
19 +
20 +const BinaryContext = createContext(initialStore);
21 +
22 +function Input({ value, onChange }) {
23 + return (
24 + <input
25 + className="Search"
26 + placeholder="..."
27 + value={value}
28 + onChange={onChange}
29 + />
30 + );
31 +}
32 +
33 +function Left() {
34 + const [{ left }, dispatch] = useContext(BinaryContext);
35 + const rerenderCount = useRef(0);
36 + return (
37 + <div className="column Demo2">
38 + <header className="Header row">
39 + <div className="Icon">⚛️</div>
40 + <Input
41 + value={left}
42 + onChange={(e) => dispatch({ tag: "left", payload: e.target.value })}
43 + />
44 + </header>
45 + <div className="Feed">
46 + <h3>{rerenderCount.current++}</h3>
47 + <div className="FeedItem">{left}</div>
48 + </div>
49 + </div>
50 + );
51 +}
52 +
53 +function Right() {
54 + const [{ right }, dispatch] = useContext(BinaryContext);
55 + const rerenderCount = useRef(0);
56 + return (
57 + <div className="column Demo2">
58 + <header className="Header row">
59 + <div className="Icon">⚛️</div>
60 + <Input
61 + value={right}
62 + onChange={(e) => dispatch({ tag: "right", payload: e.target.value })}
63 + />
64 + </header>
65 + <div className="Feed">
66 + <h3>{rerenderCount.current++}</h3>
67 + <div className="FeedItem">{right}</div>
68 + </div>
69 + </div>
70 + );
71 +}
72 +
73 +export default function Demo2() {
74 + const [state, dispatch] = useReducer(reducer, initialStore);
75 + const store = [state, dispatch];
76 + // const store = React.useMemo(() => [state, dispatch], [state]);
77 +
78 + return (
79 + <BinaryContext.Provider value={store}>
80 + <div className="App">
81 + <h2>Demo2 - Context</h2>
82 + <div className="row">
83 + <Left />
84 + <Right />
85 + </div>
86 + </div>
87 + </BinaryContext.Provider>
88 + );
89 +}
compiler/forget/packages/demo-2021Q3/src/Feed.forget.js new
+34
@@ -0,0 +1,34 @@
1 +import { useMemoCache } from "./useMemoCache";
2 +import React, { useRef } from "react";
3 +
4 +function FeedItem(props) {
5 + let $ = useMemoCache(2);
6 + let prevProps = $[0];
7 + let c_props = !prevProps || prevProps !== props;
8 + if (c_props) $[0] = props;
9 + let c_data = c_props && prevProps.data !== props.data;
10 + let c_onClick = c_props && prevProps.onClick !== props.onClick;
11 + const rerenderCount = useRef(0);
12 + return c_data || c_onClick ? $[1] = <a href={`./item/${props.data.value}`} className="FeedItem" onClick={props.onClick}>
13 + {rerenderCount.current++}
14 + </a> : $[1];
15 +}
16 +
17 +export function Feed(props) {
18 + let $ = useMemoCache(3);
19 + let prevProps = $[0];
20 + let c_props = !prevProps || prevProps !== props;
21 + if (c_props) $[0] = props;
22 + let c_items = c_props && prevProps.items !== props.items;
23 + const rerenderCount = useRef(0);
24 +
25 + const onClick = $[1] || ($[1] = e => {
26 + e.preventDefault();
27 + alert(e.target.href);
28 + });
29 +
30 + return c_items ? $[2] = <div className="Feed">
31 + <h3>{rerenderCount.current++}</h3>
32 + {props.items.map((item, index) => <FeedItem key={index} data={item} onClick={onClick} />)}
33 + </div> : $[2];
34 +}
compiler/forget/packages/demo-2021Q3/src/Feed.js new
+28
@@ -0,0 +1,28 @@
1 +import React, { useRef } from "react";
2 +
3 +function FeedItem({ data, onClick }) {
4 + const rerenderCount = useRef(0);
5 +
6 + return (
7 + <a href={`./item/${data.value}`} className="FeedItem" onClick={onClick}>
8 + {rerenderCount.current++}
9 + </a>
10 + );
11 +}
12 +
13 +export function Feed({ items }) {
14 + const rerenderCount = useRef(0);
15 + const onClick = (e) => {
16 + e.preventDefault();
17 + alert(e.target.href);
18 + };
19 +
20 + return (
21 + <div className="Feed">
22 + <h3>{rerenderCount.current++}</h3>
23 + {items.map((item, index) => (
24 + <FeedItem key={index} data={item} onClick={onClick} />
25 + ))}
26 + </div>
27 + );
28 +}
compiler/forget/packages/demo-2021Q3/src/FeedMemoized.js new
+30
@@ -0,0 +1,30 @@
1 +import React, { useRef, useCallback } from "react";
2 +
3 +function FeedItem({ data, onClick }) {
4 + const rerenderCount = useRef(0);
5 +
6 + return (
7 + <a href={`./item/${data.value}`} className="FeedItem" onClick={onClick}>
8 + {rerenderCount.current++}
9 + </a>
10 + );
11 +}
12 +const FeedItemMemoized = React.memo(FeedItem);
13 +
14 +export const Feed = React.memo(({ items }) => {
15 + const rerenderCount = useRef(0);
16 +
17 + const onClick = useCallback((e) => {
18 + e.preventDefault();
19 + alert(e.target.href);
20 + }, []);
21 +
22 + return (
23 + <div className="Feed">
24 + <h3>{rerenderCount.current++}</h3>
25 + {items.map((item, index) => (
26 + <FeedItemMemoized key={index} data={item} onClick={onClick} />
27 + ))}
28 + </div>
29 + );
30 +});
compiler/forget/packages/demo-2021Q3/src/index.js new
+12
@@ -0,0 +1,12 @@
1 +import { StrictMode } from "react";
2 +import ReactDOM from "react-dom";
3 +
4 +import App from "./App";
5 +
6 +const rootElement = document.getElementById("root");
7 +ReactDOM.render(
8 + <StrictMode>
9 + <App />
10 + </StrictMode>,
11 + rootElement
12 +);
compiler/forget/packages/demo-2021Q3/src/styles.css new
+99
@@ -0,0 +1,99 @@
1 +body {
2 + background-color: #f0f2f5;
3 + padding: 0;
4 + margin: 0;
5 +}
6 +
7 +.App {
8 + font-family: -apple-system, BlinkMacSystemFont;
9 + text-align: center;
10 +}
11 +
12 +.Header {
13 + box-sizing: border-box;
14 + position: fixed;
15 + width: 100%;
16 + height: 72px;
17 + line-height: 72px;
18 + background-color: white;
19 + padding: 0 12px;
20 +}
21 +
22 +.Demo2 {
23 + padding: 16px;
24 +}
25 +
26 +.Demo2 .Header {
27 + position: relative;
28 +}
29 +
30 +.Demo2 .Feeds {
31 + padding-top: 16px;
32 +}
33 +
34 +.Feeds {
35 + padding: 16px;
36 + padding-top: 72px;
37 +}
38 +
39 +.Icon {
40 + font-size: 2em;
41 + font-weight: 800;
42 + margin: 0 12px;
43 +}
44 +
45 +.Search {
46 + flex: 1;
47 + padding: 16px;
48 + margin: 12px;
49 + border-radius: 50px;
50 + outline: none;
51 + border: none;
52 + background-color: rgb(240, 242, 245);
53 +}
54 +
55 +.Load {
56 + margin: 12px;
57 + width: 48px;
58 + height: 48px;
59 + border-radius: 50%;
60 + outline: none;
61 + border: none;
62 + background-color: rgb(240, 242, 245);
63 +}
64 +
65 +.Feed {
66 + padding: 16px;
67 +}
68 +
69 +.FeedItem {
70 + display: block;
71 + width: 100%;
72 + height: 64px;
73 + line-height: 64px;
74 + background-color: rgb(14, 165, 233);
75 + color: white;
76 + border-radius: 6px;
77 + font-weight: 900;
78 + margin-bottom: 16px;
79 +}
80 +
81 +.FeedItem.large {
82 + height: 80px;
83 + line-height: 80px;
84 +}
85 +
86 +.FeedItem.small {
87 + height: 64px;
88 + line-height: 64px;
89 +}
90 +
91 +.row {
92 + display: flex;
93 +}
94 +
95 +.column {
96 + display: flex;
97 + flex-direction: column;
98 + flex: 1;
99 +}
compiler/forget/packages/demo-2021Q3/src/useMemoCache.js new
+8
@@ -0,0 +1,8 @@
1 +import { useRef } from "react";
2 +
3 +const placeholder = NaN;
4 +
5 +export function useMemoCache(i) {
6 + const ref = useRef(new Array(i).fill(placeholder));
7 + return ref.current;
8 +}
compiler/forget/packages/demo-2021Q3/yarn.lock new
+11861
@@ -0,0 +1,11861 @@
1 +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
2 +# yarn lockfile v1
3 +
4 +
5 +"@babel/cli@^7.15.7":
6 + "integrity" "sha512-YW5wOprO2LzMjoWZ5ZG6jfbY9JnkDxuHDwvnrThnuYtByorova/I0HNXJedrUfwuXFQfYOjcqDA4PU3qlZGZjg=="
7 + "resolved" "https://registry.npmjs.org/@babel/cli/-/cli-7.15.7.tgz"
8 + "version" "7.15.7"
9 + dependencies:
10 + "commander" "^4.0.1"
11 + "convert-source-map" "^1.1.0"
12 + "fs-readdir-recursive" "^1.1.0"
13 + "glob" "^7.0.0"
14 + "make-dir" "^2.1.0"
15 + "slash" "^2.0.0"
16 + "source-map" "^0.5.0"
17 + optionalDependencies:
18 + "@nicolo-ribaudo/chokidar-2" "2.1.8-no-fsevents.3"
19 + "chokidar" "^3.4.0"
20 +
21 +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.14.5", "@babel/code-frame@^7.5.5":
22 + "integrity" "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw=="
23 + "resolved" "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.14.5.tgz"
24 + "version" "7.14.5"
25 + dependencies:
26 + "@babel/highlight" "^7.14.5"
27 +
28 +"@babel/code-frame@7.10.4":
29 + "integrity" "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg=="
30 + "resolved" "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.10.4.tgz"
31 + "version" "7.10.4"
32 + dependencies:
33 + "@babel/highlight" "^7.10.4"
34 +
35 +"@babel/code-frame@7.12.11":
36 + "integrity" "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw=="
37 + "resolved" "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.12.11.tgz"
38 + "version" "7.12.11"
39 + dependencies:
40 + "@babel/highlight" "^7.10.4"
41 +
42 +"@babel/compat-data@^7.12.1", "@babel/compat-data@^7.13.11", "@babel/compat-data@^7.15.0":
43 + "integrity" "sha512-0NqAC1IJE0S0+lL1SWFMxMkz1pKCNCjI4tr2Zx4LJSXxCLAdr6KyArnY+sno5m3yH9g737ygOyPABDsnXkpxiA=="
44 + "resolved" "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.15.0.tgz"
45 + "version" "7.15.0"
46 +
47 +"@babel/core@^7.0.0", "@babel/core@^7.0.0-0", "@babel/core@^7.1.0", "@babel/core@^7.12.0", "@babel/core@^7.12.3", "@babel/core@^7.13.0", "@babel/core@^7.15.5", "@babel/core@^7.4.0-0", "@babel/core@^7.7.5", "@babel/core@^7.8.4", "@babel/core@^7.9.0", "@babel/core@7 || ^7.0.0-rc.2":
48 + "integrity" "sha512-pYgXxiwAgQpgM1bNkZsDEq85f0ggXMA5L7c+o3tskGMh2BunCI9QUwB9Z4jpvXUOuMdyGKiGKQiRe11VS6Jzvg=="
49 + "resolved" "https://registry.yarnpkg.com/@babel/core/-/core-7.15.5.tgz"
50 + "version" "7.15.5"
51 + dependencies:
52 + "@babel/code-frame" "^7.14.5"
53 + "@babel/generator" "^7.15.4"
54 + "@babel/helper-compilation-targets" "^7.15.4"
55 + "@babel/helper-module-transforms" "^7.15.4"
56 + "@babel/helpers" "^7.15.4"
57 + "@babel/parser" "^7.15.5"
58 + "@babel/template" "^7.15.4"
59 + "@babel/traverse" "^7.15.4"
60 + "@babel/types" "^7.15.4"
61 + "convert-source-map" "^1.7.0"
62 + "debug" "^4.1.0"
63 + "gensync" "^1.0.0-beta.2"
64 + "json5" "^2.1.2"
65 + "semver" "^6.3.0"
66 + "source-map" "^0.5.0"
67 +
68 +"@babel/core@7.12.3":
69 + "integrity" "sha512-0qXcZYKZp3/6N2jKYVxZv0aNCsxTSVCiK72DTiTYZAu7sjg73W0/aynWjMbiGd87EQL4WyA8reiJVh92AVla9g=="
70 + "resolved" "https://registry.yarnpkg.com/@babel/core/-/core-7.12.3.tgz"
71 + "version" "7.12.3"
72 + dependencies:
73 + "@babel/code-frame" "^7.10.4"
74 + "@babel/generator" "^7.12.1"
75 + "@babel/helper-module-transforms" "^7.12.1"
76 + "@babel/helpers" "^7.12.1"
77 + "@babel/parser" "^7.12.3"
78 + "@babel/template" "^7.10.4"
79 + "@babel/traverse" "^7.12.1"
80 + "@babel/types" "^7.12.1"
81 + "convert-source-map" "^1.7.0"
82 + "debug" "^4.1.0"
83 + "gensync" "^1.0.0-beta.1"
84 + "json5" "^2.1.2"
85 + "lodash" "^4.17.19"
86 + "resolve" "^1.3.2"
87 + "semver" "^5.4.1"
88 + "source-map" "^0.5.0"
89 +
90 +"@babel/generator@^7.12.1", "@babel/generator@^7.15.4":
91 + "integrity" "sha512-d3itta0tu+UayjEORPNz6e1T3FtvWlP5N4V5M+lhp/CxT4oAA7/NcScnpRyspUMLK6tu9MNHmQHxRykuN2R7hw=="
92 + "resolved" "https://registry.yarnpkg.com/@babel/generator/-/generator-7.15.4.tgz"
93 + "version" "7.15.4"
94 + dependencies:
95 + "@babel/types" "^7.15.4"
96 + "jsesc" "^2.5.1"
97 + "source-map" "^0.5.0"
98 +
99 +"@babel/helper-annotate-as-pure@^7.14.5", "@babel/helper-annotate-as-pure@^7.15.4":
100 + "integrity" "sha512-QwrtdNvUNsPCj2lfNQacsGSQvGX8ee1ttrBrcozUP2Sv/jylewBP/8QFe6ZkBsC8T/GYWonNAWJV4aRR9AL2DA=="
101 + "resolved" "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.15.4.tgz"
102 + "version" "7.15.4"
103 + dependencies:
104 + "@babel/types" "^7.15.4"
105 +
106 +"@babel/helper-builder-binary-assignment-operator-visitor@^7.14.5":
107 + "integrity" "sha512-P8o7JP2Mzi0SdC6eWr1zF+AEYvrsZa7GSY1lTayjF5XJhVH0kjLYUZPvTMflP7tBgZoe9gIhTa60QwFpqh/E0Q=="
108 + "resolved" "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.15.4.tgz"
109 + "version" "7.15.4"
110 + dependencies:
111 + "@babel/helper-explode-assignable-expression" "^7.15.4"
112 + "@babel/types" "^7.15.4"
113 +
114 +"@babel/helper-compilation-targets@^7.12.1", "@babel/helper-compilation-targets@^7.13.0", "@babel/helper-compilation-targets@^7.15.4":
115 + "integrity" "sha512-rMWPCirulnPSe4d+gwdWXLfAXTTBj8M3guAf5xFQJ0nvFY7tfNAFnWdqaHegHlgDZOCT4qvhF3BYlSJag8yhqQ=="
116 + "resolved" "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.15.4.tgz"
117 + "version" "7.15.4"
118 + dependencies:
119 + "@babel/compat-data" "^7.15.0"
120 + "@babel/helper-validator-option" "^7.14.5"
121 + "browserslist" "^4.16.6"
122 + "semver" "^6.3.0"
123 +
124 +"@babel/helper-create-class-features-plugin@^7.12.1", "@babel/helper-create-class-features-plugin@^7.14.5", "@babel/helper-create-class-features-plugin@^7.15.4":
125 + "integrity" "sha512-7ZmzFi+DwJx6A7mHRwbuucEYpyBwmh2Ca0RvI6z2+WLZYCqV0JOaLb+u0zbtmDicebgKBZgqbYfLaKNqSgv5Pw=="
126 + "resolved" "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.15.4.tgz"
127 + "version" "7.15.4"
128 + dependencies:
129 + "@babel/helper-annotate-as-pure" "^7.15.4"
130 + "@babel/helper-function-name" "^7.15.4"
131 + "@babel/helper-member-expression-to-functions" "^7.15.4"
132 + "@babel/helper-optimise-call-expression" "^7.15.4"
133 + "@babel/helper-replace-supers" "^7.15.4"
134 + "@babel/helper-split-export-declaration" "^7.15.4"
135 +
136 +"@babel/helper-create-regexp-features-plugin@^7.14.5":
137 + "integrity" "sha512-TLawwqpOErY2HhWbGJ2nZT5wSkR192QpN+nBg1THfBfftrlvOh+WbhrxXCH4q4xJ9Gl16BGPR/48JA+Ryiho/A=="
138 + "resolved" "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.14.5.tgz"
139 + "version" "7.14.5"
140 + dependencies:
141 + "@babel/helper-annotate-as-pure" "^7.14.5"
142 + "regexpu-core" "^4.7.1"
143 +
144 +"@babel/helper-define-polyfill-provider@^0.2.2":
145 + "integrity" "sha512-RH3QDAfRMzj7+0Nqu5oqgO5q9mFtQEVvCRsi8qCEfzLR9p2BHfn5FzhSB2oj1fF7I2+DcTORkYaQ6aTR9Cofew=="
146 + "resolved" "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.2.3.tgz"
147 + "version" "0.2.3"
148 + dependencies:
149 + "@babel/helper-compilation-targets" "^7.13.0"
150 + "@babel/helper-module-imports" "^7.12.13"
151 + "@babel/helper-plugin-utils" "^7.13.0"
152 + "@babel/traverse" "^7.13.0"
153 + "debug" "^4.1.1"
154 + "lodash.debounce" "^4.0.8"
155 + "resolve" "^1.14.2"
156 + "semver" "^6.1.2"
157 +
158 +"@babel/helper-explode-assignable-expression@^7.15.4":
159 + "integrity" "sha512-J14f/vq8+hdC2KoWLIQSsGrC9EFBKE4NFts8pfMpymfApds+fPqR30AOUWc4tyr56h9l/GA1Sxv2q3dLZWbQ/g=="
160 + "resolved" "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.15.4.tgz"
161 + "version" "7.15.4"
162 + dependencies:
163 + "@babel/types" "^7.15.4"
164 +
165 +"@babel/helper-function-name@^7.14.5", "@babel/helper-function-name@^7.15.4":
166 + "integrity" "sha512-Z91cOMM4DseLIGOnog+Z8OI6YseR9bua+HpvLAQ2XayUGU+neTtX+97caALaLdyu53I/fjhbeCnWnRH1O3jFOw=="
167 + "resolved" "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.15.4.tgz"
168 + "version" "7.15.4"
169 + dependencies:
170 + "@babel/helper-get-function-arity" "^7.15.4"
171 + "@babel/template" "^7.15.4"
172 + "@babel/types" "^7.15.4"
173 +
174 +"@babel/helper-get-function-arity@^7.15.4":
175 + "integrity" "sha512-1/AlxSF92CmGZzHnC515hm4SirTxtpDnLEJ0UyEMgTMZN+6bxXKg04dKhiRx5Enel+SUA1G1t5Ed/yQia0efrA=="
176 + "resolved" "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.15.4.tgz"
177 + "version" "7.15.4"
178 + dependencies:
179 + "@babel/types" "^7.15.4"
180 +
181 +"@babel/helper-hoist-variables@^7.15.4":
182 + "integrity" "sha512-VTy085egb3jUGVK9ycIxQiPbquesq0HUQ+tPO0uv5mPEBZipk+5FkRKiWq5apuyTE9FUrjENB0rCf8y+n+UuhA=="
183 + "resolved" "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.15.4.tgz"
184 + "version" "7.15.4"
185 + dependencies:
186 + "@babel/types" "^7.15.4"
187 +
188 +"@babel/helper-member-expression-to-functions@^7.15.4":
189 + "integrity" "sha512-cokOMkxC/BTyNP1AlY25HuBWM32iCEsLPI4BHDpJCHHm1FU2E7dKWWIXJgQgSFiu4lp8q3bL1BIKwqkSUviqtA=="
190 + "resolved" "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.15.4.tgz"
191 + "version" "7.15.4"
192 + dependencies:
193 + "@babel/types" "^7.15.4"
194 +
195 +"@babel/helper-module-imports@^7.0.0", "@babel/helper-module-imports@^7.12.1", "@babel/helper-module-imports@^7.12.13", "@babel/helper-module-imports@^7.14.5", "@babel/helper-module-imports@^7.15.4":
196 + "integrity" "sha512-jeAHZbzUwdW/xHgHQ3QmWR4Jg6j15q4w/gCfwZvtqOxoo5DKtLHk8Bsf4c5RZRC7NmLEs+ohkdq8jFefuvIxAA=="
197 + "resolved" "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.15.4.tgz"
198 + "version" "7.15.4"
199 + dependencies:
200 + "@babel/types" "^7.15.4"
201 +
202 +"@babel/helper-module-transforms@^7.12.1", "@babel/helper-module-transforms@^7.14.5", "@babel/helper-module-transforms@^7.15.4":
203 + "integrity" "sha512-ZNqjjQG/AuFfekFTY+7nY4RgBSklgTu970c7Rj3m/JOhIu5KPBUuTA9AY6zaKcUvk4g6EbDXdBnhi35FAssdSw=="
204 + "resolved" "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.15.7.tgz"
205 + "version" "7.15.7"
206 + dependencies:
207 + "@babel/helper-module-imports" "^7.15.4"
208 + "@babel/helper-replace-supers" "^7.15.4"
209 + "@babel/helper-simple-access" "^7.15.4"
210 + "@babel/helper-split-export-declaration" "^7.15.4"
211 + "@babel/helper-validator-identifier" "^7.15.7"
212 + "@babel/template" "^7.15.4"
213 + "@babel/traverse" "^7.15.4"
214 + "@babel/types" "^7.15.6"
215 +
216 +"@babel/helper-optimise-call-expression@^7.15.4":
217 + "integrity" "sha512-E/z9rfbAOt1vDW1DR7k4SzhzotVV5+qMciWV6LaG1g4jeFrkDlJedjtV4h0i4Q/ITnUu+Pk08M7fczsB9GXBDw=="
218 + "resolved" "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.15.4.tgz"
219 + "version" "7.15.4"
220 + dependencies:
221 + "@babel/types" "^7.15.4"
222 +
223 +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.13.0", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3":
224 + "integrity" "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ=="
225 + "resolved" "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz"
226 + "version" "7.14.5"
227 +
228 +"@babel/helper-remap-async-to-generator@^7.14.5", "@babel/helper-remap-async-to-generator@^7.15.4":
229 + "integrity" "sha512-v53MxgvMK/HCwckJ1bZrq6dNKlmwlyRNYM6ypaRTdXWGOE2c1/SCa6dL/HimhPulGhZKw9W0QhREM583F/t0vQ=="
230 + "resolved" "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.15.4.tgz"
231 + "version" "7.15.4"
232 + dependencies:
233 + "@babel/helper-annotate-as-pure" "^7.15.4"
234 + "@babel/helper-wrap-function" "^7.15.4"
235 + "@babel/types" "^7.15.4"
236 +
237 +"@babel/helper-replace-supers@^7.14.5", "@babel/helper-replace-supers@^7.15.4":
238 + "integrity" "sha512-/ztT6khaXF37MS47fufrKvIsiQkx1LBRvSJNzRqmbyeZnTwU9qBxXYLaaT/6KaxfKhjs2Wy8kG8ZdsFUuWBjzw=="
239 + "resolved" "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.15.4.tgz"
240 + "version" "7.15.4"
241 + dependencies:
242 + "@babel/helper-member-expression-to-functions" "^7.15.4"
243 + "@babel/helper-optimise-call-expression" "^7.15.4"
244 + "@babel/traverse" "^7.15.4"
245 + "@babel/types" "^7.15.4"
246 +
247 +"@babel/helper-simple-access@^7.15.4":
248 + "integrity" "sha512-UzazrDoIVOZZcTeHHEPYrr1MvTR/K+wgLg6MY6e1CJyaRhbibftF6fR2KU2sFRtI/nERUZR9fBd6aKgBlIBaPg=="
249 + "resolved" "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.15.4.tgz"
250 + "version" "7.15.4"
251 + dependencies:
252 + "@babel/types" "^7.15.4"
253 +
254 +"@babel/helper-skip-transparent-expression-wrappers@^7.12.1", "@babel/helper-skip-transparent-expression-wrappers@^7.14.5", "@babel/helper-skip-transparent-expression-wrappers@^7.15.4":
255 + "integrity" "sha512-BMRLsdh+D1/aap19TycS4eD1qELGrCBJwzaY9IE8LrpJtJb+H7rQkPIdsfgnMtLBA6DJls7X9z93Z4U8h7xw0A=="
256 + "resolved" "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.15.4.tgz"
257 + "version" "7.15.4"
258 + dependencies:
259 + "@babel/types" "^7.15.4"
260 +
261 +"@babel/helper-split-export-declaration@^7.15.4":
262 + "integrity" "sha512-HsFqhLDZ08DxCpBdEVtKmywj6PQbwnF6HHybur0MAnkAKnlS6uHkwnmRIkElB2Owpfb4xL4NwDmDLFubueDXsw=="
263 + "resolved" "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.15.4.tgz"
264 + "version" "7.15.4"
265 + dependencies:
266 + "@babel/types" "^7.15.4"
267 +
268 +"@babel/helper-validator-identifier@^7.14.5", "@babel/helper-validator-identifier@^7.14.9", "@babel/helper-validator-identifier@^7.15.7":
269 + "integrity" "sha512-K4JvCtQqad9OY2+yTU8w+E82ywk/fe+ELNlt1G8z3bVGlZfn/hOcQQsUhGhW/N+tb3fxK800wLtKOE/aM0m72w=="
270 + "resolved" "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.15.7.tgz"
271 + "version" "7.15.7"
272 +
273 +"@babel/helper-validator-option@^7.12.1", "@babel/helper-validator-option@^7.14.5":
274 + "integrity" "sha512-OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow=="
275 + "resolved" "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.14.5.tgz"
276 + "version" "7.14.5"
277 +
278 +"@babel/helper-wrap-function@^7.15.4":
279 + "integrity" "sha512-Y2o+H/hRV5W8QhIfTpRIBwl57y8PrZt6JM3V8FOo5qarjshHItyH5lXlpMfBfmBefOqSCpKZs/6Dxqp0E/U+uw=="
280 + "resolved" "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.15.4.tgz"
281 + "version" "7.15.4"
282 + dependencies:
283 + "@babel/helper-function-name" "^7.15.4"
284 + "@babel/template" "^7.15.4"
285 + "@babel/traverse" "^7.15.4"
286 + "@babel/types" "^7.15.4"
287 +
288 +"@babel/helpers@^7.12.1", "@babel/helpers@^7.15.4":
289 + "integrity" "sha512-V45u6dqEJ3w2rlryYYXf6i9rQ5YMNu4FLS6ngs8ikblhu2VdR1AqAd6aJjBzmf2Qzh6KOLqKHxEN9+TFbAkAVQ=="
290 + "resolved" "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.15.4.tgz"
291 + "version" "7.15.4"
292 + dependencies:
293 + "@babel/template" "^7.15.4"
294 + "@babel/traverse" "^7.15.4"
295 + "@babel/types" "^7.15.4"
296 +
297 +"@babel/highlight@^7.10.4", "@babel/highlight@^7.14.5":
298 + "integrity" "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg=="
299 + "resolved" "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.14.5.tgz"
300 + "version" "7.14.5"
301 + dependencies:
302 + "@babel/helper-validator-identifier" "^7.14.5"
303 + "chalk" "^2.0.0"
304 + "js-tokens" "^4.0.0"
305 +
306 +"@babel/parser@^7.1.0", "@babel/parser@^7.12.3", "@babel/parser@^7.15.4", "@babel/parser@^7.15.5", "@babel/parser@^7.7.0":
307 + "integrity" "sha512-rycZXvQ+xS9QyIcJ9HXeDWf1uxqlbVFAUq0Rq0dbc50Zb/+wUe/ehyfzGfm9KZZF0kBejYgxltBXocP+gKdL2g=="
308 + "resolved" "https://registry.yarnpkg.com/@babel/parser/-/parser-7.15.7.tgz"
309 + "version" "7.15.7"
310 +
311 +"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.15.4":
312 + "integrity" "sha512-eBnpsl9tlhPhpI10kU06JHnrYXwg3+V6CaP2idsCXNef0aeslpqyITXQ74Vfk5uHgY7IG7XP0yIH8b42KSzHog=="
313 + "resolved" "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.15.4.tgz"
314 + "version" "7.15.4"
315 + dependencies:
316 + "@babel/helper-plugin-utils" "^7.14.5"
317 + "@babel/helper-skip-transparent-expression-wrappers" "^7.15.4"
318 + "@babel/plugin-proposal-optional-chaining" "^7.14.5"
319 +
320 +"@babel/plugin-proposal-async-generator-functions@^7.12.1", "@babel/plugin-proposal-async-generator-functions@^7.15.4":
321 + "integrity" "sha512-2zt2g5vTXpMC3OmK6uyjvdXptbhBXfA77XGrd3gh93zwG8lZYBLOBImiGBEG0RANu3JqKEACCz5CGk73OJROBw=="
322 + "resolved" "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.15.4.tgz"
323 + "version" "7.15.4"
324 + dependencies:
325 + "@babel/helper-plugin-utils" "^7.14.5"
326 + "@babel/helper-remap-async-to-generator" "^7.15.4"
327 + "@babel/plugin-syntax-async-generators" "^7.8.4"
328 +
329 +"@babel/plugin-proposal-class-properties@^7.12.1":
330 + "integrity" "sha512-q/PLpv5Ko4dVc1LYMpCY7RVAAO4uk55qPwrIuJ5QJ8c6cVuAmhu7I/49JOppXL6gXf7ZHzpRVEUZdYoPLM04Gg=="
331 + "resolved" "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.14.5.tgz"
332 + "version" "7.14.5"
333 + dependencies:
334 + "@babel/helper-create-class-features-plugin" "^7.14.5"
335 + "@babel/helper-plugin-utils" "^7.14.5"
336 +
337 +"@babel/plugin-proposal-class-properties@^7.14.5":
338 + "integrity" "sha512-q/PLpv5Ko4dVc1LYMpCY7RVAAO4uk55qPwrIuJ5QJ8c6cVuAmhu7I/49JOppXL6gXf7ZHzpRVEUZdYoPLM04Gg=="
339 + "resolved" "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.14.5.tgz"
340 + "version" "7.14.5"
341 + dependencies:
342 + "@babel/helper-create-class-features-plugin" "^7.14.5"
343 + "@babel/helper-plugin-utils" "^7.14.5"
344 +
345 +"@babel/plugin-proposal-class-properties@7.12.1":
346 + "integrity" "sha512-cKp3dlQsFsEs5CWKnN7BnSHOd0EOW8EKpEjkoz1pO2E5KzIDNV9Ros1b0CnmbVgAGXJubOYVBOGCT1OmJwOI7w=="
347 + "resolved" "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.12.1.tgz"
348 + "version" "7.12.1"
349 + dependencies:
350 + "@babel/helper-create-class-features-plugin" "^7.12.1"
351 + "@babel/helper-plugin-utils" "^7.10.4"
352 +
353 +"@babel/plugin-proposal-class-static-block@^7.15.4":
354 + "integrity" "sha512-M682XWrrLNk3chXCjoPUQWOyYsB93B9z3mRyjtqqYJWDf2mfCdIYgDrA11cgNVhAQieaq6F2fn2f3wI0U4aTjA=="
355 + "resolved" "https://registry.yarnpkg.com/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.15.4.tgz"
356 + "version" "7.15.4"
357 + dependencies:
358 + "@babel/helper-create-class-features-plugin" "^7.15.4"
359 + "@babel/helper-plugin-utils" "^7.14.5"
360 + "@babel/plugin-syntax-class-static-block" "^7.14.5"
361 +
362 +"@babel/plugin-proposal-decorators@7.12.1":
363 + "integrity" "sha512-knNIuusychgYN8fGJHONL0RbFxLGawhXOJNLBk75TniTsZZeA+wdkDuv6wp4lGwzQEKjZi6/WYtnb3udNPmQmQ=="
364 + "resolved" "https://registry.yarnpkg.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.12.1.tgz"
365 + "version" "7.12.1"
366 + dependencies:
367 + "@babel/helper-create-class-features-plugin" "^7.12.1"
368 + "@babel/helper-plugin-utils" "^7.10.4"
369 + "@babel/plugin-syntax-decorators" "^7.12.1"
370 +
371 +"@babel/plugin-proposal-dynamic-import@^7.12.1", "@babel/plugin-proposal-dynamic-import@^7.14.5":
372 + "integrity" "sha512-ExjiNYc3HDN5PXJx+bwC50GIx/KKanX2HiggnIUAYedbARdImiCU4RhhHfdf0Kd7JNXGpsBBBCOm+bBVy3Gb0g=="
373 + "resolved" "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.14.5.tgz"
374 + "version" "7.14.5"
375 + dependencies:
376 + "@babel/helper-plugin-utils" "^7.14.5"
377 + "@babel/plugin-syntax-dynamic-import" "^7.8.3"
378 +
379 +"@babel/plugin-proposal-export-namespace-from@^7.12.1", "@babel/plugin-proposal-export-namespace-from@^7.14.5":
380 + "integrity" "sha512-g5POA32bXPMmSBu5Dx/iZGLGnKmKPc5AiY7qfZgurzrCYgIztDlHFbznSNCoQuv57YQLnQfaDi7dxCtLDIdXdA=="
381 + "resolved" "https://registry.yarnpkg.com/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.14.5.tgz"
382 + "version" "7.14.5"
383 + dependencies:
384 + "@babel/helper-plugin-utils" "^7.14.5"
385 + "@babel/plugin-syntax-export-namespace-from" "^7.8.3"
386 +
387 +"@babel/plugin-proposal-json-strings@^7.12.1", "@babel/plugin-proposal-json-strings@^7.14.5":
388 + "integrity" "sha512-NSq2fczJYKVRIsUJyNxrVUMhB27zb7N7pOFGQOhBKJrChbGcgEAqyZrmZswkPk18VMurEeJAaICbfm57vUeTbQ=="
389 + "resolved" "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.14.5.tgz"
390 + "version" "7.14.5"
391 + dependencies:
392 + "@babel/helper-plugin-utils" "^7.14.5"
393 + "@babel/plugin-syntax-json-strings" "^7.8.3"
394 +
395 +"@babel/plugin-proposal-logical-assignment-operators@^7.12.1", "@babel/plugin-proposal-logical-assignment-operators@^7.14.5":
396 + "integrity" "sha512-YGn2AvZAo9TwyhlLvCCWxD90Xq8xJ4aSgaX3G5D/8DW94L8aaT+dS5cSP+Z06+rCJERGSr9GxMBZ601xoc2taw=="
397 + "resolved" "https://registry.yarnpkg.com/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.14.5.tgz"
398 + "version" "7.14.5"
399 + dependencies:
400 + "@babel/helper-plugin-utils" "^7.14.5"
401 + "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4"
402 +
403 +"@babel/plugin-proposal-nullish-coalescing-operator@^7.12.1":
404 + "integrity" "sha512-gun/SOnMqjSb98Nkaq2rTKMwervfdAoz6NphdY0vTfuzMfryj+tDGb2n6UkDKwez+Y8PZDhE3D143v6Gepp4Hg=="
405 + "resolved" "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.14.5.tgz"
406 + "version" "7.14.5"
407 + dependencies:
408 + "@babel/helper-plugin-utils" "^7.14.5"
409 + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3"
410 +
411 +"@babel/plugin-proposal-nullish-coalescing-operator@^7.14.5":
412 + "integrity" "sha512-gun/SOnMqjSb98Nkaq2rTKMwervfdAoz6NphdY0vTfuzMfryj+tDGb2n6UkDKwez+Y8PZDhE3D143v6Gepp4Hg=="
413 + "resolved" "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.14.5.tgz"
414 + "version" "7.14.5"
415 + dependencies:
416 + "@babel/helper-plugin-utils" "^7.14.5"
417 + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3"
418 +
419 +"@babel/plugin-proposal-nullish-coalescing-operator@7.12.1":
420 + "integrity" "sha512-nZY0ESiaQDI1y96+jk6VxMOaL4LPo/QDHBqL+SF3/vl6dHkTwHlOI8L4ZwuRBHgakRBw5zsVylel7QPbbGuYgg=="
421 + "resolved" "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.12.1.tgz"
422 + "version" "7.12.1"
423 + dependencies:
424 + "@babel/helper-plugin-utils" "^7.10.4"
425 + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.0"
426 +
427 +"@babel/plugin-proposal-numeric-separator@^7.12.1":
428 + "integrity" "sha512-yiclALKe0vyZRZE0pS6RXgjUOt87GWv6FYa5zqj15PvhOGFO69R5DusPlgK/1K5dVnCtegTiWu9UaBSrLLJJBg=="
429 + "resolved" "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.14.5.tgz"
430 + "version" "7.14.5"
431 + dependencies:
432 + "@babel/helper-plugin-utils" "^7.14.5"
433 + "@babel/plugin-syntax-numeric-separator" "^7.10.4"
434 +
435 +"@babel/plugin-proposal-numeric-separator@^7.14.5":
436 + "integrity" "sha512-yiclALKe0vyZRZE0pS6RXgjUOt87GWv6FYa5zqj15PvhOGFO69R5DusPlgK/1K5dVnCtegTiWu9UaBSrLLJJBg=="
437 + "resolved" "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.14.5.tgz"
438 + "version" "7.14.5"
439 + dependencies:
440 + "@babel/helper-plugin-utils" "^7.14.5"
441 + "@babel/plugin-syntax-numeric-separator" "^7.10.4"
442 +
443 +"@babel/plugin-proposal-numeric-separator@7.12.1":
444 + "integrity" "sha512-MR7Ok+Af3OhNTCxYVjJZHS0t97ydnJZt/DbR4WISO39iDnhiD8XHrY12xuSJ90FFEGjir0Fzyyn7g/zY6hxbxA=="
445 + "resolved" "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.12.1.tgz"
446 + "version" "7.12.1"
447 + dependencies:
448 + "@babel/helper-plugin-utils" "^7.10.4"
449 + "@babel/plugin-syntax-numeric-separator" "^7.10.4"
450 +
451 +"@babel/plugin-proposal-object-rest-spread@^7.12.1", "@babel/plugin-proposal-object-rest-spread@^7.15.6":
452 + "integrity" "sha512-qtOHo7A1Vt+O23qEAX+GdBpqaIuD3i9VRrWgCJeq7WO6H2d14EK3q11urj5Te2MAeK97nMiIdRpwd/ST4JFbNg=="
453 + "resolved" "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.15.6.tgz"
454 + "version" "7.15.6"
455 + dependencies:
456 + "@babel/compat-data" "^7.15.0"
457 + "@babel/helper-compilation-targets" "^7.15.4"
458 + "@babel/helper-plugin-utils" "^7.14.5"
459 + "@babel/plugin-syntax-object-rest-spread" "^7.8.3"
460 + "@babel/plugin-transform-parameters" "^7.15.4"
461 +
462 +"@babel/plugin-proposal-optional-catch-binding@^7.12.1", "@babel/plugin-proposal-optional-catch-binding@^7.14.5":
463 + "integrity" "sha512-3Oyiixm0ur7bzO5ybNcZFlmVsygSIQgdOa7cTfOYCMY+wEPAYhZAJxi3mixKFCTCKUhQXuCTtQ1MzrpL3WT8ZQ=="
464 + "resolved" "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.14.5.tgz"
465 + "version" "7.14.5"
466 + dependencies:
467 + "@babel/helper-plugin-utils" "^7.14.5"
468 + "@babel/plugin-syntax-optional-catch-binding" "^7.8.3"
469 +
470 +"@babel/plugin-proposal-optional-chaining@^7.12.1":
471 + "integrity" "sha512-ycz+VOzo2UbWNI1rQXxIuMOzrDdHGrI23fRiz/Si2R4kv2XZQ1BK8ccdHwehMKBlcH/joGW/tzrUmo67gbJHlQ=="
472 + "resolved" "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.14.5.tgz"
473 + "version" "7.14.5"
474 + dependencies:
475 + "@babel/helper-plugin-utils" "^7.14.5"
476 + "@babel/helper-skip-transparent-expression-wrappers" "^7.14.5"
477 + "@babel/plugin-syntax-optional-chaining" "^7.8.3"
478 +
479 +"@babel/plugin-proposal-optional-chaining@^7.14.5":
480 + "integrity" "sha512-ycz+VOzo2UbWNI1rQXxIuMOzrDdHGrI23fRiz/Si2R4kv2XZQ1BK8ccdHwehMKBlcH/joGW/tzrUmo67gbJHlQ=="
481 + "resolved" "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.14.5.tgz"
482 + "version" "7.14.5"
483 + dependencies:
484 + "@babel/helper-plugin-utils" "^7.14.5"
485 + "@babel/helper-skip-transparent-expression-wrappers" "^7.14.5"
486 + "@babel/plugin-syntax-optional-chaining" "^7.8.3"
487 +
488 +"@babel/plugin-proposal-optional-chaining@7.12.1":
489 + "integrity" "sha512-c2uRpY6WzaVDzynVY9liyykS+kVU+WRZPMPYpkelXH8KBt1oXoI89kPbZKKG/jDT5UK92FTW2fZkZaJhdiBabw=="
490 + "resolved" "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.12.1.tgz"
491 + "version" "7.12.1"
492 + dependencies:
493 + "@babel/helper-plugin-utils" "^7.10.4"
494 + "@babel/helper-skip-transparent-expression-wrappers" "^7.12.1"
495 + "@babel/plugin-syntax-optional-chaining" "^7.8.0"
496 +
497 +"@babel/plugin-proposal-private-methods@^7.12.1", "@babel/plugin-proposal-private-methods@^7.14.5":
498 + "integrity" "sha512-838DkdUA1u+QTCplatfq4B7+1lnDa/+QMI89x5WZHBcnNv+47N8QEj2k9I2MUU9xIv8XJ4XvPCviM/Dj7Uwt9g=="
499 + "resolved" "https://registry.yarnpkg.com/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.14.5.tgz"
500 + "version" "7.14.5"
501 + dependencies:
502 + "@babel/helper-create-class-features-plugin" "^7.14.5"
503 + "@babel/helper-plugin-utils" "^7.14.5"
504 +
505 +"@babel/plugin-proposal-private-property-in-object@^7.15.4":
506 + "integrity" "sha512-X0UTixkLf0PCCffxgu5/1RQyGGbgZuKoI+vXP4iSbJSYwPb7hu06omsFGBvQ9lJEvwgrxHdS8B5nbfcd8GyUNA=="
507 + "resolved" "https://registry.yarnpkg.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.15.4.tgz"
508 + "version" "7.15.4"
509 + dependencies:
510 + "@babel/helper-annotate-as-pure" "^7.15.4"
511 + "@babel/helper-create-class-features-plugin" "^7.15.4"
512 + "@babel/helper-plugin-utils" "^7.14.5"
513 + "@babel/plugin-syntax-private-property-in-object" "^7.14.5"
514 +
515 +"@babel/plugin-proposal-unicode-property-regex@^7.12.1", "@babel/plugin-proposal-unicode-property-regex@^7.14.5", "@babel/plugin-proposal-unicode-property-regex@^7.4.4":
516 + "integrity" "sha512-6axIeOU5LnY471KenAB9vI8I5j7NQ2d652hIYwVyRfgaZT5UpiqFKCuVXCDMSrU+3VFafnu2c5m3lrWIlr6A5Q=="
517 + "resolved" "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.14.5.tgz"
518 + "version" "7.14.5"
519 + dependencies:
520 + "@babel/helper-create-regexp-features-plugin" "^7.14.5"
521 + "@babel/helper-plugin-utils" "^7.14.5"
522 +
523 +"@babel/plugin-syntax-async-generators@^7.8.0", "@babel/plugin-syntax-async-generators@^7.8.4":
524 + "integrity" "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw=="
525 + "resolved" "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz"
526 + "version" "7.8.4"
527 + dependencies:
528 + "@babel/helper-plugin-utils" "^7.8.0"
529 +
530 +"@babel/plugin-syntax-bigint@^7.8.3":
531 + "integrity" "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg=="
532 + "resolved" "https://registry.yarnpkg.com/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz"
533 + "version" "7.8.3"
534 + dependencies:
535 + "@babel/helper-plugin-utils" "^7.8.0"
536 +
537 +"@babel/plugin-syntax-class-properties@^7.12.1", "@babel/plugin-syntax-class-properties@^7.12.13", "@babel/plugin-syntax-class-properties@^7.8.3":
538 + "integrity" "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA=="
539 + "resolved" "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz"
540 + "version" "7.12.13"
541 + dependencies:
542 + "@babel/helper-plugin-utils" "^7.12.13"
543 +
544 +"@babel/plugin-syntax-class-static-block@^7.14.5":
545 + "integrity" "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw=="
546 + "resolved" "https://registry.yarnpkg.com/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz"
547 + "version" "7.14.5"
548 + dependencies:
549 + "@babel/helper-plugin-utils" "^7.14.5"
550 +
551 +"@babel/plugin-syntax-decorators@^7.12.1":
552 + "integrity" "sha512-c4sZMRWL4GSvP1EXy0woIP7m4jkVcEuG8R1TOZxPBPtp4FSM/kiPZub9UIs/Jrb5ZAOzvTUSGYrWsrSu1JvoPw=="
553 + "resolved" "https://registry.yarnpkg.com/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.14.5.tgz"
554 + "version" "7.14.5"
555 + dependencies:
556 + "@babel/helper-plugin-utils" "^7.14.5"
557 +
558 +"@babel/plugin-syntax-dynamic-import@^7.8.0", "@babel/plugin-syntax-dynamic-import@^7.8.3":
559 + "integrity" "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ=="
560 + "resolved" "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz"
561 + "version" "7.8.3"
562 + dependencies:
563 + "@babel/helper-plugin-utils" "^7.8.0"
564 +
565 +"@babel/plugin-syntax-export-namespace-from@^7.8.3":
566 + "integrity" "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q=="
567 + "resolved" "https://registry.yarnpkg.com/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz"
568 + "version" "7.8.3"
569 + dependencies:
570 + "@babel/helper-plugin-utils" "^7.8.3"
571 +
572 +"@babel/plugin-syntax-flow@^7.12.1":
573 + "integrity" "sha512-9WK5ZwKCdWHxVuU13XNT6X73FGmutAXeor5lGFq6qhOFtMFUF4jkbijuyUdZZlpYq6E2hZeZf/u3959X9wsv0Q=="
574 + "resolved" "https://registry.yarnpkg.com/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.14.5.tgz"
575 + "version" "7.14.5"
576 + dependencies:
577 + "@babel/helper-plugin-utils" "^7.14.5"
578 +
579 +"@babel/plugin-syntax-import-meta@^7.8.3":
580 + "integrity" "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g=="
581 + "resolved" "https://registry.yarnpkg.com/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz"
582 + "version" "7.10.4"
583 + dependencies:
584 + "@babel/helper-plugin-utils" "^7.10.4"
585 +
586 +"@babel/plugin-syntax-json-strings@^7.8.0", "@babel/plugin-syntax-json-strings@^7.8.3":
587 + "integrity" "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA=="
588 + "resolved" "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz"
589 + "version" "7.8.3"
590 + dependencies:
591 + "@babel/helper-plugin-utils" "^7.8.0"
592 +
593 +"@babel/plugin-syntax-jsx@^7.14.5":
594 + "integrity" "sha512-ohuFIsOMXJnbOMRfX7/w7LocdR6R7whhuRD4ax8IipLcLPlZGJKkBxgHp++U4N/vKyU16/YDQr2f5seajD3jIw=="
595 + "resolved" "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.14.5.tgz"
596 + "version" "7.14.5"
597 + dependencies:
598 + "@babel/helper-plugin-utils" "^7.14.5"
599 +
600 +"@babel/plugin-syntax-logical-assignment-operators@^7.10.4", "@babel/plugin-syntax-logical-assignment-operators@^7.8.3":
601 + "integrity" "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig=="
602 + "resolved" "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz"
603 + "version" "7.10.4"
604 + dependencies:
605 + "@babel/helper-plugin-utils" "^7.10.4"
606 +
607 +"@babel/plugin-syntax-nullish-coalescing-operator@^7.8.0", "@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3":
608 + "integrity" "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ=="
609 + "resolved" "https://registry.yarnpkg.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz"
610 + "version" "7.8.3"
611 + dependencies:
612 + "@babel/helper-plugin-utils" "^7.8.0"
613 +
614 +"@babel/plugin-syntax-numeric-separator@^7.10.4", "@babel/plugin-syntax-numeric-separator@^7.8.3":
615 + "integrity" "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug=="
616 + "resolved" "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz"
617 + "version" "7.10.4"
618 + dependencies:
619 + "@babel/helper-plugin-utils" "^7.10.4"
620 +
621 +"@babel/plugin-syntax-object-rest-spread@^7.8.0", "@babel/plugin-syntax-object-rest-spread@^7.8.3":
622 + "integrity" "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA=="
623 + "resolved" "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz"
624 + "version" "7.8.3"
625 + dependencies:
626 + "@babel/helper-plugin-utils" "^7.8.0"
627 +
628 +"@babel/plugin-syntax-optional-catch-binding@^7.8.0", "@babel/plugin-syntax-optional-catch-binding@^7.8.3":
629 + "integrity" "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q=="
630 + "resolved" "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz"
631 + "version" "7.8.3"
632 + dependencies:
633 + "@babel/helper-plugin-utils" "^7.8.0"
634 +
635 +"@babel/plugin-syntax-optional-chaining@^7.8.0", "@babel/plugin-syntax-optional-chaining@^7.8.3":
636 + "integrity" "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg=="
637 + "resolved" "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz"
638 + "version" "7.8.3"
639 + dependencies:
640 + "@babel/helper-plugin-utils" "^7.8.0"
641 +
642 +"@babel/plugin-syntax-private-property-in-object@^7.14.5":
643 + "integrity" "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg=="
644 + "resolved" "https://registry.yarnpkg.com/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz"
645 + "version" "7.14.5"
646 + dependencies:
647 + "@babel/helper-plugin-utils" "^7.14.5"
648 +
649 +"@babel/plugin-syntax-top-level-await@^7.12.1", "@babel/plugin-syntax-top-level-await@^7.14.5", "@babel/plugin-syntax-top-level-await@^7.8.3":
650 + "integrity" "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw=="
651 + "resolved" "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz"
652 + "version" "7.14.5"
653 + dependencies:
654 + "@babel/helper-plugin-utils" "^7.14.5"
655 +
656 +"@babel/plugin-syntax-typescript@^7.14.5":
657 + "integrity" "sha512-u6OXzDaIXjEstBRRoBCQ/uKQKlbuaeE5in0RvWdA4pN6AhqxTIwUsnHPU1CFZA/amYObMsuWhYfRl3Ch90HD0Q=="
658 + "resolved" "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.14.5.tgz"
659 + "version" "7.14.5"
660 + dependencies:
661 + "@babel/helper-plugin-utils" "^7.14.5"
662 +
663 +"@babel/plugin-transform-arrow-functions@^7.12.1", "@babel/plugin-transform-arrow-functions@^7.14.5":
664 + "integrity" "sha512-KOnO0l4+tD5IfOdi4x8C1XmEIRWUjNRV8wc6K2vz/3e8yAOoZZvsRXRRIF/yo/MAOFb4QjtAw9xSxMXbSMRy8A=="
665 + "resolved" "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.14.5.tgz"
666 + "version" "7.14.5"
667 + dependencies:
668 + "@babel/helper-plugin-utils" "^7.14.5"
669 +
670 +"@babel/plugin-transform-async-to-generator@^7.12.1", "@babel/plugin-transform-async-to-generator@^7.14.5":
671 + "integrity" "sha512-szkbzQ0mNk0rpu76fzDdqSyPu0MuvpXgC+6rz5rpMb5OIRxdmHfQxrktL8CYolL2d8luMCZTR0DpIMIdL27IjA=="
672 + "resolved" "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.14.5.tgz"
673 + "version" "7.14.5"
674 + dependencies:
675 + "@babel/helper-module-imports" "^7.14.5"
676 + "@babel/helper-plugin-utils" "^7.14.5"
677 + "@babel/helper-remap-async-to-generator" "^7.14.5"
678 +
679 +"@babel/plugin-transform-block-scoped-functions@^7.12.1", "@babel/plugin-transform-block-scoped-functions@^7.14.5":
680 + "integrity" "sha512-dtqWqdWZ5NqBX3KzsVCWfQI3A53Ft5pWFCT2eCVUftWZgjc5DpDponbIF1+c+7cSGk2wN0YK7HGL/ezfRbpKBQ=="
681 + "resolved" "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.14.5.tgz"
682 + "version" "7.14.5"
683 + dependencies:
684 + "@babel/helper-plugin-utils" "^7.14.5"
685 +
686 +"@babel/plugin-transform-block-scoping@^7.12.1", "@babel/plugin-transform-block-scoping@^7.15.3":
687 + "integrity" "sha512-nBAzfZwZb4DkaGtOes1Up1nOAp9TDRRFw4XBzBBSG9QK7KVFmYzgj9o9sbPv7TX5ofL4Auq4wZnxCoPnI/lz2Q=="
688 + "resolved" "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.15.3.tgz"
689 + "version" "7.15.3"
690 + dependencies:
691 + "@babel/helper-plugin-utils" "^7.14.5"
692 +
693 +"@babel/plugin-transform-classes@^7.12.1", "@babel/plugin-transform-classes@^7.15.4":
694 + "integrity" "sha512-Yjvhex8GzBmmPQUvpXRPWQ9WnxXgAFuZSrqOK/eJlOGIXwvv8H3UEdUigl1gb/bnjTrln+e8bkZUYCBt/xYlBg=="
695 + "resolved" "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.15.4.tgz"
696 + "version" "7.15.4"
697 + dependencies:
698 + "@babel/helper-annotate-as-pure" "^7.15.4"
699 + "@babel/helper-function-name" "^7.15.4"
700 + "@babel/helper-optimise-call-expression" "^7.15.4"
701 + "@babel/helper-plugin-utils" "^7.14.5"
702 + "@babel/helper-replace-supers" "^7.15.4"
703 + "@babel/helper-split-export-declaration" "^7.15.4"
704 + "globals" "^11.1.0"
705 +
706 +"@babel/plugin-transform-computed-properties@^7.12.1", "@babel/plugin-transform-computed-properties@^7.14.5":
707 + "integrity" "sha512-pWM+E4283UxaVzLb8UBXv4EIxMovU4zxT1OPnpHJcmnvyY9QbPPTKZfEj31EUvG3/EQRbYAGaYEUZ4yWOBC2xg=="
708 + "resolved" "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.14.5.tgz"
709 + "version" "7.14.5"
710 + dependencies:
711 + "@babel/helper-plugin-utils" "^7.14.5"
712 +
713 +"@babel/plugin-transform-destructuring@^7.12.1", "@babel/plugin-transform-destructuring@^7.14.7":
714 + "integrity" "sha512-0mDE99nK+kVh3xlc5vKwB6wnP9ecuSj+zQCa/n0voENtP/zymdT4HH6QEb65wjjcbqr1Jb/7z9Qp7TF5FtwYGw=="
715 + "resolved" "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.14.7.tgz"
716 + "version" "7.14.7"
717 + dependencies:
718 + "@babel/helper-plugin-utils" "^7.14.5"
719 +
720 +"@babel/plugin-transform-dotall-regex@^7.12.1", "@babel/plugin-transform-dotall-regex@^7.14.5", "@babel/plugin-transform-dotall-regex@^7.4.4":
721 + "integrity" "sha512-loGlnBdj02MDsFaHhAIJzh7euK89lBrGIdM9EAtHFo6xKygCUGuuWe07o1oZVk287amtW1n0808sQM99aZt3gw=="
722 + "resolved" "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.14.5.tgz"
723 + "version" "7.14.5"
724 + dependencies:
725 + "@babel/helper-create-regexp-features-plugin" "^7.14.5"
726 + "@babel/helper-plugin-utils" "^7.14.5"
727 +
728 +"@babel/plugin-transform-duplicate-keys@^7.12.1", "@babel/plugin-transform-duplicate-keys@^7.14.5":
729 + "integrity" "sha512-iJjbI53huKbPDAsJ8EmVmvCKeeq21bAze4fu9GBQtSLqfvzj2oRuHVx4ZkDwEhg1htQ+5OBZh/Ab0XDf5iBZ7A=="
730 + "resolved" "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.14.5.tgz"
731 + "version" "7.14.5"
732 + dependencies:
733 + "@babel/helper-plugin-utils" "^7.14.5"
734 +
735 +"@babel/plugin-transform-exponentiation-operator@^7.12.1", "@babel/plugin-transform-exponentiation-operator@^7.14.5":
736 + "integrity" "sha512-jFazJhMBc9D27o9jDnIE5ZErI0R0m7PbKXVq77FFvqFbzvTMuv8jaAwLZ5PviOLSFttqKIW0/wxNSDbjLk0tYA=="
737 + "resolved" "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.14.5.tgz"
738 + "version" "7.14.5"
739 + dependencies:
740 + "@babel/helper-builder-binary-assignment-operator-visitor" "^7.14.5"
741 + "@babel/helper-plugin-utils" "^7.14.5"
742 +
743 +"@babel/plugin-transform-flow-strip-types@7.12.1":
744 + "integrity" "sha512-8hAtkmsQb36yMmEtk2JZ9JnVyDSnDOdlB+0nEGzIDLuK4yR3JcEjfuFPYkdEPSh8Id+rAMeBEn+X0iVEyho6Hg=="
745 + "resolved" "https://registry.yarnpkg.com/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.12.1.tgz"
746 + "version" "7.12.1"
747 + dependencies:
748 + "@babel/helper-plugin-utils" "^7.10.4"
749 + "@babel/plugin-syntax-flow" "^7.12.1"
750 +
751 +"@babel/plugin-transform-for-of@^7.12.1", "@babel/plugin-transform-for-of@^7.15.4":
752 + "integrity" "sha512-DRTY9fA751AFBDh2oxydvVm4SYevs5ILTWLs6xKXps4Re/KG5nfUkr+TdHCrRWB8C69TlzVgA9b3RmGWmgN9LA=="
753 + "resolved" "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.15.4.tgz"
754 + "version" "7.15.4"
755 + dependencies:
756 + "@babel/helper-plugin-utils" "^7.14.5"
757 +
758 +"@babel/plugin-transform-function-name@^7.12.1", "@babel/plugin-transform-function-name@^7.14.5":
759 + "integrity" "sha512-vbO6kv0fIzZ1GpmGQuvbwwm+O4Cbm2NrPzwlup9+/3fdkuzo1YqOZcXw26+YUJB84Ja7j9yURWposEHLYwxUfQ=="
760 + "resolved" "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.14.5.tgz"
761 + "version" "7.14.5"
762 + dependencies:
763 + "@babel/helper-function-name" "^7.14.5"
764 + "@babel/helper-plugin-utils" "^7.14.5"
765 +
766 +"@babel/plugin-transform-literals@^7.12.1", "@babel/plugin-transform-literals@^7.14.5":
767 + "integrity" "sha512-ql33+epql2F49bi8aHXxvLURHkxJbSmMKl9J5yHqg4PLtdE6Uc48CH1GS6TQvZ86eoB/ApZXwm7jlA+B3kra7A=="
768 + "resolved" "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.14.5.tgz"
769 + "version" "7.14.5"
770 + dependencies:
771 + "@babel/helper-plugin-utils" "^7.14.5"
772 +
773 +"@babel/plugin-transform-member-expression-literals@^7.12.1", "@babel/plugin-transform-member-expression-literals@^7.14.5":
774 + "integrity" "sha512-WkNXxH1VXVTKarWFqmso83xl+2V3Eo28YY5utIkbsmXoItO8Q3aZxN4BTS2k0hz9dGUloHK26mJMyQEYfkn/+Q=="
775 + "resolved" "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.14.5.tgz"
776 + "version" "7.14.5"
777 + dependencies:
778 + "@babel/helper-plugin-utils" "^7.14.5"
779 +
780 +"@babel/plugin-transform-modules-amd@^7.12.1", "@babel/plugin-transform-modules-amd@^7.14.5":
781 + "integrity" "sha512-3lpOU8Vxmp3roC4vzFpSdEpGUWSMsHFreTWOMMLzel2gNGfHE5UWIh/LN6ghHs2xurUp4jRFYMUIZhuFbody1g=="
782 + "resolved" "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.14.5.tgz"
783 + "version" "7.14.5"
784 + dependencies:
785 + "@babel/helper-module-transforms" "^7.14.5"
786 + "@babel/helper-plugin-utils" "^7.14.5"
787 + "babel-plugin-dynamic-import-node" "^2.3.3"
788 +
789 +"@babel/plugin-transform-modules-commonjs@^7.12.1", "@babel/plugin-transform-modules-commonjs@^7.15.4":
790 + "integrity" "sha512-qg4DPhwG8hKp4BbVDvX1s8cohM8a6Bvptu4l6Iingq5rW+yRUAhe/YRup/YcW2zCOlrysEWVhftIcKzrEZv3sA=="
791 + "resolved" "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.15.4.tgz"
792 + "version" "7.15.4"
793 + dependencies:
794 + "@babel/helper-module-transforms" "^7.15.4"
795 + "@babel/helper-plugin-utils" "^7.14.5"
796 + "@babel/helper-simple-access" "^7.15.4"
797 + "babel-plugin-dynamic-import-node" "^2.3.3"
798 +
799 +"@babel/plugin-transform-modules-systemjs@^7.12.1", "@babel/plugin-transform-modules-systemjs@^7.15.4":
800 + "integrity" "sha512-fJUnlQrl/mezMneR72CKCgtOoahqGJNVKpompKwzv3BrEXdlPspTcyxrZ1XmDTIr9PpULrgEQo3qNKp6dW7ssw=="
801 + "resolved" "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.15.4.tgz"
802 + "version" "7.15.4"
803 + dependencies:
804 + "@babel/helper-hoist-variables" "^7.15.4"
805 + "@babel/helper-module-transforms" "^7.15.4"
806 + "@babel/helper-plugin-utils" "^7.14.5"
807 + "@babel/helper-validator-identifier" "^7.14.9"
808 + "babel-plugin-dynamic-import-node" "^2.3.3"
809 +
810 +"@babel/plugin-transform-modules-umd@^7.12.1", "@babel/plugin-transform-modules-umd@^7.14.5":
811 + "integrity" "sha512-RfPGoagSngC06LsGUYyM9QWSXZ8MysEjDJTAea1lqRjNECE3y0qIJF/qbvJxc4oA4s99HumIMdXOrd+TdKaAAA=="
812 + "resolved" "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.14.5.tgz"
813 + "version" "7.14.5"
814 + dependencies:
815 + "@babel/helper-module-transforms" "^7.14.5"
816 + "@babel/helper-plugin-utils" "^7.14.5"
817 +
818 +"@babel/plugin-transform-named-capturing-groups-regex@^7.12.1", "@babel/plugin-transform-named-capturing-groups-regex@^7.14.9":
819 + "integrity" "sha512-l666wCVYO75mlAtGFfyFwnWmIXQm3kSH0C3IRnJqWcZbWkoihyAdDhFm2ZWaxWTqvBvhVFfJjMRQ0ez4oN1yYA=="
820 + "resolved" "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.14.9.tgz"
821 + "version" "7.14.9"
822 + dependencies:
823 + "@babel/helper-create-regexp-features-plugin" "^7.14.5"
824 +
825 +"@babel/plugin-transform-new-target@^7.12.1", "@babel/plugin-transform-new-target@^7.14.5":
826 + "integrity" "sha512-Nx054zovz6IIRWEB49RDRuXGI4Gy0GMgqG0cII9L3MxqgXz/+rgII+RU58qpo4g7tNEx1jG7rRVH4ihZoP4esQ=="
827 + "resolved" "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.14.5.tgz"
828 + "version" "7.14.5"
829 + dependencies:
830 + "@babel/helper-plugin-utils" "^7.14.5"
831 +
832 +"@babel/plugin-transform-object-super@^7.12.1", "@babel/plugin-transform-object-super@^7.14.5":
833 + "integrity" "sha512-MKfOBWzK0pZIrav9z/hkRqIk/2bTv9qvxHzPQc12RcVkMOzpIKnFCNYJip00ssKWYkd8Sf5g0Wr7pqJ+cmtuFg=="
834 + "resolved" "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.14.5.tgz"
835 + "version" "7.14.5"
836 + dependencies:
837 + "@babel/helper-plugin-utils" "^7.14.5"
838 + "@babel/helper-replace-supers" "^7.14.5"
839 +
840 +"@babel/plugin-transform-parameters@^7.12.1", "@babel/plugin-transform-parameters@^7.15.4":
841 + "integrity" "sha512-9WB/GUTO6lvJU3XQsSr6J/WKvBC2hcs4Pew8YxZagi6GkTdniyqp8On5kqdK8MN0LMeu0mGbhPN+O049NV/9FQ=="
842 + "resolved" "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.15.4.tgz"
843 + "version" "7.15.4"
844 + dependencies:
845 + "@babel/helper-plugin-utils" "^7.14.5"
846 +
847 +"@babel/plugin-transform-property-literals@^7.12.1", "@babel/plugin-transform-property-literals@^7.14.5":
848 + "integrity" "sha512-r1uilDthkgXW8Z1vJz2dKYLV1tuw2xsbrp3MrZmD99Wh9vsfKoob+JTgri5VUb/JqyKRXotlOtwgu4stIYCmnw=="
849 + "resolved" "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.14.5.tgz"
850 + "version" "7.14.5"
851 + dependencies:
852 + "@babel/helper-plugin-utils" "^7.14.5"
853 +
854 +"@babel/plugin-transform-react-constant-elements@^7.9.0":
855 + "integrity" "sha512-NBqLEx1GxllIOXJInJAQbrnwwYJsV3WaMHIcOwD8rhYS0AabTWn7kHdHgPgu5RmHLU0q4DMxhAMu8ue/KampgQ=="
856 + "resolved" "https://registry.yarnpkg.com/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.14.5.tgz"
857 + "version" "7.14.5"
858 + dependencies:
859 + "@babel/helper-plugin-utils" "^7.14.5"
860 +
861 +"@babel/plugin-transform-react-display-name@^7.12.1":
862 + "integrity" "sha512-yQZ/i/pUCJAHI/LbtZr413S3VT26qNrEm0M5RRxQJA947/YNYwbZbBaXGDrq6CG5QsZycI1VIP6d7pQaBfP+8Q=="
863 + "resolved" "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.15.1.tgz"
864 + "version" "7.15.1"
865 + dependencies:
866 + "@babel/helper-plugin-utils" "^7.14.5"
867 +
868 +"@babel/plugin-transform-react-display-name@^7.14.5":
869 + "integrity" "sha512-yQZ/i/pUCJAHI/LbtZr413S3VT26qNrEm0M5RRxQJA947/YNYwbZbBaXGDrq6CG5QsZycI1VIP6d7pQaBfP+8Q=="
870 + "resolved" "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.15.1.tgz"
871 + "version" "7.15.1"
872 + dependencies:
873 + "@babel/helper-plugin-utils" "^7.14.5"
874 +
875 +"@babel/plugin-transform-react-display-name@7.12.1":
876 + "integrity" "sha512-cAzB+UzBIrekfYxyLlFqf/OagTvHLcVBb5vpouzkYkBclRPraiygVnafvAoipErZLI8ANv8Ecn6E/m5qPXD26w=="
877 + "resolved" "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.12.1.tgz"
878 + "version" "7.12.1"
879 + dependencies:
880 + "@babel/helper-plugin-utils" "^7.10.4"
881 +
882 +"@babel/plugin-transform-react-jsx-development@^7.12.1":
883 + "integrity" "sha512-rdwG/9jC6QybWxVe2UVOa7q6cnTpw8JRRHOxntG/h6g/guAOe6AhtQHJuJh5FwmnXIT1bdm5vC2/5huV8ZOorQ=="
884 + "resolved" "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.14.5.tgz"
885 + "version" "7.14.5"
886 + dependencies:
887 + "@babel/plugin-transform-react-jsx" "^7.14.5"
888 +
889 +"@babel/plugin-transform-react-jsx-development@^7.14.5":
890 + "integrity" "sha512-rdwG/9jC6QybWxVe2UVOa7q6cnTpw8JRRHOxntG/h6g/guAOe6AhtQHJuJh5FwmnXIT1bdm5vC2/5huV8ZOorQ=="
891 + "resolved" "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.14.5.tgz"
892 + "version" "7.14.5"
893 + dependencies:
894 + "@babel/plugin-transform-react-jsx" "^7.14.5"
895 +
896 +"@babel/plugin-transform-react-jsx-self@^7.12.1":
897 + "integrity" "sha512-Fqqu0f8zv9W+RyOnx29BX/RlEsBRANbOf5xs5oxb2aHP4FKbLXxIaVPUiCti56LAR1IixMH4EyaixhUsKqoBHw=="
898 + "resolved" "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.14.9.tgz"
899 + "version" "7.14.9"
900 + dependencies:
901 + "@babel/helper-plugin-utils" "^7.14.5"
902 +
903 +"@babel/plugin-transform-react-jsx-source@^7.12.1":
904 + "integrity" "sha512-1TpSDnD9XR/rQ2tzunBVPThF5poaYT9GqP+of8fAtguYuI/dm2RkrMBDemsxtY0XBzvW7nXjYM0hRyKX9QYj7Q=="
905 + "resolved" "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.14.5.tgz"
906 + "version" "7.14.5"
907 + dependencies:
908 + "@babel/helper-plugin-utils" "^7.14.5"
909 +
910 +"@babel/plugin-transform-react-jsx@^7.12.1", "@babel/plugin-transform-react-jsx@^7.14.5":
911 + "integrity" "sha512-30PeETvS+AeD1f58i1OVyoDlVYQhap/K20ZrMjLmmzmC2AYR/G43D4sdJAaDAqCD3MYpSWbmrz3kES158QSLjw=="
912 + "resolved" "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.14.9.tgz"
913 + "version" "7.14.9"
914 + dependencies:
915 + "@babel/helper-annotate-as-pure" "^7.14.5"
916 + "@babel/helper-module-imports" "^7.14.5"
917 + "@babel/helper-plugin-utils" "^7.14.5"
918 + "@babel/plugin-syntax-jsx" "^7.14.5"
919 + "@babel/types" "^7.14.9"
920 +
921 +"@babel/plugin-transform-react-pure-annotations@^7.12.1":
922 + "integrity" "sha512-3X4HpBJimNxW4rhUy/SONPyNQHp5YRr0HhJdT2OH1BRp0of7u3Dkirc7x9FRJMKMqTBI079VZ1hzv7Ouuz///g=="
923 + "resolved" "https://registry.yarnpkg.com/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.14.5.tgz"
924 + "version" "7.14.5"
925 + dependencies:
926 + "@babel/helper-annotate-as-pure" "^7.14.5"
927 + "@babel/helper-plugin-utils" "^7.14.5"
928 +
929 +"@babel/plugin-transform-react-pure-annotations@^7.14.5":
930 + "integrity" "sha512-3X4HpBJimNxW4rhUy/SONPyNQHp5YRr0HhJdT2OH1BRp0of7u3Dkirc7x9FRJMKMqTBI079VZ1hzv7Ouuz///g=="
931 + "resolved" "https://registry.yarnpkg.com/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.14.5.tgz"
932 + "version" "7.14.5"
933 + dependencies:
934 + "@babel/helper-annotate-as-pure" "^7.14.5"
935 + "@babel/helper-plugin-utils" "^7.14.5"
936 +
937 +"@babel/plugin-transform-regenerator@^7.12.1", "@babel/plugin-transform-regenerator@^7.14.5":
938 + "integrity" "sha512-NVIY1W3ITDP5xQl50NgTKlZ0GrotKtLna08/uGY6ErQt6VEQZXla86x/CTddm5gZdcr+5GSsvMeTmWA5Ii6pkg=="
939 + "resolved" "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.14.5.tgz"
940 + "version" "7.14.5"
941 + dependencies:
942 + "regenerator-transform" "^0.14.2"
943 +
944 +"@babel/plugin-transform-reserved-words@^7.12.1", "@babel/plugin-transform-reserved-words@^7.14.5":
945 + "integrity" "sha512-cv4F2rv1nD4qdexOGsRQXJrOcyb5CrgjUH9PKrrtyhSDBNWGxd0UIitjyJiWagS+EbUGjG++22mGH1Pub8D6Vg=="
946 + "resolved" "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.14.5.tgz"
947 + "version" "7.14.5"
948 + dependencies:
949 + "@babel/helper-plugin-utils" "^7.14.5"
950 +
951 +"@babel/plugin-transform-runtime@7.12.1":
952 + "integrity" "sha512-Ac/H6G9FEIkS2tXsZjL4RAdS3L3WHxci0usAnz7laPWUmFiGtj7tIASChqKZMHTSQTQY6xDbOq+V1/vIq3QrWg=="
953 + "resolved" "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.12.1.tgz"
954 + "version" "7.12.1"
955 + dependencies:
956 + "@babel/helper-module-imports" "^7.12.1"
957 + "@babel/helper-plugin-utils" "^7.10.4"
958 + "resolve" "^1.8.1"
959 + "semver" "^5.5.1"
960 +
961 +"@babel/plugin-transform-shorthand-properties@^7.12.1", "@babel/plugin-transform-shorthand-properties@^7.14.5":
962 + "integrity" "sha512-xLucks6T1VmGsTB+GWK5Pl9Jl5+nRXD1uoFdA5TSO6xtiNjtXTjKkmPdFXVLGlK5A2/or/wQMKfmQ2Y0XJfn5g=="
963 + "resolved" "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.14.5.tgz"
964 + "version" "7.14.5"
965 + dependencies:
966 + "@babel/helper-plugin-utils" "^7.14.5"
967 +
968 +"@babel/plugin-transform-spread@^7.12.1", "@babel/plugin-transform-spread@^7.14.6":
969 + "integrity" "sha512-Zr0x0YroFJku7n7+/HH3A2eIrGMjbmAIbJSVv0IZ+t3U2WUQUA64S/oeied2e+MaGSjmt4alzBCsK9E8gh+fag=="
970 + "resolved" "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.14.6.tgz"
971 + "version" "7.14.6"
972 + dependencies:
973 + "@babel/helper-plugin-utils" "^7.14.5"
974 + "@babel/helper-skip-transparent-expression-wrappers" "^7.14.5"
975 +
976 +"@babel/plugin-transform-sticky-regex@^7.12.1", "@babel/plugin-transform-sticky-regex@^7.14.5":
977 + "integrity" "sha512-Z7F7GyvEMzIIbwnziAZmnSNpdijdr4dWt+FJNBnBLz5mwDFkqIXU9wmBcWWad3QeJF5hMTkRe4dAq2sUZiG+8A=="
978 + "resolved" "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.14.5.tgz"
979 + "version" "7.14.5"
980 + dependencies:
981 + "@babel/helper-plugin-utils" "^7.14.5"
982 +
983 +"@babel/plugin-transform-template-literals@^7.12.1", "@babel/plugin-transform-template-literals@^7.14.5":
984 + "integrity" "sha512-22btZeURqiepOfuy/VkFr+zStqlujWaarpMErvay7goJS6BWwdd6BY9zQyDLDa4x2S3VugxFb162IZ4m/S/+Gg=="
985 + "resolved" "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.14.5.tgz"
986 + "version" "7.14.5"
987 + dependencies:
988 + "@babel/helper-plugin-utils" "^7.14.5"
989 +
990 +"@babel/plugin-transform-typeof-symbol@^7.12.1", "@babel/plugin-transform-typeof-symbol@^7.14.5":
991 + "integrity" "sha512-lXzLD30ffCWseTbMQzrvDWqljvZlHkXU+CnseMhkMNqU1sASnCsz3tSzAaH3vCUXb9PHeUb90ZT1BdFTm1xxJw=="
992 + "resolved" "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.14.5.tgz"
993 + "version" "7.14.5"
994 + dependencies:
995 + "@babel/helper-plugin-utils" "^7.14.5"
996 +
997 +"@babel/plugin-transform-typescript@^7.12.1":
998 + "integrity" "sha512-sM1/FEjwYjXvMwu1PJStH11kJ154zd/lpY56NQJ5qH2D0mabMv1CAy/kdvS9RP4Xgfj9fBBA3JiSLdDHgXdzOA=="
999 + "resolved" "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.15.4.tgz"
1000 + "version" "7.15.4"
1001 + dependencies:
1002 + "@babel/helper-create-class-features-plugin" "^7.15.4"
1003 + "@babel/helper-plugin-utils" "^7.14.5"
1004 + "@babel/plugin-syntax-typescript" "^7.14.5"
1005 +
1006 +"@babel/plugin-transform-unicode-escapes@^7.12.1", "@babel/plugin-transform-unicode-escapes@^7.14.5":
1007 + "integrity" "sha512-crTo4jATEOjxj7bt9lbYXcBAM3LZaUrbP2uUdxb6WIorLmjNKSpHfIybgY4B8SRpbf8tEVIWH3Vtm7ayCrKocA=="
1008 + "resolved" "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.14.5.tgz"
1009 + "version" "7.14.5"
1010 + dependencies:
1011 + "@babel/helper-plugin-utils" "^7.14.5"
1012 +
1013 +"@babel/plugin-transform-unicode-regex@^7.12.1", "@babel/plugin-transform-unicode-regex@^7.14.5":
1014 + "integrity" "sha512-UygduJpC5kHeCiRw/xDVzC+wj8VaYSoKl5JNVmbP7MadpNinAm3SvZCxZ42H37KZBKztz46YC73i9yV34d0Tzw=="
1015 + "resolved" "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.14.5.tgz"
1016 + "version" "7.14.5"
1017 + dependencies:
1018 + "@babel/helper-create-regexp-features-plugin" "^7.14.5"
1019 + "@babel/helper-plugin-utils" "^7.14.5"
1020 +
1021 +"@babel/preset-env@^7.8.4", "@babel/preset-env@^7.9.5":
1022 + "integrity" "sha512-L+6jcGn7EWu7zqaO2uoTDjjMBW+88FXzV8KvrBl2z6MtRNxlsmUNRlZPaNNPUTgqhyC5DHNFk/2Jmra+ublZWw=="
1023 + "resolved" "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.15.6.tgz"
1024 + "version" "7.15.6"
1025 + dependencies:
1026 + "@babel/compat-data" "^7.15.0"
1027 + "@babel/helper-compilation-targets" "^7.15.4"
1028 + "@babel/helper-plugin-utils" "^7.14.5"
1029 + "@babel/helper-validator-option" "^7.14.5"
1030 + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.15.4"
1031 + "@babel/plugin-proposal-async-generator-functions" "^7.15.4"
1032 + "@babel/plugin-proposal-class-properties" "^7.14.5"
1033 + "@babel/plugin-proposal-class-static-block" "^7.15.4"
1034 + "@babel/plugin-proposal-dynamic-import" "^7.14.5"
1035 + "@babel/plugin-proposal-export-namespace-from" "^7.14.5"
1036 + "@babel/plugin-proposal-json-strings" "^7.14.5"
1037 + "@babel/plugin-proposal-logical-assignment-operators" "^7.14.5"
1038 + "@babel/plugin-proposal-nullish-coalescing-operator" "^7.14.5"
1039 + "@babel/plugin-proposal-numeric-separator" "^7.14.5"
1040 + "@babel/plugin-proposal-object-rest-spread" "^7.15.6"
1041 + "@babel/plugin-proposal-optional-catch-binding" "^7.14.5"
1042 + "@babel/plugin-proposal-optional-chaining" "^7.14.5"
1043 + "@babel/plugin-proposal-private-methods" "^7.14.5"
1044 + "@babel/plugin-proposal-private-property-in-object" "^7.15.4"
1045 + "@babel/plugin-proposal-unicode-property-regex" "^7.14.5"
1046 + "@babel/plugin-syntax-async-generators" "^7.8.4"
1047 + "@babel/plugin-syntax-class-properties" "^7.12.13"
1048 + "@babel/plugin-syntax-class-static-block" "^7.14.5"
1049 + "@babel/plugin-syntax-dynamic-import" "^7.8.3"
1050 + "@babel/plugin-syntax-export-namespace-from" "^7.8.3"
1051 + "@babel/plugin-syntax-json-strings" "^7.8.3"
1052 + "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4"
1053 + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3"
1054 + "@babel/plugin-syntax-numeric-separator" "^7.10.4"
1055 + "@babel/plugin-syntax-object-rest-spread" "^7.8.3"
1056 + "@babel/plugin-syntax-optional-catch-binding" "^7.8.3"
1057 + "@babel/plugin-syntax-optional-chaining" "^7.8.3"
1058 + "@babel/plugin-syntax-private-property-in-object" "^7.14.5"
1059 + "@babel/plugin-syntax-top-level-await" "^7.14.5"
1060 + "@babel/plugin-transform-arrow-functions" "^7.14.5"
1061 + "@babel/plugin-transform-async-to-generator" "^7.14.5"
1062 + "@babel/plugin-transform-block-scoped-functions" "^7.14.5"
1063 + "@babel/plugin-transform-block-scoping" "^7.15.3"
1064 + "@babel/plugin-transform-classes" "^7.15.4"
1065 + "@babel/plugin-transform-computed-properties" "^7.14.5"
1066 + "@babel/plugin-transform-destructuring" "^7.14.7"
1067 + "@babel/plugin-transform-dotall-regex" "^7.14.5"
1068 + "@babel/plugin-transform-duplicate-keys" "^7.14.5"
1069 + "@babel/plugin-transform-exponentiation-operator" "^7.14.5"
1070 + "@babel/plugin-transform-for-of" "^7.15.4"
1071 + "@babel/plugin-transform-function-name" "^7.14.5"
1072 + "@babel/plugin-transform-literals" "^7.14.5"
1073 + "@babel/plugin-transform-member-expression-literals" "^7.14.5"
1074 + "@babel/plugin-transform-modules-amd" "^7.14.5"
1075 + "@babel/plugin-transform-modules-commonjs" "^7.15.4"
1076 + "@babel/plugin-transform-modules-systemjs" "^7.15.4"
1077 + "@babel/plugin-transform-modules-umd" "^7.14.5"
1078 + "@babel/plugin-transform-named-capturing-groups-regex" "^7.14.9"
1079 + "@babel/plugin-transform-new-target" "^7.14.5"
1080 + "@babel/plugin-transform-object-super" "^7.14.5"
1081 + "@babel/plugin-transform-parameters" "^7.15.4"
1082 + "@babel/plugin-transform-property-literals" "^7.14.5"
1083 + "@babel/plugin-transform-regenerator" "^7.14.5"
1084 + "@babel/plugin-transform-reserved-words" "^7.14.5"
1085 + "@babel/plugin-transform-shorthand-properties" "^7.14.5"
1086 + "@babel/plugin-transform-spread" "^7.14.6"
1087 + "@babel/plugin-transform-sticky-regex" "^7.14.5"
1088 + "@babel/plugin-transform-template-literals" "^7.14.5"
1089 + "@babel/plugin-transform-typeof-symbol" "^7.14.5"
1090 + "@babel/plugin-transform-unicode-escapes" "^7.14.5"
1091 + "@babel/plugin-transform-unicode-regex" "^7.14.5"
1092 + "@babel/preset-modules" "^0.1.4"
1093 + "@babel/types" "^7.15.6"
1094 + "babel-plugin-polyfill-corejs2" "^0.2.2"
1095 + "babel-plugin-polyfill-corejs3" "^0.2.2"
1096 + "babel-plugin-polyfill-regenerator" "^0.2.2"
1097 + "core-js-compat" "^3.16.0"
1098 + "semver" "^6.3.0"
1099 +
1100 +"@babel/preset-env@7.12.1":
1101 + "integrity" "sha512-H8kxXmtPaAGT7TyBvSSkoSTUK6RHh61So05SyEbpmr0MCZrsNYn7mGMzzeYoOUCdHzww61k8XBft2TaES+xPLg=="
1102 + "resolved" "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.12.1.tgz"
1103 + "version" "7.12.1"
1104 + dependencies:
1105 + "@babel/compat-data" "^7.12.1"
1106 + "@babel/helper-compilation-targets" "^7.12.1"
1107 + "@babel/helper-module-imports" "^7.12.1"
1108 + "@babel/helper-plugin-utils" "^7.10.4"
1109 + "@babel/helper-validator-option" "^7.12.1"
1110 + "@babel/plugin-proposal-async-generator-functions" "^7.12.1"
1111 + "@babel/plugin-proposal-class-properties" "^7.12.1"
1112 + "@babel/plugin-proposal-dynamic-import" "^7.12.1"
1113 + "@babel/plugin-proposal-export-namespace-from" "^7.12.1"
1114 + "@babel/plugin-proposal-json-strings" "^7.12.1"
1115 + "@babel/plugin-proposal-logical-assignment-operators" "^7.12.1"
1116 + "@babel/plugin-proposal-nullish-coalescing-operator" "^7.12.1"
1117 + "@babel/plugin-proposal-numeric-separator" "^7.12.1"
1118 + "@babel/plugin-proposal-object-rest-spread" "^7.12.1"
1119 + "@babel/plugin-proposal-optional-catch-binding" "^7.12.1"
1120 + "@babel/plugin-proposal-optional-chaining" "^7.12.1"
1121 + "@babel/plugin-proposal-private-methods" "^7.12.1"
1122 + "@babel/plugin-proposal-unicode-property-regex" "^7.12.1"
1123 + "@babel/plugin-syntax-async-generators" "^7.8.0"
1124 + "@babel/plugin-syntax-class-properties" "^7.12.1"
1125 + "@babel/plugin-syntax-dynamic-import" "^7.8.0"
1126 + "@babel/plugin-syntax-export-namespace-from" "^7.8.3"
1127 + "@babel/plugin-syntax-json-strings" "^7.8.0"
1128 + "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4"
1129 + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.0"
1130 + "@babel/plugin-syntax-numeric-separator" "^7.10.4"
1131 + "@babel/plugin-syntax-object-rest-spread" "^7.8.0"
1132 + "@babel/plugin-syntax-optional-catch-binding" "^7.8.0"
1133 + "@babel/plugin-syntax-optional-chaining" "^7.8.0"
1134 + "@babel/plugin-syntax-top-level-await" "^7.12.1"
1135 + "@babel/plugin-transform-arrow-functions" "^7.12.1"
1136 + "@babel/plugin-transform-async-to-generator" "^7.12.1"
1137 + "@babel/plugin-transform-block-scoped-functions" "^7.12.1"
1138 + "@babel/plugin-transform-block-scoping" "^7.12.1"
1139 + "@babel/plugin-transform-classes" "^7.12.1"
1140 + "@babel/plugin-transform-computed-properties" "^7.12.1"
1141 + "@babel/plugin-transform-destructuring" "^7.12.1"
1142 + "@babel/plugin-transform-dotall-regex" "^7.12.1"
1143 + "@babel/plugin-transform-duplicate-keys" "^7.12.1"
1144 + "@babel/plugin-transform-exponentiation-operator" "^7.12.1"
1145 + "@babel/plugin-transform-for-of" "^7.12.1"
1146 + "@babel/plugin-transform-function-name" "^7.12.1"
1147 + "@babel/plugin-transform-literals" "^7.12.1"
1148 + "@babel/plugin-transform-member-expression-literals" "^7.12.1"
1149 + "@babel/plugin-transform-modules-amd" "^7.12.1"
1150 + "@babel/plugin-transform-modules-commonjs" "^7.12.1"
1151 + "@babel/plugin-transform-modules-systemjs" "^7.12.1"
1152 + "@babel/plugin-transform-modules-umd" "^7.12.1"
1153 + "@babel/plugin-transform-named-capturing-groups-regex" "^7.12.1"
1154 + "@babel/plugin-transform-new-target" "^7.12.1"
1155 + "@babel/plugin-transform-object-super" "^7.12.1"
1156 + "@babel/plugin-transform-parameters" "^7.12.1"
1157 + "@babel/plugin-transform-property-literals" "^7.12.1"
1158 + "@babel/plugin-transform-regenerator" "^7.12.1"
1159 + "@babel/plugin-transform-reserved-words" "^7.12.1"
1160 + "@babel/plugin-transform-shorthand-properties" "^7.12.1"
1161 + "@babel/plugin-transform-spread" "^7.12.1"
1162 + "@babel/plugin-transform-sticky-regex" "^7.12.1"
1163 + "@babel/plugin-transform-template-literals" "^7.12.1"
1164 + "@babel/plugin-transform-typeof-symbol" "^7.12.1"
1165 + "@babel/plugin-transform-unicode-escapes" "^7.12.1"
1166 + "@babel/plugin-transform-unicode-regex" "^7.12.1"
1167 + "@babel/preset-modules" "^0.1.3"
1168 + "@babel/types" "^7.12.1"
1169 + "core-js-compat" "^3.6.2"
1170 + "semver" "^5.5.0"
1171 +
1172 +"@babel/preset-modules@^0.1.3", "@babel/preset-modules@^0.1.4":
1173 + "integrity" "sha512-J36NhwnfdzpmH41M1DrnkkgAqhZaqr/NBdPfQ677mLzlaXo+oDiv1deyCDtgAhz8p328otdob0Du7+xgHGZbKg=="
1174 + "resolved" "https://registry.yarnpkg.com/@babel/preset-modules/-/preset-modules-0.1.4.tgz"
1175 + "version" "0.1.4"
1176 + dependencies:
1177 + "@babel/helper-plugin-utils" "^7.0.0"
1178 + "@babel/plugin-proposal-unicode-property-regex" "^7.4.4"
1179 + "@babel/plugin-transform-dotall-regex" "^7.4.4"
1180 + "@babel/types" "^7.4.4"
1181 + "esutils" "^2.0.2"
1182 +
1183 +"@babel/preset-react@^7.9.4":
1184 + "integrity" "sha512-XFxBkjyObLvBaAvkx1Ie95Iaq4S/GUEIrejyrntQ/VCMKUYvKLoyKxOBzJ2kjA3b6rC9/KL6KXfDC2GqvLiNqQ=="
1185 + "resolved" "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.14.5.tgz"
1186 + "version" "7.14.5"
1187 + dependencies:
1188 + "@babel/helper-plugin-utils" "^7.14.5"
1189 + "@babel/helper-validator-option" "^7.14.5"
1190 + "@babel/plugin-transform-react-display-name" "^7.14.5"
1191 + "@babel/plugin-transform-react-jsx" "^7.14.5"
1192 + "@babel/plugin-transform-react-jsx-development" "^7.14.5"
1193 + "@babel/plugin-transform-react-pure-annotations" "^7.14.5"
1194 +
1195 +"@babel/preset-react@7.12.1":
1196 + "integrity" "sha512-euCExymHCi0qB9u5fKw7rvlw7AZSjw/NaB9h7EkdTt5+yHRrXdiRTh7fkG3uBPpJg82CqLfp1LHLqWGSCrab+g=="
1197 + "resolved" "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.12.1.tgz"
1198 + "version" "7.12.1"
1199 + dependencies:
1200 + "@babel/helper-plugin-utils" "^7.10.4"
1201 + "@babel/plugin-transform-react-display-name" "^7.12.1"
1202 + "@babel/plugin-transform-react-jsx" "^7.12.1"
1203 + "@babel/plugin-transform-react-jsx-development" "^7.12.1"
1204 + "@babel/plugin-transform-react-jsx-self" "^7.12.1"
1205 + "@babel/plugin-transform-react-jsx-source" "^7.12.1"
1206 + "@babel/plugin-transform-react-pure-annotations" "^7.12.1"
1207 +
1208 +"@babel/preset-typescript@7.12.1":
1209 + "integrity" "sha512-hNK/DhmoJPsksdHuI/RVrcEws7GN5eamhi28JkO52MqIxU8Z0QpmiSOQxZHWOHV7I3P4UjHV97ay4TcamMA6Kw=="
1210 + "resolved" "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.12.1.tgz"
1211 + "version" "7.12.1"
1212 + dependencies:
1213 + "@babel/helper-plugin-utils" "^7.10.4"
1214 + "@babel/plugin-transform-typescript" "^7.12.1"
1215 +
1216 +"@babel/runtime-corejs3@^7.10.2":
1217 + "integrity" "sha512-lWcAqKeB624/twtTc3w6w/2o9RqJPaNBhPGK6DKLSiwuVWC7WFkypWyNg+CpZoyJH0jVzv1uMtXZ/5/lQOLtCg=="
1218 + "resolved" "https://registry.yarnpkg.com/@babel/runtime-corejs3/-/runtime-corejs3-7.15.4.tgz"
1219 + "version" "7.15.4"
1220 + dependencies:
1221 + "core-js-pure" "^3.16.0"
1222 + "regenerator-runtime" "^0.13.4"
1223 +
1224 +"@babel/runtime@^7.10.2":
1225 + "integrity" "sha512-99catp6bHCaxr4sJ/DbTGgHS4+Rs2RVd2g7iOap6SLGPDknRK9ztKNsE/Fg6QhSeh1FGE5f6gHGQmvvn3I3xhw=="
1226 + "resolved" "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.15.4.tgz"
1227 + "version" "7.15.4"
1228 + dependencies:
1229 + "regenerator-runtime" "^0.13.4"
1230 +
1231 +"@babel/runtime@^7.11.2":
1232 + "integrity" "sha512-99catp6bHCaxr4sJ/DbTGgHS4+Rs2RVd2g7iOap6SLGPDknRK9ztKNsE/Fg6QhSeh1FGE5f6gHGQmvvn3I3xhw=="
1233 + "resolved" "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.15.4.tgz"
1234 + "version" "7.15.4"
1235 + dependencies:
1236 + "regenerator-runtime" "^0.13.4"
1237 +
1238 +"@babel/runtime@^7.5.5":
1239 + "integrity" "sha512-99catp6bHCaxr4sJ/DbTGgHS4+Rs2RVd2g7iOap6SLGPDknRK9ztKNsE/Fg6QhSeh1FGE5f6gHGQmvvn3I3xhw=="
1240 + "resolved" "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.15.4.tgz"
1241 + "version" "7.15.4"
1242 + dependencies:
1243 + "regenerator-runtime" "^0.13.4"
1244 +
1245 +"@babel/runtime@^7.7.2":
1246 + "integrity" "sha512-99catp6bHCaxr4sJ/DbTGgHS4+Rs2RVd2g7iOap6SLGPDknRK9ztKNsE/Fg6QhSeh1FGE5f6gHGQmvvn3I3xhw=="
1247 + "resolved" "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.15.4.tgz"
1248 + "version" "7.15.4"
1249 + dependencies:
1250 + "regenerator-runtime" "^0.13.4"
1251 +
1252 +"@babel/runtime@^7.8.4":
1253 + "integrity" "sha512-99catp6bHCaxr4sJ/DbTGgHS4+Rs2RVd2g7iOap6SLGPDknRK9ztKNsE/Fg6QhSeh1FGE5f6gHGQmvvn3I3xhw=="
1254 + "resolved" "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.15.4.tgz"
1255 + "version" "7.15.4"
1256 + dependencies:
1257 + "regenerator-runtime" "^0.13.4"
1258 +
1259 +"@babel/runtime@7.12.1":
1260 + "integrity" "sha512-J5AIf3vPj3UwXaAzb5j1xM4WAQDX3EMgemF8rjCP3SoW09LfRKAXQKt6CoVYl230P6iWdRcBbnLDDdnqWxZSCA=="
1261 + "resolved" "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.12.1.tgz"
1262 + "version" "7.12.1"
1263 + dependencies:
1264 + "regenerator-runtime" "^0.13.4"
1265 +
1266 +"@babel/runtime@7.13.8":
1267 + "integrity" "sha512-CwQljpw6qSayc0fRG1soxHAKs1CnQMOChm4mlQP6My0kf9upVGizj/KhlTTgyUnETmHpcUXjaluNAkteRFuafg=="
1268 + "resolved" "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.13.8.tgz"
1269 + "version" "7.13.8"
1270 + dependencies:
1271 + "regenerator-runtime" "^0.13.4"
1272 +
1273 +"@babel/template@^7.10.4", "@babel/template@^7.15.4", "@babel/template@^7.3.3":
1274 + "integrity" "sha512-UgBAfEa1oGuYgDIPM2G+aHa4Nlo9Lh6mGD2bDBGMTbYnc38vulXPuC1MGjYILIEmlwl6Rd+BPR9ee3gm20CBtg=="
1275 + "resolved" "https://registry.yarnpkg.com/@babel/template/-/template-7.15.4.tgz"
1276 + "version" "7.15.4"
1277 + dependencies:
1278 + "@babel/code-frame" "^7.14.5"
1279 + "@babel/parser" "^7.15.4"
1280 + "@babel/types" "^7.15.4"
1281 +
1282 +"@babel/traverse@^7.1.0", "@babel/traverse@^7.12.1", "@babel/traverse@^7.13.0", "@babel/traverse@^7.15.4", "@babel/traverse@^7.7.0":
1283 + "integrity" "sha512-W6lQD8l4rUbQR/vYgSuCAE75ADyyQvOpFVsvPPdkhf6lATXAsQIG9YdtOcu8BB1dZ0LKu+Zo3c1wEcbKeuhdlA=="
1284 + "resolved" "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.15.4.tgz"
1285 + "version" "7.15.4"
1286 + dependencies:
1287 + "@babel/code-frame" "^7.14.5"
1288 + "@babel/generator" "^7.15.4"
1289 + "@babel/helper-function-name" "^7.15.4"
1290 + "@babel/helper-hoist-variables" "^7.15.4"
1291 + "@babel/helper-split-export-declaration" "^7.15.4"
1292 + "@babel/parser" "^7.15.4"
1293 + "@babel/types" "^7.15.4"
1294 + "debug" "^4.1.0"
1295 + "globals" "^11.1.0"
1296 +
1297 +"@babel/types@^7.0.0", "@babel/types@^7.12.1", "@babel/types@^7.12.6", "@babel/types@^7.14.9", "@babel/types@^7.15.4", "@babel/types@^7.15.6", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4", "@babel/types@^7.7.0":
1298 + "integrity" "sha512-BPU+7QhqNjmWyDO0/vitH/CuhpV8ZmK1wpKva8nuyNF5MJfuRNWMc+hc14+u9xT93kvykMdncrJT19h74uB1Ig=="
1299 + "resolved" "https://registry.yarnpkg.com/@babel/types/-/types-7.15.6.tgz"
1300 + "version" "7.15.6"
1301 + dependencies:
1302 + "@babel/helper-validator-identifier" "^7.14.9"
1303 + "to-fast-properties" "^2.0.0"
1304 +
1305 +"@bcoe/v8-coverage@^0.2.3":
1306 + "integrity" "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw=="
1307 + "resolved" "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz"
1308 + "version" "0.2.3"
1309 +
1310 +"@cnakazawa/watch@^1.0.3":
1311 + "integrity" "sha512-v9kIhKwjeZThiWrLmj0y17CWoyddASLj9O2yvbZkbvw/N3rWOYy9zkV66ursAoVr0mV15bL8g0c4QZUE6cdDoQ=="
1312 + "resolved" "https://registry.yarnpkg.com/@cnakazawa/watch/-/watch-1.0.4.tgz"
1313 + "version" "1.0.4"
1314 + dependencies:
1315 + "exec-sh" "^0.3.2"
1316 + "minimist" "^1.2.0"
1317 +
1318 +"@csstools/convert-colors@^1.4.0":
1319 + "integrity" "sha512-5a6wqoJV/xEdbRNKVo6I4hO3VjyDq//8q2f9I6PBAvMesJHFauXDorcNCsr9RzvsZnaWi5NYCcfyqP1QeFHFbw=="
1320 + "resolved" "https://registry.yarnpkg.com/@csstools/convert-colors/-/convert-colors-1.4.0.tgz"
1321 + "version" "1.4.0"
1322 +
1323 +"@csstools/normalize.css@^10.1.0":
1324 + "integrity" "sha512-ij4wRiunFfaJxjB0BdrYHIH8FxBJpOwNPhhAcunlmPdXudL1WQV1qoP9un6JsEBAgQH+7UXyyjh0g7jTxXK6tg=="
1325 + "resolved" "https://registry.yarnpkg.com/@csstools/normalize.css/-/normalize.css-10.1.0.tgz"
1326 + "version" "10.1.0"
1327 +
1328 +"@eslint/eslintrc@^0.4.3":
1329 + "integrity" "sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw=="
1330 + "resolved" "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.4.3.tgz"
1331 + "version" "0.4.3"
1332 + dependencies:
1333 + "ajv" "^6.12.4"
1334 + "debug" "^4.1.1"
1335 + "espree" "^7.3.0"
1336 + "globals" "^13.9.0"
1337 + "ignore" "^4.0.6"
1338 + "import-fresh" "^3.2.1"
1339 + "js-yaml" "^3.13.1"
1340 + "minimatch" "^3.0.4"
1341 + "strip-json-comments" "^3.1.1"
1342 +
1343 +"@gar/promisify@^1.0.1":
1344 + "integrity" "sha512-82cpyJyKRoQoRi+14ibCeGPu0CwypgtBAdBhq1WfvagpCZNKqwXbKwXllYSMG91DhmG4jt9gN8eP6lGOtozuaw=="
1345 + "resolved" "https://registry.yarnpkg.com/@gar/promisify/-/promisify-1.1.2.tgz"
1346 + "version" "1.1.2"
1347 +
1348 +"@hapi/address@2.x.x":
1349 + "integrity" "sha512-QD1PhQk+s31P1ixsX0H0Suoupp3VMXzIVMSwobR3F3MSUO2YCV0B7xqLcUw/Bh8yuvd3LhpyqLQWTNcRmp6IdQ=="
1350 + "resolved" "https://registry.yarnpkg.com/@hapi/address/-/address-2.1.4.tgz"
1351 + "version" "2.1.4"
1352 +
1353 +"@hapi/bourne@1.x.x":
1354 + "integrity" "sha512-1dVNHT76Uu5N3eJNTYcvxee+jzX4Z9lfciqRRHCU27ihbUcYi+iSc2iml5Ke1LXe1SyJCLA0+14Jh4tXJgOppA=="
1355 + "resolved" "https://registry.yarnpkg.com/@hapi/bourne/-/bourne-1.3.2.tgz"
1356 + "version" "1.3.2"
1357 +
1358 +"@hapi/hoek@^8.3.0", "@hapi/hoek@8.x.x":
1359 + "integrity" "sha512-yN7kbciD87WzLGc5539Tn0sApjyiGHAJgKvG9W8C7O+6c7qmoQMfVs0W4bX17eqz6C78QJqqFrtgdK5EWf6Qow=="
1360 + "resolved" "https://registry.yarnpkg.com/@hapi/hoek/-/hoek-8.5.1.tgz"
1361 + "version" "8.5.1"
1362 +
1363 +"@hapi/joi@^15.1.0":
1364 + "integrity" "sha512-entf8ZMOK8sc+8YfeOlM8pCfg3b5+WZIKBfUaaJT8UsjAAPjartzxIYm3TIbjvA4u+u++KbcXD38k682nVHDAQ=="
1365 + "resolved" "https://registry.yarnpkg.com/@hapi/joi/-/joi-15.1.1.tgz"
1366 + "version" "15.1.1"
1367 + dependencies:
1368 + "@hapi/address" "2.x.x"
1369 + "@hapi/bourne" "1.x.x"
1370 + "@hapi/hoek" "8.x.x"
1371 + "@hapi/topo" "3.x.x"
1372 +
1373 +"@hapi/topo@3.x.x":
1374 + "integrity" "sha512-tAag0jEcjwH+P2quUfipd7liWCNX2F8NvYjQp2wtInsZxnMlypdw0FtAOLxtvvkO+GSRRbmNi8m/5y42PQJYCQ=="
1375 + "resolved" "https://registry.yarnpkg.com/@hapi/topo/-/topo-3.1.6.tgz"
1376 + "version" "3.1.6"
1377 + dependencies:
1378 + "@hapi/hoek" "^8.3.0"
1379 +
1380 +"@humanwhocodes/config-array@^0.5.0":
1381 + "integrity" "sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg=="
1382 + "resolved" "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.5.0.tgz"
1383 + "version" "0.5.0"
1384 + dependencies:
1385 + "@humanwhocodes/object-schema" "^1.2.0"
1386 + "debug" "^4.1.1"
1387 + "minimatch" "^3.0.4"
1388 +
1389 +"@humanwhocodes/object-schema@^1.2.0":
1390 + "integrity" "sha512-wdppn25U8z/2yiaT6YGquE6X8sSv7hNMWSXYSSU1jGv/yd6XqjXgTDJ8KP4NgjTXfJ3GbRjeeb8RTV7a/VpM+w=="
1391 + "resolved" "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.0.tgz"
1392 + "version" "1.2.0"
1393 +
1394 +"@istanbuljs/load-nyc-config@^1.0.0":
1395 + "integrity" "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ=="
1396 + "resolved" "https://registry.yarnpkg.com/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz"
1397 + "version" "1.1.0"
1398 + dependencies:
1399 + "camelcase" "^5.3.1"
1400 + "find-up" "^4.1.0"
1401 + "get-package-type" "^0.1.0"
1402 + "js-yaml" "^3.13.1"
1403 + "resolve-from" "^5.0.0"
1404 +
1405 +"@istanbuljs/schema@^0.1.2":
1406 + "integrity" "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA=="
1407 + "resolved" "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.3.tgz"
1408 + "version" "0.1.3"
1409 +
1410 +"@jest/console@^26.6.2":
1411 + "integrity" "sha512-IY1R2i2aLsLr7Id3S6p2BA82GNWryt4oSvEXLAKc+L2zdi89dSkE8xC1C+0kpATG4JhBJREnQOH7/zmccM2B0g=="
1412 + "resolved" "https://registry.yarnpkg.com/@jest/console/-/console-26.6.2.tgz"
1413 + "version" "26.6.2"
1414 + dependencies:
1415 + "@jest/types" "^26.6.2"
1416 + "@types/node" "*"
1417 + "chalk" "^4.0.0"
1418 + "jest-message-util" "^26.6.2"
1419 + "jest-util" "^26.6.2"
1420 + "slash" "^3.0.0"
1421 +
1422 +"@jest/core@^26.6.0", "@jest/core@^26.6.3":
1423 + "integrity" "sha512-xvV1kKbhfUqFVuZ8Cyo+JPpipAHHAV3kcDBftiduK8EICXmTFddryy3P7NfZt8Pv37rA9nEJBKCCkglCPt/Xjw=="
1424 + "resolved" "https://registry.yarnpkg.com/@jest/core/-/core-26.6.3.tgz"
1425 + "version" "26.6.3"
1426 + dependencies:
1427 + "@jest/console" "^26.6.2"
1428 + "@jest/reporters" "^26.6.2"
1429 + "@jest/test-result" "^26.6.2"
1430 + "@jest/transform" "^26.6.2"
1431 + "@jest/types" "^26.6.2"
1432 + "@types/node" "*"
1433 + "ansi-escapes" "^4.2.1"
1434 + "chalk" "^4.0.0"
1435 + "exit" "^0.1.2"
1436 + "graceful-fs" "^4.2.4"
1437 + "jest-changed-files" "^26.6.2"
1438 + "jest-config" "^26.6.3"
1439 + "jest-haste-map" "^26.6.2"
1440 + "jest-message-util" "^26.6.2"
1441 + "jest-regex-util" "^26.0.0"
1442 + "jest-resolve" "^26.6.2"
1443 + "jest-resolve-dependencies" "^26.6.3"
1444 + "jest-runner" "^26.6.3"
1445 + "jest-runtime" "^26.6.3"
1446 + "jest-snapshot" "^26.6.2"
1447 + "jest-util" "^26.6.2"
1448 + "jest-validate" "^26.6.2"
1449 + "jest-watcher" "^26.6.2"
1450 + "micromatch" "^4.0.2"
1451 + "p-each-series" "^2.1.0"
1452 + "rimraf" "^3.0.0"
1453 + "slash" "^3.0.0"
1454 + "strip-ansi" "^6.0.0"
1455 +
1456 +"@jest/environment@^26.6.0", "@jest/environment@^26.6.2":
1457 + "integrity" "sha512-nFy+fHl28zUrRsCeMB61VDThV1pVTtlEokBRgqPrcT1JNq4yRNIyTHfyht6PqtUvY9IsuLGTrbG8kPXjSZIZwA=="
1458 + "resolved" "https://registry.yarnpkg.com/@jest/environment/-/environment-26.6.2.tgz"
1459 + "version" "26.6.2"
1460 + dependencies:
1461 + "@jest/fake-timers" "^26.6.2"
1462 + "@jest/types" "^26.6.2"
1463 + "@types/node" "*"
1464 + "jest-mock" "^26.6.2"
1465 +
1466 +"@jest/fake-timers@^26.6.2":
1467 + "integrity" "sha512-14Uleatt7jdzefLPYM3KLcnUl1ZNikaKq34enpb5XG9i81JpppDb5muZvonvKyrl7ftEHkKS5L5/eB/kxJ+bvA=="
1468 + "resolved" "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-26.6.2.tgz"
1469 + "version" "26.6.2"
1470 + dependencies:
1471 + "@jest/types" "^26.6.2"
1472 + "@sinonjs/fake-timers" "^6.0.1"
1473 + "@types/node" "*"
1474 + "jest-message-util" "^26.6.2"
1475 + "jest-mock" "^26.6.2"
1476 + "jest-util" "^26.6.2"
1477 +
1478 +"@jest/globals@^26.6.2":
1479 + "integrity" "sha512-85Ltnm7HlB/KesBUuALwQ68YTU72w9H2xW9FjZ1eL1U3lhtefjjl5c2MiUbpXt/i6LaPRvoOFJ22yCBSfQ0JIA=="
1480 + "resolved" "https://registry.yarnpkg.com/@jest/globals/-/globals-26.6.2.tgz"
1481 + "version" "26.6.2"
1482 + dependencies:
1483 + "@jest/environment" "^26.6.2"
1484 + "@jest/types" "^26.6.2"
1485 + "expect" "^26.6.2"
1486 +
1487 +"@jest/reporters@^26.6.2":
1488 + "integrity" "sha512-h2bW53APG4HvkOnVMo8q3QXa6pcaNt1HkwVsOPMBV6LD/q9oSpxNSYZQYkAnjdMjrJ86UuYeLo+aEZClV6opnw=="
1489 + "resolved" "https://registry.yarnpkg.com/@jest/reporters/-/reporters-26.6.2.tgz"
1490 + "version" "26.6.2"
1491 + dependencies:
1492 + "@bcoe/v8-coverage" "^0.2.3"
1493 + "@jest/console" "^26.6.2"
1494 + "@jest/test-result" "^26.6.2"
1495 + "@jest/transform" "^26.6.2"
1496 + "@jest/types" "^26.6.2"
1497 + "chalk" "^4.0.0"
1498 + "collect-v8-coverage" "^1.0.0"
1499 + "exit" "^0.1.2"
1500 + "glob" "^7.1.2"
1501 + "graceful-fs" "^4.2.4"
1502 + "istanbul-lib-coverage" "^3.0.0"
1503 + "istanbul-lib-instrument" "^4.0.3"
1504 + "istanbul-lib-report" "^3.0.0"
1505 + "istanbul-lib-source-maps" "^4.0.0"
1506 + "istanbul-reports" "^3.0.2"
1507 + "jest-haste-map" "^26.6.2"
1508 + "jest-resolve" "^26.6.2"
1509 + "jest-util" "^26.6.2"
1510 + "jest-worker" "^26.6.2"
1511 + "slash" "^3.0.0"
1512 + "source-map" "^0.6.0"
1513 + "string-length" "^4.0.1"
1514 + "terminal-link" "^2.0.0"
1515 + "v8-to-istanbul" "^7.0.0"
1516 + optionalDependencies:
1517 + "node-notifier" "^8.0.0"
1518 +
1519 +"@jest/source-map@^26.6.2":
1520 + "integrity" "sha512-YwYcCwAnNmOVsZ8mr3GfnzdXDAl4LaenZP5z+G0c8bzC9/dugL8zRmxZzdoTl4IaS3CryS1uWnROLPFmb6lVvA=="
1521 + "resolved" "https://registry.yarnpkg.com/@jest/source-map/-/source-map-26.6.2.tgz"
1522 + "version" "26.6.2"
1523 + dependencies:
1524 + "callsites" "^3.0.0"
1525 + "graceful-fs" "^4.2.4"
1526 + "source-map" "^0.6.0"
1527 +
1528 +"@jest/test-result@^26.6.0", "@jest/test-result@^26.6.2":
1529 + "integrity" "sha512-5O7H5c/7YlojphYNrK02LlDIV2GNPYisKwHm2QTKjNZeEzezCbwYs9swJySv2UfPMyZ0VdsmMv7jIlD/IKYQpQ=="
1530 + "resolved" "https://registry.yarnpkg.com/@jest/test-result/-/test-result-26.6.2.tgz"
1531 + "version" "26.6.2"
1532 + dependencies:
1533 + "@jest/console" "^26.6.2"
1534 + "@jest/types" "^26.6.2"
1535 + "@types/istanbul-lib-coverage" "^2.0.0"
1536 + "collect-v8-coverage" "^1.0.0"
1537 +
1538 +"@jest/test-sequencer@^26.6.3":
1539 + "integrity" "sha512-YHlVIjP5nfEyjlrSr8t/YdNfU/1XEt7c5b4OxcXCjyRhjzLYu/rO69/WHPuYcbCWkz8kAeZVZp2N2+IOLLEPGw=="
1540 + "resolved" "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-26.6.3.tgz"
1541 + "version" "26.6.3"
1542 + dependencies:
1543 + "@jest/test-result" "^26.6.2"
1544 + "graceful-fs" "^4.2.4"
1545 + "jest-haste-map" "^26.6.2"
1546 + "jest-runner" "^26.6.3"
1547 + "jest-runtime" "^26.6.3"
1548 +
1549 +"@jest/transform@^26.6.2":
1550 + "integrity" "sha512-E9JjhUgNzvuQ+vVAL21vlyfy12gP0GhazGgJC4h6qUt1jSdUXGWJ1wfu/X7Sd8etSgxV4ovT1pb9v5D6QW4XgA=="
1551 + "resolved" "https://registry.yarnpkg.com/@jest/transform/-/transform-26.6.2.tgz"
1552 + "version" "26.6.2"
1553 + dependencies:
1554 + "@babel/core" "^7.1.0"
1555 + "@jest/types" "^26.6.2"
1556 + "babel-plugin-istanbul" "^6.0.0"
1557 + "chalk" "^4.0.0"
1558 + "convert-source-map" "^1.4.0"
1559 + "fast-json-stable-stringify" "^2.0.0"
1560 + "graceful-fs" "^4.2.4"
1561 + "jest-haste-map" "^26.6.2"
1562 + "jest-regex-util" "^26.0.0"
1563 + "jest-util" "^26.6.2"
1564 + "micromatch" "^4.0.2"
1565 + "pirates" "^4.0.1"
1566 + "slash" "^3.0.0"
1567 + "source-map" "^0.6.1"
1568 + "write-file-atomic" "^3.0.0"
1569 +
1570 +"@jest/types@^26.6.0", "@jest/types@^26.6.2":
1571 + "integrity" "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ=="
1572 + "resolved" "https://registry.yarnpkg.com/@jest/types/-/types-26.6.2.tgz"
1573 + "version" "26.6.2"
1574 + dependencies:
1575 + "@types/istanbul-lib-coverage" "^2.0.0"
1576 + "@types/istanbul-reports" "^3.0.0"
1577 + "@types/node" "*"
1578 + "@types/yargs" "^15.0.0"
1579 + "chalk" "^4.0.0"
1580 +
1581 +"@nicolo-ribaudo/chokidar-2@2.1.8-no-fsevents.3":
1582 + "integrity" "sha512-s88O1aVtXftvp5bCPB7WnmXc5IwOZZ7YPuwNPt+GtOOXpPvad1LfbmjYv+qII7zP6RU2QGnqve27dnLycEnyEQ=="
1583 + "resolved" "https://registry.npmjs.org/@nicolo-ribaudo/chokidar-2/-/chokidar-2-2.1.8-no-fsevents.3.tgz"
1584 + "version" "2.1.8-no-fsevents.3"
1585 +
1586 +"@nodelib/fs.scandir@2.1.5":
1587 + "integrity" "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g=="
1588 + "resolved" "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz"
1589 + "version" "2.1.5"
1590 + dependencies:
1591 + "@nodelib/fs.stat" "2.0.5"
1592 + "run-parallel" "^1.1.9"
1593 +
1594 +"@nodelib/fs.stat@^2.0.2", "@nodelib/fs.stat@2.0.5":
1595 + "integrity" "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A=="
1596 + "resolved" "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz"
1597 + "version" "2.0.5"
1598 +
1599 +"@nodelib/fs.walk@^1.2.3":
1600 + "integrity" "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg=="
1601 + "resolved" "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz"
1602 + "version" "1.2.8"
1603 + dependencies:
1604 + "@nodelib/fs.scandir" "2.1.5"
1605 + "fastq" "^1.6.0"
1606 +
1607 +"@npmcli/fs@^1.0.0":
1608 + "integrity" "sha512-8ltnOpRR/oJbOp8vaGUnipOi3bqkcW+sLHFlyXIr08OGHmVJLB1Hn7QtGXbYcpVtH1gAYZTlmDXtE4YV0+AMMQ=="
1609 + "resolved" "https://registry.yarnpkg.com/@npmcli/fs/-/fs-1.0.0.tgz"
1610 + "version" "1.0.0"
1611 + dependencies:
1612 + "@gar/promisify" "^1.0.1"
1613 + "semver" "^7.3.5"
1614 +
1615 +"@npmcli/move-file@^1.0.1":
1616 + "integrity" "sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg=="
1617 + "resolved" "https://registry.yarnpkg.com/@npmcli/move-file/-/move-file-1.1.2.tgz"
1618 + "version" "1.1.2"
1619 + dependencies:
1620 + "mkdirp" "^1.0.4"
1621 + "rimraf" "^3.0.2"
1622 +
1623 +"@pmmmwh/react-refresh-webpack-plugin@0.4.2":
1624 + "integrity" "sha512-Loc4UDGutcZ+Bd56hBInkm6JyjyCwWy4t2wcDXzN8EDPANgVRj0VP8Nxn0Zq2pc+WKauZwEivQgbDGg4xZO20A=="
1625 + "resolved" "https://registry.yarnpkg.com/@pmmmwh/react-refresh-webpack-plugin/-/react-refresh-webpack-plugin-0.4.2.tgz"
1626 + "version" "0.4.2"
1627 + dependencies:
1628 + "ansi-html" "^0.0.7"
1629 + "error-stack-parser" "^2.0.6"
1630 + "html-entities" "^1.2.1"
1631 + "native-url" "^0.2.6"
1632 + "schema-utils" "^2.6.5"
1633 + "source-map" "^0.7.3"
1634 +
1635 +"@rollup/plugin-node-resolve@^7.1.1":
1636 + "integrity" "sha512-RxtSL3XmdTAE2byxekYLnx+98kEUOrPHF/KRVjLH+DEIHy6kjIw7YINQzn+NXiH/NTrQLAwYs0GWB+csWygA9Q=="
1637 + "resolved" "https://registry.yarnpkg.com/@rollup/plugin-node-resolve/-/plugin-node-resolve-7.1.3.tgz"
1638 + "version" "7.1.3"
1639 + dependencies:
1640 + "@rollup/pluginutils" "^3.0.8"
1641 + "@types/resolve" "0.0.8"
1642 + "builtin-modules" "^3.1.0"
1643 + "is-module" "^1.0.0"
1644 + "resolve" "^1.14.2"
1645 +
1646 +"@rollup/plugin-replace@^2.3.1":
1647 + "integrity" "sha512-IGcu+cydlUMZ5En85jxHH4qj2hta/11BHq95iHEyb2sbgiN0eCdzvUcHw5gt9pBL5lTi4JDYJ1acCoMGpTvEZg=="
1648 + "resolved" "https://registry.yarnpkg.com/@rollup/plugin-replace/-/plugin-replace-2.4.2.tgz"
1649 + "version" "2.4.2"
1650 + dependencies:
1651 + "@rollup/pluginutils" "^3.1.0"
1652 + "magic-string" "^0.25.7"
1653 +
1654 +"@rollup/pluginutils@^3.0.8", "@rollup/pluginutils@^3.1.0":
1655 + "integrity" "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg=="
1656 + "resolved" "https://registry.yarnpkg.com/@rollup/pluginutils/-/pluginutils-3.1.0.tgz"
1657 + "version" "3.1.0"
1658 + dependencies:
1659 + "@types/estree" "0.0.39"
1660 + "estree-walker" "^1.0.1"
1661 + "picomatch" "^2.2.2"
1662 +
1663 +"@sinonjs/commons@^1.7.0":
1664 + "integrity" "sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ=="
1665 + "resolved" "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-1.8.3.tgz"
1666 + "version" "1.8.3"
1667 + dependencies:
1668 + "type-detect" "4.0.8"
1669 +
1670 +"@sinonjs/fake-timers@^6.0.1":
1671 + "integrity" "sha512-MZPUxrmFubI36XS1DI3qmI0YdN1gks62JtFZvxR67ljjSNCeK6U08Zx4msEWOXuofgqUt6zPHSi1H9fbjR/NRA=="
1672 + "resolved" "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-6.0.1.tgz"
1673 + "version" "6.0.1"
1674 + dependencies:
1675 + "@sinonjs/commons" "^1.7.0"
1676 +
1677 +"@surma/rollup-plugin-off-main-thread@^1.1.1":
1678 + "integrity" "sha512-yBMPqmd1yEJo/280PAMkychuaALyQ9Lkb5q1ck3mjJrFuEobIfhnQ4J3mbvBoISmR3SWMWV+cGB/I0lCQee79A=="
1679 + "resolved" "https://registry.yarnpkg.com/@surma/rollup-plugin-off-main-thread/-/rollup-plugin-off-main-thread-1.4.2.tgz"
1680 + "version" "1.4.2"
1681 + dependencies:
1682 + "ejs" "^2.6.1"
1683 + "magic-string" "^0.25.0"
1684 +
1685 +"@svgr/babel-plugin-add-jsx-attribute@^5.4.0":
1686 + "integrity" "sha512-ZFf2gs/8/6B8PnSofI0inYXr2SDNTDScPXhN7k5EqD4aZ3gi6u+rbmZHVB8IM3wDyx8ntKACZbtXSm7oZGRqVg=="
1687 + "resolved" "https://registry.yarnpkg.com/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-5.4.0.tgz"
1688 + "version" "5.4.0"
1689 +
1690 +"@svgr/babel-plugin-remove-jsx-attribute@^5.4.0":
1691 + "integrity" "sha512-yaS4o2PgUtwLFGTKbsiAy6D0o3ugcUhWK0Z45umJ66EPWunAz9fuFw2gJuje6wqQvQWOTJvIahUwndOXb7QCPg=="
1692 + "resolved" "https://registry.yarnpkg.com/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-5.4.0.tgz"
1693 + "version" "5.4.0"
1694 +
1695 +"@svgr/babel-plugin-remove-jsx-empty-expression@^5.0.1":
1696 + "integrity" "sha512-LA72+88A11ND/yFIMzyuLRSMJ+tRKeYKeQ+mR3DcAZ5I4h5CPWN9AHyUzJbWSYp/u2u0xhmgOe0+E41+GjEueA=="
1697 + "resolved" "https://registry.yarnpkg.com/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-5.0.1.tgz"
1698 + "version" "5.0.1"
1699 +
1700 +"@svgr/babel-plugin-replace-jsx-attribute-value@^5.0.1":
1701 + "integrity" "sha512-PoiE6ZD2Eiy5mK+fjHqwGOS+IXX0wq/YDtNyIgOrc6ejFnxN4b13pRpiIPbtPwHEc+NT2KCjteAcq33/F1Y9KQ=="
1702 + "resolved" "https://registry.yarnpkg.com/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-5.0.1.tgz"
1703 + "version" "5.0.1"
1704 +
1705 +"@svgr/babel-plugin-svg-dynamic-title@^5.4.0":
1706 + "integrity" "sha512-zSOZH8PdZOpuG1ZVx/cLVePB2ibo3WPpqo7gFIjLV9a0QsuQAzJiwwqmuEdTaW2pegyBE17Uu15mOgOcgabQZg=="
1707 + "resolved" "https://registry.yarnpkg.com/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-5.4.0.tgz"
1708 + "version" "5.4.0"
1709 +
1710 +"@svgr/babel-plugin-svg-em-dimensions@^5.4.0":
1711 + "integrity" "sha512-cPzDbDA5oT/sPXDCUYoVXEmm3VIoAWAPT6mSPTJNbQaBNUuEKVKyGH93oDY4e42PYHRW67N5alJx/eEol20abw=="
1712 + "resolved" "https://registry.yarnpkg.com/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-5.4.0.tgz"
1713 + "version" "5.4.0"
1714 +
1715 +"@svgr/babel-plugin-transform-react-native-svg@^5.4.0":
1716 + "integrity" "sha512-3eYP/SaopZ41GHwXma7Rmxcv9uRslRDTY1estspeB1w1ueZWd/tPlMfEOoccYpEMZU3jD4OU7YitnXcF5hLW2Q=="
1717 + "resolved" "https://registry.yarnpkg.com/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-5.4.0.tgz"
1718 + "version" "5.4.0"
1719 +
1720 +"@svgr/babel-plugin-transform-svg-component@^5.5.0":
1721 + "integrity" "sha512-q4jSH1UUvbrsOtlo/tKcgSeiCHRSBdXoIoqX1pgcKK/aU3JD27wmMKwGtpB8qRYUYoyXvfGxUVKchLuR5pB3rQ=="
1722 + "resolved" "https://registry.yarnpkg.com/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-5.5.0.tgz"
1723 + "version" "5.5.0"
1724 +
1725 +"@svgr/babel-preset@^5.5.0":
1726 + "integrity" "sha512-4FiXBjvQ+z2j7yASeGPEi8VD/5rrGQk4Xrq3EdJmoZgz/tpqChpo5hgXDvmEauwtvOc52q8ghhZK4Oy7qph4ig=="
1727 + "resolved" "https://registry.yarnpkg.com/@svgr/babel-preset/-/babel-preset-5.5.0.tgz"
1728 + "version" "5.5.0"
1729 + dependencies:
1730 + "@svgr/babel-plugin-add-jsx-attribute" "^5.4.0"
1731 + "@svgr/babel-plugin-remove-jsx-attribute" "^5.4.0"
1732 + "@svgr/babel-plugin-remove-jsx-empty-expression" "^5.0.1"
1733 + "@svgr/babel-plugin-replace-jsx-attribute-value" "^5.0.1"
1734 + "@svgr/babel-plugin-svg-dynamic-title" "^5.4.0"
1735 + "@svgr/babel-plugin-svg-em-dimensions" "^5.4.0"
1736 + "@svgr/babel-plugin-transform-react-native-svg" "^5.4.0"
1737 + "@svgr/babel-plugin-transform-svg-component" "^5.5.0"
1738 +
1739 +"@svgr/core@^5.4.0":
1740 + "integrity" "sha512-q52VOcsJPvV3jO1wkPtzTuKlvX7Y3xIcWRpCMtBF3MrteZJtBfQw/+u0B1BHy5ColpQc1/YVTrPEtSYIMNZlrQ=="
1741 + "resolved" "https://registry.yarnpkg.com/@svgr/core/-/core-5.5.0.tgz"
1742 + "version" "5.5.0"
1743 + dependencies:
1744 + "@svgr/plugin-jsx" "^5.5.0"
1745 + "camelcase" "^6.2.0"
1746 + "cosmiconfig" "^7.0.0"
1747 +
1748 +"@svgr/hast-util-to-babel-ast@^5.5.0":
1749 + "integrity" "sha512-cAaR/CAiZRB8GP32N+1jocovUtvlj0+e65TB50/6Lcime+EA49m/8l+P2ko+XPJ4dw3xaPS3jOL4F2X4KWxoeQ=="
1750 + "resolved" "https://registry.yarnpkg.com/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-5.5.0.tgz"
1751 + "version" "5.5.0"
1752 + dependencies:
1753 + "@babel/types" "^7.12.6"
1754 +
1755 +"@svgr/plugin-jsx@^5.4.0", "@svgr/plugin-jsx@^5.5.0":
1756 + "integrity" "sha512-V/wVh33j12hGh05IDg8GpIUXbjAPnTdPTKuP4VNLggnwaHMPNQNae2pRnyTAILWCQdz5GyMqtO488g7CKM8CBA=="
1757 + "resolved" "https://registry.yarnpkg.com/@svgr/plugin-jsx/-/plugin-jsx-5.5.0.tgz"
1758 + "version" "5.5.0"
1759 + dependencies:
1760 + "@babel/core" "^7.12.3"
1761 + "@svgr/babel-preset" "^5.5.0"
1762 + "@svgr/hast-util-to-babel-ast" "^5.5.0"
1763 + "svg-parser" "^2.0.2"
1764 +
1765 +"@svgr/plugin-svgo@^5.4.0":
1766 + "integrity" "sha512-r5swKk46GuQl4RrVejVwpeeJaydoxkdwkM1mBKOgJLBUJPGaLci6ylg/IjhrRsREKDkr4kbMWdgOtbXEh0fyLQ=="
1767 + "resolved" "https://registry.yarnpkg.com/@svgr/plugin-svgo/-/plugin-svgo-5.5.0.tgz"
1768 + "version" "5.5.0"
1769 + dependencies:
1770 + "cosmiconfig" "^7.0.0"
1771 + "deepmerge" "^4.2.2"
1772 + "svgo" "^1.2.2"
1773 +
1774 +"@svgr/webpack@5.4.0":
1775 + "integrity" "sha512-LjepnS/BSAvelnOnnzr6Gg0GcpLmnZ9ThGFK5WJtm1xOqdBE/1IACZU7MMdVzjyUkfFqGz87eRE4hFaSLiUwYg=="
1776 + "resolved" "https://registry.yarnpkg.com/@svgr/webpack/-/webpack-5.4.0.tgz"
1777 + "version" "5.4.0"
1778 + dependencies:
1779 + "@babel/core" "^7.9.0"
1780 + "@babel/plugin-transform-react-constant-elements" "^7.9.0"
1781 + "@babel/preset-env" "^7.9.5"
1782 + "@babel/preset-react" "^7.9.4"
1783 + "@svgr/core" "^5.4.0"
1784 + "@svgr/plugin-jsx" "^5.4.0"
1785 + "@svgr/plugin-svgo" "^5.4.0"
1786 + "loader-utils" "^2.0.0"
1787 +
1788 +"@tootallnate/once@1":
1789 + "integrity" "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw=="
1790 + "resolved" "https://registry.yarnpkg.com/@tootallnate/once/-/once-1.1.2.tgz"
1791 + "version" "1.1.2"
1792 +
1793 +"@types/babel__core@^7.0.0", "@types/babel__core@^7.1.7":
1794 + "integrity" "sha512-EAEHtisTMM+KaKwfWdC3oyllIqswlznXCIVCt7/oRNrh+DhgT4UEBNC/jlADNjvw7UnfbcdkGQcPVZ1xYiLcrQ=="
1795 + "resolved" "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.1.16.tgz"
1796 + "version" "7.1.16"
1797 + dependencies:
1798 + "@babel/parser" "^7.1.0"
1799 + "@babel/types" "^7.0.0"
1800 + "@types/babel__generator" "*"
1801 + "@types/babel__template" "*"
1802 + "@types/babel__traverse" "*"
1803 +
1804 +"@types/babel__generator@*":
1805 + "integrity" "sha512-/GWCmzJWqV7diQW54smJZzWbSFf4QYtF71WCKhcx6Ru/tFyQIY2eiiITcCAeuPbNSvT9YCGkVMqqvSk2Z0mXiA=="
1806 + "resolved" "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.6.3.tgz"
1807 + "version" "7.6.3"
1808 + dependencies:
1809 + "@babel/types" "^7.0.0"
1810 +
1811 +"@types/babel__template@*":
1812 + "integrity" "sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g=="
1813 + "resolved" "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.4.1.tgz"
1814 + "version" "7.4.1"
1815 + dependencies:
1816 + "@babel/parser" "^7.1.0"
1817 + "@babel/types" "^7.0.0"
1818 +
1819 +"@types/babel__traverse@*", "@types/babel__traverse@^7.0.4", "@types/babel__traverse@^7.0.6":
1820 + "integrity" "sha512-K2waXdXBi2302XUdcHcR1jCeU0LL4TD9HRs/gk0N2Xvrht+G/BfJa4QObBQZfhMdxiCpV3COl5Nfq4uKTeTnJA=="
1821 + "resolved" "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.14.2.tgz"
1822 + "version" "7.14.2"
1823 + dependencies:
1824 + "@babel/types" "^7.3.0"
1825 +
1826 +"@types/eslint@^7.2.6":
1827 + "integrity" "sha512-07XlgzX0YJUn4iG1ocY4IX9DzKSmMGUs6ESKlxWhZRaa0fatIWaHWUVapcuGa8r5HFnTqzj+4OCjd5f7EZ/i/A=="
1828 + "resolved" "https://registry.yarnpkg.com/@types/eslint/-/eslint-7.28.0.tgz"
1829 + "version" "7.28.0"
1830 + dependencies:
1831 + "@types/estree" "*"
1832 + "@types/json-schema" "*"
1833 +
1834 +"@types/estree@*":
1835 + "integrity" "sha512-C6N5s2ZFtuZRj54k2/zyRhNDjJwwcViAM3Nbm8zjBpbqAdZ00mr0CFxvSKeO8Y/e03WVFLpQMdHYVfUd6SB+Hw=="
1836 + "resolved" "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.50.tgz"
1837 + "version" "0.0.50"
1838 +
1839 +"@types/estree@0.0.39":
1840 + "integrity" "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw=="
1841 + "resolved" "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.39.tgz"
1842 + "version" "0.0.39"
1843 +
1844 +"@types/glob@^7.1.1":
1845 + "integrity" "sha512-w+LsMxKyYQm347Otw+IfBXOv9UWVjpHpCDdbBMt8Kz/xbvCYNjP+0qPh91Km3iKfSRLBB0P7fAMf0KHrPu+MyA=="
1846 + "resolved" "https://registry.yarnpkg.com/@types/glob/-/glob-7.1.4.tgz"
1847 + "version" "7.1.4"
1848 + dependencies:
1849 + "@types/minimatch" "*"
1850 + "@types/node" "*"
1851 +
1852 +"@types/graceful-fs@^4.1.2":
1853 + "integrity" "sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw=="
1854 + "resolved" "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.5.tgz"
1855 + "version" "4.1.5"
1856 + dependencies:
1857 + "@types/node" "*"
1858 +
1859 +"@types/html-minifier-terser@^5.0.0":
1860 + "integrity" "sha512-h4lTMgMJctJybDp8CQrxTUiiYmedihHWkjnF/8Pxseu2S6Nlfcy8kwboQ8yejh456rP2yWoEVm1sS/FVsfM48w=="
1861 + "resolved" "https://registry.yarnpkg.com/@types/html-minifier-terser/-/html-minifier-terser-5.1.2.tgz"
1862 + "version" "5.1.2"
1863 +
1864 +"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0", "@types/istanbul-lib-coverage@^2.0.1":
1865 + "integrity" "sha512-sz7iLqvVUg1gIedBOvlkxPlc8/uVzyS5OwGz1cKjXzkl3FpL3al0crU8YGU1WoHkxn0Wxbw5tyi6hvzJKNzFsw=="
1866 + "resolved" "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz"
1867 + "version" "2.0.3"
1868 +
1869 +"@types/istanbul-lib-report@*":
1870 + "integrity" "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg=="
1871 + "resolved" "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz"
1872 + "version" "3.0.0"
1873 + dependencies:
1874 + "@types/istanbul-lib-coverage" "*"
1875 +
1876 +"@types/istanbul-reports@^3.0.0":
1877 + "integrity" "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw=="
1878 + "resolved" "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz"
1879 + "version" "3.0.1"
1880 + dependencies:
1881 + "@types/istanbul-lib-report" "*"
1882 +
1883 +"@types/json-schema@*", "@types/json-schema@^7.0.3", "@types/json-schema@^7.0.5", "@types/json-schema@^7.0.7", "@types/json-schema@^7.0.8":
1884 + "integrity" "sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ=="
1885 + "resolved" "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.9.tgz"
1886 + "version" "7.0.9"
1887 +
1888 +"@types/json5@^0.0.29":
1889 + "integrity" "sha1-7ihweulOEdK4J7y+UnC86n8+ce4="
1890 + "resolved" "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz"
1891 + "version" "0.0.29"
1892 +
1893 +"@types/minimatch@*":
1894 + "integrity" "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ=="
1895 + "resolved" "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.5.tgz"
1896 + "version" "3.0.5"
1897 +
1898 +"@types/node@*":
1899 + "integrity" "sha512-4/Z9DMPKFexZj/Gn3LylFgamNKHm4K3QDi0gz9B26Uk0c8izYf97B5fxfpspMNkWlFupblKM/nV8+NA9Ffvr+w=="
1900 + "resolved" "https://registry.yarnpkg.com/@types/node/-/node-16.10.1.tgz"
1901 + "version" "16.10.1"
1902 +
1903 +"@types/normalize-package-data@^2.4.0":
1904 + "integrity" "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw=="
1905 + "resolved" "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz"
1906 + "version" "2.4.1"
1907 +
1908 +"@types/parse-json@^4.0.0":
1909 + "integrity" "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA=="
1910 + "resolved" "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.0.tgz"
1911 + "version" "4.0.0"
1912 +
1913 +"@types/prettier@^2.0.0":
1914 + "integrity" "sha512-Fo79ojj3vdEZOHg3wR9ksAMRz4P3S5fDB5e/YWZiFnyFQI1WY2Vftu9XoXVVtJfxB7Bpce/QTqWSSntkz2Znrw=="
1915 + "resolved" "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.4.1.tgz"
1916 + "version" "2.4.1"
1917 +
1918 +"@types/q@^1.5.1":
1919 + "integrity" "sha512-L28j2FcJfSZOnL1WBjDYp2vUHCeIFlyYI/53EwD/rKUBQ7MtUUfbQWiyKJGpcnv4/WgrhWsFKrcPstcAt/J0tQ=="
1920 + "resolved" "https://registry.yarnpkg.com/@types/q/-/q-1.5.5.tgz"
1921 + "version" "1.5.5"
1922 +
1923 +"@types/resolve@0.0.8":
1924 + "integrity" "sha512-auApPaJf3NPfe18hSoJkp8EbZzer2ISk7o8mCC3M9he/a04+gbMF97NkpD2S8riMGvm4BMRI59/SZQSaLTKpsQ=="
1925 + "resolved" "https://registry.yarnpkg.com/@types/resolve/-/resolve-0.0.8.tgz"
1926 + "version" "0.0.8"
1927 + dependencies:
1928 + "@types/node" "*"
1929 +
1930 +"@types/source-list-map@*":
1931 + "integrity" "sha512-K5K+yml8LTo9bWJI/rECfIPrGgxdpeNbj+d53lwN4QjW1MCwlkhUms+gtdzigTeUyBr09+u8BwOIY3MXvHdcsA=="
1932 + "resolved" "https://registry.yarnpkg.com/@types/source-list-map/-/source-list-map-0.1.2.tgz"
1933 + "version" "0.1.2"
1934 +
1935 +"@types/stack-utils@^2.0.0":
1936 + "integrity" "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw=="
1937 + "resolved" "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.1.tgz"
1938 + "version" "2.0.1"
1939 +
1940 +"@types/tapable@^1", "@types/tapable@^1.0.5":
1941 + "integrity" "sha512-ipixuVrh2OdNmauvtT51o3d8z12p6LtFW9in7U79der/kwejjdNchQC5UMn5u/KxNoM7VHHOs/l8KS8uHxhODQ=="
1942 + "resolved" "https://registry.yarnpkg.com/@types/tapable/-/tapable-1.0.8.tgz"
1943 + "version" "1.0.8"
1944 +
1945 +"@types/uglify-js@*":
1946 + "integrity" "sha512-O3MmRAk6ZuAKa9CHgg0Pr0+lUOqoMLpc9AS4R8ano2auvsg7IE8syF3Xh/NPr26TWklxYcqoEEFdzLLs1fV9PQ=="
1947 + "resolved" "https://registry.yarnpkg.com/@types/uglify-js/-/uglify-js-3.13.1.tgz"
1948 + "version" "3.13.1"
1949 + dependencies:
1950 + "source-map" "^0.6.1"
1951 +
1952 +"@types/webpack-sources@*":
1953 + "integrity" "sha512-Ft7YH3lEVRQ6ls8k4Ff1oB4jN6oy/XmU6tQISKdhfh+1mR+viZFphS6WL0IrtDOzvefmJg5a0s7ZQoRXwqTEFg=="
1954 + "resolved" "https://registry.yarnpkg.com/@types/webpack-sources/-/webpack-sources-3.2.0.tgz"
1955 + "version" "3.2.0"
1956 + dependencies:
1957 + "@types/node" "*"
1958 + "@types/source-list-map" "*"
1959 + "source-map" "^0.7.3"
1960 +
1961 +"@types/webpack@^4.41.8", "@types/webpack@4.x":
1962 + "integrity" "sha512-/i0J7sepXFIp1ZT7FjUGi1eXMCg8HCCzLJEQkKsOtbJFontsJLolBcDC+3qxn5pPwiCt1G0ZdRmYRzNBtvpuGQ=="
1963 + "resolved" "https://registry.yarnpkg.com/@types/webpack/-/webpack-4.41.31.tgz"
1964 + "version" "4.41.31"
1965 + dependencies:
1966 + "@types/node" "*"
1967 + "@types/tapable" "^1"
1968 + "@types/uglify-js" "*"
1969 + "@types/webpack-sources" "*"
1970 + "anymatch" "^3.0.0"
1971 + "source-map" "^0.6.0"
1972 +
1973 +"@types/yargs-parser@*":
1974 + "integrity" "sha512-7tFImggNeNBVMsn0vLrpn1H1uPrUBdnARPTpZoitY37ZrdJREzf7I16tMrlK3hen349gr1NYh8CmZQa7CTG6Aw=="
1975 + "resolved" "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-20.2.1.tgz"
1976 + "version" "20.2.1"
1977 +
1978 +"@types/yargs@^15.0.0":
1979 + "integrity" "sha512-yEJzHoxf6SyQGhBhIYGXQDSCkJjB6HohDShto7m8vaKg9Yp0Yn8+71J9eakh2bnPg6BfsH9PRMhiRTZnd4eXGQ=="
1980 + "resolved" "https://registry.yarnpkg.com/@types/yargs/-/yargs-15.0.14.tgz"
1981 + "version" "15.0.14"
1982 + dependencies:
1983 + "@types/yargs-parser" "*"
1984 +
1985 +"@typescript-eslint/eslint-plugin@^4.0.0", "@typescript-eslint/eslint-plugin@^4.5.0", "@typescript-eslint/eslint-plugin@>= 4":
1986 + "integrity" "sha512-+OWTuWRSbWI1KDK8iEyG/6uK2rTm3kpS38wuVifGUTDB6kjEuNrzBI1MUtxnkneuWG/23QehABe2zHHrj+4yuA=="
1987 + "resolved" "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.32.0.tgz"
1988 + "version" "4.32.0"
1989 + dependencies:
1990 + "@typescript-eslint/experimental-utils" "4.32.0"
1991 + "@typescript-eslint/scope-manager" "4.32.0"
1992 + "debug" "^4.3.1"
1993 + "functional-red-black-tree" "^1.0.1"
1994 + "ignore" "^5.1.8"
1995 + "regexpp" "^3.1.0"
1996 + "semver" "^7.3.5"
1997 + "tsutils" "^3.21.0"
1998 +
1999 +"@typescript-eslint/experimental-utils@^3.10.1":
2000 + "integrity" "sha512-DewqIgscDzmAfd5nOGe4zm6Bl7PKtMG2Ad0KG8CUZAHlXfAKTF9Ol5PXhiMh39yRL2ChRH1cuuUGOcVyyrhQIw=="
2001 + "resolved" "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-3.10.1.tgz"
2002 + "version" "3.10.1"
2003 + dependencies:
2004 + "@types/json-schema" "^7.0.3"
2005 + "@typescript-eslint/types" "3.10.1"
2006 + "@typescript-eslint/typescript-estree" "3.10.1"
2007 + "eslint-scope" "^5.0.0"
2008 + "eslint-utils" "^2.0.0"
2009 +
2010 +"@typescript-eslint/experimental-utils@^4.0.1", "@typescript-eslint/experimental-utils@4.32.0":
2011 + "integrity" "sha512-WLoXcc+cQufxRYjTWr4kFt0DyEv6hDgSaFqYhIzQZ05cF+kXfqXdUh+//kgquPJVUBbL3oQGKQxwPbLxHRqm6A=="
2012 + "resolved" "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-4.32.0.tgz"
2013 + "version" "4.32.0"
2014 + dependencies:
2015 + "@types/json-schema" "^7.0.7"
2016 + "@typescript-eslint/scope-manager" "4.32.0"
2017 + "@typescript-eslint/types" "4.32.0"
2018 + "@typescript-eslint/typescript-estree" "4.32.0"
2019 + "eslint-scope" "^5.1.1"
2020 + "eslint-utils" "^3.0.0"
2021 +
2022 +"@typescript-eslint/parser@^4.0.0", "@typescript-eslint/parser@^4.5.0":
2023 + "integrity" "sha512-lhtYqQ2iEPV5JqV7K+uOVlPePjClj4dOw7K4/Z1F2yvjIUvyr13yJnDzkK6uon4BjHYuHy3EG0c2Z9jEhFk56w=="
2024 + "resolved" "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-4.32.0.tgz"
2025 + "version" "4.32.0"
2026 + dependencies:
2027 + "@typescript-eslint/scope-manager" "4.32.0"
2028 + "@typescript-eslint/types" "4.32.0"
2029 + "@typescript-eslint/typescript-estree" "4.32.0"
2030 + "debug" "^4.3.1"
2031 +
2032 +"@typescript-eslint/scope-manager@4.32.0":
2033 + "integrity" "sha512-DK+fMSHdM216C0OM/KR1lHXjP1CNtVIhJ54kQxfOE6x8UGFAjha8cXgDMBEIYS2XCYjjCtvTkjQYwL3uvGOo0w=="
2034 + "resolved" "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-4.32.0.tgz"
2035 + "version" "4.32.0"
2036 + dependencies:
2037 + "@typescript-eslint/types" "4.32.0"
2038 + "@typescript-eslint/visitor-keys" "4.32.0"
2039 +
2040 +"@typescript-eslint/types@3.10.1":
2041 + "integrity" "sha512-+3+FCUJIahE9q0lDi1WleYzjCwJs5hIsbugIgnbB+dSCYUxl8L6PwmsyOPFZde2hc1DlTo/xnkOgiTLSyAbHiQ=="
2042 + "resolved" "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-3.10.1.tgz"
2043 + "version" "3.10.1"
2044 +
2045 +"@typescript-eslint/types@4.32.0":
2046 + "integrity" "sha512-LE7Z7BAv0E2UvqzogssGf1x7GPpUalgG07nGCBYb1oK4mFsOiFC/VrSMKbZQzFJdN2JL5XYmsx7C7FX9p9ns0w=="
2047 + "resolved" "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.32.0.tgz"
2048 + "version" "4.32.0"
2049 +
2050 +"@typescript-eslint/typescript-estree@3.10.1":
2051 + "integrity" "sha512-QbcXOuq6WYvnB3XPsZpIwztBoquEYLXh2MtwVU+kO8jgYCiv4G5xrSP/1wg4tkvrEE+esZVquIPX/dxPlePk1w=="
2052 + "resolved" "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-3.10.1.tgz"
2053 + "version" "3.10.1"
2054 + dependencies:
2055 + "@typescript-eslint/types" "3.10.1"
2056 + "@typescript-eslint/visitor-keys" "3.10.1"
2057 + "debug" "^4.1.1"
2058 + "glob" "^7.1.6"
2059 + "is-glob" "^4.0.1"
2060 + "lodash" "^4.17.15"
2061 + "semver" "^7.3.2"
2062 + "tsutils" "^3.17.1"
2063 +
2064 +"@typescript-eslint/typescript-estree@4.32.0":
2065 + "integrity" "sha512-tRYCgJ3g1UjMw1cGG8Yn1KzOzNlQ6u1h9AmEtPhb5V5a1TmiHWcRyF/Ic+91M4f43QeChyYlVTcf3DvDTZR9vw=="
2066 + "resolved" "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.32.0.tgz"
2067 + "version" "4.32.0"
2068 + dependencies:
2069 + "@typescript-eslint/types" "4.32.0"
2070 + "@typescript-eslint/visitor-keys" "4.32.0"
2071 + "debug" "^4.3.1"
2072 + "globby" "^11.0.3"
2073 + "is-glob" "^4.0.1"
2074 + "semver" "^7.3.5"
2075 + "tsutils" "^3.21.0"
2076 +
2077 +"@typescript-eslint/visitor-keys@3.10.1":
2078 + "integrity" "sha512-9JgC82AaQeglebjZMgYR5wgmfUdUc+EitGUUMW8u2nDckaeimzW+VsoLV6FoimPv2id3VQzfjwBxEMVz08ameQ=="
2079 + "resolved" "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-3.10.1.tgz"
2080 + "version" "3.10.1"
2081 + dependencies:
2082 + "eslint-visitor-keys" "^1.1.0"
2083 +
2084 +"@typescript-eslint/visitor-keys@4.32.0":
2085 + "integrity" "sha512-e7NE0qz8W+atzv3Cy9qaQ7BTLwWsm084Z0c4nIO2l3Bp6u9WIgdqCgyPyV5oSPDMIW3b20H59OOCmVk3jw3Ptw=="
2086 + "resolved" "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.32.0.tgz"
2087 + "version" "4.32.0"
2088 + dependencies:
2089 + "@typescript-eslint/types" "4.32.0"
2090 + "eslint-visitor-keys" "^2.0.0"
2091 +
2092 +"@webassemblyjs/ast@1.9.0":
2093 + "integrity" "sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA=="
2094 + "resolved" "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.9.0.tgz"
2095 + "version" "1.9.0"
2096 + dependencies:
2097 + "@webassemblyjs/helper-module-context" "1.9.0"
2098 + "@webassemblyjs/helper-wasm-bytecode" "1.9.0"
2099 + "@webassemblyjs/wast-parser" "1.9.0"
2100 +
2101 +"@webassemblyjs/floating-point-hex-parser@1.9.0":
2102 + "integrity" "sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA=="
2103 + "resolved" "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.0.tgz"
2104 + "version" "1.9.0"
2105 +
2106 +"@webassemblyjs/helper-api-error@1.9.0":
2107 + "integrity" "sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw=="
2108 + "resolved" "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz"
2109 + "version" "1.9.0"
2110 +
2111 +"@webassemblyjs/helper-buffer@1.9.0":
2112 + "integrity" "sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA=="
2113 + "resolved" "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz"
2114 + "version" "1.9.0"
2115 +
2116 +"@webassemblyjs/helper-code-frame@1.9.0":
2117 + "integrity" "sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA=="
2118 + "resolved" "https://registry.yarnpkg.com/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.0.tgz"
2119 + "version" "1.9.0"
2120 + dependencies:
2121 + "@webassemblyjs/wast-printer" "1.9.0"
2122 +
2123 +"@webassemblyjs/helper-fsm@1.9.0":
2124 + "integrity" "sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw=="
2125 + "resolved" "https://registry.yarnpkg.com/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.0.tgz"
2126 + "version" "1.9.0"
2127 +
2128 +"@webassemblyjs/helper-module-context@1.9.0":
2129 + "integrity" "sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g=="
2130 + "resolved" "https://registry.yarnpkg.com/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.0.tgz"
2131 + "version" "1.9.0"
2132 + dependencies:
2133 + "@webassemblyjs/ast" "1.9.0"
2134 +
2135 +"@webassemblyjs/helper-wasm-bytecode@1.9.0":
2136 + "integrity" "sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw=="
2137 + "resolved" "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz"
2138 + "version" "1.9.0"
2139 +
2140 +"@webassemblyjs/helper-wasm-section@1.9.0":
2141 + "integrity" "sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw=="
2142 + "resolved" "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz"
2143 + "version" "1.9.0"
2144 + dependencies:
2145 + "@webassemblyjs/ast" "1.9.0"
2146 + "@webassemblyjs/helper-buffer" "1.9.0"
2147 + "@webassemblyjs/helper-wasm-bytecode" "1.9.0"
2148 + "@webassemblyjs/wasm-gen" "1.9.0"
2149 +
2150 +"@webassemblyjs/ieee754@1.9.0":
2151 + "integrity" "sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg=="
2152 + "resolved" "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz"
2153 + "version" "1.9.0"
2154 + dependencies:
2155 + "@xtuc/ieee754" "^1.2.0"
2156 +
2157 +"@webassemblyjs/leb128@1.9.0":
2158 + "integrity" "sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw=="
2159 + "resolved" "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.9.0.tgz"
2160 + "version" "1.9.0"
2161 + dependencies:
2162 + "@xtuc/long" "4.2.2"
2163 +
2164 +"@webassemblyjs/utf8@1.9.0":
2165 + "integrity" "sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w=="
2166 + "resolved" "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.9.0.tgz"
2167 + "version" "1.9.0"
2168 +
2169 +"@webassemblyjs/wasm-edit@1.9.0":
2170 + "integrity" "sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw=="
2171 + "resolved" "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz"
2172 + "version" "1.9.0"
2173 + dependencies:
2174 + "@webassemblyjs/ast" "1.9.0"
2175 + "@webassemblyjs/helper-buffer" "1.9.0"
2176 + "@webassemblyjs/helper-wasm-bytecode" "1.9.0"
2177 + "@webassemblyjs/helper-wasm-section" "1.9.0"
2178 + "@webassemblyjs/wasm-gen" "1.9.0"
2179 + "@webassemblyjs/wasm-opt" "1.9.0"
2180 + "@webassemblyjs/wasm-parser" "1.9.0"
2181 + "@webassemblyjs/wast-printer" "1.9.0"
2182 +
2183 +"@webassemblyjs/wasm-gen@1.9.0":
2184 + "integrity" "sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA=="
2185 + "resolved" "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz"
2186 + "version" "1.9.0"
2187 + dependencies:
2188 + "@webassemblyjs/ast" "1.9.0"
2189 + "@webassemblyjs/helper-wasm-bytecode" "1.9.0"
2190 + "@webassemblyjs/ieee754" "1.9.0"
2191 + "@webassemblyjs/leb128" "1.9.0"
2192 + "@webassemblyjs/utf8" "1.9.0"
2193 +
2194 +"@webassemblyjs/wasm-opt@1.9.0":
2195 + "integrity" "sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A=="
2196 + "resolved" "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz"
2197 + "version" "1.9.0"
2198 + dependencies:
2199 + "@webassemblyjs/ast" "1.9.0"
2200 + "@webassemblyjs/helper-buffer" "1.9.0"
2201 + "@webassemblyjs/wasm-gen" "1.9.0"
2202 + "@webassemblyjs/wasm-parser" "1.9.0"
2203 +
2204 +"@webassemblyjs/wasm-parser@1.9.0":
2205 + "integrity" "sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA=="
2206 + "resolved" "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz"
2207 + "version" "1.9.0"
2208 + dependencies:
2209 + "@webassemblyjs/ast" "1.9.0"
2210 + "@webassemblyjs/helper-api-error" "1.9.0"
2211 + "@webassemblyjs/helper-wasm-bytecode" "1.9.0"
2212 + "@webassemblyjs/ieee754" "1.9.0"
2213 + "@webassemblyjs/leb128" "1.9.0"
2214 + "@webassemblyjs/utf8" "1.9.0"
2215 +
2216 +"@webassemblyjs/wast-parser@1.9.0":
2217 + "integrity" "sha512-qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw=="
2218 + "resolved" "https://registry.yarnpkg.com/@webassemblyjs/wast-parser/-/wast-parser-1.9.0.tgz"
2219 + "version" "1.9.0"
2220 + dependencies:
2221 + "@webassemblyjs/ast" "1.9.0"
2222 + "@webassemblyjs/floating-point-hex-parser" "1.9.0"
2223 + "@webassemblyjs/helper-api-error" "1.9.0"
2224 + "@webassemblyjs/helper-code-frame" "1.9.0"
2225 + "@webassemblyjs/helper-fsm" "1.9.0"
2226 + "@xtuc/long" "4.2.2"
2227 +
2228 +"@webassemblyjs/wast-printer@1.9.0":
2229 + "integrity" "sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA=="
2230 + "resolved" "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz"
2231 + "version" "1.9.0"
2232 + dependencies:
2233 + "@webassemblyjs/ast" "1.9.0"
2234 + "@webassemblyjs/wast-parser" "1.9.0"
2235 + "@xtuc/long" "4.2.2"
2236 +
2237 +"@xtuc/ieee754@^1.2.0":
2238 + "integrity" "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA=="
2239 + "resolved" "https://registry.yarnpkg.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz"
2240 + "version" "1.2.0"
2241 +
2242 +"@xtuc/long@4.2.2":
2243 + "integrity" "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ=="
2244 + "resolved" "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.2.tgz"
2245 + "version" "4.2.2"
2246 +
2247 +"abab@^2.0.3", "abab@^2.0.5":
2248 + "integrity" "sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q=="
2249 + "resolved" "https://registry.yarnpkg.com/abab/-/abab-2.0.5.tgz"
2250 + "version" "2.0.5"
2251 +
2252 +"accepts@~1.3.4", "accepts@~1.3.5", "accepts@~1.3.7":
2253 + "integrity" "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA=="
2254 + "resolved" "https://registry.yarnpkg.com/accepts/-/accepts-1.3.7.tgz"
2255 + "version" "1.3.7"
2256 + dependencies:
2257 + "mime-types" "~2.1.24"
2258 + "negotiator" "0.6.2"
2259 +
2260 +"acorn-globals@^6.0.0":
2261 + "integrity" "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg=="
2262 + "resolved" "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-6.0.0.tgz"
2263 + "version" "6.0.0"
2264 + dependencies:
2265 + "acorn" "^7.1.1"
2266 + "acorn-walk" "^7.1.1"
2267 +
2268 +"acorn-jsx@^5.3.1":
2269 + "integrity" "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ=="
2270 + "resolved" "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz"
2271 + "version" "5.3.2"
2272 +
2273 +"acorn-walk@^7.1.1":
2274 + "integrity" "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA=="
2275 + "resolved" "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-7.2.0.tgz"
2276 + "version" "7.2.0"
2277 +
2278 +"acorn@^6.0.0 || ^7.0.0 || ^8.0.0", "acorn@^7.1.0", "acorn@^7.1.1", "acorn@^7.4.0":
2279 + "integrity" "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A=="
2280 + "resolved" "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz"
2281 + "version" "7.4.1"
2282 +
2283 +"acorn@^6.4.1":
2284 + "integrity" "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ=="
2285 + "resolved" "https://registry.yarnpkg.com/acorn/-/acorn-6.4.2.tgz"
2286 + "version" "6.4.2"
2287 +
2288 +"acorn@^8.2.4":
2289 + "integrity" "sha512-yXbYeFy+jUuYd3/CDcg2NkIYE991XYX/bje7LmjJigUciaeO1JR4XxXgCIV1/Zc/dRuFEyw1L0pbA+qynJkW5Q=="
2290 + "resolved" "https://registry.yarnpkg.com/acorn/-/acorn-8.5.0.tgz"
2291 + "version" "8.5.0"
2292 +
2293 +"address@^1.0.1", "address@1.1.2":
2294 + "integrity" "sha512-aT6camzM4xEA54YVJYSqxz1kv4IHnQZRtThJJHhUMRExaU5spC7jX5ugSwTaTgJliIgs4VhZOk7htClvQ/LmRA=="
2295 + "resolved" "https://registry.yarnpkg.com/address/-/address-1.1.2.tgz"
2296 + "version" "1.1.2"
2297 +
2298 +"adjust-sourcemap-loader@3.0.0":
2299 + "integrity" "sha512-YBrGyT2/uVQ/c6Rr+t6ZJXniY03YtHGMJQYal368burRGYKqhx9qGTWqcBU5s1CwYY9E/ri63RYyG1IacMZtqw=="
2300 + "resolved" "https://registry.yarnpkg.com/adjust-sourcemap-loader/-/adjust-sourcemap-loader-3.0.0.tgz"
2301 + "version" "3.0.0"
2302 + dependencies:
2303 + "loader-utils" "^2.0.0"
2304 + "regex-parser" "^2.2.11"
2305 +
2306 +"agent-base@6":
2307 + "integrity" "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ=="
2308 + "resolved" "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz"
2309 + "version" "6.0.2"
2310 + dependencies:
2311 + "debug" "4"
2312 +
2313 +"aggregate-error@^3.0.0":
2314 + "integrity" "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA=="
2315 + "resolved" "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz"
2316 + "version" "3.1.0"
2317 + dependencies:
2318 + "clean-stack" "^2.0.0"
2319 + "indent-string" "^4.0.0"
2320 +
2321 +"ajv-errors@^1.0.0":
2322 + "integrity" "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ=="
2323 + "resolved" "https://registry.yarnpkg.com/ajv-errors/-/ajv-errors-1.0.1.tgz"
2324 + "version" "1.0.1"
2325 +
2326 +"ajv-keywords@^3.1.0", "ajv-keywords@^3.4.1", "ajv-keywords@^3.5.2":
2327 + "integrity" "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ=="
2328 + "resolved" "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz"
2329 + "version" "3.5.2"
2330 +
2331 +"ajv@^6.1.0", "ajv@^6.10.0", "ajv@^6.10.2", "ajv@^6.12.4", "ajv@^6.12.5", "ajv@^6.9.1", "ajv@>=5.0.0":
2332 + "integrity" "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g=="
2333 + "resolved" "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz"
2334 + "version" "6.12.6"
2335 + dependencies:
2336 + "fast-deep-equal" "^3.1.1"
2337 + "fast-json-stable-stringify" "^2.0.0"
2338 + "json-schema-traverse" "^0.4.1"
2339 + "uri-js" "^4.2.2"
2340 +
2341 +"ajv@^8.0.1":
2342 + "integrity" "sha512-SMJOdDP6LqTkD0Uq8qLi+gMwSt0imXLSV080qFVwJCpH9U6Mb+SUGHAXM0KNbcBPguytWyvFxcHgMLe2D2XSpw=="
2343 + "resolved" "https://registry.yarnpkg.com/ajv/-/ajv-8.6.3.tgz"
2344 + "version" "8.6.3"
2345 + dependencies:
2346 + "fast-deep-equal" "^3.1.1"
2347 + "json-schema-traverse" "^1.0.0"
2348 + "require-from-string" "^2.0.2"
2349 + "uri-js" "^4.2.2"
2350 +
2351 +"alphanum-sort@^1.0.0":
2352 + "integrity" "sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM="
2353 + "resolved" "https://registry.yarnpkg.com/alphanum-sort/-/alphanum-sort-1.0.2.tgz"
2354 + "version" "1.0.2"
2355 +
2356 +"ansi-colors@^3.0.0":
2357 + "integrity" "sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA=="
2358 + "resolved" "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-3.2.4.tgz"
2359 + "version" "3.2.4"
2360 +
2361 +"ansi-colors@^4.1.1":
2362 + "integrity" "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA=="
2363 + "resolved" "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz"
2364 + "version" "4.1.1"
2365 +
2366 +"ansi-escapes@^4.2.1", "ansi-escapes@^4.3.1":
2367 + "integrity" "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ=="
2368 + "resolved" "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz"
2369 + "version" "4.3.2"
2370 + dependencies:
2371 + "type-fest" "^0.21.3"
2372 +
2373 +"ansi-html@^0.0.7", "ansi-html@0.0.7":
2374 + "integrity" "sha1-gTWEAhliqenm/QOflA0S9WynhZ4="
2375 + "resolved" "https://registry.yarnpkg.com/ansi-html/-/ansi-html-0.0.7.tgz"
2376 + "version" "0.0.7"
2377 +
2378 +"ansi-regex@^2.0.0":
2379 + "integrity" "sha1-w7M6te42DYbg5ijwRorn7yfWVN8="
2380 + "resolved" "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz"
2381 + "version" "2.1.1"
2382 +
2383 +"ansi-regex@^4.1.0":
2384 + "integrity" "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg=="
2385 + "resolved" "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz"
2386 + "version" "4.1.0"
2387 +
2388 +"ansi-regex@^5.0.0", "ansi-regex@^5.0.1":
2389 + "integrity" "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="
2390 + "resolved" "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz"
2391 + "version" "5.0.1"
2392 +
2393 +"ansi-styles@^3.2.0":
2394 + "integrity" "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA=="
2395 + "resolved" "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz"
2396 + "version" "3.2.1"
2397 + dependencies:
2398 + "color-convert" "^1.9.0"
2399 +
2400 +"ansi-styles@^3.2.1":
2401 + "integrity" "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA=="
2402 + "resolved" "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz"
2403 + "version" "3.2.1"
2404 + dependencies:
2405 + "color-convert" "^1.9.0"
2406 +
2407 +"ansi-styles@^4.0.0", "ansi-styles@^4.1.0":
2408 + "integrity" "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="
2409 + "resolved" "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz"
2410 + "version" "4.3.0"
2411 + dependencies:
2412 + "color-convert" "^2.0.1"
2413 +
2414 +"anymatch@^2.0.0":
2415 + "integrity" "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw=="
2416 + "resolved" "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz"
2417 + "version" "2.0.0"
2418 + dependencies:
2419 + "micromatch" "^3.1.4"
2420 + "normalize-path" "^2.1.1"
2421 +
2422 +"anymatch@^3.0.0", "anymatch@^3.0.3", "anymatch@~3.1.2":
2423 + "integrity" "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg=="
2424 + "resolved" "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz"
2425 + "version" "3.1.2"
2426 + dependencies:
2427 + "normalize-path" "^3.0.0"
2428 + "picomatch" "^2.0.4"
2429 +
2430 +"aproba@^1.1.1":
2431 + "integrity" "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw=="
2432 + "resolved" "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz"
2433 + "version" "1.2.0"
2434 +
2435 +"argparse@^1.0.7":
2436 + "integrity" "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg=="
2437 + "resolved" "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz"
2438 + "version" "1.0.10"
2439 + dependencies:
2440 + "sprintf-js" "~1.0.2"
2441 +
2442 +"aria-query@^4.2.2":
2443 + "integrity" "sha512-o/HelwhuKpTj/frsOsbNLNgnNGVIFsVP/SW2BSF14gVl7kAfMOJ6/8wUAUvG1R1NHKrfG+2sHZTu0yauT1qBrA=="
2444 + "resolved" "https://registry.yarnpkg.com/aria-query/-/aria-query-4.2.2.tgz"
2445 + "version" "4.2.2"
2446 + dependencies:
2447 + "@babel/runtime" "^7.10.2"
2448 + "@babel/runtime-corejs3" "^7.10.2"
2449 +
2450 +"arity-n@^1.0.4":
2451 + "integrity" "sha1-2edrEXM+CFacCEeuezmyhgswt0U="
2452 + "resolved" "https://registry.yarnpkg.com/arity-n/-/arity-n-1.0.4.tgz"
2453 + "version" "1.0.4"
2454 +
2455 +"arr-diff@^4.0.0":
2456 + "integrity" "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA="
2457 + "resolved" "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz"
2458 + "version" "4.0.0"
2459 +
2460 +"arr-flatten@^1.1.0":
2461 + "integrity" "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg=="
2462 + "resolved" "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz"
2463 + "version" "1.1.0"
2464 +
2465 +"arr-union@^3.1.0":
2466 + "integrity" "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ="
2467 + "resolved" "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz"
2468 + "version" "3.1.0"
2469 +
2470 +"array-flatten@^2.1.0":
2471 + "integrity" "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ=="
2472 + "resolved" "https://registry.yarnpkg.com/array-flatten/-/array-flatten-2.1.2.tgz"
2473 + "version" "2.1.2"
2474 +
2475 +"array-flatten@1.1.1":
2476 + "integrity" "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI="
2477 + "resolved" "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz"
2478 + "version" "1.1.1"
2479 +
2480 +"array-includes@^3.1.1", "array-includes@^3.1.3":
2481 + "integrity" "sha512-gcem1KlBU7c9rB+Rq8/3PPKsK2kjqeEBa3bD5kkQo4nYlOHQCJqIJFqBXDEfwaRuYTT4E+FxA9xez7Gf/e3Q7A=="
2482 + "resolved" "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.3.tgz"
2483 + "version" "3.1.3"
2484 + dependencies:
2485 + "call-bind" "^1.0.2"
2486 + "define-properties" "^1.1.3"
2487 + "es-abstract" "^1.18.0-next.2"
2488 + "get-intrinsic" "^1.1.1"
2489 + "is-string" "^1.0.5"
2490 +
2491 +"array-union@^1.0.1":
2492 + "integrity" "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk="
2493 + "resolved" "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz"
2494 + "version" "1.0.2"
2495 + dependencies:
2496 + "array-uniq" "^1.0.1"
2497 +
2498 +"array-union@^2.1.0":
2499 + "integrity" "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw=="
2500 + "resolved" "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz"
2501 + "version" "2.1.0"
2502 +
2503 +"array-uniq@^1.0.1":
2504 + "integrity" "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY="
2505 + "resolved" "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz"
2506 + "version" "1.0.3"
2507 +
2508 +"array-unique@^0.3.2":
2509 + "integrity" "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg="
2510 + "resolved" "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz"
2511 + "version" "0.3.2"
2512 +
2513 +"array.prototype.flat@^1.2.4":
2514 + "integrity" "sha512-4470Xi3GAPAjZqFcljX2xzckv1qeKPizoNkiS0+O4IoPR2ZNpcjE0pkhdihlDouK+x6QOast26B4Q/O9DJnwSg=="
2515 + "resolved" "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.2.4.tgz"
2516 + "version" "1.2.4"
2517 + dependencies:
2518 + "call-bind" "^1.0.0"
2519 + "define-properties" "^1.1.3"
2520 + "es-abstract" "^1.18.0-next.1"
2521 +
2522 +"array.prototype.flatmap@^1.2.4":
2523 + "integrity" "sha512-r9Z0zYoxqHz60vvQbWEdXIEtCwHF0yxaWfno9qzXeNHvfyl3BZqygmGzb84dsubyaXLH4husF+NFgMSdpZhk2Q=="
2524 + "resolved" "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.2.4.tgz"
2525 + "version" "1.2.4"
2526 + dependencies:
2527 + "call-bind" "^1.0.0"
2528 + "define-properties" "^1.1.3"
2529 + "es-abstract" "^1.18.0-next.1"
2530 + "function-bind" "^1.1.1"
2531 +
2532 +"arrify@^2.0.1":
2533 + "integrity" "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug=="
2534 + "resolved" "https://registry.yarnpkg.com/arrify/-/arrify-2.0.1.tgz"
2535 + "version" "2.0.1"
2536 +
2537 +"asap@~2.0.6":
2538 + "integrity" "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY="
2539 + "resolved" "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz"
2540 + "version" "2.0.6"
2541 +
2542 +"asn1.js@^5.2.0":
2543 + "integrity" "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA=="
2544 + "resolved" "https://registry.yarnpkg.com/asn1.js/-/asn1.js-5.4.1.tgz"
2545 + "version" "5.4.1"
2546 + dependencies:
2547 + "bn.js" "^4.0.0"
2548 + "inherits" "^2.0.1"
2549 + "minimalistic-assert" "^1.0.0"
2550 + "safer-buffer" "^2.1.0"
2551 +
2552 +"assert@^1.1.1":
2553 + "integrity" "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA=="
2554 + "resolved" "https://registry.yarnpkg.com/assert/-/assert-1.5.0.tgz"
2555 + "version" "1.5.0"
2556 + dependencies:
2557 + "object-assign" "^4.1.1"
2558 + "util" "0.10.3"
2559 +
2560 +"assign-symbols@^1.0.0":
2561 + "integrity" "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c="
2562 + "resolved" "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz"
2563 + "version" "1.0.0"
2564 +
2565 +"ast-types-flow@^0.0.7":
2566 + "integrity" "sha1-9wtzXGvKGlycItmCw+Oef+ujva0="
2567 + "resolved" "https://registry.yarnpkg.com/ast-types-flow/-/ast-types-flow-0.0.7.tgz"
2568 + "version" "0.0.7"
2569 +
2570 +"astral-regex@^2.0.0":
2571 + "integrity" "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ=="
2572 + "resolved" "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz"
2573 + "version" "2.0.0"
2574 +
2575 +"async-each@^1.0.1":
2576 + "integrity" "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ=="
2577 + "resolved" "https://registry.yarnpkg.com/async-each/-/async-each-1.0.3.tgz"
2578 + "version" "1.0.3"
2579 +
2580 +"async-limiter@~1.0.0":
2581 + "integrity" "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ=="
2582 + "resolved" "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.1.tgz"
2583 + "version" "1.0.1"
2584 +
2585 +"async@^2.6.2":
2586 + "integrity" "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg=="
2587 + "resolved" "https://registry.yarnpkg.com/async/-/async-2.6.3.tgz"
2588 + "version" "2.6.3"
2589 + dependencies:
2590 + "lodash" "^4.17.14"
2591 +
2592 +"asynckit@^0.4.0":
2593 + "integrity" "sha1-x57Zf380y48robyXkLzDZkdLS3k="
2594 + "resolved" "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz"
2595 + "version" "0.4.0"
2596 +
2597 +"at-least-node@^1.0.0":
2598 + "integrity" "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg=="
2599 + "resolved" "https://registry.yarnpkg.com/at-least-node/-/at-least-node-1.0.0.tgz"
2600 + "version" "1.0.0"
2601 +
2602 +"atob@^2.1.2":
2603 + "integrity" "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg=="
2604 + "resolved" "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz"
2605 + "version" "2.1.2"
2606 +
2607 +"autoprefixer@^9.6.1":
2608 + "integrity" "sha512-7Hg99B1eTH5+LgmUBUSmov1Z3bsggQJS7v3IMGo6wcScnbRuvtMc871J9J+4bSbIqa9LSX/zypFXJ8sXHpMJeQ=="
2609 + "resolved" "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-9.8.7.tgz"
2610 + "version" "9.8.7"
2611 + dependencies:
2612 + "browserslist" "^4.12.0"
2613 + "caniuse-lite" "^1.0.30001109"
2614 + "nanocolors" "^0.2.8"
2615 + "normalize-range" "^0.1.2"
2616 + "num2fraction" "^1.2.2"
2617 + "postcss" "^7.0.32"
2618 + "postcss-value-parser" "^4.1.0"
2619 +
2620 +"axe-core@^4.0.2":
2621 + "integrity" "sha512-/lqqLAmuIPi79WYfRpy2i8z+x+vxU3zX2uAm0gs1q52qTuKwolOj1P8XbufpXcsydrpKx2yGn2wzAnxCMV86QA=="
2622 + "resolved" "https://registry.yarnpkg.com/axe-core/-/axe-core-4.3.3.tgz"
2623 + "version" "4.3.3"
2624 +
2625 +"axobject-query@^2.2.0":
2626 + "integrity" "sha512-Td525n+iPOOyUQIeBfcASuG6uJsDOITl7Mds5gFyerkWiX7qhUTdYUBlSgNMyVqtSJqwpt1kXGLdUt6SykLMRA=="
2627 + "resolved" "https://registry.yarnpkg.com/axobject-query/-/axobject-query-2.2.0.tgz"
2628 + "version" "2.2.0"
2629 +
2630 +"babel-eslint@^10.0.0", "babel-eslint@^10.1.0":
2631 + "integrity" "sha512-ifWaTHQ0ce+448CYop8AdrQiBsGrnC+bMgfyKFdi6EsPLTAWG+QfyDeM6OH+FmWnKvEq5NnBMLvlBUPKQZoDSg=="
2632 + "resolved" "https://registry.yarnpkg.com/babel-eslint/-/babel-eslint-10.1.0.tgz"
2633 + "version" "10.1.0"
2634 + dependencies:
2635 + "@babel/code-frame" "^7.0.0"
2636 + "@babel/parser" "^7.7.0"
2637 + "@babel/traverse" "^7.7.0"
2638 + "@babel/types" "^7.7.0"
2639 + "eslint-visitor-keys" "^1.0.0"
2640 + "resolve" "^1.12.0"
2641 +
2642 +"babel-extract-comments@^1.0.0":
2643 + "integrity" "sha512-qWWzi4TlddohA91bFwgt6zO/J0X+io7Qp184Fw0m2JYRSTZnJbFR8+07KmzudHCZgOiKRCrjhylwv9Xd8gfhVQ=="
2644 + "resolved" "https://registry.yarnpkg.com/babel-extract-comments/-/babel-extract-comments-1.0.0.tgz"
2645 + "version" "1.0.0"
2646 + dependencies:
2647 + "babylon" "^6.18.0"
2648 +
2649 +"babel-jest@^26.6.0":
2650 + "integrity" "sha512-pl4Q+GAVOHwvjrck6jKjvmGhnO3jHX/xuB9d27f+EJZ/6k+6nMuPjorrYp7s++bKKdANwzElBWnLWaObvTnaZA=="
2651 + "resolved" "https://registry.yarnpkg.com/babel-jest/-/babel-jest-26.6.3.tgz"
2652 + "version" "26.6.3"
2653 + dependencies:
2654 + "@jest/transform" "^26.6.2"
2655 + "@jest/types" "^26.6.2"
2656 + "@types/babel__core" "^7.1.7"
2657 + "babel-plugin-istanbul" "^6.0.0"
2658 + "babel-preset-jest" "^26.6.2"
2659 + "chalk" "^4.0.0"
2660 + "graceful-fs" "^4.2.4"
2661 + "slash" "^3.0.0"
2662 +
2663 +"babel-jest@^26.6.3":
2664 + "integrity" "sha512-pl4Q+GAVOHwvjrck6jKjvmGhnO3jHX/xuB9d27f+EJZ/6k+6nMuPjorrYp7s++bKKdANwzElBWnLWaObvTnaZA=="
2665 + "resolved" "https://registry.yarnpkg.com/babel-jest/-/babel-jest-26.6.3.tgz"
2666 + "version" "26.6.3"
2667 + dependencies:
2668 + "@jest/transform" "^26.6.2"
2669 + "@jest/types" "^26.6.2"
2670 + "@types/babel__core" "^7.1.7"
2671 + "babel-plugin-istanbul" "^6.0.0"
2672 + "babel-preset-jest" "^26.6.2"
2673 + "chalk" "^4.0.0"
2674 + "graceful-fs" "^4.2.4"
2675 + "slash" "^3.0.0"
2676 +
2677 +"babel-loader@8.1.0":
2678 + "integrity" "sha512-7q7nC1tYOrqvUrN3LQK4GwSk/TQorZSOlO9C+RZDZpODgyN4ZlCqE5q9cDsyWOliN+aU9B4JX01xK9eJXowJLw=="
2679 + "resolved" "https://registry.yarnpkg.com/babel-loader/-/babel-loader-8.1.0.tgz"
2680 + "version" "8.1.0"
2681 + dependencies:
2682 + "find-cache-dir" "^2.1.0"
2683 + "loader-utils" "^1.4.0"
2684 + "mkdirp" "^0.5.3"
2685 + "pify" "^4.0.1"
2686 + "schema-utils" "^2.6.5"
2687 +
2688 +"babel-plugin-dynamic-import-node@^2.3.3":
2689 + "integrity" "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ=="
2690 + "resolved" "https://registry.yarnpkg.com/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz"
2691 + "version" "2.3.3"
2692 + dependencies:
2693 + "object.assign" "^4.1.0"
2694 +
2695 +"babel-plugin-istanbul@^6.0.0":
2696 + "integrity" "sha512-AF55rZXpe7trmEylbaE1Gv54wn6rwU03aptvRoVIGP8YykoSxqdVLV1TfwflBCE/QtHmqtP8SWlTENqbK8GCSQ=="
2697 + "resolved" "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-6.0.0.tgz"
2698 + "version" "6.0.0"
2699 + dependencies:
2700 + "@babel/helper-plugin-utils" "^7.0.0"
2701 + "@istanbuljs/load-nyc-config" "^1.0.0"
2702 + "@istanbuljs/schema" "^0.1.2"
2703 + "istanbul-lib-instrument" "^4.0.0"
2704 + "test-exclude" "^6.0.0"
2705 +
2706 +"babel-plugin-jest-hoist@^26.6.2":
2707 + "integrity" "sha512-PO9t0697lNTmcEHH69mdtYiOIkkOlj9fySqfO3K1eCcdISevLAE0xY59VLLUj0SoiPiTX/JU2CYFpILydUa5Lw=="
2708 + "resolved" "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-26.6.2.tgz"
2709 + "version" "26.6.2"
2710 + dependencies:
2711 + "@babel/template" "^7.3.3"
2712 + "@babel/types" "^7.3.3"
2713 + "@types/babel__core" "^7.0.0"
2714 + "@types/babel__traverse" "^7.0.6"
2715 +
2716 +"babel-plugin-macros@2.8.0":
2717 + "integrity" "sha512-SEP5kJpfGYqYKpBrj5XU3ahw5p5GOHJ0U5ssOSQ/WBVdwkD2Dzlce95exQTs3jOVWPPKLBN2rlEWkCK7dSmLvg=="
2718 + "resolved" "https://registry.yarnpkg.com/babel-plugin-macros/-/babel-plugin-macros-2.8.0.tgz"
2719 + "version" "2.8.0"
2720 + dependencies:
2721 + "@babel/runtime" "^7.7.2"
2722 + "cosmiconfig" "^6.0.0"
2723 + "resolve" "^1.12.0"
2724 +
2725 +"babel-plugin-named-asset-import@^0.3.7":
2726 + "integrity" "sha512-squySRkf+6JGnvjoUtDEjSREJEBirnXi9NqP6rjSYsylxQxqBTz+pkmf395i9E2zsvmYUaI40BHo6SqZUdydlw=="
2727 + "resolved" "https://registry.yarnpkg.com/babel-plugin-named-asset-import/-/babel-plugin-named-asset-import-0.3.7.tgz"
2728 + "version" "0.3.7"
2729 +
2730 +"babel-plugin-polyfill-corejs2@^0.2.2":
2731 + "integrity" "sha512-kISrENsJ0z5dNPq5eRvcctITNHYXWOA4DUZRFYCz3jYCcvTb/A546LIddmoGNMVYg2U38OyFeNosQwI9ENTqIQ=="
2732 + "resolved" "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.2.2.tgz"
2733 + "version" "0.2.2"
2734 + dependencies:
2735 + "@babel/compat-data" "^7.13.11"
2736 + "@babel/helper-define-polyfill-provider" "^0.2.2"
2737 + "semver" "^6.1.1"
2738 +
2739 +"babel-plugin-polyfill-corejs3@^0.2.2":
2740 + "integrity" "sha512-ninF5MQNwAX9Z7c9ED+H2pGt1mXdP4TqzlHKyPIYmJIYz0N+++uwdM7RnJukklhzJ54Q84vA4ZJkgs7lu5vqcw=="
2741 + "resolved" "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.2.5.tgz"
2742 + "version" "0.2.5"
2743 + dependencies:
2744 + "@babel/helper-define-polyfill-provider" "^0.2.2"
2745 + "core-js-compat" "^3.16.2"
2746 +
2747 +"babel-plugin-polyfill-regenerator@^0.2.2":
2748 + "integrity" "sha512-Goy5ghsc21HgPDFtzRkSirpZVW35meGoTmTOb2bxqdl60ghub4xOidgNTHaZfQ2FaxQsKmwvXtOAkcIS4SMBWg=="
2749 + "resolved" "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.2.2.tgz"
2750 + "version" "0.2.2"
2751 + dependencies:
2752 + "@babel/helper-define-polyfill-provider" "^0.2.2"
2753 +
2754 +"babel-plugin-syntax-object-rest-spread@^6.8.0":
2755 + "integrity" "sha1-/WU28rzhODb/o6VFjEkDpZe7O/U="
2756 + "resolved" "https://registry.yarnpkg.com/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz"
2757 + "version" "6.13.0"
2758 +
2759 +"babel-plugin-transform-object-rest-spread@^6.26.0":
2760 + "integrity" "sha1-DzZpLVD+9rfi1LOsFHgTepY7ewY="
2761 + "resolved" "https://registry.yarnpkg.com/babel-plugin-transform-object-rest-spread/-/babel-plugin-transform-object-rest-spread-6.26.0.tgz"
2762 + "version" "6.26.0"
2763 + dependencies:
2764 + "babel-plugin-syntax-object-rest-spread" "^6.8.0"
2765 + "babel-runtime" "^6.26.0"
2766 +
2767 +"babel-plugin-transform-react-remove-prop-types@0.4.24":
2768 + "integrity" "sha512-eqj0hVcJUR57/Ug2zE1Yswsw4LhuqqHhD+8v120T1cl3kjg76QwtyBrdIk4WVwK+lAhBJVYCd/v+4nc4y+8JsA=="
2769 + "resolved" "https://registry.yarnpkg.com/babel-plugin-transform-react-remove-prop-types/-/babel-plugin-transform-react-remove-prop-types-0.4.24.tgz"
2770 + "version" "0.4.24"
2771 +
2772 +"babel-preset-current-node-syntax@^1.0.0":
2773 + "integrity" "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ=="
2774 + "resolved" "https://registry.yarnpkg.com/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz"
2775 + "version" "1.0.1"
2776 + dependencies:
2777 + "@babel/plugin-syntax-async-generators" "^7.8.4"
2778 + "@babel/plugin-syntax-bigint" "^7.8.3"
2779 + "@babel/plugin-syntax-class-properties" "^7.8.3"
2780 + "@babel/plugin-syntax-import-meta" "^7.8.3"
2781 + "@babel/plugin-syntax-json-strings" "^7.8.3"
2782 + "@babel/plugin-syntax-logical-assignment-operators" "^7.8.3"
2783 + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3"
2784 + "@babel/plugin-syntax-numeric-separator" "^7.8.3"
2785 + "@babel/plugin-syntax-object-rest-spread" "^7.8.3"
2786 + "@babel/plugin-syntax-optional-catch-binding" "^7.8.3"
2787 + "@babel/plugin-syntax-optional-chaining" "^7.8.3"
2788 + "@babel/plugin-syntax-top-level-await" "^7.8.3"
2789 +
2790 +"babel-preset-jest@^26.6.2":
2791 + "integrity" "sha512-YvdtlVm9t3k777c5NPQIv6cxFFFapys25HiUmuSgHwIZhfifweR5c5Sf5nwE3MAbfu327CYSvps8Yx6ANLyleQ=="
2792 + "resolved" "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-26.6.2.tgz"
2793 + "version" "26.6.2"
2794 + dependencies:
2795 + "babel-plugin-jest-hoist" "^26.6.2"
2796 + "babel-preset-current-node-syntax" "^1.0.0"
2797 +
2798 +"babel-preset-react-app@^10.0.0":
2799 + "integrity" "sha512-itL2z8v16khpuKutx5IH8UdCdSTuzrOhRFTEdIhveZ2i1iBKDrVE0ATa4sFVy+02GLucZNVBWtoarXBy0Msdpg=="
2800 + "resolved" "https://registry.yarnpkg.com/babel-preset-react-app/-/babel-preset-react-app-10.0.0.tgz"
2801 + "version" "10.0.0"
2802 + dependencies:
2803 + "@babel/core" "7.12.3"
2804 + "@babel/plugin-proposal-class-properties" "7.12.1"
2805 + "@babel/plugin-proposal-decorators" "7.12.1"
2806 + "@babel/plugin-proposal-nullish-coalescing-operator" "7.12.1"
2807 + "@babel/plugin-proposal-numeric-separator" "7.12.1"
2808 + "@babel/plugin-proposal-optional-chaining" "7.12.1"
2809 + "@babel/plugin-transform-flow-strip-types" "7.12.1"
2810 + "@babel/plugin-transform-react-display-name" "7.12.1"
2811 + "@babel/plugin-transform-runtime" "7.12.1"
2812 + "@babel/preset-env" "7.12.1"
2813 + "@babel/preset-react" "7.12.1"
2814 + "@babel/preset-typescript" "7.12.1"
2815 + "@babel/runtime" "7.12.1"
2816 + "babel-plugin-macros" "2.8.0"
2817 + "babel-plugin-transform-react-remove-prop-types" "0.4.24"
2818 +
2819 +"babel-runtime@^6.26.0":
2820 + "integrity" "sha1-llxwWGaOgrVde/4E/yM3vItWR/4="
2821 + "resolved" "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz"
2822 + "version" "6.26.0"
2823 + dependencies:
2824 + "core-js" "^2.4.0"
2825 + "regenerator-runtime" "^0.11.0"
2826 +
2827 +"babylon@^6.18.0":
2828 + "integrity" "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ=="
2829 + "resolved" "https://registry.yarnpkg.com/babylon/-/babylon-6.18.0.tgz"
2830 + "version" "6.18.0"
2831 +
2832 +"balanced-match@^1.0.0":
2833 + "integrity" "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="
2834 + "resolved" "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz"
2835 + "version" "1.0.2"
2836 +
2837 +"base@^0.11.1":
2838 + "integrity" "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg=="
2839 + "resolved" "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz"
2840 + "version" "0.11.2"
2841 + dependencies:
2842 + "cache-base" "^1.0.1"
2843 + "class-utils" "^0.3.5"
2844 + "component-emitter" "^1.2.1"
2845 + "define-property" "^1.0.0"
2846 + "isobject" "^3.0.1"
2847 + "mixin-deep" "^1.2.0"
2848 + "pascalcase" "^0.1.1"
2849 +
2850 +"base64-js@^1.0.2":
2851 + "integrity" "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA=="
2852 + "resolved" "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz"
2853 + "version" "1.5.1"
2854 +
2855 +"batch@0.6.1":
2856 + "integrity" "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY="
2857 + "resolved" "https://registry.yarnpkg.com/batch/-/batch-0.6.1.tgz"
2858 + "version" "0.6.1"
2859 +
2860 +"bfj@^7.0.2":
2861 + "integrity" "sha512-+e/UqUzwmzJamNF50tBV6tZPTORow7gQ96iFow+8b562OdMpEK0BcJEq2OSPEDmAbSMBQ7PKZ87ubFkgxpYWgw=="
2862 + "resolved" "https://registry.yarnpkg.com/bfj/-/bfj-7.0.2.tgz"
2863 + "version" "7.0.2"
2864 + dependencies:
2865 + "bluebird" "^3.5.5"
2866 + "check-types" "^11.1.1"
2867 + "hoopy" "^0.1.4"
2868 + "tryer" "^1.0.1"
2869 +
2870 +"big.js@^5.2.2":
2871 + "integrity" "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ=="
2872 + "resolved" "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz"
2873 + "version" "5.2.2"
2874 +
2875 +"binary-extensions@^1.0.0":
2876 + "integrity" "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw=="
2877 + "resolved" "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.13.1.tgz"
2878 + "version" "1.13.1"
2879 +
2880 +"binary-extensions@^2.0.0":
2881 + "integrity" "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA=="
2882 + "resolved" "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz"
2883 + "version" "2.2.0"
2884 +
2885 +"bindings@^1.5.0":
2886 + "integrity" "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ=="
2887 + "resolved" "https://registry.yarnpkg.com/bindings/-/bindings-1.5.0.tgz"
2888 + "version" "1.5.0"
2889 + dependencies:
2890 + "file-uri-to-path" "1.0.0"
2891 +
2892 +"bluebird@^3.5.5":
2893 + "integrity" "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg=="
2894 + "resolved" "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz"
2895 + "version" "3.7.2"
2896 +
2897 +"bn.js@^4.0.0", "bn.js@^4.1.0", "bn.js@^4.11.9":
2898 + "integrity" "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA=="
2899 + "resolved" "https://registry.yarnpkg.com/bn.js/-/bn.js-4.12.0.tgz"
2900 + "version" "4.12.0"
2901 +
2902 +"bn.js@^5.0.0":
2903 + "integrity" "sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw=="
2904 + "resolved" "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.0.tgz"
2905 + "version" "5.2.0"
2906 +
2907 +"bn.js@^5.1.1":
2908 + "integrity" "sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw=="
2909 + "resolved" "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.0.tgz"
2910 + "version" "5.2.0"
2911 +
2912 +"body-parser@1.19.0":
2913 + "integrity" "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw=="
2914 + "resolved" "https://registry.yarnpkg.com/body-parser/-/body-parser-1.19.0.tgz"
2915 + "version" "1.19.0"
2916 + dependencies:
2917 + "bytes" "3.1.0"
2918 + "content-type" "~1.0.4"
2919 + "debug" "2.6.9"
2920 + "depd" "~1.1.2"
2921 + "http-errors" "1.7.2"
2922 + "iconv-lite" "0.4.24"
2923 + "on-finished" "~2.3.0"
2924 + "qs" "6.7.0"
2925 + "raw-body" "2.4.0"
2926 + "type-is" "~1.6.17"
2927 +
2928 +"bonjour@^3.5.0":
2929 + "integrity" "sha1-jokKGD2O6aI5OzhExpGkK897yfU="
2930 + "resolved" "https://registry.yarnpkg.com/bonjour/-/bonjour-3.5.0.tgz"
2931 + "version" "3.5.0"
2932 + dependencies:
2933 + "array-flatten" "^2.1.0"
2934 + "deep-equal" "^1.0.1"
2935 + "dns-equal" "^1.0.0"
2936 + "dns-txt" "^2.0.2"
2937 + "multicast-dns" "^6.0.1"
2938 + "multicast-dns-service-types" "^1.1.0"
2939 +
2940 +"boolbase@^1.0.0", "boolbase@~1.0.0":
2941 + "integrity" "sha1-aN/1++YMUes3cl6p4+0xDcwed24="
2942 + "resolved" "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz"
2943 + "version" "1.0.0"
2944 +
2945 +"brace-expansion@^1.1.7":
2946 + "integrity" "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA=="
2947 + "resolved" "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz"
2948 + "version" "1.1.11"
2949 + dependencies:
2950 + "balanced-match" "^1.0.0"
2951 + "concat-map" "0.0.1"
2952 +
2953 +"braces@^2.3.1", "braces@^2.3.2":
2954 + "integrity" "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w=="
2955 + "resolved" "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz"
2956 + "version" "2.3.2"
2957 + dependencies:
2958 + "arr-flatten" "^1.1.0"
2959 + "array-unique" "^0.3.2"
2960 + "extend-shallow" "^2.0.1"
2961 + "fill-range" "^4.0.0"
2962 + "isobject" "^3.0.1"
2963 + "repeat-element" "^1.1.2"
2964 + "snapdragon" "^0.8.1"
2965 + "snapdragon-node" "^2.0.1"
2966 + "split-string" "^3.0.2"
2967 + "to-regex" "^3.0.1"
2968 +
2969 +"braces@^3.0.1":
2970 + "integrity" "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A=="
2971 + "resolved" "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz"
2972 + "version" "3.0.2"
2973 + dependencies:
2974 + "fill-range" "^7.0.1"
2975 +
2976 +"braces@~3.0.2":
2977 + "integrity" "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A=="
2978 + "resolved" "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz"
2979 + "version" "3.0.2"
2980 + dependencies:
2981 + "fill-range" "^7.0.1"
2982 +
2983 +"brorand@^1.0.1", "brorand@^1.1.0":
2984 + "integrity" "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8="
2985 + "resolved" "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz"
2986 + "version" "1.1.0"
2987 +
2988 +"browser-process-hrtime@^1.0.0":
2989 + "integrity" "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow=="
2990 + "resolved" "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz"
2991 + "version" "1.0.0"
2992 +
2993 +"browserify-aes@^1.0.0", "browserify-aes@^1.0.4":
2994 + "integrity" "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA=="
2995 + "resolved" "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.2.0.tgz"
2996 + "version" "1.2.0"
2997 + dependencies:
2998 + "buffer-xor" "^1.0.3"
2999 + "cipher-base" "^1.0.0"
3000 + "create-hash" "^1.1.0"
3001 + "evp_bytestokey" "^1.0.3"
3002 + "inherits" "^2.0.1"
3003 + "safe-buffer" "^5.0.1"
3004 +
3005 +"browserify-cipher@^1.0.0":
3006 + "integrity" "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w=="
3007 + "resolved" "https://registry.yarnpkg.com/browserify-cipher/-/browserify-cipher-1.0.1.tgz"
3008 + "version" "1.0.1"
3009 + dependencies:
3010 + "browserify-aes" "^1.0.4"
3011 + "browserify-des" "^1.0.0"
3012 + "evp_bytestokey" "^1.0.0"
3013 +
3014 +"browserify-des@^1.0.0":
3015 + "integrity" "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A=="
3016 + "resolved" "https://registry.yarnpkg.com/browserify-des/-/browserify-des-1.0.2.tgz"
3017 + "version" "1.0.2"
3018 + dependencies:
3019 + "cipher-base" "^1.0.1"
3020 + "des.js" "^1.0.0"
3021 + "inherits" "^2.0.1"
3022 + "safe-buffer" "^5.1.2"
3023 +
3024 +"browserify-rsa@^4.0.0", "browserify-rsa@^4.0.1":
3025 + "integrity" "sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog=="
3026 + "resolved" "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.1.0.tgz"
3027 + "version" "4.1.0"
3028 + dependencies:
3029 + "bn.js" "^5.0.0"
3030 + "randombytes" "^2.0.1"
3031 +
3032 +"browserify-sign@^4.0.0":
3033 + "integrity" "sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg=="
3034 + "resolved" "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.2.1.tgz"
3035 + "version" "4.2.1"
3036 + dependencies:
3037 + "bn.js" "^5.1.1"
3038 + "browserify-rsa" "^4.0.1"
3039 + "create-hash" "^1.2.0"
3040 + "create-hmac" "^1.1.7"
3041 + "elliptic" "^6.5.3"
3042 + "inherits" "^2.0.4"
3043 + "parse-asn1" "^5.1.5"
3044 + "readable-stream" "^3.6.0"
3045 + "safe-buffer" "^5.2.0"
3046 +
3047 +"browserify-zlib@^0.2.0":
3048 + "integrity" "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA=="
3049 + "resolved" "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.2.0.tgz"
3050 + "version" "0.2.0"
3051 + dependencies:
3052 + "pako" "~1.0.5"
3053 +
3054 +"browserslist@^4", "browserslist@^4.0.0", "browserslist@^4.12.0", "browserslist@^4.16.6", "browserslist@^4.17.1", "browserslist@^4.6.2", "browserslist@^4.6.4":
3055 + "integrity" "sha512-aLD0ZMDSnF4lUt4ZDNgqi5BUn9BZ7YdQdI/cYlILrhdSSZJLU9aNZoD5/NBmM4SK34APB2e83MOsRt1EnkuyaQ=="
3056 + "resolved" "https://registry.yarnpkg.com/browserslist/-/browserslist-4.17.1.tgz"
3057 + "version" "4.17.1"
3058 + dependencies:
3059 + "caniuse-lite" "^1.0.30001259"
3060 + "electron-to-chromium" "^1.3.846"
3061 + "escalade" "^3.1.1"
3062 + "nanocolors" "^0.1.5"
3063 + "node-releases" "^1.1.76"
3064 +
3065 +"browserslist@4.14.2":
3066 + "integrity" "sha512-HI4lPveGKUR0x2StIz+2FXfDk9SfVMrxn6PLh1JeGUwcuoDkdKZebWiyLRJ68iIPDpMI4JLVDf7S7XzslgWOhw=="
3067 + "resolved" "https://registry.yarnpkg.com/browserslist/-/browserslist-4.14.2.tgz"
3068 + "version" "4.14.2"
3069 + dependencies:
3070 + "caniuse-lite" "^1.0.30001125"
3071 + "electron-to-chromium" "^1.3.564"
3072 + "escalade" "^3.0.2"
3073 + "node-releases" "^1.1.61"
3074 +
3075 +"bser@2.1.1":
3076 + "integrity" "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ=="
3077 + "resolved" "https://registry.yarnpkg.com/bser/-/bser-2.1.1.tgz"
3078 + "version" "2.1.1"
3079 + dependencies:
3080 + "node-int64" "^0.4.0"
3081 +
3082 +"buffer-from@^1.0.0":
3083 + "integrity" "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ=="
3084 + "resolved" "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz"
3085 + "version" "1.1.2"
3086 +
3087 +"buffer-indexof@^1.0.0":
3088 + "integrity" "sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g=="
3089 + "resolved" "https://registry.yarnpkg.com/buffer-indexof/-/buffer-indexof-1.1.1.tgz"
3090 + "version" "1.1.1"
3091 +
3092 +"buffer-xor@^1.0.3":
3093 + "integrity" "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk="
3094 + "resolved" "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz"
3095 + "version" "1.0.3"
3096 +
3097 +"buffer@^4.3.0":
3098 + "integrity" "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg=="
3099 + "resolved" "https://registry.yarnpkg.com/buffer/-/buffer-4.9.2.tgz"
3100 + "version" "4.9.2"
3101 + dependencies:
3102 + "base64-js" "^1.0.2"
3103 + "ieee754" "^1.1.4"
3104 + "isarray" "^1.0.0"
3105 +
3106 +"builtin-modules@^3.1.0":
3107 + "integrity" "sha512-lGzLKcioL90C7wMczpkY0n/oART3MbBa8R9OFGE1rJxoVI86u4WAGfEk8Wjv10eKSyTHVGkSo3bvBylCEtk7LA=="
3108 + "resolved" "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-3.2.0.tgz"
3109 + "version" "3.2.0"
3110 +
3111 +"builtin-status-codes@^3.0.0":
3112 + "integrity" "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug="
3113 + "resolved" "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz"
3114 + "version" "3.0.0"
3115 +
3116 +"bytes@3.0.0":
3117 + "integrity" "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg="
3118 + "resolved" "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz"
3119 + "version" "3.0.0"
3120 +
3121 +"bytes@3.1.0":
3122 + "integrity" "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg=="
3123 + "resolved" "https://registry.yarnpkg.com/bytes/-/bytes-3.1.0.tgz"
3124 + "version" "3.1.0"
3125 +
3126 +"cacache@^12.0.2":
3127 + "integrity" "sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ=="
3128 + "resolved" "https://registry.yarnpkg.com/cacache/-/cacache-12.0.4.tgz"
3129 + "version" "12.0.4"
3130 + dependencies:
3131 + "bluebird" "^3.5.5"
3132 + "chownr" "^1.1.1"
3133 + "figgy-pudding" "^3.5.1"
3134 + "glob" "^7.1.4"
3135 + "graceful-fs" "^4.1.15"
3136 + "infer-owner" "^1.0.3"
3137 + "lru-cache" "^5.1.1"
3138 + "mississippi" "^3.0.0"
3139 + "mkdirp" "^0.5.1"
3140 + "move-concurrently" "^1.0.1"
3141 + "promise-inflight" "^1.0.1"
3142 + "rimraf" "^2.6.3"
3143 + "ssri" "^6.0.1"
3144 + "unique-filename" "^1.1.1"
3145 + "y18n" "^4.0.0"
3146 +
3147 +"cacache@^15.0.5":
3148 + "integrity" "sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ=="
3149 + "resolved" "https://registry.yarnpkg.com/cacache/-/cacache-15.3.0.tgz"
3150 + "version" "15.3.0"
3151 + dependencies:
3152 + "@npmcli/fs" "^1.0.0"
3153 + "@npmcli/move-file" "^1.0.1"
3154 + "chownr" "^2.0.0"
3155 + "fs-minipass" "^2.0.0"
3156 + "glob" "^7.1.4"
3157 + "infer-owner" "^1.0.4"
3158 + "lru-cache" "^6.0.0"
3159 + "minipass" "^3.1.1"
3160 + "minipass-collect" "^1.0.2"
3161 + "minipass-flush" "^1.0.5"
3162 + "minipass-pipeline" "^1.2.2"
3163 + "mkdirp" "^1.0.3"
3164 + "p-map" "^4.0.0"
3165 + "promise-inflight" "^1.0.1"
3166 + "rimraf" "^3.0.2"
3167 + "ssri" "^8.0.1"
3168 + "tar" "^6.0.2"
3169 + "unique-filename" "^1.1.1"
3170 +
3171 +"cache-base@^1.0.1":
3172 + "integrity" "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ=="
3173 + "resolved" "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz"
3174 + "version" "1.0.1"
3175 + dependencies:
3176 + "collection-visit" "^1.0.0"
3177 + "component-emitter" "^1.2.1"
3178 + "get-value" "^2.0.6"
3179 + "has-value" "^1.0.0"
3180 + "isobject" "^3.0.1"
3181 + "set-value" "^2.0.0"
3182 + "to-object-path" "^0.3.0"
3183 + "union-value" "^1.0.0"
3184 + "unset-value" "^1.0.0"
3185 +
3186 +"call-bind@^1.0.0", "call-bind@^1.0.2":
3187 + "integrity" "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA=="
3188 + "resolved" "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz"
3189 + "version" "1.0.2"
3190 + dependencies:
3191 + "function-bind" "^1.1.1"
3192 + "get-intrinsic" "^1.0.2"
3193 +
3194 +"caller-callsite@^2.0.0":
3195 + "integrity" "sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ="
3196 + "resolved" "https://registry.yarnpkg.com/caller-callsite/-/caller-callsite-2.0.0.tgz"
3197 + "version" "2.0.0"
3198 + dependencies:
3199 + "callsites" "^2.0.0"
3200 +
3201 +"caller-path@^2.0.0":
3202 + "integrity" "sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ="
3203 + "resolved" "https://registry.yarnpkg.com/caller-path/-/caller-path-2.0.0.tgz"
3204 + "version" "2.0.0"
3205 + dependencies:
3206 + "caller-callsite" "^2.0.0"
3207 +
3208 +"callsites@^2.0.0":
3209 + "integrity" "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA="
3210 + "resolved" "https://registry.yarnpkg.com/callsites/-/callsites-2.0.0.tgz"
3211 + "version" "2.0.0"
3212 +
3213 +"callsites@^3.0.0":
3214 + "integrity" "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ=="
3215 + "resolved" "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz"
3216 + "version" "3.1.0"
3217 +
3218 +"camel-case@^4.1.1":
3219 + "integrity" "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw=="
3220 + "resolved" "https://registry.yarnpkg.com/camel-case/-/camel-case-4.1.2.tgz"
3221 + "version" "4.1.2"
3222 + dependencies:
3223 + "pascal-case" "^3.1.2"
3224 + "tslib" "^2.0.3"
3225 +
3226 +"camelcase@^5.0.0", "camelcase@^5.3.1", "camelcase@5.3.1":
3227 + "integrity" "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg=="
3228 + "resolved" "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz"
3229 + "version" "5.3.1"
3230 +
3231 +"camelcase@^6.0.0":
3232 + "integrity" "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg=="
3233 + "resolved" "https://registry.yarnpkg.com/camelcase/-/camelcase-6.2.0.tgz"
3234 + "version" "6.2.0"
3235 +
3236 +"camelcase@^6.1.0":
3237 + "integrity" "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg=="
3238 + "resolved" "https://registry.yarnpkg.com/camelcase/-/camelcase-6.2.0.tgz"
3239 + "version" "6.2.0"
3240 +
3241 +"camelcase@^6.2.0":
3242 + "integrity" "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg=="
3243 + "resolved" "https://registry.yarnpkg.com/camelcase/-/camelcase-6.2.0.tgz"
3244 + "version" "6.2.0"
3245 +
3246 +"caniuse-api@^3.0.0":
3247 + "integrity" "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw=="
3248 + "resolved" "https://registry.yarnpkg.com/caniuse-api/-/caniuse-api-3.0.0.tgz"
3249 + "version" "3.0.0"
3250 + dependencies:
3251 + "browserslist" "^4.0.0"
3252 + "caniuse-lite" "^1.0.0"
3253 + "lodash.memoize" "^4.1.2"
3254 + "lodash.uniq" "^4.5.0"
3255 +
3256 +"caniuse-lite@^1.0.0", "caniuse-lite@^1.0.30000981", "caniuse-lite@^1.0.30001109", "caniuse-lite@^1.0.30001125", "caniuse-lite@^1.0.30001259":
3257 + "integrity" "sha512-vM8D9Uvp7bHIN0fZ2KQ4wnmYFpJo/Etb4Vwsuc+ka0tfGDHvOPrFm6S/7CCNLSOkAUjenT2HnUPESdOIL91FaA=="
3258 + "resolved" "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001261.tgz"
3259 + "version" "1.0.30001261"
3260 +
3261 +"capture-exit@^2.0.0":
3262 + "integrity" "sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g=="
3263 + "resolved" "https://registry.yarnpkg.com/capture-exit/-/capture-exit-2.0.0.tgz"
3264 + "version" "2.0.0"
3265 + dependencies:
3266 + "rsvp" "^4.8.4"
3267 +
3268 +"case-sensitive-paths-webpack-plugin@2.3.0":
3269 + "integrity" "sha512-/4YgnZS8y1UXXmC02xD5rRrBEu6T5ub+mQHLNRj0fzTRbgdBYhsNo2V5EqwgqrExjxsjtF/OpAKAMkKsxbD5XQ=="
3270 + "resolved" "https://registry.yarnpkg.com/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.3.0.tgz"
3271 + "version" "2.3.0"
3272 +
3273 +"chalk@^2.0.0":
3274 + "integrity" "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ=="
3275 + "resolved" "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz"
3276 + "version" "2.4.2"
3277 + dependencies:
3278 + "ansi-styles" "^3.2.1"
3279 + "escape-string-regexp" "^1.0.5"
3280 + "supports-color" "^5.3.0"
3281 +
3282 +"chalk@^2.4.1":
3283 + "integrity" "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ=="
3284 + "resolved" "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz"
3285 + "version" "2.4.2"
3286 + dependencies:
3287 + "ansi-styles" "^3.2.1"
3288 + "escape-string-regexp" "^1.0.5"
3289 + "supports-color" "^5.3.0"
3290 +
3291 +"chalk@^2.4.2":
3292 + "integrity" "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ=="
3293 + "resolved" "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz"
3294 + "version" "2.4.2"
3295 + dependencies:
3296 + "ansi-styles" "^3.2.1"
3297 + "escape-string-regexp" "^1.0.5"
3298 + "supports-color" "^5.3.0"
3299 +
3300 +"chalk@^4.0.0":
3301 + "integrity" "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="
3302 + "resolved" "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz"
3303 + "version" "4.1.2"
3304 + dependencies:
3305 + "ansi-styles" "^4.1.0"
3306 + "supports-color" "^7.1.0"
3307 +
3308 +"chalk@2.4.2":
3309 + "integrity" "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ=="
3310 + "resolved" "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz"
3311 + "version" "2.4.2"
3312 + dependencies:
3313 + "ansi-styles" "^3.2.1"
3314 + "escape-string-regexp" "^1.0.5"
3315 + "supports-color" "^5.3.0"
3316 +
3317 +"char-regex@^1.0.2":
3318 + "integrity" "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw=="
3319 + "resolved" "https://registry.yarnpkg.com/char-regex/-/char-regex-1.0.2.tgz"
3320 + "version" "1.0.2"
3321 +
3322 +"check-types@^11.1.1":
3323 + "integrity" "sha512-tzWzvgePgLORb9/3a0YenggReLKAIb2owL03H2Xdoe5pKcUyWRSEQ8xfCar8t2SIAuEDwtmx2da1YB52YuHQMQ=="
3324 + "resolved" "https://registry.yarnpkg.com/check-types/-/check-types-11.1.2.tgz"
3325 + "version" "11.1.2"
3326 +
3327 +"chokidar@^2.1.8":
3328 + "integrity" "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg=="
3329 + "resolved" "https://registry.yarnpkg.com/chokidar/-/chokidar-2.1.8.tgz"
3330 + "version" "2.1.8"
3331 + dependencies:
3332 + "anymatch" "^2.0.0"
3333 + "async-each" "^1.0.1"
3334 + "braces" "^2.3.2"
3335 + "glob-parent" "^3.1.0"
3336 + "inherits" "^2.0.3"
3337 + "is-binary-path" "^1.0.0"
3338 + "is-glob" "^4.0.0"
3339 + "normalize-path" "^3.0.0"
3340 + "path-is-absolute" "^1.0.0"
3341 + "readdirp" "^2.2.1"
3342 + "upath" "^1.1.1"
3343 + optionalDependencies:
3344 + "fsevents" "^1.2.7"
3345 +
3346 +"chokidar@^3.4.0":
3347 + "integrity" "sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ=="
3348 + "resolved" "https://registry.npmjs.org/chokidar/-/chokidar-3.5.2.tgz"
3349 + "version" "3.5.2"
3350 + dependencies:
3351 + "anymatch" "~3.1.2"
3352 + "braces" "~3.0.2"
3353 + "glob-parent" "~5.1.2"
3354 + "is-binary-path" "~2.1.0"
3355 + "is-glob" "~4.0.1"
3356 + "normalize-path" "~3.0.0"
3357 + "readdirp" "~3.6.0"
3358 + optionalDependencies:
3359 + "fsevents" "~2.3.2"
3360 +
3361 +"chokidar@^3.4.1":
3362 + "integrity" "sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ=="
3363 + "resolved" "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.2.tgz"
3364 + "version" "3.5.2"
3365 + dependencies:
3366 + "anymatch" "~3.1.2"
3367 + "braces" "~3.0.2"
3368 + "glob-parent" "~5.1.2"
3369 + "is-binary-path" "~2.1.0"
3370 + "is-glob" "~4.0.1"
3371 + "normalize-path" "~3.0.0"
3372 + "readdirp" "~3.6.0"
3373 + optionalDependencies:
3374 + "fsevents" "~2.3.2"
3375 +
3376 +"chownr@^1.1.1":
3377 + "integrity" "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg=="
3378 + "resolved" "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz"
3379 + "version" "1.1.4"
3380 +
3381 +"chownr@^2.0.0":
3382 + "integrity" "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ=="
3383 + "resolved" "https://registry.yarnpkg.com/chownr/-/chownr-2.0.0.tgz"
3384 + "version" "2.0.0"
3385 +
3386 +"chrome-trace-event@^1.0.2":
3387 + "integrity" "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg=="
3388 + "resolved" "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz"
3389 + "version" "1.0.3"
3390 +
3391 +"ci-info@^2.0.0":
3392 + "integrity" "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ=="
3393 + "resolved" "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz"
3394 + "version" "2.0.0"
3395 +
3396 +"cipher-base@^1.0.0", "cipher-base@^1.0.1", "cipher-base@^1.0.3":
3397 + "integrity" "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q=="
3398 + "resolved" "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz"
3399 + "version" "1.0.4"
3400 + dependencies:
3401 + "inherits" "^2.0.1"
3402 + "safe-buffer" "^5.0.1"
3403 +
3404 +"cjs-module-lexer@^0.6.0":
3405 + "integrity" "sha512-uc2Vix1frTfnuzxxu1Hp4ktSvM3QaI4oXl4ZUqL1wjTu/BGki9TrCWoqLTg/drR1KwAEarXuRFCG2Svr1GxPFw=="
3406 + "resolved" "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-0.6.0.tgz"
3407 + "version" "0.6.0"
3408 +
3409 +"class-utils@^0.3.5":
3410 + "integrity" "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg=="
3411 + "resolved" "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz"
3412 + "version" "0.3.6"
3413 + dependencies:
3414 + "arr-union" "^3.1.0"
3415 + "define-property" "^0.2.5"
3416 + "isobject" "^3.0.0"
3417 + "static-extend" "^0.1.1"
3418 +
3419 +"clean-css@^4.2.3":
3420 + "integrity" "sha512-VcMWDN54ZN/DS+g58HYL5/n4Zrqe8vHJpGA8KdgUXFU4fuP/aHNw8eld9SyEIyabIMJX/0RaY/fplOo5hYLSFA=="
3421 + "resolved" "https://registry.yarnpkg.com/clean-css/-/clean-css-4.2.3.tgz"
3422 + "version" "4.2.3"
3423 + dependencies:
3424 + "source-map" "~0.6.0"
3425 +
3426 +"clean-stack@^2.0.0":
3427 + "integrity" "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A=="
3428 + "resolved" "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz"
3429 + "version" "2.2.0"
3430 +
3431 +"cliui@^5.0.0":
3432 + "integrity" "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA=="
3433 + "resolved" "https://registry.yarnpkg.com/cliui/-/cliui-5.0.0.tgz"
3434 + "version" "5.0.0"
3435 + dependencies:
3436 + "string-width" "^3.1.0"
3437 + "strip-ansi" "^5.2.0"
3438 + "wrap-ansi" "^5.1.0"
3439 +
3440 +"cliui@^6.0.0":
3441 + "integrity" "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ=="
3442 + "resolved" "https://registry.yarnpkg.com/cliui/-/cliui-6.0.0.tgz"
3443 + "version" "6.0.0"
3444 + dependencies:
3445 + "string-width" "^4.2.0"
3446 + "strip-ansi" "^6.0.0"
3447 + "wrap-ansi" "^6.2.0"
3448 +
3449 +"clone-deep@^4.0.1":
3450 + "integrity" "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ=="
3451 + "resolved" "https://registry.yarnpkg.com/clone-deep/-/clone-deep-4.0.1.tgz"
3452 + "version" "4.0.1"
3453 + dependencies:
3454 + "is-plain-object" "^2.0.4"
3455 + "kind-of" "^6.0.2"
3456 + "shallow-clone" "^3.0.0"
3457 +
3458 +"co@^4.6.0":
3459 + "integrity" "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ="
3460 + "resolved" "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz"
3461 + "version" "4.6.0"
3462 +
3463 +"coa@^2.0.2":
3464 + "integrity" "sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA=="
3465 + "resolved" "https://registry.yarnpkg.com/coa/-/coa-2.0.2.tgz"
3466 + "version" "2.0.2"
3467 + dependencies:
3468 + "@types/q" "^1.5.1"
3469 + "chalk" "^2.4.1"
3470 + "q" "^1.1.2"
3471 +
3472 +"collect-v8-coverage@^1.0.0":
3473 + "integrity" "sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg=="
3474 + "resolved" "https://registry.yarnpkg.com/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz"
3475 + "version" "1.0.1"
3476 +
3477 +"collection-visit@^1.0.0":
3478 + "integrity" "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA="
3479 + "resolved" "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz"
3480 + "version" "1.0.0"
3481 + dependencies:
3482 + "map-visit" "^1.0.0"
3483 + "object-visit" "^1.0.0"
3484 +
3485 +"color-convert@^1.9.0", "color-convert@^1.9.3":
3486 + "integrity" "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg=="
3487 + "resolved" "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz"
3488 + "version" "1.9.3"
3489 + dependencies:
3490 + "color-name" "1.1.3"
3491 +
3492 +"color-convert@^2.0.1":
3493 + "integrity" "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ=="
3494 + "resolved" "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz"
3495 + "version" "2.0.1"
3496 + dependencies:
3497 + "color-name" "~1.1.4"
3498 +
3499 +"color-name@^1.0.0", "color-name@~1.1.4":
3500 + "integrity" "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
3501 + "resolved" "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz"
3502 + "version" "1.1.4"
3503 +
3504 +"color-name@1.1.3":
3505 + "integrity" "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU="
3506 + "resolved" "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz"
3507 + "version" "1.1.3"
3508 +
3509 +"color-string@^1.6.0":
3510 + "integrity" "sha512-c/hGS+kRWJutUBEngKKmk4iH3sD59MBkoxVapS/0wgpCz2u7XsNloxknyvBhzwEs1IbV36D9PwqLPJ2DTu3vMA=="
3511 + "resolved" "https://registry.yarnpkg.com/color-string/-/color-string-1.6.0.tgz"
3512 + "version" "1.6.0"
3513 + dependencies:
3514 + "color-name" "^1.0.0"
3515 + "simple-swizzle" "^0.2.2"
3516 +
3517 +"color@^3.0.0":
3518 + "integrity" "sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA=="
3519 + "resolved" "https://registry.yarnpkg.com/color/-/color-3.2.1.tgz"
3520 + "version" "3.2.1"
3521 + dependencies:
3522 + "color-convert" "^1.9.3"
3523 + "color-string" "^1.6.0"
3524 +
3525 +"combined-stream@^1.0.8":
3526 + "integrity" "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg=="
3527 + "resolved" "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz"
3528 + "version" "1.0.8"
3529 + dependencies:
3530 + "delayed-stream" "~1.0.0"
3531 +
3532 +"commander@^2.20.0":
3533 + "integrity" "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ=="
3534 + "resolved" "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz"
3535 + "version" "2.20.3"
3536 +
3537 +"commander@^4.0.1":
3538 + "integrity" "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA=="
3539 + "resolved" "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz"
3540 + "version" "4.1.1"
3541 +
3542 +"commander@^4.1.1":
3543 + "integrity" "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA=="
3544 + "resolved" "https://registry.yarnpkg.com/commander/-/commander-4.1.1.tgz"
3545 + "version" "4.1.1"
3546 +
3547 +"common-tags@^1.8.0":
3548 + "integrity" "sha512-6P6g0uetGpW/sdyUy/iQQCbFF0kWVMSIVSyYz7Zgjcgh8mgw8PQzDNZeyZ5DQ2gM7LBoZPHmnjz8rUthkBG5tw=="
3549 + "resolved" "https://registry.yarnpkg.com/common-tags/-/common-tags-1.8.0.tgz"
3550 + "version" "1.8.0"
3551 +
3552 +"commondir@^1.0.1":
3553 + "integrity" "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs="
3554 + "resolved" "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz"
3555 + "version" "1.0.1"
3556 +
3557 +"component-emitter@^1.2.1":
3558 + "integrity" "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg=="
3559 + "resolved" "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz"
3560 + "version" "1.3.0"
3561 +
3562 +"compose-function@3.0.3":
3563 + "integrity" "sha1-ntZ18TzFRQHTCVCkhv9qe6OrGF8="
3564 + "resolved" "https://registry.yarnpkg.com/compose-function/-/compose-function-3.0.3.tgz"
3565 + "version" "3.0.3"
3566 + dependencies:
3567 + "arity-n" "^1.0.4"
3568 +
3569 +"compressible@~2.0.16":
3570 + "integrity" "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg=="
3571 + "resolved" "https://registry.yarnpkg.com/compressible/-/compressible-2.0.18.tgz"
3572 + "version" "2.0.18"
3573 + dependencies:
3574 + "mime-db" ">= 1.43.0 < 2"
3575 +
3576 +"compression@^1.7.4":
3577 + "integrity" "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ=="
3578 + "resolved" "https://registry.yarnpkg.com/compression/-/compression-1.7.4.tgz"
3579 + "version" "1.7.4"
3580 + dependencies:
3581 + "accepts" "~1.3.5"
3582 + "bytes" "3.0.0"
3583 + "compressible" "~2.0.16"
3584 + "debug" "2.6.9"
3585 + "on-headers" "~1.0.2"
3586 + "safe-buffer" "5.1.2"
3587 + "vary" "~1.1.2"
3588 +
3589 +"concat-map@0.0.1":
3590 + "integrity" "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s="
3591 + "resolved" "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz"
3592 + "version" "0.0.1"
3593 +
3594 +"concat-stream@^1.5.0":
3595 + "integrity" "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw=="
3596 + "resolved" "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz"
3597 + "version" "1.6.2"
3598 + dependencies:
3599 + "buffer-from" "^1.0.0"
3600 + "inherits" "^2.0.3"
3601 + "readable-stream" "^2.2.2"
3602 + "typedarray" "^0.0.6"
3603 +
3604 +"confusing-browser-globals@^1.0.10":
3605 + "integrity" "sha512-gNld/3lySHwuhaVluJUKLePYirM3QNCKzVxqAdhJII9/WXKVX5PURzMVJspS1jTslSqjeuG4KMVTSouit5YPHA=="
3606 + "resolved" "https://registry.yarnpkg.com/confusing-browser-globals/-/confusing-browser-globals-1.0.10.tgz"
3607 + "version" "1.0.10"
3608 +
3609 +"connect-history-api-fallback@^1.6.0":
3610 + "integrity" "sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg=="
3611 + "resolved" "https://registry.yarnpkg.com/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz"
3612 + "version" "1.6.0"
3613 +
3614 +"console-browserify@^1.1.0":
3615 + "integrity" "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA=="
3616 + "resolved" "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.2.0.tgz"
3617 + "version" "1.2.0"
3618 +
3619 +"constants-browserify@^1.0.0":
3620 + "integrity" "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U="
3621 + "resolved" "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz"
3622 + "version" "1.0.0"
3623 +
3624 +"content-disposition@0.5.3":
3625 + "integrity" "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g=="
3626 + "resolved" "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.3.tgz"
3627 + "version" "0.5.3"
3628 + dependencies:
3629 + "safe-buffer" "5.1.2"
3630 +
3631 +"content-type@~1.0.4":
3632 + "integrity" "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA=="
3633 + "resolved" "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz"
3634 + "version" "1.0.4"
3635 +
3636 +"convert-source-map@^0.3.3":
3637 + "integrity" "sha1-8dgClQr33SYxof6+BZZVDIarMZA="
3638 + "resolved" "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-0.3.5.tgz"
3639 + "version" "0.3.5"
3640 +
3641 +"convert-source-map@^1.1.0", "convert-source-map@^1.4.0", "convert-source-map@^1.6.0", "convert-source-map@^1.7.0":
3642 + "integrity" "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA=="
3643 + "resolved" "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.8.0.tgz"
3644 + "version" "1.8.0"
3645 + dependencies:
3646 + "safe-buffer" "~5.1.1"
3647 +
3648 +"convert-source-map@1.7.0":
3649 + "integrity" "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA=="
3650 + "resolved" "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.7.0.tgz"
3651 + "version" "1.7.0"
3652 + dependencies:
3653 + "safe-buffer" "~5.1.1"
3654 +
3655 +"cookie-signature@1.0.6":
3656 + "integrity" "sha1-4wOogrNCzD7oylE6eZmXNNqzriw="
3657 + "resolved" "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz"
3658 + "version" "1.0.6"
3659 +
3660 +"cookie@0.4.0":
3661 + "integrity" "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg=="
3662 + "resolved" "https://registry.yarnpkg.com/cookie/-/cookie-0.4.0.tgz"
3663 + "version" "0.4.0"
3664 +
3665 +"copy-concurrently@^1.0.0":
3666 + "integrity" "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A=="
3667 + "resolved" "https://registry.yarnpkg.com/copy-concurrently/-/copy-concurrently-1.0.5.tgz"
3668 + "version" "1.0.5"
3669 + dependencies:
3670 + "aproba" "^1.1.1"
3671 + "fs-write-stream-atomic" "^1.0.8"
3672 + "iferr" "^0.1.5"
3673 + "mkdirp" "^0.5.1"
3674 + "rimraf" "^2.5.4"
3675 + "run-queue" "^1.0.0"
3676 +
3677 +"copy-descriptor@^0.1.0":
3678 + "integrity" "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40="
3679 + "resolved" "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz"
3680 + "version" "0.1.1"
3681 +
3682 +"core-js-compat@^3.16.0", "core-js-compat@^3.16.2", "core-js-compat@^3.6.2":
3683 + "integrity" "sha512-XJMYx58zo4W0kLPmIingVZA10+7TuKrMLPt83+EzDmxFJQUMcTVVmQ+n5JP4r6Z14qSzhQBRi3NSWoeVyKKXUg=="
3684 + "resolved" "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.18.1.tgz"
3685 + "version" "3.18.1"
3686 + dependencies:
3687 + "browserslist" "^4.17.1"
3688 + "semver" "7.0.0"
3689 +
3690 +"core-js-pure@^3.16.0":
3691 + "integrity" "sha512-kmW/k8MaSuqpvA1xm2l3TVlBuvW+XBkcaOroFUpO3D4lsTGQWBTb/tBDCf/PNkkPLrwgrkQRIYNPB0CeqGJWGQ=="
3692 + "resolved" "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.18.1.tgz"
3693 + "version" "3.18.1"
3694 +
3695 +"core-js@^2.4.0":
3696 + "integrity" "sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ=="
3697 + "resolved" "https://registry.yarnpkg.com/core-js/-/core-js-2.6.12.tgz"
3698 + "version" "2.6.12"
3699 +
3700 +"core-js@^3.6.5":
3701 + "integrity" "sha512-vJlUi/7YdlCZeL6fXvWNaLUPh/id12WXj3MbkMw5uOyF0PfWPBNOCNbs53YqgrvtujLNlt9JQpruyIKkUZ+PKA=="
3702 + "resolved" "https://registry.yarnpkg.com/core-js/-/core-js-3.18.1.tgz"
3703 + "version" "3.18.1"
3704 +
3705 +"core-util-is@~1.0.0":
3706 + "integrity" "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ=="
3707 + "resolved" "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz"
3708 + "version" "1.0.3"
3709 +
3710 +"cosmiconfig@^5.0.0":
3711 + "integrity" "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA=="
3712 + "resolved" "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-5.2.1.tgz"
3713 + "version" "5.2.1"
3714 + dependencies:
3715 + "import-fresh" "^2.0.0"
3716 + "is-directory" "^0.3.1"
3717 + "js-yaml" "^3.13.1"
3718 + "parse-json" "^4.0.0"
3719 +
3720 +"cosmiconfig@^6.0.0":
3721 + "integrity" "sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg=="
3722 + "resolved" "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-6.0.0.tgz"
3723 + "version" "6.0.0"
3724 + dependencies:
3725 + "@types/parse-json" "^4.0.0"
3726 + "import-fresh" "^3.1.0"
3727 + "parse-json" "^5.0.0"
3728 + "path-type" "^4.0.0"
3729 + "yaml" "^1.7.2"
3730 +
3731 +"cosmiconfig@^7.0.0":
3732 + "integrity" "sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ=="
3733 + "resolved" "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-7.0.1.tgz"
3734 + "version" "7.0.1"
3735 + dependencies:
3736 + "@types/parse-json" "^4.0.0"
3737 + "import-fresh" "^3.2.1"
3738 + "parse-json" "^5.0.0"
3739 + "path-type" "^4.0.0"
3740 + "yaml" "^1.10.0"
3741 +
3742 +"create-ecdh@^4.0.0":
3743 + "integrity" "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A=="
3744 + "resolved" "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.4.tgz"
3745 + "version" "4.0.4"
3746 + dependencies:
3747 + "bn.js" "^4.1.0"
3748 + "elliptic" "^6.5.3"
3749 +
3750 +"create-hash@^1.1.0", "create-hash@^1.1.2", "create-hash@^1.2.0":
3751 + "integrity" "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg=="
3752 + "resolved" "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz"
3753 + "version" "1.2.0"
3754 + dependencies:
3755 + "cipher-base" "^1.0.1"
3756 + "inherits" "^2.0.1"
3757 + "md5.js" "^1.3.4"
3758 + "ripemd160" "^2.0.1"
3759 + "sha.js" "^2.4.0"
3760 +
3761 +"create-hmac@^1.1.0", "create-hmac@^1.1.4", "create-hmac@^1.1.7":
3762 + "integrity" "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg=="
3763 + "resolved" "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.7.tgz"
3764 + "version" "1.1.7"
3765 + dependencies:
3766 + "cipher-base" "^1.0.3"
3767 + "create-hash" "^1.1.0"
3768 + "inherits" "^2.0.1"
3769 + "ripemd160" "^2.0.0"
3770 + "safe-buffer" "^5.0.1"
3771 + "sha.js" "^2.4.8"
3772 +
3773 +"cross-spawn@^6.0.0":
3774 + "integrity" "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ=="
3775 + "resolved" "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz"
3776 + "version" "6.0.5"
3777 + dependencies:
3778 + "nice-try" "^1.0.4"
3779 + "path-key" "^2.0.1"
3780 + "semver" "^5.5.0"
3781 + "shebang-command" "^1.2.0"
3782 + "which" "^1.2.9"
3783 +
3784 +"cross-spawn@^7.0.0", "cross-spawn@^7.0.2", "cross-spawn@7.0.3":
3785 + "integrity" "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w=="
3786 + "resolved" "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz"
3787 + "version" "7.0.3"
3788 + dependencies:
3789 + "path-key" "^3.1.0"
3790 + "shebang-command" "^2.0.0"
3791 + "which" "^2.0.1"
3792 +
3793 +"crypto-browserify@^3.11.0":
3794 + "integrity" "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg=="
3795 + "resolved" "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz"
3796 + "version" "3.12.0"
3797 + dependencies:
3798 + "browserify-cipher" "^1.0.0"
3799 + "browserify-sign" "^4.0.0"
3800 + "create-ecdh" "^4.0.0"
3801 + "create-hash" "^1.1.0"
3802 + "create-hmac" "^1.1.0"
3803 + "diffie-hellman" "^5.0.0"
3804 + "inherits" "^2.0.1"
3805 + "pbkdf2" "^3.0.3"
3806 + "public-encrypt" "^4.0.0"
3807 + "randombytes" "^2.0.0"
3808 + "randomfill" "^1.0.3"
3809 +
3810 +"crypto-random-string@^1.0.0":
3811 + "integrity" "sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4="
3812 + "resolved" "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-1.0.0.tgz"
3813 + "version" "1.0.0"
3814 +
3815 +"css-blank-pseudo@^0.1.4":
3816 + "integrity" "sha512-LHz35Hr83dnFeipc7oqFDmsjHdljj3TQtxGGiNWSOsTLIAubSm4TEz8qCaKFpk7idaQ1GfWscF4E6mgpBysA1w=="
3817 + "resolved" "https://registry.yarnpkg.com/css-blank-pseudo/-/css-blank-pseudo-0.1.4.tgz"
3818 + "version" "0.1.4"
3819 + dependencies:
3820 + "postcss" "^7.0.5"
3821 +
3822 +"css-color-names@^0.0.4", "css-color-names@0.0.4":
3823 + "integrity" "sha1-gIrcLnnPhHOAabZGyyDsJ762KeA="
3824 + "resolved" "https://registry.yarnpkg.com/css-color-names/-/css-color-names-0.0.4.tgz"
3825 + "version" "0.0.4"
3826 +
3827 +"css-declaration-sorter@^4.0.1":
3828 + "integrity" "sha512-BcxQSKTSEEQUftYpBVnsH4SF05NTuBokb19/sBt6asXGKZ/6VP7PLG1CBCkFDYOnhXhPh0jMhO6xZ71oYHXHBA=="
3829 + "resolved" "https://registry.yarnpkg.com/css-declaration-sorter/-/css-declaration-sorter-4.0.1.tgz"
3830 + "version" "4.0.1"
3831 + dependencies:
3832 + "postcss" "^7.0.1"
3833 + "timsort" "^0.3.0"
3834 +
3835 +"css-has-pseudo@^0.10.0":
3836 + "integrity" "sha512-Z8hnfsZu4o/kt+AuFzeGpLVhFOGO9mluyHBaA2bA8aCGTwah5sT3WV/fTHH8UNZUytOIImuGPrl/prlb4oX4qQ=="
3837 + "resolved" "https://registry.yarnpkg.com/css-has-pseudo/-/css-has-pseudo-0.10.0.tgz"
3838 + "version" "0.10.0"
3839 + dependencies:
3840 + "postcss" "^7.0.6"
3841 + "postcss-selector-parser" "^5.0.0-rc.4"
3842 +
3843 +"css-loader@4.3.0":
3844 + "integrity" "sha512-rdezjCjScIrsL8BSYszgT4s476IcNKt6yX69t0pHjJVnPUTDpn4WfIpDQTN3wCJvUvfsz/mFjuGOekf3PY3NUg=="
3845 + "resolved" "https://registry.yarnpkg.com/css-loader/-/css-loader-4.3.0.tgz"
3846 + "version" "4.3.0"
3847 + dependencies:
3848 + "camelcase" "^6.0.0"
3849 + "cssesc" "^3.0.0"
3850 + "icss-utils" "^4.1.1"
3851 + "loader-utils" "^2.0.0"
3852 + "postcss" "^7.0.32"
3853 + "postcss-modules-extract-imports" "^2.0.0"
3854 + "postcss-modules-local-by-default" "^3.0.3"
3855 + "postcss-modules-scope" "^2.2.0"
3856 + "postcss-modules-values" "^3.0.0"
3857 + "postcss-value-parser" "^4.1.0"
3858 + "schema-utils" "^2.7.1"
3859 + "semver" "^7.3.2"
3860 +
3861 +"css-prefers-color-scheme@^3.1.1":
3862 + "integrity" "sha512-MTu6+tMs9S3EUqzmqLXEcgNRbNkkD/TGFvowpeoWJn5Vfq7FMgsmRQs9X5NXAURiOBmOxm/lLjsDNXDE6k9bhg=="
3863 + "resolved" "https://registry.yarnpkg.com/css-prefers-color-scheme/-/css-prefers-color-scheme-3.1.1.tgz"
3864 + "version" "3.1.1"
3865 + dependencies:
3866 + "postcss" "^7.0.5"
3867 +
3868 +"css-select-base-adapter@^0.1.1":
3869 + "integrity" "sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w=="
3870 + "resolved" "https://registry.yarnpkg.com/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz"
3871 + "version" "0.1.1"
3872 +
3873 +"css-select@^2.0.0":
3874 + "integrity" "sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ=="
3875 + "resolved" "https://registry.yarnpkg.com/css-select/-/css-select-2.1.0.tgz"
3876 + "version" "2.1.0"
3877 + dependencies:
3878 + "boolbase" "^1.0.0"
3879 + "css-what" "^3.2.1"
3880 + "domutils" "^1.7.0"
3881 + "nth-check" "^1.0.2"
3882 +
3883 +"css-select@^4.1.3":
3884 + "integrity" "sha512-gT3wBNd9Nj49rAbmtFHj1cljIAOLYSX1nZ8CB7TBO3INYckygm5B7LISU/szY//YmdiSLbJvDLOx9VnMVpMBxA=="
3885 + "resolved" "https://registry.yarnpkg.com/css-select/-/css-select-4.1.3.tgz"
3886 + "version" "4.1.3"
3887 + dependencies:
3888 + "boolbase" "^1.0.0"
3889 + "css-what" "^5.0.0"
3890 + "domhandler" "^4.2.0"
3891 + "domutils" "^2.6.0"
3892 + "nth-check" "^2.0.0"
3893 +
3894 +"css-tree@^1.1.2":
3895 + "integrity" "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q=="
3896 + "resolved" "https://registry.yarnpkg.com/css-tree/-/css-tree-1.1.3.tgz"
3897 + "version" "1.1.3"
3898 + dependencies:
3899 + "mdn-data" "2.0.14"
3900 + "source-map" "^0.6.1"
3901 +
3902 +"css-tree@1.0.0-alpha.37":
3903 + "integrity" "sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg=="
3904 + "resolved" "https://registry.yarnpkg.com/css-tree/-/css-tree-1.0.0-alpha.37.tgz"
3905 + "version" "1.0.0-alpha.37"
3906 + dependencies:
3907 + "mdn-data" "2.0.4"
3908 + "source-map" "^0.6.1"
3909 +
3910 +"css-what@^3.2.1":
3911 + "integrity" "sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ=="
3912 + "resolved" "https://registry.yarnpkg.com/css-what/-/css-what-3.4.2.tgz"
3913 + "version" "3.4.2"
3914 +
3915 +"css-what@^5.0.0":
3916 + "integrity" "sha512-FYDTSHb/7KXsWICVsxdmiExPjCfRC4qRFBdVwv7Ax9hMnvMmEjP9RfxTEZ3qPZGmADDn2vAKSo9UcN1jKVYscg=="
3917 + "resolved" "https://registry.yarnpkg.com/css-what/-/css-what-5.0.1.tgz"
3918 + "version" "5.0.1"
3919 +
3920 +"css@^2.0.0":
3921 + "integrity" "sha512-oUnjmWpy0niI3x/mPL8dVEI1l7MnG3+HHyRPHf+YFSbK+svOhXpmSOcDURUh2aOCgl2grzrOPt1nHLuCVFULLw=="
3922 + "resolved" "https://registry.yarnpkg.com/css/-/css-2.2.4.tgz"
3923 + "version" "2.2.4"
3924 + dependencies:
3925 + "inherits" "^2.0.3"
3926 + "source-map" "^0.6.1"
3927 + "source-map-resolve" "^0.5.2"
3928 + "urix" "^0.1.0"
3929 +
3930 +"cssdb@^4.4.0":
3931 + "integrity" "sha512-LsTAR1JPEM9TpGhl/0p3nQecC2LJ0kD8X5YARu1hk/9I1gril5vDtMZyNxcEpxxDj34YNck/ucjuoUd66K03oQ=="
3932 + "resolved" "https://registry.yarnpkg.com/cssdb/-/cssdb-4.4.0.tgz"
3933 + "version" "4.4.0"
3934 +
3935 +"cssesc@^2.0.0":
3936 + "integrity" "sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg=="
3937 + "resolved" "https://registry.yarnpkg.com/cssesc/-/cssesc-2.0.0.tgz"
3938 + "version" "2.0.0"
3939 +
3940 +"cssesc@^3.0.0":
3941 + "integrity" "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg=="
3942 + "resolved" "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz"
3943 + "version" "3.0.0"
3944 +
3945 +"cssnano-preset-default@^4.0.8":
3946 + "integrity" "sha512-LdAyHuq+VRyeVREFmuxUZR1TXjQm8QQU/ktoo/x7bz+SdOge1YKc5eMN6pRW7YWBmyq59CqYba1dJ5cUukEjLQ=="
3947 + "resolved" "https://registry.yarnpkg.com/cssnano-preset-default/-/cssnano-preset-default-4.0.8.tgz"
3948 + "version" "4.0.8"
3949 + dependencies:
3950 + "css-declaration-sorter" "^4.0.1"
3951 + "cssnano-util-raw-cache" "^4.0.1"
3952 + "postcss" "^7.0.0"
3953 + "postcss-calc" "^7.0.1"
3954 + "postcss-colormin" "^4.0.3"
3955 + "postcss-convert-values" "^4.0.1"
3956 + "postcss-discard-comments" "^4.0.2"
3957 + "postcss-discard-duplicates" "^4.0.2"
3958 + "postcss-discard-empty" "^4.0.1"
3959 + "postcss-discard-overridden" "^4.0.1"
3960 + "postcss-merge-longhand" "^4.0.11"
3961 + "postcss-merge-rules" "^4.0.3"
3962 + "postcss-minify-font-values" "^4.0.2"
3963 + "postcss-minify-gradients" "^4.0.2"
3964 + "postcss-minify-params" "^4.0.2"
3965 + "postcss-minify-selectors" "^4.0.2"
3966 + "postcss-normalize-charset" "^4.0.1"
3967 + "postcss-normalize-display-values" "^4.0.2"
3968 + "postcss-normalize-positions" "^4.0.2"
3969 + "postcss-normalize-repeat-style" "^4.0.2"
3970 + "postcss-normalize-string" "^4.0.2"
3971 + "postcss-normalize-timing-functions" "^4.0.2"
3972 + "postcss-normalize-unicode" "^4.0.1"
3973 + "postcss-normalize-url" "^4.0.1"
3974 + "postcss-normalize-whitespace" "^4.0.2"
3975 + "postcss-ordered-values" "^4.1.2"
3976 + "postcss-reduce-initial" "^4.0.3"
3977 + "postcss-reduce-transforms" "^4.0.2"
3978 + "postcss-svgo" "^4.0.3"
3979 + "postcss-unique-selectors" "^4.0.1"
3980 +
3981 +"cssnano-util-get-arguments@^4.0.0":
3982 + "integrity" "sha1-7ToIKZ8h11dBsg87gfGU7UnMFQ8="
3983 + "resolved" "https://registry.yarnpkg.com/cssnano-util-get-arguments/-/cssnano-util-get-arguments-4.0.0.tgz"
3984 + "version" "4.0.0"
3985 +
3986 +"cssnano-util-get-match@^4.0.0":
3987 + "integrity" "sha1-wOTKB/U4a7F+xeUiULT1lhNlFW0="
3988 + "resolved" "https://registry.yarnpkg.com/cssnano-util-get-match/-/cssnano-util-get-match-4.0.0.tgz"
3989 + "version" "4.0.0"
3990 +
3991 +"cssnano-util-raw-cache@^4.0.1":
3992 + "integrity" "sha512-qLuYtWK2b2Dy55I8ZX3ky1Z16WYsx544Q0UWViebptpwn/xDBmog2TLg4f+DBMg1rJ6JDWtn96WHbOKDWt1WQA=="
3993 + "resolved" "https://registry.yarnpkg.com/cssnano-util-raw-cache/-/cssnano-util-raw-cache-4.0.1.tgz"
3994 + "version" "4.0.1"
3995 + dependencies:
3996 + "postcss" "^7.0.0"
3997 +
3998 +"cssnano-util-same-parent@^4.0.0":
3999 + "integrity" "sha512-WcKx5OY+KoSIAxBW6UBBRay1U6vkYheCdjyVNDm85zt5K9mHoGOfsOsqIszfAqrQQFIIKgjh2+FDgIj/zsl21Q=="
4000 + "resolved" "https://registry.yarnpkg.com/cssnano-util-same-parent/-/cssnano-util-same-parent-4.0.1.tgz"
4001 + "version" "4.0.1"
4002 +
4003 +"cssnano@^4.1.10":
4004 + "integrity" "sha512-6gZm2htn7xIPJOHY824ERgj8cNPgPxyCSnkXc4v7YvNW+TdVfzgngHcEhy/8D11kUWRUMbke+tC+AUcUsnMz2g=="
4005 + "resolved" "https://registry.yarnpkg.com/cssnano/-/cssnano-4.1.11.tgz"
4006 + "version" "4.1.11"
4007 + dependencies:
4008 + "cosmiconfig" "^5.0.0"
4009 + "cssnano-preset-default" "^4.0.8"
4010 + "is-resolvable" "^1.0.0"
4011 + "postcss" "^7.0.0"
4012 +
4013 +"csso@^4.0.2":
4014 + "integrity" "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA=="
4015 + "resolved" "https://registry.yarnpkg.com/csso/-/csso-4.2.0.tgz"
4016 + "version" "4.2.0"
4017 + dependencies:
4018 + "css-tree" "^1.1.2"
4019 +
4020 +"cssom@^0.4.4":
4021 + "integrity" "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw=="
4022 + "resolved" "https://registry.yarnpkg.com/cssom/-/cssom-0.4.4.tgz"
4023 + "version" "0.4.4"
4024 +
4025 +"cssom@~0.3.6":
4026 + "integrity" "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg=="
4027 + "resolved" "https://registry.yarnpkg.com/cssom/-/cssom-0.3.8.tgz"
4028 + "version" "0.3.8"
4029 +
4030 +"cssstyle@^2.3.0":
4031 + "integrity" "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A=="
4032 + "resolved" "https://registry.yarnpkg.com/cssstyle/-/cssstyle-2.3.0.tgz"
4033 + "version" "2.3.0"
4034 + dependencies:
4035 + "cssom" "~0.3.6"
4036 +
4037 +"cyclist@^1.0.1":
4038 + "integrity" "sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk="
4039 + "resolved" "https://registry.yarnpkg.com/cyclist/-/cyclist-1.0.1.tgz"
4040 + "version" "1.0.1"
4041 +
4042 +"d@^1.0.1", "d@1":
4043 + "integrity" "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA=="
4044 + "resolved" "https://registry.yarnpkg.com/d/-/d-1.0.1.tgz"
4045 + "version" "1.0.1"
4046 + dependencies:
4047 + "es5-ext" "^0.10.50"
4048 + "type" "^1.0.1"
4049 +
4050 +"damerau-levenshtein@^1.0.6":
4051 + "integrity" "sha512-VvdQIPGdWP0SqFXghj79Wf/5LArmreyMsGLa6FG6iC4t3j7j5s71TrwWmT/4akbDQIqjfACkLZmjXhA7g2oUZw=="
4052 + "resolved" "https://registry.yarnpkg.com/damerau-levenshtein/-/damerau-levenshtein-1.0.7.tgz"
4053 + "version" "1.0.7"
4054 +
4055 +"data-urls@^2.0.0":
4056 + "integrity" "sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ=="
4057 + "resolved" "https://registry.yarnpkg.com/data-urls/-/data-urls-2.0.0.tgz"
4058 + "version" "2.0.0"
4059 + dependencies:
4060 + "abab" "^2.0.3"
4061 + "whatwg-mimetype" "^2.3.0"
4062 + "whatwg-url" "^8.0.0"
4063 +
4064 +"debug@^2.2.0":
4065 + "integrity" "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA=="
4066 + "resolved" "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz"
4067 + "version" "2.6.9"
4068 + dependencies:
4069 + "ms" "2.0.0"
4070 +
4071 +"debug@^2.3.3":
4072 + "integrity" "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA=="
4073 + "resolved" "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz"
4074 + "version" "2.6.9"
4075 + dependencies:
4076 + "ms" "2.0.0"
4077 +
4078 +"debug@^2.6.0":
4079 + "integrity" "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA=="
4080 + "resolved" "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz"
4081 + "version" "2.6.9"
4082 + dependencies:
4083 + "ms" "2.0.0"
4084 +
4085 +"debug@^2.6.9":
4086 + "integrity" "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA=="
4087 + "resolved" "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz"
4088 + "version" "2.6.9"
4089 + dependencies:
4090 + "ms" "2.0.0"
4091 +
4092 +"debug@^3.1.1":
4093 + "integrity" "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ=="
4094 + "resolved" "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz"
4095 + "version" "3.2.7"
4096 + dependencies:
4097 + "ms" "^2.1.1"
4098 +
4099 +"debug@^3.2.5":
4100 + "integrity" "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ=="
4101 + "resolved" "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz"
4102 + "version" "3.2.7"
4103 + dependencies:
4104 + "ms" "^2.1.1"
4105 +
4106 +"debug@^3.2.7":
4107 + "integrity" "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ=="
4108 + "resolved" "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz"
4109 + "version" "3.2.7"
4110 + dependencies:
4111 + "ms" "^2.1.1"
4112 +
4113 +"debug@^4.0.1", "debug@^4.1.0", "debug@^4.1.1", "debug@^4.3.1", "debug@4":
4114 + "integrity" "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw=="
4115 + "resolved" "https://registry.yarnpkg.com/debug/-/debug-4.3.2.tgz"
4116 + "version" "4.3.2"
4117 + dependencies:
4118 + "ms" "2.1.2"
4119 +
4120 +"debug@2.6.9":
4121 + "integrity" "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA=="
4122 + "resolved" "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz"
4123 + "version" "2.6.9"
4124 + dependencies:
4125 + "ms" "2.0.0"
4126 +
4127 +"decamelize@^1.2.0":
4128 + "integrity" "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA="
4129 + "resolved" "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz"
4130 + "version" "1.2.0"
4131 +
4132 +"decimal.js@^10.2.1":
4133 + "integrity" "sha512-V0pfhfr8suzyPGOx3nmq4aHqabehUZn6Ch9kyFpV79TGDTWFmHqUqXdabR7QHqxzrYolF4+tVmJhUG4OURg5dQ=="
4134 + "resolved" "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.3.1.tgz"
4135 + "version" "10.3.1"
4136 +
4137 +"decode-uri-component@^0.2.0":
4138 + "integrity" "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU="
4139 + "resolved" "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz"
4140 + "version" "0.2.0"
4141 +
4142 +"dedent@^0.7.0":
4143 + "integrity" "sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw="
4144 + "resolved" "https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz"
4145 + "version" "0.7.0"
4146 +
4147 +"deep-equal@^1.0.1":
4148 + "integrity" "sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g=="
4149 + "resolved" "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.1.1.tgz"
4150 + "version" "1.1.1"
4151 + dependencies:
4152 + "is-arguments" "^1.0.4"
4153 + "is-date-object" "^1.0.1"
4154 + "is-regex" "^1.0.4"
4155 + "object-is" "^1.0.1"
4156 + "object-keys" "^1.1.1"
4157 + "regexp.prototype.flags" "^1.2.0"
4158 +
4159 +"deep-is@^0.1.3", "deep-is@~0.1.3":
4160 + "integrity" "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ=="
4161 + "resolved" "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz"
4162 + "version" "0.1.4"
4163 +
4164 +"deepmerge@^4.2.2":
4165 + "integrity" "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg=="
4166 + "resolved" "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.2.2.tgz"
4167 + "version" "4.2.2"
4168 +
4169 +"default-gateway@^4.2.0":
4170 + "integrity" "sha512-h6sMrVB1VMWVrW13mSc6ia/DwYYw5MN6+exNu1OaJeFac5aSAvwM7lZ0NVfTABuSkQelr4h5oebg3KB1XPdjgA=="
4171 + "resolved" "https://registry.yarnpkg.com/default-gateway/-/default-gateway-4.2.0.tgz"
4172 + "version" "4.2.0"
4173 + dependencies:
4174 + "execa" "^1.0.0"
4175 + "ip-regex" "^2.1.0"
4176 +
4177 +"define-properties@^1.1.2", "define-properties@^1.1.3":
4178 + "integrity" "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ=="
4179 + "resolved" "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz"
4180 + "version" "1.1.3"
4181 + dependencies:
4182 + "object-keys" "^1.0.12"
4183 +
4184 +"define-property@^0.2.5":
4185 + "integrity" "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY="
4186 + "resolved" "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz"
4187 + "version" "0.2.5"
4188 + dependencies:
4189 + "is-descriptor" "^0.1.0"
4190 +
4191 +"define-property@^1.0.0":
4192 + "integrity" "sha1-dp66rz9KY6rTr56NMEybvnm/sOY="
4193 + "resolved" "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz"
4194 + "version" "1.0.0"
4195 + dependencies:
4196 + "is-descriptor" "^1.0.0"
4197 +
4198 +"define-property@^2.0.2":
4199 + "integrity" "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ=="
4200 + "resolved" "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz"
4201 + "version" "2.0.2"
4202 + dependencies:
4203 + "is-descriptor" "^1.0.2"
4204 + "isobject" "^3.0.1"
4205 +
4206 +"del@^4.1.1":
4207 + "integrity" "sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ=="
4208 + "resolved" "https://registry.yarnpkg.com/del/-/del-4.1.1.tgz"
4209 + "version" "4.1.1"
4210 + dependencies:
4211 + "@types/glob" "^7.1.1"
4212 + "globby" "^6.1.0"
4213 + "is-path-cwd" "^2.0.0"
4214 + "is-path-in-cwd" "^2.0.0"
4215 + "p-map" "^2.0.0"
4216 + "pify" "^4.0.1"
4217 + "rimraf" "^2.6.3"
4218 +
4219 +"delayed-stream@~1.0.0":
4220 + "integrity" "sha1-3zrhmayt+31ECqrgsp4icrJOxhk="
4221 + "resolved" "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz"
4222 + "version" "1.0.0"
4223 +
4224 +"depd@~1.1.2":
4225 + "integrity" "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak="
4226 + "resolved" "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz"
4227 + "version" "1.1.2"
4228 +
4229 +"des.js@^1.0.0":
4230 + "integrity" "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA=="
4231 + "resolved" "https://registry.yarnpkg.com/des.js/-/des.js-1.0.1.tgz"
4232 + "version" "1.0.1"
4233 + dependencies:
4234 + "inherits" "^2.0.1"
4235 + "minimalistic-assert" "^1.0.0"
4236 +
4237 +"destroy@~1.0.4":
4238 + "integrity" "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA="
4239 + "resolved" "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz"
4240 + "version" "1.0.4"
4241 +
4242 +"detect-newline@^3.0.0":
4243 + "integrity" "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA=="
4244 + "resolved" "https://registry.yarnpkg.com/detect-newline/-/detect-newline-3.1.0.tgz"
4245 + "version" "3.1.0"
4246 +
4247 +"detect-node@^2.0.4":
4248 + "integrity" "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g=="
4249 + "resolved" "https://registry.yarnpkg.com/detect-node/-/detect-node-2.1.0.tgz"
4250 + "version" "2.1.0"
4251 +
4252 +"detect-port-alt@1.1.6":
4253 + "integrity" "sha512-5tQykt+LqfJFBEYaDITx7S7cR7mJ/zQmLXZ2qt5w04ainYZw6tBf9dBunMjVeVOdYVRUzUOE4HkY5J7+uttb5Q=="
4254 + "resolved" "https://registry.yarnpkg.com/detect-port-alt/-/detect-port-alt-1.1.6.tgz"
4255 + "version" "1.1.6"
4256 + dependencies:
4257 + "address" "^1.0.1"
4258 + "debug" "^2.6.0"
4259 +
4260 +"diff-sequences@^26.6.2":
4261 + "integrity" "sha512-Mv/TDa3nZ9sbc5soK+OoA74BsS3mL37yixCvUAQkiuA4Wz6YtwP/K47n2rv2ovzHZvoiQeA5FTQOschKkEwB0Q=="
4262 + "resolved" "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-26.6.2.tgz"
4263 + "version" "26.6.2"
4264 +
4265 +"diffie-hellman@^5.0.0":
4266 + "integrity" "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg=="
4267 + "resolved" "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.3.tgz"
4268 + "version" "5.0.3"
4269 + dependencies:
4270 + "bn.js" "^4.1.0"
4271 + "miller-rabin" "^4.0.0"
4272 + "randombytes" "^2.0.0"
4273 +
4274 +"dir-glob@^3.0.1":
4275 + "integrity" "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA=="
4276 + "resolved" "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz"
4277 + "version" "3.0.1"
4278 + dependencies:
4279 + "path-type" "^4.0.0"
4280 +
4281 +"dns-equal@^1.0.0":
4282 + "integrity" "sha1-s55/HabrCnW6nBcySzR1PEfgZU0="
4283 + "resolved" "https://registry.yarnpkg.com/dns-equal/-/dns-equal-1.0.0.tgz"
4284 + "version" "1.0.0"
4285 +
4286 +"dns-packet@^1.3.1":
4287 + "integrity" "sha512-BQ6F4vycLXBvdrJZ6S3gZewt6rcrks9KBgM9vrhW+knGRqc8uEdT7fuCwloc7nny5xNoMJ17HGH0R/6fpo8ECA=="
4288 + "resolved" "https://registry.yarnpkg.com/dns-packet/-/dns-packet-1.3.4.tgz"
4289 + "version" "1.3.4"
4290 + dependencies:
4291 + "ip" "^1.1.0"
4292 + "safe-buffer" "^5.0.1"
4293 +
4294 +"dns-txt@^2.0.2":
4295 + "integrity" "sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY="
4296 + "resolved" "https://registry.yarnpkg.com/dns-txt/-/dns-txt-2.0.2.tgz"
4297 + "version" "2.0.2"
4298 + dependencies:
4299 + "buffer-indexof" "^1.0.0"
4300 +
4301 +"doctrine@^2.1.0":
4302 + "integrity" "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw=="
4303 + "resolved" "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz"
4304 + "version" "2.1.0"
4305 + dependencies:
4306 + "esutils" "^2.0.2"
4307 +
4308 +"doctrine@^3.0.0":
4309 + "integrity" "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w=="
4310 + "resolved" "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz"
4311 + "version" "3.0.0"
4312 + dependencies:
4313 + "esutils" "^2.0.2"
4314 +
4315 +"dom-converter@^0.2.0":
4316 + "integrity" "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA=="
4317 + "resolved" "https://registry.yarnpkg.com/dom-converter/-/dom-converter-0.2.0.tgz"
4318 + "version" "0.2.0"
4319 + dependencies:
4320 + "utila" "~0.4"
4321 +
4322 +"dom-serializer@^1.0.1":
4323 + "integrity" "sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig=="
4324 + "resolved" "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-1.3.2.tgz"
4325 + "version" "1.3.2"
4326 + dependencies:
4327 + "domelementtype" "^2.0.1"
4328 + "domhandler" "^4.2.0"
4329 + "entities" "^2.0.0"
4330 +
4331 +"dom-serializer@0":
4332 + "integrity" "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g=="
4333 + "resolved" "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.2.2.tgz"
4334 + "version" "0.2.2"
4335 + dependencies:
4336 + "domelementtype" "^2.0.1"
4337 + "entities" "^2.0.0"
4338 +
4339 +"domain-browser@^1.1.1":
4340 + "integrity" "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA=="
4341 + "resolved" "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.2.0.tgz"
4342 + "version" "1.2.0"
4343 +
4344 +"domelementtype@^2.0.1", "domelementtype@^2.2.0":
4345 + "integrity" "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A=="
4346 + "resolved" "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.2.0.tgz"
4347 + "version" "2.2.0"
4348 +
4349 +"domelementtype@1":
4350 + "integrity" "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w=="
4351 + "resolved" "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.1.tgz"
4352 + "version" "1.3.1"
4353 +
4354 +"domexception@^2.0.1":
4355 + "integrity" "sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg=="
4356 + "resolved" "https://registry.yarnpkg.com/domexception/-/domexception-2.0.1.tgz"
4357 + "version" "2.0.1"
4358 + dependencies:
4359 + "webidl-conversions" "^5.0.0"
4360 +
4361 +"domhandler@^4.0.0", "domhandler@^4.2.0":
4362 + "integrity" "sha512-PzE9aBMsdZO8TK4BnuJwH0QT41wgMbRzuZrHUcpYncEjmQazq8QEaBWgLG7ZyC/DAZKEgglpIA6j4Qn/HmxS3w=="
4363 + "resolved" "https://registry.yarnpkg.com/domhandler/-/domhandler-4.2.2.tgz"
4364 + "version" "4.2.2"
4365 + dependencies:
4366 + "domelementtype" "^2.2.0"
4367 +
4368 +"domutils@^1.7.0":
4369 + "integrity" "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg=="
4370 + "resolved" "https://registry.yarnpkg.com/domutils/-/domutils-1.7.0.tgz"
4371 + "version" "1.7.0"
4372 + dependencies:
4373 + "dom-serializer" "0"
4374 + "domelementtype" "1"
4375 +
4376 +"domutils@^2.5.2", "domutils@^2.6.0":
4377 + "integrity" "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A=="
4378 + "resolved" "https://registry.yarnpkg.com/domutils/-/domutils-2.8.0.tgz"
4379 + "version" "2.8.0"
4380 + dependencies:
4381 + "dom-serializer" "^1.0.1"
4382 + "domelementtype" "^2.2.0"
4383 + "domhandler" "^4.2.0"
4384 +
4385 +"dot-case@^3.0.4":
4386 + "integrity" "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w=="
4387 + "resolved" "https://registry.yarnpkg.com/dot-case/-/dot-case-3.0.4.tgz"
4388 + "version" "3.0.4"
4389 + dependencies:
4390 + "no-case" "^3.0.4"
4391 + "tslib" "^2.0.3"
4392 +
4393 +"dot-prop@^5.2.0":
4394 + "integrity" "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q=="
4395 + "resolved" "https://registry.yarnpkg.com/dot-prop/-/dot-prop-5.3.0.tgz"
4396 + "version" "5.3.0"
4397 + dependencies:
4398 + "is-obj" "^2.0.0"
4399 +
4400 +"dotenv-expand@5.1.0":
4401 + "integrity" "sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA=="
4402 + "resolved" "https://registry.yarnpkg.com/dotenv-expand/-/dotenv-expand-5.1.0.tgz"
4403 + "version" "5.1.0"
4404 +
4405 +"dotenv@8.2.0":
4406 + "integrity" "sha512-8sJ78ElpbDJBHNeBzUbUVLsqKdccaa/BXF1uPTw3GrvQTBgrQrtObr2mUrE38vzYd8cEv+m/JBfDLioYcfXoaw=="
4407 + "resolved" "https://registry.yarnpkg.com/dotenv/-/dotenv-8.2.0.tgz"
4408 + "version" "8.2.0"
4409 +
4410 +"duplexer@^0.1.1":
4411 + "integrity" "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg=="
4412 + "resolved" "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.2.tgz"
4413 + "version" "0.1.2"
4414 +
4415 +"duplexify@^3.4.2", "duplexify@^3.6.0":
4416 + "integrity" "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g=="
4417 + "resolved" "https://registry.yarnpkg.com/duplexify/-/duplexify-3.7.1.tgz"
4418 + "version" "3.7.1"
4419 + dependencies:
4420 + "end-of-stream" "^1.0.0"
4421 + "inherits" "^2.0.1"
4422 + "readable-stream" "^2.0.0"
4423 + "stream-shift" "^1.0.0"
4424 +
4425 +"ee-first@1.1.1":
4426 + "integrity" "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0="
4427 + "resolved" "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz"
4428 + "version" "1.1.1"
4429 +
4430 +"ejs@^2.6.1":
4431 + "integrity" "sha512-7vmuyh5+kuUyJKePhQfRQBhXV5Ce+RnaeeQArKu1EAMpL3WbgMt5WG6uQZpEVvYSSsxMXRKOewtDk9RaTKXRlA=="
4432 + "resolved" "https://registry.yarnpkg.com/ejs/-/ejs-2.7.4.tgz"
4433 + "version" "2.7.4"
4434 +
4435 +"electron-to-chromium@^1.3.564", "electron-to-chromium@^1.3.846":
4436 + "integrity" "sha512-W4U8n+U8I5/SUaFcqZgbKRmYZwcyEIQVBDf+j5QQK6xChjXnQD+wj248eGR9X4u+dDmDR//8vIfbu4PrdBBIoQ=="
4437 + "resolved" "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.853.tgz"
4438 + "version" "1.3.853"
4439 +
4440 +"elliptic@^6.5.3":
4441 + "integrity" "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ=="
4442 + "resolved" "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.4.tgz"
4443 + "version" "6.5.4"
4444 + dependencies:
4445 + "bn.js" "^4.11.9"
4446 + "brorand" "^1.1.0"
4447 + "hash.js" "^1.0.0"
4448 + "hmac-drbg" "^1.0.1"
4449 + "inherits" "^2.0.4"
4450 + "minimalistic-assert" "^1.0.1"
4451 + "minimalistic-crypto-utils" "^1.0.1"
4452 +
4453 +"emittery@^0.7.1":
4454 + "integrity" "sha512-A8OG5SR/ij3SsJdWDJdkkSYUjQdCUx6APQXem0SaEePBSRg4eymGYwBkKo1Y6DU+af/Jn2dBQqDBvjnr9Vi8nQ=="
4455 + "resolved" "https://registry.yarnpkg.com/emittery/-/emittery-0.7.2.tgz"
4456 + "version" "0.7.2"
4457 +
4458 +"emoji-regex@^7.0.1":
4459 + "integrity" "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA=="
4460 + "resolved" "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz"
4461 + "version" "7.0.3"
4462 +
4463 +"emoji-regex@^8.0.0":
4464 + "integrity" "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="
4465 + "resolved" "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz"
4466 + "version" "8.0.0"
4467 +
4468 +"emoji-regex@^9.0.0":
4469 + "integrity" "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg=="
4470 + "resolved" "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz"
4471 + "version" "9.2.2"
4472 +
4473 +"emojis-list@^2.0.0":
4474 + "integrity" "sha1-TapNnbAPmBmIDHn6RXrlsJof04k="
4475 + "resolved" "https://registry.yarnpkg.com/emojis-list/-/emojis-list-2.1.0.tgz"
4476 + "version" "2.1.0"
4477 +
4478 +"emojis-list@^3.0.0":
4479 + "integrity" "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q=="
4480 + "resolved" "https://registry.yarnpkg.com/emojis-list/-/emojis-list-3.0.0.tgz"
4481 + "version" "3.0.0"
4482 +
4483 +"encodeurl@~1.0.2":
4484 + "integrity" "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k="
4485 + "resolved" "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz"
4486 + "version" "1.0.2"
4487 +
4488 +"end-of-stream@^1.0.0", "end-of-stream@^1.1.0":
4489 + "integrity" "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q=="
4490 + "resolved" "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz"
4491 + "version" "1.4.4"
4492 + dependencies:
4493 + "once" "^1.4.0"
4494 +
4495 +"enhanced-resolve@^4.3.0":
4496 + "integrity" "sha512-Nv9m36S/vxpsI+Hc4/ZGRs0n9mXqSWGGq49zxb/cJfPAQMbUtttJAlNPS4AQzaBdw/pKskw5bMbekT/Y7W/Wlg=="
4497 + "resolved" "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-4.5.0.tgz"
4498 + "version" "4.5.0"
4499 + dependencies:
4500 + "graceful-fs" "^4.1.2"
4501 + "memory-fs" "^0.5.0"
4502 + "tapable" "^1.0.0"
4503 +
4504 +"enquirer@^2.3.5":
4505 + "integrity" "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg=="
4506 + "resolved" "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.6.tgz"
4507 + "version" "2.3.6"
4508 + dependencies:
4509 + "ansi-colors" "^4.1.1"
4510 +
4511 +"entities@^2.0.0":
4512 + "integrity" "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A=="
4513 + "resolved" "https://registry.yarnpkg.com/entities/-/entities-2.2.0.tgz"
4514 + "version" "2.2.0"
4515 +
4516 +"errno@^0.1.3", "errno@~0.1.7":
4517 + "integrity" "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A=="
4518 + "resolved" "https://registry.yarnpkg.com/errno/-/errno-0.1.8.tgz"
4519 + "version" "0.1.8"
4520 + dependencies:
4521 + "prr" "~1.0.1"
4522 +
4523 +"error-ex@^1.3.1":
4524 + "integrity" "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g=="
4525 + "resolved" "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz"
4526 + "version" "1.3.2"
4527 + dependencies:
4528 + "is-arrayish" "^0.2.1"
4529 +
4530 +"error-stack-parser@^2.0.6":
4531 + "integrity" "sha512-d51brTeqC+BHlwF0BhPtcYgF5nlzf9ZZ0ZIUQNZpc9ZB9qw5IJ2diTrBY9jlCJkTLITYPjmiX6OWCwH+fuyNgQ=="
4532 + "resolved" "https://registry.yarnpkg.com/error-stack-parser/-/error-stack-parser-2.0.6.tgz"
4533 + "version" "2.0.6"
4534 + dependencies:
4535 + "stackframe" "^1.1.1"
4536 +
4537 +"es-abstract@^1.17.2", "es-abstract@^1.18.0-next.1", "es-abstract@^1.18.0-next.2", "es-abstract@^1.18.1", "es-abstract@^1.18.2":
4538 + "integrity" "sha512-uFG1gyVX91tZIiDWNmPsL8XNpiCk/6tkB7MZphoSJflS4w+KgWyQ2gjCVDnsPxFAo9WjRXG3eqONNYdfbJjAtw=="
4539 + "resolved" "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.18.7.tgz"
4540 + "version" "1.18.7"
4541 + dependencies:
4542 + "call-bind" "^1.0.2"
4543 + "es-to-primitive" "^1.2.1"
4544 + "function-bind" "^1.1.1"
4545 + "get-intrinsic" "^1.1.1"
4546 + "get-symbol-description" "^1.0.0"
4547 + "has" "^1.0.3"
4548 + "has-symbols" "^1.0.2"
4549 + "internal-slot" "^1.0.3"
4550 + "is-callable" "^1.2.4"
4551 + "is-negative-zero" "^2.0.1"
4552 + "is-regex" "^1.1.4"
4553 + "is-string" "^1.0.7"
4554 + "object-inspect" "^1.11.0"
4555 + "object-keys" "^1.1.1"
4556 + "object.assign" "^4.1.2"
4557 + "string.prototype.trimend" "^1.0.4"
4558 + "string.prototype.trimstart" "^1.0.4"
4559 + "unbox-primitive" "^1.0.1"
4560 +
4561 +"es-to-primitive@^1.2.1":
4562 + "integrity" "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA=="
4563 + "resolved" "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz"
4564 + "version" "1.2.1"
4565 + dependencies:
4566 + "is-callable" "^1.1.4"
4567 + "is-date-object" "^1.0.1"
4568 + "is-symbol" "^1.0.2"
4569 +
4570 +"es5-ext@^0.10.35", "es5-ext@^0.10.50":
4571 + "integrity" "sha512-Xs2Stw6NiNHWypzRTY1MtaG/uJlwCk8kH81920ma8mvN8Xq1gsfhZvpkImLQArw8AHnv8MT2I45J3c0R8slE+Q=="
4572 + "resolved" "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.53.tgz"
4573 + "version" "0.10.53"
4574 + dependencies:
4575 + "es6-iterator" "~2.0.3"
4576 + "es6-symbol" "~3.1.3"
4577 + "next-tick" "~1.0.0"
4578 +
4579 +"es6-iterator@~2.0.3", "es6-iterator@2.0.3":
4580 + "integrity" "sha1-p96IkUGgWpSwhUQDstCg+/qY87c="
4581 + "resolved" "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.3.tgz"
4582 + "version" "2.0.3"
4583 + dependencies:
4584 + "d" "1"
4585 + "es5-ext" "^0.10.35"
4586 + "es6-symbol" "^3.1.1"
4587 +
4588 +"es6-symbol@^3.1.1", "es6-symbol@~3.1.3":
4589 + "integrity" "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA=="
4590 + "resolved" "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.3.tgz"
4591 + "version" "3.1.3"
4592 + dependencies:
4593 + "d" "^1.0.1"
4594 + "ext" "^1.1.2"
4595 +
4596 +"escalade@^3.0.2", "escalade@^3.1.1":
4597 + "integrity" "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw=="
4598 + "resolved" "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz"
4599 + "version" "3.1.1"
4600 +
4601 +"escape-html@~1.0.3":
4602 + "integrity" "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg="
4603 + "resolved" "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz"
4604 + "version" "1.0.3"
4605 +
4606 +"escape-string-regexp@^1.0.5":
4607 + "integrity" "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ="
4608 + "resolved" "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz"
4609 + "version" "1.0.5"
4610 +
4611 +"escape-string-regexp@^2.0.0", "escape-string-regexp@2.0.0":
4612 + "integrity" "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w=="
4613 + "resolved" "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz"
4614 + "version" "2.0.0"
4615 +
4616 +"escape-string-regexp@^4.0.0":
4617 + "integrity" "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA=="
4618 + "resolved" "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz"
4619 + "version" "4.0.0"
4620 +
4621 +"escodegen@^2.0.0":
4622 + "integrity" "sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw=="
4623 + "resolved" "https://registry.yarnpkg.com/escodegen/-/escodegen-2.0.0.tgz"
4624 + "version" "2.0.0"
4625 + dependencies:
4626 + "esprima" "^4.0.1"
4627 + "estraverse" "^5.2.0"
4628 + "esutils" "^2.0.2"
4629 + "optionator" "^0.8.1"
4630 + optionalDependencies:
4631 + "source-map" "~0.6.1"
4632 +
4633 +"eslint-config-react-app@^6.0.0":
4634 + "integrity" "sha512-bpoAAC+YRfzq0dsTk+6v9aHm/uqnDwayNAXleMypGl6CpxI9oXXscVHo4fk3eJPIn+rsbtNetB4r/ZIidFIE8A=="
4635 + "resolved" "https://registry.yarnpkg.com/eslint-config-react-app/-/eslint-config-react-app-6.0.0.tgz"
4636 + "version" "6.0.0"
4637 + dependencies:
4638 + "confusing-browser-globals" "^1.0.10"
4639 +
4640 +"eslint-import-resolver-node@^0.3.6":
4641 + "integrity" "sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw=="
4642 + "resolved" "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz"
4643 + "version" "0.3.6"
4644 + dependencies:
4645 + "debug" "^3.2.7"
4646 + "resolve" "^1.20.0"
4647 +
4648 +"eslint-module-utils@^2.6.2":
4649 + "integrity" "sha512-QG8pcgThYOuqxupd06oYTZoNOGaUdTY1PqK+oS6ElF6vs4pBdk/aYxFVQQXzcrAqp9m7cl7lb2ubazX+g16k2Q=="
4650 + "resolved" "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.6.2.tgz"
4651 + "version" "2.6.2"
4652 + dependencies:
4653 + "debug" "^3.2.7"
4654 + "pkg-dir" "^2.0.0"
4655 +
4656 +"eslint-plugin-flowtype@^5.2.0":
4657 + "integrity" "sha512-vcz32f+7TP+kvTUyMXZmCnNujBQZDNmcqPImw8b9PZ+16w1Qdm6ryRuYZYVaG9xRqqmAPr2Cs9FAX5gN+x/bjw=="
4658 + "resolved" "https://registry.yarnpkg.com/eslint-plugin-flowtype/-/eslint-plugin-flowtype-5.10.0.tgz"
4659 + "version" "5.10.0"
4660 + dependencies:
4661 + "lodash" "^4.17.15"
4662 + "string-natural-compare" "^3.0.1"
4663 +
4664 +"eslint-plugin-import@^2.22.0", "eslint-plugin-import@^2.22.1":
4665 + "integrity" "sha512-hNVtyhiEtZmpsabL4neEj+6M5DCLgpYyG9nzJY8lZQeQXEn5UPW1DpUdsMHMXsq98dbNm7nt1w9ZMSVpfJdi8Q=="
4666 + "resolved" "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.24.2.tgz"
4667 + "version" "2.24.2"
4668 + dependencies:
4669 + "array-includes" "^3.1.3"
4670 + "array.prototype.flat" "^1.2.4"
4671 + "debug" "^2.6.9"
4672 + "doctrine" "^2.1.0"
4673 + "eslint-import-resolver-node" "^0.3.6"
4674 + "eslint-module-utils" "^2.6.2"
4675 + "find-up" "^2.0.0"
4676 + "has" "^1.0.3"
4677 + "is-core-module" "^2.6.0"
4678 + "minimatch" "^3.0.4"
4679 + "object.values" "^1.1.4"
4680 + "pkg-up" "^2.0.0"
4681 + "read-pkg-up" "^3.0.0"
4682 + "resolve" "^1.20.0"
4683 + "tsconfig-paths" "^3.11.0"
4684 +
4685 +"eslint-plugin-jest@^24.0.0", "eslint-plugin-jest@^24.1.0":
4686 + "integrity" "sha512-cZPTqF/35/usP9gvjslj6pE+2lpr1KoZvjvDWRlfCP27LSRHBUhJV6hBPk47TksH3lSt28sDpIlp8owK0hWtsA=="
4687 + "resolved" "https://registry.yarnpkg.com/eslint-plugin-jest/-/eslint-plugin-jest-24.4.3.tgz"
4688 + "version" "24.4.3"
4689 + dependencies:
4690 + "@typescript-eslint/experimental-utils" "^4.0.1"
4691 +
4692 +"eslint-plugin-jsx-a11y@^6.3.1":
4693 + "integrity" "sha512-0rGPJBbwHoGNPU73/QCLP/vveMlM1b1Z9PponxO87jfr6tuH5ligXbDT6nHSSzBC8ovX2Z+BQu7Bk5D/Xgq9zg=="
4694 + "resolved" "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.4.1.tgz"
4695 + "version" "6.4.1"
4696 + dependencies:
4697 + "@babel/runtime" "^7.11.2"
4698 + "aria-query" "^4.2.2"
4699 + "array-includes" "^3.1.1"
4700 + "ast-types-flow" "^0.0.7"
4701 + "axe-core" "^4.0.2"
4702 + "axobject-query" "^2.2.0"
4703 + "damerau-levenshtein" "^1.0.6"
4704 + "emoji-regex" "^9.0.0"
4705 + "has" "^1.0.3"
4706 + "jsx-ast-utils" "^3.1.0"
4707 + "language-tags" "^1.0.5"
4708 +
4709 +"eslint-plugin-react-hooks@^4.0.8", "eslint-plugin-react-hooks@^4.2.0":
4710 + "integrity" "sha512-623WEiZJqxR7VdxFCKLI6d6LLpwJkGPYKODnkH3D7WpOG5KM8yWueBd8TLsNAetEJNF5iJmolaAKO3F8yzyVBQ=="
4711 + "resolved" "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.2.0.tgz"
4712 + "version" "4.2.0"
4713 +
4714 +"eslint-plugin-react@^7.20.3", "eslint-plugin-react@^7.21.5":
4715 + "integrity" "sha512-dceliS5itjk4EZdQYtLMz6GulcsasguIs+VTXuiC7Q5IPIdGTkyfXVdmsQOqEhlD9MciofH4cMcT1bw1WWNxCQ=="
4716 + "resolved" "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.26.0.tgz"
4717 + "version" "7.26.0"
4718 + dependencies:
4719 + "array-includes" "^3.1.3"
4720 + "array.prototype.flatmap" "^1.2.4"
4721 + "doctrine" "^2.1.0"
4722 + "estraverse" "^5.2.0"
4723 + "jsx-ast-utils" "^2.4.1 || ^3.0.0"
4724 + "minimatch" "^3.0.4"
4725 + "object.entries" "^1.1.4"
4726 + "object.fromentries" "^2.0.4"
4727 + "object.hasown" "^1.0.0"
4728 + "object.values" "^1.1.4"
4729 + "prop-types" "^15.7.2"
4730 + "resolve" "^2.0.0-next.3"
4731 + "semver" "^6.3.0"
4732 + "string.prototype.matchall" "^4.0.5"
4733 +
4734 +"eslint-plugin-testing-library@^3.9.0", "eslint-plugin-testing-library@^3.9.2":
4735 + "integrity" "sha512-WAmOCt7EbF1XM8XfbCKAEzAPnShkNSwcIsAD2jHdsMUT9mZJPjLCG7pMzbcC8kK366NOuGip8HKLDC+Xk4yIdA=="
4736 + "resolved" "https://registry.yarnpkg.com/eslint-plugin-testing-library/-/eslint-plugin-testing-library-3.10.2.tgz"
4737 + "version" "3.10.2"
4738 + dependencies:
4739 + "@typescript-eslint/experimental-utils" "^3.10.1"
4740 +
4741 +"eslint-scope@^4.0.3":
4742 + "integrity" "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg=="
4743 + "resolved" "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-4.0.3.tgz"
4744 + "version" "4.0.3"
4745 + dependencies:
4746 + "esrecurse" "^4.1.0"
4747 + "estraverse" "^4.1.1"
4748 +
4749 +"eslint-scope@^5.0.0", "eslint-scope@^5.1.1":
4750 + "integrity" "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw=="
4751 + "resolved" "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz"
4752 + "version" "5.1.1"
4753 + dependencies:
4754 + "esrecurse" "^4.3.0"
4755 + "estraverse" "^4.1.1"
4756 +
4757 +"eslint-utils@^2.0.0", "eslint-utils@^2.1.0":
4758 + "integrity" "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg=="
4759 + "resolved" "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-2.1.0.tgz"
4760 + "version" "2.1.0"
4761 + dependencies:
4762 + "eslint-visitor-keys" "^1.1.0"
4763 +
4764 +"eslint-utils@^3.0.0":
4765 + "integrity" "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA=="
4766 + "resolved" "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-3.0.0.tgz"
4767 + "version" "3.0.0"
4768 + dependencies:
4769 + "eslint-visitor-keys" "^2.0.0"
4770 +
4771 +"eslint-visitor-keys@^1.0.0", "eslint-visitor-keys@^1.1.0", "eslint-visitor-keys@^1.3.0":
4772 + "integrity" "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ=="
4773 + "resolved" "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz"
4774 + "version" "1.3.0"
4775 +
4776 +"eslint-visitor-keys@^2.0.0":
4777 + "integrity" "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw=="
4778 + "resolved" "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz"
4779 + "version" "2.1.0"
4780 +
4781 +"eslint-webpack-plugin@^2.1.0":
4782 + "integrity" "sha512-7rYh0m76KyKSDE+B+2PUQrlNS4HJ51t3WKpkJg6vo2jFMbEPTG99cBV0Dm7LXSHucN4WGCG65wQcRiTFrj7iWw=="
4783 + "resolved" "https://registry.yarnpkg.com/eslint-webpack-plugin/-/eslint-webpack-plugin-2.5.4.tgz"
4784 + "version" "2.5.4"
4785 + dependencies:
4786 + "@types/eslint" "^7.2.6"
4787 + "arrify" "^2.0.1"
4788 + "jest-worker" "^26.6.2"
4789 + "micromatch" "^4.0.2"
4790 + "normalize-path" "^3.0.0"
4791 + "schema-utils" "^3.0.0"
4792 +
4793 +"eslint@*", "eslint@^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0", "eslint@^3 || ^4 || ^5 || ^6 || ^7", "eslint@^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0", "eslint@^5 || ^6 || ^7", "eslint@^5.0.0 || ^6.0.0 || ^7.0.0", "eslint@^7.0.0", "eslint@^7.1.0", "eslint@^7.11.0", "eslint@^7.5.0", "eslint@>= 4.12.1", "eslint@>=5":
4794 + "integrity" "sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA=="
4795 + "resolved" "https://registry.yarnpkg.com/eslint/-/eslint-7.32.0.tgz"
4796 + "version" "7.32.0"
4797 + dependencies:
4798 + "@babel/code-frame" "7.12.11"
4799 + "@eslint/eslintrc" "^0.4.3"
4800 + "@humanwhocodes/config-array" "^0.5.0"
4801 + "ajv" "^6.10.0"
4802 + "chalk" "^4.0.0"
4803 + "cross-spawn" "^7.0.2"
4804 + "debug" "^4.0.1"
4805 + "doctrine" "^3.0.0"
4806 + "enquirer" "^2.3.5"
4807 + "escape-string-regexp" "^4.0.0"
4808 + "eslint-scope" "^5.1.1"
4809 + "eslint-utils" "^2.1.0"
4810 + "eslint-visitor-keys" "^2.0.0"
4811 + "espree" "^7.3.1"
4812 + "esquery" "^1.4.0"
4813 + "esutils" "^2.0.2"
4814 + "fast-deep-equal" "^3.1.3"
4815 + "file-entry-cache" "^6.0.1"
4816 + "functional-red-black-tree" "^1.0.1"
4817 + "glob-parent" "^5.1.2"
4818 + "globals" "^13.6.0"
4819 + "ignore" "^4.0.6"
4820 + "import-fresh" "^3.0.0"
4821 + "imurmurhash" "^0.1.4"
4822 + "is-glob" "^4.0.0"
4823 + "js-yaml" "^3.13.1"
4824 + "json-stable-stringify-without-jsonify" "^1.0.1"
4825 + "levn" "^0.4.1"
4826 + "lodash.merge" "^4.6.2"
4827 + "minimatch" "^3.0.4"
4828 + "natural-compare" "^1.4.0"
4829 + "optionator" "^0.9.1"
4830 + "progress" "^2.0.0"
4831 + "regexpp" "^3.1.0"
4832 + "semver" "^7.2.1"
4833 + "strip-ansi" "^6.0.0"
4834 + "strip-json-comments" "^3.1.0"
4835 + "table" "^6.0.9"
4836 + "text-table" "^0.2.0"
4837 + "v8-compile-cache" "^2.0.3"
4838 +
4839 +"espree@^7.3.0", "espree@^7.3.1":
4840 + "integrity" "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g=="
4841 + "resolved" "https://registry.yarnpkg.com/espree/-/espree-7.3.1.tgz"
4842 + "version" "7.3.1"
4843 + dependencies:
4844 + "acorn" "^7.4.0"
4845 + "acorn-jsx" "^5.3.1"
4846 + "eslint-visitor-keys" "^1.3.0"
4847 +
4848 +"esprima@^4.0.0", "esprima@^4.0.1":
4849 + "integrity" "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A=="
4850 + "resolved" "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz"
4851 + "version" "4.0.1"
4852 +
4853 +"esquery@^1.4.0":
4854 + "integrity" "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w=="
4855 + "resolved" "https://registry.yarnpkg.com/esquery/-/esquery-1.4.0.tgz"
4856 + "version" "1.4.0"
4857 + dependencies:
4858 + "estraverse" "^5.1.0"
4859 +
4860 +"esrecurse@^4.1.0", "esrecurse@^4.3.0":
4861 + "integrity" "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag=="
4862 + "resolved" "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz"
4863 + "version" "4.3.0"
4864 + dependencies:
4865 + "estraverse" "^5.2.0"
4866 +
4867 +"estraverse@^4.1.1":
4868 + "integrity" "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw=="
4869 + "resolved" "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz"
4870 + "version" "4.3.0"
4871 +
4872 +"estraverse@^5.1.0", "estraverse@^5.2.0":
4873 + "integrity" "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ=="
4874 + "resolved" "https://registry.yarnpkg.com/estraverse/-/estraverse-5.2.0.tgz"
4875 + "version" "5.2.0"
4876 +
4877 +"estree-walker@^0.6.1":
4878 + "integrity" "sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w=="
4879 + "resolved" "https://registry.yarnpkg.com/estree-walker/-/estree-walker-0.6.1.tgz"
4880 + "version" "0.6.1"
4881 +
4882 +"estree-walker@^1.0.1":
4883 + "integrity" "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg=="
4884 + "resolved" "https://registry.yarnpkg.com/estree-walker/-/estree-walker-1.0.1.tgz"
4885 + "version" "1.0.1"
4886 +
4887 +"esutils@^2.0.2":
4888 + "integrity" "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g=="
4889 + "resolved" "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz"
4890 + "version" "2.0.3"
4891 +
4892 +"etag@~1.8.1":
4893 + "integrity" "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc="
4894 + "resolved" "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz"
4895 + "version" "1.8.1"
4896 +
4897 +"eventemitter3@^4.0.0":
4898 + "integrity" "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw=="
4899 + "resolved" "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz"
4900 + "version" "4.0.7"
4901 +
4902 +"events@^3.0.0":
4903 + "integrity" "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q=="
4904 + "resolved" "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz"
4905 + "version" "3.3.0"
4906 +
4907 +"eventsource@^1.0.7":
4908 + "integrity" "sha512-VSJjT5oCNrFvCS6igjzPAt5hBzQ2qPBFIbJ03zLI9SE0mxwZpMw6BfJrbFHm1a141AavMEB8JHmBhWAd66PfCg=="
4909 + "resolved" "https://registry.yarnpkg.com/eventsource/-/eventsource-1.1.0.tgz"
4910 + "version" "1.1.0"
4911 + dependencies:
4912 + "original" "^1.0.0"
4913 +
4914 +"evp_bytestokey@^1.0.0", "evp_bytestokey@^1.0.3":
4915 + "integrity" "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA=="
4916 + "resolved" "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz"
4917 + "version" "1.0.3"
4918 + dependencies:
4919 + "md5.js" "^1.3.4"
4920 + "safe-buffer" "^5.1.1"
4921 +
4922 +"exec-sh@^0.3.2":
4923 + "integrity" "sha512-nQn+hI3yp+oD0huYhKwvYI32+JFeq+XkNcD1GAo3Y/MjxsfVGmrrzrnzjWiNY6f+pUCP440fThsFh5gZrRAU/w=="
4924 + "resolved" "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.3.6.tgz"
4925 + "version" "0.3.6"
4926 +
4927 +"execa@^1.0.0":
4928 + "integrity" "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA=="
4929 + "resolved" "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz"
4930 + "version" "1.0.0"
4931 + dependencies:
4932 + "cross-spawn" "^6.0.0"
4933 + "get-stream" "^4.0.0"
4934 + "is-stream" "^1.1.0"
4935 + "npm-run-path" "^2.0.0"
4936 + "p-finally" "^1.0.0"
4937 + "signal-exit" "^3.0.0"
4938 + "strip-eof" "^1.0.0"
4939 +
4940 +"execa@^4.0.0":
4941 + "integrity" "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA=="
4942 + "resolved" "https://registry.yarnpkg.com/execa/-/execa-4.1.0.tgz"
4943 + "version" "4.1.0"
4944 + dependencies:
4945 + "cross-spawn" "^7.0.0"
4946 + "get-stream" "^5.0.0"
4947 + "human-signals" "^1.1.1"
4948 + "is-stream" "^2.0.0"
4949 + "merge-stream" "^2.0.0"
4950 + "npm-run-path" "^4.0.0"
4951 + "onetime" "^5.1.0"
4952 + "signal-exit" "^3.0.2"
4953 + "strip-final-newline" "^2.0.0"
4954 +
4955 +"exit@^0.1.2":
4956 + "integrity" "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw="
4957 + "resolved" "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz"
4958 + "version" "0.1.2"
4959 +
4960 +"expand-brackets@^2.1.4":
4961 + "integrity" "sha1-t3c14xXOMPa27/D4OwQVGiJEliI="
4962 + "resolved" "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz"
4963 + "version" "2.1.4"
4964 + dependencies:
4965 + "debug" "^2.3.3"
4966 + "define-property" "^0.2.5"
4967 + "extend-shallow" "^2.0.1"
4968 + "posix-character-classes" "^0.1.0"
4969 + "regex-not" "^1.0.0"
4970 + "snapdragon" "^0.8.1"
4971 + "to-regex" "^3.0.1"
4972 +
4973 +"expect@^26.6.0", "expect@^26.6.2":
4974 + "integrity" "sha512-9/hlOBkQl2l/PLHJx6JjoDF6xPKcJEsUlWKb23rKE7KzeDqUZKXKNMW27KIue5JMdBV9HgmoJPcc8HtO85t9IA=="
4975 + "resolved" "https://registry.yarnpkg.com/expect/-/expect-26.6.2.tgz"
4976 + "version" "26.6.2"
4977 + dependencies:
4978 + "@jest/types" "^26.6.2"
4979 + "ansi-styles" "^4.0.0"
4980 + "jest-get-type" "^26.3.0"
4981 + "jest-matcher-utils" "^26.6.2"
4982 + "jest-message-util" "^26.6.2"
4983 + "jest-regex-util" "^26.0.0"
4984 +
4985 +"express@^4.17.1":
4986 + "integrity" "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g=="
4987 + "resolved" "https://registry.yarnpkg.com/express/-/express-4.17.1.tgz"
4988 + "version" "4.17.1"
4989 + dependencies:
4990 + "accepts" "~1.3.7"
4991 + "array-flatten" "1.1.1"
4992 + "body-parser" "1.19.0"
4993 + "content-disposition" "0.5.3"
4994 + "content-type" "~1.0.4"
4995 + "cookie" "0.4.0"
4996 + "cookie-signature" "1.0.6"
4997 + "debug" "2.6.9"
4998 + "depd" "~1.1.2"
4999 + "encodeurl" "~1.0.2"

This file is too large to show in full.

compiler/forget/packages/demo-todolist-live/.babelrc.json new
+3
@@ -0,0 +1,3 @@
1 +{
2 + "plugins": ["../../"]
3 +}
compiler/forget/packages/demo-todolist-live/.env new
+1
@@ -0,0 +1 @@
1 + SKIP_PREFLIGHT_CHECK=true
compiler/forget/packages/demo-todolist-live/.gitignore new
+21
@@ -0,0 +1,21 @@
1 +# See https://help.github.com/ignore-files/ for more about ignoring files.
2 +
3 +# dependencies
4 +/node_modules
5 +
6 +# testing
7 +/coverage
8 +
9 +# production
10 +/build
11 +
12 +# misc
13 +.DS_Store
14 +.env.local
15 +.env.development.local
16 +.env.test.local
17 +.env.production.local
18 +
19 +npm-debug.log*
20 +yarn-debug.log*
21 +yarn-error.log*
compiler/forget/packages/demo-todolist-live/README.md new
+24
@@ -0,0 +1,24 @@
1 +# React Forget Demo - Todo List Live
2 +
3 +This is a "cleaned up" verison of Todolist used in React Conf 2021 "live demo".
4 +
5 +## Get Started
6 +
7 +This is a Create-React-App project.
8 +
9 +## Structure
10 +
11 +- `forget` - a CLI driver to call the compiler from `../`
12 +- `index.js` - the entry point of demo
13 +- `source` - source dir
14 +- `compiled` - output dir
15 +
16 +### Compile
17 +
18 +```
19 +# npm
20 +npm run forget
21 +
22 +# yarn
23 +yarn forget
24 +```
compiler/forget/packages/demo-todolist-live/forget new
+58
@@ -0,0 +1,58 @@
1 +#!/bin/bash
2 +
3 +#############################################################
4 +#
5 +# Forget Shell Driver
6 +#
7 +# Usage:
8 +# $ forget <src> <dist>
9 +#
10 +#############################################################
11 +
12 +
13 +DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
14 +
15 +function cleanup() {
16 + for file in "$1"/*
17 + do
18 + file=$file;
19 + fullname="$(basename $file)"
20 + name="${fullname%*.}"
21 +
22 + if [ "$name" != "useMemoCache.js" ]; then
23 + echo "[Forget] cleanup: ${file}"
24 + rm $file
25 + fi
26 + done
27 +}
28 +
29 +function traverse() {
30 + for file in "$1"/*
31 + do
32 + dir="$(dirname $file)"
33 + fullname="$(basename $file)"
34 + ext="${fullname##*.}"
35 + name="${fullname%.*}"
36 + maybeExt="${name##*.}"
37 +
38 + # echo "dir=$dir"
39 + # echo "file=$file"
40 + # echo "fullname=$fullname"
41 + # echo "name=$name"
42 + # echo "ext=$ext"
43 + # echo "maybeExt=$maybeExt"
44 +
45 + source=$file;
46 + output="${2}/${fullname}"
47 +
48 + if [ "$maybeExt" != "memo" ]; then
49 + echo "[Forget] compile: ${source} -> ${output}"
50 + npx babel ${source} --out-file ${output};
51 + before=$(cat ${output})
52 + echo -e "import { useMemoCache } from \"./useMemoCache\";\n${before}" > $output
53 + fi
54 + done
55 +}
56 +
57 +cleanup "$2"
58 +traverse "$1" "$2"
compiler/forget/packages/demo-todolist-live/package.json new
+32
@@ -0,0 +1,32 @@
1 +{
2 + "name": "react-doc-todo",
3 + "main": "src/index.js",
4 + "dependencies": {
5 + "react": "^17.0.0",
6 + "react-dom": "^17.0.0",
7 + "react-scripts": "^4.0.0"
8 + },
9 + "version": "0.0.0",
10 + "devDependencies": {
11 + "@babel/cli": "^7.15.7",
12 + "@babel/core": "^7.15.5",
13 + "@babel/runtime": "7.13.8",
14 + "babel-preset-react-app": "^10.0.0"
15 + },
16 + "scripts": {
17 + "start": "react-scripts start",
18 + "build": "react-scripts build",
19 + "test": "react-scripts test --env=jsdom",
20 + "eject": "react-scripts eject",
21 + "forget": "./forget src/source src/compiled"
22 + },
23 + "prettier": {
24 + "arrowParens": "avoid"
25 + },
26 + "browserslist": [
27 + ">0.2%",
28 + "not dead",
29 + "not ie <= 11",
30 + "not op_mini all"
31 + ]
32 +}
compiler/forget/packages/demo-todolist-live/public/favicon.ico
Binary files /dev/null and b/compiler/forget/packages/demo-todolist-live/public/favicon.ico differ
compiler/forget/packages/demo-todolist-live/public/index.html new
+38
@@ -0,0 +1,38 @@
1 +<!doctype html>
2 +<html lang="en">
3 +<head>
4 + <meta charset="utf-8">
5 + <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
6 + <meta name="theme-color" content="#000000">
7 + <!--
8 + manifest.json provides metadata used when your web app is added to the
9 + homescreen on Android. See https://developers.google.com/web/fundamentals/engage-and-retain/web-app-manifest/
10 + -->
11 + <link rel="manifest" href="%PUBLIC_URL%/manifest.json">
12 + <link rel="shortcut icon" href="%PUBLIC_URL%/favicon.ico">
13 + <!--
14 + Notice the use of %PUBLIC_URL% in the tags above.
15 + It will be replaced with the URL of the `public` folder during the build.
16 + Only files inside the `public` folder can be referenced from the HTML.
17 +
18 + Unlike "/favicon.ico" or "favicon.ico", "%PUBLIC_URL%/favicon.ico" will
19 + work correctly both with client-side routing and a non-root public URL.
20 + Learn how to configure a non-root public URL by running `npm run build`.
21 + -->
22 + <title>React App</title>
23 +
24 +</head>
25 +<body>
26 + <div id="root"></div>
27 + <!--
28 + This HTML file is a template.
29 + If you open it directly in the browser, you will see an empty page.
30 +
31 + You can add webfonts, meta tags, or analytics to this file.
32 + The build step will place the bundled scripts into the <body> tag.
33 +
34 + To begin the development, run `npm start` or `yarn start`.
35 + To create a production bundle, use `npm run build` or `yarn build`.
36 + -->
37 +</body>
38 +</html>
compiler/forget/packages/demo-todolist-live/public/manifest.json new
+15
@@ -0,0 +1,15 @@
1 +{
2 + "short_name": "React App",
3 + "name": "Create React App Sample",
4 + "icons": [
5 + {
6 + "src": "favicon.ico",
7 + "sizes": "192x192",
8 + "type": "image/png"
9 + }
10 + ],
11 + "start_url": "./index.html",
12 + "display": "standalone",
13 + "theme_color": "#000000",
14 + "background_color": "#ffffff"
15 +}
compiler/forget/packages/demo-todolist-live/settings.json
compiler/forget/packages/demo-todolist-live/src/compiled/AddTodo.js new
+46
@@ -0,0 +1,46 @@
1 +import { useMemoCache } from "./useMemoCache";
2 +import React, { useState } from "react";
3 +export default function AddTodo({
4 + setTodos,
5 + themeColor = "#045975"
6 +}) {
7 + let $ = useMemoCache(13);
8 + let c_setTodos = $[0] !== setTodos;
9 + if (c_setTodos) $[0] = setTodos;
10 + let c_themeColor = $[1] !== themeColor;
11 + if (c_themeColor) $[1] = themeColor;
12 + const [text, setText] = useState(defaultTodo);
13 + let c_text = $[2] !== text;
14 + if (c_text) $[2] = text;
15 + const handleAddTodo = c_setTodos ? $[3] = text => {
16 + setTodos(ts => [...ts, {
17 + id: nextId++,
18 + text: text,
19 + done: false
20 + }]);
21 + } : $[3];
22 + const bgGradient = c_themeColor ? $[4] = `linear-gradient(
23 + 209.21deg,
24 + ${themeColor}22 0%,
25 + ${themeColor}ee 100%
26 + )` : $[4];
27 + return c_text || c_setTodos || c_themeColor ? $[12] = <div className="AddTodo">
28 + {c_text || c_setTodos || c_themeColor ? $[11] = <form onSubmit={c_text || c_setTodos ? $[5] = e => {
29 + e.preventDefault();
30 + setText(defaultTodo);
31 + handleAddTodo(text.trim() === "" ? fallbackTodo : text);
32 + } : $[5]}>
33 + {c_text ? $[7] = <input placeholder="Add todo" value={text} onChange={$[6] || ($[6] = e => setText(e.target.value))} /> : $[7]}
34 + {c_themeColor ? $[10] = <div className="tail">
35 + {c_themeColor ? $[9] = <button type="submit" style={c_themeColor ? $[8] = {
36 + background: bgGradient
37 + } : $[8]}>
38 + Add
39 + </button> : $[9]}
40 + </div> : $[10]}
41 + </form> : $[11]}
42 + </div> : $[12];
43 +}
44 +let nextId = 3;
45 +const defaultTodo = "";
46 +const fallbackTodo = "oops";
compiler/forget/packages/demo-todolist-live/src/compiled/BlazingTodoList.js new
+76
@@ -0,0 +1,76 @@
1 +import { useMemoCache } from "./useMemoCache";
2 +import getUpdated from "../utils/getUpdated";
3 +import getFiltered from "../utils/getFiltered";
4 +import initialTodos from "../utils/InitialTodos";
5 +import ColorPicker from "../utils/ColorPicker";
6 +import CountBadge from "../utils/CountBadge";
7 +import React, { useState, useRef } from "react";
8 +import Select from "../utils/Select";
9 +import Todo from "./Todo";
10 +import AddTodo from "./AddTodo";
11 +
12 +function TodoList({
13 + visibility,
14 + themeColor
15 +}) {
16 + let $ = useMemoCache(8);
17 + let c_visibility = $[0] !== visibility;
18 + if (c_visibility) $[0] = visibility;
19 + let c_themeColor = $[1] !== themeColor;
20 + if (c_themeColor) $[1] = themeColor;
21 + const [todos, setTodos] = useState(initialTodos);
22 + let c_todos = $[2] !== todos;
23 + if (c_todos) $[2] = todos;
24 +
25 + const handleChange = $[3] || ($[3] = todo => setTodos(todos => getUpdated(todos, todo)));
26 +
27 + const filtered = c_todos || c_visibility ? $[4] = getFiltered(todos, visibility) : $[4];
28 + return c_todos || c_visibility || c_themeColor ? $[7] = <div>
29 + {c_todos || c_visibility ? $[5] = <ul>
30 + {filtered.map(todo => <Todo key={todo.id} todo={todo} onChange={handleChange} />)}
31 + </ul> : $[5]}
32 + {c_themeColor ? $[6] = <AddTodo setTodos={setTodos} themeColor={themeColor} /> : $[6]}
33 + </div> : $[7];
34 +}
35 +
36 +export default function BlazingTodoList() {
37 + let $ = useMemoCache(14);
38 + const [themeColor, setThemeColor] = useState("#045975");
39 + let c_themeColor = $[0] !== themeColor;
40 + if (c_themeColor) $[0] = themeColor;
41 + const [visibility, setVisibility] = useState("all");
42 + let c_visibility = $[1] !== visibility;
43 + if (c_visibility) $[1] = visibility;
44 + const bgGradient = c_themeColor ? $[2] = `linear-gradient(
45 + 209.21deg,
46 + rgb(8, 126, 164) 13.57%,
47 + ${themeColor} 98.38%
48 + )` : $[2];
49 + return c_themeColor || c_visibility ? $[13] = <div className="column Neo">
50 + {c_themeColor || c_visibility ? $[12] = <div className="TodoListApp" style={c_themeColor ? $[3] = {
51 + background: bgGradient
52 + } : $[3]}>
53 + <div className="FilterCountBanner">
54 + <code>getFiltered()</code> was called
55 + <CountBadge />
56 + times
57 + </div>
58 + {c_themeColor || c_visibility ? $[10] = <header>
59 + {c_themeColor ? $[5] = <ColorPicker value={themeColor} onChange={$[4] || ($[4] = e => setThemeColor(e.target.value))} /> : $[5]}
60 + {c_visibility ? $[9] = <div className="VisibilityFilter">
61 + {c_visibility ? $[8] = <Select value={visibility} options={$[6] || ($[6] = [{
62 + value: "all",
63 + label: "All"
64 + }, {
65 + value: "active",
66 + label: "Active"
67 + }, {
68 + value: "completed",
69 + label: "Completed"
70 + }])} onChange={$[7] || ($[7] = value => setVisibility(value))} /> : $[8]}
71 + </div> : $[9]}
72 + </header> : $[10]}
73 + {c_visibility || c_themeColor ? $[11] = <TodoList visibility={visibility} themeColor={themeColor} /> : $[11]}
74 + </div> : $[12]}
75 + </div> : $[13];
76 +}
compiler/forget/packages/demo-todolist-live/src/compiled/Todo.js new
+43
@@ -0,0 +1,43 @@
1 +import { useMemoCache } from "./useMemoCache";
2 +import React, { useState, useRef } from "react";
3 +import CountBadge from "../utils/CountBadge";
4 +export default function Todo({
5 + todo,
6 + onChange
7 +}) {
8 + let $ = useMemoCache(7);
9 + let c_todo = $[0] !== todo;
10 + if (c_todo) $[0] = todo;
11 + let c_onChange = $[1] !== onChange;
12 + if (c_onChange) $[1] = onChange;
13 + const inputRef = useRef(null);
14 + const count = useRef(0);
15 + const [isEditing, setIsEditing] = useState(false);
16 + let c_isEditing = $[2] !== isEditing;
17 + if (c_isEditing) $[2] = isEditing;
18 + const onSave = c_onChange || c_todo ? $[3] = e => {
19 + e.preventDefault();
20 + setIsEditing(false);
21 + onChange({ ...todo,
22 + text: inputRef.current.value
23 + });
24 + } : $[3];
25 + const checkBox = c_isEditing || c_todo || c_onChange ? $[4] = !isEditing && <button className={todo.done ? "Checkbox done" : "Checkbox"} onClick={e => {
26 + e.target.blur();
27 + onChange({ ...todo,
28 + done: !todo.done
29 + });
30 + }}></button> : $[4];
31 + const todoBody = c_isEditing || c_todo || c_onChange ? $[5] = isEditing ? <form value={todo.text} onSubmit={onSave} onBlur={onSave}>
32 + <input ref={inputRef} defaultValue={todo.text} autoFocus />
33 + </form> : <div className={"TodoBody" + (todo.done ? " done" : "")} onClick={() => setIsEditing(true)}>
34 + {todo.text}
35 + </div> : $[5];
36 + return c_isEditing || c_todo || c_onChange ? $[6] = <li className="Todo">
37 + {checkBox}
38 + {todoBody}
39 + <div className="tail">
40 + <CountBadge count={count.current++} type={"warning"} rounded />
41 + </div>
42 + </li> : $[6];
43 +}
compiler/forget/packages/demo-todolist-live/src/compiled/useMemoCache.js new
+8
@@ -0,0 +1,8 @@
1 +import { useRef } from "react";
2 +
3 +const placeholder = NaN;
4 +
5 +export function useMemoCache(i) {
6 + const ref = useRef(new Array(i).fill(placeholder));
7 + return ref.current;
8 +}
compiler/forget/packages/demo-todolist-live/src/createServiceWorker.js new
+52
@@ -0,0 +1,52 @@
1 +// In production, we register a service worker to serve assets from local cache.
2 +
3 +// This lets the app load faster on subsequent visits in production, and gives
4 +// it offline capabilities. However, it also means that developers (and users)
5 +// will only see deployed updates on the "N+1" visit to a page, since previously
6 +// cached resources are updated in the background.
7 +
8 +// To learn more about the benefits of this model, read https://goo.gl/KwvDNy.
9 +// This link also includes instructions on opting out of this behavior.
10 +
11 +export default function register() {
12 + if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {
13 + window.addEventListener('load', () => {
14 + const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;
15 + navigator.serviceWorker
16 + .register(swUrl)
17 + .then(registration => {
18 + // eslint-disable-next-line no-param-reassign
19 + registration.onupdatefound = () => {
20 + const installingWorker = registration.installing;
21 + installingWorker.onstatechange = () => {
22 + if (installingWorker.state === 'installed') {
23 + if (navigator.serviceWorker.controller) {
24 + // At this point, the old content will have been purged and
25 + // the fresh content will have been added to the cache.
26 + // It's the perfect time to display a "New content is
27 + // available; please refresh." message in your web app.
28 + console.log('New content is available; please refresh.'); // eslint-disable-line no-console
29 + } else {
30 + // At this point, everything has been precached.
31 + // It's the perfect time to display a
32 + // "Content is cached for offline use." message.
33 + console.log('Content is cached for offline use.'); // eslint-disable-line no-console
34 + }
35 + }
36 + };
37 + };
38 + })
39 + .catch(error => {
40 + console.error('Error during service worker registration:', error);
41 + });
42 + });
43 + }
44 +}
45 +
46 +export function unregister() {
47 + if ('serviceWorker' in navigator) {
48 + navigator.serviceWorker.ready.then(registration => {
49 + registration.unregister();
50 + });
51 + }
52 +}
compiler/forget/packages/demo-todolist-live/src/index.js new
+15
@@ -0,0 +1,15 @@
1 +import React, { StrictMode } from "react";
2 +import ReactDOM from "react-dom";
3 +import "./normalize.css";
4 +import "./styles.css";
5 +
6 +// import BlazingTodoList from "./source/BlazingTodoList";
7 +import BlazingTodoList from "./compiled/BlazingTodoList";
8 +
9 +const rootElement = document.getElementById("root");
10 +ReactDOM.render(
11 + <StrictMode>
12 + <BlazingTodoList />
13 + </StrictMode>,
14 + rootElement
15 +);
compiler/forget/packages/demo-todolist-live/src/normalize.css new
+351
@@ -0,0 +1,351 @@
1 +/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */
2 +
3 +/* Document
4 + ========================================================================== */
5 +
6 +/**
7 + * 1. Correct the line height in all browsers.
8 + * 2. Prevent adjustments of font size after orientation changes in iOS.
9 + */
10 +
11 +html {
12 + line-height: 1.15; /* 1 */
13 + -webkit-text-size-adjust: 100%; /* 2 */
14 +}
15 +
16 +/* Sections
17 + ========================================================================== */
18 +
19 +/**
20 + * Remove the margin in all browsers.
21 + */
22 +
23 +body {
24 + margin: 0;
25 +}
26 +
27 +/**
28 + * Render the `main` element consistently in IE.
29 + */
30 +
31 +main {
32 + display: block;
33 +}
34 +
35 +/**
36 + * Correct the font size and margin on `h1` elements within `section` and
37 + * `article` contexts in Chrome, Firefox, and Safari.
38 + */
39 +
40 +h1 {
41 + font-size: 2em;
42 + margin: 0.67em 0;
43 +}
44 +
45 +/* Grouping content
46 + ========================================================================== */
47 +
48 +/**
49 + * 1. Add the correct box sizing in Firefox.
50 + * 2. Show the overflow in Edge and IE.
51 + */
52 +
53 +hr {
54 + box-sizing: content-box; /* 1 */
55 + height: 0; /* 1 */
56 + overflow: visible; /* 2 */
57 +}
58 +
59 +/**
60 + * 1. Correct the inheritance and scaling of font size in all browsers.
61 + * 2. Correct the odd `em` font sizing in all browsers.
62 + */
63 +
64 +pre {
65 + font-family: monospace, monospace; /* 1 */
66 + font-size: 1em; /* 2 */
67 +}
68 +
69 +/* Text-level semantics
70 + ========================================================================== */
71 +
72 +/**
73 + * Remove the gray background on active links in IE 10.
74 + */
75 +
76 +a {
77 + background-color: transparent;
78 +}
79 +
80 +/**
81 + * 1. Remove the bottom border in Chrome 57-
82 + * 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari.
83 + */
84 +
85 +abbr[title] {
86 + border-bottom: none; /* 1 */
87 + text-decoration: underline; /* 2 */
88 + text-decoration: underline dotted; /* 2 */
89 +}
90 +
91 +/**
92 + * Add the correct font weight in Chrome, Edge, and Safari.
93 + */
94 +
95 +b,
96 +strong {
97 + font-weight: bolder;
98 +}
99 +
100 +/**
101 + * 1. Correct the inheritance and scaling of font size in all browsers.
102 + * 2. Correct the odd `em` font sizing in all browsers.
103 + */
104 +
105 +code,
106 +kbd,
107 +samp {
108 + font-family: monospace, monospace; /* 1 */
109 + font-size: 1em; /* 2 */
110 +}
111 +
112 +/**
113 + * Add the correct font size in all browsers.
114 + */
115 +
116 +small {
117 + font-size: 80%;
118 +}
119 +
120 +/**
121 + * Prevent `sub` and `sup` elements from affecting the line height in
122 + * all browsers.
123 + */
124 +
125 +sub,
126 +sup {
127 + font-size: 75%;
128 + line-height: 0;
129 + position: relative;
130 + vertical-align: baseline;
131 +}
132 +
133 +sub {
134 + bottom: -0.25em;
135 +}
136 +
137 +sup {
138 + top: -0.5em;
139 +}
140 +
141 +/* Embedded content
142 + ========================================================================== */
143 +
144 +/**
145 + * Remove the border on images inside links in IE 10.
146 + */
147 +
148 +img {
149 + border-style: none;
150 +}
151 +
152 +/* Forms
153 + ========================================================================== */
154 +
155 +/**
156 + * 1. Change the font styles in all browsers.
157 + * 2. Remove the margin in Firefox and Safari.
158 + */
159 +
160 +button,
161 +input,
162 +optgroup,
163 +select,
164 +textarea {
165 + font-family: inherit; /* 1 */
166 + font-size: 100%; /* 1 */
167 + line-height: 1.15; /* 1 */
168 + margin: 0; /* 2 */
169 +}
170 +
171 +/**
172 + * Show the overflow in IE.
173 + * 1. Show the overflow in Edge.
174 + */
175 +
176 +button,
177 +input {
178 + /* 1 */
179 + overflow: visible;
180 +}
181 +
182 +/**
183 + * Remove the inheritance of text transform in Edge, Firefox, and IE.
184 + * 1. Remove the inheritance of text transform in Firefox.
185 + */
186 +
187 +button,
188 +select {
189 + /* 1 */
190 + text-transform: none;
191 +}
192 +
193 +/**
194 + * Correct the inability to style clickable types in iOS and Safari.
195 + */
196 +
197 +button,
198 +[type="button"],
199 +[type="reset"],
200 +[type="submit"] {
201 + -webkit-appearance: button;
202 +}
203 +
204 +/**
205 + * Remove the inner border and padding in Firefox.
206 + */
207 +
208 +button::-moz-focus-inner,
209 +[type="button"]::-moz-focus-inner,
210 +[type="reset"]::-moz-focus-inner,
211 +[type="submit"]::-moz-focus-inner {
212 + border-style: none;
213 + padding: 0;
214 +}
215 +
216 +/**
217 + * Restore the focus styles unset by the previous rule.
218 + */
219 +
220 +button:-moz-focusring,
221 +[type="button"]:-moz-focusring,
222 +[type="reset"]:-moz-focusring,
223 +[type="submit"]:-moz-focusring {
224 + outline: 1px dotted ButtonText;
225 +}
226 +
227 +/**
228 + * Correct the padding in Firefox.
229 + */
230 +
231 +fieldset {
232 + padding: 0.35em 0.75em 0.625em;
233 +}
234 +
235 +/**
236 + * 1. Correct the text wrapping in Edge and IE.
237 + * 2. Correct the color inheritance from `fieldset` elements in IE.
238 + * 3. Remove the padding so developers are not caught out when they zero out
239 + * `fieldset` elements in all browsers.
240 + */
241 +
242 +legend {
243 + box-sizing: border-box; /* 1 */
244 + color: inherit; /* 2 */
245 + display: table; /* 1 */
246 + max-width: 100%; /* 1 */
247 + padding: 0; /* 3 */
248 + white-space: normal; /* 1 */
249 +}
250 +
251 +/**
252 + * Add the correct vertical alignment in Chrome, Firefox, and Opera.
253 + */
254 +
255 +progress {
256 + vertical-align: baseline;
257 +}
258 +
259 +/**
260 + * Remove the default vertical scrollbar in IE 10+.
261 + */
262 +
263 +textarea {
264 + overflow: auto;
265 +}
266 +
267 +/**
268 + * 1. Add the correct box sizing in IE 10.
269 + * 2. Remove the padding in IE 10.
270 + */
271 +
272 +[type="checkbox"],
273 +[type="radio"] {
274 + box-sizing: border-box; /* 1 */
275 + padding: 0; /* 2 */
276 +}
277 +
278 +/**
279 + * Correct the cursor style of increment and decrement buttons in Chrome.
280 + */
281 +
282 +[type="number"]::-webkit-inner-spin-button,
283 +[type="number"]::-webkit-outer-spin-button {
284 + height: auto;
285 +}
286 +
287 +/**
288 + * 1. Correct the odd appearance in Chrome and Safari.
289 + * 2. Correct the outline style in Safari.
290 + */
291 +
292 +[type="search"] {
293 + -webkit-appearance: textfield; /* 1 */
294 + outline-offset: -2px; /* 2 */
295 +}
296 +
297 +/**
298 + * Remove the inner padding in Chrome and Safari on macOS.
299 + */
300 +
301 +[type="search"]::-webkit-search-decoration {
302 + -webkit-appearance: none;
303 +}
304 +
305 +/**
306 + * 1. Correct the inability to style clickable types in iOS and Safari.
307 + * 2. Change font properties to `inherit` in Safari.
308 + */
309 +
310 +::-webkit-file-upload-button {
311 + -webkit-appearance: button; /* 1 */
312 + font: inherit; /* 2 */
313 +}
314 +
315 +/* Interactive
316 + ========================================================================== */
317 +
318 +/*
319 + * Add the correct display in Edge, IE 10+, and Firefox.
320 + */
321 +
322 +details {
323 + display: block;
324 +}
325 +
326 +/*
327 + * Add the correct display in all browsers.
328 + */
329 +
330 +summary {
331 + display: list-item;
332 +}
333 +
334 +/* Misc
335 + ========================================================================== */
336 +
337 +/**
338 + * Add the correct display in IE 10+.
339 + */
340 +
341 +template {
342 + display: none;
343 +}
344 +
345 +/**
346 + * Add the correct display in IE 10.
347 + */
348 +
349 +[hidden] {
350 + display: none;
351 +}
compiler/forget/packages/demo-todolist-live/src/public/index.html new
+11
@@ -0,0 +1,11 @@
1 +<!DOCTYPE html>
2 +<html lang="en">
3 + <head>
4 + <meta charset="UTF-8">
5 + <meta name="viewport" content="width=device-width, initial-scale=1.0">
6 + <title>Document</title>
7 + </head>
8 + <body>
9 + <div id="root"></div>
10 + </body>
11 +</html>
\ No newline at end of file
compiler/forget/packages/demo-todolist-live/src/source/AddTodo.js new
+48
@@ -0,0 +1,48 @@
1 +import React, { useState } from "react";
2 +
3 +export default function AddTodo({ setTodos, themeColor = "#045975" }) {
4 + const [text, setText] = useState(defaultTodo);
5 + const handleAddTodo = text => {
6 + setTodos(ts => [
7 + ...ts,
8 + {
9 + id: nextId++,
10 + text: text,
11 + done: false,
12 + },
13 + ]);
14 + };
15 +
16 + const bgGradient = `linear-gradient(
17 + 209.21deg,
18 + ${themeColor}22 0%,
19 + ${themeColor}ee 100%
20 + )`;
21 +
22 + return (
23 + <div className="AddTodo">
24 + <form
25 + onSubmit={e => {
26 + e.preventDefault();
27 + setText(defaultTodo);
28 + handleAddTodo(text.trim() === "" ? fallbackTodo : text);
29 + }}
30 + >
31 + <input
32 + placeholder="Add todo"
33 + value={text}
34 + onChange={e => setText(e.target.value)}
35 + />
36 + <div className="tail">
37 + <button type="submit" style={{ background: bgGradient }}>
38 + Add
39 + </button>
40 + </div>
41 + </form>
42 + </div>
43 + );
44 +}
45 +
46 +let nextId = 3;
47 +const defaultTodo = "";
48 +const fallbackTodo = "oops";
compiler/forget/packages/demo-todolist-live/src/source/BlazingTodoList.js new
+67
@@ -0,0 +1,67 @@
1 +import getUpdated from "../utils/getUpdated";
2 +import getFiltered from "../utils/getFiltered";
3 +import initialTodos from "../utils/InitialTodos";
4 +import ColorPicker from "../utils/ColorPicker";
5 +import CountBadge from "../utils/CountBadge";
6 +import React, { useState, useRef } from "react";
7 +import Select from "../utils/Select";
8 +import Todo from "./Todo";
9 +import AddTodo from "./AddTodo";
10 +
11 +function TodoList({ visibility, themeColor }) {
12 + const [todos, setTodos] = useState(initialTodos);
13 + const handleChange = todo => setTodos(todos => getUpdated(todos, todo));
14 + const filtered = getFiltered(todos, visibility);
15 +
16 + return (
17 + <div>
18 + <ul>
19 + {filtered.map(todo => (
20 + <Todo key={todo.id} todo={todo} onChange={handleChange} />
21 + ))}
22 + </ul>
23 + <AddTodo setTodos={setTodos} themeColor={themeColor} />
24 + </div>
25 + );
26 +}
27 +
28 +export default function BlazingTodoList() {
29 + const [themeColor, setThemeColor] = useState("#045975");
30 + const [visibility, setVisibility] = useState("all");
31 +
32 + const bgGradient = `linear-gradient(
33 + 209.21deg,
34 + rgb(8, 126, 164) 13.57%,
35 + ${themeColor} 98.38%
36 + )`;
37 +
38 + return (
39 + <div className="column Neo">
40 + <div className="TodoListApp" style={{ background: bgGradient }}>
41 + <div className="FilterCountBanner">
42 + <code>getFiltered()</code> was called
43 + <CountBadge />
44 + times
45 + </div>
46 + <header>
47 + <ColorPicker
48 + value={themeColor}
49 + onChange={e => setThemeColor(e.target.value)}
50 + />
51 + <div className="VisibilityFilter">
52 + <Select
53 + value={visibility}
54 + options={[
55 + { value: "all", label: "All" },
56 + { value: "active", label: "Active" },
57 + { value: "completed", label: "Completed" },
58 + ]}
59 + onChange={value => setVisibility(value)}
60 + />
61 + </div>
62 + </header>
63 + <TodoList visibility={visibility} themeColor={themeColor} />
64 + </div>
65 + </div>
66 + );
67 +}
compiler/forget/packages/demo-todolist-live/src/source/Todo.js new
+53
@@ -0,0 +1,53 @@
1 +import React, { useState, useRef } from "react";
2 +import CountBadge from "../utils/CountBadge";
3 +
4 +export default function Todo({ todo, onChange }) {
5 + const inputRef = useRef(null);
6 + const count = useRef(0);
7 + const [isEditing, setIsEditing] = useState(false);
8 +
9 + const onSave = e => {
10 + e.preventDefault();
11 + setIsEditing(false);
12 + onChange({
13 + ...todo,
14 + text: inputRef.current.value,
15 + });
16 + };
17 +
18 + const checkBox = !isEditing && (
19 + <button
20 + className={todo.done ? "Checkbox done" : "Checkbox"}
21 + onClick={e => {
22 + e.target.blur();
23 + onChange({
24 + ...todo,
25 + done: !todo.done,
26 + });
27 + }}
28 + ></button>
29 + );
30 +
31 + const todoBody = isEditing ? (
32 + <form value={todo.text} onSubmit={onSave} onBlur={onSave}>
33 + <input ref={inputRef} defaultValue={todo.text} autoFocus />
34 + </form>
35 + ) : (
36 + <div
37 + className={"TodoBody" + (todo.done ? " done" : "")}
38 + onClick={() => setIsEditing(true)}
39 + >
40 + {todo.text}
41 + </div>
42 + );
43 +
44 + return (
45 + <li className="Todo">
46 + {checkBox}
47 + {todoBody}
48 + <div className="tail">
49 + <CountBadge count={count.current++} type={"warning"} rounded />
50 + </div>
51 + </li>
52 + );
53 +}
compiler/forget/packages/demo-todolist-live/src/styles.css new
+376
@@ -0,0 +1,376 @@
1 +* {
2 + box-sizing: border-box;
3 +}
4 +
5 +body {
6 + font-family: sans-serif;
7 + margin: 20px;
8 + padding: 0;
9 + /* React dark bg */
10 + background-color: #24272e;
11 +}
12 +
13 +h1 {
14 + margin-top: 0;
15 + font-size: 22px;
16 +}
17 +
18 +h2 {
19 + margin-top: 0;
20 + font-size: 20px;
21 +}
22 +
23 +h3 {
24 + margin-top: 0;
25 + font-size: 18px;
26 +}
27 +
28 +h4 {
29 + margin-top: 0;
30 + font-size: 16px;
31 +}
32 +
33 +h5 {
34 + margin-top: 0;
35 + font-size: 14px;
36 +}
37 +
38 +h6 {
39 + margin-top: 0;
40 + font-size: 12px;
41 +}
42 +
43 +ul {
44 + padding-left: 20px;
45 +}
46 +
47 +button {
48 + margin: 5px;
49 +}
50 +li {
51 + list-style-type: none;
52 +}
53 +ul,
54 +li {
55 + margin: 0;
56 + padding: 0;
57 +}
58 +
59 +.row {
60 + display: flex;
61 +}
62 +
63 +.column {
64 + flex-direction: column;
65 + flex: 1;
66 + padding: 32px;
67 + display: flex;
68 + align-items: center;
69 +}
70 +
71 +.TodoListApp {
72 + transform: scale(1.05);
73 + transform-origin: top;
74 +}
75 +
76 +/* copy from neo.css */
77 +.Neo {
78 + font-family: "Optimistic Display App", "Open Sans", -apple-system,
79 + BlinkMacSystemFont, "Helvetica Neue", sans-serif !important;
80 +}
81 +
82 +.Neo code {
83 + font-family: "Iosevka SS05";
84 + padding-right: 6px;
85 +}
86 +
87 +.TodoListApp {
88 + min-width: 320px;
89 + max-width: 320px;
90 + position: relative;
91 + /* overflow: hidden; */
92 + color: white;
93 + padding: 16px;
94 + border-radius: 24px;
95 + margin-top: 96px;
96 + /* for Neo1 */
97 + background: linear-gradient(
98 + 209.21deg,
99 + rgb(8, 126, 164) 13.57%,
100 + rgb(4, 89, 117) 98.38%
101 + );
102 + box-shadow: 0px 0.8px 2px rgba(0, 0, 0, 0.032),
103 + 0px 2.7px 6.7px rgba(0, 0, 0, 0.048), 0px 12px 30px rgba(0, 0, 0, 0.08);
104 +}
105 +
106 +.TodoListApp header {
107 + height: auto;
108 + position: relative;
109 + display: flex;
110 + justify-content: flex-start;
111 + align-items: center;
112 + margin-bottom: 12px;
113 +}
114 +
115 +.TodoListApp .FilterCountBanner {
116 + display: flex;
117 + align-items: center;
118 + justify-content: center;
119 + color: #fffc;
120 + font-size: 14.5px;
121 + height: 40px;
122 + position: absolute;
123 + width: 100%;
124 + left: 0;
125 + top: -40px;
126 +}
127 +
128 +.TodoListApp .FilterCountBanner .badge {
129 + margin: 0 6px;
130 +}
131 +
132 +input[type="color"].ColorPicker {
133 + width: auto;
134 + height: 40px;
135 + border: none;
136 + cursor: pointer;
137 + background-color: transparent;
138 + border-radius: 50%;
139 + display: flex;
140 + align-items: center;
141 + margin-right: 10px;
142 +}
143 +
144 +input[type="color"]::-webkit-color-swatch-wrapper {
145 + width: 34px;
146 + height: 34px;
147 + padding: 0;
148 + border-radius: 50%;
149 +}
150 +
151 +input[type="color"]::-webkit-color-swatch {
152 + border: none;
153 + border-radius: 50%;
154 +}
155 +
156 +.ColorPicker span {
157 + line-height: 32px;
158 + position: absolute;
159 + top: 0;
160 + right: 6px;
161 + font-size: 14px;
162 + /* click through */
163 + pointer-events: none;
164 +}
165 +
166 +.AddTodo,
167 +.Todo,
168 +.VisibilityFilter {
169 + transition: background-color 0.3s ease;
170 + display: flex;
171 + align-items: center;
172 + border-radius: 24px;
173 + font-size: 17px;
174 + color: #fffd;
175 + background-color: #0001;
176 + padding: 0px 18px;
177 + min-height: 56px;
178 + margin-bottom: 12px;
179 + flex-wrap: nowrap;
180 +}
181 +
182 +.VisibilityFilter {
183 + min-height: auto;
184 + margin: 0px;
185 + padding: 0 12px;
186 + display: flex;
187 + justify-content: flex-start;
188 + align-items: center;
189 + flex-wrap: nowrap;
190 +}
191 +
192 +.AddTodo {
193 + margin-bottom: 0px;
194 +}
195 +
196 +/* .Todo:last-of-type {
197 + margin-bottom: 0px;
198 +} */
199 +
200 +.Todo:hover,
201 +.AddTodo:hover {
202 + background-color: #0002;
203 +}
204 +
205 +.Todo:focus-within,
206 +.AddTodo:focus-within {
207 + background-color: #0003;
208 + box-shadow: rgb(255 255 255 / 20%) 0px 0px 0px 0.5px inset;
209 +}
210 +
211 +.Todo input,
212 +.AddTodo input {
213 + width: 100%;
214 + flex: 1 1;
215 + color: rgb(235, 236, 240);
216 + background-color: transparent;
217 + border: none;
218 + outline: 0px;
219 +}
220 +
221 +.Todo input,
222 +.Todo .TodoBody,
223 +.AddTodo input {
224 + padding: 18px 0;
225 +}
226 +
227 +.Select {
228 + display: flex;
229 + justify-content: space-evenly;
230 + flex: 1;
231 + align-items: center;
232 + flex-wrap: nowrap;
233 + border: none;
234 + border-radius: 18px;
235 +}
236 +
237 +.AddTodo button,
238 +.Select button {
239 + cursor: pointer;
240 + height: 40px;
241 + width: auto;
242 + border: none;
243 + border-radius: 18px;
244 + padding: 0 14px;
245 + transition: all 0.3s ease;
246 + color: #fffb;
247 + margin-right: -9px;
248 + /* For Neo1 */
249 + background: linear-gradient(
250 + 209.21deg,
251 + rgba(4, 89, 117, 0.133) 0%,
252 + rgba(4, 89, 117, 0.933) 100%
253 + );
254 + box-shadow: rgb(255 255 255 / 20%) 0px 0px 0px 0.5px inset,
255 + rgb(23 0 102 / 20%) 0px 20px 40px, rgb(0 0 0 / 10%) 0px 1px 3px;
256 +}
257 +
258 +.Select button {
259 + margin: 0;
260 + background: transparent;
261 + box-shadow: none;
262 + color: #fff7;
263 + font-size: 14.5px;
264 + padding: 0 4px;
265 +}
266 +
267 +.Select button.selected {
268 + color: #fffc;
269 +}
270 +
271 +.Select button:hover {
272 + color: #fffc;
273 +}
274 +
275 +.AddTodo button:hover {
276 + color: #fffc;
277 + box-shadow: rgb(255 255 255 / 20%) 0px 0px 0px 0.5px inset,
278 + rgb(23 0 102 / 30%) 0px 40px 80px, rgb(0 0 0 / 30%) 0px 10px 30px;
279 +}
280 +
281 +.AddTodo form,
282 +.Todo form,
283 +.Todo .TodoBody {
284 + display: flex;
285 + cursor: pointer;
286 + flex: 1;
287 + align-items: center;
288 + overflow-wrap: anywhere;
289 +}
290 +
291 +.AddTodo input::placeholder {
292 + color: #fff7;
293 +}
294 +
295 +.Todo .done {
296 + text-decoration: line-through;
297 + font-style: italic;
298 + color: #fff7;
299 +}
300 +
301 +.Todo .Checkbox {
302 + position: relative;
303 + display: flex;
304 + justify-content: center;
305 + align-items: center;
306 + width: 22px;
307 + height: 22px;
308 + padding: 0px;
309 + border: none;
310 + cursor: pointer;
311 + background-color: transparent;
312 + border-radius: 50%;
313 + border: 0.5px solid #fff3;
314 + margin: 0px;
315 + margin-right: 12px;
316 +}
317 +
318 +.Todo .Checkbox.done {
319 + border: 0.5px solid #fff5;
320 +}
321 +
322 +.Todo .Checkbox.done::after {
323 + content: "";
324 + width: 16px;
325 + height: 16px;
326 + position: absolute;
327 + border-radius: 50%;
328 + background-color: #fffc;
329 +}
330 +
331 +.tail {
332 + margin-left: 8px;
333 + justify-content: flex-end;
334 +}
335 +
336 +.VisibilityFilter {
337 + flex: 1;
338 +}
339 +
340 +.VisibilityFilter .tail {
341 + margin-left: 0px;
342 + display: flex;
343 +}
344 +
345 +/*
346 + * https://getbootstrap.com/docs/5.1/components/badge/
347 + */
348 +
349 +.badge {
350 + /* so width won't change when bumping. */
351 + font-family: "Iosevka SS05", menlo, monospace;
352 + display: inline-block;
353 + padding: 0.35em 0.65em;
354 + font-size: 13.5px;
355 + font-weight: 700;
356 + line-height: 1;
357 + color: #fff;
358 + text-align: center;
359 + white-space: nowrap;
360 + vertical-align: baseline;
361 + border-radius: 0.25rem;
362 +}
363 +
364 +.rounded-pill {
365 + border-radius: 50rem !important;
366 +}
367 +
368 +.badge-danger {
369 + color: #fff;
370 + background-color: #dc3545;
371 +}
372 +
373 +.badge-warning {
374 + color: #212529;
375 + background-color: #ffc107;
376 +}
compiler/forget/packages/demo-todolist-live/src/utils/ColorPicker.js new
+12
@@ -0,0 +1,12 @@
1 +export default function ColorPicker({ value, onChange }) {
2 + return (
3 + <input
4 + className="ColorPicker"
5 + type="color"
6 + id="head"
7 + name="head"
8 + value={value}
9 + onChange={onChange}
10 + />
11 + );
12 +}
compiler/forget/packages/demo-todolist-live/src/utils/CountBadge.js new
+17
@@ -0,0 +1,17 @@
1 +import { forwardRef } from "react";
2 +
3 +// Capped to 3 digits
4 +const CountBadge = forwardRef(
5 + ({ count = 0, type = "danger", rounded = false }, ref) => {
6 + return (
7 + <span
8 + ref={ref}
9 + className={`badge ${rounded && "rounded-pill"} badge-${type}`}
10 + >
11 + {count > 999 ? 999 : count}
12 + </span>
13 + );
14 + }
15 +);
16 +
17 +export default CountBadge;
compiler/forget/packages/demo-todolist-live/src/utils/InitialTodos.js new
+7
@@ -0,0 +1,7 @@
1 +const initialTodos = [
2 + { id: 0, text: "memo", done: true },
3 + { id: 1, text: "useCallback", done: false },
4 + { id: 2, text: "useMemo", done: false },
5 +];
6 +
7 +export default initialTodos;
compiler/forget/packages/demo-todolist-live/src/utils/Select.js new
+22
@@ -0,0 +1,22 @@
1 +export default function Select({ value, options, onChange }) {
2 + return (
3 + <div className="Select">
4 + {options.map(o => {
5 + if (value === o.value) {
6 + return (
7 + <button key={o.value} className="selected">
8 + {" "}
9 + {o.label}{" "}
10 + </button>
11 + );
12 + } else {
13 + return (
14 + <button key={o.value} onClick={() => onChange(o.value)}>
15 + {o.label}
16 + </button>
17 + );
18 + }
19 + })}
20 + </div>
21 + );
22 +}
compiler/forget/packages/demo-todolist-live/src/utils/getFiltered.js new
+21
@@ -0,0 +1,21 @@
1 +function delay() {
2 + let now = performance.now();
3 + while (performance.now() - now < 16) {
4 + // Artificial delay -- do nothing for 100ms
5 + }
6 +}
7 +export default function getFiltered(todos, visibility) {
8 + //delay()
9 + // This only works when there is only one counter unfortunately...
10 + const $filterCountBadge = document.querySelector(".FilterCountBanner .badge");
11 + if ($filterCountBadge)
12 + $filterCountBadge.textContent = parseInt($filterCountBadge.textContent) + 1;
13 + switch (visibility) {
14 + case "all":
15 + return todos;
16 + case "active":
17 + return todos.filter(t => !t.done);
18 + case "completed":
19 + return todos.filter(t => t.done);
20 + }
21 +}
compiler/forget/packages/demo-todolist-live/src/utils/getUpdated.js new
+11
@@ -0,0 +1,11 @@
1 +export default function getUpdated(tasks, newTodo) {
2 + return tasks
3 + .map(t => {
4 + if (t.id === newTodo.id) {
5 + return newTodo;
6 + } else {
7 + return t;
8 + }
9 + })
10 + .filter(t => !!t.text);
11 +}
compiler/forget/packages/demo-todolist-live/yarn.lock new
+11787
@@ -0,0 +1,11787 @@
1 +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
2 +# yarn lockfile v1
3 +
4 +
5 +"@babel/cli@^7.15.7":
6 + "integrity" "sha512-YW5wOprO2LzMjoWZ5ZG6jfbY9JnkDxuHDwvnrThnuYtByorova/I0HNXJedrUfwuXFQfYOjcqDA4PU3qlZGZjg=="
7 + "resolved" "https://registry.yarnpkg.com/@babel/cli/-/cli-7.15.7.tgz"
8 + "version" "7.15.7"
9 + dependencies:
10 + "commander" "^4.0.1"
11 + "convert-source-map" "^1.1.0"
12 + "fs-readdir-recursive" "^1.1.0"
13 + "glob" "^7.0.0"
14 + "make-dir" "^2.1.0"
15 + "slash" "^2.0.0"
16 + "source-map" "^0.5.0"
17 + optionalDependencies:
18 + "@nicolo-ribaudo/chokidar-2" "2.1.8-no-fsevents.3"
19 + "chokidar" "^3.4.0"
20 +
21 +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.14.5", "@babel/code-frame@^7.15.8", "@babel/code-frame@^7.5.5":
22 + "integrity" "sha512-2IAnmn8zbvC/jKYhq5Ki9I+DwjlrtMPUCH/CpHvqI4dNnlwHwsxoIhlc8WcYY5LSYknXQtAlFYuHfqAFCvQ4Wg=="
23 + "resolved" "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.15.8.tgz"
24 + "version" "7.15.8"
25 + dependencies:
26 + "@babel/highlight" "^7.14.5"
27 +
28 +"@babel/code-frame@7.10.4":
29 + "integrity" "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg=="
30 + "resolved" "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.10.4.tgz"
31 + "version" "7.10.4"
32 + dependencies:
33 + "@babel/highlight" "^7.10.4"
34 +
35 +"@babel/code-frame@7.12.11":
36 + "integrity" "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw=="
37 + "resolved" "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.12.11.tgz"
38 + "version" "7.12.11"
39 + dependencies:
40 + "@babel/highlight" "^7.10.4"
41 +
42 +"@babel/compat-data@^7.12.1", "@babel/compat-data@^7.13.11", "@babel/compat-data@^7.15.0":
43 + "integrity" "sha512-0NqAC1IJE0S0+lL1SWFMxMkz1pKCNCjI4tr2Zx4LJSXxCLAdr6KyArnY+sno5m3yH9g737ygOyPABDsnXkpxiA=="
44 + "resolved" "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.15.0.tgz"
45 + "version" "7.15.0"
46 +
47 +"@babel/core@^7.0.0", "@babel/core@^7.0.0-0", "@babel/core@^7.1.0", "@babel/core@^7.12.0", "@babel/core@^7.12.3", "@babel/core@^7.13.0", "@babel/core@^7.15.5", "@babel/core@^7.4.0-0", "@babel/core@^7.7.5", "@babel/core@^7.8.4", "@babel/core@7 || ^7.0.0-rc.2":
48 + "integrity" "sha512-3UG9dsxvYBMYwRv+gS41WKHno4K60/9GPy1CJaH6xy3Elq8CTtvtjT5R5jmNhXfCYLX2mTw+7/aq5ak/gOE0og=="
49 + "resolved" "https://registry.yarnpkg.com/@babel/core/-/core-7.15.8.tgz"
50 + "version" "7.15.8"
51 + dependencies:
52 + "@babel/code-frame" "^7.15.8"
53 + "@babel/generator" "^7.15.8"
54 + "@babel/helper-compilation-targets" "^7.15.4"
55 + "@babel/helper-module-transforms" "^7.15.8"
56 + "@babel/helpers" "^7.15.4"
57 + "@babel/parser" "^7.15.8"
58 + "@babel/template" "^7.15.4"
59 + "@babel/traverse" "^7.15.4"
60 + "@babel/types" "^7.15.6"
61 + "convert-source-map" "^1.7.0"
62 + "debug" "^4.1.0"
63 + "gensync" "^1.0.0-beta.2"
64 + "json5" "^2.1.2"
65 + "semver" "^6.3.0"
66 + "source-map" "^0.5.0"
67 +
68 +"@babel/core@7.12.3":
69 + "integrity" "sha512-0qXcZYKZp3/6N2jKYVxZv0aNCsxTSVCiK72DTiTYZAu7sjg73W0/aynWjMbiGd87EQL4WyA8reiJVh92AVla9g=="
70 + "resolved" "https://registry.yarnpkg.com/@babel/core/-/core-7.12.3.tgz"
71 + "version" "7.12.3"
72 + dependencies:
73 + "@babel/code-frame" "^7.10.4"
74 + "@babel/generator" "^7.12.1"
75 + "@babel/helper-module-transforms" "^7.12.1"
76 + "@babel/helpers" "^7.12.1"
77 + "@babel/parser" "^7.12.3"
78 + "@babel/template" "^7.10.4"
79 + "@babel/traverse" "^7.12.1"
80 + "@babel/types" "^7.12.1"
81 + "convert-source-map" "^1.7.0"
82 + "debug" "^4.1.0"
83 + "gensync" "^1.0.0-beta.1"
84 + "json5" "^2.1.2"
85 + "lodash" "^4.17.19"
86 + "resolve" "^1.3.2"
87 + "semver" "^5.4.1"
88 + "source-map" "^0.5.0"
89 +
90 +"@babel/generator@^7.12.1", "@babel/generator@^7.15.4", "@babel/generator@^7.15.8":
91 + "integrity" "sha512-ECmAKstXbp1cvpTTZciZCgfOt6iN64lR0d+euv3UZisU5awfRawOvg07Utn/qBGuH4bRIEZKrA/4LzZyXhZr8g=="
92 + "resolved" "https://registry.yarnpkg.com/@babel/generator/-/generator-7.15.8.tgz"
93 + "version" "7.15.8"
94 + dependencies:
95 + "@babel/types" "^7.15.6"
96 + "jsesc" "^2.5.1"
97 + "source-map" "^0.5.0"
98 +
99 +"@babel/helper-annotate-as-pure@^7.14.5", "@babel/helper-annotate-as-pure@^7.15.4":
100 + "integrity" "sha512-QwrtdNvUNsPCj2lfNQacsGSQvGX8ee1ttrBrcozUP2Sv/jylewBP/8QFe6ZkBsC8T/GYWonNAWJV4aRR9AL2DA=="
101 + "resolved" "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.15.4.tgz"
102 + "version" "7.15.4"
103 + dependencies:
104 + "@babel/types" "^7.15.4"
105 +
106 +"@babel/helper-builder-binary-assignment-operator-visitor@^7.14.5":
107 + "integrity" "sha512-P8o7JP2Mzi0SdC6eWr1zF+AEYvrsZa7GSY1lTayjF5XJhVH0kjLYUZPvTMflP7tBgZoe9gIhTa60QwFpqh/E0Q=="
108 + "resolved" "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.15.4.tgz"
109 + "version" "7.15.4"
110 + dependencies:
111 + "@babel/helper-explode-assignable-expression" "^7.15.4"
112 + "@babel/types" "^7.15.4"
113 +
114 +"@babel/helper-compilation-targets@^7.12.1", "@babel/helper-compilation-targets@^7.13.0", "@babel/helper-compilation-targets@^7.15.4":
115 + "integrity" "sha512-rMWPCirulnPSe4d+gwdWXLfAXTTBj8M3guAf5xFQJ0nvFY7tfNAFnWdqaHegHlgDZOCT4qvhF3BYlSJag8yhqQ=="
116 + "resolved" "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.15.4.tgz"
117 + "version" "7.15.4"
118 + dependencies:
119 + "@babel/compat-data" "^7.15.0"
120 + "@babel/helper-validator-option" "^7.14.5"
121 + "browserslist" "^4.16.6"
122 + "semver" "^6.3.0"
123 +
124 +"@babel/helper-create-class-features-plugin@^7.12.1", "@babel/helper-create-class-features-plugin@^7.14.5", "@babel/helper-create-class-features-plugin@^7.15.4":
125 + "integrity" "sha512-7ZmzFi+DwJx6A7mHRwbuucEYpyBwmh2Ca0RvI6z2+WLZYCqV0JOaLb+u0zbtmDicebgKBZgqbYfLaKNqSgv5Pw=="
126 + "resolved" "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.15.4.tgz"
127 + "version" "7.15.4"
128 + dependencies:
129 + "@babel/helper-annotate-as-pure" "^7.15.4"
130 + "@babel/helper-function-name" "^7.15.4"
131 + "@babel/helper-member-expression-to-functions" "^7.15.4"
132 + "@babel/helper-optimise-call-expression" "^7.15.4"
133 + "@babel/helper-replace-supers" "^7.15.4"
134 + "@babel/helper-split-export-declaration" "^7.15.4"
135 +
136 +"@babel/helper-create-regexp-features-plugin@^7.14.5":
137 + "integrity" "sha512-TLawwqpOErY2HhWbGJ2nZT5wSkR192QpN+nBg1THfBfftrlvOh+WbhrxXCH4q4xJ9Gl16BGPR/48JA+Ryiho/A=="
138 + "resolved" "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.14.5.tgz"
139 + "version" "7.14.5"
140 + dependencies:
141 + "@babel/helper-annotate-as-pure" "^7.14.5"
142 + "regexpu-core" "^4.7.1"
143 +
144 +"@babel/helper-define-polyfill-provider@^0.2.2":
145 + "integrity" "sha512-RH3QDAfRMzj7+0Nqu5oqgO5q9mFtQEVvCRsi8qCEfzLR9p2BHfn5FzhSB2oj1fF7I2+DcTORkYaQ6aTR9Cofew=="
146 + "resolved" "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.2.3.tgz"
147 + "version" "0.2.3"
148 + dependencies:
149 + "@babel/helper-compilation-targets" "^7.13.0"
150 + "@babel/helper-module-imports" "^7.12.13"
151 + "@babel/helper-plugin-utils" "^7.13.0"
152 + "@babel/traverse" "^7.13.0"
153 + "debug" "^4.1.1"
154 + "lodash.debounce" "^4.0.8"
155 + "resolve" "^1.14.2"
156 + "semver" "^6.1.2"
157 +
158 +"@babel/helper-explode-assignable-expression@^7.15.4":
159 + "integrity" "sha512-J14f/vq8+hdC2KoWLIQSsGrC9EFBKE4NFts8pfMpymfApds+fPqR30AOUWc4tyr56h9l/GA1Sxv2q3dLZWbQ/g=="
160 + "resolved" "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.15.4.tgz"
161 + "version" "7.15.4"
162 + dependencies:
163 + "@babel/types" "^7.15.4"
164 +
165 +"@babel/helper-function-name@^7.14.5", "@babel/helper-function-name@^7.15.4":
166 + "integrity" "sha512-Z91cOMM4DseLIGOnog+Z8OI6YseR9bua+HpvLAQ2XayUGU+neTtX+97caALaLdyu53I/fjhbeCnWnRH1O3jFOw=="
167 + "resolved" "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.15.4.tgz"
168 + "version" "7.15.4"
169 + dependencies:
170 + "@babel/helper-get-function-arity" "^7.15.4"
171 + "@babel/template" "^7.15.4"
172 + "@babel/types" "^7.15.4"
173 +
174 +"@babel/helper-get-function-arity@^7.15.4":
175 + "integrity" "sha512-1/AlxSF92CmGZzHnC515hm4SirTxtpDnLEJ0UyEMgTMZN+6bxXKg04dKhiRx5Enel+SUA1G1t5Ed/yQia0efrA=="
176 + "resolved" "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.15.4.tgz"
177 + "version" "7.15.4"
178 + dependencies:
179 + "@babel/types" "^7.15.4"
180 +
181 +"@babel/helper-hoist-variables@^7.15.4":
182 + "integrity" "sha512-VTy085egb3jUGVK9ycIxQiPbquesq0HUQ+tPO0uv5mPEBZipk+5FkRKiWq5apuyTE9FUrjENB0rCf8y+n+UuhA=="
183 + "resolved" "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.15.4.tgz"
184 + "version" "7.15.4"
185 + dependencies:
186 + "@babel/types" "^7.15.4"
187 +
188 +"@babel/helper-member-expression-to-functions@^7.15.4":
189 + "integrity" "sha512-cokOMkxC/BTyNP1AlY25HuBWM32iCEsLPI4BHDpJCHHm1FU2E7dKWWIXJgQgSFiu4lp8q3bL1BIKwqkSUviqtA=="
190 + "resolved" "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.15.4.tgz"
191 + "version" "7.15.4"
192 + dependencies:
193 + "@babel/types" "^7.15.4"
194 +
195 +"@babel/helper-module-imports@^7.0.0", "@babel/helper-module-imports@^7.12.1", "@babel/helper-module-imports@^7.12.13", "@babel/helper-module-imports@^7.14.5", "@babel/helper-module-imports@^7.15.4":
196 + "integrity" "sha512-jeAHZbzUwdW/xHgHQ3QmWR4Jg6j15q4w/gCfwZvtqOxoo5DKtLHk8Bsf4c5RZRC7NmLEs+ohkdq8jFefuvIxAA=="
197 + "resolved" "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.15.4.tgz"
198 + "version" "7.15.4"
199 + dependencies:
200 + "@babel/types" "^7.15.4"
201 +
202 +"@babel/helper-module-transforms@^7.12.1", "@babel/helper-module-transforms@^7.14.5", "@babel/helper-module-transforms@^7.15.4", "@babel/helper-module-transforms@^7.15.8":
203 + "integrity" "sha512-DfAfA6PfpG8t4S6npwzLvTUpp0sS7JrcuaMiy1Y5645laRJIp/LiLGIBbQKaXSInK8tiGNI7FL7L8UvB8gdUZg=="
204 + "resolved" "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.15.8.tgz"
205 + "version" "7.15.8"
206 + dependencies:
207 + "@babel/helper-module-imports" "^7.15.4"
208 + "@babel/helper-replace-supers" "^7.15.4"
209 + "@babel/helper-simple-access" "^7.15.4"
210 + "@babel/helper-split-export-declaration" "^7.15.4"
211 + "@babel/helper-validator-identifier" "^7.15.7"
212 + "@babel/template" "^7.15.4"
213 + "@babel/traverse" "^7.15.4"
214 + "@babel/types" "^7.15.6"
215 +
216 +"@babel/helper-optimise-call-expression@^7.15.4":
217 + "integrity" "sha512-E/z9rfbAOt1vDW1DR7k4SzhzotVV5+qMciWV6LaG1g4jeFrkDlJedjtV4h0i4Q/ITnUu+Pk08M7fczsB9GXBDw=="
218 + "resolved" "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.15.4.tgz"
219 + "version" "7.15.4"
220 + dependencies:
221 + "@babel/types" "^7.15.4"
222 +
223 +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.13.0", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3":
224 + "integrity" "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ=="
225 + "resolved" "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz"
226 + "version" "7.14.5"
227 +
228 +"@babel/helper-remap-async-to-generator@^7.14.5", "@babel/helper-remap-async-to-generator@^7.15.4":
229 + "integrity" "sha512-v53MxgvMK/HCwckJ1bZrq6dNKlmwlyRNYM6ypaRTdXWGOE2c1/SCa6dL/HimhPulGhZKw9W0QhREM583F/t0vQ=="
230 + "resolved" "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.15.4.tgz"
231 + "version" "7.15.4"
232 + dependencies:
233 + "@babel/helper-annotate-as-pure" "^7.15.4"
234 + "@babel/helper-wrap-function" "^7.15.4"
235 + "@babel/types" "^7.15.4"
236 +
237 +"@babel/helper-replace-supers@^7.14.5", "@babel/helper-replace-supers@^7.15.4":
238 + "integrity" "sha512-/ztT6khaXF37MS47fufrKvIsiQkx1LBRvSJNzRqmbyeZnTwU9qBxXYLaaT/6KaxfKhjs2Wy8kG8ZdsFUuWBjzw=="
239 + "resolved" "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.15.4.tgz"
240 + "version" "7.15.4"
241 + dependencies:
242 + "@babel/helper-member-expression-to-functions" "^7.15.4"
243 + "@babel/helper-optimise-call-expression" "^7.15.4"
244 + "@babel/traverse" "^7.15.4"
245 + "@babel/types" "^7.15.4"
246 +
247 +"@babel/helper-simple-access@^7.15.4":
248 + "integrity" "sha512-UzazrDoIVOZZcTeHHEPYrr1MvTR/K+wgLg6MY6e1CJyaRhbibftF6fR2KU2sFRtI/nERUZR9fBd6aKgBlIBaPg=="
249 + "resolved" "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.15.4.tgz"
250 + "version" "7.15.4"
251 + dependencies:
252 + "@babel/types" "^7.15.4"
253 +
254 +"@babel/helper-skip-transparent-expression-wrappers@^7.12.1", "@babel/helper-skip-transparent-expression-wrappers@^7.14.5", "@babel/helper-skip-transparent-expression-wrappers@^7.15.4":
255 + "integrity" "sha512-BMRLsdh+D1/aap19TycS4eD1qELGrCBJwzaY9IE8LrpJtJb+H7rQkPIdsfgnMtLBA6DJls7X9z93Z4U8h7xw0A=="
256 + "resolved" "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.15.4.tgz"
257 + "version" "7.15.4"
258 + dependencies:
259 + "@babel/types" "^7.15.4"
260 +
261 +"@babel/helper-split-export-declaration@^7.15.4":
262 + "integrity" "sha512-HsFqhLDZ08DxCpBdEVtKmywj6PQbwnF6HHybur0MAnkAKnlS6uHkwnmRIkElB2Owpfb4xL4NwDmDLFubueDXsw=="
263 + "resolved" "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.15.4.tgz"
264 + "version" "7.15.4"
265 + dependencies:
266 + "@babel/types" "^7.15.4"
267 +
268 +"@babel/helper-validator-identifier@^7.14.5", "@babel/helper-validator-identifier@^7.14.9", "@babel/helper-validator-identifier@^7.15.7":
269 + "integrity" "sha512-K4JvCtQqad9OY2+yTU8w+E82ywk/fe+ELNlt1G8z3bVGlZfn/hOcQQsUhGhW/N+tb3fxK800wLtKOE/aM0m72w=="
270 + "resolved" "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.15.7.tgz"
271 + "version" "7.15.7"
272 +
273 +"@babel/helper-validator-option@^7.12.1", "@babel/helper-validator-option@^7.14.5":
274 + "integrity" "sha512-OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow=="
275 + "resolved" "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.14.5.tgz"
276 + "version" "7.14.5"
277 +
278 +"@babel/helper-wrap-function@^7.15.4":
279 + "integrity" "sha512-Y2o+H/hRV5W8QhIfTpRIBwl57y8PrZt6JM3V8FOo5qarjshHItyH5lXlpMfBfmBefOqSCpKZs/6Dxqp0E/U+uw=="
280 + "resolved" "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.15.4.tgz"
281 + "version" "7.15.4"
282 + dependencies:
283 + "@babel/helper-function-name" "^7.15.4"
284 + "@babel/template" "^7.15.4"
285 + "@babel/traverse" "^7.15.4"
286 + "@babel/types" "^7.15.4"
287 +
288 +"@babel/helpers@^7.12.1", "@babel/helpers@^7.15.4":
289 + "integrity" "sha512-V45u6dqEJ3w2rlryYYXf6i9rQ5YMNu4FLS6ngs8ikblhu2VdR1AqAd6aJjBzmf2Qzh6KOLqKHxEN9+TFbAkAVQ=="
290 + "resolved" "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.15.4.tgz"
291 + "version" "7.15.4"
292 + dependencies:
293 + "@babel/template" "^7.15.4"
294 + "@babel/traverse" "^7.15.4"
295 + "@babel/types" "^7.15.4"
296 +
297 +"@babel/highlight@^7.10.4", "@babel/highlight@^7.14.5":
298 + "integrity" "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg=="
299 + "resolved" "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.14.5.tgz"
300 + "version" "7.14.5"
301 + dependencies:
302 + "@babel/helper-validator-identifier" "^7.14.5"
303 + "chalk" "^2.0.0"
304 + "js-tokens" "^4.0.0"
305 +
306 +"@babel/parser@^7.1.0", "@babel/parser@^7.12.3", "@babel/parser@^7.14.7", "@babel/parser@^7.15.4", "@babel/parser@^7.15.8", "@babel/parser@^7.7.0":
307 + "integrity" "sha512-BRYa3wcQnjS/nqI8Ac94pYYpJfojHVvVXJ97+IDCImX4Jc8W8Xv1+47enbruk+q1etOpsQNwnfFcNGw+gtPGxA=="
308 + "resolved" "https://registry.yarnpkg.com/@babel/parser/-/parser-7.15.8.tgz"
309 + "version" "7.15.8"
310 +
311 +"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.15.4":
312 + "integrity" "sha512-eBnpsl9tlhPhpI10kU06JHnrYXwg3+V6CaP2idsCXNef0aeslpqyITXQ74Vfk5uHgY7IG7XP0yIH8b42KSzHog=="
313 + "resolved" "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.15.4.tgz"
314 + "version" "7.15.4"
315 + dependencies:
316 + "@babel/helper-plugin-utils" "^7.14.5"
317 + "@babel/helper-skip-transparent-expression-wrappers" "^7.15.4"
318 + "@babel/plugin-proposal-optional-chaining" "^7.14.5"
319 +
320 +"@babel/plugin-proposal-async-generator-functions@^7.12.1", "@babel/plugin-proposal-async-generator-functions@^7.15.8":
321 + "integrity" "sha512-2Z5F2R2ibINTc63mY7FLqGfEbmofrHU9FitJW1Q7aPaKFhiPvSq6QEt/BoWN5oME3GVyjcRuNNSRbb9LC0CSWA=="
322 + "resolved" "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.15.8.tgz"
323 + "version" "7.15.8"
324 + dependencies:
325 + "@babel/helper-plugin-utils" "^7.14.5"
326 + "@babel/helper-remap-async-to-generator" "^7.15.4"
327 + "@babel/plugin-syntax-async-generators" "^7.8.4"
328 +
329 +"@babel/plugin-proposal-class-properties@^7.12.1":
330 + "integrity" "sha512-q/PLpv5Ko4dVc1LYMpCY7RVAAO4uk55qPwrIuJ5QJ8c6cVuAmhu7I/49JOppXL6gXf7ZHzpRVEUZdYoPLM04Gg=="
331 + "resolved" "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.14.5.tgz"
332 + "version" "7.14.5"
333 + dependencies:
334 + "@babel/helper-create-class-features-plugin" "^7.14.5"
335 + "@babel/helper-plugin-utils" "^7.14.5"
336 +
337 +"@babel/plugin-proposal-class-properties@^7.14.5":
338 + "integrity" "sha512-q/PLpv5Ko4dVc1LYMpCY7RVAAO4uk55qPwrIuJ5QJ8c6cVuAmhu7I/49JOppXL6gXf7ZHzpRVEUZdYoPLM04Gg=="
339 + "resolved" "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.14.5.tgz"
340 + "version" "7.14.5"
341 + dependencies:
342 + "@babel/helper-create-class-features-plugin" "^7.14.5"
343 + "@babel/helper-plugin-utils" "^7.14.5"
344 +
345 +"@babel/plugin-proposal-class-properties@7.12.1":
346 + "integrity" "sha512-cKp3dlQsFsEs5CWKnN7BnSHOd0EOW8EKpEjkoz1pO2E5KzIDNV9Ros1b0CnmbVgAGXJubOYVBOGCT1OmJwOI7w=="
347 + "resolved" "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.12.1.tgz"
348 + "version" "7.12.1"
349 + dependencies:
350 + "@babel/helper-create-class-features-plugin" "^7.12.1"
351 + "@babel/helper-plugin-utils" "^7.10.4"
352 +
353 +"@babel/plugin-proposal-class-static-block@^7.15.4":
354 + "integrity" "sha512-M682XWrrLNk3chXCjoPUQWOyYsB93B9z3mRyjtqqYJWDf2mfCdIYgDrA11cgNVhAQieaq6F2fn2f3wI0U4aTjA=="
355 + "resolved" "https://registry.yarnpkg.com/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.15.4.tgz"
356 + "version" "7.15.4"
357 + dependencies:
358 + "@babel/helper-create-class-features-plugin" "^7.15.4"
359 + "@babel/helper-plugin-utils" "^7.14.5"
360 + "@babel/plugin-syntax-class-static-block" "^7.14.5"
361 +
362 +"@babel/plugin-proposal-decorators@7.12.1":
363 + "integrity" "sha512-knNIuusychgYN8fGJHONL0RbFxLGawhXOJNLBk75TniTsZZeA+wdkDuv6wp4lGwzQEKjZi6/WYtnb3udNPmQmQ=="
364 + "resolved" "https://registry.yarnpkg.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.12.1.tgz"
365 + "version" "7.12.1"
366 + dependencies:
367 + "@babel/helper-create-class-features-plugin" "^7.12.1"
368 + "@babel/helper-plugin-utils" "^7.10.4"
369 + "@babel/plugin-syntax-decorators" "^7.12.1"
370 +
371 +"@babel/plugin-proposal-dynamic-import@^7.12.1", "@babel/plugin-proposal-dynamic-import@^7.14.5":
372 + "integrity" "sha512-ExjiNYc3HDN5PXJx+bwC50GIx/KKanX2HiggnIUAYedbARdImiCU4RhhHfdf0Kd7JNXGpsBBBCOm+bBVy3Gb0g=="
373 + "resolved" "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.14.5.tgz"
374 + "version" "7.14.5"
375 + dependencies:
376 + "@babel/helper-plugin-utils" "^7.14.5"
377 + "@babel/plugin-syntax-dynamic-import" "^7.8.3"
378 +
379 +"@babel/plugin-proposal-export-namespace-from@^7.12.1", "@babel/plugin-proposal-export-namespace-from@^7.14.5":
380 + "integrity" "sha512-g5POA32bXPMmSBu5Dx/iZGLGnKmKPc5AiY7qfZgurzrCYgIztDlHFbznSNCoQuv57YQLnQfaDi7dxCtLDIdXdA=="
381 + "resolved" "https://registry.yarnpkg.com/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.14.5.tgz"
382 + "version" "7.14.5"
383 + dependencies:
384 + "@babel/helper-plugin-utils" "^7.14.5"
385 + "@babel/plugin-syntax-export-namespace-from" "^7.8.3"
386 +
387 +"@babel/plugin-proposal-json-strings@^7.12.1", "@babel/plugin-proposal-json-strings@^7.14.5":
388 + "integrity" "sha512-NSq2fczJYKVRIsUJyNxrVUMhB27zb7N7pOFGQOhBKJrChbGcgEAqyZrmZswkPk18VMurEeJAaICbfm57vUeTbQ=="
389 + "resolved" "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.14.5.tgz"
390 + "version" "7.14.5"
391 + dependencies:
392 + "@babel/helper-plugin-utils" "^7.14.5"
393 + "@babel/plugin-syntax-json-strings" "^7.8.3"
394 +
395 +"@babel/plugin-proposal-logical-assignment-operators@^7.12.1", "@babel/plugin-proposal-logical-assignment-operators@^7.14.5":
396 + "integrity" "sha512-YGn2AvZAo9TwyhlLvCCWxD90Xq8xJ4aSgaX3G5D/8DW94L8aaT+dS5cSP+Z06+rCJERGSr9GxMBZ601xoc2taw=="
397 + "resolved" "https://registry.yarnpkg.com/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.14.5.tgz"
398 + "version" "7.14.5"
399 + dependencies:
400 + "@babel/helper-plugin-utils" "^7.14.5"
401 + "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4"
402 +
403 +"@babel/plugin-proposal-nullish-coalescing-operator@^7.12.1":
404 + "integrity" "sha512-gun/SOnMqjSb98Nkaq2rTKMwervfdAoz6NphdY0vTfuzMfryj+tDGb2n6UkDKwez+Y8PZDhE3D143v6Gepp4Hg=="
405 + "resolved" "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.14.5.tgz"
406 + "version" "7.14.5"
407 + dependencies:
408 + "@babel/helper-plugin-utils" "^7.14.5"
409 + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3"
410 +
411 +"@babel/plugin-proposal-nullish-coalescing-operator@^7.14.5":
412 + "integrity" "sha512-gun/SOnMqjSb98Nkaq2rTKMwervfdAoz6NphdY0vTfuzMfryj+tDGb2n6UkDKwez+Y8PZDhE3D143v6Gepp4Hg=="
413 + "resolved" "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.14.5.tgz"
414 + "version" "7.14.5"
415 + dependencies:
416 + "@babel/helper-plugin-utils" "^7.14.5"
417 + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3"
418 +
419 +"@babel/plugin-proposal-nullish-coalescing-operator@7.12.1":
420 + "integrity" "sha512-nZY0ESiaQDI1y96+jk6VxMOaL4LPo/QDHBqL+SF3/vl6dHkTwHlOI8L4ZwuRBHgakRBw5zsVylel7QPbbGuYgg=="
421 + "resolved" "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.12.1.tgz"
422 + "version" "7.12.1"
423 + dependencies:
424 + "@babel/helper-plugin-utils" "^7.10.4"
425 + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.0"
426 +
427 +"@babel/plugin-proposal-numeric-separator@^7.12.1":
428 + "integrity" "sha512-yiclALKe0vyZRZE0pS6RXgjUOt87GWv6FYa5zqj15PvhOGFO69R5DusPlgK/1K5dVnCtegTiWu9UaBSrLLJJBg=="
429 + "resolved" "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.14.5.tgz"
430 + "version" "7.14.5"
431 + dependencies:
432 + "@babel/helper-plugin-utils" "^7.14.5"
433 + "@babel/plugin-syntax-numeric-separator" "^7.10.4"
434 +
435 +"@babel/plugin-proposal-numeric-separator@^7.14.5":
436 + "integrity" "sha512-yiclALKe0vyZRZE0pS6RXgjUOt87GWv6FYa5zqj15PvhOGFO69R5DusPlgK/1K5dVnCtegTiWu9UaBSrLLJJBg=="
437 + "resolved" "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.14.5.tgz"
438 + "version" "7.14.5"
439 + dependencies:
440 + "@babel/helper-plugin-utils" "^7.14.5"
441 + "@babel/plugin-syntax-numeric-separator" "^7.10.4"
442 +
443 +"@babel/plugin-proposal-numeric-separator@7.12.1":
444 + "integrity" "sha512-MR7Ok+Af3OhNTCxYVjJZHS0t97ydnJZt/DbR4WISO39iDnhiD8XHrY12xuSJ90FFEGjir0Fzyyn7g/zY6hxbxA=="
445 + "resolved" "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.12.1.tgz"
446 + "version" "7.12.1"
447 + dependencies:
448 + "@babel/helper-plugin-utils" "^7.10.4"
449 + "@babel/plugin-syntax-numeric-separator" "^7.10.4"
450 +
451 +"@babel/plugin-proposal-object-rest-spread@^7.12.1", "@babel/plugin-proposal-object-rest-spread@^7.15.6":
452 + "integrity" "sha512-qtOHo7A1Vt+O23qEAX+GdBpqaIuD3i9VRrWgCJeq7WO6H2d14EK3q11urj5Te2MAeK97nMiIdRpwd/ST4JFbNg=="
453 + "resolved" "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.15.6.tgz"
454 + "version" "7.15.6"
455 + dependencies:
456 + "@babel/compat-data" "^7.15.0"
457 + "@babel/helper-compilation-targets" "^7.15.4"
458 + "@babel/helper-plugin-utils" "^7.14.5"
459 + "@babel/plugin-syntax-object-rest-spread" "^7.8.3"
460 + "@babel/plugin-transform-parameters" "^7.15.4"
461 +
462 +"@babel/plugin-proposal-optional-catch-binding@^7.12.1", "@babel/plugin-proposal-optional-catch-binding@^7.14.5":
463 + "integrity" "sha512-3Oyiixm0ur7bzO5ybNcZFlmVsygSIQgdOa7cTfOYCMY+wEPAYhZAJxi3mixKFCTCKUhQXuCTtQ1MzrpL3WT8ZQ=="
464 + "resolved" "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.14.5.tgz"
465 + "version" "7.14.5"
466 + dependencies:
467 + "@babel/helper-plugin-utils" "^7.14.5"
468 + "@babel/plugin-syntax-optional-catch-binding" "^7.8.3"
469 +
470 +"@babel/plugin-proposal-optional-chaining@^7.12.1":
471 + "integrity" "sha512-ycz+VOzo2UbWNI1rQXxIuMOzrDdHGrI23fRiz/Si2R4kv2XZQ1BK8ccdHwehMKBlcH/joGW/tzrUmo67gbJHlQ=="
472 + "resolved" "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.14.5.tgz"
473 + "version" "7.14.5"
474 + dependencies:
475 + "@babel/helper-plugin-utils" "^7.14.5"
476 + "@babel/helper-skip-transparent-expression-wrappers" "^7.14.5"
477 + "@babel/plugin-syntax-optional-chaining" "^7.8.3"
478 +
479 +"@babel/plugin-proposal-optional-chaining@^7.14.5":
480 + "integrity" "sha512-ycz+VOzo2UbWNI1rQXxIuMOzrDdHGrI23fRiz/Si2R4kv2XZQ1BK8ccdHwehMKBlcH/joGW/tzrUmo67gbJHlQ=="
481 + "resolved" "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.14.5.tgz"
482 + "version" "7.14.5"
483 + dependencies:
484 + "@babel/helper-plugin-utils" "^7.14.5"
485 + "@babel/helper-skip-transparent-expression-wrappers" "^7.14.5"
486 + "@babel/plugin-syntax-optional-chaining" "^7.8.3"
487 +
488 +"@babel/plugin-proposal-optional-chaining@7.12.1":
489 + "integrity" "sha512-c2uRpY6WzaVDzynVY9liyykS+kVU+WRZPMPYpkelXH8KBt1oXoI89kPbZKKG/jDT5UK92FTW2fZkZaJhdiBabw=="
490 + "resolved" "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.12.1.tgz"
491 + "version" "7.12.1"
492 + dependencies:
493 + "@babel/helper-plugin-utils" "^7.10.4"
494 + "@babel/helper-skip-transparent-expression-wrappers" "^7.12.1"
495 + "@babel/plugin-syntax-optional-chaining" "^7.8.0"
496 +
497 +"@babel/plugin-proposal-private-methods@^7.12.1", "@babel/plugin-proposal-private-methods@^7.14.5":
498 + "integrity" "sha512-838DkdUA1u+QTCplatfq4B7+1lnDa/+QMI89x5WZHBcnNv+47N8QEj2k9I2MUU9xIv8XJ4XvPCviM/Dj7Uwt9g=="
499 + "resolved" "https://registry.yarnpkg.com/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.14.5.tgz"
500 + "version" "7.14.5"
501 + dependencies:
502 + "@babel/helper-create-class-features-plugin" "^7.14.5"
503 + "@babel/helper-plugin-utils" "^7.14.5"
504 +
505 +"@babel/plugin-proposal-private-property-in-object@^7.15.4":
506 + "integrity" "sha512-X0UTixkLf0PCCffxgu5/1RQyGGbgZuKoI+vXP4iSbJSYwPb7hu06omsFGBvQ9lJEvwgrxHdS8B5nbfcd8GyUNA=="
507 + "resolved" "https://registry.yarnpkg.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.15.4.tgz"
508 + "version" "7.15.4"
509 + dependencies:
510 + "@babel/helper-annotate-as-pure" "^7.15.4"
511 + "@babel/helper-create-class-features-plugin" "^7.15.4"
512 + "@babel/helper-plugin-utils" "^7.14.5"
513 + "@babel/plugin-syntax-private-property-in-object" "^7.14.5"
514 +
515 +"@babel/plugin-proposal-unicode-property-regex@^7.12.1", "@babel/plugin-proposal-unicode-property-regex@^7.14.5", "@babel/plugin-proposal-unicode-property-regex@^7.4.4":
516 + "integrity" "sha512-6axIeOU5LnY471KenAB9vI8I5j7NQ2d652hIYwVyRfgaZT5UpiqFKCuVXCDMSrU+3VFafnu2c5m3lrWIlr6A5Q=="
517 + "resolved" "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.14.5.tgz"
518 + "version" "7.14.5"
519 + dependencies:
520 + "@babel/helper-create-regexp-features-plugin" "^7.14.5"
521 + "@babel/helper-plugin-utils" "^7.14.5"
522 +
523 +"@babel/plugin-syntax-async-generators@^7.8.0", "@babel/plugin-syntax-async-generators@^7.8.4":
524 + "integrity" "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw=="
525 + "resolved" "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz"
526 + "version" "7.8.4"
527 + dependencies:
528 + "@babel/helper-plugin-utils" "^7.8.0"
529 +
530 +"@babel/plugin-syntax-bigint@^7.8.3":
531 + "integrity" "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg=="
532 + "resolved" "https://registry.yarnpkg.com/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz"
533 + "version" "7.8.3"
534 + dependencies:
535 + "@babel/helper-plugin-utils" "^7.8.0"
536 +
537 +"@babel/plugin-syntax-class-properties@^7.12.1", "@babel/plugin-syntax-class-properties@^7.12.13", "@babel/plugin-syntax-class-properties@^7.8.3":
538 + "integrity" "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA=="
539 + "resolved" "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz"
540 + "version" "7.12.13"
541 + dependencies:
542 + "@babel/helper-plugin-utils" "^7.12.13"
543 +
544 +"@babel/plugin-syntax-class-static-block@^7.14.5":
545 + "integrity" "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw=="
546 + "resolved" "https://registry.yarnpkg.com/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz"
547 + "version" "7.14.5"
548 + dependencies:
549 + "@babel/helper-plugin-utils" "^7.14.5"
550 +
551 +"@babel/plugin-syntax-decorators@^7.12.1":
552 + "integrity" "sha512-c4sZMRWL4GSvP1EXy0woIP7m4jkVcEuG8R1TOZxPBPtp4FSM/kiPZub9UIs/Jrb5ZAOzvTUSGYrWsrSu1JvoPw=="
553 + "resolved" "https://registry.yarnpkg.com/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.14.5.tgz"
554 + "version" "7.14.5"
555 + dependencies:
556 + "@babel/helper-plugin-utils" "^7.14.5"
557 +
558 +"@babel/plugin-syntax-dynamic-import@^7.8.0", "@babel/plugin-syntax-dynamic-import@^7.8.3":
559 + "integrity" "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ=="
560 + "resolved" "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz"
561 + "version" "7.8.3"
562 + dependencies:
563 + "@babel/helper-plugin-utils" "^7.8.0"
564 +
565 +"@babel/plugin-syntax-export-namespace-from@^7.8.3":
566 + "integrity" "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q=="
567 + "resolved" "https://registry.yarnpkg.com/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz"
568 + "version" "7.8.3"
569 + dependencies:
570 + "@babel/helper-plugin-utils" "^7.8.3"
571 +
572 +"@babel/plugin-syntax-flow@^7.12.1":
573 + "integrity" "sha512-9WK5ZwKCdWHxVuU13XNT6X73FGmutAXeor5lGFq6qhOFtMFUF4jkbijuyUdZZlpYq6E2hZeZf/u3959X9wsv0Q=="
574 + "resolved" "https://registry.yarnpkg.com/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.14.5.tgz"
575 + "version" "7.14.5"
576 + dependencies:
577 + "@babel/helper-plugin-utils" "^7.14.5"
578 +
579 +"@babel/plugin-syntax-import-meta@^7.8.3":
580 + "integrity" "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g=="
581 + "resolved" "https://registry.yarnpkg.com/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz"
582 + "version" "7.10.4"
583 + dependencies:
584 + "@babel/helper-plugin-utils" "^7.10.4"
585 +
586 +"@babel/plugin-syntax-json-strings@^7.8.0", "@babel/plugin-syntax-json-strings@^7.8.3":
587 + "integrity" "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA=="
588 + "resolved" "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz"
589 + "version" "7.8.3"
590 + dependencies:
591 + "@babel/helper-plugin-utils" "^7.8.0"
592 +
593 +"@babel/plugin-syntax-jsx@^7.14.5":
594 + "integrity" "sha512-ohuFIsOMXJnbOMRfX7/w7LocdR6R7whhuRD4ax8IipLcLPlZGJKkBxgHp++U4N/vKyU16/YDQr2f5seajD3jIw=="
595 + "resolved" "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.14.5.tgz"
596 + "version" "7.14.5"
597 + dependencies:
598 + "@babel/helper-plugin-utils" "^7.14.5"
599 +
600 +"@babel/plugin-syntax-logical-assignment-operators@^7.10.4", "@babel/plugin-syntax-logical-assignment-operators@^7.8.3":
601 + "integrity" "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig=="
602 + "resolved" "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz"
603 + "version" "7.10.4"
604 + dependencies:
605 + "@babel/helper-plugin-utils" "^7.10.4"
606 +
607 +"@babel/plugin-syntax-nullish-coalescing-operator@^7.8.0", "@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3":
608 + "integrity" "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ=="
609 + "resolved" "https://registry.yarnpkg.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz"
610 + "version" "7.8.3"
611 + dependencies:
612 + "@babel/helper-plugin-utils" "^7.8.0"
613 +
614 +"@babel/plugin-syntax-numeric-separator@^7.10.4", "@babel/plugin-syntax-numeric-separator@^7.8.3":
615 + "integrity" "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug=="
616 + "resolved" "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz"
617 + "version" "7.10.4"
618 + dependencies:
619 + "@babel/helper-plugin-utils" "^7.10.4"
620 +
621 +"@babel/plugin-syntax-object-rest-spread@^7.8.0", "@babel/plugin-syntax-object-rest-spread@^7.8.3":
622 + "integrity" "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA=="
623 + "resolved" "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz"
624 + "version" "7.8.3"
625 + dependencies:
626 + "@babel/helper-plugin-utils" "^7.8.0"
627 +
628 +"@babel/plugin-syntax-optional-catch-binding@^7.8.0", "@babel/plugin-syntax-optional-catch-binding@^7.8.3":
629 + "integrity" "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q=="
630 + "resolved" "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz"
631 + "version" "7.8.3"
632 + dependencies:
633 + "@babel/helper-plugin-utils" "^7.8.0"
634 +
635 +"@babel/plugin-syntax-optional-chaining@^7.8.0", "@babel/plugin-syntax-optional-chaining@^7.8.3":
636 + "integrity" "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg=="
637 + "resolved" "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz"
638 + "version" "7.8.3"
639 + dependencies:
640 + "@babel/helper-plugin-utils" "^7.8.0"
641 +
642 +"@babel/plugin-syntax-private-property-in-object@^7.14.5":
643 + "integrity" "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg=="
644 + "resolved" "https://registry.yarnpkg.com/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz"
645 + "version" "7.14.5"
646 + dependencies:
647 + "@babel/helper-plugin-utils" "^7.14.5"
648 +
649 +"@babel/plugin-syntax-top-level-await@^7.12.1", "@babel/plugin-syntax-top-level-await@^7.14.5", "@babel/plugin-syntax-top-level-await@^7.8.3":
650 + "integrity" "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw=="
651 + "resolved" "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz"
652 + "version" "7.14.5"
653 + dependencies:
654 + "@babel/helper-plugin-utils" "^7.14.5"
655 +
656 +"@babel/plugin-syntax-typescript@^7.14.5":
657 + "integrity" "sha512-u6OXzDaIXjEstBRRoBCQ/uKQKlbuaeE5in0RvWdA4pN6AhqxTIwUsnHPU1CFZA/amYObMsuWhYfRl3Ch90HD0Q=="
658 + "resolved" "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.14.5.tgz"
659 + "version" "7.14.5"
660 + dependencies:
661 + "@babel/helper-plugin-utils" "^7.14.5"
662 +
663 +"@babel/plugin-transform-arrow-functions@^7.12.1", "@babel/plugin-transform-arrow-functions@^7.14.5":
664 + "integrity" "sha512-KOnO0l4+tD5IfOdi4x8C1XmEIRWUjNRV8wc6K2vz/3e8yAOoZZvsRXRRIF/yo/MAOFb4QjtAw9xSxMXbSMRy8A=="
665 + "resolved" "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.14.5.tgz"
666 + "version" "7.14.5"
667 + dependencies:
668 + "@babel/helper-plugin-utils" "^7.14.5"
669 +
670 +"@babel/plugin-transform-async-to-generator@^7.12.1", "@babel/plugin-transform-async-to-generator@^7.14.5":
671 + "integrity" "sha512-szkbzQ0mNk0rpu76fzDdqSyPu0MuvpXgC+6rz5rpMb5OIRxdmHfQxrktL8CYolL2d8luMCZTR0DpIMIdL27IjA=="
672 + "resolved" "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.14.5.tgz"
673 + "version" "7.14.5"
674 + dependencies:
675 + "@babel/helper-module-imports" "^7.14.5"
676 + "@babel/helper-plugin-utils" "^7.14.5"
677 + "@babel/helper-remap-async-to-generator" "^7.14.5"
678 +
679 +"@babel/plugin-transform-block-scoped-functions@^7.12.1", "@babel/plugin-transform-block-scoped-functions@^7.14.5":
680 + "integrity" "sha512-dtqWqdWZ5NqBX3KzsVCWfQI3A53Ft5pWFCT2eCVUftWZgjc5DpDponbIF1+c+7cSGk2wN0YK7HGL/ezfRbpKBQ=="
681 + "resolved" "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.14.5.tgz"
682 + "version" "7.14.5"
683 + dependencies:
684 + "@babel/helper-plugin-utils" "^7.14.5"
685 +
686 +"@babel/plugin-transform-block-scoping@^7.12.1", "@babel/plugin-transform-block-scoping@^7.15.3":
687 + "integrity" "sha512-nBAzfZwZb4DkaGtOes1Up1nOAp9TDRRFw4XBzBBSG9QK7KVFmYzgj9o9sbPv7TX5ofL4Auq4wZnxCoPnI/lz2Q=="
688 + "resolved" "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.15.3.tgz"
689 + "version" "7.15.3"
690 + dependencies:
691 + "@babel/helper-plugin-utils" "^7.14.5"
692 +
693 +"@babel/plugin-transform-classes@^7.12.1", "@babel/plugin-transform-classes@^7.15.4":
694 + "integrity" "sha512-Yjvhex8GzBmmPQUvpXRPWQ9WnxXgAFuZSrqOK/eJlOGIXwvv8H3UEdUigl1gb/bnjTrln+e8bkZUYCBt/xYlBg=="
695 + "resolved" "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.15.4.tgz"
696 + "version" "7.15.4"
697 + dependencies:
698 + "@babel/helper-annotate-as-pure" "^7.15.4"
699 + "@babel/helper-function-name" "^7.15.4"
700 + "@babel/helper-optimise-call-expression" "^7.15.4"
701 + "@babel/helper-plugin-utils" "^7.14.5"
702 + "@babel/helper-replace-supers" "^7.15.4"
703 + "@babel/helper-split-export-declaration" "^7.15.4"
704 + "globals" "^11.1.0"
705 +
706 +"@babel/plugin-transform-computed-properties@^7.12.1", "@babel/plugin-transform-computed-properties@^7.14.5":
707 + "integrity" "sha512-pWM+E4283UxaVzLb8UBXv4EIxMovU4zxT1OPnpHJcmnvyY9QbPPTKZfEj31EUvG3/EQRbYAGaYEUZ4yWOBC2xg=="
708 + "resolved" "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.14.5.tgz"
709 + "version" "7.14.5"
710 + dependencies:
711 + "@babel/helper-plugin-utils" "^7.14.5"
712 +
713 +"@babel/plugin-transform-destructuring@^7.12.1", "@babel/plugin-transform-destructuring@^7.14.7":
714 + "integrity" "sha512-0mDE99nK+kVh3xlc5vKwB6wnP9ecuSj+zQCa/n0voENtP/zymdT4HH6QEb65wjjcbqr1Jb/7z9Qp7TF5FtwYGw=="
715 + "resolved" "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.14.7.tgz"
716 + "version" "7.14.7"
717 + dependencies:
718 + "@babel/helper-plugin-utils" "^7.14.5"
719 +
720 +"@babel/plugin-transform-dotall-regex@^7.12.1", "@babel/plugin-transform-dotall-regex@^7.14.5", "@babel/plugin-transform-dotall-regex@^7.4.4":
721 + "integrity" "sha512-loGlnBdj02MDsFaHhAIJzh7euK89lBrGIdM9EAtHFo6xKygCUGuuWe07o1oZVk287amtW1n0808sQM99aZt3gw=="
722 + "resolved" "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.14.5.tgz"
723 + "version" "7.14.5"
724 + dependencies:
725 + "@babel/helper-create-regexp-features-plugin" "^7.14.5"
726 + "@babel/helper-plugin-utils" "^7.14.5"
727 +
728 +"@babel/plugin-transform-duplicate-keys@^7.12.1", "@babel/plugin-transform-duplicate-keys@^7.14.5":
729 + "integrity" "sha512-iJjbI53huKbPDAsJ8EmVmvCKeeq21bAze4fu9GBQtSLqfvzj2oRuHVx4ZkDwEhg1htQ+5OBZh/Ab0XDf5iBZ7A=="
730 + "resolved" "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.14.5.tgz"
731 + "version" "7.14.5"
732 + dependencies:
733 + "@babel/helper-plugin-utils" "^7.14.5"
734 +
735 +"@babel/plugin-transform-exponentiation-operator@^7.12.1", "@babel/plugin-transform-exponentiation-operator@^7.14.5":
736 + "integrity" "sha512-jFazJhMBc9D27o9jDnIE5ZErI0R0m7PbKXVq77FFvqFbzvTMuv8jaAwLZ5PviOLSFttqKIW0/wxNSDbjLk0tYA=="
737 + "resolved" "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.14.5.tgz"
738 + "version" "7.14.5"
739 + dependencies:
740 + "@babel/helper-builder-binary-assignment-operator-visitor" "^7.14.5"
741 + "@babel/helper-plugin-utils" "^7.14.5"
742 +
743 +"@babel/plugin-transform-flow-strip-types@7.12.1":
744 + "integrity" "sha512-8hAtkmsQb36yMmEtk2JZ9JnVyDSnDOdlB+0nEGzIDLuK4yR3JcEjfuFPYkdEPSh8Id+rAMeBEn+X0iVEyho6Hg=="
745 + "resolved" "https://registry.yarnpkg.com/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.12.1.tgz"
746 + "version" "7.12.1"
747 + dependencies:
748 + "@babel/helper-plugin-utils" "^7.10.4"
749 + "@babel/plugin-syntax-flow" "^7.12.1"
750 +
751 +"@babel/plugin-transform-for-of@^7.12.1", "@babel/plugin-transform-for-of@^7.15.4":
752 + "integrity" "sha512-DRTY9fA751AFBDh2oxydvVm4SYevs5ILTWLs6xKXps4Re/KG5nfUkr+TdHCrRWB8C69TlzVgA9b3RmGWmgN9LA=="
753 + "resolved" "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.15.4.tgz"
754 + "version" "7.15.4"
755 + dependencies:
756 + "@babel/helper-plugin-utils" "^7.14.5"
757 +
758 +"@babel/plugin-transform-function-name@^7.12.1", "@babel/plugin-transform-function-name@^7.14.5":
759 + "integrity" "sha512-vbO6kv0fIzZ1GpmGQuvbwwm+O4Cbm2NrPzwlup9+/3fdkuzo1YqOZcXw26+YUJB84Ja7j9yURWposEHLYwxUfQ=="
760 + "resolved" "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.14.5.tgz"
761 + "version" "7.14.5"
762 + dependencies:
763 + "@babel/helper-function-name" "^7.14.5"
764 + "@babel/helper-plugin-utils" "^7.14.5"
765 +
766 +"@babel/plugin-transform-literals@^7.12.1", "@babel/plugin-transform-literals@^7.14.5":
767 + "integrity" "sha512-ql33+epql2F49bi8aHXxvLURHkxJbSmMKl9J5yHqg4PLtdE6Uc48CH1GS6TQvZ86eoB/ApZXwm7jlA+B3kra7A=="
768 + "resolved" "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.14.5.tgz"
769 + "version" "7.14.5"
770 + dependencies:
771 + "@babel/helper-plugin-utils" "^7.14.5"
772 +
773 +"@babel/plugin-transform-member-expression-literals@^7.12.1", "@babel/plugin-transform-member-expression-literals@^7.14.5":
774 + "integrity" "sha512-WkNXxH1VXVTKarWFqmso83xl+2V3Eo28YY5utIkbsmXoItO8Q3aZxN4BTS2k0hz9dGUloHK26mJMyQEYfkn/+Q=="
775 + "resolved" "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.14.5.tgz"
776 + "version" "7.14.5"
777 + dependencies:
778 + "@babel/helper-plugin-utils" "^7.14.5"
779 +
780 +"@babel/plugin-transform-modules-amd@^7.12.1", "@babel/plugin-transform-modules-amd@^7.14.5":
781 + "integrity" "sha512-3lpOU8Vxmp3roC4vzFpSdEpGUWSMsHFreTWOMMLzel2gNGfHE5UWIh/LN6ghHs2xurUp4jRFYMUIZhuFbody1g=="
782 + "resolved" "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.14.5.tgz"
783 + "version" "7.14.5"
784 + dependencies:
785 + "@babel/helper-module-transforms" "^7.14.5"
786 + "@babel/helper-plugin-utils" "^7.14.5"
787 + "babel-plugin-dynamic-import-node" "^2.3.3"
788 +
789 +"@babel/plugin-transform-modules-commonjs@^7.12.1", "@babel/plugin-transform-modules-commonjs@^7.15.4":
790 + "integrity" "sha512-qg4DPhwG8hKp4BbVDvX1s8cohM8a6Bvptu4l6Iingq5rW+yRUAhe/YRup/YcW2zCOlrysEWVhftIcKzrEZv3sA=="
791 + "resolved" "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.15.4.tgz"
792 + "version" "7.15.4"
793 + dependencies:
794 + "@babel/helper-module-transforms" "^7.15.4"
795 + "@babel/helper-plugin-utils" "^7.14.5"
796 + "@babel/helper-simple-access" "^7.15.4"
797 + "babel-plugin-dynamic-import-node" "^2.3.3"
798 +
799 +"@babel/plugin-transform-modules-systemjs@^7.12.1", "@babel/plugin-transform-modules-systemjs@^7.15.4":
800 + "integrity" "sha512-fJUnlQrl/mezMneR72CKCgtOoahqGJNVKpompKwzv3BrEXdlPspTcyxrZ1XmDTIr9PpULrgEQo3qNKp6dW7ssw=="
801 + "resolved" "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.15.4.tgz"
802 + "version" "7.15.4"
803 + dependencies:
804 + "@babel/helper-hoist-variables" "^7.15.4"
805 + "@babel/helper-module-transforms" "^7.15.4"
806 + "@babel/helper-plugin-utils" "^7.14.5"
807 + "@babel/helper-validator-identifier" "^7.14.9"
808 + "babel-plugin-dynamic-import-node" "^2.3.3"
809 +
810 +"@babel/plugin-transform-modules-umd@^7.12.1", "@babel/plugin-transform-modules-umd@^7.14.5":
811 + "integrity" "sha512-RfPGoagSngC06LsGUYyM9QWSXZ8MysEjDJTAea1lqRjNECE3y0qIJF/qbvJxc4oA4s99HumIMdXOrd+TdKaAAA=="
812 + "resolved" "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.14.5.tgz"
813 + "version" "7.14.5"
814 + dependencies:
815 + "@babel/helper-module-transforms" "^7.14.5"
816 + "@babel/helper-plugin-utils" "^7.14.5"
817 +
818 +"@babel/plugin-transform-named-capturing-groups-regex@^7.12.1", "@babel/plugin-transform-named-capturing-groups-regex@^7.14.9":
819 + "integrity" "sha512-l666wCVYO75mlAtGFfyFwnWmIXQm3kSH0C3IRnJqWcZbWkoihyAdDhFm2ZWaxWTqvBvhVFfJjMRQ0ez4oN1yYA=="
820 + "resolved" "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.14.9.tgz"
821 + "version" "7.14.9"
822 + dependencies:
823 + "@babel/helper-create-regexp-features-plugin" "^7.14.5"
824 +
825 +"@babel/plugin-transform-new-target@^7.12.1", "@babel/plugin-transform-new-target@^7.14.5":
826 + "integrity" "sha512-Nx054zovz6IIRWEB49RDRuXGI4Gy0GMgqG0cII9L3MxqgXz/+rgII+RU58qpo4g7tNEx1jG7rRVH4ihZoP4esQ=="
827 + "resolved" "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.14.5.tgz"
828 + "version" "7.14.5"
829 + dependencies:
830 + "@babel/helper-plugin-utils" "^7.14.5"
831 +
832 +"@babel/plugin-transform-object-super@^7.12.1", "@babel/plugin-transform-object-super@^7.14.5":
833 + "integrity" "sha512-MKfOBWzK0pZIrav9z/hkRqIk/2bTv9qvxHzPQc12RcVkMOzpIKnFCNYJip00ssKWYkd8Sf5g0Wr7pqJ+cmtuFg=="
834 + "resolved" "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.14.5.tgz"
835 + "version" "7.14.5"
836 + dependencies:
837 + "@babel/helper-plugin-utils" "^7.14.5"
838 + "@babel/helper-replace-supers" "^7.14.5"
839 +
840 +"@babel/plugin-transform-parameters@^7.12.1", "@babel/plugin-transform-parameters@^7.15.4":
841 + "integrity" "sha512-9WB/GUTO6lvJU3XQsSr6J/WKvBC2hcs4Pew8YxZagi6GkTdniyqp8On5kqdK8MN0LMeu0mGbhPN+O049NV/9FQ=="
842 + "resolved" "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.15.4.tgz"
843 + "version" "7.15.4"
844 + dependencies:
845 + "@babel/helper-plugin-utils" "^7.14.5"
846 +
847 +"@babel/plugin-transform-property-literals@^7.12.1", "@babel/plugin-transform-property-literals@^7.14.5":
848 + "integrity" "sha512-r1uilDthkgXW8Z1vJz2dKYLV1tuw2xsbrp3MrZmD99Wh9vsfKoob+JTgri5VUb/JqyKRXotlOtwgu4stIYCmnw=="
849 + "resolved" "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.14.5.tgz"
850 + "version" "7.14.5"
851 + dependencies:
852 + "@babel/helper-plugin-utils" "^7.14.5"
853 +
854 +"@babel/plugin-transform-react-constant-elements@^7.12.1":
855 + "integrity" "sha512-NBqLEx1GxllIOXJInJAQbrnwwYJsV3WaMHIcOwD8rhYS0AabTWn7kHdHgPgu5RmHLU0q4DMxhAMu8ue/KampgQ=="
856 + "resolved" "https://registry.yarnpkg.com/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.14.5.tgz"
857 + "version" "7.14.5"
858 + dependencies:
859 + "@babel/helper-plugin-utils" "^7.14.5"
860 +
861 +"@babel/plugin-transform-react-display-name@^7.12.1":
862 + "integrity" "sha512-yQZ/i/pUCJAHI/LbtZr413S3VT26qNrEm0M5RRxQJA947/YNYwbZbBaXGDrq6CG5QsZycI1VIP6d7pQaBfP+8Q=="
863 + "resolved" "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.15.1.tgz"
864 + "version" "7.15.1"
865 + dependencies:
866 + "@babel/helper-plugin-utils" "^7.14.5"
867 +
868 +"@babel/plugin-transform-react-display-name@^7.14.5":
869 + "integrity" "sha512-yQZ/i/pUCJAHI/LbtZr413S3VT26qNrEm0M5RRxQJA947/YNYwbZbBaXGDrq6CG5QsZycI1VIP6d7pQaBfP+8Q=="
870 + "resolved" "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.15.1.tgz"
871 + "version" "7.15.1"
872 + dependencies:
873 + "@babel/helper-plugin-utils" "^7.14.5"
874 +
875 +"@babel/plugin-transform-react-display-name@7.12.1":
876 + "integrity" "sha512-cAzB+UzBIrekfYxyLlFqf/OagTvHLcVBb5vpouzkYkBclRPraiygVnafvAoipErZLI8ANv8Ecn6E/m5qPXD26w=="
877 + "resolved" "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.12.1.tgz"
878 + "version" "7.12.1"
879 + dependencies:
880 + "@babel/helper-plugin-utils" "^7.10.4"
881 +
882 +"@babel/plugin-transform-react-jsx-development@^7.12.1":
883 + "integrity" "sha512-rdwG/9jC6QybWxVe2UVOa7q6cnTpw8JRRHOxntG/h6g/guAOe6AhtQHJuJh5FwmnXIT1bdm5vC2/5huV8ZOorQ=="
884 + "resolved" "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.14.5.tgz"
885 + "version" "7.14.5"
886 + dependencies:
887 + "@babel/plugin-transform-react-jsx" "^7.14.5"
888 +
889 +"@babel/plugin-transform-react-jsx-development@^7.14.5":
890 + "integrity" "sha512-rdwG/9jC6QybWxVe2UVOa7q6cnTpw8JRRHOxntG/h6g/guAOe6AhtQHJuJh5FwmnXIT1bdm5vC2/5huV8ZOorQ=="
891 + "resolved" "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.14.5.tgz"
892 + "version" "7.14.5"
893 + dependencies:
894 + "@babel/plugin-transform-react-jsx" "^7.14.5"
895 +
896 +"@babel/plugin-transform-react-jsx-self@^7.12.1":
897 + "integrity" "sha512-Fqqu0f8zv9W+RyOnx29BX/RlEsBRANbOf5xs5oxb2aHP4FKbLXxIaVPUiCti56LAR1IixMH4EyaixhUsKqoBHw=="
898 + "resolved" "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.14.9.tgz"
899 + "version" "7.14.9"
900 + dependencies:
901 + "@babel/helper-plugin-utils" "^7.14.5"
902 +
903 +"@babel/plugin-transform-react-jsx-source@^7.12.1":
904 + "integrity" "sha512-1TpSDnD9XR/rQ2tzunBVPThF5poaYT9GqP+of8fAtguYuI/dm2RkrMBDemsxtY0XBzvW7nXjYM0hRyKX9QYj7Q=="
905 + "resolved" "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.14.5.tgz"
906 + "version" "7.14.5"
907 + dependencies:
908 + "@babel/helper-plugin-utils" "^7.14.5"
909 +
910 +"@babel/plugin-transform-react-jsx@^7.12.1", "@babel/plugin-transform-react-jsx@^7.14.5":
911 + "integrity" "sha512-30PeETvS+AeD1f58i1OVyoDlVYQhap/K20ZrMjLmmzmC2AYR/G43D4sdJAaDAqCD3MYpSWbmrz3kES158QSLjw=="
912 + "resolved" "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.14.9.tgz"
913 + "version" "7.14.9"
914 + dependencies:
915 + "@babel/helper-annotate-as-pure" "^7.14.5"
916 + "@babel/helper-module-imports" "^7.14.5"
917 + "@babel/helper-plugin-utils" "^7.14.5"
918 + "@babel/plugin-syntax-jsx" "^7.14.5"
919 + "@babel/types" "^7.14.9"
920 +
921 +"@babel/plugin-transform-react-pure-annotations@^7.12.1":
922 + "integrity" "sha512-3X4HpBJimNxW4rhUy/SONPyNQHp5YRr0HhJdT2OH1BRp0of7u3Dkirc7x9FRJMKMqTBI079VZ1hzv7Ouuz///g=="
923 + "resolved" "https://registry.yarnpkg.com/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.14.5.tgz"
924 + "version" "7.14.5"
925 + dependencies:
926 + "@babel/helper-annotate-as-pure" "^7.14.5"
927 + "@babel/helper-plugin-utils" "^7.14.5"
928 +
929 +"@babel/plugin-transform-react-pure-annotations@^7.14.5":
930 + "integrity" "sha512-3X4HpBJimNxW4rhUy/SONPyNQHp5YRr0HhJdT2OH1BRp0of7u3Dkirc7x9FRJMKMqTBI079VZ1hzv7Ouuz///g=="
931 + "resolved" "https://registry.yarnpkg.com/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.14.5.tgz"
932 + "version" "7.14.5"
933 + dependencies:
934 + "@babel/helper-annotate-as-pure" "^7.14.5"
935 + "@babel/helper-plugin-utils" "^7.14.5"
936 +
937 +"@babel/plugin-transform-regenerator@^7.12.1", "@babel/plugin-transform-regenerator@^7.14.5":
938 + "integrity" "sha512-NVIY1W3ITDP5xQl50NgTKlZ0GrotKtLna08/uGY6ErQt6VEQZXla86x/CTddm5gZdcr+5GSsvMeTmWA5Ii6pkg=="
939 + "resolved" "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.14.5.tgz"
940 + "version" "7.14.5"
941 + dependencies:
942 + "regenerator-transform" "^0.14.2"
943 +
944 +"@babel/plugin-transform-reserved-words@^7.12.1", "@babel/plugin-transform-reserved-words@^7.14.5":
945 + "integrity" "sha512-cv4F2rv1nD4qdexOGsRQXJrOcyb5CrgjUH9PKrrtyhSDBNWGxd0UIitjyJiWagS+EbUGjG++22mGH1Pub8D6Vg=="
946 + "resolved" "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.14.5.tgz"
947 + "version" "7.14.5"
948 + dependencies:
949 + "@babel/helper-plugin-utils" "^7.14.5"
950 +
951 +"@babel/plugin-transform-runtime@7.12.1":
952 + "integrity" "sha512-Ac/H6G9FEIkS2tXsZjL4RAdS3L3WHxci0usAnz7laPWUmFiGtj7tIASChqKZMHTSQTQY6xDbOq+V1/vIq3QrWg=="
953 + "resolved" "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.12.1.tgz"
954 + "version" "7.12.1"
955 + dependencies:
956 + "@babel/helper-module-imports" "^7.12.1"
957 + "@babel/helper-plugin-utils" "^7.10.4"
958 + "resolve" "^1.8.1"
959 + "semver" "^5.5.1"
960 +
961 +"@babel/plugin-transform-shorthand-properties@^7.12.1", "@babel/plugin-transform-shorthand-properties@^7.14.5":
962 + "integrity" "sha512-xLucks6T1VmGsTB+GWK5Pl9Jl5+nRXD1uoFdA5TSO6xtiNjtXTjKkmPdFXVLGlK5A2/or/wQMKfmQ2Y0XJfn5g=="
963 + "resolved" "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.14.5.tgz"
964 + "version" "7.14.5"
965 + dependencies:
966 + "@babel/helper-plugin-utils" "^7.14.5"
967 +
968 +"@babel/plugin-transform-spread@^7.12.1", "@babel/plugin-transform-spread@^7.15.8":
969 + "integrity" "sha512-/daZ8s2tNaRekl9YJa9X4bzjpeRZLt122cpgFnQPLGUe61PH8zMEBmYqKkW5xF5JUEh5buEGXJoQpqBmIbpmEQ=="
970 + "resolved" "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.15.8.tgz"
971 + "version" "7.15.8"
972 + dependencies:
973 + "@babel/helper-plugin-utils" "^7.14.5"
974 + "@babel/helper-skip-transparent-expression-wrappers" "^7.15.4"
975 +
976 +"@babel/plugin-transform-sticky-regex@^7.12.1", "@babel/plugin-transform-sticky-regex@^7.14.5":
977 + "integrity" "sha512-Z7F7GyvEMzIIbwnziAZmnSNpdijdr4dWt+FJNBnBLz5mwDFkqIXU9wmBcWWad3QeJF5hMTkRe4dAq2sUZiG+8A=="
978 + "resolved" "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.14.5.tgz"
979 + "version" "7.14.5"
980 + dependencies:
981 + "@babel/helper-plugin-utils" "^7.14.5"
982 +
983 +"@babel/plugin-transform-template-literals@^7.12.1", "@babel/plugin-transform-template-literals@^7.14.5":
984 + "integrity" "sha512-22btZeURqiepOfuy/VkFr+zStqlujWaarpMErvay7goJS6BWwdd6BY9zQyDLDa4x2S3VugxFb162IZ4m/S/+Gg=="
985 + "resolved" "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.14.5.tgz"
986 + "version" "7.14.5"
987 + dependencies:
988 + "@babel/helper-plugin-utils" "^7.14.5"
989 +
990 +"@babel/plugin-transform-typeof-symbol@^7.12.1", "@babel/plugin-transform-typeof-symbol@^7.14.5":
991 + "integrity" "sha512-lXzLD30ffCWseTbMQzrvDWqljvZlHkXU+CnseMhkMNqU1sASnCsz3tSzAaH3vCUXb9PHeUb90ZT1BdFTm1xxJw=="
992 + "resolved" "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.14.5.tgz"
993 + "version" "7.14.5"
994 + dependencies:
995 + "@babel/helper-plugin-utils" "^7.14.5"
996 +
997 +"@babel/plugin-transform-typescript@^7.12.1":
998 + "integrity" "sha512-ZXIkJpbaf6/EsmjeTbiJN/yMxWPFWvlr7sEG1P95Xb4S4IBcrf2n7s/fItIhsAmOf8oSh3VJPDppO6ExfAfKRQ=="
999 + "resolved" "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.15.8.tgz"
1000 + "version" "7.15.8"
1001 + dependencies:
1002 + "@babel/helper-create-class-features-plugin" "^7.15.4"
1003 + "@babel/helper-plugin-utils" "^7.14.5"
1004 + "@babel/plugin-syntax-typescript" "^7.14.5"
1005 +
1006 +"@babel/plugin-transform-unicode-escapes@^7.12.1", "@babel/plugin-transform-unicode-escapes@^7.14.5":
1007 + "integrity" "sha512-crTo4jATEOjxj7bt9lbYXcBAM3LZaUrbP2uUdxb6WIorLmjNKSpHfIybgY4B8SRpbf8tEVIWH3Vtm7ayCrKocA=="
1008 + "resolved" "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.14.5.tgz"
1009 + "version" "7.14.5"
1010 + dependencies:
1011 + "@babel/helper-plugin-utils" "^7.14.5"
1012 +
1013 +"@babel/plugin-transform-unicode-regex@^7.12.1", "@babel/plugin-transform-unicode-regex@^7.14.5":
1014 + "integrity" "sha512-UygduJpC5kHeCiRw/xDVzC+wj8VaYSoKl5JNVmbP7MadpNinAm3SvZCxZ42H37KZBKztz46YC73i9yV34d0Tzw=="
1015 + "resolved" "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.14.5.tgz"
1016 + "version" "7.14.5"
1017 + dependencies:
1018 + "@babel/helper-create-regexp-features-plugin" "^7.14.5"
1019 + "@babel/helper-plugin-utils" "^7.14.5"
1020 +
1021 +"@babel/preset-env@^7.12.1", "@babel/preset-env@^7.8.4":
1022 + "integrity" "sha512-rCC0wH8husJgY4FPbHsiYyiLxSY8oMDJH7Rl6RQMknbN9oDDHhM9RDFvnGM2MgkbUJzSQB4gtuwygY5mCqGSsA=="
1023 + "resolved" "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.15.8.tgz"
1024 + "version" "7.15.8"
1025 + dependencies:
1026 + "@babel/compat-data" "^7.15.0"
1027 + "@babel/helper-compilation-targets" "^7.15.4"
1028 + "@babel/helper-plugin-utils" "^7.14.5"
1029 + "@babel/helper-validator-option" "^7.14.5"
1030 + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.15.4"
1031 + "@babel/plugin-proposal-async-generator-functions" "^7.15.8"
1032 + "@babel/plugin-proposal-class-properties" "^7.14.5"
1033 + "@babel/plugin-proposal-class-static-block" "^7.15.4"
1034 + "@babel/plugin-proposal-dynamic-import" "^7.14.5"
1035 + "@babel/plugin-proposal-export-namespace-from" "^7.14.5"
1036 + "@babel/plugin-proposal-json-strings" "^7.14.5"
1037 + "@babel/plugin-proposal-logical-assignment-operators" "^7.14.5"
1038 + "@babel/plugin-proposal-nullish-coalescing-operator" "^7.14.5"
1039 + "@babel/plugin-proposal-numeric-separator" "^7.14.5"
1040 + "@babel/plugin-proposal-object-rest-spread" "^7.15.6"
1041 + "@babel/plugin-proposal-optional-catch-binding" "^7.14.5"
1042 + "@babel/plugin-proposal-optional-chaining" "^7.14.5"
1043 + "@babel/plugin-proposal-private-methods" "^7.14.5"
1044 + "@babel/plugin-proposal-private-property-in-object" "^7.15.4"
1045 + "@babel/plugin-proposal-unicode-property-regex" "^7.14.5"
1046 + "@babel/plugin-syntax-async-generators" "^7.8.4"
1047 + "@babel/plugin-syntax-class-properties" "^7.12.13"
1048 + "@babel/plugin-syntax-class-static-block" "^7.14.5"
1049 + "@babel/plugin-syntax-dynamic-import" "^7.8.3"
1050 + "@babel/plugin-syntax-export-namespace-from" "^7.8.3"
1051 + "@babel/plugin-syntax-json-strings" "^7.8.3"
1052 + "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4"
1053 + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3"
1054 + "@babel/plugin-syntax-numeric-separator" "^7.10.4"
1055 + "@babel/plugin-syntax-object-rest-spread" "^7.8.3"
1056 + "@babel/plugin-syntax-optional-catch-binding" "^7.8.3"
1057 + "@babel/plugin-syntax-optional-chaining" "^7.8.3"
1058 + "@babel/plugin-syntax-private-property-in-object" "^7.14.5"
1059 + "@babel/plugin-syntax-top-level-await" "^7.14.5"
1060 + "@babel/plugin-transform-arrow-functions" "^7.14.5"
1061 + "@babel/plugin-transform-async-to-generator" "^7.14.5"
1062 + "@babel/plugin-transform-block-scoped-functions" "^7.14.5"
1063 + "@babel/plugin-transform-block-scoping" "^7.15.3"
1064 + "@babel/plugin-transform-classes" "^7.15.4"
1065 + "@babel/plugin-transform-computed-properties" "^7.14.5"
1066 + "@babel/plugin-transform-destructuring" "^7.14.7"
1067 + "@babel/plugin-transform-dotall-regex" "^7.14.5"
1068 + "@babel/plugin-transform-duplicate-keys" "^7.14.5"
1069 + "@babel/plugin-transform-exponentiation-operator" "^7.14.5"
1070 + "@babel/plugin-transform-for-of" "^7.15.4"
1071 + "@babel/plugin-transform-function-name" "^7.14.5"
1072 + "@babel/plugin-transform-literals" "^7.14.5"
1073 + "@babel/plugin-transform-member-expression-literals" "^7.14.5"
1074 + "@babel/plugin-transform-modules-amd" "^7.14.5"
1075 + "@babel/plugin-transform-modules-commonjs" "^7.15.4"
1076 + "@babel/plugin-transform-modules-systemjs" "^7.15.4"
1077 + "@babel/plugin-transform-modules-umd" "^7.14.5"
1078 + "@babel/plugin-transform-named-capturing-groups-regex" "^7.14.9"
1079 + "@babel/plugin-transform-new-target" "^7.14.5"
1080 + "@babel/plugin-transform-object-super" "^7.14.5"
1081 + "@babel/plugin-transform-parameters" "^7.15.4"
1082 + "@babel/plugin-transform-property-literals" "^7.14.5"
1083 + "@babel/plugin-transform-regenerator" "^7.14.5"
1084 + "@babel/plugin-transform-reserved-words" "^7.14.5"
1085 + "@babel/plugin-transform-shorthand-properties" "^7.14.5"
1086 + "@babel/plugin-transform-spread" "^7.15.8"
1087 + "@babel/plugin-transform-sticky-regex" "^7.14.5"
1088 + "@babel/plugin-transform-template-literals" "^7.14.5"
1089 + "@babel/plugin-transform-typeof-symbol" "^7.14.5"
1090 + "@babel/plugin-transform-unicode-escapes" "^7.14.5"
1091 + "@babel/plugin-transform-unicode-regex" "^7.14.5"
1092 + "@babel/preset-modules" "^0.1.4"
1093 + "@babel/types" "^7.15.6"
1094 + "babel-plugin-polyfill-corejs2" "^0.2.2"
1095 + "babel-plugin-polyfill-corejs3" "^0.2.5"
1096 + "babel-plugin-polyfill-regenerator" "^0.2.2"
1097 + "core-js-compat" "^3.16.0"
1098 + "semver" "^6.3.0"
1099 +
1100 +"@babel/preset-env@7.12.1":
1101 + "integrity" "sha512-H8kxXmtPaAGT7TyBvSSkoSTUK6RHh61So05SyEbpmr0MCZrsNYn7mGMzzeYoOUCdHzww61k8XBft2TaES+xPLg=="
1102 + "resolved" "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.12.1.tgz"
1103 + "version" "7.12.1"
1104 + dependencies:
1105 + "@babel/compat-data" "^7.12.1"
1106 + "@babel/helper-compilation-targets" "^7.12.1"
1107 + "@babel/helper-module-imports" "^7.12.1"
1108 + "@babel/helper-plugin-utils" "^7.10.4"
1109 + "@babel/helper-validator-option" "^7.12.1"
1110 + "@babel/plugin-proposal-async-generator-functions" "^7.12.1"
1111 + "@babel/plugin-proposal-class-properties" "^7.12.1"
1112 + "@babel/plugin-proposal-dynamic-import" "^7.12.1"
1113 + "@babel/plugin-proposal-export-namespace-from" "^7.12.1"
1114 + "@babel/plugin-proposal-json-strings" "^7.12.1"
1115 + "@babel/plugin-proposal-logical-assignment-operators" "^7.12.1"
1116 + "@babel/plugin-proposal-nullish-coalescing-operator" "^7.12.1"
1117 + "@babel/plugin-proposal-numeric-separator" "^7.12.1"
1118 + "@babel/plugin-proposal-object-rest-spread" "^7.12.1"
1119 + "@babel/plugin-proposal-optional-catch-binding" "^7.12.1"
1120 + "@babel/plugin-proposal-optional-chaining" "^7.12.1"
1121 + "@babel/plugin-proposal-private-methods" "^7.12.1"
1122 + "@babel/plugin-proposal-unicode-property-regex" "^7.12.1"
1123 + "@babel/plugin-syntax-async-generators" "^7.8.0"
1124 + "@babel/plugin-syntax-class-properties" "^7.12.1"
1125 + "@babel/plugin-syntax-dynamic-import" "^7.8.0"
1126 + "@babel/plugin-syntax-export-namespace-from" "^7.8.3"
1127 + "@babel/plugin-syntax-json-strings" "^7.8.0"
1128 + "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4"
1129 + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.0"
1130 + "@babel/plugin-syntax-numeric-separator" "^7.10.4"
1131 + "@babel/plugin-syntax-object-rest-spread" "^7.8.0"
1132 + "@babel/plugin-syntax-optional-catch-binding" "^7.8.0"
1133 + "@babel/plugin-syntax-optional-chaining" "^7.8.0"
1134 + "@babel/plugin-syntax-top-level-await" "^7.12.1"
1135 + "@babel/plugin-transform-arrow-functions" "^7.12.1"
1136 + "@babel/plugin-transform-async-to-generator" "^7.12.1"
1137 + "@babel/plugin-transform-block-scoped-functions" "^7.12.1"
1138 + "@babel/plugin-transform-block-scoping" "^7.12.1"
1139 + "@babel/plugin-transform-classes" "^7.12.1"
1140 + "@babel/plugin-transform-computed-properties" "^7.12.1"
1141 + "@babel/plugin-transform-destructuring" "^7.12.1"
1142 + "@babel/plugin-transform-dotall-regex" "^7.12.1"
1143 + "@babel/plugin-transform-duplicate-keys" "^7.12.1"
1144 + "@babel/plugin-transform-exponentiation-operator" "^7.12.1"
1145 + "@babel/plugin-transform-for-of" "^7.12.1"
1146 + "@babel/plugin-transform-function-name" "^7.12.1"
1147 + "@babel/plugin-transform-literals" "^7.12.1"
1148 + "@babel/plugin-transform-member-expression-literals" "^7.12.1"
1149 + "@babel/plugin-transform-modules-amd" "^7.12.1"
1150 + "@babel/plugin-transform-modules-commonjs" "^7.12.1"
1151 + "@babel/plugin-transform-modules-systemjs" "^7.12.1"
1152 + "@babel/plugin-transform-modules-umd" "^7.12.1"
1153 + "@babel/plugin-transform-named-capturing-groups-regex" "^7.12.1"
1154 + "@babel/plugin-transform-new-target" "^7.12.1"
1155 + "@babel/plugin-transform-object-super" "^7.12.1"
1156 + "@babel/plugin-transform-parameters" "^7.12.1"
1157 + "@babel/plugin-transform-property-literals" "^7.12.1"
1158 + "@babel/plugin-transform-regenerator" "^7.12.1"
1159 + "@babel/plugin-transform-reserved-words" "^7.12.1"
1160 + "@babel/plugin-transform-shorthand-properties" "^7.12.1"
1161 + "@babel/plugin-transform-spread" "^7.12.1"
1162 + "@babel/plugin-transform-sticky-regex" "^7.12.1"
1163 + "@babel/plugin-transform-template-literals" "^7.12.1"
1164 + "@babel/plugin-transform-typeof-symbol" "^7.12.1"
1165 + "@babel/plugin-transform-unicode-escapes" "^7.12.1"
1166 + "@babel/plugin-transform-unicode-regex" "^7.12.1"
1167 + "@babel/preset-modules" "^0.1.3"
1168 + "@babel/types" "^7.12.1"
1169 + "core-js-compat" "^3.6.2"
1170 + "semver" "^5.5.0"
1171 +
1172 +"@babel/preset-modules@^0.1.3", "@babel/preset-modules@^0.1.4":
1173 + "integrity" "sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA=="
1174 + "resolved" "https://registry.yarnpkg.com/@babel/preset-modules/-/preset-modules-0.1.5.tgz"
1175 + "version" "0.1.5"
1176 + dependencies:
1177 + "@babel/helper-plugin-utils" "^7.0.0"
1178 + "@babel/plugin-proposal-unicode-property-regex" "^7.4.4"
1179 + "@babel/plugin-transform-dotall-regex" "^7.4.4"
1180 + "@babel/types" "^7.4.4"
1181 + "esutils" "^2.0.2"
1182 +
1183 +"@babel/preset-react@^7.12.5":
1184 + "integrity" "sha512-XFxBkjyObLvBaAvkx1Ie95Iaq4S/GUEIrejyrntQ/VCMKUYvKLoyKxOBzJ2kjA3b6rC9/KL6KXfDC2GqvLiNqQ=="
1185 + "resolved" "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.14.5.tgz"
1186 + "version" "7.14.5"
1187 + dependencies:
1188 + "@babel/helper-plugin-utils" "^7.14.5"
1189 + "@babel/helper-validator-option" "^7.14.5"
1190 + "@babel/plugin-transform-react-display-name" "^7.14.5"
1191 + "@babel/plugin-transform-react-jsx" "^7.14.5"
1192 + "@babel/plugin-transform-react-jsx-development" "^7.14.5"
1193 + "@babel/plugin-transform-react-pure-annotations" "^7.14.5"
1194 +
1195 +"@babel/preset-react@7.12.1":
1196 + "integrity" "sha512-euCExymHCi0qB9u5fKw7rvlw7AZSjw/NaB9h7EkdTt5+yHRrXdiRTh7fkG3uBPpJg82CqLfp1LHLqWGSCrab+g=="
1197 + "resolved" "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.12.1.tgz"
1198 + "version" "7.12.1"
1199 + dependencies:
1200 + "@babel/helper-plugin-utils" "^7.10.4"
1201 + "@babel/plugin-transform-react-display-name" "^7.12.1"
1202 + "@babel/plugin-transform-react-jsx" "^7.12.1"
1203 + "@babel/plugin-transform-react-jsx-development" "^7.12.1"
1204 + "@babel/plugin-transform-react-jsx-self" "^7.12.1"
1205 + "@babel/plugin-transform-react-jsx-source" "^7.12.1"
1206 + "@babel/plugin-transform-react-pure-annotations" "^7.12.1"
1207 +
1208 +"@babel/preset-typescript@7.12.1":
1209 + "integrity" "sha512-hNK/DhmoJPsksdHuI/RVrcEws7GN5eamhi28JkO52MqIxU8Z0QpmiSOQxZHWOHV7I3P4UjHV97ay4TcamMA6Kw=="
1210 + "resolved" "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.12.1.tgz"
1211 + "version" "7.12.1"
1212 + dependencies:
1213 + "@babel/helper-plugin-utils" "^7.10.4"
1214 + "@babel/plugin-transform-typescript" "^7.12.1"
1215 +
1216 +"@babel/runtime-corejs3@^7.10.2":
1217 + "integrity" "sha512-lWcAqKeB624/twtTc3w6w/2o9RqJPaNBhPGK6DKLSiwuVWC7WFkypWyNg+CpZoyJH0jVzv1uMtXZ/5/lQOLtCg=="
1218 + "resolved" "https://registry.yarnpkg.com/@babel/runtime-corejs3/-/runtime-corejs3-7.15.4.tgz"
1219 + "version" "7.15.4"
1220 + dependencies:
1221 + "core-js-pure" "^3.16.0"
1222 + "regenerator-runtime" "^0.13.4"
1223 +
1224 +"@babel/runtime@^7.10.2":
1225 + "integrity" "sha512-99catp6bHCaxr4sJ/DbTGgHS4+Rs2RVd2g7iOap6SLGPDknRK9ztKNsE/Fg6QhSeh1FGE5f6gHGQmvvn3I3xhw=="
1226 + "resolved" "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.15.4.tgz"
1227 + "version" "7.15.4"
1228 + dependencies:
1229 + "regenerator-runtime" "^0.13.4"
1230 +
1231 +"@babel/runtime@^7.11.2":
1232 + "integrity" "sha512-99catp6bHCaxr4sJ/DbTGgHS4+Rs2RVd2g7iOap6SLGPDknRK9ztKNsE/Fg6QhSeh1FGE5f6gHGQmvvn3I3xhw=="
1233 + "resolved" "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.15.4.tgz"
1234 + "version" "7.15.4"
1235 + dependencies:
1236 + "regenerator-runtime" "^0.13.4"
1237 +
1238 +"@babel/runtime@^7.5.5":
1239 + "integrity" "sha512-99catp6bHCaxr4sJ/DbTGgHS4+Rs2RVd2g7iOap6SLGPDknRK9ztKNsE/Fg6QhSeh1FGE5f6gHGQmvvn3I3xhw=="
1240 + "resolved" "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.15.4.tgz"
1241 + "version" "7.15.4"
1242 + dependencies:
1243 + "regenerator-runtime" "^0.13.4"
1244 +
1245 +"@babel/runtime@^7.7.2":
1246 + "integrity" "sha512-99catp6bHCaxr4sJ/DbTGgHS4+Rs2RVd2g7iOap6SLGPDknRK9ztKNsE/Fg6QhSeh1FGE5f6gHGQmvvn3I3xhw=="
1247 + "resolved" "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.15.4.tgz"
1248 + "version" "7.15.4"
1249 + dependencies:
1250 + "regenerator-runtime" "^0.13.4"
1251 +
1252 +"@babel/runtime@^7.8.4":
1253 + "integrity" "sha512-99catp6bHCaxr4sJ/DbTGgHS4+Rs2RVd2g7iOap6SLGPDknRK9ztKNsE/Fg6QhSeh1FGE5f6gHGQmvvn3I3xhw=="
1254 + "resolved" "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.15.4.tgz"
1255 + "version" "7.15.4"
1256 + dependencies:
1257 + "regenerator-runtime" "^0.13.4"
1258 +
1259 +"@babel/runtime@7.12.1":
1260 + "integrity" "sha512-J5AIf3vPj3UwXaAzb5j1xM4WAQDX3EMgemF8rjCP3SoW09LfRKAXQKt6CoVYl230P6iWdRcBbnLDDdnqWxZSCA=="
1261 + "resolved" "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.12.1.tgz"
1262 + "version" "7.12.1"
1263 + dependencies:
1264 + "regenerator-runtime" "^0.13.4"
1265 +
1266 +"@babel/runtime@7.13.8":
1267 + "integrity" "sha512-CwQljpw6qSayc0fRG1soxHAKs1CnQMOChm4mlQP6My0kf9upVGizj/KhlTTgyUnETmHpcUXjaluNAkteRFuafg=="
1268 + "resolved" "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.13.8.tgz"
1269 + "version" "7.13.8"
1270 + dependencies:
1271 + "regenerator-runtime" "^0.13.4"
1272 +
1273 +"@babel/template@^7.10.4", "@babel/template@^7.15.4", "@babel/template@^7.3.3":
1274 + "integrity" "sha512-UgBAfEa1oGuYgDIPM2G+aHa4Nlo9Lh6mGD2bDBGMTbYnc38vulXPuC1MGjYILIEmlwl6Rd+BPR9ee3gm20CBtg=="
1275 + "resolved" "https://registry.yarnpkg.com/@babel/template/-/template-7.15.4.tgz"
1276 + "version" "7.15.4"
1277 + dependencies:
1278 + "@babel/code-frame" "^7.14.5"
1279 + "@babel/parser" "^7.15.4"
1280 + "@babel/types" "^7.15.4"
1281 +
1282 +"@babel/traverse@^7.1.0", "@babel/traverse@^7.12.1", "@babel/traverse@^7.13.0", "@babel/traverse@^7.15.4", "@babel/traverse@^7.7.0":
1283 + "integrity" "sha512-W6lQD8l4rUbQR/vYgSuCAE75ADyyQvOpFVsvPPdkhf6lATXAsQIG9YdtOcu8BB1dZ0LKu+Zo3c1wEcbKeuhdlA=="
1284 + "resolved" "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.15.4.tgz"
1285 + "version" "7.15.4"
1286 + dependencies:
1287 + "@babel/code-frame" "^7.14.5"
1288 + "@babel/generator" "^7.15.4"
1289 + "@babel/helper-function-name" "^7.15.4"
1290 + "@babel/helper-hoist-variables" "^7.15.4"
1291 + "@babel/helper-split-export-declaration" "^7.15.4"
1292 + "@babel/parser" "^7.15.4"
1293 + "@babel/types" "^7.15.4"
1294 + "debug" "^4.1.0"
1295 + "globals" "^11.1.0"
1296 +
1297 +"@babel/types@^7.0.0", "@babel/types@^7.12.1", "@babel/types@^7.12.6", "@babel/types@^7.14.9", "@babel/types@^7.15.4", "@babel/types@^7.15.6", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4", "@babel/types@^7.7.0":
1298 + "integrity" "sha512-BPU+7QhqNjmWyDO0/vitH/CuhpV8ZmK1wpKva8nuyNF5MJfuRNWMc+hc14+u9xT93kvykMdncrJT19h74uB1Ig=="
1299 + "resolved" "https://registry.yarnpkg.com/@babel/types/-/types-7.15.6.tgz"
1300 + "version" "7.15.6"
1301 + dependencies:
1302 + "@babel/helper-validator-identifier" "^7.14.9"
1303 + "to-fast-properties" "^2.0.0"
1304 +
1305 +"@bcoe/v8-coverage@^0.2.3":
1306 + "integrity" "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw=="
1307 + "resolved" "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz"
1308 + "version" "0.2.3"
1309 +
1310 +"@cnakazawa/watch@^1.0.3":
1311 + "integrity" "sha512-v9kIhKwjeZThiWrLmj0y17CWoyddASLj9O2yvbZkbvw/N3rWOYy9zkV66ursAoVr0mV15bL8g0c4QZUE6cdDoQ=="
1312 + "resolved" "https://registry.yarnpkg.com/@cnakazawa/watch/-/watch-1.0.4.tgz"
1313 + "version" "1.0.4"
1314 + dependencies:
1315 + "exec-sh" "^0.3.2"
1316 + "minimist" "^1.2.0"
1317 +
1318 +"@csstools/convert-colors@^1.4.0":
1319 + "integrity" "sha512-5a6wqoJV/xEdbRNKVo6I4hO3VjyDq//8q2f9I6PBAvMesJHFauXDorcNCsr9RzvsZnaWi5NYCcfyqP1QeFHFbw=="
1320 + "resolved" "https://registry.yarnpkg.com/@csstools/convert-colors/-/convert-colors-1.4.0.tgz"
1321 + "version" "1.4.0"
1322 +
1323 +"@csstools/normalize.css@^10.1.0":
1324 + "integrity" "sha512-ij4wRiunFfaJxjB0BdrYHIH8FxBJpOwNPhhAcunlmPdXudL1WQV1qoP9un6JsEBAgQH+7UXyyjh0g7jTxXK6tg=="
1325 + "resolved" "https://registry.yarnpkg.com/@csstools/normalize.css/-/normalize.css-10.1.0.tgz"
1326 + "version" "10.1.0"
1327 +
1328 +"@eslint/eslintrc@^0.4.3":
1329 + "integrity" "sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw=="
1330 + "resolved" "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.4.3.tgz"
1331 + "version" "0.4.3"
1332 + dependencies:
1333 + "ajv" "^6.12.4"
1334 + "debug" "^4.1.1"
1335 + "espree" "^7.3.0"
1336 + "globals" "^13.9.0"
1337 + "ignore" "^4.0.6"
1338 + "import-fresh" "^3.2.1"
1339 + "js-yaml" "^3.13.1"
1340 + "minimatch" "^3.0.4"
1341 + "strip-json-comments" "^3.1.1"
1342 +
1343 +"@gar/promisify@^1.0.1":
1344 + "integrity" "sha512-82cpyJyKRoQoRi+14ibCeGPu0CwypgtBAdBhq1WfvagpCZNKqwXbKwXllYSMG91DhmG4jt9gN8eP6lGOtozuaw=="
1345 + "resolved" "https://registry.yarnpkg.com/@gar/promisify/-/promisify-1.1.2.tgz"
1346 + "version" "1.1.2"
1347 +
1348 +"@hapi/address@2.x.x":
1349 + "integrity" "sha512-QD1PhQk+s31P1ixsX0H0Suoupp3VMXzIVMSwobR3F3MSUO2YCV0B7xqLcUw/Bh8yuvd3LhpyqLQWTNcRmp6IdQ=="
1350 + "resolved" "https://registry.yarnpkg.com/@hapi/address/-/address-2.1.4.tgz"
1351 + "version" "2.1.4"
1352 +
1353 +"@hapi/bourne@1.x.x":
1354 + "integrity" "sha512-1dVNHT76Uu5N3eJNTYcvxee+jzX4Z9lfciqRRHCU27ihbUcYi+iSc2iml5Ke1LXe1SyJCLA0+14Jh4tXJgOppA=="
1355 + "resolved" "https://registry.yarnpkg.com/@hapi/bourne/-/bourne-1.3.2.tgz"
1356 + "version" "1.3.2"
1357 +
1358 +"@hapi/hoek@^8.3.0", "@hapi/hoek@8.x.x":
1359 + "integrity" "sha512-yN7kbciD87WzLGc5539Tn0sApjyiGHAJgKvG9W8C7O+6c7qmoQMfVs0W4bX17eqz6C78QJqqFrtgdK5EWf6Qow=="
1360 + "resolved" "https://registry.yarnpkg.com/@hapi/hoek/-/hoek-8.5.1.tgz"
1361 + "version" "8.5.1"
1362 +
1363 +"@hapi/joi@^15.1.0":
1364 + "integrity" "sha512-entf8ZMOK8sc+8YfeOlM8pCfg3b5+WZIKBfUaaJT8UsjAAPjartzxIYm3TIbjvA4u+u++KbcXD38k682nVHDAQ=="
1365 + "resolved" "https://registry.yarnpkg.com/@hapi/joi/-/joi-15.1.1.tgz"
1366 + "version" "15.1.1"
1367 + dependencies:
1368 + "@hapi/address" "2.x.x"
1369 + "@hapi/bourne" "1.x.x"
1370 + "@hapi/hoek" "8.x.x"
1371 + "@hapi/topo" "3.x.x"
1372 +
1373 +"@hapi/topo@3.x.x":
1374 + "integrity" "sha512-tAag0jEcjwH+P2quUfipd7liWCNX2F8NvYjQp2wtInsZxnMlypdw0FtAOLxtvvkO+GSRRbmNi8m/5y42PQJYCQ=="
1375 + "resolved" "https://registry.yarnpkg.com/@hapi/topo/-/topo-3.1.6.tgz"
1376 + "version" "3.1.6"
1377 + dependencies:
1378 + "@hapi/hoek" "^8.3.0"
1379 +
1380 +"@humanwhocodes/config-array@^0.5.0":
1381 + "integrity" "sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg=="
1382 + "resolved" "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.5.0.tgz"
1383 + "version" "0.5.0"
1384 + dependencies:
1385 + "@humanwhocodes/object-schema" "^1.2.0"
1386 + "debug" "^4.1.1"
1387 + "minimatch" "^3.0.4"
1388 +
1389 +"@humanwhocodes/object-schema@^1.2.0":
1390 + "integrity" "sha512-wdppn25U8z/2yiaT6YGquE6X8sSv7hNMWSXYSSU1jGv/yd6XqjXgTDJ8KP4NgjTXfJ3GbRjeeb8RTV7a/VpM+w=="
1391 + "resolved" "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.0.tgz"
1392 + "version" "1.2.0"
1393 +
1394 +"@istanbuljs/load-nyc-config@^1.0.0":
1395 + "integrity" "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ=="
1396 + "resolved" "https://registry.yarnpkg.com/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz"
1397 + "version" "1.1.0"
1398 + dependencies:
1399 + "camelcase" "^5.3.1"
1400 + "find-up" "^4.1.0"
1401 + "get-package-type" "^0.1.0"
1402 + "js-yaml" "^3.13.1"
1403 + "resolve-from" "^5.0.0"
1404 +
1405 +"@istanbuljs/schema@^0.1.2":
1406 + "integrity" "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA=="
1407 + "resolved" "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.3.tgz"
1408 + "version" "0.1.3"
1409 +
1410 +"@jest/console@^26.6.2":
1411 + "integrity" "sha512-IY1R2i2aLsLr7Id3S6p2BA82GNWryt4oSvEXLAKc+L2zdi89dSkE8xC1C+0kpATG4JhBJREnQOH7/zmccM2B0g=="
1412 + "resolved" "https://registry.yarnpkg.com/@jest/console/-/console-26.6.2.tgz"
1413 + "version" "26.6.2"
1414 + dependencies:
1415 + "@jest/types" "^26.6.2"
1416 + "@types/node" "*"
1417 + "chalk" "^4.0.0"
1418 + "jest-message-util" "^26.6.2"
1419 + "jest-util" "^26.6.2"
1420 + "slash" "^3.0.0"
1421 +
1422 +"@jest/core@^26.6.0", "@jest/core@^26.6.3":
1423 + "integrity" "sha512-xvV1kKbhfUqFVuZ8Cyo+JPpipAHHAV3kcDBftiduK8EICXmTFddryy3P7NfZt8Pv37rA9nEJBKCCkglCPt/Xjw=="
1424 + "resolved" "https://registry.yarnpkg.com/@jest/core/-/core-26.6.3.tgz"
1425 + "version" "26.6.3"
1426 + dependencies:
1427 + "@jest/console" "^26.6.2"
1428 + "@jest/reporters" "^26.6.2"
1429 + "@jest/test-result" "^26.6.2"
1430 + "@jest/transform" "^26.6.2"
1431 + "@jest/types" "^26.6.2"
1432 + "@types/node" "*"
1433 + "ansi-escapes" "^4.2.1"
1434 + "chalk" "^4.0.0"
1435 + "exit" "^0.1.2"
1436 + "graceful-fs" "^4.2.4"
1437 + "jest-changed-files" "^26.6.2"
1438 + "jest-config" "^26.6.3"
1439 + "jest-haste-map" "^26.6.2"
1440 + "jest-message-util" "^26.6.2"
1441 + "jest-regex-util" "^26.0.0"
1442 + "jest-resolve" "^26.6.2"
1443 + "jest-resolve-dependencies" "^26.6.3"
1444 + "jest-runner" "^26.6.3"
1445 + "jest-runtime" "^26.6.3"
1446 + "jest-snapshot" "^26.6.2"
1447 + "jest-util" "^26.6.2"
1448 + "jest-validate" "^26.6.2"
1449 + "jest-watcher" "^26.6.2"
1450 + "micromatch" "^4.0.2"
1451 + "p-each-series" "^2.1.0"
1452 + "rimraf" "^3.0.0"
1453 + "slash" "^3.0.0"
1454 + "strip-ansi" "^6.0.0"
1455 +
1456 +"@jest/environment@^26.6.0", "@jest/environment@^26.6.2":
1457 + "integrity" "sha512-nFy+fHl28zUrRsCeMB61VDThV1pVTtlEokBRgqPrcT1JNq4yRNIyTHfyht6PqtUvY9IsuLGTrbG8kPXjSZIZwA=="
1458 + "resolved" "https://registry.yarnpkg.com/@jest/environment/-/environment-26.6.2.tgz"
1459 + "version" "26.6.2"
1460 + dependencies:
1461 + "@jest/fake-timers" "^26.6.2"
1462 + "@jest/types" "^26.6.2"
1463 + "@types/node" "*"
1464 + "jest-mock" "^26.6.2"
1465 +
1466 +"@jest/fake-timers@^26.6.2":
1467 + "integrity" "sha512-14Uleatt7jdzefLPYM3KLcnUl1ZNikaKq34enpb5XG9i81JpppDb5muZvonvKyrl7ftEHkKS5L5/eB/kxJ+bvA=="
1468 + "resolved" "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-26.6.2.tgz"
1469 + "version" "26.6.2"
1470 + dependencies:
1471 + "@jest/types" "^26.6.2"
1472 + "@sinonjs/fake-timers" "^6.0.1"
1473 + "@types/node" "*"
1474 + "jest-message-util" "^26.6.2"
1475 + "jest-mock" "^26.6.2"
1476 + "jest-util" "^26.6.2"
1477 +
1478 +"@jest/globals@^26.6.2":
1479 + "integrity" "sha512-85Ltnm7HlB/KesBUuALwQ68YTU72w9H2xW9FjZ1eL1U3lhtefjjl5c2MiUbpXt/i6LaPRvoOFJ22yCBSfQ0JIA=="
1480 + "resolved" "https://registry.yarnpkg.com/@jest/globals/-/globals-26.6.2.tgz"
1481 + "version" "26.6.2"
1482 + dependencies:
1483 + "@jest/environment" "^26.6.2"
1484 + "@jest/types" "^26.6.2"
1485 + "expect" "^26.6.2"
1486 +
1487 +"@jest/reporters@^26.6.2":
1488 + "integrity" "sha512-h2bW53APG4HvkOnVMo8q3QXa6pcaNt1HkwVsOPMBV6LD/q9oSpxNSYZQYkAnjdMjrJ86UuYeLo+aEZClV6opnw=="
1489 + "resolved" "https://registry.yarnpkg.com/@jest/reporters/-/reporters-26.6.2.tgz"
1490 + "version" "26.6.2"
1491 + dependencies:
1492 + "@bcoe/v8-coverage" "^0.2.3"
1493 + "@jest/console" "^26.6.2"
1494 + "@jest/test-result" "^26.6.2"
1495 + "@jest/transform" "^26.6.2"
1496 + "@jest/types" "^26.6.2"
1497 + "chalk" "^4.0.0"
1498 + "collect-v8-coverage" "^1.0.0"
1499 + "exit" "^0.1.2"
1500 + "glob" "^7.1.2"
1501 + "graceful-fs" "^4.2.4"
1502 + "istanbul-lib-coverage" "^3.0.0"
1503 + "istanbul-lib-instrument" "^4.0.3"
1504 + "istanbul-lib-report" "^3.0.0"
1505 + "istanbul-lib-source-maps" "^4.0.0"
1506 + "istanbul-reports" "^3.0.2"
1507 + "jest-haste-map" "^26.6.2"
1508 + "jest-resolve" "^26.6.2"
1509 + "jest-util" "^26.6.2"
1510 + "jest-worker" "^26.6.2"
1511 + "slash" "^3.0.0"
1512 + "source-map" "^0.6.0"
1513 + "string-length" "^4.0.1"
1514 + "terminal-link" "^2.0.0"
1515 + "v8-to-istanbul" "^7.0.0"
1516 + optionalDependencies:
1517 + "node-notifier" "^8.0.0"
1518 +
1519 +"@jest/source-map@^26.6.2":
1520 + "integrity" "sha512-YwYcCwAnNmOVsZ8mr3GfnzdXDAl4LaenZP5z+G0c8bzC9/dugL8zRmxZzdoTl4IaS3CryS1uWnROLPFmb6lVvA=="
1521 + "resolved" "https://registry.yarnpkg.com/@jest/source-map/-/source-map-26.6.2.tgz"
1522 + "version" "26.6.2"
1523 + dependencies:
1524 + "callsites" "^3.0.0"
1525 + "graceful-fs" "^4.2.4"
1526 + "source-map" "^0.6.0"
1527 +
1528 +"@jest/test-result@^26.6.0", "@jest/test-result@^26.6.2":
1529 + "integrity" "sha512-5O7H5c/7YlojphYNrK02LlDIV2GNPYisKwHm2QTKjNZeEzezCbwYs9swJySv2UfPMyZ0VdsmMv7jIlD/IKYQpQ=="
1530 + "resolved" "https://registry.yarnpkg.com/@jest/test-result/-/test-result-26.6.2.tgz"
1531 + "version" "26.6.2"
1532 + dependencies:
1533 + "@jest/console" "^26.6.2"
1534 + "@jest/types" "^26.6.2"
1535 + "@types/istanbul-lib-coverage" "^2.0.0"
1536 + "collect-v8-coverage" "^1.0.0"
1537 +
1538 +"@jest/test-sequencer@^26.6.3":
1539 + "integrity" "sha512-YHlVIjP5nfEyjlrSr8t/YdNfU/1XEt7c5b4OxcXCjyRhjzLYu/rO69/WHPuYcbCWkz8kAeZVZp2N2+IOLLEPGw=="
1540 + "resolved" "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-26.6.3.tgz"
1541 + "version" "26.6.3"
1542 + dependencies:
1543 + "@jest/test-result" "^26.6.2"
1544 + "graceful-fs" "^4.2.4"
1545 + "jest-haste-map" "^26.6.2"
1546 + "jest-runner" "^26.6.3"
1547 + "jest-runtime" "^26.6.3"
1548 +
1549 +"@jest/transform@^26.6.2":
1550 + "integrity" "sha512-E9JjhUgNzvuQ+vVAL21vlyfy12gP0GhazGgJC4h6qUt1jSdUXGWJ1wfu/X7Sd8etSgxV4ovT1pb9v5D6QW4XgA=="
1551 + "resolved" "https://registry.yarnpkg.com/@jest/transform/-/transform-26.6.2.tgz"
1552 + "version" "26.6.2"
1553 + dependencies:
1554 + "@babel/core" "^7.1.0"
1555 + "@jest/types" "^26.6.2"
1556 + "babel-plugin-istanbul" "^6.0.0"
1557 + "chalk" "^4.0.0"
1558 + "convert-source-map" "^1.4.0"
1559 + "fast-json-stable-stringify" "^2.0.0"
1560 + "graceful-fs" "^4.2.4"
1561 + "jest-haste-map" "^26.6.2"
1562 + "jest-regex-util" "^26.0.0"
1563 + "jest-util" "^26.6.2"
1564 + "micromatch" "^4.0.2"
1565 + "pirates" "^4.0.1"
1566 + "slash" "^3.0.0"
1567 + "source-map" "^0.6.1"
1568 + "write-file-atomic" "^3.0.0"
1569 +
1570 +"@jest/types@^26.6.0", "@jest/types@^26.6.2":
1571 + "integrity" "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ=="
1572 + "resolved" "https://registry.yarnpkg.com/@jest/types/-/types-26.6.2.tgz"
1573 + "version" "26.6.2"
1574 + dependencies:
1575 + "@types/istanbul-lib-coverage" "^2.0.0"
1576 + "@types/istanbul-reports" "^3.0.0"
1577 + "@types/node" "*"
1578 + "@types/yargs" "^15.0.0"
1579 + "chalk" "^4.0.0"
1580 +
1581 +"@nicolo-ribaudo/chokidar-2@2.1.8-no-fsevents.3":
1582 + "integrity" "sha512-s88O1aVtXftvp5bCPB7WnmXc5IwOZZ7YPuwNPt+GtOOXpPvad1LfbmjYv+qII7zP6RU2QGnqve27dnLycEnyEQ=="
1583 + "resolved" "https://registry.yarnpkg.com/@nicolo-ribaudo/chokidar-2/-/chokidar-2-2.1.8-no-fsevents.3.tgz"
1584 + "version" "2.1.8-no-fsevents.3"
1585 +
1586 +"@nodelib/fs.scandir@2.1.5":
1587 + "integrity" "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g=="
1588 + "resolved" "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz"
1589 + "version" "2.1.5"
1590 + dependencies:
1591 + "@nodelib/fs.stat" "2.0.5"
1592 + "run-parallel" "^1.1.9"
1593 +
1594 +"@nodelib/fs.stat@^2.0.2", "@nodelib/fs.stat@2.0.5":
1595 + "integrity" "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A=="
1596 + "resolved" "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz"
1597 + "version" "2.0.5"
1598 +
1599 +"@nodelib/fs.walk@^1.2.3":
1600 + "integrity" "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg=="
1601 + "resolved" "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz"
1602 + "version" "1.2.8"
1603 + dependencies:
1604 + "@nodelib/fs.scandir" "2.1.5"
1605 + "fastq" "^1.6.0"
1606 +
1607 +"@npmcli/fs@^1.0.0":
1608 + "integrity" "sha512-8ltnOpRR/oJbOp8vaGUnipOi3bqkcW+sLHFlyXIr08OGHmVJLB1Hn7QtGXbYcpVtH1gAYZTlmDXtE4YV0+AMMQ=="
1609 + "resolved" "https://registry.yarnpkg.com/@npmcli/fs/-/fs-1.0.0.tgz"
1610 + "version" "1.0.0"
1611 + dependencies:
1612 + "@gar/promisify" "^1.0.1"
1613 + "semver" "^7.3.5"
1614 +
1615 +"@npmcli/move-file@^1.0.1":
1616 + "integrity" "sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg=="
1617 + "resolved" "https://registry.yarnpkg.com/@npmcli/move-file/-/move-file-1.1.2.tgz"
1618 + "version" "1.1.2"
1619 + dependencies:
1620 + "mkdirp" "^1.0.4"
1621 + "rimraf" "^3.0.2"
1622 +
1623 +"@pmmmwh/react-refresh-webpack-plugin@0.4.3":
1624 + "integrity" "sha512-br5Qwvh8D2OQqSXpd1g/xqXKnK0r+Jz6qVKBbWmpUcrbGOxUrf39V5oZ1876084CGn18uMdR5uvPqBv9UqtBjQ=="
1625 + "resolved" "https://registry.yarnpkg.com/@pmmmwh/react-refresh-webpack-plugin/-/react-refresh-webpack-plugin-0.4.3.tgz"
1626 + "version" "0.4.3"
1627 + dependencies:
1628 + "ansi-html" "^0.0.7"
1629 + "error-stack-parser" "^2.0.6"
1630 + "html-entities" "^1.2.1"
1631 + "native-url" "^0.2.6"
1632 + "schema-utils" "^2.6.5"
1633 + "source-map" "^0.7.3"
1634 +
1635 +"@rollup/plugin-node-resolve@^7.1.1":
1636 + "integrity" "sha512-RxtSL3XmdTAE2byxekYLnx+98kEUOrPHF/KRVjLH+DEIHy6kjIw7YINQzn+NXiH/NTrQLAwYs0GWB+csWygA9Q=="
1637 + "resolved" "https://registry.yarnpkg.com/@rollup/plugin-node-resolve/-/plugin-node-resolve-7.1.3.tgz"
1638 + "version" "7.1.3"
1639 + dependencies:
1640 + "@rollup/pluginutils" "^3.0.8"
1641 + "@types/resolve" "0.0.8"
1642 + "builtin-modules" "^3.1.0"
1643 + "is-module" "^1.0.0"
1644 + "resolve" "^1.14.2"
1645 +
1646 +"@rollup/plugin-replace@^2.3.1":
1647 + "integrity" "sha512-IGcu+cydlUMZ5En85jxHH4qj2hta/11BHq95iHEyb2sbgiN0eCdzvUcHw5gt9pBL5lTi4JDYJ1acCoMGpTvEZg=="
1648 + "resolved" "https://registry.yarnpkg.com/@rollup/plugin-replace/-/plugin-replace-2.4.2.tgz"
1649 + "version" "2.4.2"
1650 + dependencies:
1651 + "@rollup/pluginutils" "^3.1.0"
1652 + "magic-string" "^0.25.7"
1653 +
1654 +"@rollup/pluginutils@^3.0.8", "@rollup/pluginutils@^3.1.0":
1655 + "integrity" "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg=="
1656 + "resolved" "https://registry.yarnpkg.com/@rollup/pluginutils/-/pluginutils-3.1.0.tgz"
1657 + "version" "3.1.0"
1658 + dependencies:
1659 + "@types/estree" "0.0.39"
1660 + "estree-walker" "^1.0.1"
1661 + "picomatch" "^2.2.2"
1662 +
1663 +"@sinonjs/commons@^1.7.0":
1664 + "integrity" "sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ=="
1665 + "resolved" "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-1.8.3.tgz"
1666 + "version" "1.8.3"
1667 + dependencies:
1668 + "type-detect" "4.0.8"
1669 +
1670 +"@sinonjs/fake-timers@^6.0.1":
1671 + "integrity" "sha512-MZPUxrmFubI36XS1DI3qmI0YdN1gks62JtFZvxR67ljjSNCeK6U08Zx4msEWOXuofgqUt6zPHSi1H9fbjR/NRA=="
1672 + "resolved" "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-6.0.1.tgz"
1673 + "version" "6.0.1"
1674 + dependencies:
1675 + "@sinonjs/commons" "^1.7.0"
1676 +
1677 +"@surma/rollup-plugin-off-main-thread@^1.1.1":
1678 + "integrity" "sha512-yBMPqmd1yEJo/280PAMkychuaALyQ9Lkb5q1ck3mjJrFuEobIfhnQ4J3mbvBoISmR3SWMWV+cGB/I0lCQee79A=="
1679 + "resolved" "https://registry.yarnpkg.com/@surma/rollup-plugin-off-main-thread/-/rollup-plugin-off-main-thread-1.4.2.tgz"
1680 + "version" "1.4.2"
1681 + dependencies:
1682 + "ejs" "^2.6.1"
1683 + "magic-string" "^0.25.0"
1684 +
1685 +"@svgr/babel-plugin-add-jsx-attribute@^5.4.0":
1686 + "integrity" "sha512-ZFf2gs/8/6B8PnSofI0inYXr2SDNTDScPXhN7k5EqD4aZ3gi6u+rbmZHVB8IM3wDyx8ntKACZbtXSm7oZGRqVg=="
1687 + "resolved" "https://registry.yarnpkg.com/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-5.4.0.tgz"
1688 + "version" "5.4.0"
1689 +
1690 +"@svgr/babel-plugin-remove-jsx-attribute@^5.4.0":
1691 + "integrity" "sha512-yaS4o2PgUtwLFGTKbsiAy6D0o3ugcUhWK0Z45umJ66EPWunAz9fuFw2gJuje6wqQvQWOTJvIahUwndOXb7QCPg=="
1692 + "resolved" "https://registry.yarnpkg.com/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-5.4.0.tgz"
1693 + "version" "5.4.0"
1694 +
1695 +"@svgr/babel-plugin-remove-jsx-empty-expression@^5.0.1":
1696 + "integrity" "sha512-LA72+88A11ND/yFIMzyuLRSMJ+tRKeYKeQ+mR3DcAZ5I4h5CPWN9AHyUzJbWSYp/u2u0xhmgOe0+E41+GjEueA=="
1697 + "resolved" "https://registry.yarnpkg.com/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-5.0.1.tgz"
1698 + "version" "5.0.1"
1699 +
1700 +"@svgr/babel-plugin-replace-jsx-attribute-value@^5.0.1":
1701 + "integrity" "sha512-PoiE6ZD2Eiy5mK+fjHqwGOS+IXX0wq/YDtNyIgOrc6ejFnxN4b13pRpiIPbtPwHEc+NT2KCjteAcq33/F1Y9KQ=="
1702 + "resolved" "https://registry.yarnpkg.com/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-5.0.1.tgz"
1703 + "version" "5.0.1"
1704 +
1705 +"@svgr/babel-plugin-svg-dynamic-title@^5.4.0":
1706 + "integrity" "sha512-zSOZH8PdZOpuG1ZVx/cLVePB2ibo3WPpqo7gFIjLV9a0QsuQAzJiwwqmuEdTaW2pegyBE17Uu15mOgOcgabQZg=="
1707 + "resolved" "https://registry.yarnpkg.com/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-5.4.0.tgz"
1708 + "version" "5.4.0"
1709 +
1710 +"@svgr/babel-plugin-svg-em-dimensions@^5.4.0":
1711 + "integrity" "sha512-cPzDbDA5oT/sPXDCUYoVXEmm3VIoAWAPT6mSPTJNbQaBNUuEKVKyGH93oDY4e42PYHRW67N5alJx/eEol20abw=="
1712 + "resolved" "https://registry.yarnpkg.com/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-5.4.0.tgz"
1713 + "version" "5.4.0"
1714 +
1715 +"@svgr/babel-plugin-transform-react-native-svg@^5.4.0":
1716 + "integrity" "sha512-3eYP/SaopZ41GHwXma7Rmxcv9uRslRDTY1estspeB1w1ueZWd/tPlMfEOoccYpEMZU3jD4OU7YitnXcF5hLW2Q=="
1717 + "resolved" "https://registry.yarnpkg.com/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-5.4.0.tgz"
1718 + "version" "5.4.0"
1719 +
1720 +"@svgr/babel-plugin-transform-svg-component@^5.5.0":
1721 + "integrity" "sha512-q4jSH1UUvbrsOtlo/tKcgSeiCHRSBdXoIoqX1pgcKK/aU3JD27wmMKwGtpB8qRYUYoyXvfGxUVKchLuR5pB3rQ=="
1722 + "resolved" "https://registry.yarnpkg.com/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-5.5.0.tgz"
1723 + "version" "5.5.0"
1724 +
1725 +"@svgr/babel-preset@^5.5.0":
1726 + "integrity" "sha512-4FiXBjvQ+z2j7yASeGPEi8VD/5rrGQk4Xrq3EdJmoZgz/tpqChpo5hgXDvmEauwtvOc52q8ghhZK4Oy7qph4ig=="
1727 + "resolved" "https://registry.yarnpkg.com/@svgr/babel-preset/-/babel-preset-5.5.0.tgz"
1728 + "version" "5.5.0"
1729 + dependencies:
1730 + "@svgr/babel-plugin-add-jsx-attribute" "^5.4.0"
1731 + "@svgr/babel-plugin-remove-jsx-attribute" "^5.4.0"
1732 + "@svgr/babel-plugin-remove-jsx-empty-expression" "^5.0.1"
1733 + "@svgr/babel-plugin-replace-jsx-attribute-value" "^5.0.1"
1734 + "@svgr/babel-plugin-svg-dynamic-title" "^5.4.0"
1735 + "@svgr/babel-plugin-svg-em-dimensions" "^5.4.0"
1736 + "@svgr/babel-plugin-transform-react-native-svg" "^5.4.0"
1737 + "@svgr/babel-plugin-transform-svg-component" "^5.5.0"
1738 +
1739 +"@svgr/core@^5.5.0":
1740 + "integrity" "sha512-q52VOcsJPvV3jO1wkPtzTuKlvX7Y3xIcWRpCMtBF3MrteZJtBfQw/+u0B1BHy5ColpQc1/YVTrPEtSYIMNZlrQ=="
1741 + "resolved" "https://registry.yarnpkg.com/@svgr/core/-/core-5.5.0.tgz"
1742 + "version" "5.5.0"
1743 + dependencies:
1744 + "@svgr/plugin-jsx" "^5.5.0"
1745 + "camelcase" "^6.2.0"
1746 + "cosmiconfig" "^7.0.0"
1747 +
1748 +"@svgr/hast-util-to-babel-ast@^5.5.0":
1749 + "integrity" "sha512-cAaR/CAiZRB8GP32N+1jocovUtvlj0+e65TB50/6Lcime+EA49m/8l+P2ko+XPJ4dw3xaPS3jOL4F2X4KWxoeQ=="
1750 + "resolved" "https://registry.yarnpkg.com/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-5.5.0.tgz"
1751 + "version" "5.5.0"
1752 + dependencies:
1753 + "@babel/types" "^7.12.6"
1754 +
1755 +"@svgr/plugin-jsx@^5.5.0":
1756 + "integrity" "sha512-V/wVh33j12hGh05IDg8GpIUXbjAPnTdPTKuP4VNLggnwaHMPNQNae2pRnyTAILWCQdz5GyMqtO488g7CKM8CBA=="
1757 + "resolved" "https://registry.yarnpkg.com/@svgr/plugin-jsx/-/plugin-jsx-5.5.0.tgz"
1758 + "version" "5.5.0"
1759 + dependencies:
1760 + "@babel/core" "^7.12.3"
1761 + "@svgr/babel-preset" "^5.5.0"
1762 + "@svgr/hast-util-to-babel-ast" "^5.5.0"
1763 + "svg-parser" "^2.0.2"
1764 +
1765 +"@svgr/plugin-svgo@^5.5.0":
1766 + "integrity" "sha512-r5swKk46GuQl4RrVejVwpeeJaydoxkdwkM1mBKOgJLBUJPGaLci6ylg/IjhrRsREKDkr4kbMWdgOtbXEh0fyLQ=="
1767 + "resolved" "https://registry.yarnpkg.com/@svgr/plugin-svgo/-/plugin-svgo-5.5.0.tgz"
1768 + "version" "5.5.0"
1769 + dependencies:
1770 + "cosmiconfig" "^7.0.0"
1771 + "deepmerge" "^4.2.2"
1772 + "svgo" "^1.2.2"
1773 +
1774 +"@svgr/webpack@5.5.0":
1775 + "integrity" "sha512-DOBOK255wfQxguUta2INKkzPj6AIS6iafZYiYmHn6W3pHlycSRRlvWKCfLDG10fXfLWqE3DJHgRUOyJYmARa7g=="
1776 + "resolved" "https://registry.yarnpkg.com/@svgr/webpack/-/webpack-5.5.0.tgz"
1777 + "version" "5.5.0"
1778 + dependencies:
1779 + "@babel/core" "^7.12.3"
1780 + "@babel/plugin-transform-react-constant-elements" "^7.12.1"
1781 + "@babel/preset-env" "^7.12.1"
1782 + "@babel/preset-react" "^7.12.5"
1783 + "@svgr/core" "^5.5.0"
1784 + "@svgr/plugin-jsx" "^5.5.0"
1785 + "@svgr/plugin-svgo" "^5.5.0"
1786 + "loader-utils" "^2.0.0"
1787 +
1788 +"@tootallnate/once@1":
1789 + "integrity" "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw=="
1790 + "resolved" "https://registry.yarnpkg.com/@tootallnate/once/-/once-1.1.2.tgz"
1791 + "version" "1.1.2"
1792 +
1793 +"@types/babel__core@^7.0.0", "@types/babel__core@^7.1.7":
1794 + "integrity" "sha512-EAEHtisTMM+KaKwfWdC3oyllIqswlznXCIVCt7/oRNrh+DhgT4UEBNC/jlADNjvw7UnfbcdkGQcPVZ1xYiLcrQ=="
1795 + "resolved" "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.1.16.tgz"
1796 + "version" "7.1.16"
1797 + dependencies:
1798 + "@babel/parser" "^7.1.0"
1799 + "@babel/types" "^7.0.0"
1800 + "@types/babel__generator" "*"
1801 + "@types/babel__template" "*"
1802 + "@types/babel__traverse" "*"
1803 +
1804 +"@types/babel__generator@*":
1805 + "integrity" "sha512-/GWCmzJWqV7diQW54smJZzWbSFf4QYtF71WCKhcx6Ru/tFyQIY2eiiITcCAeuPbNSvT9YCGkVMqqvSk2Z0mXiA=="
1806 + "resolved" "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.6.3.tgz"
1807 + "version" "7.6.3"
1808 + dependencies:
1809 + "@babel/types" "^7.0.0"
1810 +
1811 +"@types/babel__template@*":
1812 + "integrity" "sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g=="
1813 + "resolved" "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.4.1.tgz"
1814 + "version" "7.4.1"
1815 + dependencies:
1816 + "@babel/parser" "^7.1.0"
1817 + "@babel/types" "^7.0.0"
1818 +
1819 +"@types/babel__traverse@*", "@types/babel__traverse@^7.0.4", "@types/babel__traverse@^7.0.6":
1820 + "integrity" "sha512-K2waXdXBi2302XUdcHcR1jCeU0LL4TD9HRs/gk0N2Xvrht+G/BfJa4QObBQZfhMdxiCpV3COl5Nfq4uKTeTnJA=="
1821 + "resolved" "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.14.2.tgz"
1822 + "version" "7.14.2"
1823 + dependencies:
1824 + "@babel/types" "^7.3.0"
1825 +
1826 +"@types/eslint@^7.2.6":
1827 + "integrity" "sha512-KubbADPkfoU75KgKeKLsFHXnU4ipH7wYg0TRT33NK3N3yiu7jlFAAoygIWBV+KbuHx/G+AvuGX6DllnK35gfJA=="
1828 + "resolved" "https://registry.yarnpkg.com/@types/eslint/-/eslint-7.28.2.tgz"
1829 + "version" "7.28.2"
1830 + dependencies:
1831 + "@types/estree" "*"
1832 + "@types/json-schema" "*"
1833 +
1834 +"@types/estree@*":
1835 + "integrity" "sha512-C6N5s2ZFtuZRj54k2/zyRhNDjJwwcViAM3Nbm8zjBpbqAdZ00mr0CFxvSKeO8Y/e03WVFLpQMdHYVfUd6SB+Hw=="
1836 + "resolved" "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.50.tgz"
1837 + "version" "0.0.50"
1838 +
1839 +"@types/estree@0.0.39":
1840 + "integrity" "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw=="
1841 + "resolved" "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.39.tgz"
1842 + "version" "0.0.39"
1843 +
1844 +"@types/glob@^7.1.1":
1845 + "integrity" "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA=="
1846 + "resolved" "https://registry.yarnpkg.com/@types/glob/-/glob-7.2.0.tgz"
1847 + "version" "7.2.0"
1848 + dependencies:
1849 + "@types/minimatch" "*"
1850 + "@types/node" "*"
1851 +
1852 +"@types/graceful-fs@^4.1.2":
1853 + "integrity" "sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw=="
1854 + "resolved" "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.5.tgz"
1855 + "version" "4.1.5"
1856 + dependencies:
1857 + "@types/node" "*"
1858 +
1859 +"@types/html-minifier-terser@^5.0.0":
1860 + "integrity" "sha512-h4lTMgMJctJybDp8CQrxTUiiYmedihHWkjnF/8Pxseu2S6Nlfcy8kwboQ8yejh456rP2yWoEVm1sS/FVsfM48w=="
1861 + "resolved" "https://registry.yarnpkg.com/@types/html-minifier-terser/-/html-minifier-terser-5.1.2.tgz"
1862 + "version" "5.1.2"
1863 +
1864 +"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0", "@types/istanbul-lib-coverage@^2.0.1":
1865 + "integrity" "sha512-sz7iLqvVUg1gIedBOvlkxPlc8/uVzyS5OwGz1cKjXzkl3FpL3al0crU8YGU1WoHkxn0Wxbw5tyi6hvzJKNzFsw=="
1866 + "resolved" "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz"
1867 + "version" "2.0.3"
1868 +
1869 +"@types/istanbul-lib-report@*":
1870 + "integrity" "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg=="
1871 + "resolved" "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz"
1872 + "version" "3.0.0"
1873 + dependencies:
1874 + "@types/istanbul-lib-coverage" "*"
1875 +
1876 +"@types/istanbul-reports@^3.0.0":
1877 + "integrity" "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw=="
1878 + "resolved" "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz"
1879 + "version" "3.0.1"
1880 + dependencies:
1881 + "@types/istanbul-lib-report" "*"
1882 +
1883 +"@types/json-schema@*", "@types/json-schema@^7.0.3", "@types/json-schema@^7.0.5", "@types/json-schema@^7.0.7", "@types/json-schema@^7.0.8":
1884 + "integrity" "sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ=="
1885 + "resolved" "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.9.tgz"
1886 + "version" "7.0.9"
1887 +
1888 +"@types/json5@^0.0.29":
1889 + "integrity" "sha1-7ihweulOEdK4J7y+UnC86n8+ce4="
1890 + "resolved" "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz"
1891 + "version" "0.0.29"
1892 +
1893 +"@types/minimatch@*":
1894 + "integrity" "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ=="
1895 + "resolved" "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.5.tgz"
1896 + "version" "3.0.5"
1897 +
1898 +"@types/node@*":
1899 + "integrity" "sha512-TMgXmy0v2xWyuCSCJM6NCna2snndD8yvQF67J29ipdzMcsPa9u+o0tjF5+EQNdhcuZplYuouYqpc4zcd5I6amQ=="
1900 + "resolved" "https://registry.yarnpkg.com/@types/node/-/node-16.11.4.tgz"
1901 + "version" "16.11.4"
1902 +
1903 +"@types/normalize-package-data@^2.4.0":
1904 + "integrity" "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw=="
1905 + "resolved" "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz"
1906 + "version" "2.4.1"
1907 +
1908 +"@types/parse-json@^4.0.0":
1909 + "integrity" "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA=="
1910 + "resolved" "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.0.tgz"
1911 + "version" "4.0.0"
1912 +
1913 +"@types/prettier@^2.0.0":
1914 + "integrity" "sha512-Fo79ojj3vdEZOHg3wR9ksAMRz4P3S5fDB5e/YWZiFnyFQI1WY2Vftu9XoXVVtJfxB7Bpce/QTqWSSntkz2Znrw=="
1915 + "resolved" "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.4.1.tgz"
1916 + "version" "2.4.1"
1917 +
1918 +"@types/q@^1.5.1":
1919 + "integrity" "sha512-L28j2FcJfSZOnL1WBjDYp2vUHCeIFlyYI/53EwD/rKUBQ7MtUUfbQWiyKJGpcnv4/WgrhWsFKrcPstcAt/J0tQ=="
1920 + "resolved" "https://registry.yarnpkg.com/@types/q/-/q-1.5.5.tgz"
1921 + "version" "1.5.5"
1922 +
1923 +"@types/resolve@0.0.8":
1924 + "integrity" "sha512-auApPaJf3NPfe18hSoJkp8EbZzer2ISk7o8mCC3M9he/a04+gbMF97NkpD2S8riMGvm4BMRI59/SZQSaLTKpsQ=="
1925 + "resolved" "https://registry.yarnpkg.com/@types/resolve/-/resolve-0.0.8.tgz"
1926 + "version" "0.0.8"
1927 + dependencies:
1928 + "@types/node" "*"
1929 +
1930 +"@types/source-list-map@*":
1931 + "integrity" "sha512-K5K+yml8LTo9bWJI/rECfIPrGgxdpeNbj+d53lwN4QjW1MCwlkhUms+gtdzigTeUyBr09+u8BwOIY3MXvHdcsA=="
1932 + "resolved" "https://registry.yarnpkg.com/@types/source-list-map/-/source-list-map-0.1.2.tgz"
1933 + "version" "0.1.2"
1934 +
1935 +"@types/stack-utils@^2.0.0":
1936 + "integrity" "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw=="
1937 + "resolved" "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.1.tgz"
1938 + "version" "2.0.1"
1939 +
1940 +"@types/tapable@^1", "@types/tapable@^1.0.5":
1941 + "integrity" "sha512-ipixuVrh2OdNmauvtT51o3d8z12p6LtFW9in7U79der/kwejjdNchQC5UMn5u/KxNoM7VHHOs/l8KS8uHxhODQ=="
1942 + "resolved" "https://registry.yarnpkg.com/@types/tapable/-/tapable-1.0.8.tgz"
1943 + "version" "1.0.8"
1944 +
1945 +"@types/uglify-js@*":
1946 + "integrity" "sha512-O3MmRAk6ZuAKa9CHgg0Pr0+lUOqoMLpc9AS4R8ano2auvsg7IE8syF3Xh/NPr26TWklxYcqoEEFdzLLs1fV9PQ=="
1947 + "resolved" "https://registry.yarnpkg.com/@types/uglify-js/-/uglify-js-3.13.1.tgz"
1948 + "version" "3.13.1"
1949 + dependencies:
1950 + "source-map" "^0.6.1"
1951 +
1952 +"@types/webpack-sources@*":
1953 + "integrity" "sha512-Ft7YH3lEVRQ6ls8k4Ff1oB4jN6oy/XmU6tQISKdhfh+1mR+viZFphS6WL0IrtDOzvefmJg5a0s7ZQoRXwqTEFg=="
1954 + "resolved" "https://registry.yarnpkg.com/@types/webpack-sources/-/webpack-sources-3.2.0.tgz"
1955 + "version" "3.2.0"
1956 + dependencies:
1957 + "@types/node" "*"
1958 + "@types/source-list-map" "*"
1959 + "source-map" "^0.7.3"
1960 +
1961 +"@types/webpack@^4.41.8", "@types/webpack@4.x":
1962 + "integrity" "sha512-/i0J7sepXFIp1ZT7FjUGi1eXMCg8HCCzLJEQkKsOtbJFontsJLolBcDC+3qxn5pPwiCt1G0ZdRmYRzNBtvpuGQ=="
1963 + "resolved" "https://registry.yarnpkg.com/@types/webpack/-/webpack-4.41.31.tgz"
1964 + "version" "4.41.31"
1965 + dependencies:
1966 + "@types/node" "*"
1967 + "@types/tapable" "^1"
1968 + "@types/uglify-js" "*"
1969 + "@types/webpack-sources" "*"
1970 + "anymatch" "^3.0.0"
1971 + "source-map" "^0.6.0"
1972 +
1973 +"@types/yargs-parser@*":
1974 + "integrity" "sha512-7tFImggNeNBVMsn0vLrpn1H1uPrUBdnARPTpZoitY37ZrdJREzf7I16tMrlK3hen349gr1NYh8CmZQa7CTG6Aw=="
1975 + "resolved" "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-20.2.1.tgz"
1976 + "version" "20.2.1"
1977 +
1978 +"@types/yargs@^15.0.0":
1979 + "integrity" "sha512-yEJzHoxf6SyQGhBhIYGXQDSCkJjB6HohDShto7m8vaKg9Yp0Yn8+71J9eakh2bnPg6BfsH9PRMhiRTZnd4eXGQ=="
1980 + "resolved" "https://registry.yarnpkg.com/@types/yargs/-/yargs-15.0.14.tgz"
1981 + "version" "15.0.14"
1982 + dependencies:
1983 + "@types/yargs-parser" "*"
1984 +
1985 +"@typescript-eslint/eslint-plugin@^4.0.0", "@typescript-eslint/eslint-plugin@^4.5.0", "@typescript-eslint/eslint-plugin@>= 4":
1986 + "integrity" "sha512-aINiAxGVdOl1eJyVjaWn/YcVAq4Gi/Yo35qHGCnqbWVz61g39D0h23veY/MA0rFFGfxK7TySg2uwDeNv+JgVpg=="
1987 + "resolved" "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.33.0.tgz"
1988 + "version" "4.33.0"
1989 + dependencies:
1990 + "@typescript-eslint/experimental-utils" "4.33.0"
1991 + "@typescript-eslint/scope-manager" "4.33.0"
1992 + "debug" "^4.3.1"
1993 + "functional-red-black-tree" "^1.0.1"
1994 + "ignore" "^5.1.8"
1995 + "regexpp" "^3.1.0"
1996 + "semver" "^7.3.5"
1997 + "tsutils" "^3.21.0"
1998 +
1999 +"@typescript-eslint/experimental-utils@^3.10.1":
2000 + "integrity" "sha512-DewqIgscDzmAfd5nOGe4zm6Bl7PKtMG2Ad0KG8CUZAHlXfAKTF9Ol5PXhiMh39yRL2ChRH1cuuUGOcVyyrhQIw=="
2001 + "resolved" "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-3.10.1.tgz"
2002 + "version" "3.10.1"
2003 + dependencies:
2004 + "@types/json-schema" "^7.0.3"
2005 + "@typescript-eslint/types" "3.10.1"
2006 + "@typescript-eslint/typescript-estree" "3.10.1"
2007 + "eslint-scope" "^5.0.0"
2008 + "eslint-utils" "^2.0.0"
2009 +
2010 +"@typescript-eslint/experimental-utils@^4.0.1", "@typescript-eslint/experimental-utils@4.33.0":
2011 + "integrity" "sha512-zeQjOoES5JFjTnAhI5QY7ZviczMzDptls15GFsI6jyUOq0kOf9+WonkhtlIhh0RgHRnqj5gdNxW5j1EvAyYg6Q=="
2012 + "resolved" "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-4.33.0.tgz"
2013 + "version" "4.33.0"
2014 + dependencies:
2015 + "@types/json-schema" "^7.0.7"
2016 + "@typescript-eslint/scope-manager" "4.33.0"
2017 + "@typescript-eslint/types" "4.33.0"
2018 + "@typescript-eslint/typescript-estree" "4.33.0"
2019 + "eslint-scope" "^5.1.1"
2020 + "eslint-utils" "^3.0.0"
2021 +
2022 +"@typescript-eslint/parser@^4.0.0", "@typescript-eslint/parser@^4.5.0":
2023 + "integrity" "sha512-ZohdsbXadjGBSK0/r+d87X0SBmKzOq4/S5nzK6SBgJspFo9/CUDJ7hjayuze+JK7CZQLDMroqytp7pOcFKTxZA=="
2024 + "resolved" "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-4.33.0.tgz"
2025 + "version" "4.33.0"
2026 + dependencies:
2027 + "@typescript-eslint/scope-manager" "4.33.0"
2028 + "@typescript-eslint/types" "4.33.0"
2029 + "@typescript-eslint/typescript-estree" "4.33.0"
2030 + "debug" "^4.3.1"
2031 +
2032 +"@typescript-eslint/scope-manager@4.33.0":
2033 + "integrity" "sha512-5IfJHpgTsTZuONKbODctL4kKuQje/bzBRkwHE8UOZ4f89Zeddg+EGZs8PD8NcN4LdM3ygHWYB3ukPAYjvl/qbQ=="
2034 + "resolved" "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-4.33.0.tgz"
2035 + "version" "4.33.0"
2036 + dependencies:
2037 + "@typescript-eslint/types" "4.33.0"
2038 + "@typescript-eslint/visitor-keys" "4.33.0"
2039 +
2040 +"@typescript-eslint/types@3.10.1":
2041 + "integrity" "sha512-+3+FCUJIahE9q0lDi1WleYzjCwJs5hIsbugIgnbB+dSCYUxl8L6PwmsyOPFZde2hc1DlTo/xnkOgiTLSyAbHiQ=="
2042 + "resolved" "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-3.10.1.tgz"
2043 + "version" "3.10.1"
2044 +
2045 +"@typescript-eslint/types@4.33.0":
2046 + "integrity" "sha512-zKp7CjQzLQImXEpLt2BUw1tvOMPfNoTAfb8l51evhYbOEEzdWyQNmHWWGPR6hwKJDAi+1VXSBmnhL9kyVTTOuQ=="
2047 + "resolved" "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.33.0.tgz"
2048 + "version" "4.33.0"
2049 +
2050 +"@typescript-eslint/typescript-estree@3.10.1":
2051 + "integrity" "sha512-QbcXOuq6WYvnB3XPsZpIwztBoquEYLXh2MtwVU+kO8jgYCiv4G5xrSP/1wg4tkvrEE+esZVquIPX/dxPlePk1w=="
2052 + "resolved" "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-3.10.1.tgz"
2053 + "version" "3.10.1"
2054 + dependencies:
2055 + "@typescript-eslint/types" "3.10.1"
2056 + "@typescript-eslint/visitor-keys" "3.10.1"
2057 + "debug" "^4.1.1"
2058 + "glob" "^7.1.6"
2059 + "is-glob" "^4.0.1"
2060 + "lodash" "^4.17.15"
2061 + "semver" "^7.3.2"
2062 + "tsutils" "^3.17.1"
2063 +
2064 +"@typescript-eslint/typescript-estree@4.33.0":
2065 + "integrity" "sha512-rkWRY1MPFzjwnEVHsxGemDzqqddw2QbTJlICPD9p9I9LfsO8fdmfQPOX3uKfUaGRDFJbfrtm/sXhVXN4E+bzCA=="
2066 + "resolved" "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.33.0.tgz"
2067 + "version" "4.33.0"
2068 + dependencies:
2069 + "@typescript-eslint/types" "4.33.0"
2070 + "@typescript-eslint/visitor-keys" "4.33.0"
2071 + "debug" "^4.3.1"
2072 + "globby" "^11.0.3"
2073 + "is-glob" "^4.0.1"
2074 + "semver" "^7.3.5"
2075 + "tsutils" "^3.21.0"
2076 +
2077 +"@typescript-eslint/visitor-keys@3.10.1":
2078 + "integrity" "sha512-9JgC82AaQeglebjZMgYR5wgmfUdUc+EitGUUMW8u2nDckaeimzW+VsoLV6FoimPv2id3VQzfjwBxEMVz08ameQ=="
2079 + "resolved" "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-3.10.1.tgz"
2080 + "version" "3.10.1"
2081 + dependencies:
2082 + "eslint-visitor-keys" "^1.1.0"
2083 +
2084 +"@typescript-eslint/visitor-keys@4.33.0":
2085 + "integrity" "sha512-uqi/2aSz9g2ftcHWf8uLPJA70rUv6yuMW5Bohw+bwcuzaxQIHaKFZCKGoGXIrc9vkTJ3+0txM73K0Hq3d5wgIg=="
2086 + "resolved" "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.33.0.tgz"
2087 + "version" "4.33.0"
2088 + dependencies:
2089 + "@typescript-eslint/types" "4.33.0"
2090 + "eslint-visitor-keys" "^2.0.0"
2091 +
2092 +"@webassemblyjs/ast@1.9.0":
2093 + "integrity" "sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA=="
2094 + "resolved" "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.9.0.tgz"
2095 + "version" "1.9.0"
2096 + dependencies:
2097 + "@webassemblyjs/helper-module-context" "1.9.0"
2098 + "@webassemblyjs/helper-wasm-bytecode" "1.9.0"
2099 + "@webassemblyjs/wast-parser" "1.9.0"
2100 +
2101 +"@webassemblyjs/floating-point-hex-parser@1.9.0":
2102 + "integrity" "sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA=="
2103 + "resolved" "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.0.tgz"
2104 + "version" "1.9.0"
2105 +
2106 +"@webassemblyjs/helper-api-error@1.9.0":
2107 + "integrity" "sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw=="
2108 + "resolved" "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz"
2109 + "version" "1.9.0"
2110 +
2111 +"@webassemblyjs/helper-buffer@1.9.0":
2112 + "integrity" "sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA=="
2113 + "resolved" "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz"
2114 + "version" "1.9.0"
2115 +
2116 +"@webassemblyjs/helper-code-frame@1.9.0":
2117 + "integrity" "sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA=="
2118 + "resolved" "https://registry.yarnpkg.com/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.0.tgz"
2119 + "version" "1.9.0"
2120 + dependencies:
2121 + "@webassemblyjs/wast-printer" "1.9.0"
2122 +
2123 +"@webassemblyjs/helper-fsm@1.9.0":
2124 + "integrity" "sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw=="
2125 + "resolved" "https://registry.yarnpkg.com/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.0.tgz"
2126 + "version" "1.9.0"
2127 +
2128 +"@webassemblyjs/helper-module-context@1.9.0":
2129 + "integrity" "sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g=="
2130 + "resolved" "https://registry.yarnpkg.com/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.0.tgz"
2131 + "version" "1.9.0"
2132 + dependencies:
2133 + "@webassemblyjs/ast" "1.9.0"
2134 +
2135 +"@webassemblyjs/helper-wasm-bytecode@1.9.0":
2136 + "integrity" "sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw=="
2137 + "resolved" "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz"
2138 + "version" "1.9.0"
2139 +
2140 +"@webassemblyjs/helper-wasm-section@1.9.0":
2141 + "integrity" "sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw=="
2142 + "resolved" "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz"
2143 + "version" "1.9.0"
2144 + dependencies:
2145 + "@webassemblyjs/ast" "1.9.0"
2146 + "@webassemblyjs/helper-buffer" "1.9.0"
2147 + "@webassemblyjs/helper-wasm-bytecode" "1.9.0"
2148 + "@webassemblyjs/wasm-gen" "1.9.0"
2149 +
2150 +"@webassemblyjs/ieee754@1.9.0":
2151 + "integrity" "sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg=="
2152 + "resolved" "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz"
2153 + "version" "1.9.0"
2154 + dependencies:
2155 + "@xtuc/ieee754" "^1.2.0"
2156 +
2157 +"@webassemblyjs/leb128@1.9.0":
2158 + "integrity" "sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw=="
2159 + "resolved" "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.9.0.tgz"
2160 + "version" "1.9.0"
2161 + dependencies:
2162 + "@xtuc/long" "4.2.2"
2163 +
2164 +"@webassemblyjs/utf8@1.9.0":
2165 + "integrity" "sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w=="
2166 + "resolved" "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.9.0.tgz"
2167 + "version" "1.9.0"
2168 +
2169 +"@webassemblyjs/wasm-edit@1.9.0":
2170 + "integrity" "sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw=="
2171 + "resolved" "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz"
2172 + "version" "1.9.0"
2173 + dependencies:
2174 + "@webassemblyjs/ast" "1.9.0"
2175 + "@webassemblyjs/helper-buffer" "1.9.0"
2176 + "@webassemblyjs/helper-wasm-bytecode" "1.9.0"
2177 + "@webassemblyjs/helper-wasm-section" "1.9.0"
2178 + "@webassemblyjs/wasm-gen" "1.9.0"
2179 + "@webassemblyjs/wasm-opt" "1.9.0"
2180 + "@webassemblyjs/wasm-parser" "1.9.0"
2181 + "@webassemblyjs/wast-printer" "1.9.0"
2182 +
2183 +"@webassemblyjs/wasm-gen@1.9.0":
2184 + "integrity" "sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA=="
2185 + "resolved" "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz"
2186 + "version" "1.9.0"
2187 + dependencies:
2188 + "@webassemblyjs/ast" "1.9.0"
2189 + "@webassemblyjs/helper-wasm-bytecode" "1.9.0"
2190 + "@webassemblyjs/ieee754" "1.9.0"
2191 + "@webassemblyjs/leb128" "1.9.0"
2192 + "@webassemblyjs/utf8" "1.9.0"
2193 +
2194 +"@webassemblyjs/wasm-opt@1.9.0":
2195 + "integrity" "sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A=="
2196 + "resolved" "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz"
2197 + "version" "1.9.0"
2198 + dependencies:
2199 + "@webassemblyjs/ast" "1.9.0"
2200 + "@webassemblyjs/helper-buffer" "1.9.0"
2201 + "@webassemblyjs/wasm-gen" "1.9.0"
2202 + "@webassemblyjs/wasm-parser" "1.9.0"
2203 +
2204 +"@webassemblyjs/wasm-parser@1.9.0":
2205 + "integrity" "sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA=="
2206 + "resolved" "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz"
2207 + "version" "1.9.0"
2208 + dependencies:
2209 + "@webassemblyjs/ast" "1.9.0"
2210 + "@webassemblyjs/helper-api-error" "1.9.0"
2211 + "@webassemblyjs/helper-wasm-bytecode" "1.9.0"
2212 + "@webassemblyjs/ieee754" "1.9.0"
2213 + "@webassemblyjs/leb128" "1.9.0"
2214 + "@webassemblyjs/utf8" "1.9.0"
2215 +
2216 +"@webassemblyjs/wast-parser@1.9.0":
2217 + "integrity" "sha512-qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw=="
2218 + "resolved" "https://registry.yarnpkg.com/@webassemblyjs/wast-parser/-/wast-parser-1.9.0.tgz"
2219 + "version" "1.9.0"
2220 + dependencies:
2221 + "@webassemblyjs/ast" "1.9.0"
2222 + "@webassemblyjs/floating-point-hex-parser" "1.9.0"
2223 + "@webassemblyjs/helper-api-error" "1.9.0"
2224 + "@webassemblyjs/helper-code-frame" "1.9.0"
2225 + "@webassemblyjs/helper-fsm" "1.9.0"
2226 + "@xtuc/long" "4.2.2"
2227 +
2228 +"@webassemblyjs/wast-printer@1.9.0":
2229 + "integrity" "sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA=="
2230 + "resolved" "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz"
2231 + "version" "1.9.0"
2232 + dependencies:
2233 + "@webassemblyjs/ast" "1.9.0"
2234 + "@webassemblyjs/wast-parser" "1.9.0"
2235 + "@xtuc/long" "4.2.2"
2236 +
2237 +"@xtuc/ieee754@^1.2.0":
2238 + "integrity" "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA=="
2239 + "resolved" "https://registry.yarnpkg.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz"
2240 + "version" "1.2.0"
2241 +
2242 +"@xtuc/long@4.2.2":
2243 + "integrity" "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ=="
2244 + "resolved" "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.2.tgz"
2245 + "version" "4.2.2"
2246 +
2247 +"abab@^2.0.3", "abab@^2.0.5":
2248 + "integrity" "sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q=="
2249 + "resolved" "https://registry.yarnpkg.com/abab/-/abab-2.0.5.tgz"
2250 + "version" "2.0.5"
2251 +
2252 +"accepts@~1.3.4", "accepts@~1.3.5", "accepts@~1.3.7":
2253 + "integrity" "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA=="
2254 + "resolved" "https://registry.yarnpkg.com/accepts/-/accepts-1.3.7.tgz"
2255 + "version" "1.3.7"
2256 + dependencies:
2257 + "mime-types" "~2.1.24"
2258 + "negotiator" "0.6.2"
2259 +
2260 +"acorn-globals@^6.0.0":
2261 + "integrity" "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg=="
2262 + "resolved" "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-6.0.0.tgz"
2263 + "version" "6.0.0"
2264 + dependencies:
2265 + "acorn" "^7.1.1"
2266 + "acorn-walk" "^7.1.1"
2267 +
2268 +"acorn-jsx@^5.3.1":
2269 + "integrity" "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ=="
2270 + "resolved" "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz"
2271 + "version" "5.3.2"
2272 +
2273 +"acorn-walk@^7.1.1":
2274 + "integrity" "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA=="
2275 + "resolved" "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-7.2.0.tgz"
2276 + "version" "7.2.0"
2277 +
2278 +"acorn@^6.0.0 || ^7.0.0 || ^8.0.0", "acorn@^7.1.0", "acorn@^7.1.1", "acorn@^7.4.0":
2279 + "integrity" "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A=="
2280 + "resolved" "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz"
2281 + "version" "7.4.1"
2282 +
2283 +"acorn@^6.4.1":
2284 + "integrity" "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ=="
2285 + "resolved" "https://registry.yarnpkg.com/acorn/-/acorn-6.4.2.tgz"
2286 + "version" "6.4.2"
2287 +
2288 +"acorn@^8.2.4":
2289 + "integrity" "sha512-yXbYeFy+jUuYd3/CDcg2NkIYE991XYX/bje7LmjJigUciaeO1JR4XxXgCIV1/Zc/dRuFEyw1L0pbA+qynJkW5Q=="
2290 + "resolved" "https://registry.yarnpkg.com/acorn/-/acorn-8.5.0.tgz"
2291 + "version" "8.5.0"
2292 +
2293 +"address@^1.0.1", "address@1.1.2":
2294 + "integrity" "sha512-aT6camzM4xEA54YVJYSqxz1kv4IHnQZRtThJJHhUMRExaU5spC7jX5ugSwTaTgJliIgs4VhZOk7htClvQ/LmRA=="
2295 + "resolved" "https://registry.yarnpkg.com/address/-/address-1.1.2.tgz"
2296 + "version" "1.1.2"
2297 +
2298 +"adjust-sourcemap-loader@3.0.0":
2299 + "integrity" "sha512-YBrGyT2/uVQ/c6Rr+t6ZJXniY03YtHGMJQYal368burRGYKqhx9qGTWqcBU5s1CwYY9E/ri63RYyG1IacMZtqw=="
2300 + "resolved" "https://registry.yarnpkg.com/adjust-sourcemap-loader/-/adjust-sourcemap-loader-3.0.0.tgz"
2301 + "version" "3.0.0"
2302 + dependencies:
2303 + "loader-utils" "^2.0.0"
2304 + "regex-parser" "^2.2.11"
2305 +
2306 +"agent-base@6":
2307 + "integrity" "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ=="
2308 + "resolved" "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz"
2309 + "version" "6.0.2"
2310 + dependencies:
2311 + "debug" "4"
2312 +
2313 +"aggregate-error@^3.0.0":
2314 + "integrity" "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA=="
2315 + "resolved" "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz"
2316 + "version" "3.1.0"
2317 + dependencies:
2318 + "clean-stack" "^2.0.0"
2319 + "indent-string" "^4.0.0"
2320 +
2321 +"ajv-errors@^1.0.0":
2322 + "integrity" "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ=="
2323 + "resolved" "https://registry.yarnpkg.com/ajv-errors/-/ajv-errors-1.0.1.tgz"
2324 + "version" "1.0.1"
2325 +
2326 +"ajv-keywords@^3.1.0", "ajv-keywords@^3.4.1", "ajv-keywords@^3.5.2":
2327 + "integrity" "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ=="
2328 + "resolved" "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz"
2329 + "version" "3.5.2"
2330 +
2331 +"ajv@^6.1.0", "ajv@^6.10.0", "ajv@^6.10.2", "ajv@^6.12.4", "ajv@^6.12.5", "ajv@^6.9.1", "ajv@>=5.0.0":
2332 + "integrity" "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g=="
2333 + "resolved" "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz"
2334 + "version" "6.12.6"
2335 + dependencies:
2336 + "fast-deep-equal" "^3.1.1"
2337 + "fast-json-stable-stringify" "^2.0.0"
2338 + "json-schema-traverse" "^0.4.1"
2339 + "uri-js" "^4.2.2"
2340 +
2341 +"ajv@^8.0.1":
2342 + "integrity" "sha512-SMJOdDP6LqTkD0Uq8qLi+gMwSt0imXLSV080qFVwJCpH9U6Mb+SUGHAXM0KNbcBPguytWyvFxcHgMLe2D2XSpw=="
2343 + "resolved" "https://registry.yarnpkg.com/ajv/-/ajv-8.6.3.tgz"
2344 + "version" "8.6.3"
2345 + dependencies:
2346 + "fast-deep-equal" "^3.1.1"
2347 + "json-schema-traverse" "^1.0.0"
2348 + "require-from-string" "^2.0.2"
2349 + "uri-js" "^4.2.2"
2350 +
2351 +"alphanum-sort@^1.0.0":
2352 + "integrity" "sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM="
2353 + "resolved" "https://registry.yarnpkg.com/alphanum-sort/-/alphanum-sort-1.0.2.tgz"
2354 + "version" "1.0.2"
2355 +
2356 +"ansi-colors@^3.0.0":
2357 + "integrity" "sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA=="
2358 + "resolved" "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-3.2.4.tgz"
2359 + "version" "3.2.4"
2360 +
2361 +"ansi-colors@^4.1.1":
2362 + "integrity" "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA=="
2363 + "resolved" "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz"
2364 + "version" "4.1.1"
2365 +
2366 +"ansi-escapes@^4.2.1", "ansi-escapes@^4.3.1":
2367 + "integrity" "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ=="
2368 + "resolved" "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz"
2369 + "version" "4.3.2"
2370 + dependencies:
2371 + "type-fest" "^0.21.3"
2372 +
2373 +"ansi-html@^0.0.7", "ansi-html@0.0.7":
2374 + "integrity" "sha1-gTWEAhliqenm/QOflA0S9WynhZ4="
2375 + "resolved" "https://registry.yarnpkg.com/ansi-html/-/ansi-html-0.0.7.tgz"
2376 + "version" "0.0.7"
2377 +
2378 +"ansi-regex@^2.0.0":
2379 + "integrity" "sha1-w7M6te42DYbg5ijwRorn7yfWVN8="
2380 + "resolved" "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz"
2381 + "version" "2.1.1"
2382 +
2383 +"ansi-regex@^4.1.0":
2384 + "integrity" "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg=="
2385 + "resolved" "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz"
2386 + "version" "4.1.0"
2387 +
2388 +"ansi-regex@^5.0.0", "ansi-regex@^5.0.1":
2389 + "integrity" "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="
2390 + "resolved" "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz"
2391 + "version" "5.0.1"
2392 +
2393 +"ansi-styles@^3.2.0":
2394 + "integrity" "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA=="
2395 + "resolved" "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz"
2396 + "version" "3.2.1"
2397 + dependencies:
2398 + "color-convert" "^1.9.0"
2399 +
2400 +"ansi-styles@^3.2.1":
2401 + "integrity" "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA=="
2402 + "resolved" "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz"
2403 + "version" "3.2.1"
2404 + dependencies:
2405 + "color-convert" "^1.9.0"
2406 +
2407 +"ansi-styles@^4.0.0", "ansi-styles@^4.1.0":
2408 + "integrity" "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="
2409 + "resolved" "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz"
2410 + "version" "4.3.0"
2411 + dependencies:
2412 + "color-convert" "^2.0.1"
2413 +
2414 +"anymatch@^2.0.0":
2415 + "integrity" "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw=="
2416 + "resolved" "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz"
2417 + "version" "2.0.0"
2418 + dependencies:
2419 + "micromatch" "^3.1.4"
2420 + "normalize-path" "^2.1.1"
2421 +
2422 +"anymatch@^3.0.0", "anymatch@^3.0.3", "anymatch@~3.1.2":
2423 + "integrity" "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg=="
2424 + "resolved" "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz"
2425 + "version" "3.1.2"
2426 + dependencies:
2427 + "normalize-path" "^3.0.0"
2428 + "picomatch" "^2.0.4"
2429 +
2430 +"aproba@^1.1.1":
2431 + "integrity" "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw=="
2432 + "resolved" "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz"
2433 + "version" "1.2.0"
2434 +
2435 +"argparse@^1.0.7":
2436 + "integrity" "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg=="
2437 + "resolved" "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz"
2438 + "version" "1.0.10"
2439 + dependencies:
2440 + "sprintf-js" "~1.0.2"
2441 +
2442 +"aria-query@^4.2.2":
2443 + "integrity" "sha512-o/HelwhuKpTj/frsOsbNLNgnNGVIFsVP/SW2BSF14gVl7kAfMOJ6/8wUAUvG1R1NHKrfG+2sHZTu0yauT1qBrA=="
2444 + "resolved" "https://registry.yarnpkg.com/aria-query/-/aria-query-4.2.2.tgz"
2445 + "version" "4.2.2"
2446 + dependencies:
2447 + "@babel/runtime" "^7.10.2"
2448 + "@babel/runtime-corejs3" "^7.10.2"
2449 +
2450 +"arity-n@^1.0.4":
2451 + "integrity" "sha1-2edrEXM+CFacCEeuezmyhgswt0U="
2452 + "resolved" "https://registry.yarnpkg.com/arity-n/-/arity-n-1.0.4.tgz"
2453 + "version" "1.0.4"
2454 +
2455 +"arr-diff@^4.0.0":
2456 + "integrity" "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA="
2457 + "resolved" "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz"
2458 + "version" "4.0.0"
2459 +
2460 +"arr-flatten@^1.1.0":
2461 + "integrity" "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg=="
2462 + "resolved" "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz"
2463 + "version" "1.1.0"
2464 +
2465 +"arr-union@^3.1.0":
2466 + "integrity" "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ="
2467 + "resolved" "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz"
2468 + "version" "3.1.0"
2469 +
2470 +"array-flatten@^2.1.0":
2471 + "integrity" "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ=="
2472 + "resolved" "https://registry.yarnpkg.com/array-flatten/-/array-flatten-2.1.2.tgz"
2473 + "version" "2.1.2"
2474 +
2475 +"array-flatten@1.1.1":
2476 + "integrity" "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI="
2477 + "resolved" "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz"
2478 + "version" "1.1.1"
2479 +
2480 +"array-includes@^3.1.1", "array-includes@^3.1.3", "array-includes@^3.1.4":
2481 + "integrity" "sha512-ZTNSQkmWumEbiHO2GF4GmWxYVTiQyJy2XOTa15sdQSrvKn7l+180egQMqlrMOUMCyLMD7pmyQe4mMDUT6Behrw=="
2482 + "resolved" "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.4.tgz"
2483 + "version" "3.1.4"
2484 + dependencies:
2485 + "call-bind" "^1.0.2"
2486 + "define-properties" "^1.1.3"
2487 + "es-abstract" "^1.19.1"
2488 + "get-intrinsic" "^1.1.1"
2489 + "is-string" "^1.0.7"
2490 +
2491 +"array-union@^1.0.1":
2492 + "integrity" "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk="
2493 + "resolved" "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz"
2494 + "version" "1.0.2"
2495 + dependencies:
2496 + "array-uniq" "^1.0.1"
2497 +
2498 +"array-union@^2.1.0":
2499 + "integrity" "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw=="
2500 + "resolved" "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz"
2501 + "version" "2.1.0"
2502 +
2503 +"array-uniq@^1.0.1":
2504 + "integrity" "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY="
2505 + "resolved" "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz"
2506 + "version" "1.0.3"
2507 +
2508 +"array-unique@^0.3.2":
2509 + "integrity" "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg="
2510 + "resolved" "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz"
2511 + "version" "0.3.2"
2512 +
2513 +"array.prototype.flat@^1.2.5":
2514 + "integrity" "sha512-KaYU+S+ndVqyUnignHftkwc58o3uVU1jzczILJ1tN2YaIZpFIKBiP/x/j97E5MVPsaCloPbqWLB/8qCTVvT2qg=="
2515 + "resolved" "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.2.5.tgz"
2516 + "version" "1.2.5"
2517 + dependencies:
2518 + "call-bind" "^1.0.2"
2519 + "define-properties" "^1.1.3"
2520 + "es-abstract" "^1.19.0"
2521 +
2522 +"array.prototype.flatmap@^1.2.4":
2523 + "integrity" "sha512-08u6rVyi1Lj7oqWbS9nUxliETrtIROT4XGTA4D/LWGten6E3ocm7cy9SIrmNHOL5XVbVuckUp3X6Xyg8/zpvHA=="
2524 + "resolved" "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.2.5.tgz"
2525 + "version" "1.2.5"
2526 + dependencies:
2527 + "call-bind" "^1.0.0"
2528 + "define-properties" "^1.1.3"
2529 + "es-abstract" "^1.19.0"
2530 +
2531 +"arrify@^2.0.1":
2532 + "integrity" "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug=="
2533 + "resolved" "https://registry.yarnpkg.com/arrify/-/arrify-2.0.1.tgz"
2534 + "version" "2.0.1"
2535 +
2536 +"asap@~2.0.6":
2537 + "integrity" "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY="
2538 + "resolved" "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz"
2539 + "version" "2.0.6"
2540 +
2541 +"asn1.js@^5.2.0":
2542 + "integrity" "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA=="
2543 + "resolved" "https://registry.yarnpkg.com/asn1.js/-/asn1.js-5.4.1.tgz"
2544 + "version" "5.4.1"
2545 + dependencies:
2546 + "bn.js" "^4.0.0"
2547 + "inherits" "^2.0.1"
2548 + "minimalistic-assert" "^1.0.0"
2549 + "safer-buffer" "^2.1.0"
2550 +
2551 +"assert@^1.1.1":
2552 + "integrity" "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA=="
2553 + "resolved" "https://registry.yarnpkg.com/assert/-/assert-1.5.0.tgz"
2554 + "version" "1.5.0"
2555 + dependencies:
2556 + "object-assign" "^4.1.1"
2557 + "util" "0.10.3"
2558 +
2559 +"assign-symbols@^1.0.0":
2560 + "integrity" "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c="
2561 + "resolved" "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz"
2562 + "version" "1.0.0"
2563 +
2564 +"ast-types-flow@^0.0.7":
2565 + "integrity" "sha1-9wtzXGvKGlycItmCw+Oef+ujva0="
2566 + "resolved" "https://registry.yarnpkg.com/ast-types-flow/-/ast-types-flow-0.0.7.tgz"
2567 + "version" "0.0.7"
2568 +
2569 +"astral-regex@^2.0.0":
2570 + "integrity" "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ=="
2571 + "resolved" "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz"
2572 + "version" "2.0.0"
2573 +
2574 +"async-each@^1.0.1":
2575 + "integrity" "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ=="
2576 + "resolved" "https://registry.yarnpkg.com/async-each/-/async-each-1.0.3.tgz"
2577 + "version" "1.0.3"
2578 +
2579 +"async-limiter@~1.0.0":
2580 + "integrity" "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ=="
2581 + "resolved" "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.1.tgz"
2582 + "version" "1.0.1"
2583 +
2584 +"async@^2.6.2":
2585 + "integrity" "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg=="
2586 + "resolved" "https://registry.yarnpkg.com/async/-/async-2.6.3.tgz"
2587 + "version" "2.6.3"
2588 + dependencies:
2589 + "lodash" "^4.17.14"
2590 +
2591 +"asynckit@^0.4.0":
2592 + "integrity" "sha1-x57Zf380y48robyXkLzDZkdLS3k="
2593 + "resolved" "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz"
2594 + "version" "0.4.0"
2595 +
2596 +"at-least-node@^1.0.0":
2597 + "integrity" "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg=="
2598 + "resolved" "https://registry.yarnpkg.com/at-least-node/-/at-least-node-1.0.0.tgz"
2599 + "version" "1.0.0"
2600 +
2601 +"atob@^2.1.2":
2602 + "integrity" "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg=="
2603 + "resolved" "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz"
2604 + "version" "2.1.2"
2605 +
2606 +"autoprefixer@^9.6.1":
2607 + "integrity" "sha512-eM9d/swFopRt5gdJ7jrpCwgvEMIayITpojhkkSMRsFHYuH5bkSQ4p/9qTEHtmNudUZh22Tehu7I6CxAW0IXTKA=="
2608 + "resolved" "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-9.8.8.tgz"
2609 + "version" "9.8.8"
2610 + dependencies:
2611 + "browserslist" "^4.12.0"
2612 + "caniuse-lite" "^1.0.30001109"
2613 + "normalize-range" "^0.1.2"
2614 + "num2fraction" "^1.2.2"
2615 + "picocolors" "^0.2.1"
2616 + "postcss" "^7.0.32"
2617 + "postcss-value-parser" "^4.1.0"
2618 +
2619 +"axe-core@^4.0.2":
2620 + "integrity" "sha512-/lqqLAmuIPi79WYfRpy2i8z+x+vxU3zX2uAm0gs1q52qTuKwolOj1P8XbufpXcsydrpKx2yGn2wzAnxCMV86QA=="
2621 + "resolved" "https://registry.yarnpkg.com/axe-core/-/axe-core-4.3.3.tgz"
2622 + "version" "4.3.3"
2623 +
2624 +"axobject-query@^2.2.0":
2625 + "integrity" "sha512-Td525n+iPOOyUQIeBfcASuG6uJsDOITl7Mds5gFyerkWiX7qhUTdYUBlSgNMyVqtSJqwpt1kXGLdUt6SykLMRA=="
2626 + "resolved" "https://registry.yarnpkg.com/axobject-query/-/axobject-query-2.2.0.tgz"
2627 + "version" "2.2.0"
2628 +
2629 +"babel-eslint@^10.0.0", "babel-eslint@^10.1.0":
2630 + "integrity" "sha512-ifWaTHQ0ce+448CYop8AdrQiBsGrnC+bMgfyKFdi6EsPLTAWG+QfyDeM6OH+FmWnKvEq5NnBMLvlBUPKQZoDSg=="
2631 + "resolved" "https://registry.yarnpkg.com/babel-eslint/-/babel-eslint-10.1.0.tgz"
2632 + "version" "10.1.0"
2633 + dependencies:
2634 + "@babel/code-frame" "^7.0.0"
2635 + "@babel/parser" "^7.7.0"
2636 + "@babel/traverse" "^7.7.0"
2637 + "@babel/types" "^7.7.0"
2638 + "eslint-visitor-keys" "^1.0.0"
2639 + "resolve" "^1.12.0"
2640 +
2641 +"babel-extract-comments@^1.0.0":
2642 + "integrity" "sha512-qWWzi4TlddohA91bFwgt6zO/J0X+io7Qp184Fw0m2JYRSTZnJbFR8+07KmzudHCZgOiKRCrjhylwv9Xd8gfhVQ=="
2643 + "resolved" "https://registry.yarnpkg.com/babel-extract-comments/-/babel-extract-comments-1.0.0.tgz"
2644 + "version" "1.0.0"
2645 + dependencies:
2646 + "babylon" "^6.18.0"
2647 +
2648 +"babel-jest@^26.6.0":
2649 + "integrity" "sha512-pl4Q+GAVOHwvjrck6jKjvmGhnO3jHX/xuB9d27f+EJZ/6k+6nMuPjorrYp7s++bKKdANwzElBWnLWaObvTnaZA=="
2650 + "resolved" "https://registry.yarnpkg.com/babel-jest/-/babel-jest-26.6.3.tgz"
2651 + "version" "26.6.3"
2652 + dependencies:
2653 + "@jest/transform" "^26.6.2"
2654 + "@jest/types" "^26.6.2"
2655 + "@types/babel__core" "^7.1.7"
2656 + "babel-plugin-istanbul" "^6.0.0"
2657 + "babel-preset-jest" "^26.6.2"
2658 + "chalk" "^4.0.0"
2659 + "graceful-fs" "^4.2.4"
2660 + "slash" "^3.0.0"
2661 +
2662 +"babel-jest@^26.6.3":
2663 + "integrity" "sha512-pl4Q+GAVOHwvjrck6jKjvmGhnO3jHX/xuB9d27f+EJZ/6k+6nMuPjorrYp7s++bKKdANwzElBWnLWaObvTnaZA=="
2664 + "resolved" "https://registry.yarnpkg.com/babel-jest/-/babel-jest-26.6.3.tgz"
2665 + "version" "26.6.3"
2666 + dependencies:
2667 + "@jest/transform" "^26.6.2"
2668 + "@jest/types" "^26.6.2"
2669 + "@types/babel__core" "^7.1.7"
2670 + "babel-plugin-istanbul" "^6.0.0"
2671 + "babel-preset-jest" "^26.6.2"
2672 + "chalk" "^4.0.0"
2673 + "graceful-fs" "^4.2.4"
2674 + "slash" "^3.0.0"
2675 +
2676 +"babel-loader@8.1.0":
2677 + "integrity" "sha512-7q7nC1tYOrqvUrN3LQK4GwSk/TQorZSOlO9C+RZDZpODgyN4ZlCqE5q9cDsyWOliN+aU9B4JX01xK9eJXowJLw=="
2678 + "resolved" "https://registry.yarnpkg.com/babel-loader/-/babel-loader-8.1.0.tgz"
2679 + "version" "8.1.0"
2680 + dependencies:
2681 + "find-cache-dir" "^2.1.0"
2682 + "loader-utils" "^1.4.0"
2683 + "mkdirp" "^0.5.3"
2684 + "pify" "^4.0.1"
2685 + "schema-utils" "^2.6.5"
2686 +
2687 +"babel-plugin-dynamic-import-node@^2.3.3":
2688 + "integrity" "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ=="
2689 + "resolved" "https://registry.yarnpkg.com/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz"
2690 + "version" "2.3.3"
2691 + dependencies:
2692 + "object.assign" "^4.1.0"
2693 +
2694 +"babel-plugin-istanbul@^6.0.0":
2695 + "integrity" "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA=="
2696 + "resolved" "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz"
2697 + "version" "6.1.1"
2698 + dependencies:
2699 + "@babel/helper-plugin-utils" "^7.0.0"
2700 + "@istanbuljs/load-nyc-config" "^1.0.0"
2701 + "@istanbuljs/schema" "^0.1.2"
2702 + "istanbul-lib-instrument" "^5.0.4"
2703 + "test-exclude" "^6.0.0"
2704 +
2705 +"babel-plugin-jest-hoist@^26.6.2":
2706 + "integrity" "sha512-PO9t0697lNTmcEHH69mdtYiOIkkOlj9fySqfO3K1eCcdISevLAE0xY59VLLUj0SoiPiTX/JU2CYFpILydUa5Lw=="
2707 + "resolved" "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-26.6.2.tgz"
2708 + "version" "26.6.2"
2709 + dependencies:
2710 + "@babel/template" "^7.3.3"
2711 + "@babel/types" "^7.3.3"
2712 + "@types/babel__core" "^7.0.0"
2713 + "@types/babel__traverse" "^7.0.6"
2714 +
2715 +"babel-plugin-macros@2.8.0":
2716 + "integrity" "sha512-SEP5kJpfGYqYKpBrj5XU3ahw5p5GOHJ0U5ssOSQ/WBVdwkD2Dzlce95exQTs3jOVWPPKLBN2rlEWkCK7dSmLvg=="
2717 + "resolved" "https://registry.yarnpkg.com/babel-plugin-macros/-/babel-plugin-macros-2.8.0.tgz"
2718 + "version" "2.8.0"
2719 + dependencies:
2720 + "@babel/runtime" "^7.7.2"
2721 + "cosmiconfig" "^6.0.0"
2722 + "resolve" "^1.12.0"
2723 +
2724 +"babel-plugin-named-asset-import@^0.3.7":
2725 + "integrity" "sha512-squySRkf+6JGnvjoUtDEjSREJEBirnXi9NqP6rjSYsylxQxqBTz+pkmf395i9E2zsvmYUaI40BHo6SqZUdydlw=="
2726 + "resolved" "https://registry.yarnpkg.com/babel-plugin-named-asset-import/-/babel-plugin-named-asset-import-0.3.7.tgz"
2727 + "version" "0.3.7"
2728 +
2729 +"babel-plugin-polyfill-corejs2@^0.2.2":
2730 + "integrity" "sha512-kISrENsJ0z5dNPq5eRvcctITNHYXWOA4DUZRFYCz3jYCcvTb/A546LIddmoGNMVYg2U38OyFeNosQwI9ENTqIQ=="
2731 + "resolved" "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.2.2.tgz"
2732 + "version" "0.2.2"
2733 + dependencies:
2734 + "@babel/compat-data" "^7.13.11"
2735 + "@babel/helper-define-polyfill-provider" "^0.2.2"
2736 + "semver" "^6.1.1"
2737 +
2738 +"babel-plugin-polyfill-corejs3@^0.2.5":
2739 + "integrity" "sha512-ninF5MQNwAX9Z7c9ED+H2pGt1mXdP4TqzlHKyPIYmJIYz0N+++uwdM7RnJukklhzJ54Q84vA4ZJkgs7lu5vqcw=="
2740 + "resolved" "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.2.5.tgz"
2741 + "version" "0.2.5"
2742 + dependencies:
2743 + "@babel/helper-define-polyfill-provider" "^0.2.2"
2744 + "core-js-compat" "^3.16.2"
2745 +
2746 +"babel-plugin-polyfill-regenerator@^0.2.2":
2747 + "integrity" "sha512-Goy5ghsc21HgPDFtzRkSirpZVW35meGoTmTOb2bxqdl60ghub4xOidgNTHaZfQ2FaxQsKmwvXtOAkcIS4SMBWg=="
2748 + "resolved" "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.2.2.tgz"
2749 + "version" "0.2.2"
2750 + dependencies:
2751 + "@babel/helper-define-polyfill-provider" "^0.2.2"
2752 +
2753 +"babel-plugin-syntax-object-rest-spread@^6.8.0":
2754 + "integrity" "sha1-/WU28rzhODb/o6VFjEkDpZe7O/U="
2755 + "resolved" "https://registry.yarnpkg.com/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz"
2756 + "version" "6.13.0"
2757 +
2758 +"babel-plugin-transform-object-rest-spread@^6.26.0":
2759 + "integrity" "sha1-DzZpLVD+9rfi1LOsFHgTepY7ewY="
2760 + "resolved" "https://registry.yarnpkg.com/babel-plugin-transform-object-rest-spread/-/babel-plugin-transform-object-rest-spread-6.26.0.tgz"
2761 + "version" "6.26.0"
2762 + dependencies:
2763 + "babel-plugin-syntax-object-rest-spread" "^6.8.0"
2764 + "babel-runtime" "^6.26.0"
2765 +
2766 +"babel-plugin-transform-react-remove-prop-types@0.4.24":
2767 + "integrity" "sha512-eqj0hVcJUR57/Ug2zE1Yswsw4LhuqqHhD+8v120T1cl3kjg76QwtyBrdIk4WVwK+lAhBJVYCd/v+4nc4y+8JsA=="
2768 + "resolved" "https://registry.yarnpkg.com/babel-plugin-transform-react-remove-prop-types/-/babel-plugin-transform-react-remove-prop-types-0.4.24.tgz"
2769 + "version" "0.4.24"
2770 +
2771 +"babel-preset-current-node-syntax@^1.0.0":
2772 + "integrity" "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ=="
2773 + "resolved" "https://registry.yarnpkg.com/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz"
2774 + "version" "1.0.1"
2775 + dependencies:
2776 + "@babel/plugin-syntax-async-generators" "^7.8.4"
2777 + "@babel/plugin-syntax-bigint" "^7.8.3"
2778 + "@babel/plugin-syntax-class-properties" "^7.8.3"
2779 + "@babel/plugin-syntax-import-meta" "^7.8.3"
2780 + "@babel/plugin-syntax-json-strings" "^7.8.3"
2781 + "@babel/plugin-syntax-logical-assignment-operators" "^7.8.3"
2782 + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3"
2783 + "@babel/plugin-syntax-numeric-separator" "^7.8.3"
2784 + "@babel/plugin-syntax-object-rest-spread" "^7.8.3"
2785 + "@babel/plugin-syntax-optional-catch-binding" "^7.8.3"
2786 + "@babel/plugin-syntax-optional-chaining" "^7.8.3"
2787 + "@babel/plugin-syntax-top-level-await" "^7.8.3"
2788 +
2789 +"babel-preset-jest@^26.6.2":
2790 + "integrity" "sha512-YvdtlVm9t3k777c5NPQIv6cxFFFapys25HiUmuSgHwIZhfifweR5c5Sf5nwE3MAbfu327CYSvps8Yx6ANLyleQ=="
2791 + "resolved" "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-26.6.2.tgz"
2792 + "version" "26.6.2"
2793 + dependencies:
2794 + "babel-plugin-jest-hoist" "^26.6.2"
2795 + "babel-preset-current-node-syntax" "^1.0.0"
2796 +
2797 +"babel-preset-react-app@^10.0.0":
2798 + "integrity" "sha512-itL2z8v16khpuKutx5IH8UdCdSTuzrOhRFTEdIhveZ2i1iBKDrVE0ATa4sFVy+02GLucZNVBWtoarXBy0Msdpg=="
2799 + "resolved" "https://registry.yarnpkg.com/babel-preset-react-app/-/babel-preset-react-app-10.0.0.tgz"
2800 + "version" "10.0.0"
2801 + dependencies:
2802 + "@babel/core" "7.12.3"
2803 + "@babel/plugin-proposal-class-properties" "7.12.1"
2804 + "@babel/plugin-proposal-decorators" "7.12.1"
2805 + "@babel/plugin-proposal-nullish-coalescing-operator" "7.12.1"
2806 + "@babel/plugin-proposal-numeric-separator" "7.12.1"
2807 + "@babel/plugin-proposal-optional-chaining" "7.12.1"
2808 + "@babel/plugin-transform-flow-strip-types" "7.12.1"
2809 + "@babel/plugin-transform-react-display-name" "7.12.1"
2810 + "@babel/plugin-transform-runtime" "7.12.1"
2811 + "@babel/preset-env" "7.12.1"
2812 + "@babel/preset-react" "7.12.1"
2813 + "@babel/preset-typescript" "7.12.1"
2814 + "@babel/runtime" "7.12.1"
2815 + "babel-plugin-macros" "2.8.0"
2816 + "babel-plugin-transform-react-remove-prop-types" "0.4.24"
2817 +
2818 +"babel-runtime@^6.26.0":
2819 + "integrity" "sha1-llxwWGaOgrVde/4E/yM3vItWR/4="
2820 + "resolved" "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz"
2821 + "version" "6.26.0"
2822 + dependencies:
2823 + "core-js" "^2.4.0"
2824 + "regenerator-runtime" "^0.11.0"
2825 +
2826 +"babylon@^6.18.0":
2827 + "integrity" "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ=="
2828 + "resolved" "https://registry.yarnpkg.com/babylon/-/babylon-6.18.0.tgz"
2829 + "version" "6.18.0"
2830 +
2831 +"balanced-match@^1.0.0":
2832 + "integrity" "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="
2833 + "resolved" "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz"
2834 + "version" "1.0.2"
2835 +
2836 +"base@^0.11.1":
2837 + "integrity" "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg=="
2838 + "resolved" "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz"
2839 + "version" "0.11.2"
2840 + dependencies:
2841 + "cache-base" "^1.0.1"
2842 + "class-utils" "^0.3.5"
2843 + "component-emitter" "^1.2.1"
2844 + "define-property" "^1.0.0"
2845 + "isobject" "^3.0.1"
2846 + "mixin-deep" "^1.2.0"
2847 + "pascalcase" "^0.1.1"
2848 +
2849 +"base64-js@^1.0.2":
2850 + "integrity" "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA=="
2851 + "resolved" "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz"
2852 + "version" "1.5.1"
2853 +
2854 +"batch@0.6.1":
2855 + "integrity" "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY="
2856 + "resolved" "https://registry.yarnpkg.com/batch/-/batch-0.6.1.tgz"
2857 + "version" "0.6.1"
2858 +
2859 +"bfj@^7.0.2":
2860 + "integrity" "sha512-+e/UqUzwmzJamNF50tBV6tZPTORow7gQ96iFow+8b562OdMpEK0BcJEq2OSPEDmAbSMBQ7PKZ87ubFkgxpYWgw=="
2861 + "resolved" "https://registry.yarnpkg.com/bfj/-/bfj-7.0.2.tgz"
2862 + "version" "7.0.2"
2863 + dependencies:
2864 + "bluebird" "^3.5.5"
2865 + "check-types" "^11.1.1"
2866 + "hoopy" "^0.1.4"
2867 + "tryer" "^1.0.1"
2868 +
2869 +"big.js@^5.2.2":
2870 + "integrity" "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ=="
2871 + "resolved" "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz"
2872 + "version" "5.2.2"
2873 +
2874 +"binary-extensions@^1.0.0":
2875 + "integrity" "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw=="
2876 + "resolved" "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.13.1.tgz"
2877 + "version" "1.13.1"
2878 +
2879 +"binary-extensions@^2.0.0":
2880 + "integrity" "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA=="
2881 + "resolved" "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz"
2882 + "version" "2.2.0"
2883 +
2884 +"bindings@^1.5.0":
2885 + "integrity" "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ=="
2886 + "resolved" "https://registry.yarnpkg.com/bindings/-/bindings-1.5.0.tgz"
2887 + "version" "1.5.0"
2888 + dependencies:
2889 + "file-uri-to-path" "1.0.0"
2890 +
2891 +"bluebird@^3.5.5":
2892 + "integrity" "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg=="
2893 + "resolved" "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz"
2894 + "version" "3.7.2"
2895 +
2896 +"bn.js@^4.0.0", "bn.js@^4.1.0", "bn.js@^4.11.9":
2897 + "integrity" "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA=="
2898 + "resolved" "https://registry.yarnpkg.com/bn.js/-/bn.js-4.12.0.tgz"
2899 + "version" "4.12.0"
2900 +
2901 +"bn.js@^5.0.0":
2902 + "integrity" "sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw=="
2903 + "resolved" "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.0.tgz"
2904 + "version" "5.2.0"
2905 +
2906 +"bn.js@^5.1.1":
2907 + "integrity" "sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw=="
2908 + "resolved" "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.0.tgz"
2909 + "version" "5.2.0"
2910 +
2911 +"body-parser@1.19.0":
2912 + "integrity" "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw=="
2913 + "resolved" "https://registry.yarnpkg.com/body-parser/-/body-parser-1.19.0.tgz"
2914 + "version" "1.19.0"
2915 + dependencies:
2916 + "bytes" "3.1.0"
2917 + "content-type" "~1.0.4"
2918 + "debug" "2.6.9"
2919 + "depd" "~1.1.2"
2920 + "http-errors" "1.7.2"
2921 + "iconv-lite" "0.4.24"
2922 + "on-finished" "~2.3.0"
2923 + "qs" "6.7.0"
2924 + "raw-body" "2.4.0"
2925 + "type-is" "~1.6.17"
2926 +
2927 +"bonjour@^3.5.0":
2928 + "integrity" "sha1-jokKGD2O6aI5OzhExpGkK897yfU="
2929 + "resolved" "https://registry.yarnpkg.com/bonjour/-/bonjour-3.5.0.tgz"
2930 + "version" "3.5.0"
2931 + dependencies:
2932 + "array-flatten" "^2.1.0"
2933 + "deep-equal" "^1.0.1"
2934 + "dns-equal" "^1.0.0"
2935 + "dns-txt" "^2.0.2"
2936 + "multicast-dns" "^6.0.1"
2937 + "multicast-dns-service-types" "^1.1.0"
2938 +
2939 +"boolbase@^1.0.0", "boolbase@~1.0.0":
2940 + "integrity" "sha1-aN/1++YMUes3cl6p4+0xDcwed24="
2941 + "resolved" "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz"
2942 + "version" "1.0.0"
2943 +
2944 +"brace-expansion@^1.1.7":
2945 + "integrity" "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA=="
2946 + "resolved" "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz"
2947 + "version" "1.1.11"
2948 + dependencies:
2949 + "balanced-match" "^1.0.0"
2950 + "concat-map" "0.0.1"
2951 +
2952 +"braces@^2.3.1", "braces@^2.3.2":
2953 + "integrity" "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w=="
2954 + "resolved" "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz"
2955 + "version" "2.3.2"
2956 + dependencies:
2957 + "arr-flatten" "^1.1.0"
2958 + "array-unique" "^0.3.2"
2959 + "extend-shallow" "^2.0.1"
2960 + "fill-range" "^4.0.0"
2961 + "isobject" "^3.0.1"
2962 + "repeat-element" "^1.1.2"
2963 + "snapdragon" "^0.8.1"
2964 + "snapdragon-node" "^2.0.1"
2965 + "split-string" "^3.0.2"
2966 + "to-regex" "^3.0.1"
2967 +
2968 +"braces@^3.0.1":
2969 + "integrity" "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A=="
2970 + "resolved" "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz"
2971 + "version" "3.0.2"
2972 + dependencies:
2973 + "fill-range" "^7.0.1"
2974 +
2975 +"braces@~3.0.2":
2976 + "integrity" "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A=="
2977 + "resolved" "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz"
2978 + "version" "3.0.2"
2979 + dependencies:
2980 + "fill-range" "^7.0.1"
2981 +
2982 +"brorand@^1.0.1", "brorand@^1.1.0":
2983 + "integrity" "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8="
2984 + "resolved" "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz"
2985 + "version" "1.1.0"
2986 +
2987 +"browser-process-hrtime@^1.0.0":
2988 + "integrity" "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow=="
2989 + "resolved" "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz"
2990 + "version" "1.0.0"
2991 +
2992 +"browserify-aes@^1.0.0", "browserify-aes@^1.0.4":
2993 + "integrity" "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA=="
2994 + "resolved" "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.2.0.tgz"
2995 + "version" "1.2.0"
2996 + dependencies:
2997 + "buffer-xor" "^1.0.3"
2998 + "cipher-base" "^1.0.0"
2999 + "create-hash" "^1.1.0"
3000 + "evp_bytestokey" "^1.0.3"
3001 + "inherits" "^2.0.1"
3002 + "safe-buffer" "^5.0.1"
3003 +
3004 +"browserify-cipher@^1.0.0":
3005 + "integrity" "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w=="
3006 + "resolved" "https://registry.yarnpkg.com/browserify-cipher/-/browserify-cipher-1.0.1.tgz"
3007 + "version" "1.0.1"
3008 + dependencies:
3009 + "browserify-aes" "^1.0.4"
3010 + "browserify-des" "^1.0.0"
3011 + "evp_bytestokey" "^1.0.0"
3012 +
3013 +"browserify-des@^1.0.0":
3014 + "integrity" "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A=="
3015 + "resolved" "https://registry.yarnpkg.com/browserify-des/-/browserify-des-1.0.2.tgz"
3016 + "version" "1.0.2"
3017 + dependencies:
3018 + "cipher-base" "^1.0.1"
3019 + "des.js" "^1.0.0"
3020 + "inherits" "^2.0.1"
3021 + "safe-buffer" "^5.1.2"
3022 +
3023 +"browserify-rsa@^4.0.0", "browserify-rsa@^4.0.1":
3024 + "integrity" "sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog=="
3025 + "resolved" "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.1.0.tgz"
3026 + "version" "4.1.0"
3027 + dependencies:
3028 + "bn.js" "^5.0.0"
3029 + "randombytes" "^2.0.1"
3030 +
3031 +"browserify-sign@^4.0.0":
3032 + "integrity" "sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg=="
3033 + "resolved" "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.2.1.tgz"
3034 + "version" "4.2.1"
3035 + dependencies:
3036 + "bn.js" "^5.1.1"
3037 + "browserify-rsa" "^4.0.1"
3038 + "create-hash" "^1.2.0"
3039 + "create-hmac" "^1.1.7"
3040 + "elliptic" "^6.5.3"
3041 + "inherits" "^2.0.4"
3042 + "parse-asn1" "^5.1.5"
3043 + "readable-stream" "^3.6.0"
3044 + "safe-buffer" "^5.2.0"
3045 +
3046 +"browserify-zlib@^0.2.0":
3047 + "integrity" "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA=="
3048 + "resolved" "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.2.0.tgz"
3049 + "version" "0.2.0"
3050 + dependencies:
3051 + "pako" "~1.0.5"
3052 +
3053 +"browserslist@^4", "browserslist@^4.0.0", "browserslist@^4.12.0", "browserslist@^4.16.6", "browserslist@^4.17.3", "browserslist@^4.6.2", "browserslist@^4.6.4":
3054 + "integrity" "sha512-I3ekeB92mmpctWBoLXe0d5wPS2cBuRvvW0JyyJHMrk9/HmP2ZjrTboNAZ8iuGqaEIlKguljbQY32OkOJIRrgoA=="
3055 + "resolved" "https://registry.yarnpkg.com/browserslist/-/browserslist-4.17.5.tgz"
3056 + "version" "4.17.5"
3057 + dependencies:
3058 + "caniuse-lite" "^1.0.30001271"
3059 + "electron-to-chromium" "^1.3.878"
3060 + "escalade" "^3.1.1"
3061 + "node-releases" "^2.0.1"
3062 + "picocolors" "^1.0.0"
3063 +
3064 +"browserslist@4.14.2":
3065 + "integrity" "sha512-HI4lPveGKUR0x2StIz+2FXfDk9SfVMrxn6PLh1JeGUwcuoDkdKZebWiyLRJ68iIPDpMI4JLVDf7S7XzslgWOhw=="
3066 + "resolved" "https://registry.yarnpkg.com/browserslist/-/browserslist-4.14.2.tgz"
3067 + "version" "4.14.2"
3068 + dependencies:
3069 + "caniuse-lite" "^1.0.30001125"
3070 + "electron-to-chromium" "^1.3.564"
3071 + "escalade" "^3.0.2"
3072 + "node-releases" "^1.1.61"
3073 +
3074 +"bser@2.1.1":
3075 + "integrity" "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ=="
3076 + "resolved" "https://registry.yarnpkg.com/bser/-/bser-2.1.1.tgz"
3077 + "version" "2.1.1"
3078 + dependencies:
3079 + "node-int64" "^0.4.0"
3080 +
3081 +"buffer-from@^1.0.0":
3082 + "integrity" "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ=="
3083 + "resolved" "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz"
3084 + "version" "1.1.2"
3085 +
3086 +"buffer-indexof@^1.0.0":
3087 + "integrity" "sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g=="
3088 + "resolved" "https://registry.yarnpkg.com/buffer-indexof/-/buffer-indexof-1.1.1.tgz"
3089 + "version" "1.1.1"
3090 +
3091 +"buffer-xor@^1.0.3":
3092 + "integrity" "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk="
3093 + "resolved" "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz"
3094 + "version" "1.0.3"
3095 +
3096 +"buffer@^4.3.0":
3097 + "integrity" "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg=="
3098 + "resolved" "https://registry.yarnpkg.com/buffer/-/buffer-4.9.2.tgz"
3099 + "version" "4.9.2"
3100 + dependencies:
3101 + "base64-js" "^1.0.2"
3102 + "ieee754" "^1.1.4"
3103 + "isarray" "^1.0.0"
3104 +
3105 +"builtin-modules@^3.1.0":
3106 + "integrity" "sha512-lGzLKcioL90C7wMczpkY0n/oART3MbBa8R9OFGE1rJxoVI86u4WAGfEk8Wjv10eKSyTHVGkSo3bvBylCEtk7LA=="
3107 + "resolved" "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-3.2.0.tgz"
3108 + "version" "3.2.0"
3109 +
3110 +"builtin-status-codes@^3.0.0":
3111 + "integrity" "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug="
3112 + "resolved" "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz"
3113 + "version" "3.0.0"
3114 +
3115 +"bytes@3.0.0":
3116 + "integrity" "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg="
3117 + "resolved" "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz"
3118 + "version" "3.0.0"
3119 +
3120 +"bytes@3.1.0":
3121 + "integrity" "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg=="
3122 + "resolved" "https://registry.yarnpkg.com/bytes/-/bytes-3.1.0.tgz"
3123 + "version" "3.1.0"
3124 +
3125 +"cacache@^12.0.2":
3126 + "integrity" "sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ=="
3127 + "resolved" "https://registry.yarnpkg.com/cacache/-/cacache-12.0.4.tgz"
3128 + "version" "12.0.4"
3129 + dependencies:
3130 + "bluebird" "^3.5.5"
3131 + "chownr" "^1.1.1"
3132 + "figgy-pudding" "^3.5.1"
3133 + "glob" "^7.1.4"
3134 + "graceful-fs" "^4.1.15"
3135 + "infer-owner" "^1.0.3"
3136 + "lru-cache" "^5.1.1"
3137 + "mississippi" "^3.0.0"
3138 + "mkdirp" "^0.5.1"
3139 + "move-concurrently" "^1.0.1"
3140 + "promise-inflight" "^1.0.1"
3141 + "rimraf" "^2.6.3"
3142 + "ssri" "^6.0.1"
3143 + "unique-filename" "^1.1.1"
3144 + "y18n" "^4.0.0"
3145 +
3146 +"cacache@^15.0.5":
3147 + "integrity" "sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ=="
3148 + "resolved" "https://registry.yarnpkg.com/cacache/-/cacache-15.3.0.tgz"
3149 + "version" "15.3.0"
3150 + dependencies:
3151 + "@npmcli/fs" "^1.0.0"
3152 + "@npmcli/move-file" "^1.0.1"
3153 + "chownr" "^2.0.0"
3154 + "fs-minipass" "^2.0.0"
3155 + "glob" "^7.1.4"
3156 + "infer-owner" "^1.0.4"
3157 + "lru-cache" "^6.0.0"
3158 + "minipass" "^3.1.1"
3159 + "minipass-collect" "^1.0.2"
3160 + "minipass-flush" "^1.0.5"
3161 + "minipass-pipeline" "^1.2.2"
3162 + "mkdirp" "^1.0.3"
3163 + "p-map" "^4.0.0"
3164 + "promise-inflight" "^1.0.1"
3165 + "rimraf" "^3.0.2"
3166 + "ssri" "^8.0.1"
3167 + "tar" "^6.0.2"
3168 + "unique-filename" "^1.1.1"
3169 +
3170 +"cache-base@^1.0.1":
3171 + "integrity" "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ=="
3172 + "resolved" "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz"
3173 + "version" "1.0.1"
3174 + dependencies:
3175 + "collection-visit" "^1.0.0"
3176 + "component-emitter" "^1.2.1"
3177 + "get-value" "^2.0.6"
3178 + "has-value" "^1.0.0"
3179 + "isobject" "^3.0.1"
3180 + "set-value" "^2.0.0"
3181 + "to-object-path" "^0.3.0"
3182 + "union-value" "^1.0.0"
3183 + "unset-value" "^1.0.0"
3184 +
3185 +"call-bind@^1.0.0", "call-bind@^1.0.2":
3186 + "integrity" "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA=="
3187 + "resolved" "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz"
3188 + "version" "1.0.2"
3189 + dependencies:
3190 + "function-bind" "^1.1.1"
3191 + "get-intrinsic" "^1.0.2"
3192 +
3193 +"caller-callsite@^2.0.0":
3194 + "integrity" "sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ="
3195 + "resolved" "https://registry.yarnpkg.com/caller-callsite/-/caller-callsite-2.0.0.tgz"
3196 + "version" "2.0.0"
3197 + dependencies:
3198 + "callsites" "^2.0.0"
3199 +
3200 +"caller-path@^2.0.0":
3201 + "integrity" "sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ="
3202 + "resolved" "https://registry.yarnpkg.com/caller-path/-/caller-path-2.0.0.tgz"
3203 + "version" "2.0.0"
3204 + dependencies:
3205 + "caller-callsite" "^2.0.0"
3206 +
3207 +"callsites@^2.0.0":
3208 + "integrity" "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA="
3209 + "resolved" "https://registry.yarnpkg.com/callsites/-/callsites-2.0.0.tgz"
3210 + "version" "2.0.0"
3211 +
3212 +"callsites@^3.0.0":
3213 + "integrity" "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ=="
3214 + "resolved" "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz"
3215 + "version" "3.1.0"
3216 +
3217 +"camel-case@^4.1.1":
3218 + "integrity" "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw=="
3219 + "resolved" "https://registry.yarnpkg.com/camel-case/-/camel-case-4.1.2.tgz"
3220 + "version" "4.1.2"
3221 + dependencies:
3222 + "pascal-case" "^3.1.2"
3223 + "tslib" "^2.0.3"
3224 +
3225 +"camelcase@^5.0.0", "camelcase@^5.3.1", "camelcase@5.3.1":
3226 + "integrity" "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg=="
3227 + "resolved" "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz"
3228 + "version" "5.3.1"
3229 +
3230 +"camelcase@^6.0.0":
3231 + "integrity" "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg=="
3232 + "resolved" "https://registry.yarnpkg.com/camelcase/-/camelcase-6.2.0.tgz"
3233 + "version" "6.2.0"
3234 +
3235 +"camelcase@^6.1.0":
3236 + "integrity" "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg=="
3237 + "resolved" "https://registry.yarnpkg.com/camelcase/-/camelcase-6.2.0.tgz"
3238 + "version" "6.2.0"
3239 +
3240 +"camelcase@^6.2.0":
3241 + "integrity" "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg=="
3242 + "resolved" "https://registry.yarnpkg.com/camelcase/-/camelcase-6.2.0.tgz"
3243 + "version" "6.2.0"
3244 +
3245 +"caniuse-api@^3.0.0":
3246 + "integrity" "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw=="
3247 + "resolved" "https://registry.yarnpkg.com/caniuse-api/-/caniuse-api-3.0.0.tgz"
3248 + "version" "3.0.0"
3249 + dependencies:
3250 + "browserslist" "^4.0.0"
3251 + "caniuse-lite" "^1.0.0"
3252 + "lodash.memoize" "^4.1.2"
3253 + "lodash.uniq" "^4.5.0"
3254 +
3255 +"caniuse-lite@^1.0.0", "caniuse-lite@^1.0.30000981", "caniuse-lite@^1.0.30001109", "caniuse-lite@^1.0.30001125", "caniuse-lite@^1.0.30001271":
3256 + "integrity" "sha512-BBruZFWmt3HFdVPS8kceTBIguKxu4f99n5JNp06OlPD/luoAMIaIK5ieV5YjnBLH3Nysai9sxj9rpJj4ZisXOA=="
3257 + "resolved" "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001271.tgz"
3258 + "version" "1.0.30001271"
3259 +
3260 +"capture-exit@^2.0.0":
3261 + "integrity" "sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g=="
3262 + "resolved" "https://registry.yarnpkg.com/capture-exit/-/capture-exit-2.0.0.tgz"
3263 + "version" "2.0.0"
3264 + dependencies:
3265 + "rsvp" "^4.8.4"
3266 +
3267 +"case-sensitive-paths-webpack-plugin@2.3.0":
3268 + "integrity" "sha512-/4YgnZS8y1UXXmC02xD5rRrBEu6T5ub+mQHLNRj0fzTRbgdBYhsNo2V5EqwgqrExjxsjtF/OpAKAMkKsxbD5XQ=="
3269 + "resolved" "https://registry.yarnpkg.com/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.3.0.tgz"
3270 + "version" "2.3.0"
3271 +
3272 +"chalk@^2.0.0":
3273 + "integrity" "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ=="
3274 + "resolved" "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz"
3275 + "version" "2.4.2"
3276 + dependencies:
3277 + "ansi-styles" "^3.2.1"
3278 + "escape-string-regexp" "^1.0.5"
3279 + "supports-color" "^5.3.0"
3280 +
3281 +"chalk@^2.4.1":
3282 + "integrity" "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ=="
3283 + "resolved" "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz"
3284 + "version" "2.4.2"
3285 + dependencies:
3286 + "ansi-styles" "^3.2.1"
3287 + "escape-string-regexp" "^1.0.5"
3288 + "supports-color" "^5.3.0"
3289 +
3290 +"chalk@^2.4.2":
3291 + "integrity" "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ=="
3292 + "resolved" "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz"
3293 + "version" "2.4.2"
3294 + dependencies:
3295 + "ansi-styles" "^3.2.1"
3296 + "escape-string-regexp" "^1.0.5"
3297 + "supports-color" "^5.3.0"
3298 +
3299 +"chalk@^4.0.0":
3300 + "integrity" "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="
3301 + "resolved" "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz"
3302 + "version" "4.1.2"
3303 + dependencies:
3304 + "ansi-styles" "^4.1.0"
3305 + "supports-color" "^7.1.0"
3306 +
3307 +"chalk@2.4.2":
3308 + "integrity" "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ=="
3309 + "resolved" "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz"
3310 + "version" "2.4.2"
3311 + dependencies:
3312 + "ansi-styles" "^3.2.1"
3313 + "escape-string-regexp" "^1.0.5"
3314 + "supports-color" "^5.3.0"
3315 +
3316 +"char-regex@^1.0.2":
3317 + "integrity" "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw=="
3318 + "resolved" "https://registry.yarnpkg.com/char-regex/-/char-regex-1.0.2.tgz"
3319 + "version" "1.0.2"
3320 +
3321 +"check-types@^11.1.1":
3322 + "integrity" "sha512-tzWzvgePgLORb9/3a0YenggReLKAIb2owL03H2Xdoe5pKcUyWRSEQ8xfCar8t2SIAuEDwtmx2da1YB52YuHQMQ=="
3323 + "resolved" "https://registry.yarnpkg.com/check-types/-/check-types-11.1.2.tgz"
3324 + "version" "11.1.2"
3325 +
3326 +"chokidar@^2.1.8":
3327 + "integrity" "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg=="
3328 + "resolved" "https://registry.yarnpkg.com/chokidar/-/chokidar-2.1.8.tgz"
3329 + "version" "2.1.8"
3330 + dependencies:
3331 + "anymatch" "^2.0.0"
3332 + "async-each" "^1.0.1"
3333 + "braces" "^2.3.2"
3334 + "glob-parent" "^3.1.0"
3335 + "inherits" "^2.0.3"
3336 + "is-binary-path" "^1.0.0"
3337 + "is-glob" "^4.0.0"
3338 + "normalize-path" "^3.0.0"
3339 + "path-is-absolute" "^1.0.0"
3340 + "readdirp" "^2.2.1"
3341 + "upath" "^1.1.1"
3342 + optionalDependencies:
3343 + "fsevents" "^1.2.7"
3344 +
3345 +"chokidar@^3.4.0":
3346 + "integrity" "sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ=="
3347 + "resolved" "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.2.tgz"
3348 + "version" "3.5.2"
3349 + dependencies:
3350 + "anymatch" "~3.1.2"
3351 + "braces" "~3.0.2"
3352 + "glob-parent" "~5.1.2"
3353 + "is-binary-path" "~2.1.0"
3354 + "is-glob" "~4.0.1"
3355 + "normalize-path" "~3.0.0"
3356 + "readdirp" "~3.6.0"
3357 + optionalDependencies:
3358 + "fsevents" "~2.3.2"
3359 +
3360 +"chokidar@^3.4.1":
3361 + "integrity" "sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ=="
3362 + "resolved" "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.2.tgz"
3363 + "version" "3.5.2"
3364 + dependencies:
3365 + "anymatch" "~3.1.2"
3366 + "braces" "~3.0.2"
3367 + "glob-parent" "~5.1.2"
3368 + "is-binary-path" "~2.1.0"
3369 + "is-glob" "~4.0.1"
3370 + "normalize-path" "~3.0.0"
3371 + "readdirp" "~3.6.0"
3372 + optionalDependencies:
3373 + "fsevents" "~2.3.2"
3374 +
3375 +"chownr@^1.1.1":
3376 + "integrity" "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg=="
3377 + "resolved" "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz"
3378 + "version" "1.1.4"
3379 +
3380 +"chownr@^2.0.0":
3381 + "integrity" "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ=="
3382 + "resolved" "https://registry.yarnpkg.com/chownr/-/chownr-2.0.0.tgz"
3383 + "version" "2.0.0"
3384 +
3385 +"chrome-trace-event@^1.0.2":
3386 + "integrity" "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg=="
3387 + "resolved" "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz"
3388 + "version" "1.0.3"
3389 +
3390 +"ci-info@^2.0.0":
3391 + "integrity" "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ=="
3392 + "resolved" "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz"
3393 + "version" "2.0.0"
3394 +
3395 +"cipher-base@^1.0.0", "cipher-base@^1.0.1", "cipher-base@^1.0.3":
3396 + "integrity" "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q=="
3397 + "resolved" "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz"
3398 + "version" "1.0.4"
3399 + dependencies:
3400 + "inherits" "^2.0.1"
3401 + "safe-buffer" "^5.0.1"
3402 +
3403 +"cjs-module-lexer@^0.6.0":
3404 + "integrity" "sha512-uc2Vix1frTfnuzxxu1Hp4ktSvM3QaI4oXl4ZUqL1wjTu/BGki9TrCWoqLTg/drR1KwAEarXuRFCG2Svr1GxPFw=="
3405 + "resolved" "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-0.6.0.tgz"
3406 + "version" "0.6.0"
3407 +
3408 +"class-utils@^0.3.5":
3409 + "integrity" "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg=="
3410 + "resolved" "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz"
3411 + "version" "0.3.6"
3412 + dependencies:
3413 + "arr-union" "^3.1.0"
3414 + "define-property" "^0.2.5"
3415 + "isobject" "^3.0.0"
3416 + "static-extend" "^0.1.1"
3417 +
3418 +"clean-css@^4.2.3":
3419 + "integrity" "sha512-EJUDT7nDVFDvaQgAo2G/PJvxmp1o/c6iXLbswsBbUFXi1Nr+AjA2cKmfbKDMjMvzEe75g3P6JkaDDAKk96A85A=="
3420 + "resolved" "https://registry.yarnpkg.com/clean-css/-/clean-css-4.2.4.tgz"
3421 + "version" "4.2.4"
3422 + dependencies:
3423 + "source-map" "~0.6.0"
3424 +
3425 +"clean-stack@^2.0.0":
3426 + "integrity" "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A=="
3427 + "resolved" "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz"
3428 + "version" "2.2.0"
3429 +
3430 +"cliui@^5.0.0":
3431 + "integrity" "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA=="
3432 + "resolved" "https://registry.yarnpkg.com/cliui/-/cliui-5.0.0.tgz"
3433 + "version" "5.0.0"
3434 + dependencies:
3435 + "string-width" "^3.1.0"
3436 + "strip-ansi" "^5.2.0"
3437 + "wrap-ansi" "^5.1.0"
3438 +
3439 +"cliui@^6.0.0":
3440 + "integrity" "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ=="
3441 + "resolved" "https://registry.yarnpkg.com/cliui/-/cliui-6.0.0.tgz"
3442 + "version" "6.0.0"
3443 + dependencies:
3444 + "string-width" "^4.2.0"
3445 + "strip-ansi" "^6.0.0"
3446 + "wrap-ansi" "^6.2.0"
3447 +
3448 +"co@^4.6.0":
3449 + "integrity" "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ="
3450 + "resolved" "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz"
3451 + "version" "4.6.0"
3452 +
3453 +"coa@^2.0.2":
3454 + "integrity" "sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA=="
3455 + "resolved" "https://registry.yarnpkg.com/coa/-/coa-2.0.2.tgz"
3456 + "version" "2.0.2"
3457 + dependencies:
3458 + "@types/q" "^1.5.1"
3459 + "chalk" "^2.4.1"
3460 + "q" "^1.1.2"
3461 +
3462 +"collect-v8-coverage@^1.0.0":
3463 + "integrity" "sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg=="
3464 + "resolved" "https://registry.yarnpkg.com/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz"
3465 + "version" "1.0.1"
3466 +
3467 +"collection-visit@^1.0.0":
3468 + "integrity" "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA="
3469 + "resolved" "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz"
3470 + "version" "1.0.0"
3471 + dependencies:
3472 + "map-visit" "^1.0.0"
3473 + "object-visit" "^1.0.0"
3474 +
3475 +"color-convert@^1.9.0", "color-convert@^1.9.3":
3476 + "integrity" "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg=="
3477 + "resolved" "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz"
3478 + "version" "1.9.3"
3479 + dependencies:
3480 + "color-name" "1.1.3"
3481 +
3482 +"color-convert@^2.0.1":
3483 + "integrity" "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ=="
3484 + "resolved" "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz"
3485 + "version" "2.0.1"
3486 + dependencies:
3487 + "color-name" "~1.1.4"
3488 +
3489 +"color-name@^1.0.0", "color-name@~1.1.4":
3490 + "integrity" "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
3491 + "resolved" "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz"
3492 + "version" "1.1.4"
3493 +
3494 +"color-name@1.1.3":
3495 + "integrity" "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU="
3496 + "resolved" "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz"
3497 + "version" "1.1.3"
3498 +
3499 +"color-string@^1.6.0":
3500 + "integrity" "sha512-c/hGS+kRWJutUBEngKKmk4iH3sD59MBkoxVapS/0wgpCz2u7XsNloxknyvBhzwEs1IbV36D9PwqLPJ2DTu3vMA=="
3501 + "resolved" "https://registry.yarnpkg.com/color-string/-/color-string-1.6.0.tgz"
3502 + "version" "1.6.0"
3503 + dependencies:
3504 + "color-name" "^1.0.0"
3505 + "simple-swizzle" "^0.2.2"
3506 +
3507 +"color@^3.0.0":
3508 + "integrity" "sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA=="
3509 + "resolved" "https://registry.yarnpkg.com/color/-/color-3.2.1.tgz"
3510 + "version" "3.2.1"
3511 + dependencies:
3512 + "color-convert" "^1.9.3"
3513 + "color-string" "^1.6.0"
3514 +
3515 +"combined-stream@^1.0.8":
3516 + "integrity" "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg=="
3517 + "resolved" "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz"
3518 + "version" "1.0.8"
3519 + dependencies:
3520 + "delayed-stream" "~1.0.0"
3521 +
3522 +"commander@^2.20.0":
3523 + "integrity" "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ=="
3524 + "resolved" "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz"
3525 + "version" "2.20.3"
3526 +
3527 +"commander@^4.0.1":
3528 + "integrity" "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA=="
3529 + "resolved" "https://registry.yarnpkg.com/commander/-/commander-4.1.1.tgz"
3530 + "version" "4.1.1"
3531 +
3532 +"commander@^4.1.1":
3533 + "integrity" "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA=="
3534 + "resolved" "https://registry.yarnpkg.com/commander/-/commander-4.1.1.tgz"
3535 + "version" "4.1.1"
3536 +
3537 +"common-tags@^1.8.0":
3538 + "integrity" "sha512-6P6g0uetGpW/sdyUy/iQQCbFF0kWVMSIVSyYz7Zgjcgh8mgw8PQzDNZeyZ5DQ2gM7LBoZPHmnjz8rUthkBG5tw=="
3539 + "resolved" "https://registry.yarnpkg.com/common-tags/-/common-tags-1.8.0.tgz"
3540 + "version" "1.8.0"
3541 +
3542 +"commondir@^1.0.1":
3543 + "integrity" "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs="
3544 + "resolved" "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz"
3545 + "version" "1.0.1"
3546 +
3547 +"component-emitter@^1.2.1":
3548 + "integrity" "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg=="
3549 + "resolved" "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz"
3550 + "version" "1.3.0"
3551 +
3552 +"compose-function@3.0.3":
3553 + "integrity" "sha1-ntZ18TzFRQHTCVCkhv9qe6OrGF8="
3554 + "resolved" "https://registry.yarnpkg.com/compose-function/-/compose-function-3.0.3.tgz"
3555 + "version" "3.0.3"
3556 + dependencies:
3557 + "arity-n" "^1.0.4"
3558 +
3559 +"compressible@~2.0.16":
3560 + "integrity" "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg=="
3561 + "resolved" "https://registry.yarnpkg.com/compressible/-/compressible-2.0.18.tgz"
3562 + "version" "2.0.18"
3563 + dependencies:
3564 + "mime-db" ">= 1.43.0 < 2"
3565 +
3566 +"compression@^1.7.4":
3567 + "integrity" "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ=="
3568 + "resolved" "https://registry.yarnpkg.com/compression/-/compression-1.7.4.tgz"
3569 + "version" "1.7.4"
3570 + dependencies:
3571 + "accepts" "~1.3.5"
3572 + "bytes" "3.0.0"
3573 + "compressible" "~2.0.16"
3574 + "debug" "2.6.9"
3575 + "on-headers" "~1.0.2"
3576 + "safe-buffer" "5.1.2"
3577 + "vary" "~1.1.2"
3578 +
3579 +"concat-map@0.0.1":
3580 + "integrity" "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s="
3581 + "resolved" "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz"
3582 + "version" "0.0.1"
3583 +
3584 +"concat-stream@^1.5.0":
3585 + "integrity" "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw=="
3586 + "resolved" "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz"
3587 + "version" "1.6.2"
3588 + dependencies:
3589 + "buffer-from" "^1.0.0"
3590 + "inherits" "^2.0.3"
3591 + "readable-stream" "^2.2.2"
3592 + "typedarray" "^0.0.6"
3593 +
3594 +"confusing-browser-globals@^1.0.10":
3595 + "integrity" "sha512-gNld/3lySHwuhaVluJUKLePYirM3QNCKzVxqAdhJII9/WXKVX5PURzMVJspS1jTslSqjeuG4KMVTSouit5YPHA=="
3596 + "resolved" "https://registry.yarnpkg.com/confusing-browser-globals/-/confusing-browser-globals-1.0.10.tgz"
3597 + "version" "1.0.10"
3598 +
3599 +"connect-history-api-fallback@^1.6.0":
3600 + "integrity" "sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg=="
3601 + "resolved" "https://registry.yarnpkg.com/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz"
3602 + "version" "1.6.0"
3603 +
3604 +"console-browserify@^1.1.0":
3605 + "integrity" "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA=="
3606 + "resolved" "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.2.0.tgz"
3607 + "version" "1.2.0"
3608 +
3609 +"constants-browserify@^1.0.0":
3610 + "integrity" "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U="
3611 + "resolved" "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz"
3612 + "version" "1.0.0"
3613 +
3614 +"content-disposition@0.5.3":
3615 + "integrity" "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g=="
3616 + "resolved" "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.3.tgz"
3617 + "version" "0.5.3"
3618 + dependencies:
3619 + "safe-buffer" "5.1.2"
3620 +
3621 +"content-type@~1.0.4":
3622 + "integrity" "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA=="
3623 + "resolved" "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz"
3624 + "version" "1.0.4"
3625 +
3626 +"convert-source-map@^0.3.3":
3627 + "integrity" "sha1-8dgClQr33SYxof6+BZZVDIarMZA="
3628 + "resolved" "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-0.3.5.tgz"
3629 + "version" "0.3.5"
3630 +
3631 +"convert-source-map@^1.1.0", "convert-source-map@^1.4.0", "convert-source-map@^1.6.0", "convert-source-map@^1.7.0":
3632 + "integrity" "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA=="
3633 + "resolved" "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.8.0.tgz"
3634 + "version" "1.8.0"
3635 + dependencies:
3636 + "safe-buffer" "~5.1.1"
3637 +
3638 +"convert-source-map@1.7.0":
3639 + "integrity" "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA=="
3640 + "resolved" "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.7.0.tgz"
3641 + "version" "1.7.0"
3642 + dependencies:
3643 + "safe-buffer" "~5.1.1"
3644 +
3645 +"cookie-signature@1.0.6":
3646 + "integrity" "sha1-4wOogrNCzD7oylE6eZmXNNqzriw="
3647 + "resolved" "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz"
3648 + "version" "1.0.6"
3649 +
3650 +"cookie@0.4.0":
3651 + "integrity" "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg=="
3652 + "resolved" "https://registry.yarnpkg.com/cookie/-/cookie-0.4.0.tgz"
3653 + "version" "0.4.0"
3654 +
3655 +"copy-concurrently@^1.0.0":
3656 + "integrity" "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A=="
3657 + "resolved" "https://registry.yarnpkg.com/copy-concurrently/-/copy-concurrently-1.0.5.tgz"
3658 + "version" "1.0.5"
3659 + dependencies:
3660 + "aproba" "^1.1.1"
3661 + "fs-write-stream-atomic" "^1.0.8"
3662 + "iferr" "^0.1.5"
3663 + "mkdirp" "^0.5.1"
3664 + "rimraf" "^2.5.4"
3665 + "run-queue" "^1.0.0"
3666 +
3667 +"copy-descriptor@^0.1.0":
3668 + "integrity" "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40="
3669 + "resolved" "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz"
3670 + "version" "0.1.1"
3671 +
3672 +"core-js-compat@^3.16.0", "core-js-compat@^3.16.2", "core-js-compat@^3.6.2":
3673 + "integrity" "sha512-4zP6/y0a2RTHN5bRGT7PTq9lVt3WzvffTNjqnTKsXhkAYNDTkdCLOIfAdOLcQ/7TDdyRj3c+NeHe1NmF1eDScw=="
3674 + "resolved" "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.18.3.tgz"
3675 + "version" "3.18.3"
3676 + dependencies:
3677 + "browserslist" "^4.17.3"
3678 + "semver" "7.0.0"
3679 +
3680 +"core-js-pure@^3.16.0":
3681 + "integrity" "sha512-qfskyO/KjtbYn09bn1IPkuhHl5PlJ6IzJ9s9sraJ1EqcuGyLGKzhSM1cY0zgyL9hx42eulQLZ6WaeK5ycJCkqw=="
3682 + "resolved" "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.18.3.tgz"
3683 + "version" "3.18.3"
3684 +
3685 +"core-js@^2.4.0":
3686 + "integrity" "sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ=="
3687 + "resolved" "https://registry.yarnpkg.com/core-js/-/core-js-2.6.12.tgz"
3688 + "version" "2.6.12"
3689 +
3690 +"core-js@^3.6.5":
3691 + "integrity" "sha512-tReEhtMReZaPFVw7dajMx0vlsz3oOb8ajgPoHVYGxr8ErnZ6PcYEvvmjGmXlfpnxpkYSdOQttjB+MvVbCGfvLw=="
3692 + "resolved" "https://registry.yarnpkg.com/core-js/-/core-js-3.18.3.tgz"
3693 + "version" "3.18.3"
3694 +
3695 +"core-util-is@~1.0.0":
3696 + "integrity" "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ=="
3697 + "resolved" "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz"
3698 + "version" "1.0.3"
3699 +
3700 +"cosmiconfig@^5.0.0":
3701 + "integrity" "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA=="
3702 + "resolved" "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-5.2.1.tgz"
3703 + "version" "5.2.1"
3704 + dependencies:
3705 + "import-fresh" "^2.0.0"
3706 + "is-directory" "^0.3.1"
3707 + "js-yaml" "^3.13.1"
3708 + "parse-json" "^4.0.0"
3709 +
3710 +"cosmiconfig@^6.0.0":
3711 + "integrity" "sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg=="
3712 + "resolved" "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-6.0.0.tgz"
3713 + "version" "6.0.0"
3714 + dependencies:
3715 + "@types/parse-json" "^4.0.0"
3716 + "import-fresh" "^3.1.0"
3717 + "parse-json" "^5.0.0"
3718 + "path-type" "^4.0.0"
3719 + "yaml" "^1.7.2"
3720 +
3721 +"cosmiconfig@^7.0.0":
3722 + "integrity" "sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ=="
3723 + "resolved" "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-7.0.1.tgz"
3724 + "version" "7.0.1"
3725 + dependencies:
3726 + "@types/parse-json" "^4.0.0"
3727 + "import-fresh" "^3.2.1"
3728 + "parse-json" "^5.0.0"
3729 + "path-type" "^4.0.0"
3730 + "yaml" "^1.10.0"
3731 +
3732 +"create-ecdh@^4.0.0":
3733 + "integrity" "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A=="
3734 + "resolved" "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.4.tgz"
3735 + "version" "4.0.4"
3736 + dependencies:
3737 + "bn.js" "^4.1.0"
3738 + "elliptic" "^6.5.3"
3739 +
3740 +"create-hash@^1.1.0", "create-hash@^1.1.2", "create-hash@^1.2.0":
3741 + "integrity" "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg=="
3742 + "resolved" "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz"
3743 + "version" "1.2.0"
3744 + dependencies:
3745 + "cipher-base" "^1.0.1"
3746 + "inherits" "^2.0.1"
3747 + "md5.js" "^1.3.4"
3748 + "ripemd160" "^2.0.1"
3749 + "sha.js" "^2.4.0"
3750 +
3751 +"create-hmac@^1.1.0", "create-hmac@^1.1.4", "create-hmac@^1.1.7":
3752 + "integrity" "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg=="
3753 + "resolved" "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.7.tgz"
3754 + "version" "1.1.7"
3755 + dependencies:
3756 + "cipher-base" "^1.0.3"
3757 + "create-hash" "^1.1.0"
3758 + "inherits" "^2.0.1"
3759 + "ripemd160" "^2.0.0"
3760 + "safe-buffer" "^5.0.1"
3761 + "sha.js" "^2.4.8"
3762 +
3763 +"cross-spawn@^6.0.0":
3764 + "integrity" "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ=="
3765 + "resolved" "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz"
3766 + "version" "6.0.5"
3767 + dependencies:
3768 + "nice-try" "^1.0.4"
3769 + "path-key" "^2.0.1"
3770 + "semver" "^5.5.0"
3771 + "shebang-command" "^1.2.0"
3772 + "which" "^1.2.9"
3773 +
3774 +"cross-spawn@^7.0.0", "cross-spawn@^7.0.2", "cross-spawn@7.0.3":
3775 + "integrity" "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w=="
3776 + "resolved" "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz"
3777 + "version" "7.0.3"
3778 + dependencies:
3779 + "path-key" "^3.1.0"
3780 + "shebang-command" "^2.0.0"
3781 + "which" "^2.0.1"
3782 +
3783 +"crypto-browserify@^3.11.0":
3784 + "integrity" "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg=="
3785 + "resolved" "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz"
3786 + "version" "3.12.0"
3787 + dependencies:
3788 + "browserify-cipher" "^1.0.0"
3789 + "browserify-sign" "^4.0.0"
3790 + "create-ecdh" "^4.0.0"
3791 + "create-hash" "^1.1.0"
3792 + "create-hmac" "^1.1.0"
3793 + "diffie-hellman" "^5.0.0"
3794 + "inherits" "^2.0.1"
3795 + "pbkdf2" "^3.0.3"
3796 + "public-encrypt" "^4.0.0"
3797 + "randombytes" "^2.0.0"
3798 + "randomfill" "^1.0.3"
3799 +
3800 +"crypto-random-string@^1.0.0":
3801 + "integrity" "sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4="
3802 + "resolved" "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-1.0.0.tgz"
3803 + "version" "1.0.0"
3804 +
3805 +"css-blank-pseudo@^0.1.4":
3806 + "integrity" "sha512-LHz35Hr83dnFeipc7oqFDmsjHdljj3TQtxGGiNWSOsTLIAubSm4TEz8qCaKFpk7idaQ1GfWscF4E6mgpBysA1w=="
3807 + "resolved" "https://registry.yarnpkg.com/css-blank-pseudo/-/css-blank-pseudo-0.1.4.tgz"
3808 + "version" "0.1.4"
3809 + dependencies:
3810 + "postcss" "^7.0.5"
3811 +
3812 +"css-color-names@^0.0.4", "css-color-names@0.0.4":
3813 + "integrity" "sha1-gIrcLnnPhHOAabZGyyDsJ762KeA="
3814 + "resolved" "https://registry.yarnpkg.com/css-color-names/-/css-color-names-0.0.4.tgz"
3815 + "version" "0.0.4"
3816 +
3817 +"css-declaration-sorter@^4.0.1":
3818 + "integrity" "sha512-BcxQSKTSEEQUftYpBVnsH4SF05NTuBokb19/sBt6asXGKZ/6VP7PLG1CBCkFDYOnhXhPh0jMhO6xZ71oYHXHBA=="
3819 + "resolved" "https://registry.yarnpkg.com/css-declaration-sorter/-/css-declaration-sorter-4.0.1.tgz"
3820 + "version" "4.0.1"
3821 + dependencies:
3822 + "postcss" "^7.0.1"
3823 + "timsort" "^0.3.0"
3824 +
3825 +"css-has-pseudo@^0.10.0":
3826 + "integrity" "sha512-Z8hnfsZu4o/kt+AuFzeGpLVhFOGO9mluyHBaA2bA8aCGTwah5sT3WV/fTHH8UNZUytOIImuGPrl/prlb4oX4qQ=="
3827 + "resolved" "https://registry.yarnpkg.com/css-has-pseudo/-/css-has-pseudo-0.10.0.tgz"
3828 + "version" "0.10.0"
3829 + dependencies:
3830 + "postcss" "^7.0.6"
3831 + "postcss-selector-parser" "^5.0.0-rc.4"
3832 +
3833 +"css-loader@4.3.0":
3834 + "integrity" "sha512-rdezjCjScIrsL8BSYszgT4s476IcNKt6yX69t0pHjJVnPUTDpn4WfIpDQTN3wCJvUvfsz/mFjuGOekf3PY3NUg=="
3835 + "resolved" "https://registry.yarnpkg.com/css-loader/-/css-loader-4.3.0.tgz"
3836 + "version" "4.3.0"
3837 + dependencies:
3838 + "camelcase" "^6.0.0"
3839 + "cssesc" "^3.0.0"
3840 + "icss-utils" "^4.1.1"
3841 + "loader-utils" "^2.0.0"
3842 + "postcss" "^7.0.32"
3843 + "postcss-modules-extract-imports" "^2.0.0"
3844 + "postcss-modules-local-by-default" "^3.0.3"
3845 + "postcss-modules-scope" "^2.2.0"
3846 + "postcss-modules-values" "^3.0.0"
3847 + "postcss-value-parser" "^4.1.0"
3848 + "schema-utils" "^2.7.1"
3849 + "semver" "^7.3.2"
3850 +
3851 +"css-prefers-color-scheme@^3.1.1":
3852 + "integrity" "sha512-MTu6+tMs9S3EUqzmqLXEcgNRbNkkD/TGFvowpeoWJn5Vfq7FMgsmRQs9X5NXAURiOBmOxm/lLjsDNXDE6k9bhg=="
3853 + "resolved" "https://registry.yarnpkg.com/css-prefers-color-scheme/-/css-prefers-color-scheme-3.1.1.tgz"
3854 + "version" "3.1.1"
3855 + dependencies:
3856 + "postcss" "^7.0.5"
3857 +
3858 +"css-select-base-adapter@^0.1.1":
3859 + "integrity" "sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w=="
3860 + "resolved" "https://registry.yarnpkg.com/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz"
3861 + "version" "0.1.1"
3862 +
3863 +"css-select@^2.0.0":
3864 + "integrity" "sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ=="
3865 + "resolved" "https://registry.yarnpkg.com/css-select/-/css-select-2.1.0.tgz"
3866 + "version" "2.1.0"
3867 + dependencies:
3868 + "boolbase" "^1.0.0"
3869 + "css-what" "^3.2.1"
3870 + "domutils" "^1.7.0"
3871 + "nth-check" "^1.0.2"
3872 +
3873 +"css-select@^4.1.3":
3874 + "integrity" "sha512-gT3wBNd9Nj49rAbmtFHj1cljIAOLYSX1nZ8CB7TBO3INYckygm5B7LISU/szY//YmdiSLbJvDLOx9VnMVpMBxA=="
3875 + "resolved" "https://registry.yarnpkg.com/css-select/-/css-select-4.1.3.tgz"
3876 + "version" "4.1.3"
3877 + dependencies:
3878 + "boolbase" "^1.0.0"
3879 + "css-what" "^5.0.0"
3880 + "domhandler" "^4.2.0"
3881 + "domutils" "^2.6.0"
3882 + "nth-check" "^2.0.0"
3883 +
3884 +"css-tree@^1.1.2":
3885 + "integrity" "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q=="
3886 + "resolved" "https://registry.yarnpkg.com/css-tree/-/css-tree-1.1.3.tgz"
3887 + "version" "1.1.3"
3888 + dependencies:
3889 + "mdn-data" "2.0.14"
3890 + "source-map" "^0.6.1"
3891 +
3892 +"css-tree@1.0.0-alpha.37":
3893 + "integrity" "sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg=="
3894 + "resolved" "https://registry.yarnpkg.com/css-tree/-/css-tree-1.0.0-alpha.37.tgz"
3895 + "version" "1.0.0-alpha.37"
3896 + dependencies:
3897 + "mdn-data" "2.0.4"
3898 + "source-map" "^0.6.1"
3899 +
3900 +"css-what@^3.2.1":
3901 + "integrity" "sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ=="
3902 + "resolved" "https://registry.yarnpkg.com/css-what/-/css-what-3.4.2.tgz"
3903 + "version" "3.4.2"
3904 +
3905 +"css-what@^5.0.0":
3906 + "integrity" "sha512-arSMRWIIFY0hV8pIxZMEfmMI47Wj3R/aWpZDDxWYCPEiOMv6tfOrnpDtgxBYPEQD4V0Y/958+1TdC3iWTFcUPw=="
3907 + "resolved" "https://registry.yarnpkg.com/css-what/-/css-what-5.1.0.tgz"
3908 + "version" "5.1.0"
3909 +
3910 +"css@^2.0.0":
3911 + "integrity" "sha512-oUnjmWpy0niI3x/mPL8dVEI1l7MnG3+HHyRPHf+YFSbK+svOhXpmSOcDURUh2aOCgl2grzrOPt1nHLuCVFULLw=="
3912 + "resolved" "https://registry.yarnpkg.com/css/-/css-2.2.4.tgz"
3913 + "version" "2.2.4"
3914 + dependencies:
3915 + "inherits" "^2.0.3"
3916 + "source-map" "^0.6.1"
3917 + "source-map-resolve" "^0.5.2"
3918 + "urix" "^0.1.0"
3919 +
3920 +"cssdb@^4.4.0":
3921 + "integrity" "sha512-LsTAR1JPEM9TpGhl/0p3nQecC2LJ0kD8X5YARu1hk/9I1gril5vDtMZyNxcEpxxDj34YNck/ucjuoUd66K03oQ=="
3922 + "resolved" "https://registry.yarnpkg.com/cssdb/-/cssdb-4.4.0.tgz"
3923 + "version" "4.4.0"
3924 +
3925 +"cssesc@^2.0.0":
3926 + "integrity" "sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg=="
3927 + "resolved" "https://registry.yarnpkg.com/cssesc/-/cssesc-2.0.0.tgz"
3928 + "version" "2.0.0"
3929 +
3930 +"cssesc@^3.0.0":
3931 + "integrity" "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg=="
3932 + "resolved" "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz"
3933 + "version" "3.0.0"
3934 +
3935 +"cssnano-preset-default@^4.0.8":
3936 + "integrity" "sha512-LdAyHuq+VRyeVREFmuxUZR1TXjQm8QQU/ktoo/x7bz+SdOge1YKc5eMN6pRW7YWBmyq59CqYba1dJ5cUukEjLQ=="
3937 + "resolved" "https://registry.yarnpkg.com/cssnano-preset-default/-/cssnano-preset-default-4.0.8.tgz"
3938 + "version" "4.0.8"
3939 + dependencies:
3940 + "css-declaration-sorter" "^4.0.1"
3941 + "cssnano-util-raw-cache" "^4.0.1"
3942 + "postcss" "^7.0.0"
3943 + "postcss-calc" "^7.0.1"
3944 + "postcss-colormin" "^4.0.3"
3945 + "postcss-convert-values" "^4.0.1"
3946 + "postcss-discard-comments" "^4.0.2"
3947 + "postcss-discard-duplicates" "^4.0.2"
3948 + "postcss-discard-empty" "^4.0.1"
3949 + "postcss-discard-overridden" "^4.0.1"
3950 + "postcss-merge-longhand" "^4.0.11"
3951 + "postcss-merge-rules" "^4.0.3"
3952 + "postcss-minify-font-values" "^4.0.2"
3953 + "postcss-minify-gradients" "^4.0.2"
3954 + "postcss-minify-params" "^4.0.2"
3955 + "postcss-minify-selectors" "^4.0.2"
3956 + "postcss-normalize-charset" "^4.0.1"
3957 + "postcss-normalize-display-values" "^4.0.2"
3958 + "postcss-normalize-positions" "^4.0.2"
3959 + "postcss-normalize-repeat-style" "^4.0.2"
3960 + "postcss-normalize-string" "^4.0.2"
3961 + "postcss-normalize-timing-functions" "^4.0.2"
3962 + "postcss-normalize-unicode" "^4.0.1"
3963 + "postcss-normalize-url" "^4.0.1"
3964 + "postcss-normalize-whitespace" "^4.0.2"
3965 + "postcss-ordered-values" "^4.1.2"
3966 + "postcss-reduce-initial" "^4.0.3"
3967 + "postcss-reduce-transforms" "^4.0.2"
3968 + "postcss-svgo" "^4.0.3"
3969 + "postcss-unique-selectors" "^4.0.1"
3970 +
3971 +"cssnano-util-get-arguments@^4.0.0":
3972 + "integrity" "sha1-7ToIKZ8h11dBsg87gfGU7UnMFQ8="
3973 + "resolved" "https://registry.yarnpkg.com/cssnano-util-get-arguments/-/cssnano-util-get-arguments-4.0.0.tgz"
3974 + "version" "4.0.0"
3975 +
3976 +"cssnano-util-get-match@^4.0.0":
3977 + "integrity" "sha1-wOTKB/U4a7F+xeUiULT1lhNlFW0="
3978 + "resolved" "https://registry.yarnpkg.com/cssnano-util-get-match/-/cssnano-util-get-match-4.0.0.tgz"
3979 + "version" "4.0.0"
3980 +
3981 +"cssnano-util-raw-cache@^4.0.1":
3982 + "integrity" "sha512-qLuYtWK2b2Dy55I8ZX3ky1Z16WYsx544Q0UWViebptpwn/xDBmog2TLg4f+DBMg1rJ6JDWtn96WHbOKDWt1WQA=="
3983 + "resolved" "https://registry.yarnpkg.com/cssnano-util-raw-cache/-/cssnano-util-raw-cache-4.0.1.tgz"
3984 + "version" "4.0.1"
3985 + dependencies:
3986 + "postcss" "^7.0.0"
3987 +
3988 +"cssnano-util-same-parent@^4.0.0":
3989 + "integrity" "sha512-WcKx5OY+KoSIAxBW6UBBRay1U6vkYheCdjyVNDm85zt5K9mHoGOfsOsqIszfAqrQQFIIKgjh2+FDgIj/zsl21Q=="
3990 + "resolved" "https://registry.yarnpkg.com/cssnano-util-same-parent/-/cssnano-util-same-parent-4.0.1.tgz"
3991 + "version" "4.0.1"
3992 +
3993 +"cssnano@^4.1.10":
3994 + "integrity" "sha512-6gZm2htn7xIPJOHY824ERgj8cNPgPxyCSnkXc4v7YvNW+TdVfzgngHcEhy/8D11kUWRUMbke+tC+AUcUsnMz2g=="
3995 + "resolved" "https://registry.yarnpkg.com/cssnano/-/cssnano-4.1.11.tgz"
3996 + "version" "4.1.11"
3997 + dependencies:
3998 + "cosmiconfig" "^5.0.0"
3999 + "cssnano-preset-default" "^4.0.8"
4000 + "is-resolvable" "^1.0.0"
4001 + "postcss" "^7.0.0"
4002 +
4003 +"csso@^4.0.2":
4004 + "integrity" "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA=="
4005 + "resolved" "https://registry.yarnpkg.com/csso/-/csso-4.2.0.tgz"
4006 + "version" "4.2.0"
4007 + dependencies:
4008 + "css-tree" "^1.1.2"
4009 +
4010 +"cssom@^0.4.4":
4011 + "integrity" "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw=="
4012 + "resolved" "https://registry.yarnpkg.com/cssom/-/cssom-0.4.4.tgz"
4013 + "version" "0.4.4"
4014 +
4015 +"cssom@~0.3.6":
4016 + "integrity" "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg=="
4017 + "resolved" "https://registry.yarnpkg.com/cssom/-/cssom-0.3.8.tgz"
4018 + "version" "0.3.8"
4019 +
4020 +"cssstyle@^2.3.0":
4021 + "integrity" "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A=="
4022 + "resolved" "https://registry.yarnpkg.com/cssstyle/-/cssstyle-2.3.0.tgz"
4023 + "version" "2.3.0"
4024 + dependencies:
4025 + "cssom" "~0.3.6"
4026 +
4027 +"cyclist@^1.0.1":
4028 + "integrity" "sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk="
4029 + "resolved" "https://registry.yarnpkg.com/cyclist/-/cyclist-1.0.1.tgz"
4030 + "version" "1.0.1"
4031 +
4032 +"d@^1.0.1", "d@1":
4033 + "integrity" "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA=="
4034 + "resolved" "https://registry.yarnpkg.com/d/-/d-1.0.1.tgz"
4035 + "version" "1.0.1"
4036 + dependencies:
4037 + "es5-ext" "^0.10.50"
4038 + "type" "^1.0.1"
4039 +
4040 +"damerau-levenshtein@^1.0.6":
4041 + "integrity" "sha512-VvdQIPGdWP0SqFXghj79Wf/5LArmreyMsGLa6FG6iC4t3j7j5s71TrwWmT/4akbDQIqjfACkLZmjXhA7g2oUZw=="
4042 + "resolved" "https://registry.yarnpkg.com/damerau-levenshtein/-/damerau-levenshtein-1.0.7.tgz"
4043 + "version" "1.0.7"
4044 +
4045 +"data-urls@^2.0.0":
4046 + "integrity" "sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ=="
4047 + "resolved" "https://registry.yarnpkg.com/data-urls/-/data-urls-2.0.0.tgz"
4048 + "version" "2.0.0"
4049 + dependencies:
4050 + "abab" "^2.0.3"
4051 + "whatwg-mimetype" "^2.3.0"
4052 + "whatwg-url" "^8.0.0"
4053 +
4054 +"debug@^2.2.0":
4055 + "integrity" "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA=="
4056 + "resolved" "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz"
4057 + "version" "2.6.9"
4058 + dependencies:
4059 + "ms" "2.0.0"
4060 +
4061 +"debug@^2.3.3":
4062 + "integrity" "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA=="
4063 + "resolved" "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz"
4064 + "version" "2.6.9"
4065 + dependencies:
4066 + "ms" "2.0.0"
4067 +
4068 +"debug@^2.6.0":
4069 + "integrity" "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA=="
4070 + "resolved" "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz"
4071 + "version" "2.6.9"
4072 + dependencies:
4073 + "ms" "2.0.0"
4074 +
4075 +"debug@^2.6.9":
4076 + "integrity" "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA=="
4077 + "resolved" "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz"
4078 + "version" "2.6.9"
4079 + dependencies:
4080 + "ms" "2.0.0"
4081 +
4082 +"debug@^3.1.1":
4083 + "integrity" "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ=="
4084 + "resolved" "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz"
4085 + "version" "3.2.7"
4086 + dependencies:
4087 + "ms" "^2.1.1"
4088 +
4089 +"debug@^3.2.6":
4090 + "integrity" "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ=="
4091 + "resolved" "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz"
4092 + "version" "3.2.7"
4093 + dependencies:
4094 + "ms" "^2.1.1"
4095 +
4096 +"debug@^3.2.7":
4097 + "integrity" "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ=="
4098 + "resolved" "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz"
4099 + "version" "3.2.7"
4100 + dependencies:
4101 + "ms" "^2.1.1"
4102 +
4103 +"debug@^4.0.1", "debug@^4.1.0", "debug@^4.1.1", "debug@^4.3.1", "debug@4":
4104 + "integrity" "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw=="
4105 + "resolved" "https://registry.yarnpkg.com/debug/-/debug-4.3.2.tgz"
4106 + "version" "4.3.2"
4107 + dependencies:
4108 + "ms" "2.1.2"
4109 +
4110 +"debug@2.6.9":
4111 + "integrity" "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA=="
4112 + "resolved" "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz"
4113 + "version" "2.6.9"
4114 + dependencies:
4115 + "ms" "2.0.0"
4116 +
4117 +"decamelize@^1.2.0":
4118 + "integrity" "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA="
4119 + "resolved" "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz"
4120 + "version" "1.2.0"
4121 +
4122 +"decimal.js@^10.2.1":
4123 + "integrity" "sha512-V0pfhfr8suzyPGOx3nmq4aHqabehUZn6Ch9kyFpV79TGDTWFmHqUqXdabR7QHqxzrYolF4+tVmJhUG4OURg5dQ=="
4124 + "resolved" "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.3.1.tgz"
4125 + "version" "10.3.1"
4126 +
4127 +"decode-uri-component@^0.2.0":
4128 + "integrity" "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU="
4129 + "resolved" "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz"
4130 + "version" "0.2.0"
4131 +
4132 +"dedent@^0.7.0":
4133 + "integrity" "sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw="
4134 + "resolved" "https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz"
4135 + "version" "0.7.0"
4136 +
4137 +"deep-equal@^1.0.1":
4138 + "integrity" "sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g=="
4139 + "resolved" "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.1.1.tgz"
4140 + "version" "1.1.1"
4141 + dependencies:
4142 + "is-arguments" "^1.0.4"
4143 + "is-date-object" "^1.0.1"
4144 + "is-regex" "^1.0.4"
4145 + "object-is" "^1.0.1"
4146 + "object-keys" "^1.1.1"
4147 + "regexp.prototype.flags" "^1.2.0"
4148 +
4149 +"deep-is@^0.1.3", "deep-is@~0.1.3":
4150 + "integrity" "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ=="
4151 + "resolved" "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz"
4152 + "version" "0.1.4"
4153 +
4154 +"deepmerge@^4.2.2":
4155 + "integrity" "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg=="
4156 + "resolved" "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.2.2.tgz"
4157 + "version" "4.2.2"
4158 +
4159 +"default-gateway@^4.2.0":
4160 + "integrity" "sha512-h6sMrVB1VMWVrW13mSc6ia/DwYYw5MN6+exNu1OaJeFac5aSAvwM7lZ0NVfTABuSkQelr4h5oebg3KB1XPdjgA=="
4161 + "resolved" "https://registry.yarnpkg.com/default-gateway/-/default-gateway-4.2.0.tgz"
4162 + "version" "4.2.0"
4163 + dependencies:
4164 + "execa" "^1.0.0"
4165 + "ip-regex" "^2.1.0"
4166 +
4167 +"define-properties@^1.1.2", "define-properties@^1.1.3":
4168 + "integrity" "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ=="
4169 + "resolved" "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz"
4170 + "version" "1.1.3"
4171 + dependencies:
4172 + "object-keys" "^1.0.12"
4173 +
4174 +"define-property@^0.2.5":
4175 + "integrity" "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY="
4176 + "resolved" "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz"
4177 + "version" "0.2.5"
4178 + dependencies:
4179 + "is-descriptor" "^0.1.0"
4180 +
4181 +"define-property@^1.0.0":
4182 + "integrity" "sha1-dp66rz9KY6rTr56NMEybvnm/sOY="
4183 + "resolved" "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz"
4184 + "version" "1.0.0"
4185 + dependencies:
4186 + "is-descriptor" "^1.0.0"
4187 +
4188 +"define-property@^2.0.2":
4189 + "integrity" "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ=="
4190 + "resolved" "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz"
4191 + "version" "2.0.2"
4192 + dependencies:
4193 + "is-descriptor" "^1.0.2"
4194 + "isobject" "^3.0.1"
4195 +
4196 +"del@^4.1.1":
4197 + "integrity" "sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ=="
4198 + "resolved" "https://registry.yarnpkg.com/del/-/del-4.1.1.tgz"
4199 + "version" "4.1.1"
4200 + dependencies:
4201 + "@types/glob" "^7.1.1"
4202 + "globby" "^6.1.0"
4203 + "is-path-cwd" "^2.0.0"
4204 + "is-path-in-cwd" "^2.0.0"
4205 + "p-map" "^2.0.0"
4206 + "pify" "^4.0.1"
4207 + "rimraf" "^2.6.3"
4208 +
4209 +"delayed-stream@~1.0.0":
4210 + "integrity" "sha1-3zrhmayt+31ECqrgsp4icrJOxhk="
4211 + "resolved" "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz"
4212 + "version" "1.0.0"
4213 +
4214 +"depd@~1.1.2":
4215 + "integrity" "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak="
4216 + "resolved" "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz"
4217 + "version" "1.1.2"
4218 +
4219 +"des.js@^1.0.0":
4220 + "integrity" "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA=="
4221 + "resolved" "https://registry.yarnpkg.com/des.js/-/des.js-1.0.1.tgz"
4222 + "version" "1.0.1"
4223 + dependencies:
4224 + "inherits" "^2.0.1"
4225 + "minimalistic-assert" "^1.0.0"
4226 +
4227 +"destroy@~1.0.4":
4228 + "integrity" "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA="
4229 + "resolved" "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz"
4230 + "version" "1.0.4"
4231 +
4232 +"detect-newline@^3.0.0":
4233 + "integrity" "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA=="
4234 + "resolved" "https://registry.yarnpkg.com/detect-newline/-/detect-newline-3.1.0.tgz"
4235 + "version" "3.1.0"
4236 +
4237 +"detect-node@^2.0.4":
4238 + "integrity" "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g=="
4239 + "resolved" "https://registry.yarnpkg.com/detect-node/-/detect-node-2.1.0.tgz"
4240 + "version" "2.1.0"
4241 +
4242 +"detect-port-alt@1.1.6":
4243 + "integrity" "sha512-5tQykt+LqfJFBEYaDITx7S7cR7mJ/zQmLXZ2qt5w04ainYZw6tBf9dBunMjVeVOdYVRUzUOE4HkY5J7+uttb5Q=="
4244 + "resolved" "https://registry.yarnpkg.com/detect-port-alt/-/detect-port-alt-1.1.6.tgz"
4245 + "version" "1.1.6"
4246 + dependencies:
4247 + "address" "^1.0.1"
4248 + "debug" "^2.6.0"
4249 +
4250 +"diff-sequences@^26.6.2":
4251 + "integrity" "sha512-Mv/TDa3nZ9sbc5soK+OoA74BsS3mL37yixCvUAQkiuA4Wz6YtwP/K47n2rv2ovzHZvoiQeA5FTQOschKkEwB0Q=="
4252 + "resolved" "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-26.6.2.tgz"
4253 + "version" "26.6.2"
4254 +
4255 +"diffie-hellman@^5.0.0":
4256 + "integrity" "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg=="
4257 + "resolved" "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.3.tgz"
4258 + "version" "5.0.3"
4259 + dependencies:
4260 + "bn.js" "^4.1.0"
4261 + "miller-rabin" "^4.0.0"
4262 + "randombytes" "^2.0.0"
4263 +
4264 +"dir-glob@^3.0.1":
4265 + "integrity" "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA=="
4266 + "resolved" "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz"
4267 + "version" "3.0.1"
4268 + dependencies:
4269 + "path-type" "^4.0.0"
4270 +
4271 +"dns-equal@^1.0.0":
4272 + "integrity" "sha1-s55/HabrCnW6nBcySzR1PEfgZU0="
4273 + "resolved" "https://registry.yarnpkg.com/dns-equal/-/dns-equal-1.0.0.tgz"
4274 + "version" "1.0.0"
4275 +
4276 +"dns-packet@^1.3.1":
4277 + "integrity" "sha512-BQ6F4vycLXBvdrJZ6S3gZewt6rcrks9KBgM9vrhW+knGRqc8uEdT7fuCwloc7nny5xNoMJ17HGH0R/6fpo8ECA=="
4278 + "resolved" "https://registry.yarnpkg.com/dns-packet/-/dns-packet-1.3.4.tgz"
4279 + "version" "1.3.4"
4280 + dependencies:
4281 + "ip" "^1.1.0"
4282 + "safe-buffer" "^5.0.1"
4283 +
4284 +"dns-txt@^2.0.2":
4285 + "integrity" "sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY="
4286 + "resolved" "https://registry.yarnpkg.com/dns-txt/-/dns-txt-2.0.2.tgz"
4287 + "version" "2.0.2"
4288 + dependencies:
4289 + "buffer-indexof" "^1.0.0"
4290 +
4291 +"doctrine@^2.1.0":
4292 + "integrity" "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw=="
4293 + "resolved" "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz"
4294 + "version" "2.1.0"
4295 + dependencies:
4296 + "esutils" "^2.0.2"
4297 +
4298 +"doctrine@^3.0.0":
4299 + "integrity" "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w=="
4300 + "resolved" "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz"
4301 + "version" "3.0.0"
4302 + dependencies:
4303 + "esutils" "^2.0.2"
4304 +
4305 +"dom-converter@^0.2.0":
4306 + "integrity" "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA=="
4307 + "resolved" "https://registry.yarnpkg.com/dom-converter/-/dom-converter-0.2.0.tgz"
4308 + "version" "0.2.0"
4309 + dependencies:
4310 + "utila" "~0.4"
4311 +
4312 +"dom-serializer@^1.0.1":
4313 + "integrity" "sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig=="
4314 + "resolved" "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-1.3.2.tgz"
4315 + "version" "1.3.2"
4316 + dependencies:
4317 + "domelementtype" "^2.0.1"
4318 + "domhandler" "^4.2.0"
4319 + "entities" "^2.0.0"
4320 +
4321 +"dom-serializer@0":
4322 + "integrity" "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g=="
4323 + "resolved" "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.2.2.tgz"
4324 + "version" "0.2.2"
4325 + dependencies:
4326 + "domelementtype" "^2.0.1"
4327 + "entities" "^2.0.0"
4328 +
4329 +"domain-browser@^1.1.1":
4330 + "integrity" "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA=="
4331 + "resolved" "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.2.0.tgz"
4332 + "version" "1.2.0"
4333 +
4334 +"domelementtype@^2.0.1", "domelementtype@^2.2.0":
4335 + "integrity" "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A=="
4336 + "resolved" "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.2.0.tgz"
4337 + "version" "2.2.0"
4338 +
4339 +"domelementtype@1":
4340 + "integrity" "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w=="
4341 + "resolved" "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.1.tgz"
4342 + "version" "1.3.1"
4343 +
4344 +"domexception@^2.0.1":
4345 + "integrity" "sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg=="
4346 + "resolved" "https://registry.yarnpkg.com/domexception/-/domexception-2.0.1.tgz"
4347 + "version" "2.0.1"
4348 + dependencies:
4349 + "webidl-conversions" "^5.0.0"
4350 +
4351 +"domhandler@^4.0.0", "domhandler@^4.2.0":
4352 + "integrity" "sha512-PzE9aBMsdZO8TK4BnuJwH0QT41wgMbRzuZrHUcpYncEjmQazq8QEaBWgLG7ZyC/DAZKEgglpIA6j4Qn/HmxS3w=="
4353 + "resolved" "https://registry.yarnpkg.com/domhandler/-/domhandler-4.2.2.tgz"
4354 + "version" "4.2.2"
4355 + dependencies:
4356 + "domelementtype" "^2.2.0"
4357 +
4358 +"domutils@^1.7.0":
4359 + "integrity" "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg=="
4360 + "resolved" "https://registry.yarnpkg.com/domutils/-/domutils-1.7.0.tgz"
4361 + "version" "1.7.0"
4362 + dependencies:
4363 + "dom-serializer" "0"
4364 + "domelementtype" "1"
4365 +
4366 +"domutils@^2.5.2", "domutils@^2.6.0":
4367 + "integrity" "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A=="
4368 + "resolved" "https://registry.yarnpkg.com/domutils/-/domutils-2.8.0.tgz"
4369 + "version" "2.8.0"
4370 + dependencies:
4371 + "dom-serializer" "^1.0.1"
4372 + "domelementtype" "^2.2.0"
4373 + "domhandler" "^4.2.0"
4374 +
4375 +"dot-case@^3.0.4":
4376 + "integrity" "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w=="
4377 + "resolved" "https://registry.yarnpkg.com/dot-case/-/dot-case-3.0.4.tgz"
4378 + "version" "3.0.4"
4379 + dependencies:
4380 + "no-case" "^3.0.4"
4381 + "tslib" "^2.0.3"
4382 +
4383 +"dot-prop@^5.2.0":
4384 + "integrity" "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q=="
4385 + "resolved" "https://registry.yarnpkg.com/dot-prop/-/dot-prop-5.3.0.tgz"
4386 + "version" "5.3.0"
4387 + dependencies:
4388 + "is-obj" "^2.0.0"
4389 +
4390 +"dotenv-expand@5.1.0":
4391 + "integrity" "sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA=="
4392 + "resolved" "https://registry.yarnpkg.com/dotenv-expand/-/dotenv-expand-5.1.0.tgz"
4393 + "version" "5.1.0"
4394 +
4395 +"dotenv@8.2.0":
4396 + "integrity" "sha512-8sJ78ElpbDJBHNeBzUbUVLsqKdccaa/BXF1uPTw3GrvQTBgrQrtObr2mUrE38vzYd8cEv+m/JBfDLioYcfXoaw=="
4397 + "resolved" "https://registry.yarnpkg.com/dotenv/-/dotenv-8.2.0.tgz"
4398 + "version" "8.2.0"
4399 +
4400 +"duplexer@^0.1.1":
4401 + "integrity" "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg=="
4402 + "resolved" "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.2.tgz"
4403 + "version" "0.1.2"
4404 +
4405 +"duplexify@^3.4.2", "duplexify@^3.6.0":
4406 + "integrity" "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g=="
4407 + "resolved" "https://registry.yarnpkg.com/duplexify/-/duplexify-3.7.1.tgz"
4408 + "version" "3.7.1"
4409 + dependencies:
4410 + "end-of-stream" "^1.0.0"
4411 + "inherits" "^2.0.1"
4412 + "readable-stream" "^2.0.0"
4413 + "stream-shift" "^1.0.0"
4414 +
4415 +"ee-first@1.1.1":
4416 + "integrity" "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0="
4417 + "resolved" "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz"
4418 + "version" "1.1.1"
4419 +
4420 +"ejs@^2.6.1":
4421 + "integrity" "sha512-7vmuyh5+kuUyJKePhQfRQBhXV5Ce+RnaeeQArKu1EAMpL3WbgMt5WG6uQZpEVvYSSsxMXRKOewtDk9RaTKXRlA=="
4422 + "resolved" "https://registry.yarnpkg.com/ejs/-/ejs-2.7.4.tgz"
4423 + "version" "2.7.4"
4424 +
4425 +"electron-to-chromium@^1.3.564", "electron-to-chromium@^1.3.878":
4426 + "integrity" "sha512-O6yxWCN9ph2AdspAIszBnd9v8s11hQx8ub9w4UGApzmNRnoKhbulOWqbO8THEQec/aEHtvy+donHZMlh6l1rbA=="
4427 + "resolved" "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.878.tgz"
4428 + "version" "1.3.878"
4429 +
4430 +"elliptic@^6.5.3":
4431 + "integrity" "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ=="
4432 + "resolved" "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.4.tgz"
4433 + "version" "6.5.4"
4434 + dependencies:
4435 + "bn.js" "^4.11.9"
4436 + "brorand" "^1.1.0"
4437 + "hash.js" "^1.0.0"
4438 + "hmac-drbg" "^1.0.1"
4439 + "inherits" "^2.0.4"
4440 + "minimalistic-assert" "^1.0.1"
4441 + "minimalistic-crypto-utils" "^1.0.1"
4442 +
4443 +"emittery@^0.7.1":
4444 + "integrity" "sha512-A8OG5SR/ij3SsJdWDJdkkSYUjQdCUx6APQXem0SaEePBSRg4eymGYwBkKo1Y6DU+af/Jn2dBQqDBvjnr9Vi8nQ=="
4445 + "resolved" "https://registry.yarnpkg.com/emittery/-/emittery-0.7.2.tgz"
4446 + "version" "0.7.2"
4447 +
4448 +"emoji-regex@^7.0.1":
4449 + "integrity" "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA=="
4450 + "resolved" "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz"
4451 + "version" "7.0.3"
4452 +
4453 +"emoji-regex@^8.0.0":
4454 + "integrity" "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="
4455 + "resolved" "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz"
4456 + "version" "8.0.0"
4457 +
4458 +"emoji-regex@^9.0.0":
4459 + "integrity" "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg=="
4460 + "resolved" "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz"
4461 + "version" "9.2.2"
4462 +
4463 +"emojis-list@^2.0.0":
4464 + "integrity" "sha1-TapNnbAPmBmIDHn6RXrlsJof04k="
4465 + "resolved" "https://registry.yarnpkg.com/emojis-list/-/emojis-list-2.1.0.tgz"
4466 + "version" "2.1.0"
4467 +
4468 +"emojis-list@^3.0.0":
4469 + "integrity" "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q=="
4470 + "resolved" "https://registry.yarnpkg.com/emojis-list/-/emojis-list-3.0.0.tgz"
4471 + "version" "3.0.0"
4472 +
4473 +"encodeurl@~1.0.2":
4474 + "integrity" "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k="
4475 + "resolved" "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz"
4476 + "version" "1.0.2"
4477 +
4478 +"end-of-stream@^1.0.0", "end-of-stream@^1.1.0":
4479 + "integrity" "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q=="
4480 + "resolved" "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz"
4481 + "version" "1.4.4"
4482 + dependencies:
4483 + "once" "^1.4.0"
4484 +
4485 +"enhanced-resolve@^4.3.0":
4486 + "integrity" "sha512-Nv9m36S/vxpsI+Hc4/ZGRs0n9mXqSWGGq49zxb/cJfPAQMbUtttJAlNPS4AQzaBdw/pKskw5bMbekT/Y7W/Wlg=="
4487 + "resolved" "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-4.5.0.tgz"
4488 + "version" "4.5.0"
4489 + dependencies:
4490 + "graceful-fs" "^4.1.2"
4491 + "memory-fs" "^0.5.0"
4492 + "tapable" "^1.0.0"
4493 +
4494 +"enquirer@^2.3.5":
4495 + "integrity" "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg=="
4496 + "resolved" "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.6.tgz"
4497 + "version" "2.3.6"
4498 + dependencies:
4499 + "ansi-colors" "^4.1.1"
4500 +
4501 +"entities@^2.0.0":
4502 + "integrity" "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A=="
4503 + "resolved" "https://registry.yarnpkg.com/entities/-/entities-2.2.0.tgz"
4504 + "version" "2.2.0"
4505 +
4506 +"errno@^0.1.3", "errno@~0.1.7":
4507 + "integrity" "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A=="
4508 + "resolved" "https://registry.yarnpkg.com/errno/-/errno-0.1.8.tgz"
4509 + "version" "0.1.8"
4510 + dependencies:
4511 + "prr" "~1.0.1"
4512 +
4513 +"error-ex@^1.3.1":
4514 + "integrity" "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g=="
4515 + "resolved" "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz"
4516 + "version" "1.3.2"
4517 + dependencies:
4518 + "is-arrayish" "^0.2.1"
4519 +
4520 +"error-stack-parser@^2.0.6":
4521 + "integrity" "sha512-d51brTeqC+BHlwF0BhPtcYgF5nlzf9ZZ0ZIUQNZpc9ZB9qw5IJ2diTrBY9jlCJkTLITYPjmiX6OWCwH+fuyNgQ=="
4522 + "resolved" "https://registry.yarnpkg.com/error-stack-parser/-/error-stack-parser-2.0.6.tgz"
4523 + "version" "2.0.6"
4524 + dependencies:
4525 + "stackframe" "^1.1.1"
4526 +
4527 +"es-abstract@^1.17.2", "es-abstract@^1.19.0", "es-abstract@^1.19.1":
4528 + "integrity" "sha512-2vJ6tjA/UfqLm2MPs7jxVybLoB8i1t1Jd9R3kISld20sIxPcTbLuggQOUxeWeAvIUkduv/CfMjuh4WmiXr2v9w=="
4529 + "resolved" "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.19.1.tgz"
4530 + "version" "1.19.1"
4531 + dependencies:
4532 + "call-bind" "^1.0.2"
4533 + "es-to-primitive" "^1.2.1"
4534 + "function-bind" "^1.1.1"
4535 + "get-intrinsic" "^1.1.1"
4536 + "get-symbol-description" "^1.0.0"
4537 + "has" "^1.0.3"
4538 + "has-symbols" "^1.0.2"
4539 + "internal-slot" "^1.0.3"
4540 + "is-callable" "^1.2.4"
4541 + "is-negative-zero" "^2.0.1"
4542 + "is-regex" "^1.1.4"
4543 + "is-shared-array-buffer" "^1.0.1"
4544 + "is-string" "^1.0.7"
4545 + "is-weakref" "^1.0.1"
4546 + "object-inspect" "^1.11.0"
4547 + "object-keys" "^1.1.1"
4548 + "object.assign" "^4.1.2"
4549 + "string.prototype.trimend" "^1.0.4"
4550 + "string.prototype.trimstart" "^1.0.4"
4551 + "unbox-primitive" "^1.0.1"
4552 +
4553 +"es-to-primitive@^1.2.1":
4554 + "integrity" "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA=="
4555 + "resolved" "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz"
4556 + "version" "1.2.1"
4557 + dependencies:
4558 + "is-callable" "^1.1.4"
4559 + "is-date-object" "^1.0.1"
4560 + "is-symbol" "^1.0.2"
4561 +
4562 +"es5-ext@^0.10.35", "es5-ext@^0.10.50":
4563 + "integrity" "sha512-Xs2Stw6NiNHWypzRTY1MtaG/uJlwCk8kH81920ma8mvN8Xq1gsfhZvpkImLQArw8AHnv8MT2I45J3c0R8slE+Q=="
4564 + "resolved" "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.53.tgz"
4565 + "version" "0.10.53"
4566 + dependencies:
4567 + "es6-iterator" "~2.0.3"
4568 + "es6-symbol" "~3.1.3"
4569 + "next-tick" "~1.0.0"
4570 +
4571 +"es6-iterator@~2.0.3", "es6-iterator@2.0.3":
4572 + "integrity" "sha1-p96IkUGgWpSwhUQDstCg+/qY87c="
4573 + "resolved" "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.3.tgz"
4574 + "version" "2.0.3"
4575 + dependencies:
4576 + "d" "1"
4577 + "es5-ext" "^0.10.35"
4578 + "es6-symbol" "^3.1.1"
4579 +
4580 +"es6-symbol@^3.1.1", "es6-symbol@~3.1.3":
4581 + "integrity" "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA=="
4582 + "resolved" "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.3.tgz"
4583 + "version" "3.1.3"
4584 + dependencies:
4585 + "d" "^1.0.1"
4586 + "ext" "^1.1.2"
4587 +
4588 +"escalade@^3.0.2", "escalade@^3.1.1":
4589 + "integrity" "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw=="
4590 + "resolved" "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz"
4591 + "version" "3.1.1"
4592 +
4593 +"escape-html@~1.0.3":
4594 + "integrity" "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg="
4595 + "resolved" "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz"
4596 + "version" "1.0.3"
4597 +
4598 +"escape-string-regexp@^1.0.5":
4599 + "integrity" "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ="
4600 + "resolved" "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz"
4601 + "version" "1.0.5"
4602 +
4603 +"escape-string-regexp@^2.0.0", "escape-string-regexp@2.0.0":
4604 + "integrity" "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w=="
4605 + "resolved" "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz"
4606 + "version" "2.0.0"
4607 +
4608 +"escape-string-regexp@^4.0.0":
4609 + "integrity" "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA=="
4610 + "resolved" "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz"
4611 + "version" "4.0.0"
4612 +
4613 +"escodegen@^2.0.0":
4614 + "integrity" "sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw=="
4615 + "resolved" "https://registry.yarnpkg.com/escodegen/-/escodegen-2.0.0.tgz"
4616 + "version" "2.0.0"
4617 + dependencies:
4618 + "esprima" "^4.0.1"
4619 + "estraverse" "^5.2.0"
4620 + "esutils" "^2.0.2"
4621 + "optionator" "^0.8.1"
4622 + optionalDependencies:
4623 + "source-map" "~0.6.1"
4624 +
4625 +"eslint-config-react-app@^6.0.0":
4626 + "integrity" "sha512-bpoAAC+YRfzq0dsTk+6v9aHm/uqnDwayNAXleMypGl6CpxI9oXXscVHo4fk3eJPIn+rsbtNetB4r/ZIidFIE8A=="
4627 + "resolved" "https://registry.yarnpkg.com/eslint-config-react-app/-/eslint-config-react-app-6.0.0.tgz"
4628 + "version" "6.0.0"
4629 + dependencies:
4630 + "confusing-browser-globals" "^1.0.10"
4631 +
4632 +"eslint-import-resolver-node@^0.3.6":
4633 + "integrity" "sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw=="
4634 + "resolved" "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz"
4635 + "version" "0.3.6"
4636 + dependencies:
4637 + "debug" "^3.2.7"
4638 + "resolve" "^1.20.0"
4639 +
4640 +"eslint-module-utils@^2.7.0":
4641 + "integrity" "sha512-fjoetBXQZq2tSTWZ9yWVl2KuFrTZZH3V+9iD1V1RfpDgxzJR+mPd/KZmMiA8gbPqdBzpNiEHOuT7IYEWxrH0zQ=="
4642 + "resolved" "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.7.1.tgz"
4643 + "version" "2.7.1"
4644 + dependencies:
4645 + "debug" "^3.2.7"
4646 + "find-up" "^2.1.0"
4647 + "pkg-dir" "^2.0.0"
4648 +
4649 +"eslint-plugin-flowtype@^5.2.0":
4650 + "integrity" "sha512-vcz32f+7TP+kvTUyMXZmCnNujBQZDNmcqPImw8b9PZ+16w1Qdm6ryRuYZYVaG9xRqqmAPr2Cs9FAX5gN+x/bjw=="
4651 + "resolved" "https://registry.yarnpkg.com/eslint-plugin-flowtype/-/eslint-plugin-flowtype-5.10.0.tgz"
4652 + "version" "5.10.0"
4653 + dependencies:
4654 + "lodash" "^4.17.15"
4655 + "string-natural-compare" "^3.0.1"
4656 +
4657 +"eslint-plugin-import@^2.22.0", "eslint-plugin-import@^2.22.1":
4658 + "integrity" "sha512-qCwQr9TYfoBHOFcVGKY9C9unq05uOxxdklmBXLVvcwo68y5Hta6/GzCZEMx2zQiu0woKNEER0LE7ZgaOfBU14g=="
4659 + "resolved" "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.25.2.tgz"
4660 + "version" "2.25.2"
4661 + dependencies:
4662 + "array-includes" "^3.1.4"
4663 + "array.prototype.flat" "^1.2.5"
4664 + "debug" "^2.6.9"
4665 + "doctrine" "^2.1.0"
4666 + "eslint-import-resolver-node" "^0.3.6"
4667 + "eslint-module-utils" "^2.7.0"
4668 + "has" "^1.0.3"
4669 + "is-core-module" "^2.7.0"
4670 + "is-glob" "^4.0.3"
4671 + "minimatch" "^3.0.4"
4672 + "object.values" "^1.1.5"
4673 + "resolve" "^1.20.0"
4674 + "tsconfig-paths" "^3.11.0"
4675 +
4676 +"eslint-plugin-jest@^24.0.0", "eslint-plugin-jest@^24.1.0":
4677 + "integrity" "sha512-wUxdF2bAZiYSKBclsUMrYHH6WxiBreNjyDxbRv345TIvPeoCEgPNEn3Sa+ZrSqsf1Dl9SqqSREXMHExlMMu1DA=="
4678 + "resolved" "https://registry.yarnpkg.com/eslint-plugin-jest/-/eslint-plugin-jest-24.7.0.tgz"
4679 + "version" "24.7.0"
4680 + dependencies:
4681 + "@typescript-eslint/experimental-utils" "^4.0.1"
4682 +
4683 +"eslint-plugin-jsx-a11y@^6.3.1":
4684 + "integrity" "sha512-0rGPJBbwHoGNPU73/QCLP/vveMlM1b1Z9PponxO87jfr6tuH5ligXbDT6nHSSzBC8ovX2Z+BQu7Bk5D/Xgq9zg=="
4685 + "resolved" "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.4.1.tgz"
4686 + "version" "6.4.1"
4687 + dependencies:
4688 + "@babel/runtime" "^7.11.2"
4689 + "aria-query" "^4.2.2"
4690 + "array-includes" "^3.1.1"
4691 + "ast-types-flow" "^0.0.7"
4692 + "axe-core" "^4.0.2"
4693 + "axobject-query" "^2.2.0"
4694 + "damerau-levenshtein" "^1.0.6"
4695 + "emoji-regex" "^9.0.0"
4696 + "has" "^1.0.3"
4697 + "jsx-ast-utils" "^3.1.0"
4698 + "language-tags" "^1.0.5"
4699 +
4700 +"eslint-plugin-react-hooks@^4.0.8", "eslint-plugin-react-hooks@^4.2.0":
4701 + "integrity" "sha512-623WEiZJqxR7VdxFCKLI6d6LLpwJkGPYKODnkH3D7WpOG5KM8yWueBd8TLsNAetEJNF5iJmolaAKO3F8yzyVBQ=="
4702 + "resolved" "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.2.0.tgz"
4703 + "version" "4.2.0"
4704 +
4705 +"eslint-plugin-react@^7.20.3", "eslint-plugin-react@^7.21.5":
4706 + "integrity" "sha512-Lug0+NOFXeOE+ORZ5pbsh6mSKjBKXDXItUD2sQoT+5Yl0eoT82DqnXeTMfUare4QVCn9QwXbfzO/dBLjLXwVjQ=="
4707 + "resolved" "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.26.1.tgz"
4708 + "version" "7.26.1"
4709 + dependencies:
4710 + "array-includes" "^3.1.3"
4711 + "array.prototype.flatmap" "^1.2.4"
4712 + "doctrine" "^2.1.0"
4713 + "estraverse" "^5.2.0"
4714 + "jsx-ast-utils" "^2.4.1 || ^3.0.0"
4715 + "minimatch" "^3.0.4"
4716 + "object.entries" "^1.1.4"
4717 + "object.fromentries" "^2.0.4"
4718 + "object.hasown" "^1.0.0"
4719 + "object.values" "^1.1.4"
4720 + "prop-types" "^15.7.2"
4721 + "resolve" "^2.0.0-next.3"
4722 + "semver" "^6.3.0"
4723 + "string.prototype.matchall" "^4.0.5"
4724 +
4725 +"eslint-plugin-testing-library@^3.9.0", "eslint-plugin-testing-library@^3.9.2":
4726 + "integrity" "sha512-WAmOCt7EbF1XM8XfbCKAEzAPnShkNSwcIsAD2jHdsMUT9mZJPjLCG7pMzbcC8kK366NOuGip8HKLDC+Xk4yIdA=="
4727 + "resolved" "https://registry.yarnpkg.com/eslint-plugin-testing-library/-/eslint-plugin-testing-library-3.10.2.tgz"
4728 + "version" "3.10.2"
4729 + dependencies:
4730 + "@typescript-eslint/experimental-utils" "^3.10.1"
4731 +
4732 +"eslint-scope@^4.0.3":
4733 + "integrity" "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg=="
4734 + "resolved" "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-4.0.3.tgz"
4735 + "version" "4.0.3"
4736 + dependencies:
4737 + "esrecurse" "^4.1.0"
4738 + "estraverse" "^4.1.1"
4739 +
4740 +"eslint-scope@^5.0.0", "eslint-scope@^5.1.1":
4741 + "integrity" "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw=="
4742 + "resolved" "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz"
4743 + "version" "5.1.1"
4744 + dependencies:
4745 + "esrecurse" "^4.3.0"
4746 + "estraverse" "^4.1.1"
4747 +
4748 +"eslint-utils@^2.0.0", "eslint-utils@^2.1.0":
4749 + "integrity" "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg=="
4750 + "resolved" "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-2.1.0.tgz"
4751 + "version" "2.1.0"
4752 + dependencies:
4753 + "eslint-visitor-keys" "^1.1.0"
4754 +
4755 +"eslint-utils@^3.0.0":
4756 + "integrity" "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA=="
4757 + "resolved" "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-3.0.0.tgz"
4758 + "version" "3.0.0"
4759 + dependencies:
4760 + "eslint-visitor-keys" "^2.0.0"
4761 +
4762 +"eslint-visitor-keys@^1.0.0", "eslint-visitor-keys@^1.1.0", "eslint-visitor-keys@^1.3.0":
4763 + "integrity" "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ=="
4764 + "resolved" "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz"
4765 + "version" "1.3.0"
4766 +
4767 +"eslint-visitor-keys@^2.0.0":
4768 + "integrity" "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw=="
4769 + "resolved" "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz"
4770 + "version" "2.1.0"
4771 +
4772 +"eslint-webpack-plugin@^2.5.2":
4773 + "integrity" "sha512-7rYh0m76KyKSDE+B+2PUQrlNS4HJ51t3WKpkJg6vo2jFMbEPTG99cBV0Dm7LXSHucN4WGCG65wQcRiTFrj7iWw=="
4774 + "resolved" "https://registry.yarnpkg.com/eslint-webpack-plugin/-/eslint-webpack-plugin-2.5.4.tgz"
4775 + "version" "2.5.4"
4776 + dependencies:
4777 + "@types/eslint" "^7.2.6"
4778 + "arrify" "^2.0.1"
4779 + "jest-worker" "^26.6.2"
4780 + "micromatch" "^4.0.2"
4781 + "normalize-path" "^3.0.0"
4782 + "schema-utils" "^3.0.0"
4783 +
4784 +"eslint@*", "eslint@^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8", "eslint@^3 || ^4 || ^5 || ^6 || ^7", "eslint@^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0", "eslint@^5 || ^6 || ^7", "eslint@^5.0.0 || ^6.0.0 || ^7.0.0", "eslint@^7.0.0", "eslint@^7.1.0", "eslint@^7.11.0", "eslint@^7.5.0", "eslint@>= 4.12.1", "eslint@>=5":
4785 + "integrity" "sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA=="
4786 + "resolved" "https://registry.yarnpkg.com/eslint/-/eslint-7.32.0.tgz"
4787 + "version" "7.32.0"
4788 + dependencies:
4789 + "@babel/code-frame" "7.12.11"
4790 + "@eslint/eslintrc" "^0.4.3"
4791 + "@humanwhocodes/config-array" "^0.5.0"
4792 + "ajv" "^6.10.0"
4793 + "chalk" "^4.0.0"
4794 + "cross-spawn" "^7.0.2"
4795 + "debug" "^4.0.1"
4796 + "doctrine" "^3.0.0"
4797 + "enquirer" "^2.3.5"
4798 + "escape-string-regexp" "^4.0.0"
4799 + "eslint-scope" "^5.1.1"
4800 + "eslint-utils" "^2.1.0"
4801 + "eslint-visitor-keys" "^2.0.0"
4802 + "espree" "^7.3.1"
4803 + "esquery" "^1.4.0"
4804 + "esutils" "^2.0.2"
4805 + "fast-deep-equal" "^3.1.3"
4806 + "file-entry-cache" "^6.0.1"
4807 + "functional-red-black-tree" "^1.0.1"
4808 + "glob-parent" "^5.1.2"
4809 + "globals" "^13.6.0"
4810 + "ignore" "^4.0.6"
4811 + "import-fresh" "^3.0.0"
4812 + "imurmurhash" "^0.1.4"
4813 + "is-glob" "^4.0.0"
4814 + "js-yaml" "^3.13.1"
4815 + "json-stable-stringify-without-jsonify" "^1.0.1"
4816 + "levn" "^0.4.1"
4817 + "lodash.merge" "^4.6.2"
4818 + "minimatch" "^3.0.4"
4819 + "natural-compare" "^1.4.0"
4820 + "optionator" "^0.9.1"
4821 + "progress" "^2.0.0"
4822 + "regexpp" "^3.1.0"
4823 + "semver" "^7.2.1"
4824 + "strip-ansi" "^6.0.0"
4825 + "strip-json-comments" "^3.1.0"
4826 + "table" "^6.0.9"
4827 + "text-table" "^0.2.0"
4828 + "v8-compile-cache" "^2.0.3"
4829 +
4830 +"espree@^7.3.0", "espree@^7.3.1":
4831 + "integrity" "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g=="
4832 + "resolved" "https://registry.yarnpkg.com/espree/-/espree-7.3.1.tgz"
4833 + "version" "7.3.1"
4834 + dependencies:
4835 + "acorn" "^7.4.0"
4836 + "acorn-jsx" "^5.3.1"
4837 + "eslint-visitor-keys" "^1.3.0"
4838 +
4839 +"esprima@^4.0.0", "esprima@^4.0.1":
4840 + "integrity" "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A=="
4841 + "resolved" "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz"
4842 + "version" "4.0.1"
4843 +
4844 +"esquery@^1.4.0":
4845 + "integrity" "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w=="
4846 + "resolved" "https://registry.yarnpkg.com/esquery/-/esquery-1.4.0.tgz"
4847 + "version" "1.4.0"
4848 + dependencies:
4849 + "estraverse" "^5.1.0"
4850 +
4851 +"esrecurse@^4.1.0", "esrecurse@^4.3.0":
4852 + "integrity" "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag=="
4853 + "resolved" "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz"
4854 + "version" "4.3.0"
4855 + dependencies:
4856 + "estraverse" "^5.2.0"
4857 +
4858 +"estraverse@^4.1.1":
4859 + "integrity" "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw=="
4860 + "resolved" "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz"
4861 + "version" "4.3.0"
4862 +
4863 +"estraverse@^5.1.0", "estraverse@^5.2.0":
4864 + "integrity" "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ=="
4865 + "resolved" "https://registry.yarnpkg.com/estraverse/-/estraverse-5.2.0.tgz"
4866 + "version" "5.2.0"
4867 +
4868 +"estree-walker@^0.6.1":
4869 + "integrity" "sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w=="
4870 + "resolved" "https://registry.yarnpkg.com/estree-walker/-/estree-walker-0.6.1.tgz"
4871 + "version" "0.6.1"
4872 +
4873 +"estree-walker@^1.0.1":
4874 + "integrity" "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg=="
4875 + "resolved" "https://registry.yarnpkg.com/estree-walker/-/estree-walker-1.0.1.tgz"
4876 + "version" "1.0.1"
4877 +
4878 +"esutils@^2.0.2":
4879 + "integrity" "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g=="
4880 + "resolved" "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz"
4881 + "version" "2.0.3"
4882 +
4883 +"etag@~1.8.1":
4884 + "integrity" "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc="
4885 + "resolved" "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz"
4886 + "version" "1.8.1"
4887 +
4888 +"eventemitter3@^4.0.0":
4889 + "integrity" "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw=="
4890 + "resolved" "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz"
4891 + "version" "4.0.7"
4892 +
4893 +"events@^3.0.0":
4894 + "integrity" "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q=="
4895 + "resolved" "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz"
4896 + "version" "3.3.0"
4897 +
4898 +"eventsource@^1.0.7":
4899 + "integrity" "sha512-VSJjT5oCNrFvCS6igjzPAt5hBzQ2qPBFIbJ03zLI9SE0mxwZpMw6BfJrbFHm1a141AavMEB8JHmBhWAd66PfCg=="
4900 + "resolved" "https://registry.yarnpkg.com/eventsource/-/eventsource-1.1.0.tgz"
4901 + "version" "1.1.0"
4902 + dependencies:
4903 + "original" "^1.0.0"
4904 +
4905 +"evp_bytestokey@^1.0.0", "evp_bytestokey@^1.0.3":
4906 + "integrity" "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA=="
4907 + "resolved" "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz"
4908 + "version" "1.0.3"
4909 + dependencies:
4910 + "md5.js" "^1.3.4"
4911 + "safe-buffer" "^5.1.1"
4912 +
4913 +"exec-sh@^0.3.2":
4914 + "integrity" "sha512-nQn+hI3yp+oD0huYhKwvYI32+JFeq+XkNcD1GAo3Y/MjxsfVGmrrzrnzjWiNY6f+pUCP440fThsFh5gZrRAU/w=="
4915 + "resolved" "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.3.6.tgz"
4916 + "version" "0.3.6"
4917 +
4918 +"execa@^1.0.0":
4919 + "integrity" "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA=="
4920 + "resolved" "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz"
4921 + "version" "1.0.0"
4922 + dependencies:
4923 + "cross-spawn" "^6.0.0"
4924 + "get-stream" "^4.0.0"
4925 + "is-stream" "^1.1.0"
4926 + "npm-run-path" "^2.0.0"
4927 + "p-finally" "^1.0.0"
4928 + "signal-exit" "^3.0.0"
4929 + "strip-eof" "^1.0.0"
4930 +
4931 +"execa@^4.0.0":
4932 + "integrity" "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA=="
4933 + "resolved" "https://registry.yarnpkg.com/execa/-/execa-4.1.0.tgz"
4934 + "version" "4.1.0"
4935 + dependencies:
4936 + "cross-spawn" "^7.0.0"
4937 + "get-stream" "^5.0.0"
4938 + "human-signals" "^1.1.1"
4939 + "is-stream" "^2.0.0"
4940 + "merge-stream" "^2.0.0"
4941 + "npm-run-path" "^4.0.0"
4942 + "onetime" "^5.1.0"
4943 + "signal-exit" "^3.0.2"
4944 + "strip-final-newline" "^2.0.0"
4945 +
4946 +"exit@^0.1.2":
4947 + "integrity" "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw="
4948 + "resolved" "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz"
4949 + "version" "0.1.2"
4950 +
4951 +"expand-brackets@^2.1.4":
4952 + "integrity" "sha1-t3c14xXOMPa27/D4OwQVGiJEliI="
4953 + "resolved" "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz"
4954 + "version" "2.1.4"
4955 + dependencies:
4956 + "debug" "^2.3.3"
4957 + "define-property" "^0.2.5"
4958 + "extend-shallow" "^2.0.1"
4959 + "posix-character-classes" "^0.1.0"
4960 + "regex-not" "^1.0.0"
4961 + "snapdragon" "^0.8.1"
4962 + "to-regex" "^3.0.1"
4963 +
4964 +"expect@^26.6.0", "expect@^26.6.2":
4965 + "integrity" "sha512-9/hlOBkQl2l/PLHJx6JjoDF6xPKcJEsUlWKb23rKE7KzeDqUZKXKNMW27KIue5JMdBV9HgmoJPcc8HtO85t9IA=="
4966 + "resolved" "https://registry.yarnpkg.com/expect/-/expect-26.6.2.tgz"
4967 + "version" "26.6.2"
4968 + dependencies:
4969 + "@jest/types" "^26.6.2"
4970 + "ansi-styles" "^4.0.0"
4971 + "jest-get-type" "^26.3.0"
4972 + "jest-matcher-utils" "^26.6.2"
4973 + "jest-message-util" "^26.6.2"
4974 + "jest-regex-util" "^26.0.0"
4975 +
4976 +"express@^4.17.1":
4977 + "integrity" "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g=="
4978 + "resolved" "https://registry.yarnpkg.com/express/-/express-4.17.1.tgz"
4979 + "version" "4.17.1"
4980 + dependencies:
4981 + "accepts" "~1.3.7"
4982 + "array-flatten" "1.1.1"
4983 + "body-parser" "1.19.0"
4984 + "content-disposition" "0.5.3"
4985 + "content-type" "~1.0.4"
4986 + "cookie" "0.4.0"
4987 + "cookie-signature" "1.0.6"
4988 + "debug" "2.6.9"
4989 + "depd" "~1.1.2"
4990 + "encodeurl" "~1.0.2"
4991 + "escape-html" "~1.0.3"
4992 + "etag" "~1.8.1"
4993 + "finalhandler" "~1.1.2"
4994 + "fresh" "0.5.2"
4995 + "merge-descriptors" "1.0.1"
4996 + "methods" "~1.1.2"
4997 + "on-finished" "~2.3.0"
4998 + "parseurl" "~1.3.3"
4999 + "path-to-regexp" "0.1.7"

This file is too large to show in full.

compiler/forget/packages/demo-todolist-next/.babelrc new
+13
@@ -0,0 +1,13 @@
1 +{
2 + "presets": [
3 + [
4 + "next/babel",
5 + {
6 + "preset-env": {
7 + "exclude": ["transform-block-scoping"]
8 + }
9 + }
10 + ]
11 + ],
12 + "plugins": [["../../", { "optIn": true }]]
13 +}
compiler/forget/packages/demo-todolist-next/.eslintrc.json new
+3
@@ -0,0 +1,3 @@
1 +{
2 + "extends": "next/core-web-vitals"
3 +}
compiler/forget/packages/demo-todolist-next/.gitignore new
+35
@@ -0,0 +1,35 @@
1 +# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
2 +
3 +# dependencies
4 +/node_modules
5 +/.pnp
6 +.pnp.js
7 +
8 +# testing
9 +/coverage
10 +
11 +# next.js
12 +/.next/
13 +/out/
14 +
15 +# production
16 +/build
17 +
18 +# misc
19 +.DS_Store
20 +*.pem
21 +
22 +# debug
23 +npm-debug.log*
24 +yarn-debug.log*
25 +yarn-error.log*
26 +.pnpm-debug.log*
27 +
28 +# local env files
29 +.env.local
30 +.env.development.local
31 +.env.test.local
32 +.env.production.local
33 +
34 +# vercel
35 +.vercel
compiler/forget/packages/demo-todolist-next/README.md new
+34
@@ -0,0 +1,34 @@
1 +This is a [Next.js](https://nextjs.org/) project bootstrapped with [`create-next-app`](https://github.com/vercel/next.js/tree/canary/packages/create-next-app).
2 +
3 +## Getting Started
4 +
5 +First, run the development server:
6 +
7 +```bash
8 +npm run dev
9 +# or
10 +yarn dev
11 +```
12 +
13 +Open [http://localhost:3000](http://localhost:3000) with your browser to see the result.
14 +
15 +You can start editing the page by modifying `pages/index.js`. The page auto-updates as you edit the file.
16 +
17 +[API routes](https://nextjs.org/docs/api-routes/introduction) can be accessed on [http://localhost:3000/api/hello](http://localhost:3000/api/hello). This endpoint can be edited in `pages/api/hello.js`.
18 +
19 +The `pages/api` directory is mapped to `/api/*`. Files in this directory are treated as [API routes](https://nextjs.org/docs/api-routes/introduction) instead of React pages.
20 +
21 +## Learn More
22 +
23 +To learn more about Next.js, take a look at the following resources:
24 +
25 +- [Next.js Documentation](https://nextjs.org/docs) - learn about Next.js features and API.
26 +- [Learn Next.js](https://nextjs.org/learn) - an interactive Next.js tutorial.
27 +
28 +You can check out [the Next.js GitHub repository](https://github.com/vercel/next.js/) - your feedback and contributions are welcome!
29 +
30 +## Deploy on Vercel
31 +
32 +The easiest way to deploy your Next.js app is to use the [Vercel Platform](https://vercel.com/new?utm_medium=default-template&filter=next.js&utm_source=create-next-app&utm_campaign=create-next-app-readme) from the creators of Next.js.
33 +
34 +Check out our [Next.js deployment documentation](https://nextjs.org/docs/deployment) for more details.
compiler/forget/packages/demo-todolist-next/components/AddTodo.js new
+49
@@ -0,0 +1,49 @@
1 +"use forget";
2 +import React, { useState } from "react";
3 +
4 +export default function AddTodo({ setTodos, themeColor = "#045975" }) {
5 + const [text, setText] = useState(defaultTodo);
6 + const handleAddTodo = (text) => {
7 + setTodos((ts) => [
8 + ...ts,
9 + {
10 + id: nextId++,
11 + text: text,
12 + done: false,
13 + },
14 + ]);
15 + };
16 +
17 + const bgGradient = `linear-gradient(
18 + 209.21deg,
19 + ${themeColor}22 0%,
20 + ${themeColor}ee 100%
21 + )`;
22 +
23 + return (
24 + <div className="AddTodo">
25 + <form
26 + onSubmit={(e) => {
27 + e.preventDefault();
28 + setText(defaultTodo);
29 + handleAddTodo(text.trim() === "" ? fallbackTodo : text);
30 + }}
31 + >
32 + <input
33 + placeholder="Add todo"
34 + value={text}
35 + onChange={(e) => setText(e.target.value)}
36 + />
37 + <div className="tail">
38 + <button type="submit" style={{ background: bgGradient }}>
39 + Add
40 + </button>
41 + </div>
42 + </form>
43 + </div>
44 + );
45 +}
46 +
47 +let nextId = 3;
48 +const defaultTodo = "";
49 +const fallbackTodo = "oops";
compiler/forget/packages/demo-todolist-next/components/BlazingTodoList.js new
+68
@@ -0,0 +1,68 @@
1 +"use forget";
2 +import getUpdated from "../utils/getUpdated";
3 +import getFiltered from "../utils/getFiltered";
4 +import initialTodos from "../utils/InitialTodos";
5 +import ColorPicker from "../utils/ColorPicker";
6 +import CountBadge from "../utils/CountBadge";
7 +import React, { useState } from "react";
8 +import Select from "../utils/Select";
9 +import Todo from "./Todo";
10 +import AddTodo from "./AddTodo";
11 +
12 +function TodoList({ visibility, themeColor }) {
13 + const [todos, setTodos] = useState(initialTodos);
14 + const handleChange = (todo) => setTodos((todos) => getUpdated(todos, todo));
15 +
16 + let filtered = [];
17 + for (const todo of getFiltered(todos, visibility)) {
18 + filtered.push(<Todo key={todo.id} todo={todo} onChange={handleChange} />);
19 + }
20 +
21 + return (
22 + <div>
23 + <ul>{filtered}</ul>
24 + <AddTodo setTodos={setTodos} themeColor={themeColor} />
25 + </div>
26 + );
27 +}
28 +
29 +export default function BlazingTodoList() {
30 + const [themeColor, setThemeColor] = useState("#045975");
31 + const [visibility, setVisibility] = useState("all");
32 +
33 + const bgGradient = `linear-gradient(
34 + 209.21deg,
35 + rgb(8, 126, 164) 13.57%,
36 + ${themeColor} 98.38%
37 + )`;
38 +
39 + return (
40 + <div className="column Neo">
41 + <div className="TodoListApp" style={{ background: bgGradient }}>
42 + <div className="FilterCountBanner">
43 + <code>getFiltered()</code> was called
44 + <CountBadge />
45 + times
46 + </div>
47 + <header>
48 + <ColorPicker
49 + value={themeColor}
50 + onChange={(e) => setThemeColor(e.target.value)}
51 + />
52 + <div className="VisibilityFilter">
53 + <Select
54 + value={visibility}
55 + options={[
56 + { value: "all", label: "All" },
57 + { value: "active", label: "Active" },
58 + { value: "completed", label: "Completed" },
59 + ]}
60 + onChange={(value) => setVisibility(value)}
61 + />
62 + </div>
63 + </header>
64 + <TodoList visibility={visibility} themeColor={themeColor} />
65 + </div>
66 + </div>
67 + );
68 +}
compiler/forget/packages/demo-todolist-next/components/Todo.js new
+59
@@ -0,0 +1,59 @@
1 +"use forget";
2 +import React, { useState, useRef } from "react";
3 +import CountBadge from "../utils/CountBadge";
4 +
5 +export default function Todo({ todo, onChange }) {
6 + const inputRef = useRef(null);
7 + const count = useRef(0);
8 + const [isEditing, setIsEditing] = useState(false);
9 +
10 + const onSave = (e) => {
11 + e.preventDefault();
12 + setIsEditing(false);
13 + onChange({
14 + ...todo,
15 + text: inputRef.current.value,
16 + });
17 + };
18 +
19 + const checkBox = !isEditing && (
20 + <button
21 + className={todo.done ? "Checkbox done" : "Checkbox"}
22 + onClick={(e) => {
23 + e.target.blur();
24 + onChange({
25 + ...todo,
26 + done: !todo.done,
27 + });
28 + }}
29 + ></button>
30 + );
31 +
32 + let todoBody;
33 + if (isEditing) {
34 + todoBody = (
35 + <form value={todo.text} onSubmit={onSave} onBlur={onSave}>
36 + <input ref={inputRef} defaultValue={todo.text} autoFocus />
37 + </form>
38 + );
39 + } else {
40 + todoBody = (
41 + <div
42 + className={"TodoBody" + (todo.done ? " done" : "")}
43 + onClick={() => setIsEditing(true)}
44 + >
45 + {todo.text}
46 + </div>
47 + );
48 + }
49 +
50 + return (
51 + <li className="Todo">
52 + {checkBox}
53 + {todoBody}
54 + <div className="tail">
55 + <CountBadge count={count.current++} type={"warning"} rounded />
56 + </div>
57 + </li>
58 + );
59 +}
compiler/forget/packages/demo-todolist-next/next.config.js new
+6
@@ -0,0 +1,6 @@
1 +/** @type {import('next').NextConfig} */
2 +const nextConfig = {
3 + reactStrictMode: true,
4 +}
5 +
6 +module.exports = nextConfig
compiler/forget/packages/demo-todolist-next/package.json new
+20
@@ -0,0 +1,20 @@
1 +{
2 + "name": "demo-todolist-next",
3 + "version": "0.1.0",
4 + "private": true,
5 + "scripts": {
6 + "dev": "next dev",
7 + "build": "next build",
8 + "start": "next start",
9 + "lint": "next lint"
10 + },
11 + "dependencies": {
12 + "next": "12.1.0",
13 + "react": "17.0.2",
14 + "react-dom": "17.0.2"
15 + },
16 + "devDependencies": {
17 + "eslint": "8.10.0",
18 + "eslint-config-next": "12.1.0"
19 + }
20 +}
compiler/forget/packages/demo-todolist-next/pages/_app.js new
+13
@@ -0,0 +1,13 @@
1 +import "../styles/normalize.css";
2 +import "../styles/styles.css";
3 +
4 +// Monkeypatch useMemoCache
5 +import React from "react";
6 +import { useMemoCache } from "../utils/useMemoCache";
7 +React.useMemoCache = useMemoCache;
8 +
9 +function MyApp({ Component, pageProps }) {
10 + return <Component {...pageProps} />;
11 +}
12 +
13 +export default MyApp;
compiler/forget/packages/demo-todolist-next/pages/api/hello.js new
+5
@@ -0,0 +1,5 @@
1 +// Next.js API route support: https://nextjs.org/docs/api-routes/introduction
2 +
3 +export default function handler(req, res) {
4 + res.status(200).json({ name: 'John Doe' })
5 +}
compiler/forget/packages/demo-todolist-next/pages/index.js new
+5
@@ -0,0 +1,5 @@
1 +import BlazingTodoList from "../components/BlazingTodoList";
2 +
3 +export default function Home() {
4 + return <BlazingTodoList />;
5 +}
compiler/forget/packages/demo-todolist-next/public/favicon.ico
Binary files /dev/null and b/compiler/forget/packages/demo-todolist-next/public/favicon.ico differ
compiler/forget/packages/demo-todolist-next/public/vercel.svg new
+4
@@ -0,0 +1,4 @@
1 +<svg width="283" height="64" viewBox="0 0 283 64" fill="none"
2 + xmlns="http://www.w3.org/2000/svg">
3 + <path d="M141.04 16c-11.04 0-19 7.2-19 18s8.96 18 20 18c6.67 0 12.55-2.64 16.19-7.09l-7.65-4.42c-2.02 2.21-5.09 3.5-8.54 3.5-4.79 0-8.86-2.5-10.37-6.5h28.02c.22-1.12.35-2.28.35-3.5 0-10.79-7.96-17.99-19-17.99zm-9.46 14.5c1.25-3.99 4.67-6.5 9.45-6.5 4.79 0 8.21 2.51 9.45 6.5h-18.9zM248.72 16c-11.04 0-19 7.2-19 18s8.96 18 20 18c6.67 0 12.55-2.64 16.19-7.09l-7.65-4.42c-2.02 2.21-5.09 3.5-8.54 3.5-4.79 0-8.86-2.5-10.37-6.5h28.02c.22-1.12.35-2.28.35-3.5 0-10.79-7.96-17.99-19-17.99zm-9.45 14.5c1.25-3.99 4.67-6.5 9.45-6.5 4.79 0 8.21 2.51 9.45 6.5h-18.9zM200.24 34c0 6 3.92 10 10 10 4.12 0 7.21-1.87 8.8-4.92l7.68 4.43c-3.18 5.3-9.14 8.49-16.48 8.49-11.05 0-19-7.2-19-18s7.96-18 19-18c7.34 0 13.29 3.19 16.48 8.49l-7.68 4.43c-1.59-3.05-4.68-4.92-8.8-4.92-6.07 0-10 4-10 10zm82.48-29v46h-9V5h9zM36.95 0L73.9 64H0L36.95 0zm92.38 5l-27.71 48L73.91 5H84.3l17.32 30 17.32-30h10.39zm58.91 12v9.69c-1-.29-2.06-.49-3.2-.49-5.81 0-10 4-10 10V51h-9V17h9v9.2c0-5.08 5.91-9.2 13.2-9.2z" fill="#000"/>
4 +</svg>
\ No newline at end of file
compiler/forget/packages/demo-todolist-next/styles/Home.module.css new
+116
@@ -0,0 +1,116 @@
1 +.container {
2 + padding: 0 2rem;
3 +}
4 +
5 +.main {
6 + min-height: 100vh;
7 + padding: 4rem 0;
8 + flex: 1;
9 + display: flex;
10 + flex-direction: column;
11 + justify-content: center;
12 + align-items: center;
13 +}
14 +
15 +.footer {
16 + display: flex;
17 + flex: 1;
18 + padding: 2rem 0;
19 + border-top: 1px solid #eaeaea;
20 + justify-content: center;
21 + align-items: center;
22 +}
23 +
24 +.footer a {
25 + display: flex;
26 + justify-content: center;
27 + align-items: center;
28 + flex-grow: 1;
29 +}
30 +
31 +.title a {
32 + color: #0070f3;
33 + text-decoration: none;
34 +}
35 +
36 +.title a:hover,
37 +.title a:focus,
38 +.title a:active {
39 + text-decoration: underline;
40 +}
41 +
42 +.title {
43 + margin: 0;
44 + line-height: 1.15;
45 + font-size: 4rem;
46 +}
47 +
48 +.title,
49 +.description {
50 + text-align: center;
51 +}
52 +
53 +.description {
54 + margin: 4rem 0;
55 + line-height: 1.5;
56 + font-size: 1.5rem;
57 +}
58 +
59 +.code {
60 + background: #fafafa;
61 + border-radius: 5px;
62 + padding: 0.75rem;
63 + font-size: 1.1rem;
64 + font-family: Menlo, Monaco, Lucida Console, Liberation Mono, DejaVu Sans Mono,
65 + Bitstream Vera Sans Mono, Courier New, monospace;
66 +}
67 +
68 +.grid {
69 + display: flex;
70 + align-items: center;
71 + justify-content: center;
72 + flex-wrap: wrap;
73 + max-width: 800px;
74 +}
75 +
76 +.card {
77 + margin: 1rem;
78 + padding: 1.5rem;
79 + text-align: left;
80 + color: inherit;
81 + text-decoration: none;
82 + border: 1px solid #eaeaea;
83 + border-radius: 10px;
84 + transition: color 0.15s ease, border-color 0.15s ease;
85 + max-width: 300px;
86 +}
87 +
88 +.card:hover,
89 +.card:focus,
90 +.card:active {
91 + color: #0070f3;
92 + border-color: #0070f3;
93 +}
94 +
95 +.card h2 {
96 + margin: 0 0 1rem 0;
97 + font-size: 1.5rem;
98 +}
99 +
100 +.card p {
101 + margin: 0;
102 + font-size: 1.25rem;
103 + line-height: 1.5;
104 +}
105 +
106 +.logo {
107 + height: 1em;
108 + margin-left: 0.5rem;
109 +}
110 +
111 +@media (max-width: 600px) {
112 + .grid {
113 + width: 100%;
114 + flex-direction: column;
115 + }
116 +}
compiler/forget/packages/demo-todolist-next/styles/globals.css new
+16
@@ -0,0 +1,16 @@
1 +html,
2 +body {
3 + padding: 0;
4 + margin: 0;
5 + font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Oxygen,
6 + Ubuntu, Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif;
7 +}
8 +
9 +a {
10 + color: inherit;
11 + text-decoration: none;
12 +}
13 +
14 +* {
15 + box-sizing: border-box;
16 +}
compiler/forget/packages/demo-todolist-next/styles/normalize.css new
+351
@@ -0,0 +1,351 @@
1 +/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */
2 +
3 +/* Document
4 + ========================================================================== */
5 +
6 +/**
7 + * 1. Correct the line height in all browsers.
8 + * 2. Prevent adjustments of font size after orientation changes in iOS.
9 + */
10 +
11 +html {
12 + line-height: 1.15; /* 1 */
13 + -webkit-text-size-adjust: 100%; /* 2 */
14 +}
15 +
16 +/* Sections
17 + ========================================================================== */
18 +
19 +/**
20 + * Remove the margin in all browsers.
21 + */
22 +
23 +body {
24 + margin: 0;
25 +}
26 +
27 +/**
28 + * Render the `main` element consistently in IE.
29 + */
30 +
31 +main {
32 + display: block;
33 +}
34 +
35 +/**
36 + * Correct the font size and margin on `h1` elements within `section` and
37 + * `article` contexts in Chrome, Firefox, and Safari.
38 + */
39 +
40 +h1 {
41 + font-size: 2em;
42 + margin: 0.67em 0;
43 +}
44 +
45 +/* Grouping content
46 + ========================================================================== */
47 +
48 +/**
49 + * 1. Add the correct box sizing in Firefox.
50 + * 2. Show the overflow in Edge and IE.
51 + */
52 +
53 +hr {
54 + box-sizing: content-box; /* 1 */
55 + height: 0; /* 1 */
56 + overflow: visible; /* 2 */
57 +}
58 +
59 +/**
60 + * 1. Correct the inheritance and scaling of font size in all browsers.
61 + * 2. Correct the odd `em` font sizing in all browsers.
62 + */
63 +
64 +pre {
65 + font-family: monospace, monospace; /* 1 */
66 + font-size: 1em; /* 2 */
67 +}
68 +
69 +/* Text-level semantics
70 + ========================================================================== */
71 +
72 +/**
73 + * Remove the gray background on active links in IE 10.
74 + */
75 +
76 +a {
77 + background-color: transparent;
78 +}
79 +
80 +/**
81 + * 1. Remove the bottom border in Chrome 57-
82 + * 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari.
83 + */
84 +
85 +abbr[title] {
86 + border-bottom: none; /* 1 */
87 + text-decoration: underline; /* 2 */
88 + text-decoration: underline dotted; /* 2 */
89 +}
90 +
91 +/**
92 + * Add the correct font weight in Chrome, Edge, and Safari.
93 + */
94 +
95 +b,
96 +strong {
97 + font-weight: bolder;
98 +}
99 +
100 +/**
101 + * 1. Correct the inheritance and scaling of font size in all browsers.
102 + * 2. Correct the odd `em` font sizing in all browsers.
103 + */
104 +
105 +code,
106 +kbd,
107 +samp {
108 + font-family: monospace, monospace; /* 1 */
109 + font-size: 1em; /* 2 */
110 +}
111 +
112 +/**
113 + * Add the correct font size in all browsers.
114 + */
115 +
116 +small {
117 + font-size: 80%;
118 +}
119 +
120 +/**
121 + * Prevent `sub` and `sup` elements from affecting the line height in
122 + * all browsers.
123 + */
124 +
125 +sub,
126 +sup {
127 + font-size: 75%;
128 + line-height: 0;
129 + position: relative;
130 + vertical-align: baseline;
131 +}
132 +
133 +sub {
134 + bottom: -0.25em;
135 +}
136 +
137 +sup {
138 + top: -0.5em;
139 +}
140 +
141 +/* Embedded content
142 + ========================================================================== */
143 +
144 +/**
145 + * Remove the border on images inside links in IE 10.
146 + */
147 +
148 +img {
149 + border-style: none;
150 +}
151 +
152 +/* Forms
153 + ========================================================================== */
154 +
155 +/**
156 + * 1. Change the font styles in all browsers.
157 + * 2. Remove the margin in Firefox and Safari.
158 + */
159 +
160 +button,
161 +input,
162 +optgroup,
163 +select,
164 +textarea {
165 + font-family: inherit; /* 1 */
166 + font-size: 100%; /* 1 */
167 + line-height: 1.15; /* 1 */
168 + margin: 0; /* 2 */
169 +}
170 +
171 +/**
172 + * Show the overflow in IE.
173 + * 1. Show the overflow in Edge.
174 + */
175 +
176 +button,
177 +input {
178 + /* 1 */
179 + overflow: visible;
180 +}
181 +
182 +/**
183 + * Remove the inheritance of text transform in Edge, Firefox, and IE.
184 + * 1. Remove the inheritance of text transform in Firefox.
185 + */
186 +
187 +button,
188 +select {
189 + /* 1 */
190 + text-transform: none;
191 +}
192 +
193 +/**
194 + * Correct the inability to style clickable types in iOS and Safari.
195 + */
196 +
197 +button,
198 +[type="button"],
199 +[type="reset"],
200 +[type="submit"] {
201 + -webkit-appearance: button;
202 +}
203 +
204 +/**
205 + * Remove the inner border and padding in Firefox.
206 + */
207 +
208 +button::-moz-focus-inner,
209 +[type="button"]::-moz-focus-inner,
210 +[type="reset"]::-moz-focus-inner,
211 +[type="submit"]::-moz-focus-inner {
212 + border-style: none;
213 + padding: 0;
214 +}
215 +
216 +/**
217 + * Restore the focus styles unset by the previous rule.
218 + */
219 +
220 +button:-moz-focusring,
221 +[type="button"]:-moz-focusring,
222 +[type="reset"]:-moz-focusring,
223 +[type="submit"]:-moz-focusring {
224 + outline: 1px dotted ButtonText;
225 +}
226 +
227 +/**
228 + * Correct the padding in Firefox.
229 + */
230 +
231 +fieldset {
232 + padding: 0.35em 0.75em 0.625em;
233 +}
234 +
235 +/**
236 + * 1. Correct the text wrapping in Edge and IE.
237 + * 2. Correct the color inheritance from `fieldset` elements in IE.
238 + * 3. Remove the padding so developers are not caught out when they zero out
239 + * `fieldset` elements in all browsers.
240 + */
241 +
242 +legend {
243 + box-sizing: border-box; /* 1 */
244 + color: inherit; /* 2 */
245 + display: table; /* 1 */
246 + max-width: 100%; /* 1 */
247 + padding: 0; /* 3 */
248 + white-space: normal; /* 1 */
249 +}
250 +
251 +/**
252 + * Add the correct vertical alignment in Chrome, Firefox, and Opera.
253 + */
254 +
255 +progress {
256 + vertical-align: baseline;
257 +}
258 +
259 +/**
260 + * Remove the default vertical scrollbar in IE 10+.
261 + */
262 +
263 +textarea {
264 + overflow: auto;
265 +}
266 +
267 +/**
268 + * 1. Add the correct box sizing in IE 10.
269 + * 2. Remove the padding in IE 10.
270 + */
271 +
272 +[type="checkbox"],
273 +[type="radio"] {
274 + box-sizing: border-box; /* 1 */
275 + padding: 0; /* 2 */
276 +}
277 +
278 +/**
279 + * Correct the cursor style of increment and decrement buttons in Chrome.
280 + */
281 +
282 +[type="number"]::-webkit-inner-spin-button,
283 +[type="number"]::-webkit-outer-spin-button {
284 + height: auto;
285 +}
286 +
287 +/**
288 + * 1. Correct the odd appearance in Chrome and Safari.
289 + * 2. Correct the outline style in Safari.
290 + */
291 +
292 +[type="search"] {
293 + -webkit-appearance: textfield; /* 1 */
294 + outline-offset: -2px; /* 2 */
295 +}
296 +
297 +/**
298 + * Remove the inner padding in Chrome and Safari on macOS.
299 + */
300 +
301 +[type="search"]::-webkit-search-decoration {
302 + -webkit-appearance: none;
303 +}
304 +
305 +/**
306 + * 1. Correct the inability to style clickable types in iOS and Safari.
307 + * 2. Change font properties to `inherit` in Safari.
308 + */
309 +
310 +::-webkit-file-upload-button {
311 + -webkit-appearance: button; /* 1 */
312 + font: inherit; /* 2 */
313 +}
314 +
315 +/* Interactive
316 + ========================================================================== */
317 +
318 +/*
319 + * Add the correct display in Edge, IE 10+, and Firefox.
320 + */
321 +
322 +details {
323 + display: block;
324 +}
325 +
326 +/*
327 + * Add the correct display in all browsers.
328 + */
329 +
330 +summary {
331 + display: list-item;
332 +}
333 +
334 +/* Misc
335 + ========================================================================== */
336 +
337 +/**
338 + * Add the correct display in IE 10+.
339 + */
340 +
341 +template {
342 + display: none;
343 +}
344 +
345 +/**
346 + * Add the correct display in IE 10.
347 + */
348 +
349 +[hidden] {
350 + display: none;
351 +}
compiler/forget/packages/demo-todolist-next/styles/styles.css new
+376
@@ -0,0 +1,376 @@
1 +* {
2 + box-sizing: border-box;
3 +}
4 +
5 +body {
6 + font-family: sans-serif;
7 + margin: 20px;
8 + padding: 0;
9 + /* React dark bg */
10 + background-color: #24272e;
11 +}
12 +
13 +h1 {
14 + margin-top: 0;
15 + font-size: 22px;
16 +}
17 +
18 +h2 {
19 + margin-top: 0;
20 + font-size: 20px;
21 +}
22 +
23 +h3 {
24 + margin-top: 0;
25 + font-size: 18px;
26 +}
27 +
28 +h4 {
29 + margin-top: 0;
30 + font-size: 16px;
31 +}
32 +
33 +h5 {
34 + margin-top: 0;
35 + font-size: 14px;
36 +}
37 +
38 +h6 {
39 + margin-top: 0;
40 + font-size: 12px;
41 +}
42 +
43 +ul {
44 + padding-left: 20px;
45 +}
46 +
47 +button {
48 + margin: 5px;
49 +}
50 +li {
51 + list-style-type: none;
52 +}
53 +ul,
54 +li {
55 + margin: 0;
56 + padding: 0;
57 +}
58 +
59 +.row {
60 + display: flex;
61 +}
62 +
63 +.column {
64 + flex-direction: column;
65 + flex: 1;
66 + padding: 32px;
67 + display: flex;
68 + align-items: center;
69 +}
70 +
71 +.TodoListApp {
72 + transform: scale(1.05);
73 + transform-origin: top;
74 +}
75 +
76 +/* copy from neo.css */
77 +.Neo {
78 + font-family: "Optimistic Display App", "Open Sans", -apple-system,
79 + BlinkMacSystemFont, "Helvetica Neue", sans-serif !important;
80 +}
81 +
82 +.Neo code {
83 + font-family: "Iosevka SS05";
84 + padding-right: 6px;
85 +}
86 +
87 +.TodoListApp {
88 + min-width: 320px;
89 + max-width: 320px;
90 + position: relative;
91 + /* overflow: hidden; */
92 + color: white;
93 + padding: 16px;
94 + border-radius: 24px;
95 + margin-top: 96px;
96 + /* for Neo1 */
97 + background: linear-gradient(
98 + 209.21deg,
99 + rgb(8, 126, 164) 13.57%,
100 + rgb(4, 89, 117) 98.38%
101 + );
102 + box-shadow: 0px 0.8px 2px rgba(0, 0, 0, 0.032),
103 + 0px 2.7px 6.7px rgba(0, 0, 0, 0.048), 0px 12px 30px rgba(0, 0, 0, 0.08);
104 +}
105 +
106 +.TodoListApp header {
107 + height: auto;
108 + position: relative;
109 + display: flex;
110 + justify-content: flex-start;
111 + align-items: center;
112 + margin-bottom: 12px;
113 +}
114 +
115 +.TodoListApp .FilterCountBanner {
116 + display: flex;
117 + align-items: center;
118 + justify-content: center;
119 + color: #fffc;
120 + font-size: 14.5px;
121 + height: 40px;
122 + position: absolute;
123 + width: 100%;
124 + left: 0;
125 + top: -40px;
126 +}
127 +
128 +.TodoListApp .FilterCountBanner .badge {
129 + margin: 0 6px;
130 +}
131 +
132 +input[type="color"].ColorPicker {
133 + width: auto;
134 + height: 40px;
135 + border: none;
136 + cursor: pointer;
137 + background-color: transparent;
138 + border-radius: 50%;
139 + display: flex;
140 + align-items: center;
141 + margin-right: 10px;
142 +}
143 +
144 +input[type="color"]::-webkit-color-swatch-wrapper {
145 + width: 34px;
146 + height: 34px;
147 + padding: 0;
148 + border-radius: 50%;
149 +}
150 +
151 +input[type="color"]::-webkit-color-swatch {
152 + border: none;
153 + border-radius: 50%;
154 +}
155 +
156 +.ColorPicker span {
157 + line-height: 32px;
158 + position: absolute;
159 + top: 0;
160 + right: 6px;
161 + font-size: 14px;
162 + /* click through */
163 + pointer-events: none;
164 +}
165 +
166 +.AddTodo,
167 +.Todo,
168 +.VisibilityFilter {
169 + transition: background-color 0.3s ease;
170 + display: flex;
171 + align-items: center;
172 + border-radius: 24px;
173 + font-size: 17px;
174 + color: #fffd;
175 + background-color: #0001;
176 + padding: 0px 18px;
177 + min-height: 56px;
178 + margin-bottom: 12px;
179 + flex-wrap: nowrap;
180 +}
181 +
182 +.VisibilityFilter {
183 + min-height: auto;
184 + margin: 0px;
185 + padding: 0 12px;
186 + display: flex;
187 + justify-content: flex-start;
188 + align-items: center;
189 + flex-wrap: nowrap;
190 +}
191 +
192 +.AddTodo {
193 + margin-bottom: 0px;
194 +}
195 +
196 +/* .Todo:last-of-type {
197 + margin-bottom: 0px;
198 +} */
199 +
200 +.Todo:hover,
201 +.AddTodo:hover {
202 + background-color: #0002;
203 +}
204 +
205 +.Todo:focus-within,
206 +.AddTodo:focus-within {
207 + background-color: #0003;
208 + box-shadow: rgb(255 255 255 / 20%) 0px 0px 0px 0.5px inset;
209 +}
210 +
211 +.Todo input,
212 +.AddTodo input {
213 + width: 100%;
214 + flex: 1 1;
215 + color: rgb(235, 236, 240);
216 + background-color: transparent;
217 + border: none;
218 + outline: 0px;
219 +}
220 +
221 +.Todo input,
222 +.Todo .TodoBody,
223 +.AddTodo input {
224 + padding: 18px 0;
225 +}
226 +
227 +.Select {
228 + display: flex;
229 + justify-content: space-evenly;
230 + flex: 1;
231 + align-items: center;
232 + flex-wrap: nowrap;
233 + border: none;
234 + border-radius: 18px;
235 +}
236 +
237 +.AddTodo button,
238 +.Select button {
239 + cursor: pointer;
240 + height: 40px;
241 + width: auto;
242 + border: none;
243 + border-radius: 18px;
244 + padding: 0 14px;
245 + transition: all 0.3s ease;
246 + color: #fffb;
247 + margin-right: -9px;
248 + /* For Neo1 */
249 + background: linear-gradient(
250 + 209.21deg,
251 + rgba(4, 89, 117, 0.133) 0%,
252 + rgba(4, 89, 117, 0.933) 100%
253 + );
254 + box-shadow: rgb(255 255 255 / 20%) 0px 0px 0px 0.5px inset,
255 + rgb(23 0 102 / 20%) 0px 20px 40px, rgb(0 0 0 / 10%) 0px 1px 3px;
256 +}
257 +
258 +.Select button {
259 + margin: 0;
260 + background: transparent;
261 + box-shadow: none;
262 + color: #fff7;
263 + font-size: 14.5px;
264 + padding: 0 4px;
265 +}
266 +
267 +.Select button.selected {
268 + color: #fffc;
269 +}
270 +
271 +.Select button:hover {
272 + color: #fffc;
273 +}
274 +
275 +.AddTodo button:hover {
276 + color: #fffc;
277 + box-shadow: rgb(255 255 255 / 20%) 0px 0px 0px 0.5px inset,
278 + rgb(23 0 102 / 30%) 0px 40px 80px, rgb(0 0 0 / 30%) 0px 10px 30px;
279 +}
280 +
281 +.AddTodo form,
282 +.Todo form,
283 +.Todo .TodoBody {
284 + display: flex;
285 + cursor: pointer;
286 + flex: 1;
287 + align-items: center;
288 + overflow-wrap: anywhere;
289 +}
290 +
291 +.AddTodo input::placeholder {
292 + color: #fff7;
293 +}
294 +
295 +.Todo .done {
296 + text-decoration: line-through;
297 + font-style: italic;
298 + color: #fff7;
299 +}
300 +
301 +.Todo .Checkbox {
302 + position: relative;
303 + display: flex;
304 + justify-content: center;
305 + align-items: center;
306 + width: 22px;
307 + height: 22px;
308 + padding: 0px;
309 + border: none;
310 + cursor: pointer;
311 + background-color: transparent;
312 + border-radius: 50%;
313 + border: 0.5px solid #fff3;
314 + margin: 0px;
315 + margin-right: 12px;
316 +}
317 +
318 +.Todo .Checkbox.done {
319 + border: 0.5px solid #fff5;
320 +}
321 +
322 +.Todo .Checkbox.done::after {
323 + content: "";
324 + width: 16px;
325 + height: 16px;
326 + position: absolute;
327 + border-radius: 50%;
328 + background-color: #fffc;
329 +}
330 +
331 +.tail {
332 + margin-left: 8px;
333 + justify-content: flex-end;
334 +}
335 +
336 +.VisibilityFilter {
337 + flex: 1;
338 +}
339 +
340 +.VisibilityFilter .tail {
341 + margin-left: 0px;
342 + display: flex;
343 +}
344 +
345 +/*
346 + * https://getbootstrap.com/docs/5.1/components/badge/
347 + */
348 +
349 +.badge {
350 + /* so width won't change when bumping. */
351 + font-family: "Iosevka SS05", menlo, monospace;
352 + display: inline-block;
353 + padding: 0.35em 0.65em;
354 + font-size: 13.5px;
355 + font-weight: 700;
356 + line-height: 1;
357 + color: #fff;
358 + text-align: center;
359 + white-space: nowrap;
360 + vertical-align: baseline;
361 + border-radius: 0.25rem;
362 +}
363 +
364 +.rounded-pill {
365 + border-radius: 50rem !important;
366 +}
367 +
368 +.badge-danger {
369 + color: #fff;
370 + background-color: #dc3545;
371 +}
372 +
373 +.badge-warning {
374 + color: #212529;
375 + background-color: #ffc107;
376 +}
compiler/forget/packages/demo-todolist-next/utils/ColorPicker.js new
+12
@@ -0,0 +1,12 @@
1 +export default function ColorPicker({ value, onChange }) {
2 + return (
3 + <input
4 + className="ColorPicker"
5 + type="color"
6 + id="head"
7 + name="head"
8 + value={value}
9 + onChange={onChange}
10 + />
11 + );
12 +}
compiler/forget/packages/demo-todolist-next/utils/CountBadge.js new
+17
@@ -0,0 +1,17 @@
1 +import { forwardRef } from "react";
2 +
3 +// Capped to 3 digits
4 +const CountBadge = forwardRef(
5 + ({ count = 0, type = "danger", rounded = false }, ref) => {
6 + return (
7 + <span
8 + ref={ref}
9 + className={`badge ${rounded && "rounded-pill"} badge-${type}`}
10 + >
11 + {count > 999 ? 999 : count}
12 + </span>
13 + );
14 + }
15 +);
16 +
17 +export default CountBadge;
compiler/forget/packages/demo-todolist-next/utils/InitialTodos.js new
+7
@@ -0,0 +1,7 @@
1 +const initialTodos = [
2 + { id: 0, text: "memo", done: true },
3 + { id: 1, text: "useCallback", done: false },
4 + { id: 2, text: "useMemo", done: false },
5 +];
6 +
7 +export default initialTodos;
compiler/forget/packages/demo-todolist-next/utils/Select.js new
+22
@@ -0,0 +1,22 @@
1 +export default function Select({ value, options, onChange }) {
2 + return (
3 + <div className="Select">
4 + {options.map(o => {
5 + if (value === o.value) {
6 + return (
7 + <button key={o.value} className="selected">
8 + {" "}
9 + {o.label}{" "}
10 + </button>
11 + );
12 + } else {
13 + return (
14 + <button key={o.value} onClick={() => onChange(o.value)}>
15 + {o.label}
16 + </button>
17 + );
18 + }
19 + })}
20 + </div>
21 + );
22 +}
compiler/forget/packages/demo-todolist-next/utils/getFiltered.js new
+28
@@ -0,0 +1,28 @@
1 +function delay() {
2 + let now = performance.now();
3 + while (performance.now() - now < 16) {
4 + // Artificial delay -- do nothing for 100ms
5 + }
6 +}
7 +export default function getFiltered(todos, visibility) {
8 + //delay()
9 +
10 + // client-only
11 + if (typeof window !== "undefined") {
12 + // This only works when there is only one counter unfortunately...
13 + const $filterCountBadge = document.querySelector(
14 + ".FilterCountBanner .badge"
15 + );
16 + if ($filterCountBadge)
17 + $filterCountBadge.textContent =
18 + parseInt($filterCountBadge.textContent) + 1;
19 + }
20 + switch (visibility) {
21 + case "all":
22 + return todos;
23 + case "active":
24 + return todos.filter((t) => !t.done);
25 + case "completed":
26 + return todos.filter((t) => t.done);
27 + }
28 +}
compiler/forget/packages/demo-todolist-next/utils/getUpdated.js new
+11
@@ -0,0 +1,11 @@
1 +export default function getUpdated(tasks, newTodo) {
2 + return tasks
3 + .map(t => {
4 + if (t.id === newTodo.id) {
5 + return newTodo;
6 + } else {
7 + return t;
8 + }
9 + })
10 + .filter(t => !!t.text);
11 +}
compiler/forget/packages/demo-todolist-next/utils/useMemoCache.js new
+10
@@ -0,0 +1,10 @@
1 +import { useRef } from "react";
2 +
3 +const REACT_MEMOCACHE_SENTINEL = Symbol.for('react.memocache_sentinel');
4 +
5 +export function useMemoCache(i) {
6 + const $ = new Array(i).fill(REACT_MEMOCACHE_SENTINEL)
7 + $._ = REACT_MEMOCACHE_SENTINEL
8 + const ref = useRef($);
9 + return ref.current;
10 +};
compiler/forget/packages/demo-todolist-next/yarn.lock new
+1669
@@ -0,0 +1,1669 @@
1 +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
2 +# yarn lockfile v1
3 +
4 +
5 +"@babel/runtime-corejs3@^7.10.2":
6 + version "7.18.3"
7 + resolved "https://registry.yarnpkg.com/@babel/runtime-corejs3/-/runtime-corejs3-7.18.3.tgz#52f0241a31e0ec61a6187530af6227c2846bd60c"
8 + integrity sha512-l4ddFwrc9rnR+EJsHsh+TJ4A35YqQz/UqcjtlX2ov53hlJYG5CxtQmNZxyajwDVmCxwy++rtvGU5HazCK4W41Q==
9 + dependencies:
10 + core-js-pure "^3.20.2"
11 + regenerator-runtime "^0.13.4"
12 +
13 +"@babel/runtime@^7.10.2", "@babel/runtime@^7.16.3":
14 + version "7.18.3"
15 + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.18.3.tgz#c7b654b57f6f63cf7f8b418ac9ca04408c4579f4"
16 + integrity sha512-38Y8f7YUhce/K7RMwTp7m0uCumpv9hZkitCbBClqQIow1qSbCvGkcegKOXpEWCQLfWmevgRiWokZ1GkpfhbZug==
17 + dependencies:
18 + regenerator-runtime "^0.13.4"
19 +
20 +"@eslint/eslintrc@^1.2.0":
21 + version "1.3.0"
22 + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-1.3.0.tgz#29f92c30bb3e771e4a2048c95fa6855392dfac4f"
23 + integrity sha512-UWW0TMTmk2d7hLcWD1/e2g5HDM/HQ3csaLSqXCfqwh4uNDuNqlaKWXmEsL4Cs41Z0KnILNvwbHAah3C2yt06kw==
24 + dependencies:
25 + ajv "^6.12.4"
26 + debug "^4.3.2"
27 + espree "^9.3.2"
28 + globals "^13.15.0"
29 + ignore "^5.2.0"
30 + import-fresh "^3.2.1"
31 + js-yaml "^4.1.0"
32 + minimatch "^3.1.2"
33 + strip-json-comments "^3.1.1"
34 +
35 +"@humanwhocodes/config-array@^0.9.2":
36 + version "0.9.5"
37 + resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.9.5.tgz#2cbaf9a89460da24b5ca6531b8bbfc23e1df50c7"
38 + integrity sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw==
39 + dependencies:
40 + "@humanwhocodes/object-schema" "^1.2.1"
41 + debug "^4.1.1"
42 + minimatch "^3.0.4"
43 +
44 +"@humanwhocodes/object-schema@^1.2.1":
45 + version "1.2.1"
46 + resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45"
47 + integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==
48 +
49 +"@next/env@12.1.0":
50 + version "12.1.0"
51 + resolved "https://registry.yarnpkg.com/@next/env/-/env-12.1.0.tgz#73713399399b34aa5a01771fb73272b55b22c314"
52 + integrity sha512-nrIgY6t17FQ9xxwH3jj0a6EOiQ/WDHUos35Hghtr+SWN/ntHIQ7UpuvSi0vaLzZVHQWaDupKI+liO5vANcDeTQ==
53 +
54 +"@next/eslint-plugin-next@12.1.0":
55 + version "12.1.0"
56 + resolved "https://registry.yarnpkg.com/@next/eslint-plugin-next/-/eslint-plugin-next-12.1.0.tgz#32586a11378b3ffa5a93ac40a3c44ad99d70e95a"
57 + integrity sha512-WFiyvSM2G5cQmh32t/SiQuJ+I2O+FHVlK/RFw5b1565O2kEM/36EXncjt88Pa+X5oSc+1SS+tWxowWJd1lqI+g==
58 + dependencies:
59 + glob "7.1.7"
60 +
61 +"@next/swc-android-arm64@12.1.0":
62 + version "12.1.0"
63 + resolved "https://registry.yarnpkg.com/@next/swc-android-arm64/-/swc-android-arm64-12.1.0.tgz#865ba3a9afc204ff2bdeea49dd64d58705007a39"
64 + integrity sha512-/280MLdZe0W03stA69iL+v6I+J1ascrQ6FrXBlXGCsGzrfMaGr7fskMa0T5AhQIVQD4nA/46QQWxG//DYuFBcA==
65 +
66 +"@next/swc-darwin-arm64@12.1.0":
67 + version "12.1.0"
68 + resolved "https://registry.yarnpkg.com/@next/swc-darwin-arm64/-/swc-darwin-arm64-12.1.0.tgz#08e8b411b8accd095009ed12efbc2f1d4d547135"
69 + integrity sha512-R8vcXE2/iONJ1Unf5Ptqjk6LRW3bggH+8drNkkzH4FLEQkHtELhvcmJwkXcuipyQCsIakldAXhRbZmm3YN1vXg==
70 +
71 +"@next/swc-darwin-x64@12.1.0":
72 + version "12.1.0"
73 + resolved "https://registry.yarnpkg.com/@next/swc-darwin-x64/-/swc-darwin-x64-12.1.0.tgz#fcd684497a76e8feaca88db3c394480ff0b007cd"
74 + integrity sha512-ieAz0/J0PhmbZBB8+EA/JGdhRHBogF8BWaeqR7hwveb6SYEIJaDNQy0I+ZN8gF8hLj63bEDxJAs/cEhdnTq+ug==
75 +
76 +"@next/swc-linux-arm-gnueabihf@12.1.0":
77 + version "12.1.0"
78 + resolved "https://registry.yarnpkg.com/@next/swc-linux-arm-gnueabihf/-/swc-linux-arm-gnueabihf-12.1.0.tgz#9ec6380a27938a5799aaa6035c205b3c478468a7"
79 + integrity sha512-njUd9hpl6o6A5d08dC0cKAgXKCzm5fFtgGe6i0eko8IAdtAPbtHxtpre3VeSxdZvuGFh+hb0REySQP9T1ttkog==
80 +
81 +"@next/swc-linux-arm64-gnu@12.1.0":
82 + version "12.1.0"
83 + resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-12.1.0.tgz#7f4196dff1049cea479607c75b81033ae2dbd093"
84 + integrity sha512-OqangJLkRxVxMhDtcb7Qn1xjzFA3s50EIxY7mljbSCLybU+sByPaWAHY4px97ieOlr2y4S0xdPKkQ3BCAwyo6Q==
85 +
86 +"@next/swc-linux-arm64-musl@12.1.0":
87 + version "12.1.0"
88 + resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-12.1.0.tgz#b445f767569cdc2dddee785ca495e1a88c025566"
89 + integrity sha512-hB8cLSt4GdmOpcwRe2UzI5UWn6HHO/vLkr5OTuNvCJ5xGDwpPXelVkYW/0+C3g5axbDW2Tym4S+MQCkkH9QfWA==
90 +
91 +"@next/swc-linux-x64-gnu@12.1.0":
92 + version "12.1.0"
93 + resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-12.1.0.tgz#67610e9be4fbc987de7535f1bcb17e45fe12f90e"
94 + integrity sha512-OKO4R/digvrVuweSw/uBM4nSdyzsBV5EwkUeeG4KVpkIZEe64ZwRpnFB65bC6hGwxIBnTv5NMSnJ+0K/WmG78A==
95 +
96 +"@next/swc-linux-x64-musl@12.1.0":
97 + version "12.1.0"
98 + resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-12.1.0.tgz#ea19a23db08a9f2e34ac30401f774cf7d1669d31"
99 + integrity sha512-JohhgAHZvOD3rQY7tlp7NlmvtvYHBYgY0x5ZCecUT6eCCcl9lv6iV3nfu82ErkxNk1H893fqH0FUpznZ/H3pSw==
100 +
101 +"@next/swc-win32-arm64-msvc@12.1.0":
102 + version "12.1.0"
103 + resolved "https://registry.yarnpkg.com/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-12.1.0.tgz#eadf054fc412085659b98e145435bbba200b5283"
104 + integrity sha512-T/3gIE6QEfKIJ4dmJk75v9hhNiYZhQYAoYm4iVo1TgcsuaKLFa+zMPh4056AHiG6n9tn2UQ1CFE8EoybEsqsSw==
105 +
106 +"@next/swc-win32-ia32-msvc@12.1.0":
107 + version "12.1.0"
108 + resolved "https://registry.yarnpkg.com/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-12.1.0.tgz#68faeae10c89f698bf9d28759172b74c9c21bda1"
109 + integrity sha512-iwnKgHJdqhIW19H9PRPM9j55V6RdcOo6rX+5imx832BCWzkDbyomWnlzBfr6ByUYfhohb8QuH4hSGEikpPqI0Q==
110 +
111 +"@next/swc-win32-x64-msvc@12.1.0":
112 + version "12.1.0"
113 + resolved "https://registry.yarnpkg.com/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-12.1.0.tgz#d27e7e76c87a460a4da99c5bfdb1618dcd6cd064"
114 + integrity sha512-aBvcbMwuanDH4EMrL2TthNJy+4nP59Bimn8egqv6GHMVj0a44cU6Au4PjOhLNqEh9l+IpRGBqMTzec94UdC5xg==
115 +
116 +"@nodelib/fs.scandir@2.1.5":
117 + version "2.1.5"
118 + resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5"
119 + integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==
120 + dependencies:
121 + "@nodelib/fs.stat" "2.0.5"
122 + run-parallel "^1.1.9"
123 +
124 +"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2":
125 + version "2.0.5"
126 + resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b"
127 + integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==
128 +
129 +"@nodelib/fs.walk@^1.2.3":
130 + version "1.2.8"
131 + resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a"
132 + integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==
133 + dependencies:
134 + "@nodelib/fs.scandir" "2.1.5"
135 + fastq "^1.6.0"
136 +
137 +"@rushstack/eslint-patch@^1.0.8":
138 + version "1.1.3"
139 + resolved "https://registry.yarnpkg.com/@rushstack/eslint-patch/-/eslint-patch-1.1.3.tgz#6801033be7ff87a6b7cadaf5b337c9f366a3c4b0"
140 + integrity sha512-WiBSI6JBIhC6LRIsB2Kwh8DsGTlbBU+mLRxJmAe3LjHTdkDpwIbEOZgoXBbZilk/vlfjK8i6nKRAvIRn1XaIMw==
141 +
142 +"@types/json5@^0.0.29":
143 + version "0.0.29"
144 + resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee"
145 + integrity sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==
146 +
147 +"@typescript-eslint/parser@^5.0.0":
148 + version "5.29.0"
149 + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.29.0.tgz#41314b195b34d44ff38220caa55f3f93cfca43cf"
150 + integrity sha512-ruKWTv+x0OOxbzIw9nW5oWlUopvP/IQDjB5ZqmTglLIoDTctLlAJpAQFpNPJP/ZI7hTT9sARBosEfaKbcFuECw==
151 + dependencies:
152 + "@typescript-eslint/scope-manager" "5.29.0"
153 + "@typescript-eslint/types" "5.29.0"
154 + "@typescript-eslint/typescript-estree" "5.29.0"
155 + debug "^4.3.4"
156 +
157 +"@typescript-eslint/scope-manager@5.29.0":
158 + version "5.29.0"
159 + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.29.0.tgz#2a6a32e3416cb133e9af8dcf54bf077a916aeed3"
160 + integrity sha512-etbXUT0FygFi2ihcxDZjz21LtC+Eps9V2xVx09zFoN44RRHPrkMflidGMI+2dUs821zR1tDS6Oc9IXxIjOUZwA==
161 + dependencies:
162 + "@typescript-eslint/types" "5.29.0"
163 + "@typescript-eslint/visitor-keys" "5.29.0"
164 +
165 +"@typescript-eslint/types@5.29.0":
166 + version "5.29.0"
167 + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.29.0.tgz#7861d3d288c031703b2d97bc113696b4d8c19aab"
168 + integrity sha512-X99VbqvAXOMdVyfFmksMy3u8p8yoRGITgU1joBJPzeYa0rhdf5ok9S56/itRoUSh99fiDoMtarSIJXo7H/SnOg==
169 +
170 +"@typescript-eslint/typescript-estree@5.29.0":
171 + version "5.29.0"
172 + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.29.0.tgz#e83d19aa7fd2e74616aab2f25dfbe4de4f0b5577"
173 + integrity sha512-mQvSUJ/JjGBdvo+1LwC+GY2XmSYjK1nAaVw2emp/E61wEVYEyibRHCqm1I1vEKbXCpUKuW4G7u9ZCaZhJbLoNQ==
174 + dependencies:
175 + "@typescript-eslint/types" "5.29.0"
176 + "@typescript-eslint/visitor-keys" "5.29.0"
177 + debug "^4.3.4"
178 + globby "^11.1.0"
179 + is-glob "^4.0.3"
180 + semver "^7.3.7"
181 + tsutils "^3.21.0"
182 +
183 +"@typescript-eslint/visitor-keys@5.29.0":
184 + version "5.29.0"
185 + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.29.0.tgz#7a4749fa7ef5160c44a451bf060ac1dc6dfb77ee"
186 + integrity sha512-Hpb/mCWsjILvikMQoZIE3voc9wtQcS0A9FUw3h8bhr9UxBdtI/tw1ZDZUOXHXLOVMedKCH5NxyzATwnU78bWCQ==
187 + dependencies:
188 + "@typescript-eslint/types" "5.29.0"
189 + eslint-visitor-keys "^3.3.0"
190 +
191 +acorn-jsx@^5.3.2:
192 + version "5.3.2"
193 + resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937"
194 + integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==
195 +
196 +acorn@^8.7.1:
197 + version "8.7.1"
198 + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.7.1.tgz#0197122c843d1bf6d0a5e83220a788f278f63c30"
199 + integrity sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A==
200 +
201 +ajv@^6.10.0, ajv@^6.12.4:
202 + version "6.12.6"
203 + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4"
204 + integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==
205 + dependencies:
206 + fast-deep-equal "^3.1.1"
207 + fast-json-stable-stringify "^2.0.0"
208 + json-schema-traverse "^0.4.1"
209 + uri-js "^4.2.2"
210 +
211 +ansi-regex@^5.0.1:
212 + version "5.0.1"
213 + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304"
214 + integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==
215 +
216 +ansi-styles@^4.1.0:
217 + version "4.3.0"
218 + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937"
219 + integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==
220 + dependencies:
221 + color-convert "^2.0.1"
222 +
223 +argparse@^2.0.1:
224 + version "2.0.1"
225 + resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38"
226 + integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==
227 +
228 +aria-query@^4.2.2:
229 + version "4.2.2"
230 + resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-4.2.2.tgz#0d2ca6c9aceb56b8977e9fed6aed7e15bbd2f83b"
231 + integrity sha512-o/HelwhuKpTj/frsOsbNLNgnNGVIFsVP/SW2BSF14gVl7kAfMOJ6/8wUAUvG1R1NHKrfG+2sHZTu0yauT1qBrA==
232 + dependencies:
233 + "@babel/runtime" "^7.10.2"
234 + "@babel/runtime-corejs3" "^7.10.2"
235 +
236 +array-includes@^3.1.4, array-includes@^3.1.5:
237 + version "3.1.5"
238 + resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.5.tgz#2c320010db8d31031fd2a5f6b3bbd4b1aad31bdb"
239 + integrity sha512-iSDYZMMyTPkiFasVqfuAQnWAYcvO/SeBSCGKePoEthjp4LEMTe4uLc7b025o4jAZpHhihh8xPo99TNWUWWkGDQ==
240 + dependencies:
241 + call-bind "^1.0.2"
242 + define-properties "^1.1.4"
243 + es-abstract "^1.19.5"
244 + get-intrinsic "^1.1.1"
245 + is-string "^1.0.7"
246 +
247 +array-union@^2.1.0:
248 + version "2.1.0"
249 + resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d"
250 + integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==
251 +
252 +array.prototype.flat@^1.2.5:
253 + version "1.3.0"
254 + resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.3.0.tgz#0b0c1567bf57b38b56b4c97b8aa72ab45e4adc7b"
255 + integrity sha512-12IUEkHsAhA4DY5s0FPgNXIdc8VRSqD9Zp78a5au9abH/SOBrsp082JOWFNTjkMozh8mqcdiKuaLGhPeYztxSw==
256 + dependencies:
257 + call-bind "^1.0.2"
258 + define-properties "^1.1.3"
259 + es-abstract "^1.19.2"
260 + es-shim-unscopables "^1.0.0"
261 +
262 +array.prototype.flatmap@^1.3.0:
263 + version "1.3.0"
264 + resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.3.0.tgz#a7e8ed4225f4788a70cd910abcf0791e76a5534f"
265 + integrity sha512-PZC9/8TKAIxcWKdyeb77EzULHPrIX/tIZebLJUQOMR1OwYosT8yggdfWScfTBCDj5utONvOuPQQumYsU2ULbkg==
266 + dependencies:
267 + call-bind "^1.0.2"
268 + define-properties "^1.1.3"
269 + es-abstract "^1.19.2"
270 + es-shim-unscopables "^1.0.0"
271 +
272 +ast-types-flow@^0.0.7:
273 + version "0.0.7"
274 + resolved "https://registry.yarnpkg.com/ast-types-flow/-/ast-types-flow-0.0.7.tgz#f70b735c6bca1a5c9c22d982c3e39e7feba3bdad"
275 + integrity sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag==
276 +
277 +axe-core@^4.3.5:
278 + version "4.4.2"
279 + resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-4.4.2.tgz#dcf7fb6dea866166c3eab33d68208afe4d5f670c"
280 + integrity sha512-LVAaGp/wkkgYJcjmHsoKx4juT1aQvJyPcW09MLCjVTh3V2cc6PnyempiLMNH5iMdfIX/zdbjUx2KDjMLCTdPeA==
281 +
282 +axobject-query@^2.2.0:
283 + version "2.2.0"
284 + resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-2.2.0.tgz#943d47e10c0b704aa42275e20edf3722648989be"
285 + integrity sha512-Td525n+iPOOyUQIeBfcASuG6uJsDOITl7Mds5gFyerkWiX7qhUTdYUBlSgNMyVqtSJqwpt1kXGLdUt6SykLMRA==
286 +
287 +balanced-match@^1.0.0:
288 + version "1.0.2"
289 + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee"
290 + integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==
291 +
292 +brace-expansion@^1.1.7:
293 + version "1.1.11"
294 + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd"
295 + integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==
296 + dependencies:
297 + balanced-match "^1.0.0"
298 + concat-map "0.0.1"
299 +
300 +braces@^3.0.2:
301 + version "3.0.2"
302 + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107"
303 + integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==
304 + dependencies:
305 + fill-range "^7.0.1"
306 +
307 +call-bind@^1.0.0, call-bind@^1.0.2:
308 + version "1.0.2"
309 + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c"
310 + integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==
311 + dependencies:
312 + function-bind "^1.1.1"
313 + get-intrinsic "^1.0.2"
314 +
315 +callsites@^3.0.0:
316 + version "3.1.0"
317 + resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73"
318 + integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==
319 +
320 +caniuse-lite@^1.0.30001283:
321 + version "1.0.30001358"
322 + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001358.tgz#473d35dabf5e448b463095cab7924e96ccfb8c00"
323 + integrity sha512-hvp8PSRymk85R20bsDra7ZTCpSVGN/PAz9pSAjPSjKC+rNmnUk5vCRgJwiTT/O4feQ/yu/drvZYpKxxhbFuChw==
324 +
325 +chalk@^4.0.0:
326 + version "4.1.2"
327 + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01"
328 + integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==
329 + dependencies:
330 + ansi-styles "^4.1.0"
331 + supports-color "^7.1.0"
332 +
333 +color-convert@^2.0.1:
334 + version "2.0.1"
335 + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3"
336 + integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==
337 + dependencies:
338 + color-name "~1.1.4"
339 +
340 +color-name@~1.1.4:
341 + version "1.1.4"
342 + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2"
343 + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==
344 +
345 +concat-map@0.0.1:
346 + version "0.0.1"
347 + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
348 + integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==
349 +
350 +core-js-pure@^3.20.2:
351 + version "3.23.2"
352 + resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.23.2.tgz#efe5e486469c5ed2d088d76e973eb12e74a930e7"
353 + integrity sha512-t6u7H4Ff/yZNk+zqTr74UjCcZ3k8ApBryeLLV4rYQd9aF3gqmjjGjjR44ENfeBMH8VVvSynIjAJ0mUuFhzQtrA==
354 +
355 +cross-spawn@^7.0.2:
356 + version "7.0.3"
357 + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6"
358 + integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==
359 + dependencies:
360 + path-key "^3.1.0"
361 + shebang-command "^2.0.0"
362 + which "^2.0.1"
363 +
364 +damerau-levenshtein@^1.0.7:
365 + version "1.0.8"
366 + resolved "https://registry.yarnpkg.com/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz#b43d286ccbd36bc5b2f7ed41caf2d0aba1f8a6e7"
367 + integrity sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==
368 +
369 +debug@^2.6.9:
370 + version "2.6.9"
371 + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f"
372 + integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==
373 + dependencies:
374 + ms "2.0.0"
375 +
376 +debug@^3.2.7:
377 + version "3.2.7"
378 + resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a"
379 + integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==
380 + dependencies:
381 + ms "^2.1.1"
382 +
383 +debug@^4.1.1, debug@^4.3.2, debug@^4.3.4:
384 + version "4.3.4"
385 + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865"
386 + integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==
387 + dependencies:
388 + ms "2.1.2"
389 +
390 +deep-is@^0.1.3:
391 + version "0.1.4"
392 + resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831"
393 + integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==
394 +
395 +define-properties@^1.1.3, define-properties@^1.1.4:
396 + version "1.1.4"
397 + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.4.tgz#0b14d7bd7fbeb2f3572c3a7eda80ea5d57fb05b1"
398 + integrity sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==
399 + dependencies:
400 + has-property-descriptors "^1.0.0"
401 + object-keys "^1.1.1"
402 +
403 +dir-glob@^3.0.1:
404 + version "3.0.1"
405 + resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f"
406 + integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==
407 + dependencies:
408 + path-type "^4.0.0"
409 +
410 +doctrine@^2.1.0:
411 + version "2.1.0"
412 + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d"
413 + integrity sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==
414 + dependencies:
415 + esutils "^2.0.2"
416 +
417 +doctrine@^3.0.0:
418 + version "3.0.0"
419 + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961"
420 + integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==
421 + dependencies:
422 + esutils "^2.0.2"
423 +
424 +emoji-regex@^9.2.2:
425 + version "9.2.2"
426 + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72"
427 + integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==
428 +
429 +es-abstract@^1.19.0, es-abstract@^1.19.1, es-abstract@^1.19.2, es-abstract@^1.19.5:
430 + version "1.20.1"
431 + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.20.1.tgz#027292cd6ef44bd12b1913b828116f54787d1814"
432 + integrity sha512-WEm2oBhfoI2sImeM4OF2zE2V3BYdSF+KnSi9Sidz51fQHd7+JuF8Xgcj9/0o+OWeIeIS/MiuNnlruQrJf16GQA==
433 + dependencies:
434 + call-bind "^1.0.2"
435 + es-to-primitive "^1.2.1"
436 + function-bind "^1.1.1"
437 + function.prototype.name "^1.1.5"
438 + get-intrinsic "^1.1.1"
439 + get-symbol-description "^1.0.0"
440 + has "^1.0.3"
441 + has-property-descriptors "^1.0.0"
442 + has-symbols "^1.0.3"
443 + internal-slot "^1.0.3"
444 + is-callable "^1.2.4"
445 + is-negative-zero "^2.0.2"
446 + is-regex "^1.1.4"
447 + is-shared-array-buffer "^1.0.2"
448 + is-string "^1.0.7"
449 + is-weakref "^1.0.2"
450 + object-inspect "^1.12.0"
451 + object-keys "^1.1.1"
452 + object.assign "^4.1.2"
453 + regexp.prototype.flags "^1.4.3"
454 + string.prototype.trimend "^1.0.5"
455 + string.prototype.trimstart "^1.0.5"
456 + unbox-primitive "^1.0.2"
457 +
458 +es-shim-unscopables@^1.0.0:
459 + version "1.0.0"
460 + resolved "https://registry.yarnpkg.com/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz#702e632193201e3edf8713635d083d378e510241"
461 + integrity sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==
462 + dependencies:
463 + has "^1.0.3"
464 +
465 +es-to-primitive@^1.2.1:
466 + version "1.2.1"
467 + resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a"
468 + integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==
469 + dependencies:
470 + is-callable "^1.1.4"
471 + is-date-object "^1.0.1"
472 + is-symbol "^1.0.2"
473 +
474 +escape-string-regexp@^4.0.0:
475 + version "4.0.0"
476 + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34"
477 + integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==
478 +
479 +eslint-config-next@12.1.0:
480 + version "12.1.0"
481 + resolved "https://registry.yarnpkg.com/eslint-config-next/-/eslint-config-next-12.1.0.tgz#8ace680dc5207e6ab6c915f3989adec122f582e7"
482 + integrity sha512-tBhuUgoDITcdcM7xFvensi9I5WTI4dnvH4ETGRg1U8ZKpXrZsWQFdOKIDzR3RLP5HR3xXrLviaMM4c3zVoE/pA==
483 + dependencies:
484 + "@next/eslint-plugin-next" "12.1.0"
485 + "@rushstack/eslint-patch" "^1.0.8"
486 + "@typescript-eslint/parser" "^5.0.0"
487 + eslint-import-resolver-node "^0.3.4"
488 + eslint-import-resolver-typescript "^2.4.0"
489 + eslint-plugin-import "^2.25.2"
490 + eslint-plugin-jsx-a11y "^6.5.1"
491 + eslint-plugin-react "^7.27.0"
492 + eslint-plugin-react-hooks "^4.3.0"
493 +
494 +eslint-import-resolver-node@^0.3.4, eslint-import-resolver-node@^0.3.6:
495 + version "0.3.6"
496 + resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz#4048b958395da89668252001dbd9eca6b83bacbd"
497 + integrity sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw==
498 + dependencies:
499 + debug "^3.2.7"
500 + resolve "^1.20.0"
501 +
502 +eslint-import-resolver-typescript@^2.4.0:
503 + version "2.7.1"
504 + resolved "https://registry.yarnpkg.com/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-2.7.1.tgz#a90a4a1c80da8d632df25994c4c5fdcdd02b8751"
505 + integrity sha512-00UbgGwV8bSgUv34igBDbTOtKhqoRMy9bFjNehT40bXg6585PNIct8HhXZ0SybqB9rWtXj9crcku8ndDn/gIqQ==
506 + dependencies:
507 + debug "^4.3.4"
508 + glob "^7.2.0"
509 + is-glob "^4.0.3"
510 + resolve "^1.22.0"
511 + tsconfig-paths "^3.14.1"
512 +
513 +eslint-module-utils@^2.7.3:
514 + version "2.7.3"
515 + resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.7.3.tgz#ad7e3a10552fdd0642e1e55292781bd6e34876ee"
516 + integrity sha512-088JEC7O3lDZM9xGe0RerkOMd0EjFl+Yvd1jPWIkMT5u3H9+HC34mWWPnqPrN13gieT9pBOO+Qt07Nb/6TresQ==
517 + dependencies:
518 + debug "^3.2.7"
519 + find-up "^2.1.0"
520 +
521 +eslint-plugin-import@^2.25.2:
522 + version "2.26.0"
523 + resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.26.0.tgz#f812dc47be4f2b72b478a021605a59fc6fe8b88b"
524 + integrity sha512-hYfi3FXaM8WPLf4S1cikh/r4IxnO6zrhZbEGz2b660EJRbuxgpDS5gkCuYgGWg2xxh2rBuIr4Pvhve/7c31koA==
525 + dependencies:
526 + array-includes "^3.1.4"
527 + array.prototype.flat "^1.2.5"
528 + debug "^2.6.9"
529 + doctrine "^2.1.0"
530 + eslint-import-resolver-node "^0.3.6"
531 + eslint-module-utils "^2.7.3"
532 + has "^1.0.3"
533 + is-core-module "^2.8.1"
534 + is-glob "^4.0.3"
535 + minimatch "^3.1.2"
536 + object.values "^1.1.5"
537 + resolve "^1.22.0"
538 + tsconfig-paths "^3.14.1"
539 +
540 +eslint-plugin-jsx-a11y@^6.5.1:
541 + version "6.5.1"
542 + resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.5.1.tgz#cdbf2df901040ca140b6ec14715c988889c2a6d8"
543 + integrity sha512-sVCFKX9fllURnXT2JwLN5Qgo24Ug5NF6dxhkmxsMEUZhXRcGg+X3e1JbJ84YePQKBl5E0ZjAH5Q4rkdcGY99+g==
544 + dependencies:
545 + "@babel/runtime" "^7.16.3"
546 + aria-query "^4.2.2"
547 + array-includes "^3.1.4"
548 + ast-types-flow "^0.0.7"
549 + axe-core "^4.3.5"
550 + axobject-query "^2.2.0"
551 + damerau-levenshtein "^1.0.7"
552 + emoji-regex "^9.2.2"
553 + has "^1.0.3"
554 + jsx-ast-utils "^3.2.1"
555 + language-tags "^1.0.5"
556 + minimatch "^3.0.4"
557 +
558 +eslint-plugin-react-hooks@^4.3.0:
559 + version "4.6.0"
560 + resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz#4c3e697ad95b77e93f8646aaa1630c1ba607edd3"
561 + integrity sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==
562 +
563 +eslint-plugin-react@^7.27.0:
564 + version "7.30.1"
565 + resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.30.1.tgz#2be4ab23ce09b5949c6631413ba64b2810fd3e22"
566 + integrity sha512-NbEvI9jtqO46yJA3wcRF9Mo0lF9T/jhdHqhCHXiXtD+Zcb98812wvokjWpU7Q4QH5edo6dmqrukxVvWWXHlsUg==
567 + dependencies:
568 + array-includes "^3.1.5"
569 + array.prototype.flatmap "^1.3.0"
570 + doctrine "^2.1.0"
571 + estraverse "^5.3.0"
572 + jsx-ast-utils "^2.4.1 || ^3.0.0"
573 + minimatch "^3.1.2"
574 + object.entries "^1.1.5"
575 + object.fromentries "^2.0.5"
576 + object.hasown "^1.1.1"
577 + object.values "^1.1.5"
578 + prop-types "^15.8.1"
579 + resolve "^2.0.0-next.3"
580 + semver "^6.3.0"
581 + string.prototype.matchall "^4.0.7"
582 +
583 +eslint-scope@^7.1.1:
584 + version "7.1.1"
585 + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.1.1.tgz#fff34894c2f65e5226d3041ac480b4513a163642"
586 + integrity sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==
587 + dependencies:
588 + esrecurse "^4.3.0"
589 + estraverse "^5.2.0"
590 +
591 +eslint-utils@^3.0.0:
592 + version "3.0.0"
593 + resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-3.0.0.tgz#8aebaface7345bb33559db0a1f13a1d2d48c3672"
594 + integrity sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==
595 + dependencies:
596 + eslint-visitor-keys "^2.0.0"
597 +
598 +eslint-visitor-keys@^2.0.0:
599 + version "2.1.0"
600 + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303"
601 + integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==
602 +
603 +eslint-visitor-keys@^3.3.0:
604 + version "3.3.0"
605 + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz#f6480fa6b1f30efe2d1968aa8ac745b862469826"
606 + integrity sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==
607 +
608 +eslint@8.10.0:
609 + version "8.10.0"
610 + resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.10.0.tgz#931be395eb60f900c01658b278e05b6dae47199d"
611 + integrity sha512-tcI1D9lfVec+R4LE1mNDnzoJ/f71Kl/9Cv4nG47jOueCMBrCCKYXr4AUVS7go6mWYGFD4+EoN6+eXSrEbRzXVw==
612 + dependencies:
613 + "@eslint/eslintrc" "^1.2.0"
614 + "@humanwhocodes/config-array" "^0.9.2"
615 + ajv "^6.10.0"
616 + chalk "^4.0.0"
617 + cross-spawn "^7.0.2"
618 + debug "^4.3.2"
619 + doctrine "^3.0.0"
620 + escape-string-regexp "^4.0.0"
621 + eslint-scope "^7.1.1"
622 + eslint-utils "^3.0.0"
623 + eslint-visitor-keys "^3.3.0"
624 + espree "^9.3.1"
625 + esquery "^1.4.0"
626 + esutils "^2.0.2"
627 + fast-deep-equal "^3.1.3"
628 + file-entry-cache "^6.0.1"
629 + functional-red-black-tree "^1.0.1"
630 + glob-parent "^6.0.1"
631 + globals "^13.6.0"
632 + ignore "^5.2.0"
633 + import-fresh "^3.0.0"
634 + imurmurhash "^0.1.4"
635 + is-glob "^4.0.0"
636 + js-yaml "^4.1.0"
637 + json-stable-stringify-without-jsonify "^1.0.1"
638 + levn "^0.4.1"
639 + lodash.merge "^4.6.2"
640 + minimatch "^3.0.4"
641 + natural-compare "^1.4.0"
642 + optionator "^0.9.1"
643 + regexpp "^3.2.0"
644 + strip-ansi "^6.0.1"
645 + strip-json-comments "^3.1.0"
646 + text-table "^0.2.0"
647 + v8-compile-cache "^2.0.3"
648 +
649 +espree@^9.3.1, espree@^9.3.2:
650 + version "9.3.2"
651 + resolved "https://registry.yarnpkg.com/espree/-/espree-9.3.2.tgz#f58f77bd334731182801ced3380a8cc859091596"
652 + integrity sha512-D211tC7ZwouTIuY5x9XnS0E9sWNChB7IYKX/Xp5eQj3nFXhqmiUDB9q27y76oFl8jTg3pXcQx/bpxMfs3CIZbA==
653 + dependencies:
654 + acorn "^8.7.1"
655 + acorn-jsx "^5.3.2"
656 + eslint-visitor-keys "^3.3.0"
657 +
658 +esquery@^1.4.0:
659 + version "1.4.0"
660 + resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.4.0.tgz#2148ffc38b82e8c7057dfed48425b3e61f0f24a5"
661 + integrity sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==
662 + dependencies:
663 + estraverse "^5.1.0"
664 +
665 +esrecurse@^4.3.0:
666 + version "4.3.0"
667 + resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921"
668 + integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==
669 + dependencies:
670 + estraverse "^5.2.0"
671 +
672 +estraverse@^5.1.0, estraverse@^5.2.0, estraverse@^5.3.0:
673 + version "5.3.0"
674 + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123"
675 + integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==
676 +
677 +esutils@^2.0.2:
678 + version "2.0.3"
679 + resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64"
680 + integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==
681 +
682 +fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3:
683 + version "3.1.3"
684 + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525"
685 + integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==
686 +
687 +fast-glob@^3.2.9:
688 + version "3.2.11"
689 + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.11.tgz#a1172ad95ceb8a16e20caa5c5e56480e5129c1d9"
690 + integrity sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==
691 + dependencies:
692 + "@nodelib/fs.stat" "^2.0.2"
693 + "@nodelib/fs.walk" "^1.2.3"
694 + glob-parent "^5.1.2"
695 + merge2 "^1.3.0"
696 + micromatch "^4.0.4"
697 +
698 +fast-json-stable-stringify@^2.0.0:
699 + version "2.1.0"
700 + resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633"
701 + integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==
702 +
703 +fast-levenshtein@^2.0.6:
704 + version "2.0.6"
705 + resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917"
706 + integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==
707 +
708 +fastq@^1.6.0:
709 + version "1.13.0"
710 + resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.13.0.tgz#616760f88a7526bdfc596b7cab8c18938c36b98c"
711 + integrity sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==
712 + dependencies:
713 + reusify "^1.0.4"
714 +
715 +file-entry-cache@^6.0.1:
716 + version "6.0.1"
717 + resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027"
718 + integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==
719 + dependencies:
720 + flat-cache "^3.0.4"
721 +
722 +fill-range@^7.0.1:
723 + version "7.0.1"
724 + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40"
725 + integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==
726 + dependencies:
727 + to-regex-range "^5.0.1"
728 +
729 +find-up@^2.1.0:
730 + version "2.1.0"
731 + resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7"
732 + integrity sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==
733 + dependencies:
734 + locate-path "^2.0.0"
735 +
736 +flat-cache@^3.0.4:
737 + version "3.0.4"
738 + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11"
739 + integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==
740 + dependencies:
741 + flatted "^3.1.0"
742 + rimraf "^3.0.2"
743 +
744 +flatted@^3.1.0:
745 + version "3.2.5"
746 + resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.5.tgz#76c8584f4fc843db64702a6bd04ab7a8bd666da3"
747 + integrity sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg==
748 +
749 +fs.realpath@^1.0.0:
750 + version "1.0.0"
751 + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
752 + integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==
753 +
754 +function-bind@^1.1.1:
755 + version "1.1.1"
756 + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d"
757 + integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==
758 +
759 +function.prototype.name@^1.1.5:
760 + version "1.1.5"
761 + resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.5.tgz#cce0505fe1ffb80503e6f9e46cc64e46a12a9621"
762 + integrity sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==
763 + dependencies:
764 + call-bind "^1.0.2"
765 + define-properties "^1.1.3"
766 + es-abstract "^1.19.0"
767 + functions-have-names "^1.2.2"
768 +
769 +functional-red-black-tree@^1.0.1:
770 + version "1.0.1"
771 + resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327"
772 + integrity sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==
773 +
774 +functions-have-names@^1.2.2:
775 + version "1.2.3"
776 + resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834"
777 + integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==
778 +
779 +get-intrinsic@^1.0.2, get-intrinsic@^1.1.0, get-intrinsic@^1.1.1:
780 + version "1.1.2"
781 + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.2.tgz#336975123e05ad0b7ba41f152ee4aadbea6cf598"
782 + integrity sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA==
783 + dependencies:
784 + function-bind "^1.1.1"
785 + has "^1.0.3"
786 + has-symbols "^1.0.3"
787 +
788 +get-symbol-description@^1.0.0:
789 + version "1.0.0"
790 + resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.0.tgz#7fdb81c900101fbd564dd5f1a30af5aadc1e58d6"
791 + integrity sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==
792 + dependencies:
793 + call-bind "^1.0.2"
794 + get-intrinsic "^1.1.1"
795 +
796 +glob-parent@^5.1.2:
797 + version "5.1.2"
798 + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4"
799 + integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==
800 + dependencies:
801 + is-glob "^4.0.1"
802 +
803 +glob-parent@^6.0.1:
804 + version "6.0.2"
805 + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3"
806 + integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==
807 + dependencies:
808 + is-glob "^4.0.3"
809 +
810 +glob@7.1.7:
811 + version "7.1.7"
812 + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.7.tgz#3b193e9233f01d42d0b3f78294bbeeb418f94a90"
813 + integrity sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==
814 + dependencies:
815 + fs.realpath "^1.0.0"
816 + inflight "^1.0.4"
817 + inherits "2"
818 + minimatch "^3.0.4"
819 + once "^1.3.0"
820 + path-is-absolute "^1.0.0"
821 +
822 +glob@^7.1.3, glob@^7.2.0:
823 + version "7.2.3"
824 + resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b"
825 + integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==
826 + dependencies:
827 + fs.realpath "^1.0.0"
828 + inflight "^1.0.4"
829 + inherits "2"
830 + minimatch "^3.1.1"
831 + once "^1.3.0"
832 + path-is-absolute "^1.0.0"
833 +
834 +globals@^13.15.0, globals@^13.6.0:
835 + version "13.15.0"
836 + resolved "https://registry.yarnpkg.com/globals/-/globals-13.15.0.tgz#38113218c907d2f7e98658af246cef8b77e90bac"
837 + integrity sha512-bpzcOlgDhMG070Av0Vy5Owklpv1I6+j96GhUI7Rh7IzDCKLzboflLrrfqMu8NquDbiR4EOQk7XzJwqVJxicxog==
838 + dependencies:
839 + type-fest "^0.20.2"
840 +
841 +globby@^11.1.0:
842 + version "11.1.0"
843 + resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b"
844 + integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==
845 + dependencies:
846 + array-union "^2.1.0"
847 + dir-glob "^3.0.1"
848 + fast-glob "^3.2.9"
849 + ignore "^5.2.0"
850 + merge2 "^1.4.1"
851 + slash "^3.0.0"
852 +
853 +has-bigints@^1.0.1, has-bigints@^1.0.2:
854 + version "1.0.2"
855 + resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.2.tgz#0871bd3e3d51626f6ca0966668ba35d5602d6eaa"
856 + integrity sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==
857 +
858 +has-flag@^4.0.0:
859 + version "4.0.0"
860 + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b"
861 + integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==
862 +
863 +has-property-descriptors@^1.0.0:
864 + version "1.0.0"
865 + resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz#610708600606d36961ed04c196193b6a607fa861"
866 + integrity sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==
867 + dependencies:
868 + get-intrinsic "^1.1.1"
869 +
870 +has-symbols@^1.0.1, has-symbols@^1.0.2, has-symbols@^1.0.3:
871 + version "1.0.3"
872 + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8"
873 + integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==
874 +
875 +has-tostringtag@^1.0.0:
876 + version "1.0.0"
877 + resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.0.tgz#7e133818a7d394734f941e73c3d3f9291e658b25"
878 + integrity sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==
879 + dependencies:
880 + has-symbols "^1.0.2"
881 +
882 +has@^1.0.3:
883 + version "1.0.3"
884 + resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796"
885 + integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==
886 + dependencies:
887 + function-bind "^1.1.1"
888 +
889 +ignore@^5.2.0:
890 + version "5.2.0"
891 + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.0.tgz#6d3bac8fa7fe0d45d9f9be7bac2fc279577e345a"
892 + integrity sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==
893 +
894 +import-fresh@^3.0.0, import-fresh@^3.2.1:
895 + version "3.3.0"
896 + resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b"
897 + integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==
898 + dependencies:
899 + parent-module "^1.0.0"
900 + resolve-from "^4.0.0"
901 +
902 +imurmurhash@^0.1.4:
903 + version "0.1.4"
904 + resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea"
905 + integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==
906 +
907 +inflight@^1.0.4:
908 + version "1.0.6"
909 + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
910 + integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==
911 + dependencies:
912 + once "^1.3.0"
913 + wrappy "1"
914 +
915 +inherits@2:
916 + version "2.0.4"
917 + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
918 + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
919 +
920 +internal-slot@^1.0.3:
921 + version "1.0.3"
922 + resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.3.tgz#7347e307deeea2faac2ac6205d4bc7d34967f59c"
923 + integrity sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==
924 + dependencies:
925 + get-intrinsic "^1.1.0"
926 + has "^1.0.3"
927 + side-channel "^1.0.4"
928 +
929 +is-bigint@^1.0.1:
930 + version "1.0.4"
931 + resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.4.tgz#08147a1875bc2b32005d41ccd8291dffc6691df3"
932 + integrity sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==
933 + dependencies:
934 + has-bigints "^1.0.1"
935 +
936 +is-boolean-object@^1.1.0:
937 + version "1.1.2"
938 + resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.2.tgz#5c6dc200246dd9321ae4b885a114bb1f75f63719"
939 + integrity sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==
940 + dependencies:
941 + call-bind "^1.0.2"
942 + has-tostringtag "^1.0.0"
943 +
944 +is-callable@^1.1.4, is-callable@^1.2.4:
945 + version "1.2.4"
946 + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.4.tgz#47301d58dd0259407865547853df6d61fe471945"
947 + integrity sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==
948 +
949 +is-core-module@^2.8.1, is-core-module@^2.9.0:
950 + version "2.9.0"
951 + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.9.0.tgz#e1c34429cd51c6dd9e09e0799e396e27b19a9c69"
952 + integrity sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==
953 + dependencies:
954 + has "^1.0.3"
955 +
956 +is-date-object@^1.0.1:
957 + version "1.0.5"
958 + resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.5.tgz#0841d5536e724c25597bf6ea62e1bd38298df31f"
959 + integrity sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==
960 + dependencies:
961 + has-tostringtag "^1.0.0"
962 +
963 +is-extglob@^2.1.1:
964 + version "2.1.1"
965 + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2"
966 + integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==
967 +
968 +is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3:
969 + version "4.0.3"
970 + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084"
971 + integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==
972 + dependencies:
973 + is-extglob "^2.1.1"
974 +
975 +is-negative-zero@^2.0.2:
976 + version "2.0.2"
977 + resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.2.tgz#7bf6f03a28003b8b3965de3ac26f664d765f3150"
978 + integrity sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==
979 +
980 +is-number-object@^1.0.4:
981 + version "1.0.7"
982 + resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.7.tgz#59d50ada4c45251784e9904f5246c742f07a42fc"
983 + integrity sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==
984 + dependencies:
985 + has-tostringtag "^1.0.0"
986 +
987 +is-number@^7.0.0:
988 + version "7.0.0"
989 + resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b"
990 + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==
991 +
992 +is-regex@^1.1.4:
993 + version "1.1.4"
994 + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958"
995 + integrity sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==
996 + dependencies:
997 + call-bind "^1.0.2"
998 + has-tostringtag "^1.0.0"
999 +
1000 +is-shared-array-buffer@^1.0.2:
1001 + version "1.0.2"
1002 + resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz#8f259c573b60b6a32d4058a1a07430c0a7344c79"
1003 + integrity sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==
1004 + dependencies:
1005 + call-bind "^1.0.2"
1006 +
1007 +is-string@^1.0.5, is-string@^1.0.7:
1008 + version "1.0.7"
1009 + resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.7.tgz#0dd12bf2006f255bb58f695110eff7491eebc0fd"
1010 + integrity sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==
1011 + dependencies:
1012 + has-tostringtag "^1.0.0"
1013 +
1014 +is-symbol@^1.0.2, is-symbol@^1.0.3:
1015 + version "1.0.4"
1016 + resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.4.tgz#a6dac93b635b063ca6872236de88910a57af139c"
1017 + integrity sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==
1018 + dependencies:
1019 + has-symbols "^1.0.2"
1020 +
1021 +is-weakref@^1.0.2:
1022 + version "1.0.2"
1023 + resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.0.2.tgz#9529f383a9338205e89765e0392efc2f100f06f2"
1024 + integrity sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==
1025 + dependencies:
1026 + call-bind "^1.0.2"
1027 +
1028 +isexe@^2.0.0:
1029 + version "2.0.0"
1030 + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10"
1031 + integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==
1032 +
1033 +"js-tokens@^3.0.0 || ^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 +js-yaml@^4.1.0:
1039 + version "4.1.0"
1040 + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602"
1041 + integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==
1042 + dependencies:
1043 + argparse "^2.0.1"
1044 +
1045 +json-schema-traverse@^0.4.1:
1046 + version "0.4.1"
1047 + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660"
1048 + integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==
1049 +
1050 +json-stable-stringify-without-jsonify@^1.0.1:
1051 + version "1.0.1"
1052 + resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651"
1053 + integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==
1054 +
1055 +json5@^1.0.1:
1056 + version "1.0.1"
1057 + resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe"
1058 + integrity sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==
1059 + dependencies:
1060 + minimist "^1.2.0"
1061 +
1062 +"jsx-ast-utils@^2.4.1 || ^3.0.0", jsx-ast-utils@^3.2.1:
1063 + version "3.3.1"
1064 + resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-3.3.1.tgz#a3e0f1cb7e230954eab4dcbce9f6288a78f8ba44"
1065 + integrity sha512-pxrjmNpeRw5wwVeWyEAk7QJu2GnBO3uzPFmHCKJJFPKK2Cy0cWL23krGtLdnMmbIi6/FjlrQpPyfQI19ByPOhQ==
1066 + dependencies:
1067 + array-includes "^3.1.5"
1068 + object.assign "^4.1.2"
1069 +
1070 +language-subtag-registry@~0.3.2:
1071 + version "0.3.21"
1072 + resolved "https://registry.yarnpkg.com/language-subtag-registry/-/language-subtag-registry-0.3.21.tgz#04ac218bea46f04cb039084602c6da9e788dd45a"
1073 + integrity sha512-L0IqwlIXjilBVVYKFT37X9Ih11Um5NEl9cbJIuU/SwP/zEEAbBPOnEeeuxVMf45ydWQRDQN3Nqc96OgbH1K+Pg==
1074 +
1075 +language-tags@^1.0.5:
1076 + version "1.0.5"
1077 + resolved "https://registry.yarnpkg.com/language-tags/-/language-tags-1.0.5.tgz#d321dbc4da30ba8bf3024e040fa5c14661f9193a"
1078 + integrity sha512-qJhlO9cGXi6hBGKoxEG/sKZDAHD5Hnu9Hs4WbOY3pCWXDhw0N8x1NenNzm2EnNLkLkk7J2SdxAkDSbb6ftT+UQ==
1079 + dependencies:
1080 + language-subtag-registry "~0.3.2"
1081 +
1082 +levn@^0.4.1:
1083 + version "0.4.1"
1084 + resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade"
1085 + integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==
1086 + dependencies:
1087 + prelude-ls "^1.2.1"
1088 + type-check "~0.4.0"
1089 +
1090 +locate-path@^2.0.0:
1091 + version "2.0.0"
1092 + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e"
1093 + integrity sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==
1094 + dependencies:
1095 + p-locate "^2.0.0"
1096 + path-exists "^3.0.0"
1097 +
1098 +lodash.merge@^4.6.2:
1099 + version "4.6.2"
1100 + resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a"
1101 + integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==
1102 +
1103 +loose-envify@^1.1.0, loose-envify@^1.4.0:
1104 + version "1.4.0"
1105 + resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf"
1106 + integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==
1107 + dependencies:
1108 + js-tokens "^3.0.0 || ^4.0.0"
1109 +
1110 +lru-cache@^6.0.0:
1111 + version "6.0.0"
1112 + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94"
1113 + integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==
1114 + dependencies:
1115 + yallist "^4.0.0"
1116 +
1117 +merge2@^1.3.0, merge2@^1.4.1:
1118 + version "1.4.1"
1119 + resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae"
1120 + integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==
1121 +
1122 +micromatch@^4.0.4:
1123 + version "4.0.5"
1124 + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6"
1125 + integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==
1126 + dependencies:
1127 + braces "^3.0.2"
1128 + picomatch "^2.3.1"
1129 +
1130 +minimatch@^3.0.4, minimatch@^3.1.1, minimatch@^3.1.2:
1131 + version "3.1.2"
1132 + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b"
1133 + integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==
1134 + dependencies:
1135 + brace-expansion "^1.1.7"
1136 +
1137 +minimist@^1.2.0, minimist@^1.2.6:
1138 + version "1.2.6"
1139 + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.6.tgz#8637a5b759ea0d6e98702cfb3a9283323c93af44"
1140 + integrity sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==
1141 +
1142 +ms@2.0.0:
1143 + version "2.0.0"
1144 + resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8"
1145 + integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==
1146 +
1147 +ms@2.1.2:
1148 + version "2.1.2"
1149 + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009"
1150 + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==
1151 +
1152 +ms@^2.1.1:
1153 + version "2.1.3"
1154 + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2"
1155 + integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==
1156 +
1157 +nanoid@^3.1.30:
1158 + version "3.3.4"
1159 + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.4.tgz#730b67e3cd09e2deacf03c027c81c9d9dbc5e8ab"
1160 + integrity sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==
1161 +
1162 +natural-compare@^1.4.0:
1163 + version "1.4.0"
1164 + resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7"
1165 + integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==
1166 +
1167 +next@12.1.0:
1168 + version "12.1.0"
1169 + resolved "https://registry.yarnpkg.com/next/-/next-12.1.0.tgz#c33d753b644be92fc58e06e5a214f143da61dd5d"
1170 + integrity sha512-s885kWvnIlxsUFHq9UGyIyLiuD0G3BUC/xrH0CEnH5lHEWkwQcHOORgbDF0hbrW9vr/7am4ETfX4A7M6DjrE7Q==
1171 + dependencies:
1172 + "@next/env" "12.1.0"
1173 + caniuse-lite "^1.0.30001283"
1174 + postcss "8.4.5"
1175 + styled-jsx "5.0.0"
1176 + use-subscription "1.5.1"
1177 + optionalDependencies:
1178 + "@next/swc-android-arm64" "12.1.0"
1179 + "@next/swc-darwin-arm64" "12.1.0"
1180 + "@next/swc-darwin-x64" "12.1.0"
1181 + "@next/swc-linux-arm-gnueabihf" "12.1.0"
1182 + "@next/swc-linux-arm64-gnu" "12.1.0"
1183 + "@next/swc-linux-arm64-musl" "12.1.0"
1184 + "@next/swc-linux-x64-gnu" "12.1.0"
1185 + "@next/swc-linux-x64-musl" "12.1.0"
1186 + "@next/swc-win32-arm64-msvc" "12.1.0"
1187 + "@next/swc-win32-ia32-msvc" "12.1.0"
1188 + "@next/swc-win32-x64-msvc" "12.1.0"
1189 +
1190 +object-assign@^4.1.1:
1191 + version "4.1.1"
1192 + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
1193 + integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==
1194 +
1195 +object-inspect@^1.12.0, object-inspect@^1.9.0:
1196 + version "1.12.2"
1197 + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.2.tgz#c0641f26394532f28ab8d796ab954e43c009a8ea"
1198 + integrity sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==
1199 +
1200 +object-keys@^1.1.1:
1201 + version "1.1.1"
1202 + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e"
1203 + integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==
1204 +
1205 +object.assign@^4.1.2:
1206 + version "4.1.2"
1207 + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.2.tgz#0ed54a342eceb37b38ff76eb831a0e788cb63940"
1208 + integrity sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==
1209 + dependencies:
1210 + call-bind "^1.0.0"
1211 + define-properties "^1.1.3"
1212 + has-symbols "^1.0.1"
1213 + object-keys "^1.1.1"
1214 +
1215 +object.entries@^1.1.5:
1216 + version "1.1.5"
1217 + resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.5.tgz#e1acdd17c4de2cd96d5a08487cfb9db84d881861"
1218 + integrity sha512-TyxmjUoZggd4OrrU1W66FMDG6CuqJxsFvymeyXI51+vQLN67zYfZseptRge703kKQdo4uccgAKebXFcRCzk4+g==
1219 + dependencies:
1220 + call-bind "^1.0.2"
1221 + define-properties "^1.1.3"
1222 + es-abstract "^1.19.1"
1223 +
1224 +object.fromentries@^2.0.5:
1225 + version "2.0.5"
1226 + resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.5.tgz#7b37b205109c21e741e605727fe8b0ad5fa08251"
1227 + integrity sha512-CAyG5mWQRRiBU57Re4FKoTBjXfDoNwdFVH2Y1tS9PqCsfUTymAohOkEMSG3aRNKmv4lV3O7p1et7c187q6bynw==
1228 + dependencies:
1229 + call-bind "^1.0.2"
1230 + define-properties "^1.1.3"
1231 + es-abstract "^1.19.1"
1232 +
1233 +object.hasown@^1.1.1:
1234 + version "1.1.1"
1235 + resolved "https://registry.yarnpkg.com/object.hasown/-/object.hasown-1.1.1.tgz#ad1eecc60d03f49460600430d97f23882cf592a3"
1236 + integrity sha512-LYLe4tivNQzq4JdaWW6WO3HMZZJWzkkH8fnI6EebWl0VZth2wL2Lovm74ep2/gZzlaTdV62JZHEqHQ2yVn8Q/A==
1237 + dependencies:
1238 + define-properties "^1.1.4"
1239 + es-abstract "^1.19.5"
1240 +
1241 +object.values@^1.1.5:
1242 + version "1.1.5"
1243 + resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.5.tgz#959f63e3ce9ef108720333082131e4a459b716ac"
1244 + integrity sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg==
1245 + dependencies:
1246 + call-bind "^1.0.2"
1247 + define-properties "^1.1.3"
1248 + es-abstract "^1.19.1"
1249 +
1250 +once@^1.3.0:
1251 + version "1.4.0"
1252 + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
1253 + integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==
1254 + dependencies:
1255 + wrappy "1"
1256 +
1257 +optionator@^0.9.1:
1258 + version "0.9.1"
1259 + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499"
1260 + integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==
1261 + dependencies:
1262 + deep-is "^0.1.3"
1263 + fast-levenshtein "^2.0.6"
1264 + levn "^0.4.1"
1265 + prelude-ls "^1.2.1"
1266 + type-check "^0.4.0"
1267 + word-wrap "^1.2.3"
1268 +
1269 +p-limit@^1.1.0:
1270 + version "1.3.0"
1271 + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8"
1272 + integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==
1273 + dependencies:
1274 + p-try "^1.0.0"
1275 +
1276 +p-locate@^2.0.0:
1277 + version "2.0.0"
1278 + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43"
1279 + integrity sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==
1280 + dependencies:
1281 + p-limit "^1.1.0"
1282 +
1283 +p-try@^1.0.0:
1284 + version "1.0.0"
1285 + resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3"
1286 + integrity sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==
1287 +
1288 +parent-module@^1.0.0:
1289 + version "1.0.1"
1290 + resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2"
1291 + integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==
1292 + dependencies:
1293 + callsites "^3.0.0"
1294 +
1295 +path-exists@^3.0.0:
1296 + version "3.0.0"
1297 + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515"
1298 + integrity sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==
1299 +
1300 +path-is-absolute@^1.0.0:
1301 + version "1.0.1"
1302 + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
1303 + integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==
1304 +
1305 +path-key@^3.1.0:
1306 + version "3.1.1"
1307 + resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375"
1308 + integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==
1309 +
1310 +path-parse@^1.0.7:
1311 + version "1.0.7"
1312 + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735"
1313 + integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==
1314 +
1315 +path-type@^4.0.0:
1316 + version "4.0.0"
1317 + resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b"
1318 + integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==
1319 +
1320 +picocolors@^1.0.0:
1321 + version "1.0.0"
1322 + resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c"
1323 + integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==
1324 +
1325 +picomatch@^2.3.1:
1326 + version "2.3.1"
1327 + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42"
1328 + integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==
1329 +
1330 +postcss@8.4.5:
1331 + version "8.4.5"
1332 + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.5.tgz#bae665764dfd4c6fcc24dc0fdf7e7aa00cc77f95"
1333 + integrity sha512-jBDboWM8qpaqwkMwItqTQTiFikhs/67OYVvblFFTM7MrZjt6yMKd6r2kgXizEbTTljacm4NldIlZnhbjr84QYg==
1334 + dependencies:
1335 + nanoid "^3.1.30"
1336 + picocolors "^1.0.0"
1337 + source-map-js "^1.0.1"
1338 +
1339 +prelude-ls@^1.2.1:
1340 + version "1.2.1"
1341 + resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396"
1342 + integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==
1343 +
1344 +prop-types@^15.8.1:
1345 + version "15.8.1"
1346 + resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.8.1.tgz#67d87bf1a694f48435cf332c24af10214a3140b5"
1347 + integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==
1348 + dependencies:
1349 + loose-envify "^1.4.0"
1350 + object-assign "^4.1.1"
1351 + react-is "^16.13.1"
1352 +
1353 +punycode@^2.1.0:
1354 + version "2.1.1"
1355 + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec"
1356 + integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==
1357 +
1358 +queue-microtask@^1.2.2:
1359 + version "1.2.3"
1360 + resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243"
1361 + integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==
1362 +
1363 +react-dom@17.0.2:
1364 + version "17.0.2"
1365 + resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-17.0.2.tgz#ecffb6845e3ad8dbfcdc498f0d0a939736502c23"
1366 + integrity sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA==
1367 + dependencies:
1368 + loose-envify "^1.1.0"
1369 + object-assign "^4.1.1"
1370 + scheduler "^0.20.2"
1371 +
1372 +react-is@^16.13.1:
1373 + version "16.13.1"
1374 + resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4"
1375 + integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==
1376 +
1377 +react@17.0.2:
1378 + version "17.0.2"
1379 + resolved "https://registry.yarnpkg.com/react/-/react-17.0.2.tgz#d0b5cc516d29eb3eee383f75b62864cfb6800037"
1380 + integrity sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA==
1381 + dependencies:
1382 + loose-envify "^1.1.0"
1383 + object-assign "^4.1.1"
1384 +
1385 +regenerator-runtime@^0.13.4:
1386 + version "0.13.9"
1387 + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz#8925742a98ffd90814988d7566ad30ca3b263b52"
1388 + integrity sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==
1389 +
1390 +regexp.prototype.flags@^1.4.1, regexp.prototype.flags@^1.4.3:
1391 + version "1.4.3"
1392 + resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz#87cab30f80f66660181a3bb7bf5981a872b367ac"
1393 + integrity sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==
1394 + dependencies:
1395 + call-bind "^1.0.2"
1396 + define-properties "^1.1.3"
1397 + functions-have-names "^1.2.2"
1398 +
1399 +regexpp@^3.2.0:
1400 + version "3.2.0"
1401 + resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2"
1402 + integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==
1403 +
1404 +resolve-from@^4.0.0:
1405 + version "4.0.0"
1406 + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6"
1407 + integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==
1408 +
1409 +resolve@^1.20.0, resolve@^1.22.0:
1410 + version "1.22.1"
1411 + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.1.tgz#27cb2ebb53f91abb49470a928bba7558066ac177"
1412 + integrity sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==
1413 + dependencies:
1414 + is-core-module "^2.9.0"
1415 + path-parse "^1.0.7"
1416 + supports-preserve-symlinks-flag "^1.0.0"
1417 +
1418 +resolve@^2.0.0-next.3:
1419 + version "2.0.0-next.4"
1420 + resolved "https://registry.yarnpkg.com/resolve/-/resolve-2.0.0-next.4.tgz#3d37a113d6429f496ec4752d2a2e58efb1fd4660"
1421 + integrity sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ==
1422 + dependencies:
1423 + is-core-module "^2.9.0"
1424 + path-parse "^1.0.7"
1425 + supports-preserve-symlinks-flag "^1.0.0"
1426 +
1427 +reusify@^1.0.4:
1428 + version "1.0.4"
1429 + resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76"
1430 + integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==
1431 +
1432 +rimraf@^3.0.2:
1433 + version "3.0.2"
1434 + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a"
1435 + integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==
1436 + dependencies:
1437 + glob "^7.1.3"
1438 +
1439 +run-parallel@^1.1.9:
1440 + version "1.2.0"
1441 + resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee"
1442 + integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==
1443 + dependencies:
1444 + queue-microtask "^1.2.2"
1445 +
1446 +scheduler@^0.20.2:
1447 + version "0.20.2"
1448 + resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.20.2.tgz#4baee39436e34aa93b4874bddcbf0fe8b8b50e91"
1449 + integrity sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ==
1450 + dependencies:
1451 + loose-envify "^1.1.0"
1452 + object-assign "^4.1.1"
1453 +
1454 +semver@^6.3.0:
1455 + version "6.3.0"
1456 + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d"
1457 + integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==
1458 +
1459 +semver@^7.3.7:
1460 + version "7.3.7"
1461 + resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.7.tgz#12c5b649afdbf9049707796e22a4028814ce523f"
1462 + integrity sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==
1463 + dependencies:
1464 + lru-cache "^6.0.0"
1465 +
1466 +shebang-command@^2.0.0:
1467 + version "2.0.0"
1468 + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea"
1469 + integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==
1470 + dependencies:
1471 + shebang-regex "^3.0.0"
1472 +
1473 +shebang-regex@^3.0.0:
1474 + version "3.0.0"
1475 + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172"
1476 + integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==
1477 +
1478 +side-channel@^1.0.4:
1479 + version "1.0.4"
1480 + resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf"
1481 + integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==
1482 + dependencies:
1483 + call-bind "^1.0.0"
1484 + get-intrinsic "^1.0.2"
1485 + object-inspect "^1.9.0"
1486 +
1487 +slash@^3.0.0:
1488 + version "3.0.0"
1489 + resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634"
1490 + integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==
1491 +
1492 +source-map-js@^1.0.1:
1493 + version "1.0.2"
1494 + resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c"
1495 + integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==
1496 +
1497 +string.prototype.matchall@^4.0.7:
1498 + version "4.0.7"
1499 + resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.7.tgz#8e6ecb0d8a1fb1fda470d81acecb2dba057a481d"
1500 + integrity sha512-f48okCX7JiwVi1NXCVWcFnZgADDC/n2vePlQ/KUCNqCikLLilQvwjMO8+BHVKvgzH0JB0J9LEPgxOGT02RoETg==
1501 + dependencies:
1502 + call-bind "^1.0.2"
1503 + define-properties "^1.1.3"
1504 + es-abstract "^1.19.1"
1505 + get-intrinsic "^1.1.1"
1506 + has-symbols "^1.0.3"
1507 + internal-slot "^1.0.3"
1508 + regexp.prototype.flags "^1.4.1"
1509 + side-channel "^1.0.4"
1510 +
1511 +string.prototype.trimend@^1.0.5:
1512 + version "1.0.5"
1513 + resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.5.tgz#914a65baaab25fbdd4ee291ca7dde57e869cb8d0"
1514 + integrity sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog==
1515 + dependencies:
1516 + call-bind "^1.0.2"
1517 + define-properties "^1.1.4"
1518 + es-abstract "^1.19.5"
1519 +
1520 +string.prototype.trimstart@^1.0.5:
1521 + version "1.0.5"
1522 + resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.5.tgz#5466d93ba58cfa2134839f81d7f42437e8c01fef"
1523 + integrity sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg==
1524 + dependencies:
1525 + call-bind "^1.0.2"
1526 + define-properties "^1.1.4"
1527 + es-abstract "^1.19.5"
1528 +
1529 +strip-ansi@^6.0.1:
1530 + version "6.0.1"
1531 + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9"
1532 + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==
1533 + dependencies:
1534 + ansi-regex "^5.0.1"
1535 +
1536 +strip-bom@^3.0.0:
1537 + version "3.0.0"
1538 + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3"
1539 + integrity sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==
1540 +
1541 +strip-json-comments@^3.1.0, strip-json-comments@^3.1.1:
1542 + version "3.1.1"
1543 + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006"
1544 + integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==
1545 +
1546 +styled-jsx@5.0.0:
1547 + version "5.0.0"
1548 + resolved "https://registry.yarnpkg.com/styled-jsx/-/styled-jsx-5.0.0.tgz#816b4b92e07b1786c6b7111821750e0ba4d26e77"
1549 + integrity sha512-qUqsWoBquEdERe10EW8vLp3jT25s/ssG1/qX5gZ4wu15OZpmSMFI2v+fWlRhLfykA5rFtlJ1ME8A8pm/peV4WA==
1550 +
1551 +supports-color@^7.1.0:
1552 + version "7.2.0"
1553 + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da"
1554 + integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==
1555 + dependencies:
1556 + has-flag "^4.0.0"
1557 +
1558 +supports-preserve-symlinks-flag@^1.0.0:
1559 + version "1.0.0"
1560 + resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09"
1561 + integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==
1562 +
1563 +text-table@^0.2.0:
1564 + version "0.2.0"
1565 + resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4"
1566 + integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==
1567 +
1568 +to-regex-range@^5.0.1:
1569 + version "5.0.1"
1570 + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4"
1571 + integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==
1572 + dependencies:
1573 + is-number "^7.0.0"
1574 +
1575 +tsconfig-paths@^3.14.1:
1576 + version "3.14.1"
1577 + resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz#ba0734599e8ea36c862798e920bcf163277b137a"
1578 + integrity sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ==
1579 + dependencies:
1580 + "@types/json5" "^0.0.29"
1581 + json5 "^1.0.1"
1582 + minimist "^1.2.6"
1583 + strip-bom "^3.0.0"
1584 +
1585 +tslib@^1.8.1:
1586 + version "1.14.1"
1587 + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00"
1588 + integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==
1589 +
1590 +tsutils@^3.21.0:
1591 + version "3.21.0"
1592 + resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623"
1593 + integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==
1594 + dependencies:
1595 + tslib "^1.8.1"
1596 +
1597 +type-check@^0.4.0, type-check@~0.4.0:
1598 + version "0.4.0"
1599 + resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1"
1600 + integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==
1601 + dependencies:
1602 + prelude-ls "^1.2.1"
1603 +
1604 +type-fest@^0.20.2:
1605 + version "0.20.2"
1606 + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4"
1607 + integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==
1608 +
1609 +unbox-primitive@^1.0.2:
1610 + version "1.0.2"
1611 + resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.2.tgz#29032021057d5e6cdbd08c5129c226dff8ed6f9e"
1612 + integrity sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==
1613 + dependencies:
1614 + call-bind "^1.0.2"
1615 + has-bigints "^1.0.2"
1616 + has-symbols "^1.0.3"
1617 + which-boxed-primitive "^1.0.2"
1618 +
1619 +uri-js@^4.2.2:
1620 + version "4.4.1"
1621 + resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e"
1622 + integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==
1623 + dependencies:
1624 + punycode "^2.1.0"
1625 +
1626 +use-subscription@1.5.1:
1627 + version "1.5.1"
1628 + resolved "https://registry.yarnpkg.com/use-subscription/-/use-subscription-1.5.1.tgz#73501107f02fad84c6dd57965beb0b75c68c42d1"
1629 + integrity sha512-Xv2a1P/yReAjAbhylMfFplFKj9GssgTwN7RlcTxBujFQcloStWNDQdc4g4NRWH9xS4i/FDk04vQBptAXoF3VcA==
1630 + dependencies:
1631 + object-assign "^4.1.1"
1632 +
1633 +v8-compile-cache@^2.0.3:
1634 + version "2.3.0"
1635 + resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz#2de19618c66dc247dcfb6f99338035d8245a2cee"
1636 + integrity sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==
1637 +
1638 +which-boxed-primitive@^1.0.2:
1639 + version "1.0.2"
1640 + resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6"
1641 + integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==
1642 + dependencies:
1643 + is-bigint "^1.0.1"
1644 + is-boolean-object "^1.1.0"
1645 + is-number-object "^1.0.4"
1646 + is-string "^1.0.5"
1647 + is-symbol "^1.0.3"
1648 +
1649 +which@^2.0.1:
1650 + version "2.0.2"
1651 + resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1"
1652 + integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==
1653 + dependencies:
1654 + isexe "^2.0.0"
1655 +
1656 +word-wrap@^1.2.3:
1657 + version "1.2.3"
1658 + resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c"
1659 + integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==
1660 +
1661 +wrappy@1:
1662 + version "1.0.2"
1663 + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
1664 + integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==
1665 +
1666 +yallist@^4.0.0:
1667 + version "4.0.0"
1668 + resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72"
1669 + integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==
compiler/forget/packages/demo-todolist-playground/.babelrc.json new
+3
@@ -0,0 +1,3 @@
1 +{
2 + "plugins": ["../../"]
3 +}
compiler/forget/packages/demo-todolist-playground/.env new
+1
@@ -0,0 +1 @@
1 + SKIP_PREFLIGHT_CHECK=true
compiler/forget/packages/demo-todolist-playground/.gitignore new
+21
@@ -0,0 +1,21 @@
1 +# See https://help.github.com/ignore-files/ for more about ignoring files.
2 +
3 +# dependencies
4 +/node_modules
5 +
6 +# testing
7 +/coverage
8 +
9 +# production
10 +/build
11 +
12 +# misc
13 +.DS_Store
14 +.env.local
15 +.env.development.local
16 +.env.test.local
17 +.env.production.local
18 +
19 +npm-debug.log*
20 +yarn-debug.log*
21 +yarn-error.log*
compiler/forget/packages/demo-todolist-playground/README.md new
+30
@@ -0,0 +1,30 @@
1 +# React Forget Demo - Todo List Playground
2 +
3 +This is a playground that compare different version of Todolist implementation.
4 +
5 +## Get Started
6 +
7 +This is a Create-React-App project.
8 +
9 +## Structure
10 +
11 +- `forget` - a CLI driver to call the compiler from `../`
12 +
13 +- `index.js` - the entry point of demo
14 +
15 +- `source` - source dir
16 + - `*.js` - unmemoized code
17 + - `*.memo.js` - manually memoized code, will be ignored by `forget`
18 + - `*.half.memo.js` - partially memoized code, will also be ignored by `forget`
19 +
20 +- `forget` - output dir
21 +
22 +### Compile
23 +
24 +```
25 +# npm
26 +npm run forget
27 +
28 +# yarn
29 +yarn forget
30 +```
compiler/forget/packages/demo-todolist-playground/forget new
+58
@@ -0,0 +1,58 @@
1 +#!/bin/bash
2 +
3 +#############################################################
4 +#
5 +# Forget Shell Driver
6 +#
7 +# Usage:
8 +# $ forget <src> <dist>
9 +#
10 +#############################################################
11 +
12 +
13 +DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
14 +
15 +function cleanup() {
16 + for file in "$1"/*
17 + do
18 + file=$file;
19 + fullname="$(basename $file)"
20 + name="${fullname%*.}"
21 +
22 + if [ "$name" != "useMemoCache.js" ]; then
23 + echo "[Forget] cleanup: ${file}"
24 + rm $file
25 + fi
26 + done
27 +}
28 +
29 +function traverse() {
30 + for file in "$1"/*
31 + do
32 + dir="$(dirname $file)"
33 + fullname="$(basename $file)"
34 + ext="${fullname##*.}"
35 + name="${fullname%.*}"
36 + maybeExt="${name##*.}"
37 +
38 + # echo "dir=$dir"
39 + # echo "file=$file"
40 + # echo "fullname=$fullname"
41 + # echo "name=$name"
42 + # echo "ext=$ext"
43 + # echo "maybeExt=$maybeExt"
44 +
45 + source=$file;
46 + output="${2}/${fullname}"
47 +
48 + if [ "$maybeExt" != "memo" ]; then
49 + echo "[Forget] compile: ${source} -> ${output}"
50 + npx babel ${source} --out-file ${output};
51 + before=$(cat ${output})
52 + echo -e "import { useMemoCache } from \"./useMemoCache\";\n${before}" > $output
53 + fi
54 + done
55 +}
56 +
57 +cleanup "$2"
58 +traverse "$1" "$2"
compiler/forget/packages/demo-todolist-playground/package.json new
+32
@@ -0,0 +1,32 @@
1 +{
2 + "name": "react-doc-todo",
3 + "main": "src/index.js",
4 + "dependencies": {
5 + "react": "^17.0.0",
6 + "react-dom": "^17.0.0",
7 + "react-scripts": "^4.0.0"
8 + },
9 + "version": "0.0.0",
10 + "devDependencies": {
11 + "@babel/cli": "^7.15.7",
12 + "@babel/core": "^7.15.5",
13 + "@babel/runtime": "7.13.8",
14 + "babel-preset-react-app": "^10.0.0"
15 + },
16 + "scripts": {
17 + "start": "react-scripts start",
18 + "build": "react-scripts build",
19 + "test": "react-scripts test --env=jsdom",
20 + "eject": "react-scripts eject",
21 + "forget": "./forget src/source src/forget"
22 + },
23 + "prettier": {
24 + "arrowParens": "avoid"
25 + },
26 + "browserslist": [
27 + ">0.2%",
28 + "not dead",
29 + "not ie <= 11",
30 + "not op_mini all"
31 + ]
32 +}
compiler/forget/packages/demo-todolist-playground/public/favicon.ico
Binary files /dev/null and b/compiler/forget/packages/demo-todolist-playground/public/favicon.ico differ
compiler/forget/packages/demo-todolist-playground/public/index.html new
+38
@@ -0,0 +1,38 @@
1 +<!doctype html>
2 +<html lang="en">
3 +<head>
4 + <meta charset="utf-8">
5 + <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
6 + <meta name="theme-color" content="#000000">
7 + <!--
8 + manifest.json provides metadata used when your web app is added to the
9 + homescreen on Android. See https://developers.google.com/web/fundamentals/engage-and-retain/web-app-manifest/
10 + -->
11 + <link rel="manifest" href="%PUBLIC_URL%/manifest.json">
12 + <link rel="shortcut icon" href="%PUBLIC_URL%/favicon.ico">
13 + <!--
14 + Notice the use of %PUBLIC_URL% in the tags above.
15 + It will be replaced with the URL of the `public` folder during the build.
16 + Only files inside the `public` folder can be referenced from the HTML.
17 +
18 + Unlike "/favicon.ico" or "favicon.ico", "%PUBLIC_URL%/favicon.ico" will
19 + work correctly both with client-side routing and a non-root public URL.
20 + Learn how to configure a non-root public URL by running `npm run build`.
21 + -->
22 + <title>React App</title>
23 +
24 +</head>
25 +<body>
26 + <div id="root"></div>
27 + <!--
28 + This HTML file is a template.
29 + If you open it directly in the browser, you will see an empty page.
30 +
31 + You can add webfonts, meta tags, or analytics to this file.
32 + The build step will place the bundled scripts into the <body> tag.
33 +
34 + To begin the development, run `npm start` or `yarn start`.
35 + To create a production bundle, use `npm run build` or `yarn build`.
36 + -->
37 +</body>
38 +</html>
compiler/forget/packages/demo-todolist-playground/public/manifest.json new
+15
@@ -0,0 +1,15 @@
1 +{
2 + "short_name": "React App",
3 + "name": "Create React App Sample",
4 + "icons": [
5 + {
6 + "src": "favicon.ico",
7 + "sizes": "192x192",
8 + "type": "image/png"
9 + }
10 + ],
11 + "start_url": "./index.html",
12 + "display": "standalone",
13 + "theme_color": "#000000",
14 + "background_color": "#ffffff"
15 +}
compiler/forget/packages/demo-todolist-playground/settings.json
compiler/forget/packages/demo-todolist-playground/src/Components/ColorPicker.js new
+12
@@ -0,0 +1,12 @@
1 +export default function ColorPicker({ value, onChange }) {
2 + return (
3 + <input
4 + className="ColorPicker"
5 + type="color"
6 + id="head"
7 + name="head"
8 + value={value}
9 + onChange={onChange}
10 + />
11 + );
12 +}
compiler/forget/packages/demo-todolist-playground/src/Components/CountBadge.js new
+17
@@ -0,0 +1,17 @@
1 +import { forwardRef } from "react";
2 +
3 +// Capped to 3 digits
4 +const CountBadge = forwardRef(
5 + ({ count = 0, type = "danger", rounded = false }, ref) => {
6 + return (
7 + <span
8 + ref={ref}
9 + className={`badge ${rounded && "rounded-pill"} badge-${type}`}
10 + >
11 + {count > 999 ? 999 : count}
12 + </span>
13 + );
14 + }
15 +);
16 +
17 +export default CountBadge;
compiler/forget/packages/demo-todolist-playground/src/Components/Select.js new
+22
@@ -0,0 +1,22 @@
1 +export default function Select({ value, options, onChange }) {
2 + return (
3 + <div className="Select">
4 + {options.map(o => {
5 + if (value === o.value) {
6 + return (
7 + <button key={o.value} className="selected">
8 + {" "}
9 + {o.label}{" "}
10 + </button>
11 + );
12 + } else {
13 + return (
14 + <button key={o.value} onClick={() => onChange(o.value)}>
15 + {o.label}
16 + </button>
17 + );
18 + }
19 + })}
20 + </div>
21 + );
22 +}
compiler/forget/packages/demo-todolist-playground/src/createServiceWorker.js new
+52
@@ -0,0 +1,52 @@
1 +// In production, we register a service worker to serve assets from local cache.
2 +
3 +// This lets the app load faster on subsequent visits in production, and gives
4 +// it offline capabilities. However, it also means that developers (and users)
5 +// will only see deployed updates on the "N+1" visit to a page, since previously
6 +// cached resources are updated in the background.
7 +
8 +// To learn more about the benefits of this model, read https://goo.gl/KwvDNy.
9 +// This link also includes instructions on opting out of this behavior.
10 +
11 +export default function register() {
12 + if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {
13 + window.addEventListener('load', () => {
14 + const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;
15 + navigator.serviceWorker
16 + .register(swUrl)
17 + .then(registration => {
18 + // eslint-disable-next-line no-param-reassign
19 + registration.onupdatefound = () => {
20 + const installingWorker = registration.installing;
21 + installingWorker.onstatechange = () => {
22 + if (installingWorker.state === 'installed') {
23 + if (navigator.serviceWorker.controller) {
24 + // At this point, the old content will have been purged and
25 + // the fresh content will have been added to the cache.
26 + // It's the perfect time to display a "New content is
27 + // available; please refresh." message in your web app.
28 + console.log('New content is available; please refresh.'); // eslint-disable-line no-console
29 + } else {
30 + // At this point, everything has been precached.
31 + // It's the perfect time to display a
32 + // "Content is cached for offline use." message.
33 + console.log('Content is cached for offline use.'); // eslint-disable-line no-console
34 + }
35 + }
36 + };
37 + };
38 + })
39 + .catch(error => {
40 + console.error('Error during service worker registration:', error);
41 + });
42 + });
43 + }
44 +}
45 +
46 +export function unregister() {
47 + if ('serviceWorker' in navigator) {
48 + navigator.serviceWorker.ready.then(registration => {
49 + registration.unregister();
50 + });
51 + }
52 +}
compiler/forget/packages/demo-todolist-playground/src/forget/Ch1.js new
+113
@@ -0,0 +1,113 @@
1 +import { useMemoCache } from "./useMemoCache";
2 +import React, { useState, useRef } from "react";
3 +/**
4 + * Ch1 Minimal TaskBoard
5 + *
6 + * Motivation:
7 + * We want to start with just `useState` and _pass things done_.
8 + *
9 + * Inspired by
10 + * - Rich Harris's https://rethinking-reactivity.surge.sh/#slide=18
11 + * - https://beta.reactjs.org/learn/extracting-state-logic-into-a-reducer
12 + * - before we extract event handler to reducer.
13 + * - https://immerjs.github.io/immer/example-setstate
14 + *
15 + * Now, the <TaskBoard /> contains:
16 + * - useState
17 + * - useCallback
18 + * - React.memo(<Child />)
19 + */
20 +
21 +function TaskBoard() {
22 + let $ = useMemoCache(4);
23 + const [tasks, setTasks] = useState(initialTasks);
24 + let c_tasks = $[1] !== tasks;
25 + if (c_tasks) $[1] = tasks;
26 +
27 + const onChangeTask = $[2] || ($[2] = task => setTasks(ts => ts.map(t => t.id === task.id ? task : t)));
28 +
29 + return c_tasks ? $[3] = <div>
30 + <AddTask setTasks={setTasks} />
31 + {tasks.map(task => <Task key={task.id} task={task} onChange={onChangeTask} />)}
32 + </div> : $[3];
33 +}
34 +
35 +export default TaskBoard;
36 +
37 +function Task(props) {
38 + let $ = useMemoCache(7);
39 + let prevProps = $[0];
40 + let c_props = !prevProps || prevProps !== props;
41 + if (c_props) $[0] = props;
42 + let c_task = c_props && prevProps.task !== props.task;
43 + let c_onChange = c_props && prevProps.onChange !== props.onChange;
44 + const count = useRef(0);
45 + const [isEditing, setIsEditing] = useState(false);
46 + let c_isEditing = $[1] !== isEditing;
47 + if (c_isEditing) $[1] = isEditing;
48 + const taskContent = c_isEditing || c_task || c_onChange ? $[2] = isEditing ? <>
49 + <input value={props.task.text} onChange={e => {
50 + props.onChange({ ...props.task,
51 + text: e.target.value
52 + });
53 + }} />
54 + <button onClick={() => setIsEditing(false)}>Save</button>
55 + </> : <>
56 + {props.task.text}
57 + <button onClick={() => setIsEditing(true)}>Edit</button>
58 + </> : $[2];
59 + return c_isEditing || c_task || c_onChange ? $[6] = <li>
60 + {c_isEditing || c_task || c_onChange ? $[5] = <label>
61 + {c_task || c_onChange ? $[4] = <input type="checkbox" checked={props.task.done} onChange={c_onChange || c_task ? $[3] = e => {
62 + props.onChange({ ...props.task,
63 + done: e.target.checked
64 + });
65 + } : $[3]} /> : $[4]}
66 + {taskContent}
67 + {count.current++}
68 + </label> : $[5]}
69 + </li> : $[6];
70 +}
71 +
72 +let nextId = 3;
73 +const defaultTask = "Code bugs";
74 +const initialTasks = [{
75 + id: 0,
76 + text: "Buy milk",
77 + done: true
78 +}, {
79 + id: 1,
80 + text: "Eat tacos",
81 + done: false
82 +}, {
83 + id: 2,
84 + text: "Brew tea",
85 + done: false
86 +}];
87 +
88 +function AddTask(props) {
89 + let $ = useMemoCache(7);
90 + let prevProps = $[0];
91 + let c_props = !prevProps || prevProps !== props;
92 + if (c_props) $[0] = props;
93 + let c_setTasks = c_props && prevProps.setTasks !== props.setTasks;
94 + const [text, setText] = useState(defaultTask);
95 + let c_text = $[1] !== text;
96 + if (c_text) $[1] = text;
97 + const handleAddTask = c_setTasks ? $[2] = text => {
98 + props.setTasks(ts => [...ts, {
99 + id: nextId++,
100 + text: text,
101 + done: false
102 + }]);
103 + } : $[2];
104 + return <>
105 + {c_text ? $[4] = <input placeholder="Add task" value={text} onChange={$[3] || ($[3] = e => setText(e.target.value))} /> : $[4]}
106 + {c_text || c_setTasks ? $[6] = <button onClick={c_text || c_setTasks ? $[5] = () => {
107 + setText(defaultTask);
108 + handleAddTask(text);
109 + } : $[5]}>
110 + Add
111 + </button> : $[6]}
112 + </>;
113 +}
compiler/forget/packages/demo-todolist-playground/src/forget/Ch2.js new
+155
@@ -0,0 +1,155 @@
1 +import { useMemoCache } from "./useMemoCache";
2 +import React, { useState, useRef } from "react";
3 +/**
4 + * Ch2 TaskBoard with VisibilityFilter
5 + *
6 + * Motivation:
7 + * Add computation that need `useMemo` and props
8 + *
9 + * Now, the <TaskBoard /> contains:
10 + * - props
11 + * - useState
12 + * - useCallback
13 + * - useMemo
14 + * - React.memo(<Child />)
15 + *
16 + * Now, the <TaskBoard /> itself needs to be `React.memo` as well to prevent
17 + * from Parent being re-rendered.
18 + * - also, you need to make sure the `getFilteredTasks` is stable as well...
19 + */
20 +
21 +export default FilterableTaskBoard;
22 +
23 +function FilterableTaskBoard() {
24 + let $ = useMemoCache(6);
25 + const count = useRef(0);
26 + const countRef = useRef(null);
27 + const [visibility, setVisibility] = useState("all");
28 + let c_visibility = $[1] !== visibility;
29 + if (c_visibility) $[1] = visibility;
30 + const getFilteredTasks = c_visibility ? $[2] = tasks => {
31 + // Gosh I'm really coding against React here.
32 + // Invoke in next tick so DOM commits have been made...
33 + // otherwise we'll miss the update from the initial render.
34 + // Use `useState` here will cause infinite rendering loop.
35 + count.current++;
36 + queueMicrotask(() => countRef.current.textContent = count.current);
37 +
38 + switch (visibility) {
39 + case "all":
40 + return tasks;
41 +
42 + case "active":
43 + return tasks.filter(t => !t.done);
44 +
45 + case "completed":
46 + return tasks.filter(t => t.done);
47 + }
48 + } : $[2];
49 + return <>
50 + {c_visibility ? $[4] = <select size="3" value={visibility} onChange={$[3] || ($[3] = e => setVisibility(e.target.value))}>
51 + <option value="all">All</option>
52 + <option value="active">Active</option>
53 + <option value="completed">Completed</option>
54 + </select> : $[4]}
55 + <span ref={countRef}>{count.current}</span>
56 + {c_visibility ? $[5] = <TaskBoard getFilteredTasks={getFilteredTasks} /> : $[5]}
57 + </>;
58 +}
59 +
60 +const TaskBoard = props => {
61 + let $ = useMemoCache(5);
62 + let prevProps = $[0];
63 + let c_props = !prevProps || prevProps !== props;
64 + if (c_props) $[0] = props;
65 + let c_getFilteredTasks = c_props && prevProps.getFilteredTasks !== props.getFilteredTasks;
66 + const [tasks, setTasks] = useState(initialTasks);
67 + let c_tasks = $[1] !== tasks;
68 + if (c_tasks) $[1] = tasks;
69 +
70 + const onChangeTask = $[2] || ($[2] = task => setTasks(ts => ts.map(t => t.id === task.id ? task : t)));
71 +
72 + const filtered = c_getFilteredTasks || c_tasks ? $[3] = props.getFilteredTasks(tasks) : $[3];
73 + return c_getFilteredTasks || c_tasks ? $[4] = <div>
74 + <AddTask setTasks={setTasks} />
75 + {filtered.map(task => <Task key={task.id} task={task} onChange={onChangeTask} />)}
76 + </div> : $[4];
77 +};
78 +
79 +function Task(props) {
80 + let $ = useMemoCache(7);
81 + let prevProps = $[0];
82 + let c_props = !prevProps || prevProps !== props;
83 + if (c_props) $[0] = props;
84 + let c_task = c_props && prevProps.task !== props.task;
85 + let c_onChange = c_props && prevProps.onChange !== props.onChange;
86 + const count = useRef(0);
87 + const [isEditing, setIsEditing] = useState(false);
88 + let c_isEditing = $[1] !== isEditing;
89 + if (c_isEditing) $[1] = isEditing;
90 + const taskContent = c_isEditing || c_task || c_onChange ? $[2] = isEditing ? <>
91 + <input value={props.task.text} onChange={e => {
92 + props.onChange({ ...props.task,
93 + text: e.target.value
94 + });
95 + }} />
96 + <button onClick={() => setIsEditing(false)}>Save</button>
97 + </> : <>
98 + {props.task.text}
99 + <button onClick={() => setIsEditing(true)}>Edit</button>
100 + </> : $[2];
101 + return c_isEditing || c_task || c_onChange ? $[6] = <li>
102 + {c_isEditing || c_task || c_onChange ? $[5] = <label>
103 + {c_task || c_onChange ? $[4] = <input type="checkbox" checked={props.task.done} onChange={c_onChange || c_task ? $[3] = e => {
104 + props.onChange({ ...props.task,
105 + done: e.target.checked
106 + });
107 + } : $[3]} /> : $[4]}
108 + {taskContent}
109 + {count.current++}
110 + </label> : $[5]}
111 + </li> : $[6];
112 +}
113 +
114 +let nextId = 3;
115 +const defaultTask = "Code bugs";
116 +const initialTasks = [{
117 + id: 0,
118 + text: "Buy milk",
119 + done: true
120 +}, {
121 + id: 1,
122 + text: "Eat tacos",
123 + done: false
124 +}, {
125 + id: 2,
126 + text: "Brew tea",
127 + done: false
128 +}];
129 +
130 +function AddTask(props) {
131 + let $ = useMemoCache(7);
132 + let prevProps = $[0];
133 + let c_props = !prevProps || prevProps !== props;
134 + if (c_props) $[0] = props;
135 + let c_setTasks = c_props && prevProps.setTasks !== props.setTasks;
136 + const [text, setText] = useState(defaultTask);
137 + let c_text = $[1] !== text;
138 + if (c_text) $[1] = text;
139 + const handleAddTask = c_setTasks ? $[2] = text => {
140 + props.setTasks(ts => [...ts, {
141 + id: nextId++,
142 + text: text,
143 + done: false
144 + }]);
145 + } : $[2];
146 + return <>
147 + {c_text ? $[4] = <input placeholder="Add task" value={text} onChange={$[3] || ($[3] = e => setText(e.target.value))} /> : $[4]}
148 + {c_text || c_setTasks ? $[6] = <button onClick={c_text || c_setTasks ? $[5] = () => {
149 + setText(defaultTask);
150 + handleAddTask(text);
151 + } : $[5]}>
152 + Add
153 + </button> : $[6]}
154 + </>;
155 +}
compiler/forget/packages/demo-todolist-playground/src/forget/Ch3.js new
+145
@@ -0,0 +1,145 @@
1 +import { useMemoCache } from "./useMemoCache";
2 +import React, { createContext, useState, useRef, useContext } from "react";
3 +/**
4 + * Ch3 TaskBoard use dedicated context.
5 + *
6 + * Motivation:
7 + * Replace `useState` with `useContext`
8 + */
9 +
10 +const TasksContext = createContext(null); // Admittedly, this is a really weird pattern...
11 +// but it save me from copying in the reducer...
12 +
13 +const SetTasksContext = createContext(null);
14 +export default function FilterableTaskBoardUsingContext() {
15 + let $ = useMemoCache(9);
16 + const count = useRef(0);
17 + const [visibility, setVisibility] = useState("all");
18 + let c_visibility = $[1] !== visibility;
19 + if (c_visibility) $[1] = visibility;
20 + const [tasks, setTasks] = useState(initialTasks);
21 + let c_tasks = $[2] !== tasks;
22 + if (c_tasks) $[2] = tasks;
23 + const getFilteredTasks = c_visibility ? $[3] = tasks => {
24 + count.current++;
25 +
26 + switch (visibility) {
27 + case "all":
28 + return tasks;
29 +
30 + case "active":
31 + return tasks.filter(t => !t.done);
32 +
33 + case "completed":
34 + return tasks.filter(t => t.done);
35 + }
36 + } : $[3];
37 + return <>
38 + {c_visibility ? $[5] = <select size="3" value={visibility} onChange={$[4] || ($[4] = e => setVisibility(e.target.value))}>
39 + <option value="all">All</option>
40 + <option value="active">Active</option>
41 + <option value="completed">Completed</option>
42 + </select> : $[5]}
43 + {c_tasks || c_visibility ? $[8] = <SetTasksContext.Provider value={setTasks}>
44 + {c_tasks || c_visibility ? $[7] = <TasksContext.Provider value={tasks}>
45 + {c_visibility ? $[6] = <TaskBoard getFilteredTasks={getFilteredTasks} /> : $[6]}
46 + </TasksContext.Provider> : $[7]}
47 + </SetTasksContext.Provider> : $[8]}
48 + </>;
49 +}
50 +
51 +function TaskBoard(props) {
52 + let $ = useMemoCache(4);
53 + let prevProps = $[0];
54 + let c_props = !prevProps || prevProps !== props;
55 + if (c_props) $[0] = props;
56 + let c_getFilteredTasks = c_props && prevProps.getFilteredTasks !== props.getFilteredTasks;
57 + const tasks = useContext(TasksContext);
58 + let c_tasks = $[1] !== tasks;
59 + if (c_tasks) $[1] = tasks;
60 + const filtered = c_getFilteredTasks || c_tasks ? $[2] = props.getFilteredTasks(tasks) : $[2];
61 + return c_getFilteredTasks || c_tasks ? $[3] = <div>
62 + <AddTask />
63 + {filtered.map(task => <Task key={task.id} task={task} />)}
64 + </div> : $[3];
65 +}
66 +
67 +function Task(props) {
68 + let $ = useMemoCache(9);
69 + let prevProps = $[0];
70 + let c_props = !prevProps || prevProps !== props;
71 + if (c_props) $[0] = props;
72 + let c_task = c_props && prevProps.task !== props.task;
73 + const setTasks = useContext(SetTasksContext);
74 + let c_setTasks = $[1] !== setTasks;
75 + if (c_setTasks) $[1] = setTasks;
76 + const onChange = c_setTasks ? $[3] = task => setTasks(ts => ts.map(t => t.id === task.id ? task : t)) : $[3];
77 + const count = useRef(0);
78 + const [isEditing, setIsEditing] = useState(false);
79 + let c_isEditing = $[2] !== isEditing;
80 + if (c_isEditing) $[2] = isEditing;
81 + const taskContent = c_isEditing || c_task || c_setTasks ? $[4] = isEditing ? <>
82 + <input value={props.task.text} onChange={e => {
83 + onChange({ ...props.task,
84 + text: e.target.value
85 + });
86 + }} />
87 + <button onClick={() => setIsEditing(false)}>Save</button>
88 + </> : <>
89 + {props.task.text}
90 + <button onClick={() => setIsEditing(true)}>Edit</button>
91 + </> : $[4];
92 + return c_isEditing || c_task || c_setTasks ? $[8] = <li>
93 + {c_isEditing || c_task || c_setTasks ? $[7] = <label>
94 + {c_task || c_setTasks ? $[6] = <input type="checkbox" checked={props.task.done} onChange={c_task || c_setTasks ? $[5] = e => {
95 + onChange({ ...props.task,
96 + done: e.target.checked
97 + });
98 + } : $[5]} /> : $[6]}
99 + {taskContent}
100 + {count.current++}
101 + </label> : $[7]}
102 + </li> : $[8];
103 +}
104 +
105 +let nextId = 3;
106 +const defaultTask = "Code bugs";
107 +const initialTasks = [{
108 + id: 0,
109 + text: "Buy milk",
110 + done: true
111 +}, {
112 + id: 1,
113 + text: "Eat tacos",
114 + done: false
115 +}, {
116 + id: 2,
117 + text: "Brew tea",
118 + done: false
119 +}];
120 +
121 +function AddTask() {
122 + let $ = useMemoCache(8);
123 + const setTasks = useContext(SetTasksContext);
124 + let c_setTasks = $[1] !== setTasks;
125 + if (c_setTasks) $[1] = setTasks;
126 + const [text, setText] = useState(defaultTask);
127 + let c_text = $[2] !== text;
128 + if (c_text) $[2] = text;
129 + const handleAddTask = c_setTasks ? $[3] = text => {
130 + setTasks(ts => [...ts, {
131 + id: nextId++,
132 + text: text,
133 + done: false
134 + }]);
135 + } : $[3];
136 + return <>
137 + {c_text ? $[5] = <input placeholder="Add task" value={text} onChange={$[4] || ($[4] = e => setText(e.target.value))} /> : $[5]}
138 + {c_text || c_setTasks ? $[7] = <button onClick={c_text || c_setTasks ? $[6] = () => {
139 + setText(defaultTask);
140 + handleAddTask(text);
141 + } : $[6]}>
142 + Add
143 + </button> : $[7]}
144 + </>;
145 +}
compiler/forget/packages/demo-todolist-playground/src/forget/Ch4.js new
+126
@@ -0,0 +1,126 @@
1 +import { useMemoCache } from "./useMemoCache";
2 +import React, { useState, useRef } from "react";
3 +import { TasksProvider, useTasks, useTasksDispatch } from "./TaskBoardContext";
4 +/**
5 + * Ch4 TaskBoard use custom hooks
6 + *
7 + * Motivation:
8 + * encapsulate context and reducer as custom hooks.
9 + */
10 +
11 +export default function FilterableTaskBoardUsingCustomHooks() {
12 + let $ = useMemoCache(7);
13 + const count = useRef(0);
14 + const [visibility, setVisibility] = useState("all");
15 + let c_visibility = $[1] !== visibility;
16 + if (c_visibility) $[1] = visibility;
17 + const getFilteredTasks = c_visibility ? $[2] = tasks => {
18 + count.current++;
19 +
20 + switch (visibility) {
21 + case "all":
22 + return tasks;
23 +
24 + case "active":
25 + return tasks.filter(t => !t.done);
26 +
27 + case "completed":
28 + return tasks.filter(t => t.done);
29 + }
30 + } : $[2];
31 + return <>
32 + {c_visibility ? $[4] = <select size="3" value={visibility} onChange={$[3] || ($[3] = e => setVisibility(e.target.value))}>
33 + <option value="all">All</option>
34 + <option value="active">Active</option>
35 + <option value="completed">Completed</option>
36 + </select> : $[4]}
37 + {c_visibility ? $[6] = <TasksProvider>
38 + {c_visibility ? $[5] = <TaskBoard getFilteredTasks={getFilteredTasks} /> : $[5]}
39 + </TasksProvider> : $[6]}
40 + </>;
41 +}
42 +
43 +function TaskBoard(props) {
44 + let $ = useMemoCache(4);
45 + let prevProps = $[0];
46 + let c_props = !prevProps || prevProps !== props;
47 + if (c_props) $[0] = props;
48 + let c_getFilteredTasks = c_props && prevProps.getFilteredTasks !== props.getFilteredTasks;
49 + const tasks = useTasks();
50 + let c_tasks = $[1] !== tasks;
51 + if (c_tasks) $[1] = tasks;
52 + const filtered = c_getFilteredTasks || c_tasks ? $[2] = props.getFilteredTasks(tasks) : $[2];
53 + return c_getFilteredTasks || c_tasks ? $[3] = <div>
54 + <AddTask />
55 + {filtered.map(task => <Task key={task.id} task={task} />)}
56 + </div> : $[3];
57 +}
58 +
59 +function Task(props) {
60 + let $ = useMemoCache(8);
61 + let prevProps = $[0];
62 + let c_props = !prevProps || prevProps !== props;
63 + if (c_props) $[0] = props;
64 + let c_task = c_props && prevProps.task !== props.task;
65 + const count = useRef(0);
66 + const [isEditing, setIsEditing] = useState(false);
67 + let c_isEditing = $[1] !== isEditing;
68 + if (c_isEditing) $[1] = isEditing;
69 + const dispatch = useTasksDispatch();
70 + let c_dispatch = $[2] !== dispatch;
71 + if (c_dispatch) $[2] = dispatch;
72 + const taskContent = c_isEditing || c_task || c_dispatch ? $[3] = isEditing ? <>
73 + <input value={props.task.text} onChange={e => {
74 + dispatch({
75 + type: "changed",
76 + task: { ...props.task,
77 + text: e.target.value
78 + }
79 + });
80 + }} />
81 + <button onClick={() => setIsEditing(false)}>Save</button>
82 + </> : <>
83 + {props.task.text}
84 + <button onClick={() => setIsEditing(true)}>Edit</button>
85 + </> : $[3];
86 + return c_isEditing || c_task || c_dispatch ? $[7] = <li>
87 + {c_isEditing || c_task || c_dispatch ? $[6] = <label>
88 + {c_task || c_dispatch ? $[5] = <input type="checkbox" checked={props.task.done} onChange={c_dispatch || c_task ? $[4] = e => {
89 + dispatch({
90 + type: "changed",
91 + task: { ...props.task,
92 + done: e.target.checked
93 + }
94 + });
95 + } : $[4]} /> : $[5]}
96 + {taskContent}
97 + {count.current++}
98 + </label> : $[6]}
99 + </li> : $[7];
100 +}
101 +
102 +let nextId = 3;
103 +const defaultTask = "Code bugs";
104 +
105 +function AddTask() {
106 + let $ = useMemoCache(7);
107 + const dispatch = useTasksDispatch();
108 + let c_dispatch = $[1] !== dispatch;
109 + if (c_dispatch) $[1] = dispatch;
110 + const [text, setText] = useState(defaultTask);
111 + let c_text = $[2] !== text;
112 + if (c_text) $[2] = text;
113 + return <>
114 + {c_text ? $[4] = <input placeholder="Add task" value={text} onChange={$[3] || ($[3] = e => setText(e.target.value))} /> : $[4]}
115 + {c_dispatch || c_text ? $[6] = <button onClick={c_dispatch || c_text ? $[5] = () => {
116 + setText(defaultTask);
117 + dispatch({
118 + type: "added",
119 + id: nextId++,
120 + text: text
121 + });
122 + } : $[5]}>
123 + Add
124 + </button> : $[6]}
125 + </>;
126 +}
compiler/forget/packages/demo-todolist-playground/src/forget/Ch5.js new
+169
@@ -0,0 +1,169 @@
1 +import { useMemoCache } from "./useMemoCache";
2 +import React, { createContext, useContext, useState, useRef } from "react";
3 +/**
4 + * Ch3 TaskBoard use global context
5 + *
6 + * Motivation:
7 + * demenstrate selecting a subset from context.
8 + */
9 +
10 +const AppContext = createContext(null); // Admittedly, this is a really weird pattern...
11 +// but it save me from copying in the reducer...
12 +
13 +const SetTasksContext = createContext(null);
14 +export default function FilterableTaskBoardUsingContext() {
15 + let $ = useMemoCache(11);
16 + const count = useRef(0);
17 + const [visibility, setVisibility] = useState("all");
18 + let c_visibility = $[1] !== visibility;
19 + if (c_visibility) $[1] = visibility;
20 + const [randomInput, setRandomInput] = useState("");
21 + let c_randomInput = $[2] !== randomInput;
22 + if (c_randomInput) $[2] = randomInput;
23 + const [tasks, setTasks] = useState(initialTasks);
24 + let c_tasks = $[3] !== tasks;
25 + if (c_tasks) $[3] = tasks;
26 + const getFilteredTasks = c_visibility ? $[4] = tasks => {
27 + count.current++;
28 +
29 + switch (visibility) {
30 + case "all":
31 + return tasks;
32 +
33 + case "active":
34 + return tasks.filter(t => !t.done);
35 +
36 + case "completed":
37 + return tasks.filter(t => t.done);
38 + }
39 + } : $[4];
40 + const appStore = c_tasks || c_randomInput ? $[5] = {
41 + tasks: tasks,
42 + randomInput: randomInput,
43 + setRandomInput: setRandomInput
44 + } : $[5];
45 + return <>
46 + {c_visibility ? $[7] = <select size="3" value={visibility} onChange={$[6] || ($[6] = e => setVisibility(e.target.value))}>
47 + <option value="all">All</option>
48 + <option value="active">Active</option>
49 + <option value="completed">Completed</option>
50 + </select> : $[7]}
51 + {c_tasks || c_randomInput || c_visibility ? $[10] = <SetTasksContext.Provider value={setTasks}>
52 + {c_tasks || c_randomInput || c_visibility ? $[9] = <AppContext.Provider value={appStore}>
53 + <RandomInput />
54 + {c_visibility ? $[8] = <TaskBoard getFilteredTasks={getFilteredTasks} /> : $[8]}
55 + </AppContext.Provider> : $[9]}
56 + </SetTasksContext.Provider> : $[10]}
57 + </>;
58 +}
59 +
60 +function RandomInput() {
61 + let $ = useMemoCache(5);
62 + const {
63 + randomInput,
64 + setRandomInput
65 + } = useContext(AppContext);
66 + let c_setRandomInput = $[2] !== setRandomInput;
67 + if (c_setRandomInput) $[2] = setRandomInput;
68 + let c_randomInput = $[1] !== randomInput;
69 + if (c_randomInput) $[1] = randomInput;
70 + return c_randomInput || c_setRandomInput ? $[4] = <input placeholder="Random Input" value={randomInput} onChange={c_setRandomInput ? $[3] = e => setRandomInput(e.target.value) : $[3]} /> : $[4];
71 +}
72 +
73 +function TaskBoard(props) {
74 + let $ = useMemoCache(4);
75 + let prevProps = $[0];
76 + let c_props = !prevProps || prevProps !== props;
77 + if (c_props) $[0] = props;
78 + let c_getFilteredTasks = c_props && prevProps.getFilteredTasks !== props.getFilteredTasks;
79 + const {
80 + tasks
81 + } = useContext(AppContext);
82 + let c_tasks = $[1] !== tasks;
83 + if (c_tasks) $[1] = tasks;
84 + const filtered = c_getFilteredTasks || c_tasks ? $[2] = props.getFilteredTasks(tasks) : $[2];
85 + return c_getFilteredTasks || c_tasks ? $[3] = <div>
86 + <AddTask />
87 + {filtered.map(task => <Task key={task.id} task={task} />)}
88 + </div> : $[3];
89 +}
90 +
91 +function Task(props) {
92 + let $ = useMemoCache(9);
93 + let prevProps = $[0];
94 + let c_props = !prevProps || prevProps !== props;
95 + if (c_props) $[0] = props;
96 + let c_task = c_props && prevProps.task !== props.task;
97 + const setTasks = useContext(SetTasksContext);
98 + let c_setTasks = $[1] !== setTasks;
99 + if (c_setTasks) $[1] = setTasks;
100 + const onChange = c_setTasks ? $[3] = task => setTasks(ts => ts.map(t => t.id === task.id ? task : t)) : $[3];
101 + const count = useRef(0);
102 + const [isEditing, setIsEditing] = useState(false);
103 + let c_isEditing = $[2] !== isEditing;
104 + if (c_isEditing) $[2] = isEditing;
105 + const taskContent = c_isEditing || c_task || c_setTasks ? $[4] = isEditing ? <>
106 + <input value={props.task.text} onChange={e => {
107 + onChange({ ...props.task,
108 + text: e.target.value
109 + });
110 + }} />
111 + <button onClick={() => setIsEditing(false)}>Save</button>
112 + </> : <>
113 + {props.task.text}
114 + <button onClick={() => setIsEditing(true)}>Edit</button>
115 + </> : $[4];
116 + return c_isEditing || c_task || c_setTasks ? $[8] = <li>
117 + {c_isEditing || c_task || c_setTasks ? $[7] = <label>
118 + {c_task || c_setTasks ? $[6] = <input type="checkbox" checked={props.task.done} onChange={c_task || c_setTasks ? $[5] = e => {
119 + onChange({ ...props.task,
120 + done: e.target.checked
121 + });
122 + } : $[5]} /> : $[6]}
123 + {taskContent}
124 + {count.current++}
125 + </label> : $[7]}
126 + </li> : $[8];
127 +}
128 +
129 +let nextId = 3;
130 +const defaultTask = "Code bugs";
131 +const initialTasks = [{
132 + id: 0,
133 + text: "Buy milk",
134 + done: true
135 +}, {
136 + id: 1,
137 + text: "Eat tacos",
138 + done: false
139 +}, {
140 + id: 2,
141 + text: "Brew tea",
142 + done: false
143 +}];
144 +
145 +function AddTask() {
146 + let $ = useMemoCache(8);
147 + const setTasks = useContext(SetTasksContext);
148 + let c_setTasks = $[1] !== setTasks;
149 + if (c_setTasks) $[1] = setTasks;
150 + const [text, setText] = useState(defaultTask);
151 + let c_text = $[2] !== text;
152 + if (c_text) $[2] = text;
153 + const handleAddTask = c_setTasks ? $[3] = text => {
154 + setTasks(ts => [...ts, {
155 + id: nextId++,
156 + text: text,
157 + done: false
158 + }]);
159 + } : $[3];
160 + return <>
161 + {c_text ? $[5] = <input placeholder="Add task" value={text} onChange={$[4] || ($[4] = e => setText(e.target.value))} /> : $[5]}
162 + {c_text || c_setTasks ? $[7] = <button onClick={c_text || c_setTasks ? $[6] = () => {
163 + setText(defaultTask);
164 + handleAddTask(text);
165 + } : $[6]}>
166 + Add
167 + </button> : $[7]}
168 + </>;
169 +}
compiler/forget/packages/demo-todolist-playground/src/forget/InitialTasks.js new
+15
@@ -0,0 +1,15 @@
1 +import { useMemoCache } from "./useMemoCache";
2 +const initialTasks = [{
3 + id: 0,
4 + text: "memo",
5 + done: true
6 +}, {
7 + id: 1,
8 + text: "useCallback",
9 + done: false
10 +}, {
11 + id: 2,
12 + text: "useMemo",
13 + done: false
14 +}];
15 +export default initialTasks;
compiler/forget/packages/demo-todolist-playground/src/forget/Neo0.js new
+33
@@ -0,0 +1,33 @@
1 +import { useMemoCache } from "./useMemoCache";
2 +import React, { useState, useRef } from "react";
3 +import getUpdated from "./getUpdated";
4 +import initialTodos from "./initialTodos";
5 +import Todo from "./NeoTodoNoBadge";
6 +import AddTodo from "./NeoAddTodo";
7 +/**
8 + * Neo0 Minimal TodoList (without Badge)
9 + *
10 + * Motivation:
11 + * Start with just `useState` (state var) and _pass things done_.
12 + */
13 +
14 +function TodoList() {
15 + let $ = useMemoCache(4);
16 + const [todos, setTodos] = useState(initialTodos);
17 + let c_todos = $[1] !== todos;
18 + if (c_todos) $[1] = todos;
19 +
20 + const handleChange = $[2] || ($[2] = todo => setTodos(todos => getUpdated(todos, todo)));
21 +
22 + return c_todos ? $[3] = <div>
23 + {todos.map(todo => <Todo key={todo.id} todo={todo} onChange={handleChange} />)}
24 + <AddTodo setTodos={setTodos} />
25 + </div> : $[3];
26 +}
27 +
28 +export default function App() {
29 + let $ = useMemoCache(1);
30 + return <div className="TodoListApp">
31 + <TodoList />
32 + </div>;
33 +}
compiler/forget/packages/demo-todolist-playground/src/forget/Neo1.js new
+35
@@ -0,0 +1,35 @@
1 +import { useMemoCache } from "./useMemoCache";
2 +import React, { useState, useRef } from "react";
3 +import getUpdated from "./getUpdated";
4 +import initialTodos from "./initialTodos";
5 +import Todo from "./NeoTodo";
6 +import AddTodo from "./NeoAddTodo";
7 +/**
8 + * Neo1 Minimal TodoList
9 + *
10 + * Motivation:
11 + * Start with just `useState` (state var) and _pass things done_.
12 + */
13 +
14 +function TodoList() {
15 + let $ = useMemoCache(5);
16 + const [todos, setTodos] = useState(initialTodos);
17 + let c_todos = $[1] !== todos;
18 + if (c_todos) $[1] = todos;
19 +
20 + const handleChange = $[2] || ($[2] = todo => setTodos(todos => getUpdated(todos, todo)));
21 +
22 + return c_todos ? $[4] = <div>
23 + {c_todos ? $[3] = <ul>
24 + {todos.map(todo => <Todo key={todo.id} todo={todo} onChange={handleChange} />)}
25 + </ul> : $[3]}
26 + <AddTodo setTodos={setTodos} />
27 + </div> : $[4];
28 +}
29 +
30 +export default function App() {
31 + let $ = useMemoCache(1);
32 + return <div className="TodoListApp">
33 + <TodoList />
34 + </div>;
35 +}
compiler/forget/packages/demo-todolist-playground/src/forget/Neo2.js new
+77
@@ -0,0 +1,77 @@
1 +import { useMemoCache } from "./useMemoCache";
2 +import React, { useState, useRef } from "react";
3 +import getUpdated from "./getUpdated";
4 +import initialTodos from "./initialTodos";
5 +import Todo from "./NeoTodo";
6 +import AddTodo from "./NeoAddTodo";
7 +import CountBadge from "../Components/CountBadge";
8 +import Select from "../Components/Select";
9 +/**
10 + * Neo2 TodoList with Filter
11 + *
12 + * Motivation:
13 + * Add props and computations.
14 + */
15 +
16 +function TodoList(props) {
17 + let $ = useMemoCache(5);
18 + let prevProps = $[0];
19 + let c_props = !prevProps || prevProps !== props;
20 + if (c_props) $[0] = props;
21 + let c_getFiltered = c_props && prevProps.getFiltered !== props.getFiltered;
22 + const [todos, setTodos] = useState(initialTodos);
23 + let c_todos = $[1] !== todos;
24 + if (c_todos) $[1] = todos;
25 +
26 + const handleChange = $[2] || ($[2] = todo => setTodos(todos => getUpdated(todos, todo)));
27 +
28 + const filtered = c_getFiltered || c_todos ? $[3] = props.getFiltered(todos) : $[3];
29 + return c_getFiltered || c_todos ? $[4] = <div>
30 + {filtered.map(todo => <Todo key={todo.id} todo={todo} onChange={handleChange} />)}
31 + <AddTodo setTodos={setTodos} />
32 + </div> : $[4];
33 +}
34 +
35 +export default function App() {
36 + let $ = useMemoCache(10);
37 + const [visibility, setVisibility] = useState("all");
38 + let c_visibility = $[1] !== visibility;
39 + if (c_visibility) $[1] = visibility;
40 + const count = useRef(0);
41 + const countRef = useRef(null);
42 + const getFiltered = c_visibility ? $[2] = todos => {
43 + count.current++;
44 + queueMicrotask(() => countRef.current.textContent = count.current);
45 +
46 + switch (visibility) {
47 + case "all":
48 + return todos;
49 +
50 + case "active":
51 + return todos.filter(t => !t.done);
52 +
53 + case "completed":
54 + return todos.filter(t => t.done);
55 + }
56 + } : $[2];
57 + return c_visibility ? $[9] = <div className="TodoListApp">
58 + {c_visibility ? $[7] = <header>
59 + {c_visibility ? $[6] = <div class="VisibilityFilter">
60 + {c_visibility ? $[5] = <Select value={visibility} options={$[3] || ($[3] = [{
61 + value: "all",
62 + label: "All"
63 + }, {
64 + value: "active",
65 + label: "Active"
66 + }, {
67 + value: "completed",
68 + label: "Completed"
69 + }])} onChange={$[4] || ($[4] = value => setVisibility(value))} /> : $[5]}
70 + <div className="tail">
71 + <CountBadge ref={countRef} count={count.current} />
72 + </div>
73 + </div> : $[6]}
74 + </header> : $[7]}
75 + {c_visibility ? $[8] = <TodoList getFiltered={getFiltered} /> : $[8]}
76 + </div> : $[9];
77 +}
compiler/forget/packages/demo-todolist-playground/src/forget/Neo3.js new
+79
@@ -0,0 +1,79 @@
1 +import { useMemoCache } from "./useMemoCache";
2 +import React, { useState, useRef, useEffect } from "react";
3 +import getUpdated from "./getUpdated";
4 +import getFiltered from "./getFiltered";
5 +import initialTodos from "./initialTodos";
6 +import Todo from "./NeoTodo";
7 +import AddTodo from "./NeoAddTodoThemable";
8 +import ColorPicker from "../Components/ColorPicker";
9 +import CountBadge from "../Components/CountBadge";
10 +import Select from "../Components/Select";
11 +/**
12 + * Neo3 TodoList with Filter and ColorPicker
13 + *
14 + * Motivation:
15 + * Add props and and demo that such computations may need `useMemo`.
16 + */
17 +
18 +function TodoList(props) {
19 + let $ = useMemoCache(7);
20 + let prevProps = $[0];
21 + let c_props = !prevProps || prevProps !== props;
22 + if (c_props) $[0] = props;
23 + let c_visibility = c_props && prevProps.visibility !== props.visibility;
24 + let c_themeColor = c_props && prevProps.themeColor !== props.themeColor;
25 + const [todos, setTodos] = useState(initialTodos);
26 + let c_todos = $[1] !== todos;
27 + if (c_todos) $[1] = todos;
28 +
29 + const handleChange = $[2] || ($[2] = todo => setTodos(todos => getUpdated(todos, todo)));
30 +
31 + const filtered = c_todos || c_visibility ? $[3] = getFiltered(todos, props.visibility) : $[3];
32 + return c_todos || c_visibility || c_themeColor ? $[6] = <div>
33 + {c_todos || c_visibility ? $[4] = <ul>
34 + {filtered.map(todo => <Todo key={todo.id} todo={todo} onChange={handleChange} />)}
35 + </ul> : $[4]}
36 + {c_themeColor ? $[5] = <AddTodo setTodos={setTodos} themeColor={props.themeColor} /> : $[5]}
37 + </div> : $[6];
38 +}
39 +
40 +export default function BlazingTodoList() {
41 + let $ = useMemoCache(14);
42 + const [themeColor, setThemeColor] = useState("#045975");
43 + let c_themeColor = $[1] !== themeColor;
44 + if (c_themeColor) $[1] = themeColor;
45 + const [visibility, setVisibility] = useState("all");
46 + let c_visibility = $[2] !== visibility;
47 + if (c_visibility) $[2] = visibility;
48 + const bgGradient = c_themeColor ? $[3] = `linear-gradient(
49 + 209.21deg,
50 + ${primaryColor} 13.57%,
51 + ${themeColor} 98.38%
52 + )` : $[3];
53 + return c_themeColor || c_visibility ? $[13] = <div className="TodoListApp" style={c_themeColor ? $[4] = {
54 + background: bgGradient
55 + } : $[4]}>
56 + <div className="FilterCountBanner">
57 + <code>getFiltered()</code> was called
58 + <CountBadge />
59 + times
60 + </div>
61 + {c_themeColor || c_visibility ? $[11] = <header>
62 + {c_themeColor ? $[6] = <ColorPicker value={themeColor} onChange={$[5] || ($[5] = e => setThemeColor(e.target.value))} /> : $[6]}
63 + {c_visibility ? $[10] = <div className="VisibilityFilter">
64 + {c_visibility ? $[9] = <Select value={visibility} options={$[7] || ($[7] = [{
65 + value: "all",
66 + label: "All"
67 + }, {
68 + value: "active",
69 + label: "Active"
70 + }, {
71 + value: "completed",
72 + label: "Completed"
73 + }])} onChange={$[8] || ($[8] = value => setVisibility(value))} /> : $[9]}
74 + </div> : $[10]}
75 + </header> : $[11]}
76 + {c_visibility || c_themeColor ? $[12] = <TodoList visibility={visibility} themeColor={themeColor} /> : $[12]}
77 + </div> : $[13];
78 +}
79 +const primaryColor = "rgb(8, 126, 164)";
compiler/forget/packages/demo-todolist-playground/src/forget/NeoAddTask.js new
+35
@@ -0,0 +1,35 @@
1 +import { useMemoCache } from "./useMemoCache";
2 +import React, { useState } from "react"; // We need this because Forget has bug when props is passed in `undefined`
3 +
4 +export default function AddTodo(props) {
5 + let $ = useMemoCache(8);
6 + let prevProps = $[0];
7 + let c_props = !prevProps || prevProps !== props;
8 + if (c_props) $[0] = props;
9 + let c_setTodos = c_props && prevProps.setTodos !== props.setTodos;
10 + const [text, setText] = useState(defaultTodo);
11 + let c_text = $[1] !== text;
12 + if (c_text) $[1] = text;
13 + const handleAddTodo = c_setTodos ? $[2] = text => {
14 + props.setTodos(ts => [...ts, {
15 + id: nextId++,
16 + text: text,
17 + done: false
18 + }]);
19 + } : $[2];
20 + return c_text || c_setTodos ? $[7] = <div className="AddTodo">
21 + {c_text || c_setTodos ? $[6] = <form onSubmit={c_text || c_setTodos ? $[3] = e => {
22 + e.preventDefault();
23 + setText(defaultTodo);
24 + handleAddTodo(text.trim() === "" ? fallbackTodo : text);
25 + } : $[3]}>
26 + {c_text ? $[5] = <input placeholder="Add todo" value={text} onChange={$[4] || ($[4] = e => setText(e.target.value))} /> : $[5]}
27 + <div className="tail">
28 + <button type="submit">Add</button>
29 + </div>
30 + </form> : $[6]}
31 + </div> : $[7];
32 +}
33 +let nextId = 3;
34 +const defaultTodo = "";
35 +const fallbackTodo = "oops";
compiler/forget/packages/demo-todolist-playground/src/forget/NeoAddTaskThemable.js new
+44
@@ -0,0 +1,44 @@
1 +import { useMemoCache } from "./useMemoCache";
2 +import React, { useState } from "react";
3 +export default function AddTodo(props) {
4 + let $ = useMemoCache(12);
5 + let prevProps = $[0];
6 + let c_props = !prevProps || prevProps !== props;
7 + if (c_props) $[0] = props;
8 + let c_setTodos = c_props && prevProps.setTodos !== props.setTodos;
9 + let c_themeColor = c_props && prevProps.themeColor !== props.themeColor;
10 + const [text, setText] = useState(defaultTodo);
11 + let c_text = $[1] !== text;
12 + if (c_text) $[1] = text;
13 + const handleAddTodo = c_setTodos ? $[2] = text => {
14 + props.setTodos(ts => [...ts, {
15 + id: nextId++,
16 + text: text,
17 + done: false
18 + }]);
19 + } : $[2];
20 + const bgGradient = c_themeColor ? $[3] = `linear-gradient(
21 + 209.21deg,
22 + ${props.themeColor}22 0%,
23 + ${props.themeColor}ee 100%
24 + )` : $[3];
25 + return c_text || c_setTodos || c_themeColor ? $[11] = <div className="AddTodo">
26 + {c_text || c_setTodos || c_themeColor ? $[10] = <form onSubmit={c_text || c_setTodos ? $[4] = e => {
27 + e.preventDefault();
28 + setText(defaultTodo);
29 + handleAddTodo(text.trim() === "" ? fallbackTodo : text);
30 + } : $[4]}>
31 + {c_text ? $[6] = <input placeholder="Add todo" value={text} onChange={$[5] || ($[5] = e => setText(e.target.value))} /> : $[6]}
32 + {c_themeColor ? $[9] = <div className="tail">
33 + {c_themeColor ? $[8] = <button type="submit" style={c_themeColor ? $[7] = {
34 + background: bgGradient
35 + } : $[7]}>
36 + Add
37 + </button> : $[8]}
38 + </div> : $[9]}
39 + </form> : $[10]}
40 + </div> : $[11];
41 +}
42 +let nextId = 3;
43 +const defaultTodo = "";
44 +const fallbackTodo = "oops";
compiler/forget/packages/demo-todolist-playground/src/forget/NeoAddTodo.js new
+35
@@ -0,0 +1,35 @@
1 +import { useMemoCache } from "./useMemoCache";
2 +import React, { useState } from "react"; // We need this because Forget has bug when props is passed in `undefined`
3 +
4 +export default function AddTodo(props) {
5 + let $ = useMemoCache(8);
6 + let prevProps = $[0];
7 + let c_props = !prevProps || prevProps !== props;
8 + if (c_props) $[0] = props;
9 + let c_setTodos = c_props && prevProps.setTodos !== props.setTodos;
10 + const [text, setText] = useState(defaultTodo);
11 + let c_text = $[1] !== text;
12 + if (c_text) $[1] = text;
13 + const handleAddTodo = c_setTodos ? $[2] = text => {
14 + props.setTodos(ts => [...ts, {
15 + id: nextId++,
16 + text: text,
17 + done: false
18 + }]);
19 + } : $[2];
20 + return c_text || c_setTodos ? $[7] = <div className="AddTodo">
21 + {c_text || c_setTodos ? $[6] = <form onSubmit={c_text || c_setTodos ? $[3] = e => {
22 + e.preventDefault();
23 + setText(defaultTodo);
24 + handleAddTodo(text.trim() === "" ? fallbackTodo : text);
25 + } : $[3]}>
26 + {c_text ? $[5] = <input placeholder="Add todo" value={text} onChange={$[4] || ($[4] = e => setText(e.target.value))} /> : $[5]}
27 + <div className="tail">
28 + <button type="submit">Add</button>
29 + </div>
30 + </form> : $[6]}
31 + </div> : $[7];
32 +}
33 +let nextId = 3;
34 +const defaultTodo = "";
35 +const fallbackTodo = "oops";
compiler/forget/packages/demo-todolist-playground/src/forget/NeoAddTodoThemable.js new
+44
@@ -0,0 +1,44 @@
1 +import { useMemoCache } from "./useMemoCache";
2 +import React, { useState } from "react";
3 +export default function AddTodo(props) {
4 + let $ = useMemoCache(12);
5 + let prevProps = $[0];
6 + let c_props = !prevProps || prevProps !== props;
7 + if (c_props) $[0] = props;
8 + let c_setTodos = c_props && prevProps.setTodos !== props.setTodos;
9 + let c_themeColor = c_props && prevProps.themeColor !== props.themeColor;
10 + const [text, setText] = useState(defaultTodo);
11 + let c_text = $[1] !== text;
12 + if (c_text) $[1] = text;
13 + const handleAddTodo = c_setTodos ? $[2] = text => {
14 + props.setTodos(ts => [...ts, {
15 + id: nextId++,
16 + text: text,
17 + done: false
18 + }]);
19 + } : $[2];
20 + const bgGradient = c_themeColor ? $[3] = `linear-gradient(
21 + 209.21deg,
22 + ${props.themeColor}22 0%,
23 + ${props.themeColor}ee 100%
24 + )` : $[3];
25 + return c_text || c_setTodos || c_themeColor ? $[11] = <div className="AddTodo">
26 + {c_text || c_setTodos || c_themeColor ? $[10] = <form onSubmit={c_text || c_setTodos ? $[4] = e => {
27 + e.preventDefault();
28 + setText(defaultTodo);
29 + handleAddTodo(text.trim() === "" ? fallbackTodo : text);
30 + } : $[4]}>
31 + {c_text ? $[6] = <input placeholder="Add todo" value={text} onChange={$[5] || ($[5] = e => setText(e.target.value))} /> : $[6]}
32 + {c_themeColor ? $[9] = <div className="tail">
33 + {c_themeColor ? $[8] = <button type="submit" style={c_themeColor ? $[7] = {
34 + background: bgGradient
35 + } : $[7]}>
36 + Add
37 + </button> : $[8]}
38 + </div> : $[9]}
39 + </form> : $[10]}
40 + </div> : $[11];
41 +}
42 +let nextId = 3;
43 +const defaultTodo = "";
44 +const fallbackTodo = "oops";
compiler/forget/packages/demo-todolist-playground/src/forget/NeoTask.js new
+41
@@ -0,0 +1,41 @@
1 +import { useMemoCache } from "./useMemoCache";
2 +import React, { useState, useRef } from "react";
3 +import CountBadge from "../Components/CountBadge";
4 +export default function Todo(props) {
5 + let $ = useMemoCache(6);
6 + let prevProps = $[0];
7 + let c_props = !prevProps || prevProps !== props;
8 + if (c_props) $[0] = props;
9 + let c_todo = c_props && prevProps.todo !== props.todo;
10 + let c_onChange = c_props && prevProps.onChange !== props.onChange;
11 + const inputRef = useRef(null);
12 + const count = useRef(0);
13 + const [isEditing, setIsEditing] = useState(false);
14 + let c_isEditing = $[1] !== isEditing;
15 + if (c_isEditing) $[1] = isEditing;
16 + const onSave = c_onChange || c_todo ? $[2] = e => {
17 + e.preventDefault();
18 + setIsEditing(false);
19 + props.onChange({ ...props.todo,
20 + text: inputRef.current.value
21 + });
22 + } : $[2];
23 + const todoBody = c_isEditing || c_todo || c_onChange ? $[3] = isEditing ? <form value={props.todo.text} onSubmit={onSave} onBlur={onSave}>
24 + <input ref={inputRef} defaultValue={props.todo.text} autoFocus />
25 + </form> : <div className={"TodoBody" + (props.todo.done ? " done" : "")} onClick={() => setIsEditing(true)}>
26 + {props.todo.text}
27 + </div> : $[3];
28 + const checkBox = c_isEditing || c_todo || c_onChange ? $[4] = !isEditing && <button className={props.todo.done ? "Checkbox done" : "Checkbox"} onClick={e => {
29 + e.target.blur();
30 + props.onChange({ ...props.todo,
31 + done: !props.todo.done
32 + });
33 + }}></button> : $[4];
34 + return c_isEditing || c_todo || c_onChange ? $[5] = <li className="Todo">
35 + {checkBox}
36 + {todoBody}
37 + <div className="tail">
38 + <CountBadge count={count.current++} type={"warning"} rounded />
39 + </div>
40 + </li> : $[5];
41 +}
compiler/forget/packages/demo-todolist-playground/src/forget/NeoTaskNoBadge.js new
+43
@@ -0,0 +1,43 @@
1 +import { useMemoCache } from "./useMemoCache";
2 +import React, { useState, useRef } from "react";
3 +import CountBadge from "../Components/CountBadge";
4 +/**
5 + * Until Forget supports default props...
6 + */
7 +
8 +export default function Todo(props) {
9 + let $ = useMemoCache(6);
10 + let prevProps = $[0];
11 + let c_props = !prevProps || prevProps !== props;
12 + if (c_props) $[0] = props;
13 + let c_todo = c_props && prevProps.todo !== props.todo;
14 + let c_onChange = c_props && prevProps.onChange !== props.onChange;
15 + const inputRef = useRef(null);
16 + const count = useRef(0);
17 + const [isEditing, setIsEditing] = useState(false);
18 + let c_isEditing = $[1] !== isEditing;
19 + if (c_isEditing) $[1] = isEditing;
20 + const onSave = c_onChange || c_todo ? $[2] = e => {
21 + e.preventDefault();
22 + setIsEditing(false);
23 + props.onChange({ ...props.todo,
24 + text: inputRef.current.value
25 + });
26 + } : $[2];
27 + const todoBody = c_isEditing || c_todo || c_onChange ? $[3] = isEditing ? <form value={props.todo.text} onSubmit={onSave} onBlur={onSave}>
28 + <input ref={inputRef} defaultValue={props.todo.text} autoFocus />
29 + </form> : <div className={"TodoBody" + (props.todo.done ? " done" : "")} onClick={() => setIsEditing(true)}>
30 + {props.todo.text}
31 + </div> : $[3];
32 + const checkBox = c_isEditing || c_todo || c_onChange ? $[4] = !isEditing && <button className={props.todo.done ? "Checkbox done" : "Checkbox"} onClick={e => {
33 + e.target.blur();
34 + props.onChange({ ...props.todo,
35 + done: !props.todo.done
36 + });
37 + }}></button> : $[4];
38 + return c_isEditing || c_todo || c_onChange ? $[5] = <li className="Todo">
39 + {checkBox}
40 + {todoBody}
41 + <div className="tail"></div>
42 + </li> : $[5];
43 +}
compiler/forget/packages/demo-todolist-playground/src/forget/NeoTodo.js new
+41
@@ -0,0 +1,41 @@
1 +import { useMemoCache } from "./useMemoCache";
2 +import React, { useState, useRef } from "react";
3 +import CountBadge from "../Components/CountBadge";
4 +export default function Todo(props) {
5 + let $ = useMemoCache(6);
6 + let prevProps = $[0];
7 + let c_props = !prevProps || prevProps !== props;
8 + if (c_props) $[0] = props;
9 + let c_todo = c_props && prevProps.todo !== props.todo;
10 + let c_onChange = c_props && prevProps.onChange !== props.onChange;
11 + const inputRef = useRef(null);
12 + const count = useRef(0);
13 + const [isEditing, setIsEditing] = useState(false);
14 + let c_isEditing = $[1] !== isEditing;
15 + if (c_isEditing) $[1] = isEditing;
16 + const onSave = c_onChange || c_todo ? $[2] = e => {
17 + e.preventDefault();
18 + setIsEditing(false);
19 + props.onChange({ ...props.todo,
20 + text: inputRef.current.value
21 + });
22 + } : $[2];
23 + const TodoBody = c_isEditing || c_todo || c_onChange ? $[3] = isEditing ? <form value={props.todo.text} onSubmit={onSave} onBlur={onSave}>
24 + <input ref={inputRef} defaultValue={props.todo.text} autoFocus />
25 + </form> : <div className={"TodoBody" + (props.todo.done ? " done" : "")} onClick={() => setIsEditing(true)}>
26 + {props.todo.text}
27 + </div> : $[3];
28 + const checkBox = c_isEditing || c_todo || c_onChange ? $[4] = !isEditing && <button className={props.todo.done ? "Checkbox done" : "Checkbox"} onClick={e => {
29 + e.target.blur();
30 + props.onChange({ ...props.todo,
31 + done: !props.todo.done
32 + });
33 + }}></button> : $[4];
34 + return c_isEditing || c_todo || c_onChange ? $[5] = <li className="Todo">
35 + {checkBox}
36 + {TodoBody}
37 + <div className="tail">
38 + <CountBadge count={count.current++} type={"warning"} rounded />
39 + </div>
40 + </li> : $[5];
41 +}
compiler/forget/packages/demo-todolist-playground/src/forget/NeoTodoNoBadge.js new
+43
@@ -0,0 +1,43 @@
1 +import { useMemoCache } from "./useMemoCache";
2 +import React, { useState, useRef } from "react";
3 +import CountBadge from "../Components/CountBadge";
4 +/**
5 + * Until Forget supports default props...
6 + */
7 +
8 +export default function Todo(props) {
9 + let $ = useMemoCache(6);
10 + let prevProps = $[0];
11 + let c_props = !prevProps || prevProps !== props;
12 + if (c_props) $[0] = props;
13 + let c_todo = c_props && prevProps.todo !== props.todo;
14 + let c_onChange = c_props && prevProps.onChange !== props.onChange;
15 + const inputRef = useRef(null);
16 + const count = useRef(0);
17 + const [isEditing, setIsEditing] = useState(false);
18 + let c_isEditing = $[1] !== isEditing;
19 + if (c_isEditing) $[1] = isEditing;
20 + const onSave = c_onChange ? $[2] = e => {
21 + e.preventDefault();
22 + setIsEditing(false);
23 + props.onChange({ ...Todo,
24 + text: inputRef.current.value
25 + });
26 + } : $[2];
27 + const TodoBody = c_isEditing || c_todo || c_onChange ? $[3] = isEditing ? <form value={props.todo.text} onSubmit={onSave} onBlur={onSave}>
28 + <input ref={inputRef} defaultValue={props.todo.text} autoFocus />
29 + </form> : <div className={"TodoBody" + (props.todo.done ? " done" : "")} onClick={() => setIsEditing(true)}>
30 + {props.todo.text}
31 + </div> : $[3];
32 + const checkBox = c_isEditing || c_todo || c_onChange ? $[4] = !isEditing && <button className={props.todo.done ? "Checkbox done" : "Checkbox"} onClick={e => {
33 + e.target.blur();
34 + props.onChange({ ...props.todo,
35 + done: !props.todo.done
36 + });
37 + }}></button> : $[4];
38 + return c_isEditing || c_todo || c_onChange ? $[5] = <li className="Todo">
39 + {checkBox}
40 + {TodoBody}
41 + <div className="tail"></div>
42 + </li> : $[5];
43 +}
compiler/forget/packages/demo-todolist-playground/src/forget/TaskBoardContext.js new
+75
@@ -0,0 +1,75 @@
1 +import { useMemoCache } from "./useMemoCache";
2 +import { createContext, useContext, useReducer } from "react";
3 +const TasksContext = createContext(null);
4 +const TasksDispatchContext = createContext(null);
5 +export function TasksProvider(props) {
6 + let $ = useMemoCache(4);
7 + let prevProps = $[0];
8 + let c_props = !prevProps || prevProps !== props;
9 + if (c_props) $[0] = props;
10 + let c_children = c_props && prevProps.children !== props.children;
11 + const [tasks, dispatch] = useReducer(tasksReducer, initialTasks);
12 + let c_tasks = $[1] !== tasks;
13 + if (c_tasks) $[1] = tasks;
14 + return c_tasks || c_children ? $[3] = <TasksContext.Provider value={tasks}>
15 + {c_children ? $[2] = <TasksDispatchContext.Provider value={dispatch}>
16 + {props.children}
17 + </TasksDispatchContext.Provider> : $[2]}
18 + </TasksContext.Provider> : $[3];
19 +}
20 +export function useTasks() {
21 + let $ = useMemoCache(1);
22 + return useContext(TasksContext);
23 +}
24 +export function useTasksDispatch() {
25 + let $ = useMemoCache(1);
26 + return useContext(TasksDispatchContext);
27 +}
28 +
29 +function tasksReducer(tasks, action) {
30 + switch (action.type) {
31 + case "added":
32 + {
33 + return [...tasks, {
34 + id: action.id,
35 + text: action.text,
36 + done: false
37 + }];
38 + }
39 +
40 + case "changed":
41 + {
42 + return tasks.map(t => {
43 + if (t.id === action.task.id) {
44 + return action.task;
45 + } else {
46 + return t;
47 + }
48 + });
49 + }
50 +
51 + case "deleted":
52 + {
53 + return tasks.filter(t => t.id !== action.id);
54 + }
55 +
56 + default:
57 + {
58 + throw Error("Unknown action: " + action.type);
59 + }
60 + }
61 +}
62 +
63 +const initialTasks = [{
64 + id: 0,
65 + text: "Buy milk",
66 + done: true
67 +}, {
68 + id: 1,
69 + text: "Eat tacos",
70 + done: false
71 +}, {
72 + id: 2,
73 + text: "Brew tea",
74 + done: false
75 +}];
compiler/forget/packages/demo-todolist-playground/src/forget/getFiltered.js new
+25
@@ -0,0 +1,25 @@
1 +import { useMemoCache } from "./useMemoCache";
2 +function delay() {
3 + let now = performance.now();
4 +
5 + while (performance.now() - now < 16) {// Artificial delay -- do nothing for 100ms
6 + }
7 +}
8 +
9 +export default function getFiltered(todos, visibility) {
10 + //delay()
11 + // This only works when there is only one counter unfortunately...
12 + const $filterCountBadge = document.querySelector(".FilterCountBanner .badge");
13 + if ($filterCountBadge) $filterCountBadge.textContent = parseInt($filterCountBadge.textContent) + 1;
14 +
15 + switch (visibility) {
16 + case "all":
17 + return todos;
18 +
19 + case "active":
20 + return todos.filter(t => !t.done);
21 +
22 + case "completed":
23 + return todos.filter(t => t.done);
24 + }
25 +}
compiler/forget/packages/demo-todolist-playground/src/forget/getUpdated.js new
+11
@@ -0,0 +1,11 @@
1 +import { useMemoCache } from "./useMemoCache";
2 +// Update an array in an immutable manner.
3 +export default function getUpdated(todos, newTodo) {
4 + return todos.map(t => {
5 + if (t.id === newTodo.id) {
6 + return newTodo;
7 + } else {
8 + return t;
9 + }
10 + }).filter(t => !!t.text);
11 +}
compiler/forget/packages/demo-todolist-playground/src/forget/initialTodos.js new
+15
@@ -0,0 +1,15 @@
1 +import { useMemoCache } from "./useMemoCache";
2 +const initialTodos = [{
3 + id: 0,
4 + text: "memo",
5 + done: true
6 +}, {
7 + id: 1,
8 + text: "useCallback",
9 + done: false
10 +}, {
11 + id: 2,
12 + text: "useMemo",
13 + done: false
14 +}];
15 +export default initialTodos;
compiler/forget/packages/demo-todolist-playground/src/forget/useMemoCache.js new
+8
@@ -0,0 +1,8 @@
1 +import { useRef } from "react";
2 +
3 +const placeholder = NaN;
4 +
5 +export function useMemoCache(i) {
6 + const ref = useRef(new Array(i).fill(placeholder));
7 + return ref.current;
8 +}
compiler/forget/packages/demo-todolist-playground/src/index.js new
+154
@@ -0,0 +1,154 @@
1 +import React, { StrictMode, useEffect, useState } from "react";
2 +import ReactDOM from "react-dom";
3 +import "./normalize.css";
4 +import "./styles.css";
5 +import "./plain.css";
6 +import "./neo.css";
7 +
8 +import Ch1 from "./source/Ch1";
9 +import Ch2 from "./source/Ch2";
10 +import Ch3 from "./source/Ch3";
11 +import Ch4 from "./source/Ch4";
12 +import Ch5 from "./source/Ch5";
13 +import Ch1Memo from "./source/Ch1.memo";
14 +import Ch2HalfMemo from "./source/Ch2.half.memo";
15 +import Ch2Memo from "./source/Ch2.memo";
16 +import Ch1Forget from "./forget/Ch1";
17 +import Ch2Forget from "./forget/Ch2";
18 +import Ch3Forget from "./forget/Ch3";
19 +import Ch4Forget from "./forget/Ch4";
20 +import Ch5Forget from "./forget/Ch5";
21 +import Neo0 from "./source/Neo0";
22 +import Neo1 from "./source/Neo1";
23 +import Neo1Memo from "./source/Neo1.memo";
24 +import Neo1Forget from "./forget/Neo1";
25 +import Neo2 from "./source/Neo2";
26 +import Neo2HalfMemo from "./source/Neo2.half.memo";
27 +import Neo2Forget from "./forget/Neo2";
28 +import Neo3 from "./source/Neo3";
29 +import Neo3HalfMemo from "./source/Neo3.half.memo";
30 +import Neo3Memo from "./source/Neo3.memo";
31 +import Neo3Forget from "./forget/Neo3";
32 +
33 +const apps = {
34 + Neo0,
35 + Neo1,
36 + Neo1Memo,
37 + Neo1Forget,
38 + Neo2,
39 + Neo2HalfMemo,
40 + Neo2Forget,
41 + Neo3,
42 + Neo3HalfMemo,
43 + Neo3Memo,
44 + Neo3Forget,
45 + Ch1,
46 + Ch1Memo,
47 + Ch1Forget,
48 + Ch2,
49 + Ch2HalfMemo,
50 + Ch2Memo,
51 + Ch2Forget,
52 + Ch3,
53 + Ch3Forget,
54 + Ch4,
55 + Ch4Forget,
56 + Ch5,
57 + Ch5Forget,
58 +};
59 +
60 +let lastApps;
61 +try {
62 + lastApps = JSON.parse(localStorage.getItem("apps"));
63 +} catch {
64 + localStorage.removeItem("apps");
65 +}
66 +const defaultApps = lastApps || ["Neo1", "Ch1"];
67 +
68 +function Dynamic({ appName, index, onChangeApp, onDelete }) {
69 + const [curAppName, setCurAppName] = useState(appName);
70 + const App = apps[curAppName];
71 + const app = App ? (
72 + <div className={curAppName?.startsWith("Neo") ? "Neo" : "Plain"}>
73 + <App />
74 + </div>
75 + ) : (
76 + <div className="Plain"> Wrong Value </div>
77 + );
78 + const onChange = e => {
79 + setCurAppName(e.target.value);
80 + onChangeApp(e.target.value, index);
81 + };
82 +
83 + return (
84 + <div>
85 + <select value={curAppName} onChange={onChange}>
86 + {Object.keys(apps).map(appName => (
87 + <option key={appName} value={appName}>
88 + {appName}
89 + </option>
90 + ))}
91 + </select>
92 + <button onClick={() => onDelete(index)}> Remove </button>
93 + {app}
94 + </div>
95 + );
96 +}
97 +
98 +function Root() {
99 + const [apps, setApps] = useState(defaultApps);
100 + const [count, setCount] = useState(0);
101 + const [zoom, setZoom] = useState(false);
102 + const handleAdd = () => setApps([...apps, "Neo1"]);
103 + const handleRerender = () => setCount(count + 1);
104 +
105 + const onChangeApp = (app, index) =>
106 + setApps(apps => apps.map((a, i) => (index === i ? app : a)));
107 +
108 + const onDelete = index => setApps(apps => apps.filter((_, i) => index !== i));
109 +
110 + const onZoomChange = e => setZoom(e.target.checked);
111 +
112 + const zoomStyle = zoom
113 + ? {
114 + transform: "scale(1.5)",
115 + transformOrigin: "top",
116 + }
117 + : {};
118 +
119 + useEffect(() => {
120 + localStorage.setItem("apps", JSON.stringify(apps));
121 + }, [apps]);
122 +
123 + return (
124 + <>
125 + <h2 style={{ color: "#fffd" }}> ⚛️ Forget Playground </h2>
126 + <button onClick={handleAdd}> Add Into Comparison </button>
127 + <button onClick={handleRerender}>Rerender Root: #{count}</button>
128 + <label style={{ color: "#fffd" }}>
129 + <input type="checkbox" checked={zoom} onChange={onZoomChange} />
130 + Zoom For Recording
131 + </label>
132 + <div className="row" style={zoomStyle}>
133 + {apps.map((app, index) => (
134 + <div key={index} className="column">
135 + <Dynamic
136 + appName={app}
137 + index={index}
138 + onChangeApp={onChangeApp}
139 + onDelete={onDelete}
140 + />
141 + </div>
142 + ))}
143 + </div>
144 + </>
145 + );
146 +}
147 +
148 +const rootElement = document.getElementById("root");
149 +ReactDOM.render(
150 + <StrictMode>
151 + <Root />
152 + </StrictMode>,
153 + rootElement
154 +);
compiler/forget/packages/demo-todolist-playground/src/neo.css new
+300
@@ -0,0 +1,300 @@
1 +.Neo {
2 + font-family: "Optimistic Display App", "Open Sans", -apple-system,
3 + BlinkMacSystemFont, "Helvetica Neue", sans-serif !important;
4 +}
5 +
6 +.Neo code {
7 + font-family: "Iosevka SS05";
8 + padding-right: 6px;
9 +}
10 +
11 +.TodoListApp {
12 + min-width: 320px;
13 + max-width: 320px;
14 + position: relative;
15 + /* overflow: hidden; */
16 + color: white;
17 + padding: 16px;
18 + border-radius: 24px;
19 + margin-top: 96px;
20 + /* for Neo1 */
21 + background: linear-gradient(
22 + 209.21deg,
23 + rgb(8, 126, 164) 13.57%,
24 + rgb(4, 89, 117) 98.38%
25 + );
26 + box-shadow: 0px 0.8px 2px rgba(0, 0, 0, 0.032),
27 + 0px 2.7px 6.7px rgba(0, 0, 0, 0.048), 0px 12px 30px rgba(0, 0, 0, 0.08);
28 +}
29 +
30 +.TodoListApp header {
31 + height: auto;
32 + position: relative;
33 + display: flex;
34 + justify-content: flex-start;
35 + align-items: center;
36 + margin-bottom: 12px;
37 +}
38 +
39 +.TodoListApp .FilterCountBanner {
40 + display: flex;
41 + align-items: center;
42 + justify-content: center;
43 + color: #fffc;
44 + font-size: 14.5px;
45 + height: 40px;
46 + position: absolute;
47 + width: 100%;
48 + left: 0;
49 + top: -40px;
50 +}
51 +
52 +.TodoListApp .FilterCountBanner .badge {
53 + margin: 0 6px;
54 +}
55 +
56 +input[type="color"].ColorPicker {
57 + width: auto;
58 + height: 40px;
59 + border: none;
60 + cursor: pointer;
61 + background-color: transparent;
62 + border-radius: 50%;
63 + display: flex;
64 + align-items: center;
65 + margin-right: 10px;
66 +}
67 +
68 +input[type="color"]::-webkit-color-swatch-wrapper {
69 + width: 34px;
70 + height: 34px;
71 + padding: 0;
72 + border-radius: 50%;
73 +}
74 +
75 +input[type="color"]::-webkit-color-swatch {
76 + border: none;
77 + border-radius: 50%;
78 +}
79 +
80 +.ColorPicker span {
81 + line-height: 32px;
82 + position: absolute;
83 + top: 0;
84 + right: 6px;
85 + font-size: 14px;
86 + /* click through */
87 + pointer-events: none;
88 +}
89 +
90 +.AddTodo,
91 +.Todo,
92 +.VisibilityFilter {
93 + transition: background-color 0.3s ease;
94 + display: flex;
95 + align-items: center;
96 + border-radius: 24px;
97 + font-size: 17px;
98 + color: #fffd;
99 + background-color: #0001;
100 + padding: 0px 18px;
101 + min-height: 56px;
102 + margin-bottom: 12px;
103 + flex-wrap: nowrap;
104 +}
105 +
106 +.VisibilityFilter {
107 + min-height: auto;
108 + margin: 0px;
109 + padding: 0 12px;
110 + display: flex;
111 + justify-content: flex-start;
112 + align-items: center;
113 + flex-wrap: nowrap;
114 +}
115 +
116 +.AddTodo {
117 + margin-bottom: 0px;
118 +}
119 +
120 +/* .Todo:last-of-type {
121 + margin-bottom: 0px;
122 +} */
123 +
124 +.Todo:hover,
125 +.AddTodo:hover {
126 + background-color: #0002;
127 +}
128 +
129 +.Todo:focus-within,
130 +.AddTodo:focus-within {
131 + background-color: #0003;
132 + box-shadow: rgb(255 255 255 / 20%) 0px 0px 0px 0.5px inset;
133 +}
134 +
135 +.Todo input,
136 +.AddTodo input {
137 + width: 100%;
138 + flex: 1 1;
139 + color: rgb(235, 236, 240);
140 + background-color: transparent;
141 + border: none;
142 + outline: 0px;
143 +}
144 +
145 +.Todo input,
146 +.Todo .TodoBody,
147 +.AddTodo input {
148 + padding: 18px 0;
149 +}
150 +
151 +.Select {
152 + display: flex;
153 + justify-content: space-evenly;
154 + flex: 1;
155 + align-items: center;
156 + flex-wrap: nowrap;
157 + border: none;
158 + border-radius: 18px;
159 +}
160 +
161 +.AddTodo button,
162 +.Select button {
163 + cursor: pointer;
164 + height: 40px;
165 + width: auto;
166 + border: none;
167 + border-radius: 18px;
168 + padding: 0 14px;
169 + transition: all 0.3s ease;
170 + color: #fffb;
171 + margin-right: -9px;
172 + /* For Neo1 */
173 + background: linear-gradient(
174 + 209.21deg,
175 + rgba(4, 89, 117, 0.133) 0%,
176 + rgba(4, 89, 117, 0.933) 100%
177 + );
178 + box-shadow: rgb(255 255 255 / 20%) 0px 0px 0px 0.5px inset,
179 + rgb(23 0 102 / 20%) 0px 20px 40px, rgb(0 0 0 / 10%) 0px 1px 3px;
180 +}
181 +
182 +.Select button {
183 + margin: 0;
184 + background: transparent;
185 + box-shadow: none;
186 + color: #fff7;
187 + font-size: 14.5px;
188 + padding: 0 4px;
189 +}
190 +
191 +.Select button.selected {
192 + color: #fffc;
193 +}
194 +
195 +.Select button:hover {
196 + color: #fffc;
197 +}
198 +
199 +.AddTodo button:hover {
200 + color: #fffc;
201 + box-shadow: rgb(255 255 255 / 20%) 0px 0px 0px 0.5px inset,
202 + rgb(23 0 102 / 30%) 0px 40px 80px, rgb(0 0 0 / 30%) 0px 10px 30px;
203 +}
204 +
205 +.AddTodo form,
206 +.Todo form,
207 +.Todo .TodoBody {
208 + display: flex;
209 + cursor: pointer;
210 + flex: 1;
211 + align-items: center;
212 + overflow-wrap: anywhere;
213 +}
214 +
215 +.AddTodo input::placeholder {
216 + color: #fff7;
217 +}
218 +
219 +.Todo .done {
220 + text-decoration: line-through;
221 + font-style: italic;
222 + color: #fff7;
223 +}
224 +
225 +.Todo .Checkbox {
226 + position: relative;
227 + display: flex;
228 + justify-content: center;
229 + align-items: center;
230 + width: 22px;
231 + height: 22px;
232 + padding: 0px;
233 + border: none;
234 + cursor: pointer;
235 + background-color: transparent;
236 + border-radius: 50%;
237 + border: 0.5px solid #fff3;
238 + margin: 0px;
239 + margin-right: 12px;
240 +}
241 +
242 +.Todo .Checkbox.done {
243 + border: 0.5px solid #fff5;
244 +}
245 +
246 +.Todo .Checkbox.done::after {
247 + content: "";
248 + width: 16px;
249 + height: 16px;
250 + position: absolute;
251 + border-radius: 50%;
252 + background-color: #fffc;
253 +}
254 +
255 +.tail {
256 + margin-left: 8px;
257 + justify-content: flex-end;
258 +}
259 +
260 +.VisibilityFilter {
261 + flex: 1;
262 +}
263 +
264 +.VisibilityFilter .tail {
265 + margin-left: 0px;
266 + display: flex;
267 +}
268 +
269 +/*
270 + * https://getbootstrap.com/docs/5.1/components/badge/
271 + */
272 +
273 +.badge {
274 + /* so width won't change when bumping. */
275 + font-family: "Iosevka SS05", menlo, monospace;
276 + display: inline-block;
277 + padding: 0.35em 0.65em;
278 + font-size: 13.5px;
279 + font-weight: 700;
280 + line-height: 1;
281 + color: #fff;
282 + text-align: center;
283 + white-space: nowrap;
284 + vertical-align: baseline;
285 + border-radius: 0.25rem;
286 +}
287 +
288 +.rounded-pill {
289 + border-radius: 50rem !important;
290 +}
291 +
292 +.badge-danger {
293 + color: #fff;
294 + background-color: #dc3545;
295 +}
296 +
297 +.badge-warning {
298 + color: #212529;
299 + background-color: #ffc107;
300 +}
compiler/forget/packages/demo-todolist-playground/src/normalize.css new
+351
@@ -0,0 +1,351 @@
1 +/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */
2 +
3 +/* Document
4 + ========================================================================== */
5 +
6 +/**
7 + * 1. Correct the line height in all browsers.
8 + * 2. Prevent adjustments of font size after orientation changes in iOS.
9 + */
10 +
11 +html {
12 + line-height: 1.15; /* 1 */
13 + -webkit-text-size-adjust: 100%; /* 2 */
14 +}
15 +
16 +/* Sections
17 + ========================================================================== */
18 +
19 +/**
20 + * Remove the margin in all browsers.
21 + */
22 +
23 +body {
24 + margin: 0;
25 +}
26 +
27 +/**
28 + * Render the `main` element consistently in IE.
29 + */
30 +
31 +main {
32 + display: block;
33 +}
34 +
35 +/**
36 + * Correct the font size and margin on `h1` elements within `section` and
37 + * `article` contexts in Chrome, Firefox, and Safari.
38 + */
39 +
40 +h1 {
41 + font-size: 2em;
42 + margin: 0.67em 0;
43 +}
44 +
45 +/* Grouping content
46 + ========================================================================== */
47 +
48 +/**
49 + * 1. Add the correct box sizing in Firefox.
50 + * 2. Show the overflow in Edge and IE.
51 + */
52 +
53 +hr {
54 + box-sizing: content-box; /* 1 */
55 + height: 0; /* 1 */
56 + overflow: visible; /* 2 */
57 +}
58 +
59 +/**
60 + * 1. Correct the inheritance and scaling of font size in all browsers.
61 + * 2. Correct the odd `em` font sizing in all browsers.
62 + */
63 +
64 +pre {
65 + font-family: monospace, monospace; /* 1 */
66 + font-size: 1em; /* 2 */
67 +}
68 +
69 +/* Text-level semantics
70 + ========================================================================== */
71 +
72 +/**
73 + * Remove the gray background on active links in IE 10.
74 + */
75 +
76 +a {
77 + background-color: transparent;
78 +}
79 +
80 +/**
81 + * 1. Remove the bottom border in Chrome 57-
82 + * 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari.
83 + */
84 +
85 +abbr[title] {
86 + border-bottom: none; /* 1 */
87 + text-decoration: underline; /* 2 */
88 + text-decoration: underline dotted; /* 2 */
89 +}
90 +
91 +/**
92 + * Add the correct font weight in Chrome, Edge, and Safari.
93 + */
94 +
95 +b,
96 +strong {
97 + font-weight: bolder;
98 +}
99 +
100 +/**
101 + * 1. Correct the inheritance and scaling of font size in all browsers.
102 + * 2. Correct the odd `em` font sizing in all browsers.
103 + */
104 +
105 +code,
106 +kbd,
107 +samp {
108 + font-family: monospace, monospace; /* 1 */
109 + font-size: 1em; /* 2 */
110 +}
111 +
112 +/**
113 + * Add the correct font size in all browsers.
114 + */
115 +
116 +small {
117 + font-size: 80%;
118 +}
119 +
120 +/**
121 + * Prevent `sub` and `sup` elements from affecting the line height in
122 + * all browsers.
123 + */
124 +
125 +sub,
126 +sup {
127 + font-size: 75%;
128 + line-height: 0;
129 + position: relative;
130 + vertical-align: baseline;
131 +}
132 +
133 +sub {
134 + bottom: -0.25em;
135 +}
136 +
137 +sup {
138 + top: -0.5em;
139 +}
140 +
141 +/* Embedded content
142 + ========================================================================== */
143 +
144 +/**
145 + * Remove the border on images inside links in IE 10.
146 + */
147 +
148 +img {
149 + border-style: none;
150 +}
151 +
152 +/* Forms
153 + ========================================================================== */
154 +
155 +/**
156 + * 1. Change the font styles in all browsers.
157 + * 2. Remove the margin in Firefox and Safari.
158 + */
159 +
160 +button,
161 +input,
162 +optgroup,
163 +select,
164 +textarea {
165 + font-family: inherit; /* 1 */
166 + font-size: 100%; /* 1 */
167 + line-height: 1.15; /* 1 */
168 + margin: 0; /* 2 */
169 +}
170 +
171 +/**
172 + * Show the overflow in IE.
173 + * 1. Show the overflow in Edge.
174 + */
175 +
176 +button,
177 +input {
178 + /* 1 */
179 + overflow: visible;
180 +}
181 +
182 +/**
183 + * Remove the inheritance of text transform in Edge, Firefox, and IE.
184 + * 1. Remove the inheritance of text transform in Firefox.
185 + */
186 +
187 +button,
188 +select {
189 + /* 1 */
190 + text-transform: none;
191 +}
192 +
193 +/**
194 + * Correct the inability to style clickable types in iOS and Safari.
195 + */
196 +
197 +button,
198 +[type="button"],
199 +[type="reset"],
200 +[type="submit"] {
201 + -webkit-appearance: button;
202 +}
203 +
204 +/**
205 + * Remove the inner border and padding in Firefox.
206 + */
207 +
208 +button::-moz-focus-inner,
209 +[type="button"]::-moz-focus-inner,
210 +[type="reset"]::-moz-focus-inner,
211 +[type="submit"]::-moz-focus-inner {
212 + border-style: none;
213 + padding: 0;
214 +}
215 +
216 +/**
217 + * Restore the focus styles unset by the previous rule.
218 + */
219 +
220 +button:-moz-focusring,
221 +[type="button"]:-moz-focusring,
222 +[type="reset"]:-moz-focusring,
223 +[type="submit"]:-moz-focusring {
224 + outline: 1px dotted ButtonText;
225 +}
226 +
227 +/**
228 + * Correct the padding in Firefox.
229 + */
230 +
231 +fieldset {
232 + padding: 0.35em 0.75em 0.625em;
233 +}
234 +
235 +/**
236 + * 1. Correct the text wrapping in Edge and IE.
237 + * 2. Correct the color inheritance from `fieldset` elements in IE.
238 + * 3. Remove the padding so developers are not caught out when they zero out
239 + * `fieldset` elements in all browsers.
240 + */
241 +
242 +legend {
243 + box-sizing: border-box; /* 1 */
244 + color: inherit; /* 2 */
245 + display: table; /* 1 */
246 + max-width: 100%; /* 1 */
247 + padding: 0; /* 3 */
248 + white-space: normal; /* 1 */
249 +}
250 +
251 +/**
252 + * Add the correct vertical alignment in Chrome, Firefox, and Opera.
253 + */
254 +
255 +progress {
256 + vertical-align: baseline;
257 +}
258 +
259 +/**
260 + * Remove the default vertical scrollbar in IE 10+.
261 + */
262 +
263 +textarea {
264 + overflow: auto;
265 +}
266 +
267 +/**
268 + * 1. Add the correct box sizing in IE 10.
269 + * 2. Remove the padding in IE 10.
270 + */
271 +
272 +[type="checkbox"],
273 +[type="radio"] {
274 + box-sizing: border-box; /* 1 */
275 + padding: 0; /* 2 */
276 +}
277 +
278 +/**
279 + * Correct the cursor style of increment and decrement buttons in Chrome.
280 + */
281 +
282 +[type="number"]::-webkit-inner-spin-button,
283 +[type="number"]::-webkit-outer-spin-button {
284 + height: auto;
285 +}
286 +
287 +/**
288 + * 1. Correct the odd appearance in Chrome and Safari.
289 + * 2. Correct the outline style in Safari.
290 + */
291 +
292 +[type="search"] {
293 + -webkit-appearance: textfield; /* 1 */
294 + outline-offset: -2px; /* 2 */
295 +}
296 +
297 +/**
298 + * Remove the inner padding in Chrome and Safari on macOS.
299 + */
300 +
301 +[type="search"]::-webkit-search-decoration {
302 + -webkit-appearance: none;
303 +}
304 +
305 +/**
306 + * 1. Correct the inability to style clickable types in iOS and Safari.
307 + * 2. Change font properties to `inherit` in Safari.
308 + */
309 +
310 +::-webkit-file-upload-button {
311 + -webkit-appearance: button; /* 1 */
312 + font: inherit; /* 2 */
313 +}
314 +
315 +/* Interactive
316 + ========================================================================== */
317 +
318 +/*
319 + * Add the correct display in Edge, IE 10+, and Firefox.
320 + */
321 +
322 +details {
323 + display: block;
324 +}
325 +
326 +/*
327 + * Add the correct display in all browsers.
328 + */
329 +
330 +summary {
331 + display: list-item;
332 +}
333 +
334 +/* Misc
335 + ========================================================================== */
336 +
337 +/**
338 + * Add the correct display in IE 10+.
339 + */
340 +
341 +template {
342 + display: none;
343 +}
344 +
345 +/**
346 + * Add the correct display in IE 10.
347 + */
348 +
349 +[hidden] {
350 + display: none;
351 +}
compiler/forget/packages/demo-todolist-playground/src/plain.css new
+19
@@ -0,0 +1,19 @@
1 +.Plain {
2 + width: 320px;
3 + background-color: white;
4 + padding: 24px 18px;
5 + border-radius: 8px;
6 + margin-top: 96px;
7 + box-shadow: 0px 0.8px 2px rgba(0, 0, 0, 0.032),
8 + 0px 2.7px 6.7px rgba(0, 0, 0, 0.048), 0px 12px 30px rgba(0, 0, 0, 0.08);
9 +}
10 +
11 +.Plain input[type="checkbox"] {
12 + margin-right: 4px;
13 +}
14 +
15 +.Plain .Select .badge {
16 + position: relative;
17 + transform: translate(-50%, -50%) !important;
18 + top: -39px;
19 +}
compiler/forget/packages/demo-todolist-playground/src/public/index.html new
+11
@@ -0,0 +1,11 @@
1 +<!DOCTYPE html>
2 +<html lang="en">
3 + <head>
4 + <meta charset="UTF-8">
5 + <meta name="viewport" content="width=device-width, initial-scale=1.0">
6 + <title>Document</title>
7 + </head>
8 + <body>
9 + <div id="root"></div>
10 + </body>
11 +</html>
\ No newline at end of file
compiler/forget/packages/demo-todolist-playground/src/source/Ch1.js new
+118
@@ -0,0 +1,118 @@
1 +import React, { useState, useRef } from "react";
2 +
3 +/**
4 + * Ch1 Minimal TaskBoard
5 + *
6 + * Motivation:
7 + * We want to start with just `useState` and _pass things done_.
8 + *
9 + * Inspired by
10 + * - Rich Harris's https://rethinking-reactivity.surge.sh/#slide=18
11 + * - https://beta.reactjs.org/learn/extracting-state-logic-into-a-reducer
12 + * - before we extract event handler to reducer.
13 + * - https://immerjs.github.io/immer/example-setstate
14 + *
15 + * Now, the <TaskBoard /> contains:
16 + * - useState
17 + * - useCallback
18 + * - React.memo(<Child />)
19 + */
20 +
21 +function TaskBoard() {
22 + const [tasks, setTasks] = useState(initialTasks);
23 + const onChangeTask = task =>
24 + setTasks(ts => ts.map(t => (t.id === task.id ? task : t)));
25 +
26 + return (
27 + <div>
28 + <AddTask setTasks={setTasks} />
29 + {tasks.map(task => (
30 + <Task key={task.id} task={task} onChange={onChangeTask} />
31 + ))}
32 + </div>
33 + );
34 +}
35 +
36 +export default TaskBoard;
37 +
38 +function Task({ task, onChange }) {
39 + const count = useRef(0);
40 + const [isEditing, setIsEditing] = useState(false);
41 + const taskContent = isEditing ? (
42 + <>
43 + <input
44 + value={task.text}
45 + onChange={e => {
46 + onChange({
47 + ...task,
48 + text: e.target.value,
49 + });
50 + }}
51 + />
52 + <button onClick={() => setIsEditing(false)}>Save</button>
53 + </>
54 + ) : (
55 + <>
56 + {task.text}
57 + <button onClick={() => setIsEditing(true)}>Edit</button>
58 + </>
59 + );
60 + return (
61 + <li>
62 + <label>
63 + <input
64 + type="checkbox"
65 + checked={task.done}
66 + onChange={e => {
67 + onChange({
68 + ...task,
69 + done: e.target.checked,
70 + });
71 + }}
72 + />
73 + {taskContent}
74 + {count.current++}
75 + </label>
76 + </li>
77 + );
78 +}
79 +
80 +let nextId = 3;
81 +const defaultTask = "Code bugs";
82 +const initialTasks = [
83 + { id: 0, text: "Buy milk", done: true },
84 + { id: 1, text: "Eat tacos", done: false },
85 + { id: 2, text: "Brew tea", done: false },
86 +];
87 +
88 +function AddTask({ setTasks }) {
89 + const [text, setText] = useState(defaultTask);
90 + const handleAddTask = text => {
91 + setTasks(ts => [
92 + ...ts,
93 + {
94 + id: nextId++,
95 + text: text,
96 + done: false,
97 + },
98 + ]);
99 + };
100 +
101 + return (
102 + <>
103 + <input
104 + placeholder="Add task"
105 + value={text}
106 + onChange={e => setText(e.target.value)}
107 + />
108 + <button
109 + onClick={() => {
110 + setText(defaultTask);
111 + handleAddTask(text);
112 + }}
113 + >
114 + Add
115 + </button>
116 + </>
117 + );
118 +}
compiler/forget/packages/demo-todolist-playground/src/source/Ch1.memo.js new
+121
@@ -0,0 +1,121 @@
1 +import React, { useCallback, useState, useRef } from "react";
2 +
3 +/**
4 + * Ch1 Minimal TaskBoard
5 + *
6 + * Motivation:
7 + * We want to start with just `useState` and _pass things done_.
8 + *
9 + * Inspired by
10 + * - Rich Harris's https://rethinking-reactivity.surge.sh/#slide=18
11 + * - https://beta.reactjs.org/learn/extracting-state-logic-into-a-reducer
12 + * - before we extract event handler to reducer.
13 + *
14 + * Now, the <TaskBoard /> contains:
15 + * - useState
16 + * - useCallback
17 + * - React.memo(<Child />)
18 + */
19 +
20 +// const Task = React.memo(({ task, onChange }) => { ... });
21 +
22 +function TaskBoard() {
23 + const [tasks, setTasks] = useState(initialTasks);
24 + const onChangeTask = useCallback(
25 + task => setTasks(ts => ts.map(t => (t.id === task.id ? task : t))),
26 + []
27 + );
28 +
29 + return (
30 + <div>
31 + <AddTask setTasks={setTasks} />
32 + {tasks.map(task => (
33 + <Task key={task.id} task={task} onChange={onChangeTask} />
34 + ))}
35 + </div>
36 + );
37 +}
38 +
39 +export default TaskBoard;
40 +
41 +const Task = React.memo(({ task, onChange }) => {
42 + const count = useRef(0);
43 + const [isEditing, setIsEditing] = useState(false);
44 + const taskContent = isEditing ? (
45 + <>
46 + <input
47 + value={task.text}
48 + onChange={e => {
49 + onChange({
50 + ...task,
51 + text: e.target.value,
52 + });
53 + }}
54 + />
55 + <button onClick={() => setIsEditing(false)}>Save</button>
56 + </>
57 + ) : (
58 + <>
59 + {task.text}
60 + <button onClick={() => setIsEditing(true)}>Edit</button>
61 + </>
62 + );
63 + return (
64 + <li>
65 + <label>
66 + <input
67 + type="checkbox"
68 + checked={task.done}
69 + onChange={e => {
70 + onChange({
71 + ...task,
72 + done: e.target.checked,
73 + });
74 + }}
75 + />
76 + {taskContent}
77 + {count.current++}
78 + </label>
79 + </li>
80 + );
81 +});
82 +
83 +let nextId = 3;
84 +const defaultTask = "Code bugs";
85 +const initialTasks = [
86 + { id: 0, text: "Buy milk", done: true },
87 + { id: 1, text: "Eat tacos", done: false },
88 + { id: 2, text: "Brew tea", done: false },
89 +];
90 +
91 +function AddTask({ setTasks }) {
92 + const [text, setText] = useState(defaultTask);
93 + const handleAddTask = text => {
94 + setTasks(ts => [
95 + ...ts,
96 + {
97 + id: nextId++,
98 + text: text,
99 + done: false,
100 + },
101 + ]);
102 + };
103 +
104 + return (
105 + <>
106 + <input
107 + placeholder="Add task"
108 + value={text}
109 + onChange={e => setText(e.target.value)}
110 + />
111 + <button
112 + onClick={() => {
113 + setText(defaultTask);
114 + handleAddTask(text);
115 + }}
116 + >
117 + Add
118 + </button>
119 + </>
120 + );
121 +}
compiler/forget/packages/demo-todolist-playground/src/source/Ch2.half.memo.js new
+158
@@ -0,0 +1,158 @@
1 +import React, { useState, useRef, useCallback } from "react";
2 +
3 +/**
4 + * Ch2 TaskBoard with VisibilityFilter
5 + *
6 + * Motivation:
7 + * Add computation that need `useMemo` and props
8 + *
9 + * Now, the <TaskBoard /> contains:
10 + * - props
11 + * - useState
12 + * - useCallback
13 + * - useMemo
14 + * - React.memo(<Child />)
15 + *
16 + * Now, the <TaskBoard /> itself needs to be `React.memo` as well to prevent
17 + * from Parent being re-rendered.
18 + * - also, you need to make sure the `getFilteredTasks` is stable as well...
19 + */
20 +
21 +export default FilterableTaskBoard;
22 +
23 +function FilterableTaskBoard() {
24 + const count = useRef(0);
25 + const countRef = useRef(null);
26 + const [visibility, setVisibility] = useState("all");
27 + const getFilteredTasks = tasks => {
28 + // Gosh I'm really coding against React here.
29 + // Invoke in next tick so DOM commits have been made...
30 + // otherwise we'll miss the update from the initial render.
31 + // Use `useState` here will cause infinite rendering loop.
32 + queueMicrotask(() => (countRef.current.textContent = count.current++));
33 + switch (visibility) {
34 + case "all":
35 + return tasks;
36 + case "active":
37 + return tasks.filter(t => !t.done);
38 + case "completed":
39 + return tasks.filter(t => t.done);
40 + }
41 + };
42 +
43 + return (
44 + <>
45 + <select
46 + size="3"
47 + value={visibility}
48 + onChange={e => setVisibility(e.target.value)}
49 + >
50 + <option value="all">All</option>
51 + <option value="active">Active</option>
52 + <option value="completed">Completed</option>
53 + </select>
54 + <span ref={countRef}>{count.current}</span>
55 + <TaskBoard getFilteredTasks={getFilteredTasks} />
56 + </>
57 + );
58 +}
59 +
60 +function TaskBoard({ getFilteredTasks }) {
61 + const [tasks, setTasks] = useState(initialTasks);
62 + const onChangeTask = useCallback(
63 + task => setTasks(ts => ts.map(t => (t.id === task.id ? task : t))),
64 + []
65 + );
66 + const filtered = getFilteredTasks(tasks);
67 +
68 + return (
69 + <div>
70 + <AddTask setTasks={setTasks} />
71 + {filtered.map(task => (
72 + <Task key={task.id} task={task} onChange={onChangeTask} />
73 + ))}
74 + </div>
75 + );
76 +}
77 +
78 +const Task = React.memo(({ task, onChange }) => {
79 + const count = useRef(0);
80 + const [isEditing, setIsEditing] = useState(false);
81 + const taskContent = isEditing ? (
82 + <>
83 + <input
84 + value={task.text}
85 + onChange={e => {
86 + onChange({
87 + ...task,
88 + text: e.target.value,
89 + });
90 + }}
91 + />
92 + <button onClick={() => setIsEditing(false)}>Save</button>
93 + </>
94 + ) : (
95 + <>
96 + {task.text}
97 + <button onClick={() => setIsEditing(true)}>Edit</button>
98 + </>
99 + );
100 + return (
101 + <li>
102 + <label>
103 + <input
104 + type="checkbox"
105 + checked={task.done}
106 + onChange={e => {
107 + onChange({
108 + ...task,
109 + done: e.target.checked,
110 + });
111 + }}
112 + />
113 + {taskContent}
114 + {count.current++}
115 + </label>
116 + </li>
117 + );
118 +});
119 +
120 +let nextId = 3;
121 +const defaultTask = "Code bugs";
122 +const initialTasks = [
123 + { id: 0, text: "Buy milk", done: true },
124 + { id: 1, text: "Eat tacos", done: false },
125 + { id: 2, text: "Brew tea", done: false },
126 +];
127 +
128 +function AddTask({ setTasks }) {
129 + const [text, setText] = useState(defaultTask);
130 + const handleAddTask = text => {
131 + setTasks(ts => [
132 + ...ts,
133 + {
134 + id: nextId++,
135 + text: text,
136 + done: false,
137 + },
138 + ]);
139 + };
140 +
141 + return (
142 + <>
143 + <input
144 + placeholder="Add task"
145 + value={text}
146 + onChange={e => setText(e.target.value)}
147 + />
148 + <button
149 + onClick={() => {
150 + setText(defaultTask);
151 + handleAddTask(text);
152 + }}
153 + >
154 + Add
155 + </button>
156 + </>
157 + );
158 +}
compiler/forget/packages/demo-todolist-playground/src/source/Ch2.js new
+157
@@ -0,0 +1,157 @@
1 +import React, { useState, useRef } from "react";
2 +
3 +/**
4 + * Ch2 TaskBoard with VisibilityFilter
5 + *
6 + * Motivation:
7 + * Add computation that need `useMemo` and props
8 + *
9 + * Now, the <TaskBoard /> contains:
10 + * - props
11 + * - useState
12 + * - useCallback
13 + * - useMemo
14 + * - React.memo(<Child />)
15 + *
16 + * Now, the <TaskBoard /> itself needs to be `React.memo` as well to prevent
17 + * from Parent being re-rendered.
18 + * - also, you need to make sure the `getFilteredTasks` is stable as well...
19 + */
20 +
21 +export default FilterableTaskBoard;
22 +
23 +function FilterableTaskBoard() {
24 + const count = useRef(0);
25 + const countRef = useRef(null);
26 + const [visibility, setVisibility] = useState("all");
27 + const getFilteredTasks = tasks => {
28 + // Gosh I'm really coding against React here.
29 + // Invoke in next tick so DOM commits have been made...
30 + // otherwise we'll miss the update from the initial render.
31 + // Use `useState` here will cause infinite rendering loop.
32 + count.current++;
33 + queueMicrotask(() => (countRef.current.textContent = count.current));
34 + switch (visibility) {
35 + case "all":
36 + return tasks;
37 + case "active":
38 + return tasks.filter(t => !t.done);
39 + case "completed":
40 + return tasks.filter(t => t.done);
41 + }
42 + };
43 +
44 + return (
45 + <>
46 + <select
47 + size="3"
48 + value={visibility}
49 + onChange={e => setVisibility(e.target.value)}
50 + >
51 + <option value="all">All</option>
52 + <option value="active">Active</option>
53 + <option value="completed">Completed</option>
54 + </select>
55 + <span ref={countRef}>{count.current}</span>
56 + <TaskBoard getFilteredTasks={getFilteredTasks} />
57 + </>
58 + );
59 +}
60 +
61 +const TaskBoard = ({ getFilteredTasks }) => {
62 + const [tasks, setTasks] = useState(initialTasks);
63 + const onChangeTask = task =>
64 + setTasks(ts => ts.map(t => (t.id === task.id ? task : t)));
65 + const filtered = getFilteredTasks(tasks);
66 +
67 + return (
68 + <div>
69 + <AddTask setTasks={setTasks} />
70 + {filtered.map(task => (
71 + <Task key={task.id} task={task} onChange={onChangeTask} />
72 + ))}
73 + </div>
74 + );
75 +};
76 +
77 +function Task({ task, onChange }) {
78 + const count = useRef(0);
79 + const [isEditing, setIsEditing] = useState(false);
80 + const taskContent = isEditing ? (
81 + <>
82 + <input
83 + value={task.text}
84 + onChange={e => {
85 + onChange({
86 + ...task,
87 + text: e.target.value,
88 + });
89 + }}
90 + />
91 + <button onClick={() => setIsEditing(false)}>Save</button>
92 + </>
93 + ) : (
94 + <>
95 + {task.text}
96 + <button onClick={() => setIsEditing(true)}>Edit</button>
97 + </>
98 + );
99 + return (
100 + <li>
101 + <label>
102 + <input
103 + type="checkbox"
104 + checked={task.done}
105 + onChange={e => {
106 + onChange({
107 + ...task,
108 + done: e.target.checked,
109 + });
110 + }}
111 + />
112 + {taskContent}
113 + {count.current++}
114 + </label>
115 + </li>
116 + );
117 +}
118 +
119 +let nextId = 3;
120 +const defaultTask = "Code bugs";
121 +const initialTasks = [
122 + { id: 0, text: "Buy milk", done: true },
123 + { id: 1, text: "Eat tacos", done: false },
124 + { id: 2, text: "Brew tea", done: false },
125 +];
126 +
127 +function AddTask({ setTasks }) {
128 + const [text, setText] = useState(defaultTask);
129 + const handleAddTask = text => {
130 + setTasks(ts => [
131 + ...ts,
132 + {
133 + id: nextId++,
134 + text: text,
135 + done: false,
136 + },
137 + ]);
138 + };
139 +
140 + return (
141 + <>
142 + <input
143 + placeholder="Add task"
144 + value={text}
145 + onChange={e => setText(e.target.value)}
146 + />
147 + <button
148 + onClick={() => {
149 + setText(defaultTask);
150 + handleAddTask(text);
151 + }}
152 + >
153 + Add
154 + </button>
155 + </>
156 + );
157 +}
compiler/forget/packages/demo-todolist-playground/src/source/Ch2.memo.js new
+168
@@ -0,0 +1,168 @@
1 +import React, { useState, useRef, useCallback, useMemo } from "react";
2 +
3 +/**
4 + * Ch2 TaskBoard with VisibilityFilter
5 + *
6 + * Motivation:
7 + * Add computation that need `useMemo` and props
8 + *
9 + * Now, the <TaskBoard /> contains:
10 + * - props
11 + * - useState
12 + * - useCallback
13 + * - useMemo
14 + * - React.memo(<Child />)
15 + *
16 + * Now, the <TaskBoard /> itself needs to be `React.memo` as well to prevent
17 + * from Parent being re-rendered.
18 + * - also, we need to make sure the `getFilteredTasks` is stable as well...
19 + */
20 +
21 +export default function FilterableTaskBoard() {
22 + const count = useRef(0);
23 + const countRef = useRef(null);
24 + const [visibility, setVisibility] = useState("all");
25 + const getFilteredTasks = useCallback(
26 + tasks => {
27 + // Gosh I'm really coding against React here.
28 + // Invoke in next tick so DOM commits have been made...
29 + // otherwise we'll miss the update from the initial render.
30 + // Use `useState` here will cause infinite rendering loop.
31 + count.current++;
32 + queueMicrotask(() => (countRef.current.textContent = count.current));
33 + switch (visibility) {
34 + case "all":
35 + return tasks;
36 + case "active":
37 + return tasks.filter(t => !t.done);
38 + case "completed":
39 + return tasks.filter(t => t.done);
40 + }
41 + },
42 + [visibility]
43 + );
44 +
45 + return (
46 + <>
47 + <select
48 + size="3"
49 + value={visibility}
50 + onChange={e => setVisibility(e.target.value)}
51 + >
52 + <option value="all">All</option>
53 + <option value="active">Active</option>
54 + <option value="completed">Completed</option>
55 + </select>
56 + <span ref={countRef}>{count.current}</span>
57 + <TaskBoard getFilteredTasks={getFilteredTasks} />
58 + </>
59 + );
60 +}
61 +
62 +// const Task = React.memo(({ task, onChange }) => { ... });
63 +
64 +const TaskBoard = React.memo(({ getFilteredTasks }) => {
65 + const [tasks, setTasks] = useState(initialTasks);
66 + const onChangeTask = useCallback(
67 + task => setTasks(ts => ts.map(t => (t.id === task.id ? task : t))),
68 + []
69 + );
70 + const filtered = useMemo(
71 + () => getFilteredTasks(tasks),
72 + [getFilteredTasks, tasks]
73 + );
74 + return (
75 + <div>
76 + <AddTask setTasks={setTasks} />
77 + {filtered.map(task => (
78 + <Task key={task.id} task={task} onChange={onChangeTask} />
79 + ))}
80 + </div>
81 + );
82 +});
83 +
84 +// In <TaskBoard />'s parents:
85 +// const getFilteredTasks = useCallback(() => {...}, [visibility]);
86 +// <TaskBoard getFilteredTasks={getFilteredTasks} />
87 +
88 +const Task = React.memo(({ task, onChange }) => {
89 + const count = useRef(0);
90 + const [isEditing, setIsEditing] = useState(false);
91 + const taskContent = isEditing ? (
92 + <>
93 + <input
94 + value={task.text}
95 + onChange={e => {
96 + onChange({
97 + ...task,
98 + text: e.target.value,
99 + });
100 + }}
101 + />
102 + <button onClick={() => setIsEditing(false)}>Save</button>
103 + </>
104 + ) : (
105 + <>
106 + {task.text}
107 + <button onClick={() => setIsEditing(true)}>Edit</button>
108 + </>
109 + );
110 + return (
111 + <li>
112 + <label>
113 + <input
114 + type="checkbox"
115 + checked={task.done}
116 + onChange={e => {
117 + onChange({
118 + ...task,
119 + done: e.target.checked,
120 + });
121 + }}
122 + />
123 + {taskContent}
124 + {count.current++}
125 + </label>
126 + </li>
127 + );
128 +});
129 +
130 +let nextId = 3;
131 +const defaultTask = "Code bugs";
132 +const initialTasks = [
133 + { id: 0, text: "Buy milk", done: true },
134 + { id: 1, text: "Eat tacos", done: false },
135 + { id: 2, text: "Brew tea", done: false },
136 +];
137 +
138 +function AddTask({ setTasks }) {
139 + const [text, setText] = useState(defaultTask);
140 + const handleAddTask = text => {
141 + setTasks(ts => [
142 + ...ts,
143 + {
144 + id: nextId++,
145 + text: text,
146 + done: false,
147 + },
148 + ]);
149 + };
150 +
151 + return (
152 + <>
153 + <input
154 + placeholder="Add task"
155 + value={text}
156 + onChange={e => setText(e.target.value)}
157 + />
158 + <button
159 + onClick={() => {
160 + setText(defaultTask);
161 + handleAddTask(text);
162 + }}
163 + >
164 + Add
165 + </button>
166 + </>
167 + );
168 +}
compiler/forget/packages/demo-todolist-playground/src/source/Ch3.js new
+151
@@ -0,0 +1,151 @@
1 +import React, { createContext, useState, useRef, useContext } from "react";
2 +
3 +/**
4 + * Ch3 TaskBoard use dedicated context.
5 + *
6 + * Motivation:
7 + * Replace `useState` with `useContext`
8 + */
9 +
10 +const TasksContext = createContext(null);
11 +
12 +// Admittedly, this is a really weird pattern...
13 +// but it save me from copying in the reducer...
14 +const SetTasksContext = createContext(null);
15 +
16 +export default function FilterableTaskBoardUsingContext() {
17 + const count = useRef(0);
18 + const [visibility, setVisibility] = useState("all");
19 + const [tasks, setTasks] = useState(initialTasks);
20 + const getFilteredTasks = tasks => {
21 + count.current++;
22 + switch (visibility) {
23 + case "all":
24 + return tasks;
25 + case "active":
26 + return tasks.filter(t => !t.done);
27 + case "completed":
28 + return tasks.filter(t => t.done);
29 + }
30 + };
31 +
32 + return (
33 + <>
34 + <select
35 + size="3"
36 + value={visibility}
37 + onChange={e => setVisibility(e.target.value)}
38 + >
39 + <option value="all">All</option>
40 + <option value="active">Active</option>
41 + <option value="completed">Completed</option>
42 + </select>
43 + <SetTasksContext.Provider value={setTasks}>
44 + <TasksContext.Provider value={tasks}>
45 + <TaskBoard getFilteredTasks={getFilteredTasks} />
46 + </TasksContext.Provider>
47 + </SetTasksContext.Provider>
48 + </>
49 + );
50 +}
51 +
52 +function TaskBoard({ getFilteredTasks }) {
53 + const tasks = useContext(TasksContext);
54 + const filtered = getFilteredTasks(tasks);
55 +
56 + return (
57 + <div>
58 + <AddTask />
59 + {filtered.map(task => (
60 + <Task key={task.id} task={task} />
61 + ))}
62 + </div>
63 + );
64 +}
65 +
66 +function Task({ task }) {
67 + const setTasks = useContext(SetTasksContext);
68 + const onChange = task =>
69 + setTasks(ts => ts.map(t => (t.id === task.id ? task : t)));
70 +
71 + const count = useRef(0);
72 + const [isEditing, setIsEditing] = useState(false);
73 + const taskContent = isEditing ? (
74 + <>
75 + <input
76 + value={task.text}
77 + onChange={e => {
78 + onChange({
79 + ...task,
80 + text: e.target.value,
81 + });
82 + }}
83 + />
84 + <button onClick={() => setIsEditing(false)}>Save</button>
85 + </>
86 + ) : (
87 + <>
88 + {task.text}
89 + <button onClick={() => setIsEditing(true)}>Edit</button>
90 + </>
91 + );
92 + return (
93 + <li>
94 + <label>
95 + <input
96 + type="checkbox"
97 + checked={task.done}
98 + onChange={e => {
99 + onChange({
100 + ...task,
101 + done: e.target.checked,
102 + });
103 + }}
104 + />
105 + {taskContent}
106 + {count.current++}
107 + </label>
108 + </li>
109 + );
110 +}
111 +
112 +let nextId = 3;
113 +const defaultTask = "Code bugs";
114 +const initialTasks = [
115 + { id: 0, text: "Buy milk", done: true },
116 + { id: 1, text: "Eat tacos", done: false },
117 + { id: 2, text: "Brew tea", done: false },
118 +];
119 +
120 +function AddTask() {
121 + const setTasks = useContext(SetTasksContext);
122 + const [text, setText] = useState(defaultTask);
123 + const handleAddTask = text => {
124 + setTasks(ts => [
125 + ...ts,
126 + {
127 + id: nextId++,
128 + text: text,
129 + done: false,
130 + },
131 + ]);
132 + };
133 +
134 + return (
135 + <>
136 + <input
137 + placeholder="Add task"
138 + value={text}
139 + onChange={e => setText(e.target.value)}
140 + />
141 + <button
142 + onClick={() => {
143 + setText(defaultTask);
144 + handleAddTask(text);
145 + }}
146 + >
147 + Add
148 + </button>
149 + </>
150 + );
151 +}
compiler/forget/packages/demo-todolist-playground/src/source/Ch4.js new
+135
@@ -0,0 +1,135 @@
1 +import React, { useState, useRef } from "react";
2 +import { TasksProvider, useTasks, useTasksDispatch } from "./TaskBoardContext";
3 +
4 +/**
5 + * Ch4 TaskBoard use custom hooks
6 + *
7 + * Motivation:
8 + * encapsulate context and reducer as custom hooks.
9 + */
10 +
11 +export default function FilterableTaskBoardUsingCustomHooks() {
12 + const count = useRef(0);
13 + const [visibility, setVisibility] = useState("all");
14 + const getFilteredTasks = tasks => {
15 + count.current++;
16 + switch (visibility) {
17 + case "all":
18 + return tasks;
19 + case "active":
20 + return tasks.filter(t => !t.done);
21 + case "completed":
22 + return tasks.filter(t => t.done);
23 + }
24 + };
25 +
26 + return (
27 + <>
28 + <select
29 + size="3"
30 + value={visibility}
31 + onChange={e => setVisibility(e.target.value)}
32 + >
33 + <option value="all">All</option>
34 + <option value="active">Active</option>
35 + <option value="completed">Completed</option>
36 + </select>
37 + <TasksProvider>
38 + <TaskBoard getFilteredTasks={getFilteredTasks} />
39 + </TasksProvider>
40 + </>
41 + );
42 +}
43 +
44 +function TaskBoard({ getFilteredTasks }) {
45 + const tasks = useTasks();
46 + const filtered = getFilteredTasks(tasks);
47 +
48 + return (
49 + <div>
50 + <AddTask />
51 + {filtered.map(task => (
52 + <Task key={task.id} task={task} />
53 + ))}
54 + </div>
55 + );
56 +}
57 +
58 +function Task({ task }) {
59 + const count = useRef(0);
60 + const [isEditing, setIsEditing] = useState(false);
61 + const dispatch = useTasksDispatch();
62 + const taskContent = isEditing ? (
63 + <>
64 + <input
65 + value={task.text}
66 + onChange={e => {
67 + dispatch({
68 + type: "changed",
69 + task: {
70 + ...task,
71 + text: e.target.value,
72 + },
73 + });
74 + }}
75 + />
76 + <button onClick={() => setIsEditing(false)}>Save</button>
77 + </>
78 + ) : (
79 + <>
80 + {task.text}
81 + <button onClick={() => setIsEditing(true)}>Edit</button>
82 + </>
83 + );
84 + return (
85 + <li>
86 + <label>
87 + <input
88 + type="checkbox"
89 + checked={task.done}
90 + onChange={e => {
91 + dispatch({
92 + type: "changed",
93 + task: {
94 + ...task,
95 + done: e.target.checked,
96 + },
97 + });
98 + }}
99 + />
100 + {taskContent}
101 + {count.current++}
102 + </label>
103 + </li>
104 + );
105 +}
106 +
107 +let nextId = 3;
108 +const defaultTask = "Code bugs";
109 +
110 +function AddTask() {
111 + const dispatch = useTasksDispatch();
112 + const [text, setText] = useState(defaultTask);
113 +
114 + return (
115 + <>
116 + <input
117 + placeholder="Add task"
118 + value={text}
119 + onChange={e => setText(e.target.value)}
120 + />
121 + <button
122 + onClick={() => {
123 + setText(defaultTask);
124 + dispatch({
125 + type: "added",
126 + id: nextId++,
127 + text: text,
128 + });
129 + }}
130 + >
131 + Add
132 + </button>
133 + </>
134 + );
135 +}
compiler/forget/packages/demo-todolist-playground/src/source/Ch5.js new
+170
@@ -0,0 +1,170 @@
1 +import React, { createContext, useContext, useState, useRef } from "react";
2 +
3 +/**
4 + * Ch3 TaskBoard use global context
5 + *
6 + * Motivation:
7 + * demenstrate selecting a subset from context.
8 + */
9 +
10 +const AppContext = createContext(null);
11 +
12 +// Admittedly, this is a really weird pattern...
13 +// but it save me from copying in the reducer...
14 +const SetTasksContext = createContext(null);
15 +
16 +export default function FilterableTaskBoardUsingContext() {
17 + const count = useRef(0);
18 + const [visibility, setVisibility] = useState("all");
19 + const [randomInput, setRandomInput] = useState("");
20 + const [tasks, setTasks] = useState(initialTasks);
21 + const getFilteredTasks = tasks => {
22 + count.current++;
23 + switch (visibility) {
24 + case "all":
25 + return tasks;
26 + case "active":
27 + return tasks.filter(t => !t.done);
28 + case "completed":
29 + return tasks.filter(t => t.done);
30 + }
31 + };
32 +
33 + const appStore = {
34 + tasks: tasks,
35 + randomInput: randomInput,
36 + setRandomInput: setRandomInput,
37 + };
38 +
39 + return (
40 + <>
41 + <select
42 + size="3"
43 + value={visibility}
44 + onChange={e => setVisibility(e.target.value)}
45 + >
46 + <option value="all">All</option>
47 + <option value="active">Active</option>
48 + <option value="completed">Completed</option>
49 + </select>
50 + <SetTasksContext.Provider value={setTasks}>
51 + <AppContext.Provider value={appStore}>
52 + <RandomInput />
53 + <TaskBoard getFilteredTasks={getFilteredTasks} />
54 + </AppContext.Provider>
55 + </SetTasksContext.Provider>
56 + </>
57 + );
58 +}
59 +
60 +function RandomInput() {
61 + const { randomInput, setRandomInput } = useContext(AppContext);
62 + return (
63 + <input
64 + placeholder="Random Input"
65 + value={randomInput}
66 + onChange={e => setRandomInput(e.target.value)}
67 + />
68 + );
69 +}
70 +
71 +function TaskBoard({ getFilteredTasks }) {
72 + const { tasks } = useContext(AppContext);
73 + const filtered = getFilteredTasks(tasks);
74 +
75 + return (
76 + <div>
77 + <AddTask />
78 + {filtered.map(task => (
79 + <Task key={task.id} task={task} />
80 + ))}
81 + </div>
82 + );
83 +}
84 +
85 +function Task({ task }) {
86 + const setTasks = useContext(SetTasksContext);
87 + const onChange = task =>
88 + setTasks(ts => ts.map(t => (t.id === task.id ? task : t)));
89 +
90 + const count = useRef(0);
91 + const [isEditing, setIsEditing] = useState(false);
92 + const taskContent = isEditing ? (
93 + <>
94 + <input
95 + value={task.text}
96 + onChange={e => {
97 + onChange({
98 + ...task,
99 + text: e.target.value,
100 + });
101 + }}
102 + />
103 + <button onClick={() => setIsEditing(false)}>Save</button>
104 + </>
105 + ) : (
106 + <>
107 + {task.text}
108 + <button onClick={() => setIsEditing(true)}>Edit</button>
109 + </>
110 + );
111 + return (
112 + <li>
113 + <label>
114 + <input
115 + type="checkbox"
116 + checked={task.done}
117 + onChange={e => {
118 + onChange({
119 + ...task,
120 + done: e.target.checked,
121 + });
122 + }}
123 + />
124 + {taskContent}
125 + {count.current++}
126 + </label>
127 + </li>
128 + );
129 +}
130 +
131 +let nextId = 3;
132 +const defaultTask = "Code bugs";
133 +const initialTasks = [
134 + { id: 0, text: "Buy milk", done: true },
135 + { id: 1, text: "Eat tacos", done: false },
136 + { id: 2, text: "Brew tea", done: false },
137 +];
138 +
139 +function AddTask() {
140 + const setTasks = useContext(SetTasksContext);
141 + const [text, setText] = useState(defaultTask);
142 + const handleAddTask = text => {
143 + setTasks(ts => [
144 + ...ts,
145 + {
146 + id: nextId++,
147 + text: text,
148 + done: false,
149 + },
150 + ]);
151 + };
152 +
153 + return (
154 + <>
155 + <input
156 + placeholder="Add task"
157 + value={text}
158 + onChange={e => setText(e.target.value)}
159 + />
160 + <button
161 + onClick={() => {
162 + setText(defaultTask);
163 + handleAddTask(text);
164 + }}
165 + >
166 + Add
167 + </button>
168 + </>
169 + );
170 +}
compiler/forget/packages/demo-todolist-playground/src/source/InitialTasks.js new
+7
@@ -0,0 +1,7 @@
1 +const initialTasks = [
2 + { id: 0, text: "memo", done: true },
3 + { id: 1, text: "useCallback", done: false },
4 + { id: 2, text: "useMemo", done: false },
5 +];
6 +
7 +export default initialTasks;
compiler/forget/packages/demo-todolist-playground/src/source/Neo0.js new
+34
@@ -0,0 +1,34 @@
1 +import React, { useState, useRef } from "react";
2 +import getUpdated from "./getUpdated";
3 +import initialTodos from "./initialTodos";
4 +import Todo from "./NeoTodoNoBadge";
5 +import AddTodo from "./NeoAddTodo";
6 +
7 +/**
8 + * Neo0 Minimal TodoList (without Badge)
9 + *
10 + * Motivation:
11 + * Start with just `useState` (state var) and _pass things done_.
12 + */
13 +
14 +function TodoList() {
15 + const [todos, setTodos] = useState(initialTodos);
16 + const handleChange = todo => setTodos(todos => getUpdated(todos, todo));
17 +
18 + return (
19 + <div>
20 + {todos.map(todo => (
21 + <Todo key={todo.id} todo={todo} onChange={handleChange} />
22 + ))}
23 + <AddTodo setTodos={setTodos} />
24 + </div>
25 + );
26 +}
27 +
28 +export default function App() {
29 + return (
30 + <div className="TodoListApp">
31 + <TodoList />
32 + </div>
33 + );
34 +}
compiler/forget/packages/demo-todolist-playground/src/source/Neo1.js new
+36
@@ -0,0 +1,36 @@
1 +import React, { useState, useRef } from "react";
2 +import getUpdated from "./getUpdated";
3 +import initialTodos from "./initialTodos";
4 +import Todo from "./NeoTodo";
5 +import AddTodo from "./NeoAddTodo";
6 +
7 +/**
8 + * Neo1 Minimal TodoList
9 + *
10 + * Motivation:
11 + * Start with just `useState` (state var) and _pass things done_.
12 + */
13 +
14 +function TodoList() {
15 + const [todos, setTodos] = useState(initialTodos);
16 + const handleChange = todo => setTodos(todos => getUpdated(todos, todo));
17 +
18 + return (
19 + <div>
20 + <ul>
21 + {todos.map(todo => (
22 + <Todo key={todo.id} todo={todo} onChange={handleChange} />
23 + ))}
24 + </ul>
25 + <AddTodo setTodos={setTodos} />
26 + </div>
27 + );
28 +}
29 +
30 +export default function App() {
31 + return (
32 + <div className="TodoListApp">
33 + <TodoList />
34 + </div>
35 + );
36 +}
compiler/forget/packages/demo-todolist-playground/src/source/Neo1.memo.js new
+41
@@ -0,0 +1,41 @@
1 +import React, { useState, useCallback } from "react";
2 +import getUpdated from "./getUpdated";
3 +import initialTodos from "./initialTodos";
4 +import UnmemoizedTodo from "./NeoTodo";
5 +import AddTodo from "./NeoAddTodo";
6 +
7 +/**
8 + * Neo1 Minimal TodoList (manually memoized)
9 + *
10 + * Motivation:
11 + * Start with just `useState` (state var) and _pass things done_.
12 + */
13 +
14 +const Todo = React.memo(UnmemoizedTodo);
15 +
16 +function TodoList() {
17 + const [todos, setTodos] = useState(initialTodos);
18 + const handleChange = useCallback(
19 + todo => setTodos(todos => getUpdated(todos, todo)),
20 + []
21 + );
22 +
23 + return (
24 + <div>
25 + <ul>
26 + {todos.map(todo => (
27 + <Todo key={todo.id} todo={todo} onChange={handleChange} />
28 + ))}
29 + </ul>
30 + <AddTodo setTodos={setTodos} />
31 + </div>
32 + );
33 +}
34 +
35 +export default function App() {
36 + return (
37 + <div className="TodoListApp">
38 + <TodoList />
39 + </div>
40 + );
41 +}
compiler/forget/packages/demo-todolist-playground/src/source/Neo2.half.memo.js new
+76
@@ -0,0 +1,76 @@
1 +import React, { useState, useRef, useCallback } from "react";
2 +import getUpdated from "./getUpdated";
3 +import initialTodos from "./initialTodos";
4 +import UnmemorizedTodo from "./NeoTodo";
5 +import AddTodo from "./NeoAddTodo";
6 +import CountBadge from "../Components/CountBadge";
7 +import Select from "../Components/Select";
8 +
9 +/**
10 + * Neo2 TodoList with Filter (half memoized)
11 + * - with Neo1.memo.js part unchanged to keep the flow
12 + *
13 + * Motivation:
14 + * Add props and computations.
15 + */
16 +
17 +const Todo = React.memo(UnmemorizedTodo);
18 +
19 +function TodoList({ getFiltered }) {
20 + const [todos, setTodos] = useState(initialTodos);
21 + const handleChange = useCallback(
22 + todo => setTodos(todos => getUpdated(todos, todo)),
23 + []
24 + );
25 + const filtered = getFiltered(todos);
26 +
27 + return (
28 + <div>
29 + {filtered.map(todo => (
30 + <Todo key={todo.id} todo={todo} onChange={handleChange} />
31 + ))}
32 + <AddTodo setTodos={setTodos} />
33 + </div>
34 + );
35 +}
36 +
37 +export default function App() {
38 + const [visibility, setVisibility] = useState("all");
39 + const count = useRef(0);
40 + const countRef = useRef(null);
41 +
42 + const getFiltered = todos => {
43 + count.current++;
44 + queueMicrotask(() => (countRef.current.textContent = count.current));
45 + switch (visibility) {
46 + case "all":
47 + return todos;
48 + case "active":
49 + return todos.filter(t => !t.done);
50 + case "completed":
51 + return todos.filter(t => t.done);
52 + }
53 + };
54 +
55 + return (
56 + <div className="TodoListApp">
57 + <header>
58 + <div class="VisibilityFilter">
59 + <Select
60 + value={visibility}
61 + options={[
62 + { value: "all", label: "All" },
63 + { value: "active", label: "Active" },
64 + { value: "completed", label: "Completed" },
65 + ]}
66 + onChange={value => setVisibility(value)}
67 + />
68 + <div className="tail">
69 + <CountBadge ref={countRef} count={count.current} />
70 + </div>
71 + </div>
72 + </header>
73 + <TodoList getFiltered={getFiltered} />
74 + </div>
75 + );
76 +}
compiler/forget/packages/demo-todolist-playground/src/source/Neo2.js new
+70
@@ -0,0 +1,70 @@
1 +import React, { useState, useRef } from "react";
2 +import getUpdated from "./getUpdated";
3 +import initialTodos from "./initialTodos";
4 +import Todo from "./NeoTodo";
5 +import AddTodo from "./NeoAddTodo";
6 +import CountBadge from "../Components/CountBadge";
7 +import Select from "../Components/Select";
8 +
9 +/**
10 + * Neo2 TodoList with Filter
11 + *
12 + * Motivation:
13 + * Add props and computations.
14 + */
15 +
16 +function TodoList({ getFiltered }) {
17 + const [todos, setTodos] = useState(initialTodos);
18 + const handleChange = todo => setTodos(todos => getUpdated(todos, todo));
19 + const filtered = getFiltered(todos);
20 +
21 + return (
22 + <div>
23 + {filtered.map(todo => (
24 + <Todo key={todo.id} todo={todo} onChange={handleChange} />
25 + ))}
26 + <AddTodo setTodos={setTodos} />
27 + </div>
28 + );
29 +}
30 +
31 +export default function App() {
32 + const [visibility, setVisibility] = useState("all");
33 + const count = useRef(0);
34 + const countRef = useRef(null);
35 +
36 + const getFiltered = todos => {
37 + count.current++;
38 + queueMicrotask(() => (countRef.current.textContent = count.current));
39 + switch (visibility) {
40 + case "all":
41 + return todos;
42 + case "active":
43 + return todos.filter(t => !t.done);
44 + case "completed":
45 + return todos.filter(t => t.done);
46 + }
47 + };
48 +
49 + return (
50 + <div className="TodoListApp">
51 + <header>
52 + <div class="VisibilityFilter">
53 + <Select
54 + value={visibility}
55 + options={[
56 + { value: "all", label: "All" },
57 + { value: "active", label: "Active" },
58 + { value: "completed", label: "Completed" },
59 + ]}
60 + onChange={value => setVisibility(value)}
61 + />
62 + <div className="tail">
63 + <CountBadge ref={countRef} count={count.current} />
64 + </div>
65 + </div>
66 + </header>
67 + <TodoList getFiltered={getFiltered} />
68 + </div>
69 + );
70 +}
compiler/forget/packages/demo-todolist-playground/src/source/Neo3.half.memo.js new
+80
@@ -0,0 +1,80 @@
1 +import React, { useState, useRef, useCallback } from "react";
2 +import getUpdated from "./getUpdated";
3 +import getFiltered from "./getFiltered";
4 +import initialTodos from "./initialTodos";
5 +import UnmemoizedTodo from "./NeoTodo";
6 +import AddTodo from "./NeoAddTodoThemable";
7 +import ColorPicker from "../Components/ColorPicker";
8 +import CountBadge from "../Components/CountBadge";
9 +import Select from "../Components/Select";
10 +
11 +/**
12 + * Neo3 TodoList with Filter and ColorPicker (half memoized)
13 + * - with Neo1.memo.js part unchanged to keep the flow
14 + *
15 + * Motivation:
16 + * Add props and and demo that such computations may need `useMemo`.
17 + */
18 +
19 +const Todo = React.memo(UnmemoizedTodo);
20 +
21 +function TodoList({ visibility, themeColor }) {
22 + const [todos, setTodos] = useState(initialTodos);
23 + const handleChange = useCallback(
24 + todo => setTodos(todos => getUpdated(todos, todo)),
25 + []
26 + );
27 + const filtered = getFiltered(todos, visibility);
28 +
29 + return (
30 + <div>
31 + <ul>
32 + {filtered.map(todo => (
33 + <Todo key={todo.id} todo={todo} onChange={handleChange} />
34 + ))}
35 + </ul>
36 + <AddTodo setTodos={setTodos} themeColor={themeColor} />
37 + </div>
38 + );
39 +}
40 +
41 +export default function BlazingTodoList() {
42 + const [themeColor, setThemeColor] = useState("#045975");
43 + const [visibility, setVisibility] = useState("all");
44 +
45 + const bgGradient = `linear-gradient(
46 + 209.21deg,
47 + ${primaryColor} 13.57%,
48 + ${themeColor} 98.38%
49 + )`;
50 +
51 + return (
52 + <div className="TodoListApp" style={{ background: bgGradient }}>
53 + <div className="FilterCountBanner">
54 + <code>getFiltered()</code> was called
55 + <CountBadge />
56 + times
57 + </div>
58 + <header>
59 + <ColorPicker
60 + value={themeColor}
61 + onChange={e => setThemeColor(e.target.value)}
62 + />
63 + <div className="VisibilityFilter">
64 + <Select
65 + value={visibility}
66 + options={[
67 + { value: "all", label: "All" },
68 + { value: "active", label: "Active" },
69 + { value: "completed", label: "Completed" },
70 + ]}
71 + onChange={value => setVisibility(value)}
72 + />
73 + </div>
74 + </header>
75 + <TodoList visibility={visibility} themeColor={themeColor} />
76 + </div>
77 + );
78 +}
79 +
80 +const primaryColor = "rgb(8, 126, 164)";
compiler/forget/packages/demo-todolist-playground/src/source/Neo3.js new
+74
@@ -0,0 +1,74 @@
1 +import React, { useState, useRef, useEffect } from "react";
2 +import getUpdated from "./getUpdated";
3 +import getFiltered from "./getFiltered";
4 +import initialTodos from "./initialTodos";
5 +import Todo from "./NeoTodo";
6 +import AddTodo from "./NeoAddTodoThemable";
7 +import ColorPicker from "../Components/ColorPicker";
8 +import CountBadge from "../Components/CountBadge";
9 +import Select from "../Components/Select";
10 +
11 +/**
12 + * Neo3 TodoList with Filter and ColorPicker
13 + *
14 + * Motivation:
15 + * Add props and and demo that such computations may need `useMemo`.
16 + */
17 +
18 +function TodoList({ visibility, themeColor }) {
19 + const [todos, setTodos] = useState(initialTodos);
20 + const handleChange = todo => setTodos(todos => getUpdated(todos, todo));
21 + const filtered = getFiltered(todos, visibility);
22 +
23 + return (
24 + <div>
25 + <ul>
26 + {filtered.map(todo => (
27 + <Todo key={todo.id} todo={todo} onChange={handleChange} />
28 + ))}
29 + </ul>
30 + <AddTodo setTodos={setTodos} themeColor={themeColor} />
31 + </div>
32 + );
33 +}
34 +
35 +export default function BlazingTodoList() {
36 + const [themeColor, setThemeColor] = useState("#045975");
37 + const [visibility, setVisibility] = useState("all");
38 +
39 + const bgGradient = `linear-gradient(
40 + 209.21deg,
41 + ${primaryColor} 13.57%,
42 + ${themeColor} 98.38%
43 + )`;
44 +
45 + return (
46 + <div className="TodoListApp" style={{ background: bgGradient }}>
47 + <div className="FilterCountBanner">
48 + <code>getFiltered()</code> was called
49 + <CountBadge />
50 + times
51 + </div>
52 + <header>
53 + <ColorPicker
54 + value={themeColor}
55 + onChange={e => setThemeColor(e.target.value)}
56 + />
57 + <div className="VisibilityFilter">
58 + <Select
59 + value={visibility}
60 + options={[
61 + { value: "all", label: "All" },
62 + { value: "active", label: "Active" },
63 + { value: "completed", label: "Completed" },
64 + ]}
65 + onChange={value => setVisibility(value)}
66 + />
67 + </div>
68 + </header>
69 + <TodoList visibility={visibility} themeColor={themeColor} />
70 + </div>
71 + );
72 +}
73 +
74 +const primaryColor = "rgb(8, 126, 164)";
compiler/forget/packages/demo-todolist-playground/src/source/Neo3.memo.js new
+92
@@ -0,0 +1,92 @@
1 +import React, { useState, useRef, useCallback, useMemo } from "react";
2 +import getUpdated from "./getUpdated";
3 +import getFiltered from "./getFiltered";
4 +import initialTodos from "./initialTodos";
5 +import UnmemoizedTodo from "./NeoTodo";
6 +import AddTodo from "./NeoAddTodoThemable";
7 +import ColorPicker from "../Components/ColorPicker";
8 +import CountBadge from "../Components/CountBadge";
9 +import Select from "../Components/Select";
10 +
11 +/**
12 + * Neo3 TodoList with Filter and ColorPicker (half memoized)
13 + * - with Neo1.memo.js part unchanged to keep the flow
14 + *
15 + * Motivation:
16 + * Add props and and demo that such computations may need `useMemo`.
17 + */
18 +
19 +const Todo = React.memo(UnmemoizedTodo);
20 +
21 +function TodoList({ visibility, themeColor }) {
22 + const [todos, setTodos] = useState(initialTodos);
23 + const handleChange = useCallback(
24 + todo => setTodos(todos => getUpdated(todos, todo)),
25 + []
26 + );
27 + const filtered = useMemo(
28 + () => getFiltered(todos, visibility),
29 + [todos, visibility]
30 + );
31 +
32 + return (
33 + <div>
34 + <ul>
35 + {filtered.map(todo => (
36 + <Todo key={todo.id} todo={todo} onChange={handleChange} />
37 + ))}
38 + </ul>
39 + <AddTodo setTodos={setTodos} themeColor={themeColor} />
40 + </div>
41 + );
42 +}
43 +
44 +function BlazingTodoList() {
45 + const [visibility, setVisibility] = useState("all");
46 + const [themeColor, setThemeColor] = useState("#045975");
47 + return <TodoList visibility={visibility} themeColor={themeColor} />;
48 +}
49 +
50 +// https://twitter.com/acdlite/status/974390255393505280
51 +// https://twitter.com/sugarpirate_/status/1449067040459956227
52 +
53 +export default function BlazingTodoListForReal() {
54 + const [themeColor, setThemeColor] = useState("#045975");
55 + const [visibility, setVisibility] = useState("all");
56 +
57 + const bgGradient = `linear-gradient(
58 + 209.21deg,
59 + ${primaryColor} 13.57%,
60 + ${themeColor} 98.38%
61 + )`;
62 +
63 + return (
64 + <div className="TodoListApp" style={{ background: bgGradient }}>
65 + <div className="FilterCountBanner">
66 + <code>getFiltered()</code> was called
67 + <CountBadge />
68 + times
69 + </div>
70 + <header>
71 + <ColorPicker
72 + value={themeColor}
73 + onChange={e => setThemeColor(e.target.value)}
74 + />
75 + <div className="VisibilityFilter">
76 + <Select
77 + value={visibility}
78 + options={[
79 + { value: "all", label: "All" },
80 + { value: "active", label: "Active" },
81 + { value: "completed", label: "Completed" },
82 + ]}
83 + onChange={value => setVisibility(value)}
84 + />
85 + </div>
86 + </header>
87 + <TodoList visibility={visibility} themeColor={themeColor} />
88 + </div>
89 + );
90 +}
91 +
92 +const primaryColor = "rgb(8, 126, 164)";
compiler/forget/packages/demo-todolist-playground/src/source/Neo3ForgetPseudo.memo.js new
+236
@@ -0,0 +1,236 @@
1 +// magic variables + memoCache
2 +function TodoList1({ visibility, themeColor }) {
3 + const [todos, setTodos] = useState(initialTodos);
4 +
5 + let hasVisibilityChanged, hasThemeColorChanged, hasTodosChanged;
6 +
7 + const handleChange = todo => setTodos(todos => getUpdated(todos, todo));
8 +
9 + const filtered = getFiltered(todos, visibility);
10 +
11 + return (
12 + <div>
13 + <ul>
14 + {filtered.map(todo => (
15 + <Todo key={todo.id} todo={todo} onChange={handleChange} />
16 + ))}
17 + </ul>
18 + <AddTodo setTodos={setTodos} themeColor={themeColor} />
19 + </div>
20 + );
21 +}
22 +
23 +function TodoList1({ visibility, themeColor }) {
24 + const [todos, setTodos] = useState(initialTodos);
25 +
26 + let hasVisibilityChanged, hasThemeColorChanged, hasTodosChanged;
27 +
28 + const handleChange = todo => setTodos(todos => getUpdated(todos, todo));
29 +
30 + if (hasVisibilityChanged || hasTodosChanged) {
31 + const filtered = getFiltered(todos, visibility);
32 + }
33 +
34 + return (
35 + <div>
36 + <ul>
37 + {filtered.map(todo => (
38 + <Todo key={todo.id} todo={todo} onChange={handleChange} />
39 + ))}
40 + </ul>
41 + <AddTodo setTodos={setTodos} themeColor={themeColor} />
42 + </div>
43 + );
44 +}
45 +
46 +function TodoList1({ visibility, themeColor }) {
47 + const [todos, setTodos] = useState(initialTodos);
48 +
49 + let hasVisibilityChanged, hasThemeColorChanged, hasTodosChanged, memoCache;
50 +
51 + const handleChange =
52 + memoCache[0] ||
53 + (memoCache[0] = todo => setTodos(todos => getUpdated(todos, todo)));
54 +
55 + let filtered;
56 + if (hasVisibilityChanged || hasTodosChanged) {
57 + filtered = memoCache[0] = getFiltered(todos, visibility);
58 + } else {
59 + filtered = memoCache[0];
60 + }
61 +
62 + return (
63 + <div>
64 + <ul>
65 + {filtered.map(todo => (
66 + <Todo key={todo.id} todo={todo} onChange={handleChange} />
67 + ))}
68 + </ul>
69 + <AddTodo setTodos={setTodos} themeColor={themeColor} />
70 + </div>
71 + );
72 +}
73 +
74 +// middle - demo the idea that we only want to excute a line of code unless
75 +// its dependencies chagned.
76 +function TodoList2({ visibility, themeColor }) {
77 + const [todos, setTodos] = useState(initialTodos);
78 +
79 + let hasVisibilityChanged, hasThemeColorChanged, hasTodosChanged;
80 +
81 + if (hasVisibilityChanged || hasThemeColorChanged || hasTodosChanged) {
82 + const handleChange = todo => setTodos(todos => getUpdated(todos, todo));
83 +
84 + if (hasVisibilityChanged || hasTodosChanged) {
85 + const filtered = getFiltered(todos, visibility);
86 + const jsx_todos = filtered.map(todo => (
87 + <Todo key={todo.id} todo={todo} onChange={handleChange} />
88 + ));
89 + }
90 +
91 + if (hasThemeColorChanged) {
92 + const jsx_addTodo = (
93 + <AddTodo setTodos={setTodos} themeColor={themeColor} />
94 + );
95 + }
96 + return (
97 + <div>
98 + <ul>{jsx_todos}</ul>
99 + {jsx_addTodo}
100 + </div>
101 + );
102 + }
103 +}
104 +
105 +//
106 +function TodoList({ visibility, themeColor }) {
107 + const [todos, setTodos] = useState(initialTodos);
108 +
109 + let hasVisibilityChanged, hasThemeColorChanged, hasTodosChanged, memoCache;
110 +
111 + const handleChange =
112 + memoCache[0] ||
113 + (memoCache[0] = todo => setTodos(todos => getUpdated(todos, todo)));
114 +
115 + let filtered;
116 + if (hasVisibilityChanged || hasTodosChanged) {
117 + filtered = (memoCache[1] = getFiltered(todos, visibility));
118 + } else {
119 + filtered = memoCache[1]
120 + }
121 +
122 + const jsx_addTodo = hasThemeColorChanged
123 + ? (memoCache[3] = <AddTodo setTodos={setTodos} themeColor={themeColor} />)
124 + : memoCache[3];
125 +
126 + return (
127 + <div>
128 + <ul>
129 + {filtered.map(todo => (
130 + <Todo key={todo.id} todo={todo} onChange={handleChange} />
131 + ))}
132 + </ul>
133 + {jsx_addTodo}
134 + </div>
135 + );
136 +}
137 +
138 +function TodoList3({ visibility, themeColor }) {
139 + const [todos, setTodos] = useState(initialTodos);
140 +
141 + let hasVisibilityChanged, hasThemeColorChanged, hasTodosChanged, memoCache;
142 +
143 + const handleChange =
144 + memoCache[0] ||
145 + (memoCache[0] = todo => setTodos(todos => getUpdated(todos, todo)));
146 +
147 + let filtered, jsx_todos;
148 + if (hasVisibilityChanged || hasTodosChanged) {
149 + filtered = memoCache[1] = getFiltered(todos, visibility);
150 + jsx_todos = memoCache[2] = (
151 + <ul>
152 + {filtered.map(todo => (
153 + <Todo key={todo.id} todo={todo} onChange={handleChange} />
154 + ))}
155 + </ul>
156 + );
157 + } else {
158 + filtered = memoCache[1];
159 + jsx_todos = memoCache[2];
160 + }
161 +
162 + const jsx_addTodo = hasThemeColorChanged
163 + ? (memoCache[3] = <AddTodo setTodos={setTodos} themeColor={themeColor} />)
164 + : memoCache[3];
165 +
166 + return (memoCache[4] = <div>{jsx_todos}{jsx_addTodo}</div>);
167 +}
168 +
169 +// Final
170 +function TodoList({ visibility, themeColor }) {
171 + const [todos, setTodos] = useState(initialTodos);
172 +
173 + let hasVisibilityChanged, hasThemeColorChanged, hasTodosChanged, memoCache;
174 +
175 + if (hasVisibilityChanged || hasThemeColorChanged || hasTodosChanged) {
176 + const handleChange =
177 + memoCache[0] ||
178 + (memoCache[0] = todo => setTodos(todos => getUpdated(todos, todo)));
179 +
180 + let filtered, jsx_todos;
181 + if (hasVisibilityChanged || hasTodosChanged) {
182 + filtered = memoCache[1] = getFiltered(todos, visibility);
183 + jsx_todos = memoCache[2] = (<ul>{filtered.map(…)}</ul>);
184 + jsx_todos = memoCache[2] = (
185 + <ul>
186 + {filtered.map(todo => (
187 + <Todo key={todo.id} todo={todo} onChange={handleChange} />
188 + ))}
189 + </ul>
190 + );
191 + } else {
192 + filtered = memoCache[1];
193 + jsx_todos = memoCache[2];
194 + }
195 +
196 + const jsx_addTodo = hasThemeColorChanged
197 + ? (memoCache[3] = <AddTodo setTodos={setTodos} themeColor={themeColor} />)
198 + : memoCache[3];
199 +
200 + return (memoCache[4] = <div>{jsx_todos}{jsx_addTodo}</div>);
201 + } else {
202 + return memoCache[4];
203 + }
204 +}
205 +
206 +// Final (Tenary)
207 +function TodoList3({ visibility, themeColor }) {
208 + const [todos, setTodos] = useState(initialTodos);
209 +
210 + let hasVisibilityChanged, hasThemeColorChanged, hasTodosChanged, memoCache;
211 +
212 + if (hasVisibilityChanged || hasThemeColorChanged || hasTodosChanged) {
213 + const handleChange =
214 + memoCache[0] ||
215 + (memoCache[0] = todo => setTodos(todos => getUpdated(todos, todo)));
216 + const filtered =
217 + hasVisibilityChanged || hasTodosChanged
218 + ? (memoCache[1] = getFiltered(todos, visibility))
219 + : memoCache[1];
220 + const jsx_todos =
221 + hasVisibilityChanged || hasTodosChanged
222 + ? (memoCache[2] = filtered.map(todo => (
223 + <Todo key={todo.id} todo={todo} onChange={handleChange} />
224 + )))
225 + : memoCache[2];
226 + const jsx_addTodo = hasThemeColorChanged
227 + ? (memoCache[4] = <AddTodo setTodos={setTodos} themeColor={themeColor} />)
228 + : memoCache[4];
229 + return (
230 + <div>
231 + <ul>{jsx_todos}</ul>
232 + {jsx_addTodo}
233 + </div>
234 + );
235 + }
236 +}
compiler/forget/packages/demo-todolist-playground/src/source/NeoAddTask.js new
+41
@@ -0,0 +1,41 @@
1 +import React, { useState } from "react";
2 +
3 +// We need this because Forget has bug when props is passed in `undefined`
4 +export default function AddTodo({ setTodos }) {
5 + const [text, setText] = useState(defaultTodo);
6 + const handleAddTodo = text => {
7 + setTodos(ts => [
8 + ...ts,
9 + {
10 + id: nextId++,
11 + text: text,
12 + done: false,
13 + },
14 + ]);
15 + };
16 +
17 + return (
18 + <div className="AddTodo">
19 + <form
20 + onSubmit={e => {
21 + e.preventDefault();
22 + setText(defaultTodo);
23 + handleAddTodo(text.trim() === "" ? fallbackTodo : text);
24 + }}
25 + >
26 + <input
27 + placeholder="Add todo"
28 + value={text}
29 + onChange={e => setText(e.target.value)}
30 + />
31 + <div className="tail">
32 + <button type="submit">Add</button>
33 + </div>
34 + </form>
35 + </div>
36 + );
37 +}
38 +
39 +let nextId = 3;
40 +const defaultTodo = "";
41 +const fallbackTodo = "oops";
compiler/forget/packages/demo-todolist-playground/src/source/NeoAddTaskThemable.js new
+48
@@ -0,0 +1,48 @@
1 +import React, { useState } from "react";
2 +
3 +export default function AddTodo({ setTodos, themeColor = "#045975" }) {
4 + const [text, setText] = useState(defaultTodo);
5 + const handleAddTodo = text => {
6 + setTodos(ts => [
7 + ...ts,
8 + {
9 + id: nextId++,
10 + text: text,
11 + done: false,
12 + },
13 + ]);
14 + };
15 +
16 + const bgGradient = `linear-gradient(
17 + 209.21deg,
18 + ${themeColor}22 0%,
19 + ${themeColor}ee 100%
20 + )`;
21 +
22 + return (
23 + <div className="AddTodo">
24 + <form
25 + onSubmit={e => {
26 + e.preventDefault();
27 + setText(defaultTodo);
28 + handleAddTodo(text.trim() === "" ? fallbackTodo : text);
29 + }}
30 + >
31 + <input
32 + placeholder="Add todo"
33 + value={text}
34 + onChange={e => setText(e.target.value)}
35 + />
36 + <div className="tail">
37 + <button type="submit" style={{ background: bgGradient }}>
38 + Add
39 + </button>
40 + </div>
41 + </form>
42 + </div>
43 + );
44 +}
45 +
46 +let nextId = 3;
47 +const defaultTodo = "";
48 +const fallbackTodo = "oops";
compiler/forget/packages/demo-todolist-playground/src/source/NeoAddTodo.js new
+41
@@ -0,0 +1,41 @@
1 +import React, { useState } from "react";
2 +
3 +// We need this because Forget has bug when props is passed in `undefined`
4 +export default function AddTodo({ setTodos }) {
5 + const [text, setText] = useState(defaultTodo);
6 + const handleAddTodo = text => {
7 + setTodos(ts => [
8 + ...ts,
9 + {
10 + id: nextId++,
11 + text: text,
12 + done: false,
13 + },
14 + ]);
15 + };
16 +
17 + return (
18 + <div className="AddTodo">
19 + <form
20 + onSubmit={e => {
21 + e.preventDefault();
22 + setText(defaultTodo);
23 + handleAddTodo(text.trim() === "" ? fallbackTodo : text);
24 + }}
25 + >
26 + <input
27 + placeholder="Add todo"
28 + value={text}
29 + onChange={e => setText(e.target.value)}
30 + />
31 + <div className="tail">
32 + <button type="submit">Add</button>
33 + </div>
34 + </form>
35 + </div>
36 + );
37 +}
38 +
39 +let nextId = 3;
40 +const defaultTodo = "";
41 +const fallbackTodo = "oops";
compiler/forget/packages/demo-todolist-playground/src/source/NeoAddTodoThemable.js new
+48
@@ -0,0 +1,48 @@
1 +import React, { useState } from "react";
2 +
3 +export default function AddTodo({ setTodos, themeColor = "#045975" }) {
4 + const [text, setText] = useState(defaultTodo);
5 + const handleAddTodo = text => {
6 + setTodos(ts => [
7 + ...ts,
8 + {
9 + id: nextId++,
10 + text: text,
11 + done: false,
12 + },
13 + ]);
14 + };
15 +
16 + const bgGradient = `linear-gradient(
17 + 209.21deg,
18 + ${themeColor}22 0%,
19 + ${themeColor}ee 100%
20 + )`;
21 +
22 + return (
23 + <div className="AddTodo">
24 + <form
25 + onSubmit={e => {
26 + e.preventDefault();
27 + setText(defaultTodo);
28 + handleAddTodo(text.trim() === "" ? fallbackTodo : text);
29 + }}
30 + >
31 + <input
32 + placeholder="Add todo"
33 + value={text}
34 + onChange={e => setText(e.target.value)}
35 + />
36 + <div className="tail">
37 + <button type="submit" style={{ background: bgGradient }}>
38 + Add
39 + </button>
40 + </div>
41 + </form>
42 + </div>
43 + );
44 +}
45 +
46 +let nextId = 3;
47 +const defaultTodo = "";
48 +const fallbackTodo = "oops";
compiler/forget/packages/demo-todolist-playground/src/source/NeoTask.js new
+53
@@ -0,0 +1,53 @@
1 +import React, { useState, useRef } from "react";
2 +import CountBadge from "../Components/CountBadge";
3 +
4 +export default function Todo({ todo, onChange }) {
5 + const inputRef = useRef(null);
6 + const count = useRef(0);
7 + const [isEditing, setIsEditing] = useState(false);
8 +
9 + const onSave = e => {
10 + e.preventDefault();
11 + setIsEditing(false);
12 + onChange({
13 + ...todo,
14 + text: inputRef.current.value,
15 + });
16 + };
17 +
18 + const todoBody = isEditing ? (
19 + <form value={todo.text} onSubmit={onSave} onBlur={onSave}>
20 + <input ref={inputRef} defaultValue={todo.text} autoFocus />
21 + </form>
22 + ) : (
23 + <div
24 + className={"TodoBody" + (todo.done ? " done" : "")}
25 + onClick={() => setIsEditing(true)}
26 + >
27 + {todo.text}
28 + </div>
29 + );
30 +
31 + const checkBox = !isEditing && (
32 + <button
33 + className={todo.done ? "Checkbox done" : "Checkbox"}
34 + onClick={e => {
35 + e.target.blur();
36 + onChange({
37 + ...todo,
38 + done: !todo.done,
39 + });
40 + }}
41 + ></button>
42 + );
43 +
44 + return (
45 + <li className="Todo">
46 + {checkBox}
47 + {todoBody}
48 + <div className="tail">
49 + <CountBadge count={count.current++} type={"warning"} rounded />
50 + </div>
51 + </li>
52 + );
53 +}
compiler/forget/packages/demo-todolist-playground/src/source/NeoTaskNoBadge.js new
+54
@@ -0,0 +1,54 @@
1 +import React, { useState, useRef } from "react";
2 +import CountBadge from "../Components/CountBadge";
3 +
4 +/**
5 + * Until Forget supports default props...
6 + */
7 +export default function Todo({ todo, onChange }) {
8 + const inputRef = useRef(null);
9 + const count = useRef(0);
10 + const [isEditing, setIsEditing] = useState(false);
11 +
12 + const onSave = e => {
13 + e.preventDefault();
14 + setIsEditing(false);
15 + onChange({
16 + ...todo,
17 + text: inputRef.current.value,
18 + });
19 + };
20 +
21 + const todoBody = isEditing ? (
22 + <form value={todo.text} onSubmit={onSave} onBlur={onSave}>
23 + <input ref={inputRef} defaultValue={todo.text} autoFocus />
24 + </form>
25 + ) : (
26 + <div
27 + className={"TodoBody" + (todo.done ? " done" : "")}
28 + onClick={() => setIsEditing(true)}
29 + >
30 + {todo.text}
31 + </div>
32 + );
33 +
34 + const checkBox = !isEditing && (
35 + <button
36 + className={todo.done ? "Checkbox done" : "Checkbox"}
37 + onClick={e => {
38 + e.target.blur();
39 + onChange({
40 + ...todo,
41 + done: !todo.done,
42 + });
43 + }}
44 + ></button>
45 + );
46 +
47 + return (
48 + <li className="Todo">
49 + {checkBox}
50 + {todoBody}
51 + <div className="tail"></div>
52 + </li>
53 + );
54 +}
compiler/forget/packages/demo-todolist-playground/src/source/NeoTodo.js new
+53
@@ -0,0 +1,53 @@
1 +import React, { useState, useRef } from "react";
2 +import CountBadge from "../Components/CountBadge";
3 +
4 +export default function Todo({ todo, onChange }) {
5 + const inputRef = useRef(null);
6 + const count = useRef(0);
7 + const [isEditing, setIsEditing] = useState(false);
8 +
9 + const onSave = e => {
10 + e.preventDefault();
11 + setIsEditing(false);
12 + onChange({
13 + ...todo,
14 + text: inputRef.current.value,
15 + });
16 + };
17 +
18 + const TodoBody = isEditing ? (
19 + <form value={todo.text} onSubmit={onSave} onBlur={onSave}>
20 + <input ref={inputRef} defaultValue={todo.text} autoFocus />
21 + </form>
22 + ) : (
23 + <div
24 + className={"TodoBody" + (todo.done ? " done" : "")}
25 + onClick={() => setIsEditing(true)}
26 + >
27 + {todo.text}
28 + </div>
29 + );
30 +
31 + const checkBox = !isEditing && (
32 + <button
33 + className={todo.done ? "Checkbox done" : "Checkbox"}
34 + onClick={e => {
35 + e.target.blur();
36 + onChange({
37 + ...todo,
38 + done: !todo.done,
39 + });
40 + }}
41 + ></button>
42 + );
43 +
44 + return (
45 + <li className="Todo">
46 + {checkBox}
47 + {TodoBody}
48 + <div className="tail">
49 + <CountBadge count={count.current++} type={"warning"} rounded />
50 + </div>
51 + </li>
52 + );
53 +}
compiler/forget/packages/demo-todolist-playground/src/source/NeoTodoNoBadge.js new
+54
@@ -0,0 +1,54 @@
1 +import React, { useState, useRef } from "react";
2 +import CountBadge from "../Components/CountBadge";
3 +
4 +/**
5 + * Until Forget supports default props...
6 + */
7 +export default function Todo({ todo, onChange }) {
8 + const inputRef = useRef(null);
9 + const count = useRef(0);
10 + const [isEditing, setIsEditing] = useState(false);
11 +
12 + const onSave = e => {
13 + e.preventDefault();
14 + setIsEditing(false);
15 + onChange({
16 + ...Todo,
17 + text: inputRef.current.value,
18 + });
19 + };
20 +
21 + const TodoBody = isEditing ? (
22 + <form value={todo.text} onSubmit={onSave} onBlur={onSave}>
23 + <input ref={inputRef} defaultValue={todo.text} autoFocus />
24 + </form>
25 + ) : (
26 + <div
27 + className={"TodoBody" + (todo.done ? " done" : "")}
28 + onClick={() => setIsEditing(true)}
29 + >
30 + {todo.text}
31 + </div>
32 + );
33 +
34 + const checkBox = !isEditing && (
35 + <button
36 + className={todo.done ? "Checkbox done" : "Checkbox"}
37 + onClick={e => {
38 + e.target.blur();
39 + onChange({
40 + ...todo,
41 + done: !todo.done,
42 + });
43 + }}
44 + ></button>
45 + );
46 +
47 + return (
48 + <li className="Todo">
49 + {checkBox}
50 + {TodoBody}
51 + <div className="tail"></div>
52 + </li>
53 + );
54 +}
compiler/forget/packages/demo-todolist-playground/src/source/TaskBoardContext.js new
+61
@@ -0,0 +1,61 @@
1 +import { createContext, useContext, useReducer } from "react";
2 +
3 +const TasksContext = createContext(null);
4 +
5 +const TasksDispatchContext = createContext(null);
6 +
7 +export function TasksProvider({ children }) {
8 + const [tasks, dispatch] = useReducer(tasksReducer, initialTasks);
9 +
10 + return (
11 + <TasksContext.Provider value={tasks}>
12 + <TasksDispatchContext.Provider value={dispatch}>
13 + {children}
14 + </TasksDispatchContext.Provider>
15 + </TasksContext.Provider>
16 + );
17 +}
18 +
19 +export function useTasks() {
20 + return useContext(TasksContext);
21 +}
22 +
23 +export function useTasksDispatch() {
24 + return useContext(TasksDispatchContext);
25 +}
26 +
27 +function tasksReducer(tasks, action) {
28 + switch (action.type) {
29 + case "added": {
30 + return [
31 + ...tasks,
32 + {
33 + id: action.id,
34 + text: action.text,
35 + done: false,
36 + },
37 + ];
38 + }
39 + case "changed": {
40 + return tasks.map(t => {
41 + if (t.id === action.task.id) {
42 + return action.task;
43 + } else {
44 + return t;
45 + }
46 + });
47 + }
48 + case "deleted": {
49 + return tasks.filter(t => t.id !== action.id);
50 + }
51 + default: {
52 + throw Error("Unknown action: " + action.type);
53 + }
54 + }
55 +}
56 +
57 +const initialTasks = [
58 + { id: 0, text: "Buy milk", done: true },
59 + { id: 1, text: "Eat tacos", done: false },
60 + { id: 2, text: "Brew tea", done: false },
61 +];
compiler/forget/packages/demo-todolist-playground/src/source/getFiltered.js new
+21
@@ -0,0 +1,21 @@
1 +function delay() {
2 + let now = performance.now();
3 + while (performance.now() - now < 16) {
4 + // Artificial delay -- do nothing for 100ms
5 + }
6 +}
7 +export default function getFiltered(todos, visibility) {
8 + //delay()
9 + // This only works when there is only one counter unfortunately...
10 + const $filterCountBadge = document.querySelector(".FilterCountBanner .badge");
11 + if ($filterCountBadge)
12 + $filterCountBadge.textContent = parseInt($filterCountBadge.textContent) + 1;
13 + switch (visibility) {
14 + case "all":
15 + return todos;
16 + case "active":
17 + return todos.filter(t => !t.done);
18 + case "completed":
19 + return todos.filter(t => t.done);
20 + }
21 +}
compiler/forget/packages/demo-todolist-playground/src/source/getUpdated.js new
+12
@@ -0,0 +1,12 @@
1 +// Update an array in an immutable manner.
2 +export default function getUpdated(todos, newTodo) {
3 + return todos
4 + .map(t => {
5 + if (t.id === newTodo.id) {
6 + return newTodo;
7 + } else {
8 + return t;
9 + }
10 + })
11 + .filter(t => !!t.text);
12 +}
compiler/forget/packages/demo-todolist-playground/src/source/initialTodos.js new
+7
@@ -0,0 +1,7 @@
1 +const initialTodos = [
2 + { id: 0, text: "memo", done: true },
3 + { id: 1, text: "useCallback", done: false },
4 + { id: 2, text: "useMemo", done: false },
5 +];
6 +
7 +export default initialTodos;
compiler/forget/packages/demo-todolist-playground/src/styles.css new
+69
@@ -0,0 +1,69 @@
1 +* {
2 + box-sizing: border-box;
3 +}
4 +
5 +body {
6 + font-family: sans-serif;
7 + margin: 20px;
8 + padding: 0;
9 + /* React dark bg */
10 + background-color: #24272e;
11 +}
12 +
13 +h1 {
14 + margin-top: 0;
15 + font-size: 22px;
16 +}
17 +
18 +h2 {
19 + margin-top: 0;
20 + font-size: 20px;
21 +}
22 +
23 +h3 {
24 + margin-top: 0;
25 + font-size: 18px;
26 +}
27 +
28 +h4 {
29 + margin-top: 0;
30 + font-size: 16px;
31 +}
32 +
33 +h5 {
34 + margin-top: 0;
35 + font-size: 14px;
36 +}
37 +
38 +h6 {
39 + margin-top: 0;
40 + font-size: 12px;
41 +}
42 +
43 +ul {
44 + padding-left: 20px;
45 +}
46 +
47 +button {
48 + margin: 5px;
49 +}
50 +li {
51 + list-style-type: none;
52 +}
53 +ul,
54 +li {
55 + margin: 0;
56 + padding: 0;
57 +}
58 +
59 +.row {
60 + display: flex;
61 +}
62 +
63 +.column {
64 + flex-direction: column;
65 + flex: 1;
66 + padding: 32px;
67 + display: flex;
68 + align-items: center;
69 +}
compiler/forget/packages/demo-todolist-playground/yarn.lock new
+11350
@@ -0,0 +1,11350 @@
1 +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
2 +# yarn lockfile v1
3 +
4 +
5 +"@babel/cli@^7.15.7":
6 + version "7.15.7"
7 + resolved "https://registry.yarnpkg.com/@babel/cli/-/cli-7.15.7.tgz"
8 + integrity sha512-YW5wOprO2LzMjoWZ5ZG6jfbY9JnkDxuHDwvnrThnuYtByorova/I0HNXJedrUfwuXFQfYOjcqDA4PU3qlZGZjg==
9 + dependencies:
10 + commander "^4.0.1"
11 + convert-source-map "^1.1.0"
12 + fs-readdir-recursive "^1.1.0"
13 + glob "^7.0.0"
14 + make-dir "^2.1.0"
15 + slash "^2.0.0"
16 + source-map "^0.5.0"
17 + optionalDependencies:
18 + "@nicolo-ribaudo/chokidar-2" "2.1.8-no-fsevents.3"
19 + chokidar "^3.4.0"
20 +
21 +"@babel/code-frame@7.10.4":
22 + version "7.10.4"
23 + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.10.4.tgz"
24 + integrity sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==
25 + dependencies:
26 + "@babel/highlight" "^7.10.4"
27 +
28 +"@babel/code-frame@7.12.11":
29 + version "7.12.11"
30 + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.12.11.tgz"
31 + integrity sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==
32 + dependencies:
33 + "@babel/highlight" "^7.10.4"
34 +
35 +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.14.5", "@babel/code-frame@^7.15.8", "@babel/code-frame@^7.5.5":
36 + version "7.15.8"
37 + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.15.8.tgz"
38 + integrity sha512-2IAnmn8zbvC/jKYhq5Ki9I+DwjlrtMPUCH/CpHvqI4dNnlwHwsxoIhlc8WcYY5LSYknXQtAlFYuHfqAFCvQ4Wg==
39 + dependencies:
40 + "@babel/highlight" "^7.14.5"
41 +
42 +"@babel/compat-data@^7.12.1", "@babel/compat-data@^7.13.11", "@babel/compat-data@^7.15.0":
43 + version "7.15.0"
44 + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.15.0.tgz"
45 + integrity sha512-0NqAC1IJE0S0+lL1SWFMxMkz1pKCNCjI4tr2Zx4LJSXxCLAdr6KyArnY+sno5m3yH9g737ygOyPABDsnXkpxiA==
46 +
47 +"@babel/core@7.12.3":
48 + version "7.12.3"
49 + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.12.3.tgz"
50 + integrity sha512-0qXcZYKZp3/6N2jKYVxZv0aNCsxTSVCiK72DTiTYZAu7sjg73W0/aynWjMbiGd87EQL4WyA8reiJVh92AVla9g==
51 + dependencies:
52 + "@babel/code-frame" "^7.10.4"
53 + "@babel/generator" "^7.12.1"
54 + "@babel/helper-module-transforms" "^7.12.1"
55 + "@babel/helpers" "^7.12.1"
56 + "@babel/parser" "^7.12.3"
57 + "@babel/template" "^7.10.4"
58 + "@babel/traverse" "^7.12.1"
59 + "@babel/types" "^7.12.1"
60 + convert-source-map "^1.7.0"
61 + debug "^4.1.0"
62 + gensync "^1.0.0-beta.1"
63 + json5 "^2.1.2"
64 + lodash "^4.17.19"
65 + resolve "^1.3.2"
66 + semver "^5.4.1"
67 + source-map "^0.5.0"
68 +
69 +"@babel/core@^7.1.0", "@babel/core@^7.12.3", "@babel/core@^7.15.5", "@babel/core@^7.7.5", "@babel/core@^7.8.4":
70 + version "7.15.8"
71 + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.15.8.tgz"
72 + integrity sha512-3UG9dsxvYBMYwRv+gS41WKHno4K60/9GPy1CJaH6xy3Elq8CTtvtjT5R5jmNhXfCYLX2mTw+7/aq5ak/gOE0og==
73 + dependencies:
74 + "@babel/code-frame" "^7.15.8"
75 + "@babel/generator" "^7.15.8"
76 + "@babel/helper-compilation-targets" "^7.15.4"
77 + "@babel/helper-module-transforms" "^7.15.8"
78 + "@babel/helpers" "^7.15.4"
79 + "@babel/parser" "^7.15.8"
80 + "@babel/template" "^7.15.4"
81 + "@babel/traverse" "^7.15.4"
82 + "@babel/types" "^7.15.6"
83 + convert-source-map "^1.7.0"
84 + debug "^4.1.0"
85 + gensync "^1.0.0-beta.2"
86 + json5 "^2.1.2"
87 + semver "^6.3.0"
88 + source-map "^0.5.0"
89 +
90 +"@babel/generator@^7.12.1", "@babel/generator@^7.15.4", "@babel/generator@^7.15.8":
91 + version "7.15.8"
92 + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.15.8.tgz"
93 + integrity sha512-ECmAKstXbp1cvpTTZciZCgfOt6iN64lR0d+euv3UZisU5awfRawOvg07Utn/qBGuH4bRIEZKrA/4LzZyXhZr8g==
94 + dependencies:
95 + "@babel/types" "^7.15.6"
96 + jsesc "^2.5.1"
97 + source-map "^0.5.0"
98 +
99 +"@babel/helper-annotate-as-pure@^7.14.5", "@babel/helper-annotate-as-pure@^7.15.4":
100 + version "7.15.4"
101 + resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.15.4.tgz"
102 + integrity sha512-QwrtdNvUNsPCj2lfNQacsGSQvGX8ee1ttrBrcozUP2Sv/jylewBP/8QFe6ZkBsC8T/GYWonNAWJV4aRR9AL2DA==
103 + dependencies:
104 + "@babel/types" "^7.15.4"
105 +
106 +"@babel/helper-builder-binary-assignment-operator-visitor@^7.14.5":
107 + version "7.15.4"
108 + resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.15.4.tgz"
109 + integrity sha512-P8o7JP2Mzi0SdC6eWr1zF+AEYvrsZa7GSY1lTayjF5XJhVH0kjLYUZPvTMflP7tBgZoe9gIhTa60QwFpqh/E0Q==
110 + dependencies:
111 + "@babel/helper-explode-assignable-expression" "^7.15.4"
112 + "@babel/types" "^7.15.4"
113 +
114 +"@babel/helper-compilation-targets@^7.12.1", "@babel/helper-compilation-targets@^7.13.0", "@babel/helper-compilation-targets@^7.15.4":
115 + version "7.15.4"
116 + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.15.4.tgz"
117 + integrity sha512-rMWPCirulnPSe4d+gwdWXLfAXTTBj8M3guAf5xFQJ0nvFY7tfNAFnWdqaHegHlgDZOCT4qvhF3BYlSJag8yhqQ==
118 + dependencies:
119 + "@babel/compat-data" "^7.15.0"
120 + "@babel/helper-validator-option" "^7.14.5"
121 + browserslist "^4.16.6"
122 + semver "^6.3.0"
123 +
124 +"@babel/helper-create-class-features-plugin@^7.12.1", "@babel/helper-create-class-features-plugin@^7.14.5", "@babel/helper-create-class-features-plugin@^7.15.4":
125 + version "7.15.4"
126 + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.15.4.tgz"
127 + integrity sha512-7ZmzFi+DwJx6A7mHRwbuucEYpyBwmh2Ca0RvI6z2+WLZYCqV0JOaLb+u0zbtmDicebgKBZgqbYfLaKNqSgv5Pw==
128 + dependencies:
129 + "@babel/helper-annotate-as-pure" "^7.15.4"
130 + "@babel/helper-function-name" "^7.15.4"
131 + "@babel/helper-member-expression-to-functions" "^7.15.4"
132 + "@babel/helper-optimise-call-expression" "^7.15.4"
133 + "@babel/helper-replace-supers" "^7.15.4"
134 + "@babel/helper-split-export-declaration" "^7.15.4"
135 +
136 +"@babel/helper-create-regexp-features-plugin@^7.14.5":
137 + version "7.14.5"
138 + resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.14.5.tgz"
139 + integrity sha512-TLawwqpOErY2HhWbGJ2nZT5wSkR192QpN+nBg1THfBfftrlvOh+WbhrxXCH4q4xJ9Gl16BGPR/48JA+Ryiho/A==
140 + dependencies:
141 + "@babel/helper-annotate-as-pure" "^7.14.5"
142 + regexpu-core "^4.7.1"
143 +
144 +"@babel/helper-define-polyfill-provider@^0.2.2":
145 + version "0.2.3"
146 + resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.2.3.tgz"
147 + integrity sha512-RH3QDAfRMzj7+0Nqu5oqgO5q9mFtQEVvCRsi8qCEfzLR9p2BHfn5FzhSB2oj1fF7I2+DcTORkYaQ6aTR9Cofew==
148 + dependencies:
149 + "@babel/helper-compilation-targets" "^7.13.0"
150 + "@babel/helper-module-imports" "^7.12.13"
151 + "@babel/helper-plugin-utils" "^7.13.0"
152 + "@babel/traverse" "^7.13.0"
153 + debug "^4.1.1"
154 + lodash.debounce "^4.0.8"
155 + resolve "^1.14.2"
156 + semver "^6.1.2"
157 +
158 +"@babel/helper-explode-assignable-expression@^7.15.4":
159 + version "7.15.4"
160 + resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.15.4.tgz"
161 + integrity sha512-J14f/vq8+hdC2KoWLIQSsGrC9EFBKE4NFts8pfMpymfApds+fPqR30AOUWc4tyr56h9l/GA1Sxv2q3dLZWbQ/g==
162 + dependencies:
163 + "@babel/types" "^7.15.4"
164 +
165 +"@babel/helper-function-name@^7.14.5", "@babel/helper-function-name@^7.15.4":
166 + version "7.15.4"
167 + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.15.4.tgz"
168 + integrity sha512-Z91cOMM4DseLIGOnog+Z8OI6YseR9bua+HpvLAQ2XayUGU+neTtX+97caALaLdyu53I/fjhbeCnWnRH1O3jFOw==
169 + dependencies:
170 + "@babel/helper-get-function-arity" "^7.15.4"
171 + "@babel/template" "^7.15.4"
172 + "@babel/types" "^7.15.4"
173 +
174 +"@babel/helper-get-function-arity@^7.15.4":
175 + version "7.15.4"
176 + resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.15.4.tgz"
177 + integrity sha512-1/AlxSF92CmGZzHnC515hm4SirTxtpDnLEJ0UyEMgTMZN+6bxXKg04dKhiRx5Enel+SUA1G1t5Ed/yQia0efrA==
178 + dependencies:
179 + "@babel/types" "^7.15.4"
180 +
181 +"@babel/helper-hoist-variables@^7.15.4":
182 + version "7.15.4"
183 + resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.15.4.tgz"
184 + integrity sha512-VTy085egb3jUGVK9ycIxQiPbquesq0HUQ+tPO0uv5mPEBZipk+5FkRKiWq5apuyTE9FUrjENB0rCf8y+n+UuhA==
185 + dependencies:
186 + "@babel/types" "^7.15.4"
187 +
188 +"@babel/helper-member-expression-to-functions@^7.15.4":
189 + version "7.15.4"
190 + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.15.4.tgz"
191 + integrity sha512-cokOMkxC/BTyNP1AlY25HuBWM32iCEsLPI4BHDpJCHHm1FU2E7dKWWIXJgQgSFiu4lp8q3bL1BIKwqkSUviqtA==
192 + dependencies:
193 + "@babel/types" "^7.15.4"
194 +
195 +"@babel/helper-module-imports@^7.0.0", "@babel/helper-module-imports@^7.12.1", "@babel/helper-module-imports@^7.12.13", "@babel/helper-module-imports@^7.14.5", "@babel/helper-module-imports@^7.15.4":
196 + version "7.15.4"
197 + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.15.4.tgz"
198 + integrity sha512-jeAHZbzUwdW/xHgHQ3QmWR4Jg6j15q4w/gCfwZvtqOxoo5DKtLHk8Bsf4c5RZRC7NmLEs+ohkdq8jFefuvIxAA==
199 + dependencies:
200 + "@babel/types" "^7.15.4"
201 +
202 +"@babel/helper-module-transforms@^7.12.1", "@babel/helper-module-transforms@^7.14.5", "@babel/helper-module-transforms@^7.15.4", "@babel/helper-module-transforms@^7.15.8":
203 + version "7.15.8"
204 + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.15.8.tgz"
205 + integrity sha512-DfAfA6PfpG8t4S6npwzLvTUpp0sS7JrcuaMiy1Y5645laRJIp/LiLGIBbQKaXSInK8tiGNI7FL7L8UvB8gdUZg==
206 + dependencies:
207 + "@babel/helper-module-imports" "^7.15.4"
208 + "@babel/helper-replace-supers" "^7.15.4"
209 + "@babel/helper-simple-access" "^7.15.4"
210 + "@babel/helper-split-export-declaration" "^7.15.4"
211 + "@babel/helper-validator-identifier" "^7.15.7"
212 + "@babel/template" "^7.15.4"
213 + "@babel/traverse" "^7.15.4"
214 + "@babel/types" "^7.15.6"
215 +
216 +"@babel/helper-optimise-call-expression@^7.15.4":
217 + version "7.15.4"
218 + resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.15.4.tgz"
219 + integrity sha512-E/z9rfbAOt1vDW1DR7k4SzhzotVV5+qMciWV6LaG1g4jeFrkDlJedjtV4h0i4Q/ITnUu+Pk08M7fczsB9GXBDw==
220 + dependencies:
221 + "@babel/types" "^7.15.4"
222 +
223 +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.13.0", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3":
224 + version "7.14.5"
225 + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz"
226 + integrity sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==
227 +
228 +"@babel/helper-remap-async-to-generator@^7.14.5", "@babel/helper-remap-async-to-generator@^7.15.4":
229 + version "7.15.4"
230 + resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.15.4.tgz"
231 + integrity sha512-v53MxgvMK/HCwckJ1bZrq6dNKlmwlyRNYM6ypaRTdXWGOE2c1/SCa6dL/HimhPulGhZKw9W0QhREM583F/t0vQ==
232 + dependencies:
233 + "@babel/helper-annotate-as-pure" "^7.15.4"
234 + "@babel/helper-wrap-function" "^7.15.4"
235 + "@babel/types" "^7.15.4"
236 +
237 +"@babel/helper-replace-supers@^7.14.5", "@babel/helper-replace-supers@^7.15.4":
238 + version "7.15.4"
239 + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.15.4.tgz"
240 + integrity sha512-/ztT6khaXF37MS47fufrKvIsiQkx1LBRvSJNzRqmbyeZnTwU9qBxXYLaaT/6KaxfKhjs2Wy8kG8ZdsFUuWBjzw==
241 + dependencies:
242 + "@babel/helper-member-expression-to-functions" "^7.15.4"
243 + "@babel/helper-optimise-call-expression" "^7.15.4"
244 + "@babel/traverse" "^7.15.4"
245 + "@babel/types" "^7.15.4"
246 +
247 +"@babel/helper-simple-access@^7.15.4":
248 + version "7.15.4"
249 + resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.15.4.tgz"
250 + integrity sha512-UzazrDoIVOZZcTeHHEPYrr1MvTR/K+wgLg6MY6e1CJyaRhbibftF6fR2KU2sFRtI/nERUZR9fBd6aKgBlIBaPg==
251 + dependencies:
252 + "@babel/types" "^7.15.4"
253 +
254 +"@babel/helper-skip-transparent-expression-wrappers@^7.12.1", "@babel/helper-skip-transparent-expression-wrappers@^7.14.5", "@babel/helper-skip-transparent-expression-wrappers@^7.15.4":
255 + version "7.15.4"
256 + resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.15.4.tgz"
257 + integrity sha512-BMRLsdh+D1/aap19TycS4eD1qELGrCBJwzaY9IE8LrpJtJb+H7rQkPIdsfgnMtLBA6DJls7X9z93Z4U8h7xw0A==
258 + dependencies:
259 + "@babel/types" "^7.15.4"
260 +
261 +"@babel/helper-split-export-declaration@^7.15.4":
262 + version "7.15.4"
263 + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.15.4.tgz"
264 + integrity sha512-HsFqhLDZ08DxCpBdEVtKmywj6PQbwnF6HHybur0MAnkAKnlS6uHkwnmRIkElB2Owpfb4xL4NwDmDLFubueDXsw==
265 + dependencies:
266 + "@babel/types" "^7.15.4"
267 +
268 +"@babel/helper-validator-identifier@^7.14.5", "@babel/helper-validator-identifier@^7.14.9", "@babel/helper-validator-identifier@^7.15.7":
269 + version "7.15.7"
270 + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.15.7.tgz"
271 + integrity sha512-K4JvCtQqad9OY2+yTU8w+E82ywk/fe+ELNlt1G8z3bVGlZfn/hOcQQsUhGhW/N+tb3fxK800wLtKOE/aM0m72w==
272 +
273 +"@babel/helper-validator-option@^7.12.1", "@babel/helper-validator-option@^7.14.5":
274 + version "7.14.5"
275 + resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.14.5.tgz"
276 + integrity sha512-OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow==
277 +
278 +"@babel/helper-wrap-function@^7.15.4":
279 + version "7.15.4"
280 + resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.15.4.tgz"
281 + integrity sha512-Y2o+H/hRV5W8QhIfTpRIBwl57y8PrZt6JM3V8FOo5qarjshHItyH5lXlpMfBfmBefOqSCpKZs/6Dxqp0E/U+uw==
282 + dependencies:
283 + "@babel/helper-function-name" "^7.15.4"
284 + "@babel/template" "^7.15.4"
285 + "@babel/traverse" "^7.15.4"
286 + "@babel/types" "^7.15.4"
287 +
288 +"@babel/helpers@^7.12.1", "@babel/helpers@^7.15.4":
289 + version "7.15.4"
290 + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.15.4.tgz"
291 + integrity sha512-V45u6dqEJ3w2rlryYYXf6i9rQ5YMNu4FLS6ngs8ikblhu2VdR1AqAd6aJjBzmf2Qzh6KOLqKHxEN9+TFbAkAVQ==
292 + dependencies:
293 + "@babel/template" "^7.15.4"
294 + "@babel/traverse" "^7.15.4"
295 + "@babel/types" "^7.15.4"
296 +
297 +"@babel/highlight@^7.10.4", "@babel/highlight@^7.14.5":
298 + version "7.14.5"
299 + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.14.5.tgz"
300 + integrity sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==
301 + dependencies:
302 + "@babel/helper-validator-identifier" "^7.14.5"
303 + chalk "^2.0.0"
304 + js-tokens "^4.0.0"
305 +
306 +"@babel/parser@^7.1.0", "@babel/parser@^7.12.3", "@babel/parser@^7.14.7", "@babel/parser@^7.15.4", "@babel/parser@^7.15.8", "@babel/parser@^7.7.0":
307 + version "7.15.8"
308 + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.15.8.tgz"
309 + integrity sha512-BRYa3wcQnjS/nqI8Ac94pYYpJfojHVvVXJ97+IDCImX4Jc8W8Xv1+47enbruk+q1etOpsQNwnfFcNGw+gtPGxA==
310 +
311 +"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.15.4":
312 + version "7.15.4"
313 + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.15.4.tgz"
314 + integrity sha512-eBnpsl9tlhPhpI10kU06JHnrYXwg3+V6CaP2idsCXNef0aeslpqyITXQ74Vfk5uHgY7IG7XP0yIH8b42KSzHog==
315 + dependencies:
316 + "@babel/helper-plugin-utils" "^7.14.5"
317 + "@babel/helper-skip-transparent-expression-wrappers" "^7.15.4"
318 + "@babel/plugin-proposal-optional-chaining" "^7.14.5"
319 +
320 +"@babel/plugin-proposal-async-generator-functions@^7.12.1", "@babel/plugin-proposal-async-generator-functions@^7.15.8":
321 + version "7.15.8"
322 + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.15.8.tgz"
323 + integrity sha512-2Z5F2R2ibINTc63mY7FLqGfEbmofrHU9FitJW1Q7aPaKFhiPvSq6QEt/BoWN5oME3GVyjcRuNNSRbb9LC0CSWA==
324 + dependencies:
325 + "@babel/helper-plugin-utils" "^7.14.5"
326 + "@babel/helper-remap-async-to-generator" "^7.15.4"
327 + "@babel/plugin-syntax-async-generators" "^7.8.4"
328 +
329 +"@babel/plugin-proposal-class-properties@7.12.1":
330 + version "7.12.1"
331 + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.12.1.tgz"
332 + integrity sha512-cKp3dlQsFsEs5CWKnN7BnSHOd0EOW8EKpEjkoz1pO2E5KzIDNV9Ros1b0CnmbVgAGXJubOYVBOGCT1OmJwOI7w==
333 + dependencies:
334 + "@babel/helper-create-class-features-plugin" "^7.12.1"
335 + "@babel/helper-plugin-utils" "^7.10.4"
336 +
337 +"@babel/plugin-proposal-class-properties@^7.12.1", "@babel/plugin-proposal-class-properties@^7.14.5":
338 + version "7.14.5"
339 + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.14.5.tgz"
340 + integrity sha512-q/PLpv5Ko4dVc1LYMpCY7RVAAO4uk55qPwrIuJ5QJ8c6cVuAmhu7I/49JOppXL6gXf7ZHzpRVEUZdYoPLM04Gg==
341 + dependencies:
342 + "@babel/helper-create-class-features-plugin" "^7.14.5"
343 + "@babel/helper-plugin-utils" "^7.14.5"
344 +
345 +"@babel/plugin-proposal-class-static-block@^7.15.4":
346 + version "7.15.4"
347 + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.15.4.tgz"
348 + integrity sha512-M682XWrrLNk3chXCjoPUQWOyYsB93B9z3mRyjtqqYJWDf2mfCdIYgDrA11cgNVhAQieaq6F2fn2f3wI0U4aTjA==
349 + dependencies:
350 + "@babel/helper-create-class-features-plugin" "^7.15.4"
351 + "@babel/helper-plugin-utils" "^7.14.5"
352 + "@babel/plugin-syntax-class-static-block" "^7.14.5"
353 +
354 +"@babel/plugin-proposal-decorators@7.12.1":
355 + version "7.12.1"
356 + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.12.1.tgz"
357 + integrity sha512-knNIuusychgYN8fGJHONL0RbFxLGawhXOJNLBk75TniTsZZeA+wdkDuv6wp4lGwzQEKjZi6/WYtnb3udNPmQmQ==
358 + dependencies:
359 + "@babel/helper-create-class-features-plugin" "^7.12.1"
360 + "@babel/helper-plugin-utils" "^7.10.4"
361 + "@babel/plugin-syntax-decorators" "^7.12.1"
362 +
363 +"@babel/plugin-proposal-dynamic-import@^7.12.1", "@babel/plugin-proposal-dynamic-import@^7.14.5":
364 + version "7.14.5"
365 + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.14.5.tgz"
366 + integrity sha512-ExjiNYc3HDN5PXJx+bwC50GIx/KKanX2HiggnIUAYedbARdImiCU4RhhHfdf0Kd7JNXGpsBBBCOm+bBVy3Gb0g==
367 + dependencies:
368 + "@babel/helper-plugin-utils" "^7.14.5"
369 + "@babel/plugin-syntax-dynamic-import" "^7.8.3"
370 +
371 +"@babel/plugin-proposal-export-namespace-from@^7.12.1", "@babel/plugin-proposal-export-namespace-from@^7.14.5":
372 + version "7.14.5"
373 + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.14.5.tgz"
374 + integrity sha512-g5POA32bXPMmSBu5Dx/iZGLGnKmKPc5AiY7qfZgurzrCYgIztDlHFbznSNCoQuv57YQLnQfaDi7dxCtLDIdXdA==
375 + dependencies:
376 + "@babel/helper-plugin-utils" "^7.14.5"
377 + "@babel/plugin-syntax-export-namespace-from" "^7.8.3"
378 +
379 +"@babel/plugin-proposal-json-strings@^7.12.1", "@babel/plugin-proposal-json-strings@^7.14.5":
380 + version "7.14.5"
381 + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.14.5.tgz"
382 + integrity sha512-NSq2fczJYKVRIsUJyNxrVUMhB27zb7N7pOFGQOhBKJrChbGcgEAqyZrmZswkPk18VMurEeJAaICbfm57vUeTbQ==
383 + dependencies:
384 + "@babel/helper-plugin-utils" "^7.14.5"
385 + "@babel/plugin-syntax-json-strings" "^7.8.3"
386 +
387 +"@babel/plugin-proposal-logical-assignment-operators@^7.12.1", "@babel/plugin-proposal-logical-assignment-operators@^7.14.5":
388 + version "7.14.5"
389 + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.14.5.tgz"
390 + integrity sha512-YGn2AvZAo9TwyhlLvCCWxD90Xq8xJ4aSgaX3G5D/8DW94L8aaT+dS5cSP+Z06+rCJERGSr9GxMBZ601xoc2taw==
391 + dependencies:
392 + "@babel/helper-plugin-utils" "^7.14.5"
393 + "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4"
394 +
395 +"@babel/plugin-proposal-nullish-coalescing-operator@7.12.1":
396 + version "7.12.1"
397 + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.12.1.tgz"
398 + integrity sha512-nZY0ESiaQDI1y96+jk6VxMOaL4LPo/QDHBqL+SF3/vl6dHkTwHlOI8L4ZwuRBHgakRBw5zsVylel7QPbbGuYgg==
399 + dependencies:
400 + "@babel/helper-plugin-utils" "^7.10.4"
401 + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.0"
402 +
403 +"@babel/plugin-proposal-nullish-coalescing-operator@^7.12.1", "@babel/plugin-proposal-nullish-coalescing-operator@^7.14.5":
404 + version "7.14.5"
405 + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.14.5.tgz"
406 + integrity sha512-gun/SOnMqjSb98Nkaq2rTKMwervfdAoz6NphdY0vTfuzMfryj+tDGb2n6UkDKwez+Y8PZDhE3D143v6Gepp4Hg==
407 + dependencies:
408 + "@babel/helper-plugin-utils" "^7.14.5"
409 + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3"
410 +
411 +"@babel/plugin-proposal-numeric-separator@7.12.1":
412 + version "7.12.1"
413 + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.12.1.tgz"
414 + integrity sha512-MR7Ok+Af3OhNTCxYVjJZHS0t97ydnJZt/DbR4WISO39iDnhiD8XHrY12xuSJ90FFEGjir0Fzyyn7g/zY6hxbxA==
415 + dependencies:
416 + "@babel/helper-plugin-utils" "^7.10.4"
417 + "@babel/plugin-syntax-numeric-separator" "^7.10.4"
418 +
419 +"@babel/plugin-proposal-numeric-separator@^7.12.1", "@babel/plugin-proposal-numeric-separator@^7.14.5":
420 + version "7.14.5"
421 + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.14.5.tgz"
422 + integrity sha512-yiclALKe0vyZRZE0pS6RXgjUOt87GWv6FYa5zqj15PvhOGFO69R5DusPlgK/1K5dVnCtegTiWu9UaBSrLLJJBg==
423 + dependencies:
424 + "@babel/helper-plugin-utils" "^7.14.5"
425 + "@babel/plugin-syntax-numeric-separator" "^7.10.4"
426 +
427 +"@babel/plugin-proposal-object-rest-spread@^7.12.1", "@babel/plugin-proposal-object-rest-spread@^7.15.6":
428 + version "7.15.6"
429 + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.15.6.tgz"
430 + integrity sha512-qtOHo7A1Vt+O23qEAX+GdBpqaIuD3i9VRrWgCJeq7WO6H2d14EK3q11urj5Te2MAeK97nMiIdRpwd/ST4JFbNg==
431 + dependencies:
432 + "@babel/compat-data" "^7.15.0"
433 + "@babel/helper-compilation-targets" "^7.15.4"
434 + "@babel/helper-plugin-utils" "^7.14.5"
435 + "@babel/plugin-syntax-object-rest-spread" "^7.8.3"
436 + "@babel/plugin-transform-parameters" "^7.15.4"
437 +
438 +"@babel/plugin-proposal-optional-catch-binding@^7.12.1", "@babel/plugin-proposal-optional-catch-binding@^7.14.5":
439 + version "7.14.5"
440 + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.14.5.tgz"
441 + integrity sha512-3Oyiixm0ur7bzO5ybNcZFlmVsygSIQgdOa7cTfOYCMY+wEPAYhZAJxi3mixKFCTCKUhQXuCTtQ1MzrpL3WT8ZQ==
442 + dependencies:
443 + "@babel/helper-plugin-utils" "^7.14.5"
444 + "@babel/plugin-syntax-optional-catch-binding" "^7.8.3"
445 +
446 +"@babel/plugin-proposal-optional-chaining@7.12.1":
447 + version "7.12.1"
448 + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.12.1.tgz"
449 + integrity sha512-c2uRpY6WzaVDzynVY9liyykS+kVU+WRZPMPYpkelXH8KBt1oXoI89kPbZKKG/jDT5UK92FTW2fZkZaJhdiBabw==
450 + dependencies:
451 + "@babel/helper-plugin-utils" "^7.10.4"
452 + "@babel/helper-skip-transparent-expression-wrappers" "^7.12.1"
453 + "@babel/plugin-syntax-optional-chaining" "^7.8.0"
454 +
455 +"@babel/plugin-proposal-optional-chaining@^7.12.1", "@babel/plugin-proposal-optional-chaining@^7.14.5":
456 + version "7.14.5"
457 + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.14.5.tgz"
458 + integrity sha512-ycz+VOzo2UbWNI1rQXxIuMOzrDdHGrI23fRiz/Si2R4kv2XZQ1BK8ccdHwehMKBlcH/joGW/tzrUmo67gbJHlQ==
459 + dependencies:
460 + "@babel/helper-plugin-utils" "^7.14.5"
461 + "@babel/helper-skip-transparent-expression-wrappers" "^7.14.5"
462 + "@babel/plugin-syntax-optional-chaining" "^7.8.3"
463 +
464 +"@babel/plugin-proposal-private-methods@^7.12.1", "@babel/plugin-proposal-private-methods@^7.14.5":
465 + version "7.14.5"
466 + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.14.5.tgz"
467 + integrity sha512-838DkdUA1u+QTCplatfq4B7+1lnDa/+QMI89x5WZHBcnNv+47N8QEj2k9I2MUU9xIv8XJ4XvPCviM/Dj7Uwt9g==
468 + dependencies:
469 + "@babel/helper-create-class-features-plugin" "^7.14.5"
470 + "@babel/helper-plugin-utils" "^7.14.5"
471 +
472 +"@babel/plugin-proposal-private-property-in-object@^7.15.4":
473 + version "7.15.4"
474 + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.15.4.tgz"
475 + integrity sha512-X0UTixkLf0PCCffxgu5/1RQyGGbgZuKoI+vXP4iSbJSYwPb7hu06omsFGBvQ9lJEvwgrxHdS8B5nbfcd8GyUNA==
476 + dependencies:
477 + "@babel/helper-annotate-as-pure" "^7.15.4"
478 + "@babel/helper-create-class-features-plugin" "^7.15.4"
479 + "@babel/helper-plugin-utils" "^7.14.5"
480 + "@babel/plugin-syntax-private-property-in-object" "^7.14.5"
481 +
482 +"@babel/plugin-proposal-unicode-property-regex@^7.12.1", "@babel/plugin-proposal-unicode-property-regex@^7.14.5", "@babel/plugin-proposal-unicode-property-regex@^7.4.4":
483 + version "7.14.5"
484 + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.14.5.tgz"
485 + integrity sha512-6axIeOU5LnY471KenAB9vI8I5j7NQ2d652hIYwVyRfgaZT5UpiqFKCuVXCDMSrU+3VFafnu2c5m3lrWIlr6A5Q==
486 + dependencies:
487 + "@babel/helper-create-regexp-features-plugin" "^7.14.5"
488 + "@babel/helper-plugin-utils" "^7.14.5"
489 +
490 +"@babel/plugin-syntax-async-generators@^7.8.0", "@babel/plugin-syntax-async-generators@^7.8.4":
491 + version "7.8.4"
492 + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz"
493 + integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==
494 + dependencies:
495 + "@babel/helper-plugin-utils" "^7.8.0"
496 +
497 +"@babel/plugin-syntax-bigint@^7.8.3":
498 + version "7.8.3"
499 + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz"
500 + integrity sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==
501 + dependencies:
502 + "@babel/helper-plugin-utils" "^7.8.0"
503 +
504 +"@babel/plugin-syntax-class-properties@^7.12.1", "@babel/plugin-syntax-class-properties@^7.12.13", "@babel/plugin-syntax-class-properties@^7.8.3":
505 + version "7.12.13"
506 + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz"
507 + integrity sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==
508 + dependencies:
509 + "@babel/helper-plugin-utils" "^7.12.13"
510 +
511 +"@babel/plugin-syntax-class-static-block@^7.14.5":
512 + version "7.14.5"
513 + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz"
514 + integrity sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==
515 + dependencies:
516 + "@babel/helper-plugin-utils" "^7.14.5"
517 +
518 +"@babel/plugin-syntax-decorators@^7.12.1":
519 + version "7.14.5"
520 + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.14.5.tgz"
521 + integrity sha512-c4sZMRWL4GSvP1EXy0woIP7m4jkVcEuG8R1TOZxPBPtp4FSM/kiPZub9UIs/Jrb5ZAOzvTUSGYrWsrSu1JvoPw==
522 + dependencies:
523 + "@babel/helper-plugin-utils" "^7.14.5"
524 +
525 +"@babel/plugin-syntax-dynamic-import@^7.8.0", "@babel/plugin-syntax-dynamic-import@^7.8.3":
526 + version "7.8.3"
527 + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz"
528 + integrity sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==
529 + dependencies:
530 + "@babel/helper-plugin-utils" "^7.8.0"
531 +
532 +"@babel/plugin-syntax-export-namespace-from@^7.8.3":
533 + version "7.8.3"
534 + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz"
535 + integrity sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==
536 + dependencies:
537 + "@babel/helper-plugin-utils" "^7.8.3"
538 +
539 +"@babel/plugin-syntax-flow@^7.12.1":
540 + version "7.14.5"
541 + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.14.5.tgz"
542 + integrity sha512-9WK5ZwKCdWHxVuU13XNT6X73FGmutAXeor5lGFq6qhOFtMFUF4jkbijuyUdZZlpYq6E2hZeZf/u3959X9wsv0Q==
543 + dependencies:
544 + "@babel/helper-plugin-utils" "^7.14.5"
545 +
546 +"@babel/plugin-syntax-import-meta@^7.8.3":
547 + version "7.10.4"
548 + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz"
549 + integrity sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==
550 + dependencies:
551 + "@babel/helper-plugin-utils" "^7.10.4"
552 +
553 +"@babel/plugin-syntax-json-strings@^7.8.0", "@babel/plugin-syntax-json-strings@^7.8.3":
554 + version "7.8.3"
555 + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz"
556 + integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==
557 + dependencies:
558 + "@babel/helper-plugin-utils" "^7.8.0"
559 +
560 +"@babel/plugin-syntax-jsx@^7.14.5":
561 + version "7.14.5"
562 + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.14.5.tgz"
563 + integrity sha512-ohuFIsOMXJnbOMRfX7/w7LocdR6R7whhuRD4ax8IipLcLPlZGJKkBxgHp++U4N/vKyU16/YDQr2f5seajD3jIw==
564 + dependencies:
565 + "@babel/helper-plugin-utils" "^7.14.5"
566 +
567 +"@babel/plugin-syntax-logical-assignment-operators@^7.10.4", "@babel/plugin-syntax-logical-assignment-operators@^7.8.3":
568 + version "7.10.4"
569 + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz"
570 + integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==
571 + dependencies:
572 + "@babel/helper-plugin-utils" "^7.10.4"
573 +
574 +"@babel/plugin-syntax-nullish-coalescing-operator@^7.8.0", "@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3":
575 + version "7.8.3"
576 + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz"
577 + integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==
578 + dependencies:
579 + "@babel/helper-plugin-utils" "^7.8.0"
580 +
581 +"@babel/plugin-syntax-numeric-separator@^7.10.4", "@babel/plugin-syntax-numeric-separator@^7.8.3":
582 + version "7.10.4"
583 + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz"
584 + integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==
585 + dependencies:
586 + "@babel/helper-plugin-utils" "^7.10.4"
587 +
588 +"@babel/plugin-syntax-object-rest-spread@^7.8.0", "@babel/plugin-syntax-object-rest-spread@^7.8.3":
589 + version "7.8.3"
590 + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz"
591 + integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==
592 + dependencies:
593 + "@babel/helper-plugin-utils" "^7.8.0"
594 +
595 +"@babel/plugin-syntax-optional-catch-binding@^7.8.0", "@babel/plugin-syntax-optional-catch-binding@^7.8.3":
596 + version "7.8.3"
597 + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz"
598 + integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==
599 + dependencies:
600 + "@babel/helper-plugin-utils" "^7.8.0"
601 +
602 +"@babel/plugin-syntax-optional-chaining@^7.8.0", "@babel/plugin-syntax-optional-chaining@^7.8.3":
603 + version "7.8.3"
604 + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz"
605 + integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==
606 + dependencies:
607 + "@babel/helper-plugin-utils" "^7.8.0"
608 +
609 +"@babel/plugin-syntax-private-property-in-object@^7.14.5":
610 + version "7.14.5"
611 + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz"
612 + integrity sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==
613 + dependencies:
614 + "@babel/helper-plugin-utils" "^7.14.5"
615 +
616 +"@babel/plugin-syntax-top-level-await@^7.12.1", "@babel/plugin-syntax-top-level-await@^7.14.5", "@babel/plugin-syntax-top-level-await@^7.8.3":
617 + version "7.14.5"
618 + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz"
619 + integrity sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==
620 + dependencies:
621 + "@babel/helper-plugin-utils" "^7.14.5"
622 +
623 +"@babel/plugin-syntax-typescript@^7.14.5":
624 + version "7.14.5"
625 + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.14.5.tgz"
626 + integrity sha512-u6OXzDaIXjEstBRRoBCQ/uKQKlbuaeE5in0RvWdA4pN6AhqxTIwUsnHPU1CFZA/amYObMsuWhYfRl3Ch90HD0Q==
627 + dependencies:
628 + "@babel/helper-plugin-utils" "^7.14.5"
629 +
630 +"@babel/plugin-transform-arrow-functions@^7.12.1", "@babel/plugin-transform-arrow-functions@^7.14.5":
631 + version "7.14.5"
632 + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.14.5.tgz"
633 + integrity sha512-KOnO0l4+tD5IfOdi4x8C1XmEIRWUjNRV8wc6K2vz/3e8yAOoZZvsRXRRIF/yo/MAOFb4QjtAw9xSxMXbSMRy8A==
634 + dependencies:
635 + "@babel/helper-plugin-utils" "^7.14.5"
636 +
637 +"@babel/plugin-transform-async-to-generator@^7.12.1", "@babel/plugin-transform-async-to-generator@^7.14.5":
638 + version "7.14.5"
639 + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.14.5.tgz"
640 + integrity sha512-szkbzQ0mNk0rpu76fzDdqSyPu0MuvpXgC+6rz5rpMb5OIRxdmHfQxrktL8CYolL2d8luMCZTR0DpIMIdL27IjA==
641 + dependencies:
642 + "@babel/helper-module-imports" "^7.14.5"
643 + "@babel/helper-plugin-utils" "^7.14.5"
644 + "@babel/helper-remap-async-to-generator" "^7.14.5"
645 +
646 +"@babel/plugin-transform-block-scoped-functions@^7.12.1", "@babel/plugin-transform-block-scoped-functions@^7.14.5":
647 + version "7.14.5"
648 + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.14.5.tgz"
649 + integrity sha512-dtqWqdWZ5NqBX3KzsVCWfQI3A53Ft5pWFCT2eCVUftWZgjc5DpDponbIF1+c+7cSGk2wN0YK7HGL/ezfRbpKBQ==
650 + dependencies:
651 + "@babel/helper-plugin-utils" "^7.14.5"
652 +
653 +"@babel/plugin-transform-block-scoping@^7.12.1", "@babel/plugin-transform-block-scoping@^7.15.3":
654 + version "7.15.3"
655 + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.15.3.tgz"
656 + integrity sha512-nBAzfZwZb4DkaGtOes1Up1nOAp9TDRRFw4XBzBBSG9QK7KVFmYzgj9o9sbPv7TX5ofL4Auq4wZnxCoPnI/lz2Q==
657 + dependencies:
658 + "@babel/helper-plugin-utils" "^7.14.5"
659 +
660 +"@babel/plugin-transform-classes@^7.12.1", "@babel/plugin-transform-classes@^7.15.4":
661 + version "7.15.4"
662 + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.15.4.tgz"
663 + integrity sha512-Yjvhex8GzBmmPQUvpXRPWQ9WnxXgAFuZSrqOK/eJlOGIXwvv8H3UEdUigl1gb/bnjTrln+e8bkZUYCBt/xYlBg==
664 + dependencies:
665 + "@babel/helper-annotate-as-pure" "^7.15.4"
666 + "@babel/helper-function-name" "^7.15.4"
667 + "@babel/helper-optimise-call-expression" "^7.15.4"
668 + "@babel/helper-plugin-utils" "^7.14.5"
669 + "@babel/helper-replace-supers" "^7.15.4"
670 + "@babel/helper-split-export-declaration" "^7.15.4"
671 + globals "^11.1.0"
672 +
673 +"@babel/plugin-transform-computed-properties@^7.12.1", "@babel/plugin-transform-computed-properties@^7.14.5":
674 + version "7.14.5"
675 + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.14.5.tgz"
676 + integrity sha512-pWM+E4283UxaVzLb8UBXv4EIxMovU4zxT1OPnpHJcmnvyY9QbPPTKZfEj31EUvG3/EQRbYAGaYEUZ4yWOBC2xg==
677 + dependencies:
678 + "@babel/helper-plugin-utils" "^7.14.5"
679 +
680 +"@babel/plugin-transform-destructuring@^7.12.1", "@babel/plugin-transform-destructuring@^7.14.7":
681 + version "7.14.7"
682 + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.14.7.tgz"
683 + integrity sha512-0mDE99nK+kVh3xlc5vKwB6wnP9ecuSj+zQCa/n0voENtP/zymdT4HH6QEb65wjjcbqr1Jb/7z9Qp7TF5FtwYGw==
684 + dependencies:
685 + "@babel/helper-plugin-utils" "^7.14.5"
686 +
687 +"@babel/plugin-transform-dotall-regex@^7.12.1", "@babel/plugin-transform-dotall-regex@^7.14.5", "@babel/plugin-transform-dotall-regex@^7.4.4":
688 + version "7.14.5"
689 + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.14.5.tgz"
690 + integrity sha512-loGlnBdj02MDsFaHhAIJzh7euK89lBrGIdM9EAtHFo6xKygCUGuuWe07o1oZVk287amtW1n0808sQM99aZt3gw==
691 + dependencies:
692 + "@babel/helper-create-regexp-features-plugin" "^7.14.5"
693 + "@babel/helper-plugin-utils" "^7.14.5"
694 +
695 +"@babel/plugin-transform-duplicate-keys@^7.12.1", "@babel/plugin-transform-duplicate-keys@^7.14.5":
696 + version "7.14.5"
697 + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.14.5.tgz"
698 + integrity sha512-iJjbI53huKbPDAsJ8EmVmvCKeeq21bAze4fu9GBQtSLqfvzj2oRuHVx4ZkDwEhg1htQ+5OBZh/Ab0XDf5iBZ7A==
699 + dependencies:
700 + "@babel/helper-plugin-utils" "^7.14.5"
701 +
702 +"@babel/plugin-transform-exponentiation-operator@^7.12.1", "@babel/plugin-transform-exponentiation-operator@^7.14.5":
703 + version "7.14.5"
704 + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.14.5.tgz"
705 + integrity sha512-jFazJhMBc9D27o9jDnIE5ZErI0R0m7PbKXVq77FFvqFbzvTMuv8jaAwLZ5PviOLSFttqKIW0/wxNSDbjLk0tYA==
706 + dependencies:
707 + "@babel/helper-builder-binary-assignment-operator-visitor" "^7.14.5"
708 + "@babel/helper-plugin-utils" "^7.14.5"
709 +
710 +"@babel/plugin-transform-flow-strip-types@7.12.1":
711 + version "7.12.1"
712 + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.12.1.tgz"
713 + integrity sha512-8hAtkmsQb36yMmEtk2JZ9JnVyDSnDOdlB+0nEGzIDLuK4yR3JcEjfuFPYkdEPSh8Id+rAMeBEn+X0iVEyho6Hg==
714 + dependencies:
715 + "@babel/helper-plugin-utils" "^7.10.4"
716 + "@babel/plugin-syntax-flow" "^7.12.1"
717 +
718 +"@babel/plugin-transform-for-of@^7.12.1", "@babel/plugin-transform-for-of@^7.15.4":
719 + version "7.15.4"
720 + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.15.4.tgz"
721 + integrity sha512-DRTY9fA751AFBDh2oxydvVm4SYevs5ILTWLs6xKXps4Re/KG5nfUkr+TdHCrRWB8C69TlzVgA9b3RmGWmgN9LA==
722 + dependencies:
723 + "@babel/helper-plugin-utils" "^7.14.5"
724 +
725 +"@babel/plugin-transform-function-name@^7.12.1", "@babel/plugin-transform-function-name@^7.14.5":
726 + version "7.14.5"
727 + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.14.5.tgz"
728 + integrity sha512-vbO6kv0fIzZ1GpmGQuvbwwm+O4Cbm2NrPzwlup9+/3fdkuzo1YqOZcXw26+YUJB84Ja7j9yURWposEHLYwxUfQ==
729 + dependencies:
730 + "@babel/helper-function-name" "^7.14.5"
731 + "@babel/helper-plugin-utils" "^7.14.5"
732 +
733 +"@babel/plugin-transform-literals@^7.12.1", "@babel/plugin-transform-literals@^7.14.5":
734 + version "7.14.5"
735 + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.14.5.tgz"
736 + integrity sha512-ql33+epql2F49bi8aHXxvLURHkxJbSmMKl9J5yHqg4PLtdE6Uc48CH1GS6TQvZ86eoB/ApZXwm7jlA+B3kra7A==
737 + dependencies:
738 + "@babel/helper-plugin-utils" "^7.14.5"
739 +
740 +"@babel/plugin-transform-member-expression-literals@^7.12.1", "@babel/plugin-transform-member-expression-literals@^7.14.5":
741 + version "7.14.5"
742 + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.14.5.tgz"
743 + integrity sha512-WkNXxH1VXVTKarWFqmso83xl+2V3Eo28YY5utIkbsmXoItO8Q3aZxN4BTS2k0hz9dGUloHK26mJMyQEYfkn/+Q==
744 + dependencies:
745 + "@babel/helper-plugin-utils" "^7.14.5"
746 +
747 +"@babel/plugin-transform-modules-amd@^7.12.1", "@babel/plugin-transform-modules-amd@^7.14.5":
748 + version "7.14.5"
749 + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.14.5.tgz"
750 + integrity sha512-3lpOU8Vxmp3roC4vzFpSdEpGUWSMsHFreTWOMMLzel2gNGfHE5UWIh/LN6ghHs2xurUp4jRFYMUIZhuFbody1g==
751 + dependencies:
752 + "@babel/helper-module-transforms" "^7.14.5"
753 + "@babel/helper-plugin-utils" "^7.14.5"
754 + babel-plugin-dynamic-import-node "^2.3.3"
755 +
756 +"@babel/plugin-transform-modules-commonjs@^7.12.1", "@babel/plugin-transform-modules-commonjs@^7.15.4":
757 + version "7.15.4"
758 + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.15.4.tgz"
759 + integrity sha512-qg4DPhwG8hKp4BbVDvX1s8cohM8a6Bvptu4l6Iingq5rW+yRUAhe/YRup/YcW2zCOlrysEWVhftIcKzrEZv3sA==
760 + dependencies:
761 + "@babel/helper-module-transforms" "^7.15.4"
762 + "@babel/helper-plugin-utils" "^7.14.5"
763 + "@babel/helper-simple-access" "^7.15.4"
764 + babel-plugin-dynamic-import-node "^2.3.3"
765 +
766 +"@babel/plugin-transform-modules-systemjs@^7.12.1", "@babel/plugin-transform-modules-systemjs@^7.15.4":
767 + version "7.15.4"
768 + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.15.4.tgz"
769 + integrity sha512-fJUnlQrl/mezMneR72CKCgtOoahqGJNVKpompKwzv3BrEXdlPspTcyxrZ1XmDTIr9PpULrgEQo3qNKp6dW7ssw==
770 + dependencies:
771 + "@babel/helper-hoist-variables" "^7.15.4"
772 + "@babel/helper-module-transforms" "^7.15.4"
773 + "@babel/helper-plugin-utils" "^7.14.5"
774 + "@babel/helper-validator-identifier" "^7.14.9"
775 + babel-plugin-dynamic-import-node "^2.3.3"
776 +
777 +"@babel/plugin-transform-modules-umd@^7.12.1", "@babel/plugin-transform-modules-umd@^7.14.5":
778 + version "7.14.5"
779 + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.14.5.tgz"
780 + integrity sha512-RfPGoagSngC06LsGUYyM9QWSXZ8MysEjDJTAea1lqRjNECE3y0qIJF/qbvJxc4oA4s99HumIMdXOrd+TdKaAAA==
781 + dependencies:
782 + "@babel/helper-module-transforms" "^7.14.5"
783 + "@babel/helper-plugin-utils" "^7.14.5"
784 +
785 +"@babel/plugin-transform-named-capturing-groups-regex@^7.12.1", "@babel/plugin-transform-named-capturing-groups-regex@^7.14.9":
786 + version "7.14.9"
787 + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.14.9.tgz"
788 + integrity sha512-l666wCVYO75mlAtGFfyFwnWmIXQm3kSH0C3IRnJqWcZbWkoihyAdDhFm2ZWaxWTqvBvhVFfJjMRQ0ez4oN1yYA==
789 + dependencies:
790 + "@babel/helper-create-regexp-features-plugin" "^7.14.5"
791 +
792 +"@babel/plugin-transform-new-target@^7.12.1", "@babel/plugin-transform-new-target@^7.14.5":
793 + version "7.14.5"
794 + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.14.5.tgz"
795 + integrity sha512-Nx054zovz6IIRWEB49RDRuXGI4Gy0GMgqG0cII9L3MxqgXz/+rgII+RU58qpo4g7tNEx1jG7rRVH4ihZoP4esQ==
796 + dependencies:
797 + "@babel/helper-plugin-utils" "^7.14.5"
798 +
799 +"@babel/plugin-transform-object-super@^7.12.1", "@babel/plugin-transform-object-super@^7.14.5":
800 + version "7.14.5"
801 + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.14.5.tgz"
802 + integrity sha512-MKfOBWzK0pZIrav9z/hkRqIk/2bTv9qvxHzPQc12RcVkMOzpIKnFCNYJip00ssKWYkd8Sf5g0Wr7pqJ+cmtuFg==
803 + dependencies:
804 + "@babel/helper-plugin-utils" "^7.14.5"
805 + "@babel/helper-replace-supers" "^7.14.5"
806 +
807 +"@babel/plugin-transform-parameters@^7.12.1", "@babel/plugin-transform-parameters@^7.15.4":
808 + version "7.15.4"
809 + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.15.4.tgz"
810 + integrity sha512-9WB/GUTO6lvJU3XQsSr6J/WKvBC2hcs4Pew8YxZagi6GkTdniyqp8On5kqdK8MN0LMeu0mGbhPN+O049NV/9FQ==
811 + dependencies:
812 + "@babel/helper-plugin-utils" "^7.14.5"
813 +
814 +"@babel/plugin-transform-property-literals@^7.12.1", "@babel/plugin-transform-property-literals@^7.14.5":
815 + version "7.14.5"
816 + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.14.5.tgz"
817 + integrity sha512-r1uilDthkgXW8Z1vJz2dKYLV1tuw2xsbrp3MrZmD99Wh9vsfKoob+JTgri5VUb/JqyKRXotlOtwgu4stIYCmnw==
818 + dependencies:
819 + "@babel/helper-plugin-utils" "^7.14.5"
820 +
821 +"@babel/plugin-transform-react-constant-elements@^7.12.1":
822 + version "7.14.5"
823 + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.14.5.tgz"
824 + integrity sha512-NBqLEx1GxllIOXJInJAQbrnwwYJsV3WaMHIcOwD8rhYS0AabTWn7kHdHgPgu5RmHLU0q4DMxhAMu8ue/KampgQ==
825 + dependencies:
826 + "@babel/helper-plugin-utils" "^7.14.5"
827 +
828 +"@babel/plugin-transform-react-display-name@7.12.1":
829 + version "7.12.1"
830 + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.12.1.tgz"
831 + integrity sha512-cAzB+UzBIrekfYxyLlFqf/OagTvHLcVBb5vpouzkYkBclRPraiygVnafvAoipErZLI8ANv8Ecn6E/m5qPXD26w==
832 + dependencies:
833 + "@babel/helper-plugin-utils" "^7.10.4"
834 +
835 +"@babel/plugin-transform-react-display-name@^7.12.1", "@babel/plugin-transform-react-display-name@^7.14.5":
836 + version "7.15.1"
837 + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.15.1.tgz"
838 + integrity sha512-yQZ/i/pUCJAHI/LbtZr413S3VT26qNrEm0M5RRxQJA947/YNYwbZbBaXGDrq6CG5QsZycI1VIP6d7pQaBfP+8Q==
839 + dependencies:
840 + "@babel/helper-plugin-utils" "^7.14.5"
841 +
842 +"@babel/plugin-transform-react-jsx-development@^7.12.1", "@babel/plugin-transform-react-jsx-development@^7.14.5":
843 + version "7.14.5"
844 + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.14.5.tgz"
845 + integrity sha512-rdwG/9jC6QybWxVe2UVOa7q6cnTpw8JRRHOxntG/h6g/guAOe6AhtQHJuJh5FwmnXIT1bdm5vC2/5huV8ZOorQ==
846 + dependencies:
847 + "@babel/plugin-transform-react-jsx" "^7.14.5"
848 +
849 +"@babel/plugin-transform-react-jsx-self@^7.12.1":
850 + version "7.14.9"
851 + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.14.9.tgz"
852 + integrity sha512-Fqqu0f8zv9W+RyOnx29BX/RlEsBRANbOf5xs5oxb2aHP4FKbLXxIaVPUiCti56LAR1IixMH4EyaixhUsKqoBHw==
853 + dependencies:
854 + "@babel/helper-plugin-utils" "^7.14.5"
855 +
856 +"@babel/plugin-transform-react-jsx-source@^7.12.1":
857 + version "7.14.5"
858 + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.14.5.tgz"
859 + integrity sha512-1TpSDnD9XR/rQ2tzunBVPThF5poaYT9GqP+of8fAtguYuI/dm2RkrMBDemsxtY0XBzvW7nXjYM0hRyKX9QYj7Q==
860 + dependencies:
861 + "@babel/helper-plugin-utils" "^7.14.5"
862 +
863 +"@babel/plugin-transform-react-jsx@^7.12.1", "@babel/plugin-transform-react-jsx@^7.14.5":
864 + version "7.14.9"
865 + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.14.9.tgz"
866 + integrity sha512-30PeETvS+AeD1f58i1OVyoDlVYQhap/K20ZrMjLmmzmC2AYR/G43D4sdJAaDAqCD3MYpSWbmrz3kES158QSLjw==
867 + dependencies:
868 + "@babel/helper-annotate-as-pure" "^7.14.5"
869 + "@babel/helper-module-imports" "^7.14.5"
870 + "@babel/helper-plugin-utils" "^7.14.5"
871 + "@babel/plugin-syntax-jsx" "^7.14.5"
872 + "@babel/types" "^7.14.9"
873 +
874 +"@babel/plugin-transform-react-pure-annotations@^7.12.1", "@babel/plugin-transform-react-pure-annotations@^7.14.5":
875 + version "7.14.5"
876 + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.14.5.tgz"
877 + integrity sha512-3X4HpBJimNxW4rhUy/SONPyNQHp5YRr0HhJdT2OH1BRp0of7u3Dkirc7x9FRJMKMqTBI079VZ1hzv7Ouuz///g==
878 + dependencies:
879 + "@babel/helper-annotate-as-pure" "^7.14.5"
880 + "@babel/helper-plugin-utils" "^7.14.5"
881 +
882 +"@babel/plugin-transform-regenerator@^7.12.1", "@babel/plugin-transform-regenerator@^7.14.5":
883 + version "7.14.5"
884 + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.14.5.tgz"
885 + integrity sha512-NVIY1W3ITDP5xQl50NgTKlZ0GrotKtLna08/uGY6ErQt6VEQZXla86x/CTddm5gZdcr+5GSsvMeTmWA5Ii6pkg==
886 + dependencies:
887 + regenerator-transform "^0.14.2"
888 +
889 +"@babel/plugin-transform-reserved-words@^7.12.1", "@babel/plugin-transform-reserved-words@^7.14.5":
890 + version "7.14.5"
891 + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.14.5.tgz"
892 + integrity sha512-cv4F2rv1nD4qdexOGsRQXJrOcyb5CrgjUH9PKrrtyhSDBNWGxd0UIitjyJiWagS+EbUGjG++22mGH1Pub8D6Vg==
893 + dependencies:
894 + "@babel/helper-plugin-utils" "^7.14.5"
895 +
896 +"@babel/plugin-transform-runtime@7.12.1":
897 + version "7.12.1"
898 + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.12.1.tgz"
899 + integrity sha512-Ac/H6G9FEIkS2tXsZjL4RAdS3L3WHxci0usAnz7laPWUmFiGtj7tIASChqKZMHTSQTQY6xDbOq+V1/vIq3QrWg==
900 + dependencies:
901 + "@babel/helper-module-imports" "^7.12.1"
902 + "@babel/helper-plugin-utils" "^7.10.4"
903 + resolve "^1.8.1"
904 + semver "^5.5.1"
905 +
906 +"@babel/plugin-transform-shorthand-properties@^7.12.1", "@babel/plugin-transform-shorthand-properties@^7.14.5":
907 + version "7.14.5"
908 + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.14.5.tgz"
909 + integrity sha512-xLucks6T1VmGsTB+GWK5Pl9Jl5+nRXD1uoFdA5TSO6xtiNjtXTjKkmPdFXVLGlK5A2/or/wQMKfmQ2Y0XJfn5g==
910 + dependencies:
911 + "@babel/helper-plugin-utils" "^7.14.5"
912 +
913 +"@babel/plugin-transform-spread@^7.12.1", "@babel/plugin-transform-spread@^7.15.8":
914 + version "7.15.8"
915 + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.15.8.tgz"
916 + integrity sha512-/daZ8s2tNaRekl9YJa9X4bzjpeRZLt122cpgFnQPLGUe61PH8zMEBmYqKkW5xF5JUEh5buEGXJoQpqBmIbpmEQ==
917 + dependencies:
918 + "@babel/helper-plugin-utils" "^7.14.5"
919 + "@babel/helper-skip-transparent-expression-wrappers" "^7.15.4"
920 +
921 +"@babel/plugin-transform-sticky-regex@^7.12.1", "@babel/plugin-transform-sticky-regex@^7.14.5":
922 + version "7.14.5"
923 + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.14.5.tgz"
924 + integrity sha512-Z7F7GyvEMzIIbwnziAZmnSNpdijdr4dWt+FJNBnBLz5mwDFkqIXU9wmBcWWad3QeJF5hMTkRe4dAq2sUZiG+8A==
925 + dependencies:
926 + "@babel/helper-plugin-utils" "^7.14.5"
927 +
928 +"@babel/plugin-transform-template-literals@^7.12.1", "@babel/plugin-transform-template-literals@^7.14.5":
929 + version "7.14.5"
930 + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.14.5.tgz"
931 + integrity sha512-22btZeURqiepOfuy/VkFr+zStqlujWaarpMErvay7goJS6BWwdd6BY9zQyDLDa4x2S3VugxFb162IZ4m/S/+Gg==
932 + dependencies:
933 + "@babel/helper-plugin-utils" "^7.14.5"
934 +
935 +"@babel/plugin-transform-typeof-symbol@^7.12.1", "@babel/plugin-transform-typeof-symbol@^7.14.5":
936 + version "7.14.5"
937 + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.14.5.tgz"
938 + integrity sha512-lXzLD30ffCWseTbMQzrvDWqljvZlHkXU+CnseMhkMNqU1sASnCsz3tSzAaH3vCUXb9PHeUb90ZT1BdFTm1xxJw==
939 + dependencies:
940 + "@babel/helper-plugin-utils" "^7.14.5"
941 +
942 +"@babel/plugin-transform-typescript@^7.12.1":
943 + version "7.15.8"
944 + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.15.8.tgz"
945 + integrity sha512-ZXIkJpbaf6/EsmjeTbiJN/yMxWPFWvlr7sEG1P95Xb4S4IBcrf2n7s/fItIhsAmOf8oSh3VJPDppO6ExfAfKRQ==
946 + dependencies:
947 + "@babel/helper-create-class-features-plugin" "^7.15.4"
948 + "@babel/helper-plugin-utils" "^7.14.5"
949 + "@babel/plugin-syntax-typescript" "^7.14.5"
950 +
951 +"@babel/plugin-transform-unicode-escapes@^7.12.1", "@babel/plugin-transform-unicode-escapes@^7.14.5":
952 + version "7.14.5"
953 + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.14.5.tgz"
954 + integrity sha512-crTo4jATEOjxj7bt9lbYXcBAM3LZaUrbP2uUdxb6WIorLmjNKSpHfIybgY4B8SRpbf8tEVIWH3Vtm7ayCrKocA==
955 + dependencies:
956 + "@babel/helper-plugin-utils" "^7.14.5"
957 +
958 +"@babel/plugin-transform-unicode-regex@^7.12.1", "@babel/plugin-transform-unicode-regex@^7.14.5":
959 + version "7.14.5"
960 + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.14.5.tgz"
961 + integrity sha512-UygduJpC5kHeCiRw/xDVzC+wj8VaYSoKl5JNVmbP7MadpNinAm3SvZCxZ42H37KZBKztz46YC73i9yV34d0Tzw==
962 + dependencies:
963 + "@babel/helper-create-regexp-features-plugin" "^7.14.5"
964 + "@babel/helper-plugin-utils" "^7.14.5"
965 +
966 +"@babel/preset-env@7.12.1":
967 + version "7.12.1"
968 + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.12.1.tgz"
969 + integrity sha512-H8kxXmtPaAGT7TyBvSSkoSTUK6RHh61So05SyEbpmr0MCZrsNYn7mGMzzeYoOUCdHzww61k8XBft2TaES+xPLg==
970 + dependencies:
971 + "@babel/compat-data" "^7.12.1"
972 + "@babel/helper-compilation-targets" "^7.12.1"
973 + "@babel/helper-module-imports" "^7.12.1"
974 + "@babel/helper-plugin-utils" "^7.10.4"
975 + "@babel/helper-validator-option" "^7.12.1"
976 + "@babel/plugin-proposal-async-generator-functions" "^7.12.1"
977 + "@babel/plugin-proposal-class-properties" "^7.12.1"
978 + "@babel/plugin-proposal-dynamic-import" "^7.12.1"
979 + "@babel/plugin-proposal-export-namespace-from" "^7.12.1"
980 + "@babel/plugin-proposal-json-strings" "^7.12.1"
981 + "@babel/plugin-proposal-logical-assignment-operators" "^7.12.1"
982 + "@babel/plugin-proposal-nullish-coalescing-operator" "^7.12.1"
983 + "@babel/plugin-proposal-numeric-separator" "^7.12.1"
984 + "@babel/plugin-proposal-object-rest-spread" "^7.12.1"
985 + "@babel/plugin-proposal-optional-catch-binding" "^7.12.1"
986 + "@babel/plugin-proposal-optional-chaining" "^7.12.1"
987 + "@babel/plugin-proposal-private-methods" "^7.12.1"
988 + "@babel/plugin-proposal-unicode-property-regex" "^7.12.1"
989 + "@babel/plugin-syntax-async-generators" "^7.8.0"
990 + "@babel/plugin-syntax-class-properties" "^7.12.1"
991 + "@babel/plugin-syntax-dynamic-import" "^7.8.0"
992 + "@babel/plugin-syntax-export-namespace-from" "^7.8.3"
993 + "@babel/plugin-syntax-json-strings" "^7.8.0"
994 + "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4"
995 + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.0"
996 + "@babel/plugin-syntax-numeric-separator" "^7.10.4"
997 + "@babel/plugin-syntax-object-rest-spread" "^7.8.0"
998 + "@babel/plugin-syntax-optional-catch-binding" "^7.8.0"
999 + "@babel/plugin-syntax-optional-chaining" "^7.8.0"
1000 + "@babel/plugin-syntax-top-level-await" "^7.12.1"
1001 + "@babel/plugin-transform-arrow-functions" "^7.12.1"
1002 + "@babel/plugin-transform-async-to-generator" "^7.12.1"
1003 + "@babel/plugin-transform-block-scoped-functions" "^7.12.1"
1004 + "@babel/plugin-transform-block-scoping" "^7.12.1"
1005 + "@babel/plugin-transform-classes" "^7.12.1"
1006 + "@babel/plugin-transform-computed-properties" "^7.12.1"
1007 + "@babel/plugin-transform-destructuring" "^7.12.1"
1008 + "@babel/plugin-transform-dotall-regex" "^7.12.1"
1009 + "@babel/plugin-transform-duplicate-keys" "^7.12.1"
1010 + "@babel/plugin-transform-exponentiation-operator" "^7.12.1"
1011 + "@babel/plugin-transform-for-of" "^7.12.1"
1012 + "@babel/plugin-transform-function-name" "^7.12.1"
1013 + "@babel/plugin-transform-literals" "^7.12.1"
1014 + "@babel/plugin-transform-member-expression-literals" "^7.12.1"
1015 + "@babel/plugin-transform-modules-amd" "^7.12.1"
1016 + "@babel/plugin-transform-modules-commonjs" "^7.12.1"
1017 + "@babel/plugin-transform-modules-systemjs" "^7.12.1"
1018 + "@babel/plugin-transform-modules-umd" "^7.12.1"
1019 + "@babel/plugin-transform-named-capturing-groups-regex" "^7.12.1"
1020 + "@babel/plugin-transform-new-target" "^7.12.1"
1021 + "@babel/plugin-transform-object-super" "^7.12.1"
1022 + "@babel/plugin-transform-parameters" "^7.12.1"
1023 + "@babel/plugin-transform-property-literals" "^7.12.1"
1024 + "@babel/plugin-transform-regenerator" "^7.12.1"
1025 + "@babel/plugin-transform-reserved-words" "^7.12.1"
1026 + "@babel/plugin-transform-shorthand-properties" "^7.12.1"
1027 + "@babel/plugin-transform-spread" "^7.12.1"
1028 + "@babel/plugin-transform-sticky-regex" "^7.12.1"
1029 + "@babel/plugin-transform-template-literals" "^7.12.1"
1030 + "@babel/plugin-transform-typeof-symbol" "^7.12.1"
1031 + "@babel/plugin-transform-unicode-escapes" "^7.12.1"
1032 + "@babel/plugin-transform-unicode-regex" "^7.12.1"
1033 + "@babel/preset-modules" "^0.1.3"
1034 + "@babel/types" "^7.12.1"
1035 + core-js-compat "^3.6.2"
1036 + semver "^5.5.0"
1037 +
1038 +"@babel/preset-env@^7.12.1", "@babel/preset-env@^7.8.4":
1039 + version "7.15.8"
1040 + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.15.8.tgz"
1041 + integrity sha512-rCC0wH8husJgY4FPbHsiYyiLxSY8oMDJH7Rl6RQMknbN9oDDHhM9RDFvnGM2MgkbUJzSQB4gtuwygY5mCqGSsA==
1042 + dependencies:
1043 + "@babel/compat-data" "^7.15.0"
1044 + "@babel/helper-compilation-targets" "^7.15.4"
1045 + "@babel/helper-plugin-utils" "^7.14.5"
1046 + "@babel/helper-validator-option" "^7.14.5"
1047 + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.15.4"
1048 + "@babel/plugin-proposal-async-generator-functions" "^7.15.8"
1049 + "@babel/plugin-proposal-class-properties" "^7.14.5"
1050 + "@babel/plugin-proposal-class-static-block" "^7.15.4"
1051 + "@babel/plugin-proposal-dynamic-import" "^7.14.5"
1052 + "@babel/plugin-proposal-export-namespace-from" "^7.14.5"
1053 + "@babel/plugin-proposal-json-strings" "^7.14.5"
1054 + "@babel/plugin-proposal-logical-assignment-operators" "^7.14.5"
1055 + "@babel/plugin-proposal-nullish-coalescing-operator" "^7.14.5"
1056 + "@babel/plugin-proposal-numeric-separator" "^7.14.5"
1057 + "@babel/plugin-proposal-object-rest-spread" "^7.15.6"
1058 + "@babel/plugin-proposal-optional-catch-binding" "^7.14.5"
1059 + "@babel/plugin-proposal-optional-chaining" "^7.14.5"
1060 + "@babel/plugin-proposal-private-methods" "^7.14.5"
1061 + "@babel/plugin-proposal-private-property-in-object" "^7.15.4"
1062 + "@babel/plugin-proposal-unicode-property-regex" "^7.14.5"
1063 + "@babel/plugin-syntax-async-generators" "^7.8.4"
1064 + "@babel/plugin-syntax-class-properties" "^7.12.13"
1065 + "@babel/plugin-syntax-class-static-block" "^7.14.5"
1066 + "@babel/plugin-syntax-dynamic-import" "^7.8.3"
1067 + "@babel/plugin-syntax-export-namespace-from" "^7.8.3"
1068 + "@babel/plugin-syntax-json-strings" "^7.8.3"
1069 + "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4"
1070 + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3"
1071 + "@babel/plugin-syntax-numeric-separator" "^7.10.4"
1072 + "@babel/plugin-syntax-object-rest-spread" "^7.8.3"
1073 + "@babel/plugin-syntax-optional-catch-binding" "^7.8.3"
1074 + "@babel/plugin-syntax-optional-chaining" "^7.8.3"
1075 + "@babel/plugin-syntax-private-property-in-object" "^7.14.5"
1076 + "@babel/plugin-syntax-top-level-await" "^7.14.5"
1077 + "@babel/plugin-transform-arrow-functions" "^7.14.5"
1078 + "@babel/plugin-transform-async-to-generator" "^7.14.5"
1079 + "@babel/plugin-transform-block-scoped-functions" "^7.14.5"
1080 + "@babel/plugin-transform-block-scoping" "^7.15.3"
1081 + "@babel/plugin-transform-classes" "^7.15.4"
1082 + "@babel/plugin-transform-computed-properties" "^7.14.5"
1083 + "@babel/plugin-transform-destructuring" "^7.14.7"
1084 + "@babel/plugin-transform-dotall-regex" "^7.14.5"
1085 + "@babel/plugin-transform-duplicate-keys" "^7.14.5"
1086 + "@babel/plugin-transform-exponentiation-operator" "^7.14.5"
1087 + "@babel/plugin-transform-for-of" "^7.15.4"
1088 + "@babel/plugin-transform-function-name" "^7.14.5"
1089 + "@babel/plugin-transform-literals" "^7.14.5"
1090 + "@babel/plugin-transform-member-expression-literals" "^7.14.5"
1091 + "@babel/plugin-transform-modules-amd" "^7.14.5"
1092 + "@babel/plugin-transform-modules-commonjs" "^7.15.4"
1093 + "@babel/plugin-transform-modules-systemjs" "^7.15.4"
1094 + "@babel/plugin-transform-modules-umd" "^7.14.5"
1095 + "@babel/plugin-transform-named-capturing-groups-regex" "^7.14.9"
1096 + "@babel/plugin-transform-new-target" "^7.14.5"
1097 + "@babel/plugin-transform-object-super" "^7.14.5"
1098 + "@babel/plugin-transform-parameters" "^7.15.4"
1099 + "@babel/plugin-transform-property-literals" "^7.14.5"
1100 + "@babel/plugin-transform-regenerator" "^7.14.5"
1101 + "@babel/plugin-transform-reserved-words" "^7.14.5"
1102 + "@babel/plugin-transform-shorthand-properties" "^7.14.5"
1103 + "@babel/plugin-transform-spread" "^7.15.8"
1104 + "@babel/plugin-transform-sticky-regex" "^7.14.5"
1105 + "@babel/plugin-transform-template-literals" "^7.14.5"
1106 + "@babel/plugin-transform-typeof-symbol" "^7.14.5"
1107 + "@babel/plugin-transform-unicode-escapes" "^7.14.5"
1108 + "@babel/plugin-transform-unicode-regex" "^7.14.5"
1109 + "@babel/preset-modules" "^0.1.4"
1110 + "@babel/types" "^7.15.6"
1111 + babel-plugin-polyfill-corejs2 "^0.2.2"
1112 + babel-plugin-polyfill-corejs3 "^0.2.5"
1113 + babel-plugin-polyfill-regenerator "^0.2.2"
1114 + core-js-compat "^3.16.0"
1115 + semver "^6.3.0"
1116 +
1117 +"@babel/preset-modules@^0.1.3", "@babel/preset-modules@^0.1.4":
1118 + version "0.1.5"
1119 + resolved "https://registry.yarnpkg.com/@babel/preset-modules/-/preset-modules-0.1.5.tgz"
1120 + integrity sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==
1121 + dependencies:
1122 + "@babel/helper-plugin-utils" "^7.0.0"
1123 + "@babel/plugin-proposal-unicode-property-regex" "^7.4.4"
1124 + "@babel/plugin-transform-dotall-regex" "^7.4.4"
1125 + "@babel/types" "^7.4.4"
1126 + esutils "^2.0.2"
1127 +
1128 +"@babel/preset-react@7.12.1":
1129 + version "7.12.1"
1130 + resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.12.1.tgz"
1131 + integrity sha512-euCExymHCi0qB9u5fKw7rvlw7AZSjw/NaB9h7EkdTt5+yHRrXdiRTh7fkG3uBPpJg82CqLfp1LHLqWGSCrab+g==
1132 + dependencies:
1133 + "@babel/helper-plugin-utils" "^7.10.4"
1134 + "@babel/plugin-transform-react-display-name" "^7.12.1"
1135 + "@babel/plugin-transform-react-jsx" "^7.12.1"
1136 + "@babel/plugin-transform-react-jsx-development" "^7.12.1"
1137 + "@babel/plugin-transform-react-jsx-self" "^7.12.1"
1138 + "@babel/plugin-transform-react-jsx-source" "^7.12.1"
1139 + "@babel/plugin-transform-react-pure-annotations" "^7.12.1"
1140 +
1141 +"@babel/preset-react@^7.12.5":
1142 + version "7.14.5"
1143 + resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.14.5.tgz"
1144 + integrity sha512-XFxBkjyObLvBaAvkx1Ie95Iaq4S/GUEIrejyrntQ/VCMKUYvKLoyKxOBzJ2kjA3b6rC9/KL6KXfDC2GqvLiNqQ==
1145 + dependencies:
1146 + "@babel/helper-plugin-utils" "^7.14.5"
1147 + "@babel/helper-validator-option" "^7.14.5"
1148 + "@babel/plugin-transform-react-display-name" "^7.14.5"
1149 + "@babel/plugin-transform-react-jsx" "^7.14.5"
1150 + "@babel/plugin-transform-react-jsx-development" "^7.14.5"
1151 + "@babel/plugin-transform-react-pure-annotations" "^7.14.5"
1152 +
1153 +"@babel/preset-typescript@7.12.1":
1154 + version "7.12.1"
1155 + resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.12.1.tgz"
1156 + integrity sha512-hNK/DhmoJPsksdHuI/RVrcEws7GN5eamhi28JkO52MqIxU8Z0QpmiSOQxZHWOHV7I3P4UjHV97ay4TcamMA6Kw==
1157 + dependencies:
1158 + "@babel/helper-plugin-utils" "^7.10.4"
1159 + "@babel/plugin-transform-typescript" "^7.12.1"
1160 +
1161 +"@babel/runtime-corejs3@^7.10.2":
1162 + version "7.15.4"
1163 + resolved "https://registry.yarnpkg.com/@babel/runtime-corejs3/-/runtime-corejs3-7.15.4.tgz"
1164 + integrity sha512-lWcAqKeB624/twtTc3w6w/2o9RqJPaNBhPGK6DKLSiwuVWC7WFkypWyNg+CpZoyJH0jVzv1uMtXZ/5/lQOLtCg==
1165 + dependencies:
1166 + core-js-pure "^3.16.0"
1167 + regenerator-runtime "^0.13.4"
1168 +
1169 +"@babel/runtime@7.12.1":
1170 + version "7.12.1"
1171 + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.12.1.tgz"
1172 + integrity sha512-J5AIf3vPj3UwXaAzb5j1xM4WAQDX3EMgemF8rjCP3SoW09LfRKAXQKt6CoVYl230P6iWdRcBbnLDDdnqWxZSCA==
1173 + dependencies:
1174 + regenerator-runtime "^0.13.4"
1175 +
1176 +"@babel/runtime@7.13.8":
1177 + version "7.13.8"
1178 + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.13.8.tgz"
1179 + integrity sha512-CwQljpw6qSayc0fRG1soxHAKs1CnQMOChm4mlQP6My0kf9upVGizj/KhlTTgyUnETmHpcUXjaluNAkteRFuafg==
1180 + dependencies:
1181 + regenerator-runtime "^0.13.4"
1182 +
1183 +"@babel/runtime@^7.10.2", "@babel/runtime@^7.11.2", "@babel/runtime@^7.5.5", "@babel/runtime@^7.7.2", "@babel/runtime@^7.8.4":
1184 + version "7.15.4"
1185 + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.15.4.tgz"
1186 + integrity sha512-99catp6bHCaxr4sJ/DbTGgHS4+Rs2RVd2g7iOap6SLGPDknRK9ztKNsE/Fg6QhSeh1FGE5f6gHGQmvvn3I3xhw==
1187 + dependencies:
1188 + regenerator-runtime "^0.13.4"
1189 +
1190 +"@babel/template@^7.10.4", "@babel/template@^7.15.4", "@babel/template@^7.3.3":
1191 + version "7.15.4"
1192 + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.15.4.tgz"
1193 + integrity sha512-UgBAfEa1oGuYgDIPM2G+aHa4Nlo9Lh6mGD2bDBGMTbYnc38vulXPuC1MGjYILIEmlwl6Rd+BPR9ee3gm20CBtg==
1194 + dependencies:
1195 + "@babel/code-frame" "^7.14.5"
1196 + "@babel/parser" "^7.15.4"
1197 + "@babel/types" "^7.15.4"
1198 +
1199 +"@babel/traverse@^7.1.0", "@babel/traverse@^7.12.1", "@babel/traverse@^7.13.0", "@babel/traverse@^7.15.4", "@babel/traverse@^7.7.0":
1200 + version "7.15.4"
1201 + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.15.4.tgz"
1202 + integrity sha512-W6lQD8l4rUbQR/vYgSuCAE75ADyyQvOpFVsvPPdkhf6lATXAsQIG9YdtOcu8BB1dZ0LKu+Zo3c1wEcbKeuhdlA==
1203 + dependencies:
1204 + "@babel/code-frame" "^7.14.5"
1205 + "@babel/generator" "^7.15.4"
1206 + "@babel/helper-function-name" "^7.15.4"
1207 + "@babel/helper-hoist-variables" "^7.15.4"
1208 + "@babel/helper-split-export-declaration" "^7.15.4"
1209 + "@babel/parser" "^7.15.4"
1210 + "@babel/types" "^7.15.4"
1211 + debug "^4.1.0"
1212 + globals "^11.1.0"
1213 +
1214 +"@babel/types@^7.0.0", "@babel/types@^7.12.1", "@babel/types@^7.12.6", "@babel/types@^7.14.9", "@babel/types@^7.15.4", "@babel/types@^7.15.6", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4", "@babel/types@^7.7.0":
1215 + version "7.15.6"
1216 + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.15.6.tgz"
1217 + integrity sha512-BPU+7QhqNjmWyDO0/vitH/CuhpV8ZmK1wpKva8nuyNF5MJfuRNWMc+hc14+u9xT93kvykMdncrJT19h74uB1Ig==
1218 + dependencies:
1219 + "@babel/helper-validator-identifier" "^7.14.9"
1220 + to-fast-properties "^2.0.0"
1221 +
1222 +"@bcoe/v8-coverage@^0.2.3":
1223 + version "0.2.3"
1224 + resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz"
1225 + integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==
1226 +
1227 +"@cnakazawa/watch@^1.0.3":
1228 + version "1.0.4"
1229 + resolved "https://registry.yarnpkg.com/@cnakazawa/watch/-/watch-1.0.4.tgz"
1230 + integrity sha512-v9kIhKwjeZThiWrLmj0y17CWoyddASLj9O2yvbZkbvw/N3rWOYy9zkV66ursAoVr0mV15bL8g0c4QZUE6cdDoQ==
1231 + dependencies:
1232 + exec-sh "^0.3.2"
1233 + minimist "^1.2.0"
1234 +
1235 +"@csstools/convert-colors@^1.4.0":
1236 + version "1.4.0"
1237 + resolved "https://registry.yarnpkg.com/@csstools/convert-colors/-/convert-colors-1.4.0.tgz"
1238 + integrity sha512-5a6wqoJV/xEdbRNKVo6I4hO3VjyDq//8q2f9I6PBAvMesJHFauXDorcNCsr9RzvsZnaWi5NYCcfyqP1QeFHFbw==
1239 +
1240 +"@csstools/normalize.css@^10.1.0":
1241 + version "10.1.0"
1242 + resolved "https://registry.yarnpkg.com/@csstools/normalize.css/-/normalize.css-10.1.0.tgz"
1243 + integrity sha512-ij4wRiunFfaJxjB0BdrYHIH8FxBJpOwNPhhAcunlmPdXudL1WQV1qoP9un6JsEBAgQH+7UXyyjh0g7jTxXK6tg==
1244 +
1245 +"@eslint/eslintrc@^0.4.3":
1246 + version "0.4.3"
1247 + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.4.3.tgz"
1248 + integrity sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==
1249 + dependencies:
1250 + ajv "^6.12.4"
1251 + debug "^4.1.1"
1252 + espree "^7.3.0"
1253 + globals "^13.9.0"
1254 + ignore "^4.0.6"
1255 + import-fresh "^3.2.1"
1256 + js-yaml "^3.13.1"
1257 + minimatch "^3.0.4"
1258 + strip-json-comments "^3.1.1"
1259 +
1260 +"@gar/promisify@^1.0.1":
1261 + version "1.1.2"
1262 + resolved "https://registry.yarnpkg.com/@gar/promisify/-/promisify-1.1.2.tgz"
1263 + integrity sha512-82cpyJyKRoQoRi+14ibCeGPu0CwypgtBAdBhq1WfvagpCZNKqwXbKwXllYSMG91DhmG4jt9gN8eP6lGOtozuaw==
1264 +
1265 +"@hapi/address@2.x.x":
1266 + version "2.1.4"
1267 + resolved "https://registry.yarnpkg.com/@hapi/address/-/address-2.1.4.tgz"
1268 + integrity sha512-QD1PhQk+s31P1ixsX0H0Suoupp3VMXzIVMSwobR3F3MSUO2YCV0B7xqLcUw/Bh8yuvd3LhpyqLQWTNcRmp6IdQ==
1269 +
1270 +"@hapi/bourne@1.x.x":
1271 + version "1.3.2"
1272 + resolved "https://registry.yarnpkg.com/@hapi/bourne/-/bourne-1.3.2.tgz"
1273 + integrity sha512-1dVNHT76Uu5N3eJNTYcvxee+jzX4Z9lfciqRRHCU27ihbUcYi+iSc2iml5Ke1LXe1SyJCLA0+14Jh4tXJgOppA==
1274 +
1275 +"@hapi/hoek@8.x.x", "@hapi/hoek@^8.3.0":
1276 + version "8.5.1"
1277 + resolved "https://registry.yarnpkg.com/@hapi/hoek/-/hoek-8.5.1.tgz"
1278 + integrity sha512-yN7kbciD87WzLGc5539Tn0sApjyiGHAJgKvG9W8C7O+6c7qmoQMfVs0W4bX17eqz6C78QJqqFrtgdK5EWf6Qow==
1279 +
1280 +"@hapi/joi@^15.1.0":
1281 + version "15.1.1"
1282 + resolved "https://registry.yarnpkg.com/@hapi/joi/-/joi-15.1.1.tgz"
1283 + integrity sha512-entf8ZMOK8sc+8YfeOlM8pCfg3b5+WZIKBfUaaJT8UsjAAPjartzxIYm3TIbjvA4u+u++KbcXD38k682nVHDAQ==
1284 + dependencies:
1285 + "@hapi/address" "2.x.x"
1286 + "@hapi/bourne" "1.x.x"
1287 + "@hapi/hoek" "8.x.x"
1288 + "@hapi/topo" "3.x.x"
1289 +
1290 +"@hapi/topo@3.x.x":
1291 + version "3.1.6"
1292 + resolved "https://registry.yarnpkg.com/@hapi/topo/-/topo-3.1.6.tgz"
1293 + integrity sha512-tAag0jEcjwH+P2quUfipd7liWCNX2F8NvYjQp2wtInsZxnMlypdw0FtAOLxtvvkO+GSRRbmNi8m/5y42PQJYCQ==
1294 + dependencies:
1295 + "@hapi/hoek" "^8.3.0"
1296 +
1297 +"@humanwhocodes/config-array@^0.5.0":
1298 + version "0.5.0"
1299 + resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.5.0.tgz"
1300 + integrity sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==
1301 + dependencies:
1302 + "@humanwhocodes/object-schema" "^1.2.0"
1303 + debug "^4.1.1"
1304 + minimatch "^3.0.4"
1305 +
1306 +"@humanwhocodes/object-schema@^1.2.0":
1307 + version "1.2.0"
1308 + resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.0.tgz"
1309 + integrity sha512-wdppn25U8z/2yiaT6YGquE6X8sSv7hNMWSXYSSU1jGv/yd6XqjXgTDJ8KP4NgjTXfJ3GbRjeeb8RTV7a/VpM+w==
1310 +
1311 +"@istanbuljs/load-nyc-config@^1.0.0":
1312 + version "1.1.0"
1313 + resolved "https://registry.yarnpkg.com/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz"
1314 + integrity sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==
1315 + dependencies:
1316 + camelcase "^5.3.1"
1317 + find-up "^4.1.0"
1318 + get-package-type "^0.1.0"
1319 + js-yaml "^3.13.1"
1320 + resolve-from "^5.0.0"
1321 +
1322 +"@istanbuljs/schema@^0.1.2":
1323 + version "0.1.3"
1324 + resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.3.tgz"
1325 + integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==
1326 +
1327 +"@jest/console@^26.6.2":
1328 + version "26.6.2"
1329 + resolved "https://registry.yarnpkg.com/@jest/console/-/console-26.6.2.tgz"
1330 + integrity sha512-IY1R2i2aLsLr7Id3S6p2BA82GNWryt4oSvEXLAKc+L2zdi89dSkE8xC1C+0kpATG4JhBJREnQOH7/zmccM2B0g==
1331 + dependencies:
1332 + "@jest/types" "^26.6.2"
1333 + "@types/node" "*"
1334 + chalk "^4.0.0"
1335 + jest-message-util "^26.6.2"
1336 + jest-util "^26.6.2"
1337 + slash "^3.0.0"
1338 +
1339 +"@jest/core@^26.6.0", "@jest/core@^26.6.3":
1340 + version "26.6.3"
1341 + resolved "https://registry.yarnpkg.com/@jest/core/-/core-26.6.3.tgz"
1342 + integrity sha512-xvV1kKbhfUqFVuZ8Cyo+JPpipAHHAV3kcDBftiduK8EICXmTFddryy3P7NfZt8Pv37rA9nEJBKCCkglCPt/Xjw==
1343 + dependencies:
1344 + "@jest/console" "^26.6.2"
1345 + "@jest/reporters" "^26.6.2"
1346 + "@jest/test-result" "^26.6.2"
1347 + "@jest/transform" "^26.6.2"
1348 + "@jest/types" "^26.6.2"
1349 + "@types/node" "*"
1350 + ansi-escapes "^4.2.1"
1351 + chalk "^4.0.0"
1352 + exit "^0.1.2"
1353 + graceful-fs "^4.2.4"
1354 + jest-changed-files "^26.6.2"
1355 + jest-config "^26.6.3"
1356 + jest-haste-map "^26.6.2"
1357 + jest-message-util "^26.6.2"
1358 + jest-regex-util "^26.0.0"
1359 + jest-resolve "^26.6.2"
1360 + jest-resolve-dependencies "^26.6.3"
1361 + jest-runner "^26.6.3"
1362 + jest-runtime "^26.6.3"
1363 + jest-snapshot "^26.6.2"
1364 + jest-util "^26.6.2"
1365 + jest-validate "^26.6.2"
1366 + jest-watcher "^26.6.2"
1367 + micromatch "^4.0.2"
1368 + p-each-series "^2.1.0"
1369 + rimraf "^3.0.0"
1370 + slash "^3.0.0"
1371 + strip-ansi "^6.0.0"
1372 +
1373 +"@jest/environment@^26.6.0", "@jest/environment@^26.6.2":
1374 + version "26.6.2"
1375 + resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-26.6.2.tgz"
1376 + integrity sha512-nFy+fHl28zUrRsCeMB61VDThV1pVTtlEokBRgqPrcT1JNq4yRNIyTHfyht6PqtUvY9IsuLGTrbG8kPXjSZIZwA==
1377 + dependencies:
1378 + "@jest/fake-timers" "^26.6.2"
1379 + "@jest/types" "^26.6.2"
1380 + "@types/node" "*"
1381 + jest-mock "^26.6.2"
1382 +
1383 +"@jest/fake-timers@^26.6.2":
1384 + version "26.6.2"
1385 + resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-26.6.2.tgz"
1386 + integrity sha512-14Uleatt7jdzefLPYM3KLcnUl1ZNikaKq34enpb5XG9i81JpppDb5muZvonvKyrl7ftEHkKS5L5/eB/kxJ+bvA==
1387 + dependencies:
1388 + "@jest/types" "^26.6.2"
1389 + "@sinonjs/fake-timers" "^6.0.1"
1390 + "@types/node" "*"
1391 + jest-message-util "^26.6.2"
1392 + jest-mock "^26.6.2"
1393 + jest-util "^26.6.2"
1394 +
1395 +"@jest/globals@^26.6.2":
1396 + version "26.6.2"
1397 + resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-26.6.2.tgz"
1398 + integrity sha512-85Ltnm7HlB/KesBUuALwQ68YTU72w9H2xW9FjZ1eL1U3lhtefjjl5c2MiUbpXt/i6LaPRvoOFJ22yCBSfQ0JIA==
1399 + dependencies:
1400 + "@jest/environment" "^26.6.2"
1401 + "@jest/types" "^26.6.2"
1402 + expect "^26.6.2"
1403 +
1404 +"@jest/reporters@^26.6.2":
1405 + version "26.6.2"
1406 + resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-26.6.2.tgz"
1407 + integrity sha512-h2bW53APG4HvkOnVMo8q3QXa6pcaNt1HkwVsOPMBV6LD/q9oSpxNSYZQYkAnjdMjrJ86UuYeLo+aEZClV6opnw==
1408 + dependencies:
1409 + "@bcoe/v8-coverage" "^0.2.3"
1410 + "@jest/console" "^26.6.2"
1411 + "@jest/test-result" "^26.6.2"
1412 + "@jest/transform" "^26.6.2"
1413 + "@jest/types" "^26.6.2"
1414 + chalk "^4.0.0"
1415 + collect-v8-coverage "^1.0.0"
1416 + exit "^0.1.2"
1417 + glob "^7.1.2"
1418 + graceful-fs "^4.2.4"
1419 + istanbul-lib-coverage "^3.0.0"
1420 + istanbul-lib-instrument "^4.0.3"
1421 + istanbul-lib-report "^3.0.0"
1422 + istanbul-lib-source-maps "^4.0.0"
1423 + istanbul-reports "^3.0.2"
1424 + jest-haste-map "^26.6.2"
1425 + jest-resolve "^26.6.2"
1426 + jest-util "^26.6.2"
1427 + jest-worker "^26.6.2"
1428 + slash "^3.0.0"
1429 + source-map "^0.6.0"
1430 + string-length "^4.0.1"
1431 + terminal-link "^2.0.0"
1432 + v8-to-istanbul "^7.0.0"
1433 + optionalDependencies:
1434 + node-notifier "^8.0.0"
1435 +
1436 +"@jest/source-map@^26.6.2":
1437 + version "26.6.2"
1438 + resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-26.6.2.tgz"
1439 + integrity sha512-YwYcCwAnNmOVsZ8mr3GfnzdXDAl4LaenZP5z+G0c8bzC9/dugL8zRmxZzdoTl4IaS3CryS1uWnROLPFmb6lVvA==
1440 + dependencies:
1441 + callsites "^3.0.0"
1442 + graceful-fs "^4.2.4"
1443 + source-map "^0.6.0"
1444 +
1445 +"@jest/test-result@^26.6.0", "@jest/test-result@^26.6.2":
1446 + version "26.6.2"
1447 + resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-26.6.2.tgz"
1448 + integrity sha512-5O7H5c/7YlojphYNrK02LlDIV2GNPYisKwHm2QTKjNZeEzezCbwYs9swJySv2UfPMyZ0VdsmMv7jIlD/IKYQpQ==
1449 + dependencies:
1450 + "@jest/console" "^26.6.2"
1451 + "@jest/types" "^26.6.2"
1452 + "@types/istanbul-lib-coverage" "^2.0.0"
1453 + collect-v8-coverage "^1.0.0"
1454 +
1455 +"@jest/test-sequencer@^26.6.3":
1456 + version "26.6.3"
1457 + resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-26.6.3.tgz"
1458 + integrity sha512-YHlVIjP5nfEyjlrSr8t/YdNfU/1XEt7c5b4OxcXCjyRhjzLYu/rO69/WHPuYcbCWkz8kAeZVZp2N2+IOLLEPGw==
1459 + dependencies:
1460 + "@jest/test-result" "^26.6.2"
1461 + graceful-fs "^4.2.4"
1462 + jest-haste-map "^26.6.2"
1463 + jest-runner "^26.6.3"
1464 + jest-runtime "^26.6.3"
1465 +
1466 +"@jest/transform@^26.6.2":
1467 + version "26.6.2"
1468 + resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-26.6.2.tgz"
1469 + integrity sha512-E9JjhUgNzvuQ+vVAL21vlyfy12gP0GhazGgJC4h6qUt1jSdUXGWJ1wfu/X7Sd8etSgxV4ovT1pb9v5D6QW4XgA==
1470 + dependencies:
1471 + "@babel/core" "^7.1.0"
1472 + "@jest/types" "^26.6.2"
1473 + babel-plugin-istanbul "^6.0.0"
1474 + chalk "^4.0.0"
1475 + convert-source-map "^1.4.0"
1476 + fast-json-stable-stringify "^2.0.0"
1477 + graceful-fs "^4.2.4"
1478 + jest-haste-map "^26.6.2"
1479 + jest-regex-util "^26.0.0"
1480 + jest-util "^26.6.2"
1481 + micromatch "^4.0.2"
1482 + pirates "^4.0.1"
1483 + slash "^3.0.0"
1484 + source-map "^0.6.1"
1485 + write-file-atomic "^3.0.0"
1486 +
1487 +"@jest/types@^26.6.0", "@jest/types@^26.6.2":
1488 + version "26.6.2"
1489 + resolved "https://registry.yarnpkg.com/@jest/types/-/types-26.6.2.tgz"
1490 + integrity sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==
1491 + dependencies:
1492 + "@types/istanbul-lib-coverage" "^2.0.0"
1493 + "@types/istanbul-reports" "^3.0.0"
1494 + "@types/node" "*"
1495 + "@types/yargs" "^15.0.0"
1496 + chalk "^4.0.0"
1497 +
1498 +"@nicolo-ribaudo/chokidar-2@2.1.8-no-fsevents.3":
1499 + version "2.1.8-no-fsevents.3"
1500 + resolved "https://registry.yarnpkg.com/@nicolo-ribaudo/chokidar-2/-/chokidar-2-2.1.8-no-fsevents.3.tgz"
1501 + integrity sha512-s88O1aVtXftvp5bCPB7WnmXc5IwOZZ7YPuwNPt+GtOOXpPvad1LfbmjYv+qII7zP6RU2QGnqve27dnLycEnyEQ==
1502 +
1503 +"@nodelib/fs.scandir@2.1.5":
1504 + version "2.1.5"
1505 + resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz"
1506 + integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==
1507 + dependencies:
1508 + "@nodelib/fs.stat" "2.0.5"
1509 + run-parallel "^1.1.9"
1510 +
1511 +"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2":
1512 + version "2.0.5"
1513 + resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz"
1514 + integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==
1515 +
1516 +"@nodelib/fs.walk@^1.2.3":
1517 + version "1.2.8"
1518 + resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz"
1519 + integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==
1520 + dependencies:
1521 + "@nodelib/fs.scandir" "2.1.5"
1522 + fastq "^1.6.0"
1523 +
1524 +"@npmcli/fs@^1.0.0":
1525 + version "1.0.0"
1526 + resolved "https://registry.yarnpkg.com/@npmcli/fs/-/fs-1.0.0.tgz"
1527 + integrity sha512-8ltnOpRR/oJbOp8vaGUnipOi3bqkcW+sLHFlyXIr08OGHmVJLB1Hn7QtGXbYcpVtH1gAYZTlmDXtE4YV0+AMMQ==
1528 + dependencies:
1529 + "@gar/promisify" "^1.0.1"
1530 + semver "^7.3.5"
1531 +
1532 +"@npmcli/move-file@^1.0.1":
1533 + version "1.1.2"
1534 + resolved "https://registry.yarnpkg.com/@npmcli/move-file/-/move-file-1.1.2.tgz"
1535 + integrity sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==
1536 + dependencies:
1537 + mkdirp "^1.0.4"
1538 + rimraf "^3.0.2"
1539 +
1540 +"@pmmmwh/react-refresh-webpack-plugin@0.4.3":
1541 + version "0.4.3"
1542 + resolved "https://registry.yarnpkg.com/@pmmmwh/react-refresh-webpack-plugin/-/react-refresh-webpack-plugin-0.4.3.tgz"
1543 + integrity sha512-br5Qwvh8D2OQqSXpd1g/xqXKnK0r+Jz6qVKBbWmpUcrbGOxUrf39V5oZ1876084CGn18uMdR5uvPqBv9UqtBjQ==
1544 + dependencies:
1545 + ansi-html "^0.0.7"
1546 + error-stack-parser "^2.0.6"
1547 + html-entities "^1.2.1"
1548 + native-url "^0.2.6"
1549 + schema-utils "^2.6.5"
1550 + source-map "^0.7.3"
1551 +
1552 +"@rollup/plugin-node-resolve@^7.1.1":
1553 + version "7.1.3"
1554 + resolved "https://registry.yarnpkg.com/@rollup/plugin-node-resolve/-/plugin-node-resolve-7.1.3.tgz"
1555 + integrity sha512-RxtSL3XmdTAE2byxekYLnx+98kEUOrPHF/KRVjLH+DEIHy6kjIw7YINQzn+NXiH/NTrQLAwYs0GWB+csWygA9Q==
1556 + dependencies:
1557 + "@rollup/pluginutils" "^3.0.8"
1558 + "@types/resolve" "0.0.8"
1559 + builtin-modules "^3.1.0"
1560 + is-module "^1.0.0"
1561 + resolve "^1.14.2"
1562 +
1563 +"@rollup/plugin-replace@^2.3.1":
1564 + version "2.4.2"
1565 + resolved "https://registry.yarnpkg.com/@rollup/plugin-replace/-/plugin-replace-2.4.2.tgz"
1566 + integrity sha512-IGcu+cydlUMZ5En85jxHH4qj2hta/11BHq95iHEyb2sbgiN0eCdzvUcHw5gt9pBL5lTi4JDYJ1acCoMGpTvEZg==
1567 + dependencies:
1568 + "@rollup/pluginutils" "^3.1.0"
1569 + magic-string "^0.25.7"
1570 +
1571 +"@rollup/pluginutils@^3.0.8", "@rollup/pluginutils@^3.1.0":
1572 + version "3.1.0"
1573 + resolved "https://registry.yarnpkg.com/@rollup/pluginutils/-/pluginutils-3.1.0.tgz"
1574 + integrity sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==
1575 + dependencies:
1576 + "@types/estree" "0.0.39"
1577 + estree-walker "^1.0.1"
1578 + picomatch "^2.2.2"
1579 +
1580 +"@sinonjs/commons@^1.7.0":
1581 + version "1.8.3"
1582 + resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-1.8.3.tgz"
1583 + integrity sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ==
1584 + dependencies:
1585 + type-detect "4.0.8"
1586 +
1587 +"@sinonjs/fake-timers@^6.0.1":
1588 + version "6.0.1"
1589 + resolved "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-6.0.1.tgz"
1590 + integrity sha512-MZPUxrmFubI36XS1DI3qmI0YdN1gks62JtFZvxR67ljjSNCeK6U08Zx4msEWOXuofgqUt6zPHSi1H9fbjR/NRA==
1591 + dependencies:
1592 + "@sinonjs/commons" "^1.7.0"
1593 +
1594 +"@surma/rollup-plugin-off-main-thread@^1.1.1":
1595 + version "1.4.2"
1596 + resolved "https://registry.yarnpkg.com/@surma/rollup-plugin-off-main-thread/-/rollup-plugin-off-main-thread-1.4.2.tgz"
1597 + integrity sha512-yBMPqmd1yEJo/280PAMkychuaALyQ9Lkb5q1ck3mjJrFuEobIfhnQ4J3mbvBoISmR3SWMWV+cGB/I0lCQee79A==
1598 + dependencies:
1599 + ejs "^2.6.1"
1600 + magic-string "^0.25.0"
1601 +
1602 +"@svgr/babel-plugin-add-jsx-attribute@^5.4.0":
1603 + version "5.4.0"
1604 + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-5.4.0.tgz"
1605 + integrity sha512-ZFf2gs/8/6B8PnSofI0inYXr2SDNTDScPXhN7k5EqD4aZ3gi6u+rbmZHVB8IM3wDyx8ntKACZbtXSm7oZGRqVg==
1606 +
1607 +"@svgr/babel-plugin-remove-jsx-attribute@^5.4.0":
1608 + version "5.4.0"
1609 + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-5.4.0.tgz"
1610 + integrity sha512-yaS4o2PgUtwLFGTKbsiAy6D0o3ugcUhWK0Z45umJ66EPWunAz9fuFw2gJuje6wqQvQWOTJvIahUwndOXb7QCPg==
1611 +
1612 +"@svgr/babel-plugin-remove-jsx-empty-expression@^5.0.1":
1613 + version "5.0.1"
1614 + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-5.0.1.tgz"
1615 + integrity sha512-LA72+88A11ND/yFIMzyuLRSMJ+tRKeYKeQ+mR3DcAZ5I4h5CPWN9AHyUzJbWSYp/u2u0xhmgOe0+E41+GjEueA==
1616 +
1617 +"@svgr/babel-plugin-replace-jsx-attribute-value@^5.0.1":
1618 + version "5.0.1"
1619 + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-5.0.1.tgz"
1620 + integrity sha512-PoiE6ZD2Eiy5mK+fjHqwGOS+IXX0wq/YDtNyIgOrc6ejFnxN4b13pRpiIPbtPwHEc+NT2KCjteAcq33/F1Y9KQ==
1621 +
1622 +"@svgr/babel-plugin-svg-dynamic-title@^5.4.0":
1623 + version "5.4.0"
1624 + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-5.4.0.tgz"
1625 + integrity sha512-zSOZH8PdZOpuG1ZVx/cLVePB2ibo3WPpqo7gFIjLV9a0QsuQAzJiwwqmuEdTaW2pegyBE17Uu15mOgOcgabQZg==
1626 +
1627 +"@svgr/babel-plugin-svg-em-dimensions@^5.4.0":
1628 + version "5.4.0"
1629 + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-5.4.0.tgz"
1630 + integrity sha512-cPzDbDA5oT/sPXDCUYoVXEmm3VIoAWAPT6mSPTJNbQaBNUuEKVKyGH93oDY4e42PYHRW67N5alJx/eEol20abw==
1631 +
1632 +"@svgr/babel-plugin-transform-react-native-svg@^5.4.0":
1633 + version "5.4.0"
1634 + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-5.4.0.tgz"
1635 + integrity sha512-3eYP/SaopZ41GHwXma7Rmxcv9uRslRDTY1estspeB1w1ueZWd/tPlMfEOoccYpEMZU3jD4OU7YitnXcF5hLW2Q==
1636 +
1637 +"@svgr/babel-plugin-transform-svg-component@^5.5.0":
1638 + version "5.5.0"
1639 + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-5.5.0.tgz"
1640 + integrity sha512-q4jSH1UUvbrsOtlo/tKcgSeiCHRSBdXoIoqX1pgcKK/aU3JD27wmMKwGtpB8qRYUYoyXvfGxUVKchLuR5pB3rQ==
1641 +
1642 +"@svgr/babel-preset@^5.5.0":
1643 + version "5.5.0"
1644 + resolved "https://registry.yarnpkg.com/@svgr/babel-preset/-/babel-preset-5.5.0.tgz"
1645 + integrity sha512-4FiXBjvQ+z2j7yASeGPEi8VD/5rrGQk4Xrq3EdJmoZgz/tpqChpo5hgXDvmEauwtvOc52q8ghhZK4Oy7qph4ig==
1646 + dependencies:
1647 + "@svgr/babel-plugin-add-jsx-attribute" "^5.4.0"
1648 + "@svgr/babel-plugin-remove-jsx-attribute" "^5.4.0"
1649 + "@svgr/babel-plugin-remove-jsx-empty-expression" "^5.0.1"
1650 + "@svgr/babel-plugin-replace-jsx-attribute-value" "^5.0.1"
1651 + "@svgr/babel-plugin-svg-dynamic-title" "^5.4.0"
1652 + "@svgr/babel-plugin-svg-em-dimensions" "^5.4.0"
1653 + "@svgr/babel-plugin-transform-react-native-svg" "^5.4.0"
1654 + "@svgr/babel-plugin-transform-svg-component" "^5.5.0"
1655 +
1656 +"@svgr/core@^5.5.0":
1657 + version "5.5.0"
1658 + resolved "https://registry.yarnpkg.com/@svgr/core/-/core-5.5.0.tgz"
1659 + integrity sha512-q52VOcsJPvV3jO1wkPtzTuKlvX7Y3xIcWRpCMtBF3MrteZJtBfQw/+u0B1BHy5ColpQc1/YVTrPEtSYIMNZlrQ==
1660 + dependencies:
1661 + "@svgr/plugin-jsx" "^5.5.0"
1662 + camelcase "^6.2.0"
1663 + cosmiconfig "^7.0.0"
1664 +
1665 +"@svgr/hast-util-to-babel-ast@^5.5.0":
1666 + version "5.5.0"
1667 + resolved "https://registry.yarnpkg.com/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-5.5.0.tgz"
1668 + integrity sha512-cAaR/CAiZRB8GP32N+1jocovUtvlj0+e65TB50/6Lcime+EA49m/8l+P2ko+XPJ4dw3xaPS3jOL4F2X4KWxoeQ==
1669 + dependencies:
1670 + "@babel/types" "^7.12.6"
1671 +
1672 +"@svgr/plugin-jsx@^5.5.0":
1673 + version "5.5.0"
1674 + resolved "https://registry.yarnpkg.com/@svgr/plugin-jsx/-/plugin-jsx-5.5.0.tgz"
1675 + integrity sha512-V/wVh33j12hGh05IDg8GpIUXbjAPnTdPTKuP4VNLggnwaHMPNQNae2pRnyTAILWCQdz5GyMqtO488g7CKM8CBA==
1676 + dependencies:
1677 + "@babel/core" "^7.12.3"
1678 + "@svgr/babel-preset" "^5.5.0"
1679 + "@svgr/hast-util-to-babel-ast" "^5.5.0"
1680 + svg-parser "^2.0.2"
1681 +
1682 +"@svgr/plugin-svgo@^5.5.0":
1683 + version "5.5.0"
1684 + resolved "https://registry.yarnpkg.com/@svgr/plugin-svgo/-/plugin-svgo-5.5.0.tgz"
1685 + integrity sha512-r5swKk46GuQl4RrVejVwpeeJaydoxkdwkM1mBKOgJLBUJPGaLci6ylg/IjhrRsREKDkr4kbMWdgOtbXEh0fyLQ==
1686 + dependencies:
1687 + cosmiconfig "^7.0.0"
1688 + deepmerge "^4.2.2"
1689 + svgo "^1.2.2"
1690 +
1691 +"@svgr/webpack@5.5.0":
1692 + version "5.5.0"
1693 + resolved "https://registry.yarnpkg.com/@svgr/webpack/-/webpack-5.5.0.tgz"
1694 + integrity sha512-DOBOK255wfQxguUta2INKkzPj6AIS6iafZYiYmHn6W3pHlycSRRlvWKCfLDG10fXfLWqE3DJHgRUOyJYmARa7g==
1695 + dependencies:
1696 + "@babel/core" "^7.12.3"
1697 + "@babel/plugin-transform-react-constant-elements" "^7.12.1"
1698 + "@babel/preset-env" "^7.12.1"
1699 + "@babel/preset-react" "^7.12.5"
1700 + "@svgr/core" "^5.5.0"
1701 + "@svgr/plugin-jsx" "^5.5.0"
1702 + "@svgr/plugin-svgo" "^5.5.0"
1703 + loader-utils "^2.0.0"
1704 +
1705 +"@tootallnate/once@1":
1706 + version "1.1.2"
1707 + resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-1.1.2.tgz"
1708 + integrity sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==
1709 +
1710 +"@types/babel__core@^7.0.0", "@types/babel__core@^7.1.7":
1711 + version "7.1.16"
1712 + resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.1.16.tgz"
1713 + integrity sha512-EAEHtisTMM+KaKwfWdC3oyllIqswlznXCIVCt7/oRNrh+DhgT4UEBNC/jlADNjvw7UnfbcdkGQcPVZ1xYiLcrQ==
1714 + dependencies:
1715 + "@babel/parser" "^7.1.0"
1716 + "@babel/types" "^7.0.0"
1717 + "@types/babel__generator" "*"
1718 + "@types/babel__template" "*"
1719 + "@types/babel__traverse" "*"
1720 +
1721 +"@types/babel__generator@*":
1722 + version "7.6.3"
1723 + resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.6.3.tgz"
1724 + integrity sha512-/GWCmzJWqV7diQW54smJZzWbSFf4QYtF71WCKhcx6Ru/tFyQIY2eiiITcCAeuPbNSvT9YCGkVMqqvSk2Z0mXiA==
1725 + dependencies:
1726 + "@babel/types" "^7.0.0"
1727 +
1728 +"@types/babel__template@*":
1729 + version "7.4.1"
1730 + resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.4.1.tgz"
1731 + integrity sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==
1732 + dependencies:
1733 + "@babel/parser" "^7.1.0"
1734 + "@babel/types" "^7.0.0"
1735 +
1736 +"@types/babel__traverse@*", "@types/babel__traverse@^7.0.4", "@types/babel__traverse@^7.0.6":
1737 + version "7.14.2"
1738 + resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.14.2.tgz"
1739 + integrity sha512-K2waXdXBi2302XUdcHcR1jCeU0LL4TD9HRs/gk0N2Xvrht+G/BfJa4QObBQZfhMdxiCpV3COl5Nfq4uKTeTnJA==
1740 + dependencies:
1741 + "@babel/types" "^7.3.0"
1742 +
1743 +"@types/eslint@^7.2.6":
1744 + version "7.28.2"
1745 + resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-7.28.2.tgz"
1746 + integrity sha512-KubbADPkfoU75KgKeKLsFHXnU4ipH7wYg0TRT33NK3N3yiu7jlFAAoygIWBV+KbuHx/G+AvuGX6DllnK35gfJA==
1747 + dependencies:
1748 + "@types/estree" "*"
1749 + "@types/json-schema" "*"
1750 +
1751 +"@types/estree@*":
1752 + version "0.0.50"
1753 + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.50.tgz"
1754 + integrity sha512-C6N5s2ZFtuZRj54k2/zyRhNDjJwwcViAM3Nbm8zjBpbqAdZ00mr0CFxvSKeO8Y/e03WVFLpQMdHYVfUd6SB+Hw==
1755 +
1756 +"@types/estree@0.0.39":
1757 + version "0.0.39"
1758 + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.39.tgz"
1759 + integrity sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==
1760 +
1761 +"@types/glob@^7.1.1":
1762 + version "7.2.0"
1763 + resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.2.0.tgz"
1764 + integrity sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==
1765 + dependencies:
1766 + "@types/minimatch" "*"
1767 + "@types/node" "*"
1768 +
1769 +"@types/graceful-fs@^4.1.2":
1770 + version "4.1.5"
1771 + resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.5.tgz"
1772 + integrity sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw==
1773 + dependencies:
1774 + "@types/node" "*"
1775 +
1776 +"@types/html-minifier-terser@^5.0.0":
1777 + version "5.1.2"
1778 + resolved "https://registry.yarnpkg.com/@types/html-minifier-terser/-/html-minifier-terser-5.1.2.tgz"
1779 + integrity sha512-h4lTMgMJctJybDp8CQrxTUiiYmedihHWkjnF/8Pxseu2S6Nlfcy8kwboQ8yejh456rP2yWoEVm1sS/FVsfM48w==
1780 +
1781 +"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0", "@types/istanbul-lib-coverage@^2.0.1":
1782 + version "2.0.3"
1783 + resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz"
1784 + integrity sha512-sz7iLqvVUg1gIedBOvlkxPlc8/uVzyS5OwGz1cKjXzkl3FpL3al0crU8YGU1WoHkxn0Wxbw5tyi6hvzJKNzFsw==
1785 +
1786 +"@types/istanbul-lib-report@*":
1787 + version "3.0.0"
1788 + resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz"
1789 + integrity sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==
1790 + dependencies:
1791 + "@types/istanbul-lib-coverage" "*"
1792 +
1793 +"@types/istanbul-reports@^3.0.0":
1794 + version "3.0.1"
1795 + resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz"
1796 + integrity sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==
1797 + dependencies:
1798 + "@types/istanbul-lib-report" "*"
1799 +
1800 +"@types/json-schema@*", "@types/json-schema@^7.0.3", "@types/json-schema@^7.0.5", "@types/json-schema@^7.0.7", "@types/json-schema@^7.0.8":
1801 + version "7.0.9"
1802 + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.9.tgz"
1803 + integrity sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==
1804 +
1805 +"@types/json5@^0.0.29":
1806 + version "0.0.29"
1807 + resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz"
1808 + integrity sha1-7ihweulOEdK4J7y+UnC86n8+ce4=
1809 +
1810 +"@types/minimatch@*":
1811 + version "3.0.5"
1812 + resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.5.tgz"
1813 + integrity sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==
1814 +
1815 +"@types/node@*":
1816 + version "16.11.4"
1817 + resolved "https://registry.yarnpkg.com/@types/node/-/node-16.11.4.tgz"
1818 + integrity sha512-TMgXmy0v2xWyuCSCJM6NCna2snndD8yvQF67J29ipdzMcsPa9u+o0tjF5+EQNdhcuZplYuouYqpc4zcd5I6amQ==
1819 +
1820 +"@types/normalize-package-data@^2.4.0":
1821 + version "2.4.1"
1822 + resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz"
1823 + integrity sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==
1824 +
1825 +"@types/parse-json@^4.0.0":
1826 + version "4.0.0"
1827 + resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.0.tgz"
1828 + integrity sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==
1829 +
1830 +"@types/prettier@^2.0.0":
1831 + version "2.4.1"
1832 + resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.4.1.tgz"
1833 + integrity sha512-Fo79ojj3vdEZOHg3wR9ksAMRz4P3S5fDB5e/YWZiFnyFQI1WY2Vftu9XoXVVtJfxB7Bpce/QTqWSSntkz2Znrw==
1834 +
1835 +"@types/q@^1.5.1":
1836 + version "1.5.5"
1837 + resolved "https://registry.yarnpkg.com/@types/q/-/q-1.5.5.tgz"
1838 + integrity sha512-L28j2FcJfSZOnL1WBjDYp2vUHCeIFlyYI/53EwD/rKUBQ7MtUUfbQWiyKJGpcnv4/WgrhWsFKrcPstcAt/J0tQ==
1839 +
1840 +"@types/resolve@0.0.8":
1841 + version "0.0.8"
1842 + resolved "https://registry.yarnpkg.com/@types/resolve/-/resolve-0.0.8.tgz"
1843 + integrity sha512-auApPaJf3NPfe18hSoJkp8EbZzer2ISk7o8mCC3M9he/a04+gbMF97NkpD2S8riMGvm4BMRI59/SZQSaLTKpsQ==
1844 + dependencies:
1845 + "@types/node" "*"
1846 +
1847 +"@types/source-list-map@*":
1848 + version "0.1.2"
1849 + resolved "https://registry.yarnpkg.com/@types/source-list-map/-/source-list-map-0.1.2.tgz"
1850 + integrity sha512-K5K+yml8LTo9bWJI/rECfIPrGgxdpeNbj+d53lwN4QjW1MCwlkhUms+gtdzigTeUyBr09+u8BwOIY3MXvHdcsA==
1851 +
1852 +"@types/stack-utils@^2.0.0":
1853 + version "2.0.1"
1854 + resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.1.tgz"
1855 + integrity sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==
1856 +
1857 +"@types/tapable@^1", "@types/tapable@^1.0.5":
1858 + version "1.0.8"
1859 + resolved "https://registry.yarnpkg.com/@types/tapable/-/tapable-1.0.8.tgz"
1860 + integrity sha512-ipixuVrh2OdNmauvtT51o3d8z12p6LtFW9in7U79der/kwejjdNchQC5UMn5u/KxNoM7VHHOs/l8KS8uHxhODQ==
1861 +
1862 +"@types/uglify-js@*":
1863 + version "3.13.1"
1864 + resolved "https://registry.yarnpkg.com/@types/uglify-js/-/uglify-js-3.13.1.tgz"
1865 + integrity sha512-O3MmRAk6ZuAKa9CHgg0Pr0+lUOqoMLpc9AS4R8ano2auvsg7IE8syF3Xh/NPr26TWklxYcqoEEFdzLLs1fV9PQ==
1866 + dependencies:
1867 + source-map "^0.6.1"
1868 +
1869 +"@types/webpack-sources@*":
1870 + version "3.2.0"
1871 + resolved "https://registry.yarnpkg.com/@types/webpack-sources/-/webpack-sources-3.2.0.tgz"
1872 + integrity sha512-Ft7YH3lEVRQ6ls8k4Ff1oB4jN6oy/XmU6tQISKdhfh+1mR+viZFphS6WL0IrtDOzvefmJg5a0s7ZQoRXwqTEFg==
1873 + dependencies:
1874 + "@types/node" "*"
1875 + "@types/source-list-map" "*"
1876 + source-map "^0.7.3"
1877 +
1878 +"@types/webpack@^4.41.8":
1879 + version "4.41.31"
1880 + resolved "https://registry.yarnpkg.com/@types/webpack/-/webpack-4.41.31.tgz"
1881 + integrity sha512-/i0J7sepXFIp1ZT7FjUGi1eXMCg8HCCzLJEQkKsOtbJFontsJLolBcDC+3qxn5pPwiCt1G0ZdRmYRzNBtvpuGQ==
1882 + dependencies:
1883 + "@types/node" "*"
1884 + "@types/tapable" "^1"
1885 + "@types/uglify-js" "*"
1886 + "@types/webpack-sources" "*"
1887 + anymatch "^3.0.0"
1888 + source-map "^0.6.0"
1889 +
1890 +"@types/yargs-parser@*":
1891 + version "20.2.1"
1892 + resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-20.2.1.tgz"
1893 + integrity sha512-7tFImggNeNBVMsn0vLrpn1H1uPrUBdnARPTpZoitY37ZrdJREzf7I16tMrlK3hen349gr1NYh8CmZQa7CTG6Aw==
1894 +
1895 +"@types/yargs@^15.0.0":
1896 + version "15.0.14"
1897 + resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-15.0.14.tgz"
1898 + integrity sha512-yEJzHoxf6SyQGhBhIYGXQDSCkJjB6HohDShto7m8vaKg9Yp0Yn8+71J9eakh2bnPg6BfsH9PRMhiRTZnd4eXGQ==
1899 + dependencies:
1900 + "@types/yargs-parser" "*"
1901 +
1902 +"@typescript-eslint/eslint-plugin@^4.5.0":
1903 + version "4.33.0"
1904 + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.33.0.tgz"
1905 + integrity sha512-aINiAxGVdOl1eJyVjaWn/YcVAq4Gi/Yo35qHGCnqbWVz61g39D0h23veY/MA0rFFGfxK7TySg2uwDeNv+JgVpg==
1906 + dependencies:
1907 + "@typescript-eslint/experimental-utils" "4.33.0"
1908 + "@typescript-eslint/scope-manager" "4.33.0"
1909 + debug "^4.3.1"
1910 + functional-red-black-tree "^1.0.1"
1911 + ignore "^5.1.8"
1912 + regexpp "^3.1.0"
1913 + semver "^7.3.5"
1914 + tsutils "^3.21.0"
1915 +
1916 +"@typescript-eslint/experimental-utils@4.33.0", "@typescript-eslint/experimental-utils@^4.0.1":
1917 + version "4.33.0"
1918 + resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-4.33.0.tgz"
1919 + integrity sha512-zeQjOoES5JFjTnAhI5QY7ZviczMzDptls15GFsI6jyUOq0kOf9+WonkhtlIhh0RgHRnqj5gdNxW5j1EvAyYg6Q==
1920 + dependencies:
1921 + "@types/json-schema" "^7.0.7"
1922 + "@typescript-eslint/scope-manager" "4.33.0"
1923 + "@typescript-eslint/types" "4.33.0"
1924 + "@typescript-eslint/typescript-estree" "4.33.0"
1925 + eslint-scope "^5.1.1"
1926 + eslint-utils "^3.0.0"
1927 +
1928 +"@typescript-eslint/experimental-utils@^3.10.1":
1929 + version "3.10.1"
1930 + resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-3.10.1.tgz"
1931 + integrity sha512-DewqIgscDzmAfd5nOGe4zm6Bl7PKtMG2Ad0KG8CUZAHlXfAKTF9Ol5PXhiMh39yRL2ChRH1cuuUGOcVyyrhQIw==
1932 + dependencies:
1933 + "@types/json-schema" "^7.0.3"
1934 + "@typescript-eslint/types" "3.10.1"
1935 + "@typescript-eslint/typescript-estree" "3.10.1"
1936 + eslint-scope "^5.0.0"
1937 + eslint-utils "^2.0.0"
1938 +
1939 +"@typescript-eslint/parser@^4.5.0":
1940 + version "4.33.0"
1941 + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-4.33.0.tgz"
1942 + integrity sha512-ZohdsbXadjGBSK0/r+d87X0SBmKzOq4/S5nzK6SBgJspFo9/CUDJ7hjayuze+JK7CZQLDMroqytp7pOcFKTxZA==
1943 + dependencies:
1944 + "@typescript-eslint/scope-manager" "4.33.0"
1945 + "@typescript-eslint/types" "4.33.0"
1946 + "@typescript-eslint/typescript-estree" "4.33.0"
1947 + debug "^4.3.1"
1948 +
1949 +"@typescript-eslint/scope-manager@4.33.0":
1950 + version "4.33.0"
1951 + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-4.33.0.tgz"
1952 + integrity sha512-5IfJHpgTsTZuONKbODctL4kKuQje/bzBRkwHE8UOZ4f89Zeddg+EGZs8PD8NcN4LdM3ygHWYB3ukPAYjvl/qbQ==
1953 + dependencies:
1954 + "@typescript-eslint/types" "4.33.0"
1955 + "@typescript-eslint/visitor-keys" "4.33.0"
1956 +
1957 +"@typescript-eslint/types@3.10.1":
1958 + version "3.10.1"
1959 + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-3.10.1.tgz"
1960 + integrity sha512-+3+FCUJIahE9q0lDi1WleYzjCwJs5hIsbugIgnbB+dSCYUxl8L6PwmsyOPFZde2hc1DlTo/xnkOgiTLSyAbHiQ==
1961 +
1962 +"@typescript-eslint/types@4.33.0":
1963 + version "4.33.0"
1964 + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.33.0.tgz"
1965 + integrity sha512-zKp7CjQzLQImXEpLt2BUw1tvOMPfNoTAfb8l51evhYbOEEzdWyQNmHWWGPR6hwKJDAi+1VXSBmnhL9kyVTTOuQ==
1966 +
1967 +"@typescript-eslint/typescript-estree@3.10.1":
1968 + version "3.10.1"
1969 + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-3.10.1.tgz"
1970 + integrity sha512-QbcXOuq6WYvnB3XPsZpIwztBoquEYLXh2MtwVU+kO8jgYCiv4G5xrSP/1wg4tkvrEE+esZVquIPX/dxPlePk1w==
1971 + dependencies:
1972 + "@typescript-eslint/types" "3.10.1"
1973 + "@typescript-eslint/visitor-keys" "3.10.1"
1974 + debug "^4.1.1"
1975 + glob "^7.1.6"
1976 + is-glob "^4.0.1"
1977 + lodash "^4.17.15"
1978 + semver "^7.3.2"
1979 + tsutils "^3.17.1"
1980 +
1981 +"@typescript-eslint/typescript-estree@4.33.0":
1982 + version "4.33.0"
1983 + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.33.0.tgz"
1984 + integrity sha512-rkWRY1MPFzjwnEVHsxGemDzqqddw2QbTJlICPD9p9I9LfsO8fdmfQPOX3uKfUaGRDFJbfrtm/sXhVXN4E+bzCA==
1985 + dependencies:
1986 + "@typescript-eslint/types" "4.33.0"
1987 + "@typescript-eslint/visitor-keys" "4.33.0"
1988 + debug "^4.3.1"
1989 + globby "^11.0.3"
1990 + is-glob "^4.0.1"
1991 + semver "^7.3.5"
1992 + tsutils "^3.21.0"
1993 +
1994 +"@typescript-eslint/visitor-keys@3.10.1":
1995 + version "3.10.1"
1996 + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-3.10.1.tgz"
1997 + integrity sha512-9JgC82AaQeglebjZMgYR5wgmfUdUc+EitGUUMW8u2nDckaeimzW+VsoLV6FoimPv2id3VQzfjwBxEMVz08ameQ==
1998 + dependencies:
1999 + eslint-visitor-keys "^1.1.0"
2000 +
2001 +"@typescript-eslint/visitor-keys@4.33.0":
2002 + version "4.33.0"
2003 + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.33.0.tgz"
2004 + integrity sha512-uqi/2aSz9g2ftcHWf8uLPJA70rUv6yuMW5Bohw+bwcuzaxQIHaKFZCKGoGXIrc9vkTJ3+0txM73K0Hq3d5wgIg==
2005 + dependencies:
2006 + "@typescript-eslint/types" "4.33.0"
2007 + eslint-visitor-keys "^2.0.0"
2008 +
2009 +"@webassemblyjs/ast@1.9.0":
2010 + version "1.9.0"
2011 + resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.9.0.tgz"
2012 + integrity sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA==
2013 + dependencies:
2014 + "@webassemblyjs/helper-module-context" "1.9.0"
2015 + "@webassemblyjs/helper-wasm-bytecode" "1.9.0"
2016 + "@webassemblyjs/wast-parser" "1.9.0"
2017 +
2018 +"@webassemblyjs/floating-point-hex-parser@1.9.0":
2019 + version "1.9.0"
2020 + resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.0.tgz"
2021 + integrity sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA==
2022 +
2023 +"@webassemblyjs/helper-api-error@1.9.0":
2024 + version "1.9.0"
2025 + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz"
2026 + integrity sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw==
2027 +
2028 +"@webassemblyjs/helper-buffer@1.9.0":
2029 + version "1.9.0"
2030 + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz"
2031 + integrity sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA==
2032 +
2033 +"@webassemblyjs/helper-code-frame@1.9.0":
2034 + version "1.9.0"
2035 + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.0.tgz"
2036 + integrity sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA==
2037 + dependencies:
2038 + "@webassemblyjs/wast-printer" "1.9.0"
2039 +
2040 +"@webassemblyjs/helper-fsm@1.9.0":
2041 + version "1.9.0"
2042 + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.0.tgz"
2043 + integrity sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw==
2044 +
2045 +"@webassemblyjs/helper-module-context@1.9.0":
2046 + version "1.9.0"
2047 + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.0.tgz"
2048 + integrity sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g==
2049 + dependencies:
2050 + "@webassemblyjs/ast" "1.9.0"
2051 +
2052 +"@webassemblyjs/helper-wasm-bytecode@1.9.0":
2053 + version "1.9.0"
2054 + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz"
2055 + integrity sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw==
2056 +
2057 +"@webassemblyjs/helper-wasm-section@1.9.0":
2058 + version "1.9.0"
2059 + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz"
2060 + integrity sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw==
2061 + dependencies:
2062 + "@webassemblyjs/ast" "1.9.0"
2063 + "@webassemblyjs/helper-buffer" "1.9.0"
2064 + "@webassemblyjs/helper-wasm-bytecode" "1.9.0"
2065 + "@webassemblyjs/wasm-gen" "1.9.0"
2066 +
2067 +"@webassemblyjs/ieee754@1.9.0":
2068 + version "1.9.0"
2069 + resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz"
2070 + integrity sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg==
2071 + dependencies:
2072 + "@xtuc/ieee754" "^1.2.0"
2073 +
2074 +"@webassemblyjs/leb128@1.9.0":
2075 + version "1.9.0"
2076 + resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.9.0.tgz"
2077 + integrity sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw==
2078 + dependencies:
2079 + "@xtuc/long" "4.2.2"
2080 +
2081 +"@webassemblyjs/utf8@1.9.0":
2082 + version "1.9.0"
2083 + resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.9.0.tgz"
2084 + integrity sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w==
2085 +
2086 +"@webassemblyjs/wasm-edit@1.9.0":
2087 + version "1.9.0"
2088 + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz"
2089 + integrity sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw==
2090 + dependencies:
2091 + "@webassemblyjs/ast" "1.9.0"
2092 + "@webassemblyjs/helper-buffer" "1.9.0"
2093 + "@webassemblyjs/helper-wasm-bytecode" "1.9.0"
2094 + "@webassemblyjs/helper-wasm-section" "1.9.0"
2095 + "@webassemblyjs/wasm-gen" "1.9.0"
2096 + "@webassemblyjs/wasm-opt" "1.9.0"
2097 + "@webassemblyjs/wasm-parser" "1.9.0"
2098 + "@webassemblyjs/wast-printer" "1.9.0"
2099 +
2100 +"@webassemblyjs/wasm-gen@1.9.0":
2101 + version "1.9.0"
2102 + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz"
2103 + integrity sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA==
2104 + dependencies:
2105 + "@webassemblyjs/ast" "1.9.0"
2106 + "@webassemblyjs/helper-wasm-bytecode" "1.9.0"
2107 + "@webassemblyjs/ieee754" "1.9.0"
2108 + "@webassemblyjs/leb128" "1.9.0"
2109 + "@webassemblyjs/utf8" "1.9.0"
2110 +
2111 +"@webassemblyjs/wasm-opt@1.9.0":
2112 + version "1.9.0"
2113 + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz"
2114 + integrity sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A==
2115 + dependencies:
2116 + "@webassemblyjs/ast" "1.9.0"
2117 + "@webassemblyjs/helper-buffer" "1.9.0"
2118 + "@webassemblyjs/wasm-gen" "1.9.0"
2119 + "@webassemblyjs/wasm-parser" "1.9.0"
2120 +
2121 +"@webassemblyjs/wasm-parser@1.9.0":
2122 + version "1.9.0"
2123 + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz"
2124 + integrity sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA==
2125 + dependencies:
2126 + "@webassemblyjs/ast" "1.9.0"
2127 + "@webassemblyjs/helper-api-error" "1.9.0"
2128 + "@webassemblyjs/helper-wasm-bytecode" "1.9.0"
2129 + "@webassemblyjs/ieee754" "1.9.0"
2130 + "@webassemblyjs/leb128" "1.9.0"
2131 + "@webassemblyjs/utf8" "1.9.0"
2132 +
2133 +"@webassemblyjs/wast-parser@1.9.0":
2134 + version "1.9.0"
2135 + resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-parser/-/wast-parser-1.9.0.tgz"
2136 + integrity sha512-qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw==
2137 + dependencies:
2138 + "@webassemblyjs/ast" "1.9.0"
2139 + "@webassemblyjs/floating-point-hex-parser" "1.9.0"
2140 + "@webassemblyjs/helper-api-error" "1.9.0"
2141 + "@webassemblyjs/helper-code-frame" "1.9.0"
2142 + "@webassemblyjs/helper-fsm" "1.9.0"
2143 + "@xtuc/long" "4.2.2"
2144 +
2145 +"@webassemblyjs/wast-printer@1.9.0":
2146 + version "1.9.0"
2147 + resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz"
2148 + integrity sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA==
2149 + dependencies:
2150 + "@webassemblyjs/ast" "1.9.0"
2151 + "@webassemblyjs/wast-parser" "1.9.0"
2152 + "@xtuc/long" "4.2.2"
2153 +
2154 +"@xtuc/ieee754@^1.2.0":
2155 + version "1.2.0"
2156 + resolved "https://registry.yarnpkg.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz"
2157 + integrity sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==
2158 +
2159 +"@xtuc/long@4.2.2":
2160 + version "4.2.2"
2161 + resolved "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.2.tgz"
2162 + integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==
2163 +
2164 +abab@^2.0.3, abab@^2.0.5:
2165 + version "2.0.5"
2166 + resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.5.tgz"
2167 + integrity sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q==
2168 +
2169 +accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.7:
2170 + version "1.3.7"
2171 + resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.7.tgz"
2172 + integrity sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==
2173 + dependencies:
2174 + mime-types "~2.1.24"
2175 + negotiator "0.6.2"
2176 +
2177 +acorn-globals@^6.0.0:
2178 + version "6.0.0"
2179 + resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-6.0.0.tgz"
2180 + integrity sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==
2181 + dependencies:
2182 + acorn "^7.1.1"
2183 + acorn-walk "^7.1.1"
2184 +
2185 +acorn-jsx@^5.3.1:
2186 + version "5.3.2"
2187 + resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz"
2188 + integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==
2189 +
2190 +acorn-walk@^7.1.1:
2191 + version "7.2.0"
2192 + resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-7.2.0.tgz"
2193 + integrity sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==
2194 +
2195 +acorn@^6.4.1:
2196 + version "6.4.2"
2197 + resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.2.tgz"
2198 + integrity sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==
2199 +
2200 +acorn@^7.1.0, acorn@^7.1.1, acorn@^7.4.0:
2201 + version "7.4.1"
2202 + resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz"
2203 + integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==
2204 +
2205 +acorn@^8.2.4:
2206 + version "8.5.0"
2207 + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.5.0.tgz"
2208 + integrity sha512-yXbYeFy+jUuYd3/CDcg2NkIYE991XYX/bje7LmjJigUciaeO1JR4XxXgCIV1/Zc/dRuFEyw1L0pbA+qynJkW5Q==
2209 +
2210 +address@1.1.2, address@^1.0.1:
2211 + version "1.1.2"
2212 + resolved "https://registry.yarnpkg.com/address/-/address-1.1.2.tgz"
2213 + integrity sha512-aT6camzM4xEA54YVJYSqxz1kv4IHnQZRtThJJHhUMRExaU5spC7jX5ugSwTaTgJliIgs4VhZOk7htClvQ/LmRA==
2214 +
2215 +adjust-sourcemap-loader@3.0.0:
2216 + version "3.0.0"
2217 + resolved "https://registry.yarnpkg.com/adjust-sourcemap-loader/-/adjust-sourcemap-loader-3.0.0.tgz"
2218 + integrity sha512-YBrGyT2/uVQ/c6Rr+t6ZJXniY03YtHGMJQYal368burRGYKqhx9qGTWqcBU5s1CwYY9E/ri63RYyG1IacMZtqw==
2219 + dependencies:
2220 + loader-utils "^2.0.0"
2221 + regex-parser "^2.2.11"
2222 +
2223 +agent-base@6:
2224 + version "6.0.2"
2225 + resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz"
2226 + integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==
2227 + dependencies:
2228 + debug "4"
2229 +
2230 +aggregate-error@^3.0.0:
2231 + version "3.1.0"
2232 + resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz"
2233 + integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==
2234 + dependencies:
2235 + clean-stack "^2.0.0"
2236 + indent-string "^4.0.0"
2237 +
2238 +ajv-errors@^1.0.0:
2239 + version "1.0.1"
2240 + resolved "https://registry.yarnpkg.com/ajv-errors/-/ajv-errors-1.0.1.tgz"
2241 + integrity sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==
2242 +
2243 +ajv-keywords@^3.1.0, ajv-keywords@^3.4.1, ajv-keywords@^3.5.2:
2244 + version "3.5.2"
2245 + resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz"
2246 + integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==
2247 +
2248 +ajv@^6.1.0, ajv@^6.10.0, ajv@^6.10.2, ajv@^6.12.4, ajv@^6.12.5:
2249 + version "6.12.6"
2250 + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz"
2251 + integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==
2252 + dependencies:
2253 + fast-deep-equal "^3.1.1"
2254 + fast-json-stable-stringify "^2.0.0"
2255 + json-schema-traverse "^0.4.1"
2256 + uri-js "^4.2.2"
2257 +
2258 +ajv@^8.0.1:
2259 + version "8.6.3"
2260 + resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.6.3.tgz"
2261 + integrity sha512-SMJOdDP6LqTkD0Uq8qLi+gMwSt0imXLSV080qFVwJCpH9U6Mb+SUGHAXM0KNbcBPguytWyvFxcHgMLe2D2XSpw==
2262 + dependencies:
2263 + fast-deep-equal "^3.1.1"
2264 + json-schema-traverse "^1.0.0"
2265 + require-from-string "^2.0.2"
2266 + uri-js "^4.2.2"
2267 +
2268 +alphanum-sort@^1.0.0:
2269 + version "1.0.2"
2270 + resolved "https://registry.yarnpkg.com/alphanum-sort/-/alphanum-sort-1.0.2.tgz"
2271 + integrity sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM=
2272 +
2273 +ansi-colors@^3.0.0:
2274 + version "3.2.4"
2275 + resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-3.2.4.tgz"
2276 + integrity sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA==
2277 +
2278 +ansi-colors@^4.1.1:
2279 + version "4.1.1"
2280 + resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz"
2281 + integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==
2282 +
2283 +ansi-escapes@^4.2.1, ansi-escapes@^4.3.1:
2284 + version "4.3.2"
2285 + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz"
2286 + integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==
2287 + dependencies:
2288 + type-fest "^0.21.3"
2289 +
2290 +ansi-html@0.0.7, ansi-html@^0.0.7:
2291 + version "0.0.7"
2292 + resolved "https://registry.yarnpkg.com/ansi-html/-/ansi-html-0.0.7.tgz"
2293 + integrity sha1-gTWEAhliqenm/QOflA0S9WynhZ4=
2294 +
2295 +ansi-regex@^2.0.0:
2296 + version "2.1.1"
2297 + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz"
2298 + integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8=
2299 +
2300 +ansi-regex@^4.1.0:
2301 + version "4.1.0"
2302 + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz"
2303 + integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==
2304 +
2305 +ansi-regex@^5.0.0, ansi-regex@^5.0.1:
2306 + version "5.0.1"
2307 + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz"
2308 + integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==
2309 +
2310 +ansi-styles@^3.2.0, ansi-styles@^3.2.1:
2311 + version "3.2.1"
2312 + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz"
2313 + integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==
2314 + dependencies:
2315 + color-convert "^1.9.0"
2316 +
2317 +ansi-styles@^4.0.0, ansi-styles@^4.1.0:
2318 + version "4.3.0"
2319 + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz"
2320 + integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==
2321 + dependencies:
2322 + color-convert "^2.0.1"
2323 +
2324 +anymatch@^2.0.0:
2325 + version "2.0.0"
2326 + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz"
2327 + integrity sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==
2328 + dependencies:
2329 + micromatch "^3.1.4"
2330 + normalize-path "^2.1.1"
2331 +
2332 +anymatch@^3.0.0, anymatch@^3.0.3, anymatch@~3.1.2:
2333 + version "3.1.2"
2334 + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz"
2335 + integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==
2336 + dependencies:
2337 + normalize-path "^3.0.0"
2338 + picomatch "^2.0.4"
2339 +
2340 +aproba@^1.1.1:
2341 + version "1.2.0"
2342 + resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz"
2343 + integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==
2344 +
2345 +argparse@^1.0.7:
2346 + version "1.0.10"
2347 + resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz"
2348 + integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==
2349 + dependencies:
2350 + sprintf-js "~1.0.2"
2351 +
2352 +aria-query@^4.2.2:
2353 + version "4.2.2"
2354 + resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-4.2.2.tgz"
2355 + integrity sha512-o/HelwhuKpTj/frsOsbNLNgnNGVIFsVP/SW2BSF14gVl7kAfMOJ6/8wUAUvG1R1NHKrfG+2sHZTu0yauT1qBrA==
2356 + dependencies:
2357 + "@babel/runtime" "^7.10.2"
2358 + "@babel/runtime-corejs3" "^7.10.2"
2359 +
2360 +arity-n@^1.0.4:
2361 + version "1.0.4"
2362 + resolved "https://registry.yarnpkg.com/arity-n/-/arity-n-1.0.4.tgz"
2363 + integrity sha1-2edrEXM+CFacCEeuezmyhgswt0U=
2364 +
2365 +arr-diff@^4.0.0:
2366 + version "4.0.0"
2367 + resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz"
2368 + integrity sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=
2369 +
2370 +arr-flatten@^1.1.0:
2371 + version "1.1.0"
2372 + resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz"
2373 + integrity sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==
2374 +
2375 +arr-union@^3.1.0:
2376 + version "3.1.0"
2377 + resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz"
2378 + integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=
2379 +
2380 +array-flatten@1.1.1:
2381 + version "1.1.1"
2382 + resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz"
2383 + integrity sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=
2384 +
2385 +array-flatten@^2.1.0:
2386 + version "2.1.2"
2387 + resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-2.1.2.tgz"
2388 + integrity sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==
2389 +
2390 +array-includes@^3.1.1, array-includes@^3.1.3, array-includes@^3.1.4:
2391 + version "3.1.4"
2392 + resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.4.tgz"
2393 + integrity sha512-ZTNSQkmWumEbiHO2GF4GmWxYVTiQyJy2XOTa15sdQSrvKn7l+180egQMqlrMOUMCyLMD7pmyQe4mMDUT6Behrw==
2394 + dependencies:
2395 + call-bind "^1.0.2"
2396 + define-properties "^1.1.3"
2397 + es-abstract "^1.19.1"
2398 + get-intrinsic "^1.1.1"
2399 + is-string "^1.0.7"
2400 +
2401 +array-union@^1.0.1:
2402 + version "1.0.2"
2403 + resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz"
2404 + integrity sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=
2405 + dependencies:
2406 + array-uniq "^1.0.1"
2407 +
2408 +array-union@^2.1.0:
2409 + version "2.1.0"
2410 + resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz"
2411 + integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==
2412 +
2413 +array-uniq@^1.0.1:
2414 + version "1.0.3"
2415 + resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz"
2416 + integrity sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=
2417 +
2418 +array-unique@^0.3.2:
2419 + version "0.3.2"
2420 + resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz"
2421 + integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=
2422 +
2423 +array.prototype.flat@^1.2.5:
2424 + version "1.2.5"
2425 + resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.2.5.tgz"
2426 + integrity sha512-KaYU+S+ndVqyUnignHftkwc58o3uVU1jzczILJ1tN2YaIZpFIKBiP/x/j97E5MVPsaCloPbqWLB/8qCTVvT2qg==
2427 + dependencies:
2428 + call-bind "^1.0.2"
2429 + define-properties "^1.1.3"
2430 + es-abstract "^1.19.0"
2431 +
2432 +array.prototype.flatmap@^1.2.4:
2433 + version "1.2.5"
2434 + resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.2.5.tgz"
2435 + integrity sha512-08u6rVyi1Lj7oqWbS9nUxliETrtIROT4XGTA4D/LWGten6E3ocm7cy9SIrmNHOL5XVbVuckUp3X6Xyg8/zpvHA==
2436 + dependencies:
2437 + call-bind "^1.0.0"
2438 + define-properties "^1.1.3"
2439 + es-abstract "^1.19.0"
2440 +
2441 +arrify@^2.0.1:
2442 + version "2.0.1"
2443 + resolved "https://registry.yarnpkg.com/arrify/-/arrify-2.0.1.tgz"
2444 + integrity sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==
2445 +
2446 +asap@~2.0.6:
2447 + version "2.0.6"
2448 + resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz"
2449 + integrity sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=
2450 +
2451 +asn1.js@^5.2.0:
2452 + version "5.4.1"
2453 + resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-5.4.1.tgz"
2454 + integrity sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==
2455 + dependencies:
2456 + bn.js "^4.0.0"
2457 + inherits "^2.0.1"
2458 + minimalistic-assert "^1.0.0"
2459 + safer-buffer "^2.1.0"
2460 +
2461 +assert@^1.1.1:
2462 + version "1.5.0"
2463 + resolved "https://registry.yarnpkg.com/assert/-/assert-1.5.0.tgz"
2464 + integrity sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==
2465 + dependencies:
2466 + object-assign "^4.1.1"
2467 + util "0.10.3"
2468 +
2469 +assign-symbols@^1.0.0:
2470 + version "1.0.0"
2471 + resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz"
2472 + integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=
2473 +
2474 +ast-types-flow@^0.0.7:
2475 + version "0.0.7"
2476 + resolved "https://registry.yarnpkg.com/ast-types-flow/-/ast-types-flow-0.0.7.tgz"
2477 + integrity sha1-9wtzXGvKGlycItmCw+Oef+ujva0=
2478 +
2479 +astral-regex@^2.0.0:
2480 + version "2.0.0"
2481 + resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz"
2482 + integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==
2483 +
2484 +async-each@^1.0.1:
2485 + version "1.0.3"
2486 + resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.3.tgz"
2487 + integrity sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==
2488 +
2489 +async-limiter@~1.0.0:
2490 + version "1.0.1"
2491 + resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.1.tgz"
2492 + integrity sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==
2493 +
2494 +async@^2.6.2:
2495 + version "2.6.3"
2496 + resolved "https://registry.yarnpkg.com/async/-/async-2.6.3.tgz"
2497 + integrity sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==
2498 + dependencies:
2499 + lodash "^4.17.14"
2500 +
2501 +asynckit@^0.4.0:
2502 + version "0.4.0"
2503 + resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz"
2504 + integrity sha1-x57Zf380y48robyXkLzDZkdLS3k=
2505 +
2506 +at-least-node@^1.0.0:
2507 + version "1.0.0"
2508 + resolved "https://registry.yarnpkg.com/at-least-node/-/at-least-node-1.0.0.tgz"
2509 + integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==
2510 +
2511 +atob@^2.1.2:
2512 + version "2.1.2"
2513 + resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz"
2514 + integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==
2515 +
2516 +autoprefixer@^9.6.1:
2517 + version "9.8.8"
2518 + resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-9.8.8.tgz"
2519 + integrity sha512-eM9d/swFopRt5gdJ7jrpCwgvEMIayITpojhkkSMRsFHYuH5bkSQ4p/9qTEHtmNudUZh22Tehu7I6CxAW0IXTKA==
2520 + dependencies:
2521 + browserslist "^4.12.0"
2522 + caniuse-lite "^1.0.30001109"
2523 + normalize-range "^0.1.2"
2524 + num2fraction "^1.2.2"
2525 + picocolors "^0.2.1"
2526 + postcss "^7.0.32"
2527 + postcss-value-parser "^4.1.0"
2528 +
2529 +axe-core@^4.0.2:
2530 + version "4.3.3"
2531 + resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-4.3.3.tgz"
2532 + integrity sha512-/lqqLAmuIPi79WYfRpy2i8z+x+vxU3zX2uAm0gs1q52qTuKwolOj1P8XbufpXcsydrpKx2yGn2wzAnxCMV86QA==
2533 +
2534 +axobject-query@^2.2.0:
2535 + version "2.2.0"
2536 + resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-2.2.0.tgz"
2537 + integrity sha512-Td525n+iPOOyUQIeBfcASuG6uJsDOITl7Mds5gFyerkWiX7qhUTdYUBlSgNMyVqtSJqwpt1kXGLdUt6SykLMRA==
2538 +
2539 +babel-eslint@^10.1.0:
2540 + version "10.1.0"
2541 + resolved "https://registry.yarnpkg.com/babel-eslint/-/babel-eslint-10.1.0.tgz"
2542 + integrity sha512-ifWaTHQ0ce+448CYop8AdrQiBsGrnC+bMgfyKFdi6EsPLTAWG+QfyDeM6OH+FmWnKvEq5NnBMLvlBUPKQZoDSg==
2543 + dependencies:
2544 + "@babel/code-frame" "^7.0.0"
2545 + "@babel/parser" "^7.7.0"
2546 + "@babel/traverse" "^7.7.0"
2547 + "@babel/types" "^7.7.0"
2548 + eslint-visitor-keys "^1.0.0"
2549 + resolve "^1.12.0"
2550 +
2551 +babel-extract-comments@^1.0.0:
2552 + version "1.0.0"
2553 + resolved "https://registry.yarnpkg.com/babel-extract-comments/-/babel-extract-comments-1.0.0.tgz"
2554 + integrity sha512-qWWzi4TlddohA91bFwgt6zO/J0X+io7Qp184Fw0m2JYRSTZnJbFR8+07KmzudHCZgOiKRCrjhylwv9Xd8gfhVQ==
2555 + dependencies:
2556 + babylon "^6.18.0"
2557 +
2558 +babel-jest@^26.6.0, babel-jest@^26.6.3:
2559 + version "26.6.3"
2560 + resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-26.6.3.tgz"
2561 + integrity sha512-pl4Q+GAVOHwvjrck6jKjvmGhnO3jHX/xuB9d27f+EJZ/6k+6nMuPjorrYp7s++bKKdANwzElBWnLWaObvTnaZA==
2562 + dependencies:
2563 + "@jest/transform" "^26.6.2"
2564 + "@jest/types" "^26.6.2"
2565 + "@types/babel__core" "^7.1.7"
2566 + babel-plugin-istanbul "^6.0.0"
2567 + babel-preset-jest "^26.6.2"
2568 + chalk "^4.0.0"
2569 + graceful-fs "^4.2.4"
2570 + slash "^3.0.0"
2571 +
2572 +babel-loader@8.1.0:
2573 + version "8.1.0"
2574 + resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-8.1.0.tgz"
2575 + integrity sha512-7q7nC1tYOrqvUrN3LQK4GwSk/TQorZSOlO9C+RZDZpODgyN4ZlCqE5q9cDsyWOliN+aU9B4JX01xK9eJXowJLw==
2576 + dependencies:
2577 + find-cache-dir "^2.1.0"
2578 + loader-utils "^1.4.0"
2579 + mkdirp "^0.5.3"
2580 + pify "^4.0.1"
2581 + schema-utils "^2.6.5"
2582 +
2583 +babel-plugin-dynamic-import-node@^2.3.3:
2584 + version "2.3.3"
2585 + resolved "https://registry.yarnpkg.com/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz"
2586 + integrity sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==
2587 + dependencies:
2588 + object.assign "^4.1.0"
2589 +
2590 +babel-plugin-istanbul@^6.0.0:
2591 + version "6.1.1"
2592 + resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz"
2593 + integrity sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==
2594 + dependencies:
2595 + "@babel/helper-plugin-utils" "^7.0.0"
2596 + "@istanbuljs/load-nyc-config" "^1.0.0"
2597 + "@istanbuljs/schema" "^0.1.2"
2598 + istanbul-lib-instrument "^5.0.4"
2599 + test-exclude "^6.0.0"
2600 +
2601 +babel-plugin-jest-hoist@^26.6.2:
2602 + version "26.6.2"
2603 + resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-26.6.2.tgz"
2604 + integrity sha512-PO9t0697lNTmcEHH69mdtYiOIkkOlj9fySqfO3K1eCcdISevLAE0xY59VLLUj0SoiPiTX/JU2CYFpILydUa5Lw==
2605 + dependencies:
2606 + "@babel/template" "^7.3.3"
2607 + "@babel/types" "^7.3.3"
2608 + "@types/babel__core" "^7.0.0"
2609 + "@types/babel__traverse" "^7.0.6"
2610 +
2611 +babel-plugin-macros@2.8.0:
2612 + version "2.8.0"
2613 + resolved "https://registry.yarnpkg.com/babel-plugin-macros/-/babel-plugin-macros-2.8.0.tgz"
2614 + integrity sha512-SEP5kJpfGYqYKpBrj5XU3ahw5p5GOHJ0U5ssOSQ/WBVdwkD2Dzlce95exQTs3jOVWPPKLBN2rlEWkCK7dSmLvg==
2615 + dependencies:
2616 + "@babel/runtime" "^7.7.2"
2617 + cosmiconfig "^6.0.0"
2618 + resolve "^1.12.0"
2619 +
2620 +babel-plugin-named-asset-import@^0.3.7:
2621 + version "0.3.7"
2622 + resolved "https://registry.yarnpkg.com/babel-plugin-named-asset-import/-/babel-plugin-named-asset-import-0.3.7.tgz"
2623 + integrity sha512-squySRkf+6JGnvjoUtDEjSREJEBirnXi9NqP6rjSYsylxQxqBTz+pkmf395i9E2zsvmYUaI40BHo6SqZUdydlw==
2624 +
2625 +babel-plugin-polyfill-corejs2@^0.2.2:
2626 + version "0.2.2"
2627 + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.2.2.tgz"
2628 + integrity sha512-kISrENsJ0z5dNPq5eRvcctITNHYXWOA4DUZRFYCz3jYCcvTb/A546LIddmoGNMVYg2U38OyFeNosQwI9ENTqIQ==
2629 + dependencies:
2630 + "@babel/compat-data" "^7.13.11"
2631 + "@babel/helper-define-polyfill-provider" "^0.2.2"
2632 + semver "^6.1.1"
2633 +
2634 +babel-plugin-polyfill-corejs3@^0.2.5:
2635 + version "0.2.5"
2636 + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.2.5.tgz"
2637 + integrity sha512-ninF5MQNwAX9Z7c9ED+H2pGt1mXdP4TqzlHKyPIYmJIYz0N+++uwdM7RnJukklhzJ54Q84vA4ZJkgs7lu5vqcw==
2638 + dependencies:
2639 + "@babel/helper-define-polyfill-provider" "^0.2.2"
2640 + core-js-compat "^3.16.2"
2641 +
2642 +babel-plugin-polyfill-regenerator@^0.2.2:
2643 + version "0.2.2"
2644 + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.2.2.tgz"
2645 + integrity sha512-Goy5ghsc21HgPDFtzRkSirpZVW35meGoTmTOb2bxqdl60ghub4xOidgNTHaZfQ2FaxQsKmwvXtOAkcIS4SMBWg==
2646 + dependencies:
2647 + "@babel/helper-define-polyfill-provider" "^0.2.2"
2648 +
2649 +babel-plugin-syntax-object-rest-spread@^6.8.0:
2650 + version "6.13.0"
2651 + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz"
2652 + integrity sha1-/WU28rzhODb/o6VFjEkDpZe7O/U=
2653 +
2654 +babel-plugin-transform-object-rest-spread@^6.26.0:
2655 + version "6.26.0"
2656 + resolved "https://registry.yarnpkg.com/babel-plugin-transform-object-rest-spread/-/babel-plugin-transform-object-rest-spread-6.26.0.tgz"
2657 + integrity sha1-DzZpLVD+9rfi1LOsFHgTepY7ewY=
2658 + dependencies:
2659 + babel-plugin-syntax-object-rest-spread "^6.8.0"
2660 + babel-runtime "^6.26.0"
2661 +
2662 +babel-plugin-transform-react-remove-prop-types@0.4.24:
2663 + version "0.4.24"
2664 + resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-remove-prop-types/-/babel-plugin-transform-react-remove-prop-types-0.4.24.tgz"
2665 + integrity sha512-eqj0hVcJUR57/Ug2zE1Yswsw4LhuqqHhD+8v120T1cl3kjg76QwtyBrdIk4WVwK+lAhBJVYCd/v+4nc4y+8JsA==
2666 +
2667 +babel-preset-current-node-syntax@^1.0.0:
2668 + version "1.0.1"
2669 + resolved "https://registry.yarnpkg.com/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz"
2670 + integrity sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==
2671 + dependencies:
2672 + "@babel/plugin-syntax-async-generators" "^7.8.4"
2673 + "@babel/plugin-syntax-bigint" "^7.8.3"
2674 + "@babel/plugin-syntax-class-properties" "^7.8.3"
2675 + "@babel/plugin-syntax-import-meta" "^7.8.3"
2676 + "@babel/plugin-syntax-json-strings" "^7.8.3"
2677 + "@babel/plugin-syntax-logical-assignment-operators" "^7.8.3"
2678 + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3"
2679 + "@babel/plugin-syntax-numeric-separator" "^7.8.3"
2680 + "@babel/plugin-syntax-object-rest-spread" "^7.8.3"
2681 + "@babel/plugin-syntax-optional-catch-binding" "^7.8.3"
2682 + "@babel/plugin-syntax-optional-chaining" "^7.8.3"
2683 + "@babel/plugin-syntax-top-level-await" "^7.8.3"
2684 +
2685 +babel-preset-jest@^26.6.2:
2686 + version "26.6.2"
2687 + resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-26.6.2.tgz"
2688 + integrity sha512-YvdtlVm9t3k777c5NPQIv6cxFFFapys25HiUmuSgHwIZhfifweR5c5Sf5nwE3MAbfu327CYSvps8Yx6ANLyleQ==
2689 + dependencies:
2690 + babel-plugin-jest-hoist "^26.6.2"
2691 + babel-preset-current-node-syntax "^1.0.0"
2692 +
2693 +babel-preset-react-app@^10.0.0:
2694 + version "10.0.0"
2695 + resolved "https://registry.yarnpkg.com/babel-preset-react-app/-/babel-preset-react-app-10.0.0.tgz"
2696 + integrity sha512-itL2z8v16khpuKutx5IH8UdCdSTuzrOhRFTEdIhveZ2i1iBKDrVE0ATa4sFVy+02GLucZNVBWtoarXBy0Msdpg==
2697 + dependencies:
2698 + "@babel/core" "7.12.3"
2699 + "@babel/plugin-proposal-class-properties" "7.12.1"
2700 + "@babel/plugin-proposal-decorators" "7.12.1"
2701 + "@babel/plugin-proposal-nullish-coalescing-operator" "7.12.1"
2702 + "@babel/plugin-proposal-numeric-separator" "7.12.1"
2703 + "@babel/plugin-proposal-optional-chaining" "7.12.1"
2704 + "@babel/plugin-transform-flow-strip-types" "7.12.1"
2705 + "@babel/plugin-transform-react-display-name" "7.12.1"
2706 + "@babel/plugin-transform-runtime" "7.12.1"
2707 + "@babel/preset-env" "7.12.1"
2708 + "@babel/preset-react" "7.12.1"
2709 + "@babel/preset-typescript" "7.12.1"
2710 + "@babel/runtime" "7.12.1"
2711 + babel-plugin-macros "2.8.0"
2712 + babel-plugin-transform-react-remove-prop-types "0.4.24"
2713 +
2714 +babel-runtime@^6.26.0:
2715 + version "6.26.0"
2716 + resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz"
2717 + integrity sha1-llxwWGaOgrVde/4E/yM3vItWR/4=
2718 + dependencies:
2719 + core-js "^2.4.0"
2720 + regenerator-runtime "^0.11.0"
2721 +
2722 +babylon@^6.18.0:
2723 + version "6.18.0"
2724 + resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.18.0.tgz"
2725 + integrity sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==
2726 +
2727 +balanced-match@^1.0.0:
2728 + version "1.0.2"
2729 + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz"
2730 + integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==
2731 +
2732 +base64-js@^1.0.2:
2733 + version "1.5.1"
2734 + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz"
2735 + integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==
2736 +
2737 +base@^0.11.1:
2738 + version "0.11.2"
2739 + resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz"
2740 + integrity sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==
2741 + dependencies:
2742 + cache-base "^1.0.1"
2743 + class-utils "^0.3.5"
2744 + component-emitter "^1.2.1"
2745 + define-property "^1.0.0"
2746 + isobject "^3.0.1"
2747 + mixin-deep "^1.2.0"
2748 + pascalcase "^0.1.1"
2749 +
2750 +batch@0.6.1:
2751 + version "0.6.1"
2752 + resolved "https://registry.yarnpkg.com/batch/-/batch-0.6.1.tgz"
2753 + integrity sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=
2754 +
2755 +bfj@^7.0.2:
2756 + version "7.0.2"
2757 + resolved "https://registry.yarnpkg.com/bfj/-/bfj-7.0.2.tgz"
2758 + integrity sha512-+e/UqUzwmzJamNF50tBV6tZPTORow7gQ96iFow+8b562OdMpEK0BcJEq2OSPEDmAbSMBQ7PKZ87ubFkgxpYWgw==
2759 + dependencies:
2760 + bluebird "^3.5.5"
2761 + check-types "^11.1.1"
2762 + hoopy "^0.1.4"
2763 + tryer "^1.0.1"
2764 +
2765 +big.js@^5.2.2:
2766 + version "5.2.2"
2767 + resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz"
2768 + integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==
2769 +
2770 +binary-extensions@^1.0.0:
2771 + version "1.13.1"
2772 + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.13.1.tgz"
2773 + integrity sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==
2774 +
2775 +binary-extensions@^2.0.0:
2776 + version "2.2.0"
2777 + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz"
2778 + integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==
2779 +
2780 +bindings@^1.5.0:
2781 + version "1.5.0"
2782 + resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.5.0.tgz"
2783 + integrity sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==
2784 + dependencies:
2785 + file-uri-to-path "1.0.0"
2786 +
2787 +bluebird@^3.5.5:
2788 + version "3.7.2"
2789 + resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz"
2790 + integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==
2791 +
2792 +bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.11.9:
2793 + version "4.12.0"
2794 + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.12.0.tgz"
2795 + integrity sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==
2796 +
2797 +bn.js@^5.0.0, bn.js@^5.1.1:
2798 + version "5.2.0"
2799 + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.0.tgz"
2800 + integrity sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw==
2801 +
2802 +body-parser@1.19.0:
2803 + version "1.19.0"
2804 + resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.19.0.tgz"
2805 + integrity sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==
2806 + dependencies:
2807 + bytes "3.1.0"
2808 + content-type "~1.0.4"
2809 + debug "2.6.9"
2810 + depd "~1.1.2"
2811 + http-errors "1.7.2"
2812 + iconv-lite "0.4.24"
2813 + on-finished "~2.3.0"
2814 + qs "6.7.0"
2815 + raw-body "2.4.0"
2816 + type-is "~1.6.17"
2817 +
2818 +bonjour@^3.5.0:
2819 + version "3.5.0"
2820 + resolved "https://registry.yarnpkg.com/bonjour/-/bonjour-3.5.0.tgz"
2821 + integrity sha1-jokKGD2O6aI5OzhExpGkK897yfU=
2822 + dependencies:
2823 + array-flatten "^2.1.0"
2824 + deep-equal "^1.0.1"
2825 + dns-equal "^1.0.0"
2826 + dns-txt "^2.0.2"
2827 + multicast-dns "^6.0.1"
2828 + multicast-dns-service-types "^1.1.0"
2829 +
2830 +boolbase@^1.0.0, boolbase@~1.0.0:
2831 + version "1.0.0"
2832 + resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz"
2833 + integrity sha1-aN/1++YMUes3cl6p4+0xDcwed24=
2834 +
2835 +brace-expansion@^1.1.7:
2836 + version "1.1.11"
2837 + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz"
2838 + integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==
2839 + dependencies:
2840 + balanced-match "^1.0.0"
2841 + concat-map "0.0.1"
2842 +
2843 +braces@^2.3.1, braces@^2.3.2:
2844 + version "2.3.2"
2845 + resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz"
2846 + integrity sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==
2847 + dependencies:
2848 + arr-flatten "^1.1.0"
2849 + array-unique "^0.3.2"
2850 + extend-shallow "^2.0.1"
2851 + fill-range "^4.0.0"
2852 + isobject "^3.0.1"
2853 + repeat-element "^1.1.2"
2854 + snapdragon "^0.8.1"
2855 + snapdragon-node "^2.0.1"
2856 + split-string "^3.0.2"
2857 + to-regex "^3.0.1"
2858 +
2859 +braces@^3.0.1, braces@~3.0.2:
2860 + version "3.0.2"
2861 + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz"
2862 + integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==
2863 + dependencies:
2864 + fill-range "^7.0.1"
2865 +
2866 +brorand@^1.0.1, brorand@^1.1.0:
2867 + version "1.1.0"
2868 + resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz"
2869 + integrity sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=
2870 +
2871 +browser-process-hrtime@^1.0.0:
2872 + version "1.0.0"
2873 + resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz"
2874 + integrity sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==
2875 +
2876 +browserify-aes@^1.0.0, browserify-aes@^1.0.4:
2877 + version "1.2.0"
2878 + resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.2.0.tgz"
2879 + integrity sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==
2880 + dependencies:
2881 + buffer-xor "^1.0.3"
2882 + cipher-base "^1.0.0"
2883 + create-hash "^1.1.0"
2884 + evp_bytestokey "^1.0.3"
2885 + inherits "^2.0.1"
2886 + safe-buffer "^5.0.1"
2887 +
2888 +browserify-cipher@^1.0.0:
2889 + version "1.0.1"
2890 + resolved "https://registry.yarnpkg.com/browserify-cipher/-/browserify-cipher-1.0.1.tgz"
2891 + integrity sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==
2892 + dependencies:
2893 + browserify-aes "^1.0.4"
2894 + browserify-des "^1.0.0"
2895 + evp_bytestokey "^1.0.0"
2896 +
2897 +browserify-des@^1.0.0:
2898 + version "1.0.2"
2899 + resolved "https://registry.yarnpkg.com/browserify-des/-/browserify-des-1.0.2.tgz"
2900 + integrity sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==
2901 + dependencies:
2902 + cipher-base "^1.0.1"
2903 + des.js "^1.0.0"
2904 + inherits "^2.0.1"
2905 + safe-buffer "^5.1.2"
2906 +
2907 +browserify-rsa@^4.0.0, browserify-rsa@^4.0.1:
2908 + version "4.1.0"
2909 + resolved "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.1.0.tgz"
2910 + integrity sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==
2911 + dependencies:
2912 + bn.js "^5.0.0"
2913 + randombytes "^2.0.1"
2914 +
2915 +browserify-sign@^4.0.0:
2916 + version "4.2.1"
2917 + resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.2.1.tgz"
2918 + integrity sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==
2919 + dependencies:
2920 + bn.js "^5.1.1"
2921 + browserify-rsa "^4.0.1"
2922 + create-hash "^1.2.0"
2923 + create-hmac "^1.1.7"
2924 + elliptic "^6.5.3"
2925 + inherits "^2.0.4"
2926 + parse-asn1 "^5.1.5"
2927 + readable-stream "^3.6.0"
2928 + safe-buffer "^5.2.0"
2929 +
2930 +browserify-zlib@^0.2.0:
2931 + version "0.2.0"
2932 + resolved "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.2.0.tgz"
2933 + integrity sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==
2934 + dependencies:
2935 + pako "~1.0.5"
2936 +
2937 +browserslist@4.14.2:
2938 + version "4.14.2"
2939 + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.14.2.tgz"
2940 + integrity sha512-HI4lPveGKUR0x2StIz+2FXfDk9SfVMrxn6PLh1JeGUwcuoDkdKZebWiyLRJ68iIPDpMI4JLVDf7S7XzslgWOhw==
2941 + dependencies:
2942 + caniuse-lite "^1.0.30001125"
2943 + electron-to-chromium "^1.3.564"
2944 + escalade "^3.0.2"
2945 + node-releases "^1.1.61"
2946 +
2947 +browserslist@^4.0.0, browserslist@^4.12.0, browserslist@^4.16.6, browserslist@^4.17.3, browserslist@^4.6.2, browserslist@^4.6.4:
2948 + version "4.17.5"
2949 + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.17.5.tgz"
2950 + integrity sha512-I3ekeB92mmpctWBoLXe0d5wPS2cBuRvvW0JyyJHMrk9/HmP2ZjrTboNAZ8iuGqaEIlKguljbQY32OkOJIRrgoA==
2951 + dependencies:
2952 + caniuse-lite "^1.0.30001271"
2953 + electron-to-chromium "^1.3.878"
2954 + escalade "^3.1.1"
2955 + node-releases "^2.0.1"
2956 + picocolors "^1.0.0"
2957 +
2958 +bser@2.1.1:
2959 + version "2.1.1"
2960 + resolved "https://registry.yarnpkg.com/bser/-/bser-2.1.1.tgz"
2961 + integrity sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==
2962 + dependencies:
2963 + node-int64 "^0.4.0"
2964 +
2965 +buffer-from@^1.0.0:
2966 + version "1.1.2"
2967 + resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz"
2968 + integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==
2969 +
2970 +buffer-indexof@^1.0.0:
2971 + version "1.1.1"
2972 + resolved "https://registry.yarnpkg.com/buffer-indexof/-/buffer-indexof-1.1.1.tgz"
2973 + integrity sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g==
2974 +
2975 +buffer-xor@^1.0.3:
2976 + version "1.0.3"
2977 + resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz"
2978 + integrity sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=
2979 +
2980 +buffer@^4.3.0:
2981 + version "4.9.2"
2982 + resolved "https://registry.yarnpkg.com/buffer/-/buffer-4.9.2.tgz"
2983 + integrity sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==
2984 + dependencies:
2985 + base64-js "^1.0.2"
2986 + ieee754 "^1.1.4"
2987 + isarray "^1.0.0"
2988 +
2989 +builtin-modules@^3.1.0:
2990 + version "3.2.0"
2991 + resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-3.2.0.tgz"
2992 + integrity sha512-lGzLKcioL90C7wMczpkY0n/oART3MbBa8R9OFGE1rJxoVI86u4WAGfEk8Wjv10eKSyTHVGkSo3bvBylCEtk7LA==
2993 +
2994 +builtin-status-codes@^3.0.0:
2995 + version "3.0.0"
2996 + resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz"
2997 + integrity sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=
2998 +
2999 +bytes@3.0.0:
3000 + version "3.0.0"
3001 + resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz"
3002 + integrity sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=
3003 +
3004 +bytes@3.1.0:
3005 + version "3.1.0"
3006 + resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.0.tgz"
3007 + integrity sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==
3008 +
3009 +cacache@^12.0.2:
3010 + version "12.0.4"
3011 + resolved "https://registry.yarnpkg.com/cacache/-/cacache-12.0.4.tgz"
3012 + integrity sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ==
3013 + dependencies:
3014 + bluebird "^3.5.5"
3015 + chownr "^1.1.1"
3016 + figgy-pudding "^3.5.1"
3017 + glob "^7.1.4"
3018 + graceful-fs "^4.1.15"
3019 + infer-owner "^1.0.3"
3020 + lru-cache "^5.1.1"
3021 + mississippi "^3.0.0"
3022 + mkdirp "^0.5.1"
3023 + move-concurrently "^1.0.1"
3024 + promise-inflight "^1.0.1"
3025 + rimraf "^2.6.3"
3026 + ssri "^6.0.1"
3027 + unique-filename "^1.1.1"
3028 + y18n "^4.0.0"
3029 +
3030 +cacache@^15.0.5:
3031 + version "15.3.0"
3032 + resolved "https://registry.yarnpkg.com/cacache/-/cacache-15.3.0.tgz"
3033 + integrity sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==
3034 + dependencies:
3035 + "@npmcli/fs" "^1.0.0"
3036 + "@npmcli/move-file" "^1.0.1"
3037 + chownr "^2.0.0"
3038 + fs-minipass "^2.0.0"
3039 + glob "^7.1.4"
3040 + infer-owner "^1.0.4"
3041 + lru-cache "^6.0.0"
3042 + minipass "^3.1.1"
3043 + minipass-collect "^1.0.2"
3044 + minipass-flush "^1.0.5"
3045 + minipass-pipeline "^1.2.2"
3046 + mkdirp "^1.0.3"
3047 + p-map "^4.0.0"
3048 + promise-inflight "^1.0.1"
3049 + rimraf "^3.0.2"
3050 + ssri "^8.0.1"
3051 + tar "^6.0.2"
3052 + unique-filename "^1.1.1"
3053 +
3054 +cache-base@^1.0.1:
3055 + version "1.0.1"
3056 + resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz"
3057 + integrity sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==
3058 + dependencies:
3059 + collection-visit "^1.0.0"
3060 + component-emitter "^1.2.1"
3061 + get-value "^2.0.6"
3062 + has-value "^1.0.0"
3063 + isobject "^3.0.1"
3064 + set-value "^2.0.0"
3065 + to-object-path "^0.3.0"
3066 + union-value "^1.0.0"
3067 + unset-value "^1.0.0"
3068 +
3069 +call-bind@^1.0.0, call-bind@^1.0.2:
3070 + version "1.0.2"
3071 + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz"
3072 + integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==
3073 + dependencies:
3074 + function-bind "^1.1.1"
3075 + get-intrinsic "^1.0.2"
3076 +
3077 +caller-callsite@^2.0.0:
3078 + version "2.0.0"
3079 + resolved "https://registry.yarnpkg.com/caller-callsite/-/caller-callsite-2.0.0.tgz"
3080 + integrity sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ=
3081 + dependencies:
3082 + callsites "^2.0.0"
3083 +
3084 +caller-path@^2.0.0:
3085 + version "2.0.0"
3086 + resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-2.0.0.tgz"
3087 + integrity sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ=
3088 + dependencies:
3089 + caller-callsite "^2.0.0"
3090 +
3091 +callsites@^2.0.0:
3092 + version "2.0.0"
3093 + resolved "https://registry.yarnpkg.com/callsites/-/callsites-2.0.0.tgz"
3094 + integrity sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=
3095 +
3096 +callsites@^3.0.0:
3097 + version "3.1.0"
3098 + resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz"
3099 + integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==
3100 +
3101 +camel-case@^4.1.1:
3102 + version "4.1.2"
3103 + resolved "https://registry.yarnpkg.com/camel-case/-/camel-case-4.1.2.tgz"
3104 + integrity sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==
3105 + dependencies:
3106 + pascal-case "^3.1.2"
3107 + tslib "^2.0.3"
3108 +
3109 +camelcase@5.3.1, camelcase@^5.0.0, camelcase@^5.3.1:
3110 + version "5.3.1"
3111 + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz"
3112 + integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==
3113 +
3114 +camelcase@^6.0.0, camelcase@^6.1.0, camelcase@^6.2.0:
3115 + version "6.2.0"
3116 + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.2.0.tgz"
3117 + integrity sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==
3118 +
3119 +caniuse-api@^3.0.0:
3120 + version "3.0.0"
3121 + resolved "https://registry.yarnpkg.com/caniuse-api/-/caniuse-api-3.0.0.tgz"
3122 + integrity sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==
3123 + dependencies:
3124 + browserslist "^4.0.0"
3125 + caniuse-lite "^1.0.0"
3126 + lodash.memoize "^4.1.2"
3127 + lodash.uniq "^4.5.0"
3128 +
3129 +caniuse-lite@^1.0.0, caniuse-lite@^1.0.30000981, caniuse-lite@^1.0.30001109, caniuse-lite@^1.0.30001125, caniuse-lite@^1.0.30001271:
3130 + version "1.0.30001271"
3131 + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001271.tgz"
3132 + integrity sha512-BBruZFWmt3HFdVPS8kceTBIguKxu4f99n5JNp06OlPD/luoAMIaIK5ieV5YjnBLH3Nysai9sxj9rpJj4ZisXOA==
3133 +
3134 +capture-exit@^2.0.0:
3135 + version "2.0.0"
3136 + resolved "https://registry.yarnpkg.com/capture-exit/-/capture-exit-2.0.0.tgz"
3137 + integrity sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g==
3138 + dependencies:
3139 + rsvp "^4.8.4"
3140 +
3141 +case-sensitive-paths-webpack-plugin@2.3.0:
3142 + version "2.3.0"
3143 + resolved "https://registry.yarnpkg.com/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.3.0.tgz"
3144 + integrity sha512-/4YgnZS8y1UXXmC02xD5rRrBEu6T5ub+mQHLNRj0fzTRbgdBYhsNo2V5EqwgqrExjxsjtF/OpAKAMkKsxbD5XQ==
3145 +
3146 +chalk@2.4.2, chalk@^2.0.0, chalk@^2.4.1, chalk@^2.4.2:
3147 + version "2.4.2"
3148 + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz"
3149 + integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==
3150 + dependencies:
3151 + ansi-styles "^3.2.1"
3152 + escape-string-regexp "^1.0.5"
3153 + supports-color "^5.3.0"
3154 +
3155 +chalk@^4.0.0:
3156 + version "4.1.2"
3157 + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz"
3158 + integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==
3159 + dependencies:
3160 + ansi-styles "^4.1.0"
3161 + supports-color "^7.1.0"
3162 +
3163 +char-regex@^1.0.2:
3164 + version "1.0.2"
3165 + resolved "https://registry.yarnpkg.com/char-regex/-/char-regex-1.0.2.tgz"
3166 + integrity sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==
3167 +
3168 +check-types@^11.1.1:
3169 + version "11.1.2"
3170 + resolved "https://registry.yarnpkg.com/check-types/-/check-types-11.1.2.tgz"
3171 + integrity sha512-tzWzvgePgLORb9/3a0YenggReLKAIb2owL03H2Xdoe5pKcUyWRSEQ8xfCar8t2SIAuEDwtmx2da1YB52YuHQMQ==
3172 +
3173 +chokidar@^2.1.8:
3174 + version "2.1.8"
3175 + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.1.8.tgz"
3176 + integrity sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==
3177 + dependencies:
3178 + anymatch "^2.0.0"
3179 + async-each "^1.0.1"
3180 + braces "^2.3.2"
3181 + glob-parent "^3.1.0"
3182 + inherits "^2.0.3"
3183 + is-binary-path "^1.0.0"
3184 + is-glob "^4.0.0"
3185 + normalize-path "^3.0.0"
3186 + path-is-absolute "^1.0.0"
3187 + readdirp "^2.2.1"
3188 + upath "^1.1.1"
3189 + optionalDependencies:
3190 + fsevents "^1.2.7"
3191 +
3192 +chokidar@^3.4.0, chokidar@^3.4.1:
3193 + version "3.5.2"
3194 + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.2.tgz"
3195 + integrity sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==
3196 + dependencies:
3197 + anymatch "~3.1.2"
3198 + braces "~3.0.2"
3199 + glob-parent "~5.1.2"
3200 + is-binary-path "~2.1.0"
3201 + is-glob "~4.0.1"
3202 + normalize-path "~3.0.0"
3203 + readdirp "~3.6.0"
3204 + optionalDependencies:
3205 + fsevents "~2.3.2"
3206 +
3207 +chownr@^1.1.1:
3208 + version "1.1.4"
3209 + resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz"
3210 + integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==
3211 +
3212 +chownr@^2.0.0:
3213 + version "2.0.0"
3214 + resolved "https://registry.yarnpkg.com/chownr/-/chownr-2.0.0.tgz"
3215 + integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==
3216 +
3217 +chrome-trace-event@^1.0.2:
3218 + version "1.0.3"
3219 + resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz"
3220 + integrity sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==
3221 +
3222 +ci-info@^2.0.0:
3223 + version "2.0.0"
3224 + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz"
3225 + integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==
3226 +
3227 +cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3:
3228 + version "1.0.4"
3229 + resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz"
3230 + integrity sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==
3231 + dependencies:
3232 + inherits "^2.0.1"
3233 + safe-buffer "^5.0.1"
3234 +
3235 +cjs-module-lexer@^0.6.0:
3236 + version "0.6.0"
3237 + resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-0.6.0.tgz"
3238 + integrity sha512-uc2Vix1frTfnuzxxu1Hp4ktSvM3QaI4oXl4ZUqL1wjTu/BGki9TrCWoqLTg/drR1KwAEarXuRFCG2Svr1GxPFw==
3239 +
3240 +class-utils@^0.3.5:
3241 + version "0.3.6"
3242 + resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz"
3243 + integrity sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==
3244 + dependencies:
3245 + arr-union "^3.1.0"
3246 + define-property "^0.2.5"
3247 + isobject "^3.0.0"
3248 + static-extend "^0.1.1"
3249 +
3250 +clean-css@^4.2.3:
3251 + version "4.2.4"
3252 + resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-4.2.4.tgz"
3253 + integrity sha512-EJUDT7nDVFDvaQgAo2G/PJvxmp1o/c6iXLbswsBbUFXi1Nr+AjA2cKmfbKDMjMvzEe75g3P6JkaDDAKk96A85A==
3254 + dependencies:
3255 + source-map "~0.6.0"
3256 +
3257 +clean-stack@^2.0.0:
3258 + version "2.2.0"
3259 + resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz"
3260 + integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==
3261 +
3262 +cliui@^5.0.0:
3263 + version "5.0.0"
3264 + resolved "https://registry.yarnpkg.com/cliui/-/cliui-5.0.0.tgz"
3265 + integrity sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==
3266 + dependencies:
3267 + string-width "^3.1.0"
3268 + strip-ansi "^5.2.0"
3269 + wrap-ansi "^5.1.0"
3270 +
3271 +cliui@^6.0.0:
3272 + version "6.0.0"
3273 + resolved "https://registry.yarnpkg.com/cliui/-/cliui-6.0.0.tgz"
3274 + integrity sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==
3275 + dependencies:
3276 + string-width "^4.2.0"
3277 + strip-ansi "^6.0.0"
3278 + wrap-ansi "^6.2.0"
3279 +
3280 +co@^4.6.0:
3281 + version "4.6.0"
3282 + resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz"
3283 + integrity sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=
3284 +
3285 +coa@^2.0.2:
3286 + version "2.0.2"
3287 + resolved "https://registry.yarnpkg.com/coa/-/coa-2.0.2.tgz"
3288 + integrity sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA==
3289 + dependencies:
3290 + "@types/q" "^1.5.1"
3291 + chalk "^2.4.1"
3292 + q "^1.1.2"
3293 +
3294 +collect-v8-coverage@^1.0.0:
3295 + version "1.0.1"
3296 + resolved "https://registry.yarnpkg.com/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz"
3297 + integrity sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==
3298 +
3299 +collection-visit@^1.0.0:
3300 + version "1.0.0"
3301 + resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz"
3302 + integrity sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=
3303 + dependencies:
3304 + map-visit "^1.0.0"
3305 + object-visit "^1.0.0"
3306 +
3307 +color-convert@^1.9.0, color-convert@^1.9.3:
3308 + version "1.9.3"
3309 + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz"
3310 + integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==
3311 + dependencies:
3312 + color-name "1.1.3"
3313 +
3314 +color-convert@^2.0.1:
3315 + version "2.0.1"
3316 + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz"
3317 + integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==
3318 + dependencies:
3319 + color-name "~1.1.4"
3320 +
3321 +color-name@1.1.3:
3322 + version "1.1.3"
3323 + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz"
3324 + integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=
3325 +
3326 +color-name@^1.0.0, color-name@~1.1.4:
3327 + version "1.1.4"
3328 + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz"
3329 + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==
3330 +
3331 +color-string@^1.6.0:
3332 + version "1.6.0"
3333 + resolved "https://registry.yarnpkg.com/color-string/-/color-string-1.6.0.tgz"
3334 + integrity sha512-c/hGS+kRWJutUBEngKKmk4iH3sD59MBkoxVapS/0wgpCz2u7XsNloxknyvBhzwEs1IbV36D9PwqLPJ2DTu3vMA==
3335 + dependencies:
3336 + color-name "^1.0.0"
3337 + simple-swizzle "^0.2.2"
3338 +
3339 +color@^3.0.0:
3340 + version "3.2.1"
3341 + resolved "https://registry.yarnpkg.com/color/-/color-3.2.1.tgz"
3342 + integrity sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==
3343 + dependencies:
3344 + color-convert "^1.9.3"
3345 + color-string "^1.6.0"
3346 +
3347 +combined-stream@^1.0.8:
3348 + version "1.0.8"
3349 + resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz"
3350 + integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==
3351 + dependencies:
3352 + delayed-stream "~1.0.0"
3353 +
3354 +commander@^2.20.0:
3355 + version "2.20.3"
3356 + resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz"
3357 + integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==
3358 +
3359 +commander@^4.0.1, commander@^4.1.1:
3360 + version "4.1.1"
3361 + resolved "https://registry.yarnpkg.com/commander/-/commander-4.1.1.tgz"
3362 + integrity sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==
3363 +
3364 +common-tags@^1.8.0:
3365 + version "1.8.0"
3366 + resolved "https://registry.yarnpkg.com/common-tags/-/common-tags-1.8.0.tgz"
3367 + integrity sha512-6P6g0uetGpW/sdyUy/iQQCbFF0kWVMSIVSyYz7Zgjcgh8mgw8PQzDNZeyZ5DQ2gM7LBoZPHmnjz8rUthkBG5tw==
3368 +
3369 +commondir@^1.0.1:
3370 + version "1.0.1"
3371 + resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz"
3372 + integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=
3373 +
3374 +component-emitter@^1.2.1:
3375 + version "1.3.0"
3376 + resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz"
3377 + integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==
3378 +
3379 +compose-function@3.0.3:
3380 + version "3.0.3"
3381 + resolved "https://registry.yarnpkg.com/compose-function/-/compose-function-3.0.3.tgz"
3382 + integrity sha1-ntZ18TzFRQHTCVCkhv9qe6OrGF8=
3383 + dependencies:
3384 + arity-n "^1.0.4"
3385 +
3386 +compressible@~2.0.16:
3387 + version "2.0.18"
3388 + resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.18.tgz"
3389 + integrity sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==
3390 + dependencies:
3391 + mime-db ">= 1.43.0 < 2"
3392 +
3393 +compression@^1.7.4:
3394 + version "1.7.4"
3395 + resolved "https://registry.yarnpkg.com/compression/-/compression-1.7.4.tgz"
3396 + integrity sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==
3397 + dependencies:
3398 + accepts "~1.3.5"
3399 + bytes "3.0.0"
3400 + compressible "~2.0.16"
3401 + debug "2.6.9"
3402 + on-headers "~1.0.2"
3403 + safe-buffer "5.1.2"
3404 + vary "~1.1.2"
3405 +
3406 +concat-map@0.0.1:
3407 + version "0.0.1"
3408 + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz"
3409 + integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=
3410 +
3411 +concat-stream@^1.5.0:
3412 + version "1.6.2"
3413 + resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz"
3414 + integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==
3415 + dependencies:
3416 + buffer-from "^1.0.0"
3417 + inherits "^2.0.3"
3418 + readable-stream "^2.2.2"
3419 + typedarray "^0.0.6"
3420 +
3421 +confusing-browser-globals@^1.0.10:
3422 + version "1.0.10"
3423 + resolved "https://registry.yarnpkg.com/confusing-browser-globals/-/confusing-browser-globals-1.0.10.tgz"
3424 + integrity sha512-gNld/3lySHwuhaVluJUKLePYirM3QNCKzVxqAdhJII9/WXKVX5PURzMVJspS1jTslSqjeuG4KMVTSouit5YPHA==
3425 +
3426 +connect-history-api-fallback@^1.6.0:
3427 + version "1.6.0"
3428 + resolved "https://registry.yarnpkg.com/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz"
3429 + integrity sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==
3430 +
3431 +console-browserify@^1.1.0:
3432 + version "1.2.0"
3433 + resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.2.0.tgz"
3434 + integrity sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==
3435 +
3436 +constants-browserify@^1.0.0:
3437 + version "1.0.0"
3438 + resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz"
3439 + integrity sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=
3440 +
3441 +content-disposition@0.5.3:
3442 + version "0.5.3"
3443 + resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.3.tgz"
3444 + integrity sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==
3445 + dependencies:
3446 + safe-buffer "5.1.2"
3447 +
3448 +content-type@~1.0.4:
3449 + version "1.0.4"
3450 + resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz"
3451 + integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==
3452 +
3453 +convert-source-map@1.7.0:
3454 + version "1.7.0"
3455 + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.7.0.tgz"
3456 + integrity sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==
3457 + dependencies:
3458 + safe-buffer "~5.1.1"
3459 +
3460 +convert-source-map@^0.3.3:
3461 + version "0.3.5"
3462 + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-0.3.5.tgz"
3463 + integrity sha1-8dgClQr33SYxof6+BZZVDIarMZA=
3464 +
3465 +convert-source-map@^1.1.0, convert-source-map@^1.4.0, convert-source-map@^1.6.0, convert-source-map@^1.7.0:
3466 + version "1.8.0"
3467 + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.8.0.tgz"
3468 + integrity sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==
3469 + dependencies:
3470 + safe-buffer "~5.1.1"
3471 +
3472 +cookie-signature@1.0.6:
3473 + version "1.0.6"
3474 + resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz"
3475 + integrity sha1-4wOogrNCzD7oylE6eZmXNNqzriw=
3476 +
3477 +cookie@0.4.0:
3478 + version "0.4.0"
3479 + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.0.tgz"
3480 + integrity sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==
3481 +
3482 +copy-concurrently@^1.0.0:
3483 + version "1.0.5"
3484 + resolved "https://registry.yarnpkg.com/copy-concurrently/-/copy-concurrently-1.0.5.tgz"
3485 + integrity sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==
3486 + dependencies:
3487 + aproba "^1.1.1"
3488 + fs-write-stream-atomic "^1.0.8"
3489 + iferr "^0.1.5"
3490 + mkdirp "^0.5.1"
3491 + rimraf "^2.5.4"
3492 + run-queue "^1.0.0"
3493 +
3494 +copy-descriptor@^0.1.0:
3495 + version "0.1.1"
3496 + resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz"
3497 + integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=
3498 +
3499 +core-js-compat@^3.16.0, core-js-compat@^3.16.2, core-js-compat@^3.6.2:
3500 + version "3.18.3"
3501 + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.18.3.tgz"
3502 + integrity sha512-4zP6/y0a2RTHN5bRGT7PTq9lVt3WzvffTNjqnTKsXhkAYNDTkdCLOIfAdOLcQ/7TDdyRj3c+NeHe1NmF1eDScw==
3503 + dependencies:
3504 + browserslist "^4.17.3"
3505 + semver "7.0.0"
3506 +
3507 +core-js-pure@^3.16.0:
3508 + version "3.18.3"
3509 + resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.18.3.tgz"
3510 + integrity sha512-qfskyO/KjtbYn09bn1IPkuhHl5PlJ6IzJ9s9sraJ1EqcuGyLGKzhSM1cY0zgyL9hx42eulQLZ6WaeK5ycJCkqw==
3511 +
3512 +core-js@^2.4.0:
3513 + version "2.6.12"
3514 + resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.12.tgz"
3515 + integrity sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==
3516 +
3517 +core-js@^3.6.5:
3518 + version "3.18.3"
3519 + resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.18.3.tgz"
3520 + integrity sha512-tReEhtMReZaPFVw7dajMx0vlsz3oOb8ajgPoHVYGxr8ErnZ6PcYEvvmjGmXlfpnxpkYSdOQttjB+MvVbCGfvLw==
3521 +
3522 +core-util-is@~1.0.0:
3523 + version "1.0.3"
3524 + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz"
3525 + integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==
3526 +
3527 +cosmiconfig@^5.0.0:
3528 + version "5.2.1"
3529 + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-5.2.1.tgz"
3530 + integrity sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==
3531 + dependencies:
3532 + import-fresh "^2.0.0"
3533 + is-directory "^0.3.1"
3534 + js-yaml "^3.13.1"
3535 + parse-json "^4.0.0"
3536 +
3537 +cosmiconfig@^6.0.0:
3538 + version "6.0.0"
3539 + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-6.0.0.tgz"
3540 + integrity sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==
3541 + dependencies:
3542 + "@types/parse-json" "^4.0.0"
3543 + import-fresh "^3.1.0"
3544 + parse-json "^5.0.0"
3545 + path-type "^4.0.0"
3546 + yaml "^1.7.2"
3547 +
3548 +cosmiconfig@^7.0.0:
3549 + version "7.0.1"
3550 + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-7.0.1.tgz"
3551 + integrity sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==
3552 + dependencies:
3553 + "@types/parse-json" "^4.0.0"
3554 + import-fresh "^3.2.1"
3555 + parse-json "^5.0.0"
3556 + path-type "^4.0.0"
3557 + yaml "^1.10.0"
3558 +
3559 +create-ecdh@^4.0.0:
3560 + version "4.0.4"
3561 + resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.4.tgz"
3562 + integrity sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==
3563 + dependencies:
3564 + bn.js "^4.1.0"
3565 + elliptic "^6.5.3"
3566 +
3567 +create-hash@^1.1.0, create-hash@^1.1.2, create-hash@^1.2.0:
3568 + version "1.2.0"
3569 + resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz"
3570 + integrity sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==
3571 + dependencies:
3572 + cipher-base "^1.0.1"
3573 + inherits "^2.0.1"
3574 + md5.js "^1.3.4"
3575 + ripemd160 "^2.0.1"
3576 + sha.js "^2.4.0"
3577 +
3578 +create-hmac@^1.1.0, create-hmac@^1.1.4, create-hmac@^1.1.7:
3579 + version "1.1.7"
3580 + resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.7.tgz"
3581 + integrity sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==
3582 + dependencies:
3583 + cipher-base "^1.0.3"
3584 + create-hash "^1.1.0"
3585 + inherits "^2.0.1"
3586 + ripemd160 "^2.0.0"
3587 + safe-buffer "^5.0.1"
3588 + sha.js "^2.4.8"
3589 +
3590 +cross-spawn@7.0.3, cross-spawn@^7.0.0, cross-spawn@^7.0.2:
3591 + version "7.0.3"
3592 + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz"
3593 + integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==
3594 + dependencies:
3595 + path-key "^3.1.0"
3596 + shebang-command "^2.0.0"
3597 + which "^2.0.1"
3598 +
3599 +cross-spawn@^6.0.0:
3600 + version "6.0.5"
3601 + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz"
3602 + integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==
3603 + dependencies:
3604 + nice-try "^1.0.4"
3605 + path-key "^2.0.1"
3606 + semver "^5.5.0"
3607 + shebang-command "^1.2.0"
3608 + which "^1.2.9"
3609 +
3610 +crypto-browserify@^3.11.0:
3611 + version "3.12.0"
3612 + resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz"
3613 + integrity sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==
3614 + dependencies:
3615 + browserify-cipher "^1.0.0"
3616 + browserify-sign "^4.0.0"
3617 + create-ecdh "^4.0.0"
3618 + create-hash "^1.1.0"
3619 + create-hmac "^1.1.0"
3620 + diffie-hellman "^5.0.0"
3621 + inherits "^2.0.1"
3622 + pbkdf2 "^3.0.3"
3623 + public-encrypt "^4.0.0"
3624 + randombytes "^2.0.0"
3625 + randomfill "^1.0.3"
3626 +
3627 +crypto-random-string@^1.0.0:
3628 + version "1.0.0"
3629 + resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-1.0.0.tgz"
3630 + integrity sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4=
3631 +
3632 +css-blank-pseudo@^0.1.4:
3633 + version "0.1.4"
3634 + resolved "https://registry.yarnpkg.com/css-blank-pseudo/-/css-blank-pseudo-0.1.4.tgz"
3635 + integrity sha512-LHz35Hr83dnFeipc7oqFDmsjHdljj3TQtxGGiNWSOsTLIAubSm4TEz8qCaKFpk7idaQ1GfWscF4E6mgpBysA1w==
3636 + dependencies:
3637 + postcss "^7.0.5"
3638 +
3639 +css-color-names@0.0.4, css-color-names@^0.0.4:
3640 + version "0.0.4"
3641 + resolved "https://registry.yarnpkg.com/css-color-names/-/css-color-names-0.0.4.tgz"
3642 + integrity sha1-gIrcLnnPhHOAabZGyyDsJ762KeA=
3643 +
3644 +css-declaration-sorter@^4.0.1:
3645 + version "4.0.1"
3646 + resolved "https://registry.yarnpkg.com/css-declaration-sorter/-/css-declaration-sorter-4.0.1.tgz"
3647 + integrity sha512-BcxQSKTSEEQUftYpBVnsH4SF05NTuBokb19/sBt6asXGKZ/6VP7PLG1CBCkFDYOnhXhPh0jMhO6xZ71oYHXHBA==
3648 + dependencies:
3649 + postcss "^7.0.1"
3650 + timsort "^0.3.0"
3651 +
3652 +css-has-pseudo@^0.10.0:
3653 + version "0.10.0"
3654 + resolved "https://registry.yarnpkg.com/css-has-pseudo/-/css-has-pseudo-0.10.0.tgz"
3655 + integrity sha512-Z8hnfsZu4o/kt+AuFzeGpLVhFOGO9mluyHBaA2bA8aCGTwah5sT3WV/fTHH8UNZUytOIImuGPrl/prlb4oX4qQ==
3656 + dependencies:
3657 + postcss "^7.0.6"
3658 + postcss-selector-parser "^5.0.0-rc.4"
3659 +
3660 +css-loader@4.3.0:
3661 + version "4.3.0"
3662 + resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-4.3.0.tgz"
3663 + integrity sha512-rdezjCjScIrsL8BSYszgT4s476IcNKt6yX69t0pHjJVnPUTDpn4WfIpDQTN3wCJvUvfsz/mFjuGOekf3PY3NUg==
3664 + dependencies:
3665 + camelcase "^6.0.0"
3666 + cssesc "^3.0.0"
3667 + icss-utils "^4.1.1"
3668 + loader-utils "^2.0.0"
3669 + postcss "^7.0.32"
3670 + postcss-modules-extract-imports "^2.0.0"
3671 + postcss-modules-local-by-default "^3.0.3"
3672 + postcss-modules-scope "^2.2.0"
3673 + postcss-modules-values "^3.0.0"
3674 + postcss-value-parser "^4.1.0"
3675 + schema-utils "^2.7.1"
3676 + semver "^7.3.2"
3677 +
3678 +css-prefers-color-scheme@^3.1.1:
3679 + version "3.1.1"
3680 + resolved "https://registry.yarnpkg.com/css-prefers-color-scheme/-/css-prefers-color-scheme-3.1.1.tgz"
3681 + integrity sha512-MTu6+tMs9S3EUqzmqLXEcgNRbNkkD/TGFvowpeoWJn5Vfq7FMgsmRQs9X5NXAURiOBmOxm/lLjsDNXDE6k9bhg==
3682 + dependencies:
3683 + postcss "^7.0.5"
3684 +
3685 +css-select-base-adapter@^0.1.1:
3686 + version "0.1.1"
3687 + resolved "https://registry.yarnpkg.com/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz"
3688 + integrity sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w==
3689 +
3690 +css-select@^2.0.0:
3691 + version "2.1.0"
3692 + resolved "https://registry.yarnpkg.com/css-select/-/css-select-2.1.0.tgz"
3693 + integrity sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ==
3694 + dependencies:
3695 + boolbase "^1.0.0"
3696 + css-what "^3.2.1"
3697 + domutils "^1.7.0"
3698 + nth-check "^1.0.2"
3699 +
3700 +css-select@^4.1.3:
3701 + version "4.1.3"
3702 + resolved "https://registry.yarnpkg.com/css-select/-/css-select-4.1.3.tgz"
3703 + integrity sha512-gT3wBNd9Nj49rAbmtFHj1cljIAOLYSX1nZ8CB7TBO3INYckygm5B7LISU/szY//YmdiSLbJvDLOx9VnMVpMBxA==
3704 + dependencies:
3705 + boolbase "^1.0.0"
3706 + css-what "^5.0.0"
3707 + domhandler "^4.2.0"
3708 + domutils "^2.6.0"
3709 + nth-check "^2.0.0"
3710 +
3711 +css-tree@1.0.0-alpha.37:
3712 + version "1.0.0-alpha.37"
3713 + resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.0.0-alpha.37.tgz"
3714 + integrity sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg==
3715 + dependencies:
3716 + mdn-data "2.0.4"
3717 + source-map "^0.6.1"
3718 +
3719 +css-tree@^1.1.2:
3720 + version "1.1.3"
3721 + resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.1.3.tgz"
3722 + integrity sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==
3723 + dependencies:
3724 + mdn-data "2.0.14"
3725 + source-map "^0.6.1"
3726 +
3727 +css-what@^3.2.1:
3728 + version "3.4.2"
3729 + resolved "https://registry.yarnpkg.com/css-what/-/css-what-3.4.2.tgz"
3730 + integrity sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ==
3731 +
3732 +css-what@^5.0.0:
3733 + version "5.1.0"
3734 + resolved "https://registry.yarnpkg.com/css-what/-/css-what-5.1.0.tgz"
3735 + integrity sha512-arSMRWIIFY0hV8pIxZMEfmMI47Wj3R/aWpZDDxWYCPEiOMv6tfOrnpDtgxBYPEQD4V0Y/958+1TdC3iWTFcUPw==
3736 +
3737 +css@^2.0.0:
3738 + version "2.2.4"
3739 + resolved "https://registry.yarnpkg.com/css/-/css-2.2.4.tgz"
3740 + integrity sha512-oUnjmWpy0niI3x/mPL8dVEI1l7MnG3+HHyRPHf+YFSbK+svOhXpmSOcDURUh2aOCgl2grzrOPt1nHLuCVFULLw==
3741 + dependencies:
3742 + inherits "^2.0.3"
3743 + source-map "^0.6.1"
3744 + source-map-resolve "^0.5.2"
3745 + urix "^0.1.0"
3746 +
3747 +cssdb@^4.4.0:
3748 + version "4.4.0"
3749 + resolved "https://registry.yarnpkg.com/cssdb/-/cssdb-4.4.0.tgz"
3750 + integrity sha512-LsTAR1JPEM9TpGhl/0p3nQecC2LJ0kD8X5YARu1hk/9I1gril5vDtMZyNxcEpxxDj34YNck/ucjuoUd66K03oQ==
3751 +
3752 +cssesc@^2.0.0:
3753 + version "2.0.0"
3754 + resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-2.0.0.tgz"
3755 + integrity sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg==
3756 +
3757 +cssesc@^3.0.0:
3758 + version "3.0.0"
3759 + resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz"
3760 + integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==
3761 +
3762 +cssnano-preset-default@^4.0.8:
3763 + version "4.0.8"
3764 + resolved "https://registry.yarnpkg.com/cssnano-preset-default/-/cssnano-preset-default-4.0.8.tgz"
3765 + integrity sha512-LdAyHuq+VRyeVREFmuxUZR1TXjQm8QQU/ktoo/x7bz+SdOge1YKc5eMN6pRW7YWBmyq59CqYba1dJ5cUukEjLQ==
3766 + dependencies:
3767 + css-declaration-sorter "^4.0.1"
3768 + cssnano-util-raw-cache "^4.0.1"
3769 + postcss "^7.0.0"
3770 + postcss-calc "^7.0.1"
3771 + postcss-colormin "^4.0.3"
3772 + postcss-convert-values "^4.0.1"
3773 + postcss-discard-comments "^4.0.2"
3774 + postcss-discard-duplicates "^4.0.2"
3775 + postcss-discard-empty "^4.0.1"
3776 + postcss-discard-overridden "^4.0.1"
3777 + postcss-merge-longhand "^4.0.11"
3778 + postcss-merge-rules "^4.0.3"
3779 + postcss-minify-font-values "^4.0.2"
3780 + postcss-minify-gradients "^4.0.2"
3781 + postcss-minify-params "^4.0.2"
3782 + postcss-minify-selectors "^4.0.2"
3783 + postcss-normalize-charset "^4.0.1"
3784 + postcss-normalize-display-values "^4.0.2"
3785 + postcss-normalize-positions "^4.0.2"
3786 + postcss-normalize-repeat-style "^4.0.2"
3787 + postcss-normalize-string "^4.0.2"
3788 + postcss-normalize-timing-functions "^4.0.2"
3789 + postcss-normalize-unicode "^4.0.1"
3790 + postcss-normalize-url "^4.0.1"
3791 + postcss-normalize-whitespace "^4.0.2"
3792 + postcss-ordered-values "^4.1.2"
3793 + postcss-reduce-initial "^4.0.3"
3794 + postcss-reduce-transforms "^4.0.2"
3795 + postcss-svgo "^4.0.3"
3796 + postcss-unique-selectors "^4.0.1"
3797 +
3798 +cssnano-util-get-arguments@^4.0.0:
3799 + version "4.0.0"
3800 + resolved "https://registry.yarnpkg.com/cssnano-util-get-arguments/-/cssnano-util-get-arguments-4.0.0.tgz"
3801 + integrity sha1-7ToIKZ8h11dBsg87gfGU7UnMFQ8=
3802 +
3803 +cssnano-util-get-match@^4.0.0:
3804 + version "4.0.0"
3805 + resolved "https://registry.yarnpkg.com/cssnano-util-get-match/-/cssnano-util-get-match-4.0.0.tgz"
3806 + integrity sha1-wOTKB/U4a7F+xeUiULT1lhNlFW0=
3807 +
3808 +cssnano-util-raw-cache@^4.0.1:
3809 + version "4.0.1"
3810 + resolved "https://registry.yarnpkg.com/cssnano-util-raw-cache/-/cssnano-util-raw-cache-4.0.1.tgz"
3811 + integrity sha512-qLuYtWK2b2Dy55I8ZX3ky1Z16WYsx544Q0UWViebptpwn/xDBmog2TLg4f+DBMg1rJ6JDWtn96WHbOKDWt1WQA==
3812 + dependencies:
3813 + postcss "^7.0.0"
3814 +
3815 +cssnano-util-same-parent@^4.0.0:
3816 + version "4.0.1"
3817 + resolved "https://registry.yarnpkg.com/cssnano-util-same-parent/-/cssnano-util-same-parent-4.0.1.tgz"
3818 + integrity sha512-WcKx5OY+KoSIAxBW6UBBRay1U6vkYheCdjyVNDm85zt5K9mHoGOfsOsqIszfAqrQQFIIKgjh2+FDgIj/zsl21Q==
3819 +
3820 +cssnano@^4.1.10:
3821 + version "4.1.11"
3822 + resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-4.1.11.tgz"
3823 + integrity sha512-6gZm2htn7xIPJOHY824ERgj8cNPgPxyCSnkXc4v7YvNW+TdVfzgngHcEhy/8D11kUWRUMbke+tC+AUcUsnMz2g==
3824 + dependencies:
3825 + cosmiconfig "^5.0.0"
3826 + cssnano-preset-default "^4.0.8"
3827 + is-resolvable "^1.0.0"
3828 + postcss "^7.0.0"
3829 +
3830 +csso@^4.0.2:
3831 + version "4.2.0"
3832 + resolved "https://registry.yarnpkg.com/csso/-/csso-4.2.0.tgz"
3833 + integrity sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==
3834 + dependencies:
3835 + css-tree "^1.1.2"
3836 +
3837 +cssom@^0.4.4:
3838 + version "0.4.4"
3839 + resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.4.4.tgz"
3840 + integrity sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==
3841 +
3842 +cssom@~0.3.6:
3843 + version "0.3.8"
3844 + resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.8.tgz"
3845 + integrity sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==
3846 +
3847 +cssstyle@^2.3.0:
3848 + version "2.3.0"
3849 + resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-2.3.0.tgz"
3850 + integrity sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==
3851 + dependencies:
3852 + cssom "~0.3.6"
3853 +
3854 +cyclist@^1.0.1:
3855 + version "1.0.1"
3856 + resolved "https://registry.yarnpkg.com/cyclist/-/cyclist-1.0.1.tgz"
3857 + integrity sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk=
3858 +
3859 +d@1, d@^1.0.1:
3860 + version "1.0.1"
3861 + resolved "https://registry.yarnpkg.com/d/-/d-1.0.1.tgz"
3862 + integrity sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==
3863 + dependencies:
3864 + es5-ext "^0.10.50"
3865 + type "^1.0.1"
3866 +
3867 +damerau-levenshtein@^1.0.6:
3868 + version "1.0.7"
3869 + resolved "https://registry.yarnpkg.com/damerau-levenshtein/-/damerau-levenshtein-1.0.7.tgz"
3870 + integrity sha512-VvdQIPGdWP0SqFXghj79Wf/5LArmreyMsGLa6FG6iC4t3j7j5s71TrwWmT/4akbDQIqjfACkLZmjXhA7g2oUZw==
3871 +
3872 +data-urls@^2.0.0:
3873 + version "2.0.0"
3874 + resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-2.0.0.tgz"
3875 + integrity sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==
3876 + dependencies:
3877 + abab "^2.0.3"
3878 + whatwg-mimetype "^2.3.0"
3879 + whatwg-url "^8.0.0"
3880 +
3881 +debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.0, debug@^2.6.9:
3882 + version "2.6.9"
3883 + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz"
3884 + integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==
3885 + dependencies:
3886 + ms "2.0.0"
3887 +
3888 +debug@4, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1:
3889 + version "4.3.2"
3890 + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.2.tgz"
3891 + integrity sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==
3892 + dependencies:
3893 + ms "2.1.2"
3894 +
3895 +debug@^3.1.1, debug@^3.2.6, debug@^3.2.7:
3896 + version "3.2.7"
3897 + resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz"
3898 + integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==
3899 + dependencies:
3900 + ms "^2.1.1"
3901 +
3902 +decamelize@^1.2.0:
3903 + version "1.2.0"
3904 + resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz"
3905 + integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=
3906 +
3907 +decimal.js@^10.2.1:
3908 + version "10.3.1"
3909 + resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.3.1.tgz"
3910 + integrity sha512-V0pfhfr8suzyPGOx3nmq4aHqabehUZn6Ch9kyFpV79TGDTWFmHqUqXdabR7QHqxzrYolF4+tVmJhUG4OURg5dQ==
3911 +
3912 +decode-uri-component@^0.2.0:
3913 + version "0.2.0"
3914 + resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz"
3915 + integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=
3916 +
3917 +dedent@^0.7.0:
3918 + version "0.7.0"
3919 + resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz"
3920 + integrity sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw=
3921 +
3922 +deep-equal@^1.0.1:
3923 + version "1.1.1"
3924 + resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.1.1.tgz"
3925 + integrity sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==
3926 + dependencies:
3927 + is-arguments "^1.0.4"
3928 + is-date-object "^1.0.1"
3929 + is-regex "^1.0.4"
3930 + object-is "^1.0.1"
3931 + object-keys "^1.1.1"
3932 + regexp.prototype.flags "^1.2.0"
3933 +
3934 +deep-is@^0.1.3, deep-is@~0.1.3:
3935 + version "0.1.4"
3936 + resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz"
3937 + integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==
3938 +
3939 +deepmerge@^4.2.2:
3940 + version "4.2.2"
3941 + resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.2.2.tgz"
3942 + integrity sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==
3943 +
3944 +default-gateway@^4.2.0:
3945 + version "4.2.0"
3946 + resolved "https://registry.yarnpkg.com/default-gateway/-/default-gateway-4.2.0.tgz"
3947 + integrity sha512-h6sMrVB1VMWVrW13mSc6ia/DwYYw5MN6+exNu1OaJeFac5aSAvwM7lZ0NVfTABuSkQelr4h5oebg3KB1XPdjgA==
3948 + dependencies:
3949 + execa "^1.0.0"
3950 + ip-regex "^2.1.0"
3951 +
3952 +define-properties@^1.1.2, define-properties@^1.1.3:
3953 + version "1.1.3"
3954 + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz"
3955 + integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==
3956 + dependencies:
3957 + object-keys "^1.0.12"
3958 +
3959 +define-property@^0.2.5:
3960 + version "0.2.5"
3961 + resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz"
3962 + integrity sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=
3963 + dependencies:
3964 + is-descriptor "^0.1.0"
3965 +
3966 +define-property@^1.0.0:
3967 + version "1.0.0"
3968 + resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz"
3969 + integrity sha1-dp66rz9KY6rTr56NMEybvnm/sOY=
3970 + dependencies:
3971 + is-descriptor "^1.0.0"
3972 +
3973 +define-property@^2.0.2:
3974 + version "2.0.2"
3975 + resolved "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz"
3976 + integrity sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==
3977 + dependencies:
3978 + is-descriptor "^1.0.2"
3979 + isobject "^3.0.1"
3980 +
3981 +del@^4.1.1:
3982 + version "4.1.1"
3983 + resolved "https://registry.yarnpkg.com/del/-/del-4.1.1.tgz"
3984 + integrity sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ==
3985 + dependencies:
3986 + "@types/glob" "^7.1.1"
3987 + globby "^6.1.0"
3988 + is-path-cwd "^2.0.0"
3989 + is-path-in-cwd "^2.0.0"
3990 + p-map "^2.0.0"
3991 + pify "^4.0.1"
3992 + rimraf "^2.6.3"
3993 +
3994 +delayed-stream@~1.0.0:
3995 + version "1.0.0"
3996 + resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz"
3997 + integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk=
3998 +
3999 +depd@~1.1.2:
4000 + version "1.1.2"
4001 + resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz"
4002 + integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=
4003 +
4004 +des.js@^1.0.0:
4005 + version "1.0.1"
4006 + resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.1.tgz"
4007 + integrity sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==
4008 + dependencies:
4009 + inherits "^2.0.1"
4010 + minimalistic-assert "^1.0.0"
4011 +
4012 +destroy@~1.0.4:
4013 + version "1.0.4"
4014 + resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz"
4015 + integrity sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=
4016 +
4017 +detect-newline@^3.0.0:
4018 + version "3.1.0"
4019 + resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-3.1.0.tgz"
4020 + integrity sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==
4021 +
4022 +detect-node@^2.0.4:
4023 + version "2.1.0"
4024 + resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.1.0.tgz"
4025 + integrity sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==
4026 +
4027 +detect-port-alt@1.1.6:
4028 + version "1.1.6"
4029 + resolved "https://registry.yarnpkg.com/detect-port-alt/-/detect-port-alt-1.1.6.tgz"
4030 + integrity sha512-5tQykt+LqfJFBEYaDITx7S7cR7mJ/zQmLXZ2qt5w04ainYZw6tBf9dBunMjVeVOdYVRUzUOE4HkY5J7+uttb5Q==
4031 + dependencies:
4032 + address "^1.0.1"
4033 + debug "^2.6.0"
4034 +
4035 +diff-sequences@^26.6.2:
4036 + version "26.6.2"
4037 + resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-26.6.2.tgz"
4038 + integrity sha512-Mv/TDa3nZ9sbc5soK+OoA74BsS3mL37yixCvUAQkiuA4Wz6YtwP/K47n2rv2ovzHZvoiQeA5FTQOschKkEwB0Q==
4039 +
4040 +diffie-hellman@^5.0.0:
4041 + version "5.0.3"
4042 + resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.3.tgz"
4043 + integrity sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==
4044 + dependencies:
4045 + bn.js "^4.1.0"
4046 + miller-rabin "^4.0.0"
4047 + randombytes "^2.0.0"
4048 +
4049 +dir-glob@^3.0.1:
4050 + version "3.0.1"
4051 + resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz"
4052 + integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==
4053 + dependencies:
4054 + path-type "^4.0.0"
4055 +
4056 +dns-equal@^1.0.0:
4057 + version "1.0.0"
4058 + resolved "https://registry.yarnpkg.com/dns-equal/-/dns-equal-1.0.0.tgz"
4059 + integrity sha1-s55/HabrCnW6nBcySzR1PEfgZU0=
4060 +
4061 +dns-packet@^1.3.1:
4062 + version "1.3.4"
4063 + resolved "https://registry.yarnpkg.com/dns-packet/-/dns-packet-1.3.4.tgz"
4064 + integrity sha512-BQ6F4vycLXBvdrJZ6S3gZewt6rcrks9KBgM9vrhW+knGRqc8uEdT7fuCwloc7nny5xNoMJ17HGH0R/6fpo8ECA==
4065 + dependencies:
4066 + ip "^1.1.0"
4067 + safe-buffer "^5.0.1"
4068 +
4069 +dns-txt@^2.0.2:
4070 + version "2.0.2"
4071 + resolved "https://registry.yarnpkg.com/dns-txt/-/dns-txt-2.0.2.tgz"
4072 + integrity sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY=
4073 + dependencies:
4074 + buffer-indexof "^1.0.0"
4075 +
4076 +doctrine@^2.1.0:
4077 + version "2.1.0"
4078 + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz"
4079 + integrity sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==
4080 + dependencies:
4081 + esutils "^2.0.2"
4082 +
4083 +doctrine@^3.0.0:
4084 + version "3.0.0"
4085 + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz"
4086 + integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==
4087 + dependencies:
4088 + esutils "^2.0.2"
4089 +
4090 +dom-converter@^0.2.0:
4091 + version "0.2.0"
4092 + resolved "https://registry.yarnpkg.com/dom-converter/-/dom-converter-0.2.0.tgz"
4093 + integrity sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==
4094 + dependencies:
4095 + utila "~0.4"
4096 +
4097 +dom-serializer@0:
4098 + version "0.2.2"
4099 + resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.2.2.tgz"
4100 + integrity sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==
4101 + dependencies:
4102 + domelementtype "^2.0.1"
4103 + entities "^2.0.0"
4104 +
4105 +dom-serializer@^1.0.1:
4106 + version "1.3.2"
4107 + resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-1.3.2.tgz"
4108 + integrity sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig==
4109 + dependencies:
4110 + domelementtype "^2.0.1"
4111 + domhandler "^4.2.0"
4112 + entities "^2.0.0"
4113 +
4114 +domain-browser@^1.1.1:
4115 + version "1.2.0"
4116 + resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.2.0.tgz"
4117 + integrity sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==
4118 +
4119 +domelementtype@1:
4120 + version "1.3.1"
4121 + resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.1.tgz"
4122 + integrity sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==
4123 +
4124 +domelementtype@^2.0.1, domelementtype@^2.2.0:
4125 + version "2.2.0"
4126 + resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.2.0.tgz"
4127 + integrity sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==
4128 +
4129 +domexception@^2.0.1:
4130 + version "2.0.1"
4131 + resolved "https://registry.yarnpkg.com/domexception/-/domexception-2.0.1.tgz"
4132 + integrity sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==
4133 + dependencies:
4134 + webidl-conversions "^5.0.0"
4135 +
4136 +domhandler@^4.0.0, domhandler@^4.2.0:
4137 + version "4.2.2"
4138 + resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-4.2.2.tgz"
4139 + integrity sha512-PzE9aBMsdZO8TK4BnuJwH0QT41wgMbRzuZrHUcpYncEjmQazq8QEaBWgLG7ZyC/DAZKEgglpIA6j4Qn/HmxS3w==
4140 + dependencies:
4141 + domelementtype "^2.2.0"
4142 +
4143 +domutils@^1.7.0:
4144 + version "1.7.0"
4145 + resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.7.0.tgz"
4146 + integrity sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==
4147 + dependencies:
4148 + dom-serializer "0"
4149 + domelementtype "1"
4150 +
4151 +domutils@^2.5.2, domutils@^2.6.0:
4152 + version "2.8.0"
4153 + resolved "https://registry.yarnpkg.com/domutils/-/domutils-2.8.0.tgz"
4154 + integrity sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==
4155 + dependencies:
4156 + dom-serializer "^1.0.1"
4157 + domelementtype "^2.2.0"
4158 + domhandler "^4.2.0"
4159 +
4160 +dot-case@^3.0.4:
4161 + version "3.0.4"
4162 + resolved "https://registry.yarnpkg.com/dot-case/-/dot-case-3.0.4.tgz"
4163 + integrity sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==
4164 + dependencies:
4165 + no-case "^3.0.4"
4166 + tslib "^2.0.3"
4167 +
4168 +dot-prop@^5.2.0:
4169 + version "5.3.0"
4170 + resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-5.3.0.tgz"
4171 + integrity sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==
4172 + dependencies:
4173 + is-obj "^2.0.0"
4174 +
4175 +dotenv-expand@5.1.0:
4176 + version "5.1.0"
4177 + resolved "https://registry.yarnpkg.com/dotenv-expand/-/dotenv-expand-5.1.0.tgz"
4178 + integrity sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==
4179 +
4180 +dotenv@8.2.0:
4181 + version "8.2.0"
4182 + resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-8.2.0.tgz"
4183 + integrity sha512-8sJ78ElpbDJBHNeBzUbUVLsqKdccaa/BXF1uPTw3GrvQTBgrQrtObr2mUrE38vzYd8cEv+m/JBfDLioYcfXoaw==
4184 +
4185 +duplexer@^0.1.1:
4186 + version "0.1.2"
4187 + resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.2.tgz"
4188 + integrity sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==
4189 +
4190 +duplexify@^3.4.2, duplexify@^3.6.0:
4191 + version "3.7.1"
4192 + resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.7.1.tgz"
4193 + integrity sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==
4194 + dependencies:
4195 + end-of-stream "^1.0.0"
4196 + inherits "^2.0.1"
4197 + readable-stream "^2.0.0"
4198 + stream-shift "^1.0.0"
4199 +
4200 +ee-first@1.1.1:
4201 + version "1.1.1"
4202 + resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz"
4203 + integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=
4204 +
4205 +ejs@^2.6.1:
4206 + version "2.7.4"
4207 + resolved "https://registry.yarnpkg.com/ejs/-/ejs-2.7.4.tgz"
4208 + integrity sha512-7vmuyh5+kuUyJKePhQfRQBhXV5Ce+RnaeeQArKu1EAMpL3WbgMt5WG6uQZpEVvYSSsxMXRKOewtDk9RaTKXRlA==
4209 +
4210 +electron-to-chromium@^1.3.564, electron-to-chromium@^1.3.878:
4211 + version "1.3.878"
4212 + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.878.tgz"
4213 + integrity sha512-O6yxWCN9ph2AdspAIszBnd9v8s11hQx8ub9w4UGApzmNRnoKhbulOWqbO8THEQec/aEHtvy+donHZMlh6l1rbA==
4214 +
4215 +elliptic@^6.5.3:
4216 + version "6.5.4"
4217 + resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.4.tgz"
4218 + integrity sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==
4219 + dependencies:
4220 + bn.js "^4.11.9"
4221 + brorand "^1.1.0"
4222 + hash.js "^1.0.0"
4223 + hmac-drbg "^1.0.1"
4224 + inherits "^2.0.4"
4225 + minimalistic-assert "^1.0.1"
4226 + minimalistic-crypto-utils "^1.0.1"
4227 +
4228 +emittery@^0.7.1:
4229 + version "0.7.2"
4230 + resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.7.2.tgz"
4231 + integrity sha512-A8OG5SR/ij3SsJdWDJdkkSYUjQdCUx6APQXem0SaEePBSRg4eymGYwBkKo1Y6DU+af/Jn2dBQqDBvjnr9Vi8nQ==
4232 +
4233 +emoji-regex@^7.0.1:
4234 + version "7.0.3"
4235 + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz"
4236 + integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==
4237 +
4238 +emoji-regex@^8.0.0:
4239 + version "8.0.0"
4240 + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz"
4241 + integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==
4242 +
4243 +emoji-regex@^9.0.0:
4244 + version "9.2.2"
4245 + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz"
4246 + integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==
4247 +
4248 +emojis-list@^2.0.0:
4249 + version "2.1.0"
4250 + resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-2.1.0.tgz"
4251 + integrity sha1-TapNnbAPmBmIDHn6RXrlsJof04k=
4252 +
4253 +emojis-list@^3.0.0:
4254 + version "3.0.0"
4255 + resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-3.0.0.tgz"
4256 + integrity sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==
4257 +
4258 +encodeurl@~1.0.2:
4259 + version "1.0.2"
4260 + resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz"
4261 + integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=
4262 +
4263 +end-of-stream@^1.0.0, end-of-stream@^1.1.0:
4264 + version "1.4.4"
4265 + resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz"
4266 + integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==
4267 + dependencies:
4268 + once "^1.4.0"
4269 +
4270 +enhanced-resolve@^4.3.0:
4271 + version "4.5.0"
4272 + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-4.5.0.tgz"
4273 + integrity sha512-Nv9m36S/vxpsI+Hc4/ZGRs0n9mXqSWGGq49zxb/cJfPAQMbUtttJAlNPS4AQzaBdw/pKskw5bMbekT/Y7W/Wlg==
4274 + dependencies:
4275 + graceful-fs "^4.1.2"
4276 + memory-fs "^0.5.0"
4277 + tapable "^1.0.0"
4278 +
4279 +enquirer@^2.3.5:
4280 + version "2.3.6"
4281 + resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.6.tgz"
4282 + integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==
4283 + dependencies:
4284 + ansi-colors "^4.1.1"
4285 +
4286 +entities@^2.0.0:
4287 + version "2.2.0"
4288 + resolved "https://registry.yarnpkg.com/entities/-/entities-2.2.0.tgz"
4289 + integrity sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==
4290 +
4291 +errno@^0.1.3, errno@~0.1.7:
4292 + version "0.1.8"
4293 + resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.8.tgz"
4294 + integrity sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==
4295 + dependencies:
4296 + prr "~1.0.1"
4297 +
4298 +error-ex@^1.3.1:
4299 + version "1.3.2"
4300 + resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz"
4301 + integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==
4302 + dependencies:
4303 + is-arrayish "^0.2.1"
4304 +
4305 +error-stack-parser@^2.0.6:
4306 + version "2.0.6"
4307 + resolved "https://registry.yarnpkg.com/error-stack-parser/-/error-stack-parser-2.0.6.tgz"
4308 + integrity sha512-d51brTeqC+BHlwF0BhPtcYgF5nlzf9ZZ0ZIUQNZpc9ZB9qw5IJ2diTrBY9jlCJkTLITYPjmiX6OWCwH+fuyNgQ==
4309 + dependencies:
4310 + stackframe "^1.1.1"
4311 +
4312 +es-abstract@^1.17.2, es-abstract@^1.19.0, es-abstract@^1.19.1:
4313 + version "1.19.1"
4314 + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.19.1.tgz"
4315 + integrity sha512-2vJ6tjA/UfqLm2MPs7jxVybLoB8i1t1Jd9R3kISld20sIxPcTbLuggQOUxeWeAvIUkduv/CfMjuh4WmiXr2v9w==
4316 + dependencies:
4317 + call-bind "^1.0.2"
4318 + es-to-primitive "^1.2.1"
4319 + function-bind "^1.1.1"
4320 + get-intrinsic "^1.1.1"
4321 + get-symbol-description "^1.0.0"
4322 + has "^1.0.3"
4323 + has-symbols "^1.0.2"
4324 + internal-slot "^1.0.3"
4325 + is-callable "^1.2.4"
4326 + is-negative-zero "^2.0.1"
4327 + is-regex "^1.1.4"
4328 + is-shared-array-buffer "^1.0.1"
4329 + is-string "^1.0.7"
4330 + is-weakref "^1.0.1"
4331 + object-inspect "^1.11.0"
4332 + object-keys "^1.1.1"
4333 + object.assign "^4.1.2"
4334 + string.prototype.trimend "^1.0.4"
4335 + string.prototype.trimstart "^1.0.4"
4336 + unbox-primitive "^1.0.1"
4337 +
4338 +es-to-primitive@^1.2.1:
4339 + version "1.2.1"
4340 + resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz"
4341 + integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==
4342 + dependencies:
4343 + is-callable "^1.1.4"
4344 + is-date-object "^1.0.1"
4345 + is-symbol "^1.0.2"
4346 +
4347 +es5-ext@^0.10.35, es5-ext@^0.10.50:
4348 + version "0.10.53"
4349 + resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.53.tgz"
4350 + integrity sha512-Xs2Stw6NiNHWypzRTY1MtaG/uJlwCk8kH81920ma8mvN8Xq1gsfhZvpkImLQArw8AHnv8MT2I45J3c0R8slE+Q==
4351 + dependencies:
4352 + es6-iterator "~2.0.3"
4353 + es6-symbol "~3.1.3"
4354 + next-tick "~1.0.0"
4355 +
4356 +es6-iterator@2.0.3, es6-iterator@~2.0.3:
4357 + version "2.0.3"
4358 + resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.3.tgz"
4359 + integrity sha1-p96IkUGgWpSwhUQDstCg+/qY87c=
4360 + dependencies:
4361 + d "1"
4362 + es5-ext "^0.10.35"
4363 + es6-symbol "^3.1.1"
4364 +
4365 +es6-symbol@^3.1.1, es6-symbol@~3.1.3:
4366 + version "3.1.3"
4367 + resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.3.tgz"
4368 + integrity sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==
4369 + dependencies:
4370 + d "^1.0.1"
4371 + ext "^1.1.2"
4372 +
4373 +escalade@^3.0.2, escalade@^3.1.1:
4374 + version "3.1.1"
4375 + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz"
4376 + integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==
4377 +
4378 +escape-html@~1.0.3:
4379 + version "1.0.3"
4380 + resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz"
4381 + integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=
4382 +
4383 +escape-string-regexp@2.0.0, escape-string-regexp@^2.0.0:
4384 + version "2.0.0"
4385 + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz"
4386 + integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==
4387 +
4388 +escape-string-regexp@^1.0.5:
4389 + version "1.0.5"
4390 + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz"
4391 + integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=
4392 +
4393 +escape-string-regexp@^4.0.0:
4394 + version "4.0.0"
4395 + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz"
4396 + integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==
4397 +
4398 +escodegen@^2.0.0:
4399 + version "2.0.0"
4400 + resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-2.0.0.tgz"
4401 + integrity sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==
4402 + dependencies:
4403 + esprima "^4.0.1"
4404 + estraverse "^5.2.0"
4405 + esutils "^2.0.2"
4406 + optionator "^0.8.1"
4407 + optionalDependencies:
4408 + source-map "~0.6.1"
4409 +
4410 +eslint-config-react-app@^6.0.0:
4411 + version "6.0.0"
4412 + resolved "https://registry.yarnpkg.com/eslint-config-react-app/-/eslint-config-react-app-6.0.0.tgz"
4413 + integrity sha512-bpoAAC+YRfzq0dsTk+6v9aHm/uqnDwayNAXleMypGl6CpxI9oXXscVHo4fk3eJPIn+rsbtNetB4r/ZIidFIE8A==
4414 + dependencies:
4415 + confusing-browser-globals "^1.0.10"
4416 +
4417 +eslint-import-resolver-node@^0.3.6:
4418 + version "0.3.6"
4419 + resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz"
4420 + integrity sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw==
4421 + dependencies:
4422 + debug "^3.2.7"
4423 + resolve "^1.20.0"
4424 +
4425 +eslint-module-utils@^2.7.0:
4426 + version "2.7.1"
4427 + resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.7.1.tgz"
4428 + integrity sha512-fjoetBXQZq2tSTWZ9yWVl2KuFrTZZH3V+9iD1V1RfpDgxzJR+mPd/KZmMiA8gbPqdBzpNiEHOuT7IYEWxrH0zQ==
4429 + dependencies:
4430 + debug "^3.2.7"
4431 + find-up "^2.1.0"
4432 + pkg-dir "^2.0.0"
4433 +
4434 +eslint-plugin-flowtype@^5.2.0:
4435 + version "5.10.0"
4436 + resolved "https://registry.yarnpkg.com/eslint-plugin-flowtype/-/eslint-plugin-flowtype-5.10.0.tgz"
4437 + integrity sha512-vcz32f+7TP+kvTUyMXZmCnNujBQZDNmcqPImw8b9PZ+16w1Qdm6ryRuYZYVaG9xRqqmAPr2Cs9FAX5gN+x/bjw==
4438 + dependencies:
4439 + lodash "^4.17.15"
4440 + string-natural-compare "^3.0.1"
4441 +
4442 +eslint-plugin-import@^2.22.1:
4443 + version "2.25.2"
4444 + resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.25.2.tgz"
4445 + integrity sha512-qCwQr9TYfoBHOFcVGKY9C9unq05uOxxdklmBXLVvcwo68y5Hta6/GzCZEMx2zQiu0woKNEER0LE7ZgaOfBU14g==
4446 + dependencies:
4447 + array-includes "^3.1.4"
4448 + array.prototype.flat "^1.2.5"
4449 + debug "^2.6.9"
4450 + doctrine "^2.1.0"
4451 + eslint-import-resolver-node "^0.3.6"
4452 + eslint-module-utils "^2.7.0"
4453 + has "^1.0.3"
4454 + is-core-module "^2.7.0"
4455 + is-glob "^4.0.3"
4456 + minimatch "^3.0.4"
4457 + object.values "^1.1.5"
4458 + resolve "^1.20.0"
4459 + tsconfig-paths "^3.11.0"
4460 +
4461 +eslint-plugin-jest@^24.1.0:
4462 + version "24.7.0"
4463 + resolved "https://registry.yarnpkg.com/eslint-plugin-jest/-/eslint-plugin-jest-24.7.0.tgz"
4464 + integrity sha512-wUxdF2bAZiYSKBclsUMrYHH6WxiBreNjyDxbRv345TIvPeoCEgPNEn3Sa+ZrSqsf1Dl9SqqSREXMHExlMMu1DA==
4465 + dependencies:
4466 + "@typescript-eslint/experimental-utils" "^4.0.1"
4467 +
4468 +eslint-plugin-jsx-a11y@^6.3.1:
4469 + version "6.4.1"
4470 + resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.4.1.tgz"
4471 + integrity sha512-0rGPJBbwHoGNPU73/QCLP/vveMlM1b1Z9PponxO87jfr6tuH5ligXbDT6nHSSzBC8ovX2Z+BQu7Bk5D/Xgq9zg==
4472 + dependencies:
4473 + "@babel/runtime" "^7.11.2"
4474 + aria-query "^4.2.2"
4475 + array-includes "^3.1.1"
4476 + ast-types-flow "^0.0.7"
4477 + axe-core "^4.0.2"
4478 + axobject-query "^2.2.0"
4479 + damerau-levenshtein "^1.0.6"
4480 + emoji-regex "^9.0.0"
4481 + has "^1.0.3"
4482 + jsx-ast-utils "^3.1.0"
4483 + language-tags "^1.0.5"
4484 +
4485 +eslint-plugin-react-hooks@^4.2.0:
4486 + version "4.2.0"
4487 + resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.2.0.tgz"
4488 + integrity sha512-623WEiZJqxR7VdxFCKLI6d6LLpwJkGPYKODnkH3D7WpOG5KM8yWueBd8TLsNAetEJNF5iJmolaAKO3F8yzyVBQ==
4489 +
4490 +eslint-plugin-react@^7.21.5:
4491 + version "7.26.1"
4492 + resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.26.1.tgz"
4493 + integrity sha512-Lug0+NOFXeOE+ORZ5pbsh6mSKjBKXDXItUD2sQoT+5Yl0eoT82DqnXeTMfUare4QVCn9QwXbfzO/dBLjLXwVjQ==
4494 + dependencies:
4495 + array-includes "^3.1.3"
4496 + array.prototype.flatmap "^1.2.4"
4497 + doctrine "^2.1.0"
4498 + estraverse "^5.2.0"
4499 + jsx-ast-utils "^2.4.1 || ^3.0.0"
4500 + minimatch "^3.0.4"
4501 + object.entries "^1.1.4"
4502 + object.fromentries "^2.0.4"
4503 + object.hasown "^1.0.0"
4504 + object.values "^1.1.4"
4505 + prop-types "^15.7.2"
4506 + resolve "^2.0.0-next.3"
4507 + semver "^6.3.0"
4508 + string.prototype.matchall "^4.0.5"
4509 +
4510 +eslint-plugin-testing-library@^3.9.2:
4511 + version "3.10.2"
4512 + resolved "https://registry.yarnpkg.com/eslint-plugin-testing-library/-/eslint-plugin-testing-library-3.10.2.tgz"
4513 + integrity sha512-WAmOCt7EbF1XM8XfbCKAEzAPnShkNSwcIsAD2jHdsMUT9mZJPjLCG7pMzbcC8kK366NOuGip8HKLDC+Xk4yIdA==
4514 + dependencies:
4515 + "@typescript-eslint/experimental-utils" "^3.10.1"
4516 +
4517 +eslint-scope@^4.0.3:
4518 + version "4.0.3"
4519 + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-4.0.3.tgz"
4520 + integrity sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==
4521 + dependencies:
4522 + esrecurse "^4.1.0"
4523 + estraverse "^4.1.1"
4524 +
4525 +eslint-scope@^5.0.0, eslint-scope@^5.1.1:
4526 + version "5.1.1"
4527 + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz"
4528 + integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==
4529 + dependencies:
4530 + esrecurse "^4.3.0"
4531 + estraverse "^4.1.1"
4532 +
4533 +eslint-utils@^2.0.0, eslint-utils@^2.1.0:
4534 + version "2.1.0"
4535 + resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-2.1.0.tgz"
4536 + integrity sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==
4537 + dependencies:
4538 + eslint-visitor-keys "^1.1.0"
4539 +
4540 +eslint-utils@^3.0.0:
4541 + version "3.0.0"
4542 + resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-3.0.0.tgz"
4543 + integrity sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==
4544 + dependencies:
4545 + eslint-visitor-keys "^2.0.0"
4546 +
4547 +eslint-visitor-keys@^1.0.0, eslint-visitor-keys@^1.1.0, eslint-visitor-keys@^1.3.0:
4548 + version "1.3.0"
4549 + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz"
4550 + integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==
4551 +
4552 +eslint-visitor-keys@^2.0.0:
4553 + version "2.1.0"
4554 + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz"
4555 + integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==
4556 +
4557 +eslint-webpack-plugin@^2.5.2:
4558 + version "2.5.4"
4559 + resolved "https://registry.yarnpkg.com/eslint-webpack-plugin/-/eslint-webpack-plugin-2.5.4.tgz"
4560 + integrity sha512-7rYh0m76KyKSDE+B+2PUQrlNS4HJ51t3WKpkJg6vo2jFMbEPTG99cBV0Dm7LXSHucN4WGCG65wQcRiTFrj7iWw==
4561 + dependencies:
4562 + "@types/eslint" "^7.2.6"
4563 + arrify "^2.0.1"
4564 + jest-worker "^26.6.2"
4565 + micromatch "^4.0.2"
4566 + normalize-path "^3.0.0"
4567 + schema-utils "^3.0.0"
4568 +
4569 +eslint@^7.11.0:
4570 + version "7.32.0"
4571 + resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.32.0.tgz"
4572 + integrity sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA==
4573 + dependencies:
4574 + "@babel/code-frame" "7.12.11"
4575 + "@eslint/eslintrc" "^0.4.3"
4576 + "@humanwhocodes/config-array" "^0.5.0"
4577 + ajv "^6.10.0"
4578 + chalk "^4.0.0"
4579 + cross-spawn "^7.0.2"
4580 + debug "^4.0.1"
4581 + doctrine "^3.0.0"
4582 + enquirer "^2.3.5"
4583 + escape-string-regexp "^4.0.0"
4584 + eslint-scope "^5.1.1"
4585 + eslint-utils "^2.1.0"
4586 + eslint-visitor-keys "^2.0.0"
4587 + espree "^7.3.1"
4588 + esquery "^1.4.0"
4589 + esutils "^2.0.2"
4590 + fast-deep-equal "^3.1.3"
4591 + file-entry-cache "^6.0.1"
4592 + functional-red-black-tree "^1.0.1"
4593 + glob-parent "^5.1.2"
4594 + globals "^13.6.0"
4595 + ignore "^4.0.6"
4596 + import-fresh "^3.0.0"
4597 + imurmurhash "^0.1.4"
4598 + is-glob "^4.0.0"
4599 + js-yaml "^3.13.1"
4600 + json-stable-stringify-without-jsonify "^1.0.1"
4601 + levn "^0.4.1"
4602 + lodash.merge "^4.6.2"
4603 + minimatch "^3.0.4"
4604 + natural-compare "^1.4.0"
4605 + optionator "^0.9.1"
4606 + progress "^2.0.0"
4607 + regexpp "^3.1.0"
4608 + semver "^7.2.1"
4609 + strip-ansi "^6.0.0"
4610 + strip-json-comments "^3.1.0"
4611 + table "^6.0.9"
4612 + text-table "^0.2.0"
4613 + v8-compile-cache "^2.0.3"
4614 +
4615 +espree@^7.3.0, espree@^7.3.1:
4616 + version "7.3.1"
4617 + resolved "https://registry.yarnpkg.com/espree/-/espree-7.3.1.tgz"
4618 + integrity sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==
4619 + dependencies:
4620 + acorn "^7.4.0"
4621 + acorn-jsx "^5.3.1"
4622 + eslint-visitor-keys "^1.3.0"
4623 +
4624 +esprima@^4.0.0, esprima@^4.0.1:
4625 + version "4.0.1"
4626 + resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz"
4627 + integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==
4628 +
4629 +esquery@^1.4.0:
4630 + version "1.4.0"
4631 + resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.4.0.tgz"
4632 + integrity sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==
4633 + dependencies:
4634 + estraverse "^5.1.0"
4635 +
4636 +esrecurse@^4.1.0, esrecurse@^4.3.0:
4637 + version "4.3.0"
4638 + resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz"
4639 + integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==
4640 + dependencies:
4641 + estraverse "^5.2.0"
4642 +
4643 +estraverse@^4.1.1:
4644 + version "4.3.0"
4645 + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz"
4646 + integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==
4647 +
4648 +estraverse@^5.1.0, estraverse@^5.2.0:
4649 + version "5.2.0"
4650 + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.2.0.tgz"
4651 + integrity sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==
4652 +
4653 +estree-walker@^0.6.1:
4654 + version "0.6.1"
4655 + resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-0.6.1.tgz"
4656 + integrity sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==
4657 +
4658 +estree-walker@^1.0.1:
4659 + version "1.0.1"
4660 + resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-1.0.1.tgz"
4661 + integrity sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==
4662 +
4663 +esutils@^2.0.2:
4664 + version "2.0.3"
4665 + resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz"
4666 + integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==
4667 +
4668 +etag@~1.8.1:
4669 + version "1.8.1"
4670 + resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz"
4671 + integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=
4672 +
4673 +eventemitter3@^4.0.0:
4674 + version "4.0.7"
4675 + resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz"
4676 + integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==
4677 +
4678 +events@^3.0.0:
4679 + version "3.3.0"
4680 + resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz"
4681 + integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==
4682 +
4683 +eventsource@^1.0.7:
4684 + version "1.1.0"
4685 + resolved "https://registry.yarnpkg.com/eventsource/-/eventsource-1.1.0.tgz"
4686 + integrity sha512-VSJjT5oCNrFvCS6igjzPAt5hBzQ2qPBFIbJ03zLI9SE0mxwZpMw6BfJrbFHm1a141AavMEB8JHmBhWAd66PfCg==
4687 + dependencies:
4688 + original "^1.0.0"
4689 +
4690 +evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3:
4691 + version "1.0.3"
4692 + resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz"
4693 + integrity sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==
4694 + dependencies:
4695 + md5.js "^1.3.4"
4696 + safe-buffer "^5.1.1"
4697 +
4698 +exec-sh@^0.3.2:
4699 + version "0.3.6"
4700 + resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.3.6.tgz"
4701 + integrity sha512-nQn+hI3yp+oD0huYhKwvYI32+JFeq+XkNcD1GAo3Y/MjxsfVGmrrzrnzjWiNY6f+pUCP440fThsFh5gZrRAU/w==
4702 +
4703 +execa@^1.0.0:
4704 + version "1.0.0"
4705 + resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz"
4706 + integrity sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==
4707 + dependencies:
4708 + cross-spawn "^6.0.0"
4709 + get-stream "^4.0.0"
4710 + is-stream "^1.1.0"
4711 + npm-run-path "^2.0.0"
4712 + p-finally "^1.0.0"
4713 + signal-exit "^3.0.0"
4714 + strip-eof "^1.0.0"
4715 +
4716 +execa@^4.0.0:
4717 + version "4.1.0"
4718 + resolved "https://registry.yarnpkg.com/execa/-/execa-4.1.0.tgz"
4719 + integrity sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==
4720 + dependencies:
4721 + cross-spawn "^7.0.0"
4722 + get-stream "^5.0.0"
4723 + human-signals "^1.1.1"
4724 + is-stream "^2.0.0"
4725 + merge-stream "^2.0.0"
4726 + npm-run-path "^4.0.0"
4727 + onetime "^5.1.0"
4728 + signal-exit "^3.0.2"
4729 + strip-final-newline "^2.0.0"
4730 +
4731 +exit@^0.1.2:
4732 + version "0.1.2"
4733 + resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz"
4734 + integrity sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=
4735 +
4736 +expand-brackets@^2.1.4:
4737 + version "2.1.4"
4738 + resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz"
4739 + integrity sha1-t3c14xXOMPa27/D4OwQVGiJEliI=
4740 + dependencies:
4741 + debug "^2.3.3"
4742 + define-property "^0.2.5"
4743 + extend-shallow "^2.0.1"
4744 + posix-character-classes "^0.1.0"
4745 + regex-not "^1.0.0"
4746 + snapdragon "^0.8.1"
4747 + to-regex "^3.0.1"
4748 +
4749 +expect@^26.6.0, expect@^26.6.2:
4750 + version "26.6.2"
4751 + resolved "https://registry.yarnpkg.com/expect/-/expect-26.6.2.tgz"
4752 + integrity sha512-9/hlOBkQl2l/PLHJx6JjoDF6xPKcJEsUlWKb23rKE7KzeDqUZKXKNMW27KIue5JMdBV9HgmoJPcc8HtO85t9IA==
4753 + dependencies:
4754 + "@jest/types" "^26.6.2"
4755 + ansi-styles "^4.0.0"
4756 + jest-get-type "^26.3.0"
4757 + jest-matcher-utils "^26.6.2"
4758 + jest-message-util "^26.6.2"
4759 + jest-regex-util "^26.0.0"
4760 +
4761 +express@^4.17.1:
4762 + version "4.17.1"
4763 + resolved "https://registry.yarnpkg.com/express/-/express-4.17.1.tgz"
4764 + integrity sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==
4765 + dependencies:
4766 + accepts "~1.3.7"
4767 + array-flatten "1.1.1"
4768 + body-parser "1.19.0"
4769 + content-disposition "0.5.3"
4770 + content-type "~1.0.4"
4771 + cookie "0.4.0"
4772 + cookie-signature "1.0.6"
4773 + debug "2.6.9"
4774 + depd "~1.1.2"
4775 + encodeurl "~1.0.2"
4776 + escape-html "~1.0.3"
4777 + etag "~1.8.1"
4778 + finalhandler "~1.1.2"
4779 + fresh "0.5.2"
4780 + merge-descriptors "1.0.1"
4781 + methods "~1.1.2"
4782 + on-finished "~2.3.0"
4783 + parseurl "~1.3.3"
4784 + path-to-regexp "0.1.7"
4785 + proxy-addr "~2.0.5"
4786 + qs "6.7.0"
4787 + range-parser "~1.2.1"
4788 + safe-buffer "5.1.2"
4789 + send "0.17.1"
4790 + serve-static "1.14.1"
4791 + setprototypeof "1.1.1"
4792 + statuses "~1.5.0"
4793 + type-is "~1.6.18"
4794 + utils-merge "1.0.1"
4795 + vary "~1.1.2"
4796 +
4797 +ext@^1.1.2:
4798 + version "1.6.0"
4799 + resolved "https://registry.yarnpkg.com/ext/-/ext-1.6.0.tgz"
4800 + integrity sha512-sdBImtzkq2HpkdRLtlLWDa6w4DX22ijZLKx8BMPUuKe1c5lbN6xwQDQCxSfxBQnHZ13ls/FH0MQZx/q/gr6FQg==
4801 + dependencies:
4802 + type "^2.5.0"
4803 +
4804 +extend-shallow@^2.0.1:
4805 + version "2.0.1"
4806 + resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz"
4807 + integrity sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=
4808 + dependencies:
4809 + is-extendable "^0.1.0"
4810 +
4811 +extend-shallow@^3.0.0, extend-shallow@^3.0.2:
4812 + version "3.0.2"
4813 + resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz"
4814 + integrity sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=
4815 + dependencies:
4816 + assign-symbols "^1.0.0"
4817 + is-extendable "^1.0.1"
4818 +
4819 +extglob@^2.0.4:
4820 + version "2.0.4"
4821 + resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz"
4822 + integrity sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==
4823 + dependencies:
4824 + array-unique "^0.3.2"
4825 + define-property "^1.0.0"
4826 + expand-brackets "^2.1.4"
4827 + extend-shallow "^2.0.1"
4828 + fragment-cache "^0.2.1"
4829 + regex-not "^1.0.0"
4830 + snapdragon "^0.8.1"
4831 + to-regex "^3.0.1"
4832 +
4833 +fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3:
4834 + version "3.1.3"
4835 + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz"
4836 + integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==
4837 +
4838 +fast-glob@^3.1.1:
4839 + version "3.2.7"
4840 + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.7.tgz"
4841 + integrity sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==
4842 + dependencies:
4843 + "@nodelib/fs.stat" "^2.0.2"
4844 + "@nodelib/fs.walk" "^1.2.3"
4845 + glob-parent "^5.1.2"
4846 + merge2 "^1.3.0"
4847 + micromatch "^4.0.4"
4848 +
4849 +fast-json-stable-stringify@^2.0.0, fast-json-stable-stringify@^2.1.0:
4850 + version "2.1.0"
4851 + resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz"
4852 + integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==
4853 +
4854 +fast-levenshtein@^2.0.6, fast-levenshtein@~2.0.6:
4855 + version "2.0.6"
4856 + resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz"
4857 + integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=
4858 +
4859 +fastq@^1.6.0:
4860 + version "1.13.0"
4861 + resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.13.0.tgz"
4862 + integrity sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==
4863 + dependencies:
4864 + reusify "^1.0.4"
4865 +
4866 +faye-websocket@^0.11.3:
4867 + version "0.11.4"
4868 + resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.11.4.tgz"
4869 + integrity sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==
4870 + dependencies:
4871 + websocket-driver ">=0.5.1"
4872 +
4873 +fb-watchman@^2.0.0:
4874 + version "2.0.1"
4875 + resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.1.tgz"
4876 + integrity sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg==
4877 + dependencies:
4878 + bser "2.1.1"
4879 +
4880 +figgy-pudding@^3.5.1:
4881 + version "3.5.2"
4882 + resolved "https://registry.yarnpkg.com/figgy-pudding/-/figgy-pudding-3.5.2.tgz"
4883 + integrity sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw==
4884 +
4885 +file-entry-cache@^6.0.1:
4886 + version "6.0.1"
4887 + resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz"
4888 + integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==
4889 + dependencies:
4890 + flat-cache "^3.0.4"
4891 +
4892 +file-loader@6.1.1:
4893 + version "6.1.1"
4894 + resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-6.1.1.tgz"
4895 + integrity sha512-Klt8C4BjWSXYQAfhpYYkG4qHNTna4toMHEbWrI5IuVoxbU6uiDKeKAP99R8mmbJi3lvewn/jQBOgU4+NS3tDQw==
4896 + dependencies:
4897 + loader-utils "^2.0.0"
4898 + schema-utils "^3.0.0"
4899 +
4900 +file-uri-to-path@1.0.0:
4901 + version "1.0.0"
4902 + resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz"
4903 + integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==
4904 +
4905 +filesize@6.1.0:
4906 + version "6.1.0"
4907 + resolved "https://registry.yarnpkg.com/filesize/-/filesize-6.1.0.tgz"
4908 + integrity sha512-LpCHtPQ3sFx67z+uh2HnSyWSLLu5Jxo21795uRDuar/EOuYWXib5EmPaGIBuSnRqH2IODiKA2k5re/K9OnN/Yg==
4909 +
4910 +fill-range@^4.0.0:
4911 + version "4.0.0"
4912 + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz"
4913 + integrity sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=
4914 + dependencies:
4915 + extend-shallow "^2.0.1"
4916 + is-number "^3.0.0"
4917 + repeat-string "^1.6.1"
4918 + to-regex-range "^2.1.0"
4919 +
4920 +fill-range@^7.0.1:
4921 + version "7.0.1"
4922 + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz"
4923 + integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==
4924 + dependencies:
4925 + to-regex-range "^5.0.1"
4926 +
4927 +finalhandler@~1.1.2:
4928 + version "1.1.2"
4929 + resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.2.tgz"
4930 + integrity sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==
4931 + dependencies:
4932 + debug "2.6.9"
4933 + encodeurl "~1.0.2"
4934 + escape-html "~1.0.3"
4935 + on-finished "~2.3.0"
4936 + parseurl "~1.3.3"
4937 + statuses "~1.5.0"
4938 + unpipe "~1.0.0"
4939 +
4940 +find-cache-dir@^2.1.0:
4941 + version "2.1.0"
4942 + resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-2.1.0.tgz"
4943 + integrity sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==
4944 + dependencies:
4945 + commondir "^1.0.1"
4946 + make-dir "^2.0.0"
4947 + pkg-dir "^3.0.0"
4948 +
4949 +find-cache-dir@^3.3.1:
4950 + version "3.3.2"
4951 + resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-3.3.2.tgz"
4952 + integrity sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==
4953 + dependencies:
4954 + commondir "^1.0.1"
4955 + make-dir "^3.0.2"
4956 + pkg-dir "^4.1.0"
4957 +
4958 +find-up@4.1.0, find-up@^4.0.0, find-up@^4.1.0:
4959 + version "4.1.0"
4960 + resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz"
4961 + integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==
4962 + dependencies:
4963 + locate-path "^5.0.0"
4964 + path-exists "^4.0.0"
4965 +
4966 +find-up@^2.1.0:
4967 + version "2.1.0"
4968 + resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz"
4969 + integrity sha1-RdG35QbHF93UgndaK3eSCjwMV6c=
4970 + dependencies:
4971 + locate-path "^2.0.0"
4972 +
4973 +find-up@^3.0.0:
4974 + version "3.0.0"
4975 + resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz"
4976 + integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==
4977 + dependencies:
4978 + locate-path "^3.0.0"
4979 +
4980 +flat-cache@^3.0.4:
4981 + version "3.0.4"
4982 + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.0.4.tgz"
4983 + integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==
4984 + dependencies:
4985 + flatted "^3.1.0"
4986 + rimraf "^3.0.2"
4987 +
4988 +flatted@^3.1.0:
4989 + version "3.2.2"
4990 + resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.2.tgz"
4991 + integrity sha512-JaTY/wtrcSyvXJl4IMFHPKyFur1sE9AUqc0QnhOaJ0CxHtAoIV8pYDzeEfAaNEtGkOfq4gr3LBFmdXW5mOQFnA==
4992 +
4993 +flatten@^1.0.2:
4994 + version "1.0.3"
4995 + resolved "https://registry.yarnpkg.com/flatten/-/flatten-1.0.3.tgz"
4996 + integrity sha512-dVsPA/UwQ8+2uoFe5GHtiBMu48dWLTdsuEd7CKGlZlD78r1TTWBvDuFaFGKCo/ZfEr95Uk56vZoX86OsHkUeIg==
4997 +
4998 +flush-write-stream@^1.0.0:
4999 + version "1.1.1"

This file is too large to show in full.

compiler/forget/packages/playground/.eslintrc.json new
+3
@@ -0,0 +1,3 @@
1 +{
2 + "extends": "next/core-web-vitals"
3 +}
compiler/forget/packages/playground/.gitignore new
+45
@@ -0,0 +1,45 @@
1 +# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
2 +
3 +# dependencies
4 +/node_modules
5 +/.pnp
6 +.pnp.js
7 +/forget
8 +
9 +# testing
10 +/coverage
11 +
12 +# next.js
13 +/.next/
14 +/out/
15 +
16 +# production
17 +/build
18 +
19 +# misc
20 +.DS_Store
21 +*.pem
22 +
23 +# debug
24 +npm-debug.log*
25 +yarn-debug.log*
26 +yarn-error.log*
27 +.pnpm-debug.log*
28 +
29 +# local env files
30 +.env*.local
31 +
32 +# vercel
33 +.vercel
34 +
35 +# typescript
36 +*.tsbuildinfo
37 +
38 +# external fonts
39 +public/fonts/Optimistic_Display_W_Lt.woff2
40 +public/fonts/Optimistic_Display_W_Md.woff2
41 +public/fonts/Optimistic_Display_W_Bd.woff2
42 +
43 +# vscode
44 +.vscode/*
45 +!.vscode/extensions.json
compiler/forget/packages/playground/.vscode/extensions.json new
+3
@@ -0,0 +1,3 @@
1 +{
2 + "recommendations": ["bradlc.vscode-tailwindcss", "heybourn.headwind"]
3 +}
compiler/forget/packages/playground/README.md new
+35
@@ -0,0 +1,35 @@
1 +# React Forget Playground
2 +
3 +An interactive playground to demonstrate, test, and have fun with React Forget.
4 +
5 +## Setup
6 +
7 +```sh
8 +# Build Forget from source and install Playground dependencies.
9 +$ yarn
10 +
11 +# Or similarly
12 +$ npm install
13 +```
14 +
15 +## Development
16 +
17 +```sh
18 +# Start the local development server with
19 +$ yarn dev
20 +
21 +# Or
22 +$ npm run dev
23 +
24 +# Rerun the following (in a separate terminal window) when Forget
25 +# is changed locally to keep Playground in sync.
26 +$ yarn
27 +```
28 +
29 +## Deployment
30 +
31 +This project has been deployed using Vercel. Vercel does the exact same thing as we would
32 +locally, by running `yarn` at the install step in the Playground directory to build
33 +Forget from source and [symlink](https://classic.yarnpkg.com/en/docs/cli/link) it as its dependency.
34 +This means that Playground is automatically deployed on every push and pull requests will reflect
35 +the behaviors of Forget of that commit.
compiler/forget/packages/playground/colors.js new
+93
@@ -0,0 +1,93 @@
1 +/*
2 + * Copyright (c) Facebook, Inc. and its affiliates.
3 + */
4 +
5 +/**
6 + * Sync from <https://github.com/reactjs/reactjs.org/blob/main/beta/colors.js>.
7 + */
8 +
9 +module.exports = {
10 + // Text colors
11 + primary: "#23272F", // gray-90
12 + "primary-dark": "#F6F7F9", // gray-5
13 + secondary: "#404756", // gray-70
14 + "secondary-dark": "#EBECF0", // gray-10
15 + link: "#087EA4", // blue-50
16 + "link-dark": "#149ECA", // blue-40
17 + syntax: "#EBECF0", // gray-10
18 + wash: "#FFFFFF",
19 + "wash-dark": "#23272F", // gray-90
20 + card: "#F6F7F9", // gray-05
21 + "card-dark": "#343A46", // gray-80
22 + highlight: "#E6F7FF", // blue-10
23 + "highlight-dark": "rgba(88,175,223,.1)",
24 + border: "#EBECF0", // gray-10
25 + "border-dark": "#343A46", // gray-80
26 + "secondary-button": "#EBECF0", // gray-10
27 + "secondary-button-dark": "#404756", // gray-70
28 +
29 + // Gray
30 + "gray-95": "#16181D",
31 + "gray-90": "#23272F",
32 + "gray-80": "#343A46",
33 + "gray-70": "#404756",
34 + "gray-60": "#4E5769",
35 + "gray-50": "#5E687E", // unused
36 + "gray-40": "#78839B",
37 + "gray-30": "#99A1B3",
38 + "gray-20": "#BCC1CD",
39 + "gray-10": "#EBECF0",
40 + "gray-5": "#F6F7F9",
41 +
42 + // Blue
43 + "blue-60": "#045975",
44 + "blue-50": "#087EA4",
45 + "blue-40": "#149ECA", // Brand Blue
46 + "blue-30": "#58C4DC", // unused
47 + "blue-20": "#ABE2ED",
48 + "blue-10": "#E6F7FF", // todo: doesn't match illustrations
49 + "blue-5": "#E6F6FA",
50 +
51 + // Yellow
52 + "yellow-60": "#B65700",
53 + "yellow-50": "#C76A15",
54 + "yellow-40": "#DB7D27", // unused
55 + "yellow-30": "#FABD62", // unused
56 + "yellow-20": "#FCDEB0", // unused
57 + "yellow-10": "#FDE7C7",
58 + "yellow-5": "#FEF5E7",
59 +
60 + // Purple
61 + "purple-60": "#2B3491", // unused
62 + "purple-50": "#575FB7",
63 + "purple-40": "#6B75DB",
64 + "purple-30": "#8891EC",
65 + "purple-20": "#C3C8F5", // unused
66 + "purple-10": "#E7E9FB",
67 + "purple-5": "#F3F4FD",
68 +
69 + // Green
70 + "green-60": "#2B6E62",
71 + "green-50": "#388F7F",
72 + "green-40": "#44AC99",
73 + "green-30": "#7FCCBF",
74 + "green-20": "#ABDED5",
75 + "green-10": "#E5F5F2",
76 + "green-5": "#F4FBF9",
77 +
78 + // RED
79 + "red-60": "#712D28",
80 + "red-50": "#A6423A", // unused
81 + "red-40": "#C1554D",
82 + "red-30": "#D07D77",
83 + "red-20": "#E5B7B3", // unused
84 + "red-10": "#F2DBD9", // unused
85 + "red-5": "#FAF1F0",
86 +
87 + // MISC
88 + "code-block": "#99a1b30f", // gray-30 @ 6%
89 + "gradient-blue": "#58C4DC", // Only used for the landing gradient for now.
90 + github: {
91 + highlight: "#fffbdd",
92 + },
93 +};
compiler/forget/packages/playground/components/Editor/CompilerFlagsEditor.tsx new
+37
@@ -0,0 +1,37 @@
1 +/*
2 + * Copyright (c) Facebook, Inc. and its affiliates.
3 + */
4 +import { type ForgetCompilerFlags } from "../../lib/compilerDriver";
5 +import { useStore, useStoreDispatch } from "../StoreContext";
6 +
7 +export default function CompilerFlagsEditor() {
8 + const store = useStore();
9 + const dispatch = useStoreDispatch();
10 + return (
11 + <div
12 + style={{
13 + display: "grid",
14 + gridTemplateColumns: "repeat(2, 1fr)",
15 + }}
16 + >
17 + {Object.keys(store.compilerFlags).map((f: string) => {
18 + const flag = f as keyof ForgetCompilerFlags;
19 + return (
20 + <label key={flag} style={{ display: "block" }}>
21 + <input
22 + type="checkbox"
23 + checked={store.compilerFlags[flag]}
24 + onChange={(e) =>
25 + dispatch({
26 + type: "setCompilerFlag",
27 + payload: { flag, value: e.target.checked },
28 + })
29 + }
30 + />
31 + {flag}
32 + </label>
33 + );
34 + })}
35 + </div>
36 + );
37 +}
compiler/forget/packages/playground/components/Editor/Input.tsx new
+138
@@ -0,0 +1,138 @@
1 +/*
2 + * Copyright (c) Facebook, Inc. and its affiliates.
3 + */
4 +
5 +import MonacoEditor, { type Monaco } from "@monaco-editor/react";
6 +import type { Diagnostic } from "babel-plugin-react-forget";
7 +import invariant from "invariant";
8 +import type { editor } from "monaco-editor";
9 +import { useEffect, useState } from "react";
10 +import { renderForgetMarkers } from "../../lib/forgetMonacoDiagnostics";
11 +import { createInputFile, getSelectedFile } from "../../lib/stores";
12 +import { useStore, useStoreDispatch } from "../StoreContext";
13 +import InputTabSelector from "./InputTabSelector";
14 +import { monacoOptions } from "./monacoOptions";
15 +// TODO: Make TS recognize .d.ts files, in addition to loading them with webpack.
16 +// @ts-ignore
17 +import React$Types from "../../node_modules/@types/react/index.d.ts";
18 +
19 +export default function Input({ diagnostics }: { diagnostics: Diagnostic[] }) {
20 + const [monaco, setMonaco] = useState<Monaco | null>(null);
21 + const store = useStore();
22 + const dispatchStore = useStoreDispatch();
23 + const selectedFile = getSelectedFile(store);
24 +
25 + useEffect(() => {
26 + if (!monaco) return;
27 + const uri = monaco.Uri.parse(`file:///${selectedFile.id}`);
28 + const model = monaco.editor.getModel(uri);
29 + invariant(model, "Model must exist for the selected input file.");
30 + renderForgetMarkers({ monaco, model, diagnostics });
31 + }, [diagnostics, monaco, selectedFile.id]);
32 +
33 + // Set tab width to 2 spaces for the selected input file.
34 + useEffect(() => {
35 + if (!monaco) return;
36 + const uri = monaco.Uri.parse(`file:///${selectedFile.id}`);
37 + const model = monaco.editor.getModel(uri);
38 + invariant(model, "Model must exist for the selected input file.");
39 + // N.B. that `tabSize` is a model property, not an editor property.
40 + // So, the tab size has to be set per model.
41 + model.updateOptions({ tabSize: 2 });
42 + }, [monaco, selectedFile.id]);
43 +
44 + useEffect(() => {
45 + if (!monaco) return;
46 + // Let Monaco Editor know of the input files so that its language
47 + // service can correctly resolve import statements.
48 + store.files.forEach((file) => {
49 + const lib = [file.content, `file:///${file.id}`] as const;
50 + monaco.languages.typescript.javascriptDefaults.addExtraLib(...lib);
51 + monaco.languages.typescript.typescriptDefaults.addExtraLib(...lib);
52 + });
53 + }, [monaco, store.files]);
54 +
55 + const handleChange = (value: string | undefined) => {
56 + if (!value) return;
57 +
58 + dispatchStore({
59 + type: "updateFile",
60 + payload: {
61 + file: createInputFile(store.selectedFileId, value),
62 + },
63 + });
64 + };
65 +
66 + const handleMount = (_: editor.IStandaloneCodeEditor, monaco: Monaco) => {
67 + setMonaco(monaco);
68 +
69 + // Ignore "can only be used in TypeScript files." errors, since
70 + // we want to support syntax highlighting for Flow (*.js) files
71 + // and Flow is not a built-in language.
72 + monaco.languages.typescript.javascriptDefaults.setDiagnosticsOptions({
73 + diagnosticCodesToIgnore: [
74 + 8002, 8003, 8004, 8005, 8006, 8008, 8009, 8010, 8011, 8012, 8013,
75 + ],
76 + noSemanticValidation: true,
77 + noSyntaxValidation: false,
78 + });
79 +
80 + const tscOptions = {
81 + allowNonTsExtensions: true,
82 + target: monaco.languages.typescript.ScriptTarget.ES2015,
83 + moduleResolution: monaco.languages.typescript.ModuleResolutionKind.NodeJs,
84 + jsx: monaco.languages.typescript.JsxEmit.Preserve,
85 + typeRoots: ["node_modules/@types"],
86 + allowSyntheticDefaultImports: true,
87 + };
88 + monaco.languages.typescript.javascriptDefaults.setCompilerOptions(
89 + tscOptions
90 + );
91 + monaco.languages.typescript.typescriptDefaults.setCompilerOptions({
92 + ...tscOptions,
93 + checkJs: true,
94 + allowJs: true,
95 + });
96 +
97 + // Add React type declarations to Monaco
98 + const reactLib = [
99 + React$Types,
100 + "file:///node_modules/@types/react/index.d.ts",
101 + ] as const;
102 + monaco.languages.typescript.javascriptDefaults.addExtraLib(...reactLib);
103 + monaco.languages.typescript.typescriptDefaults.addExtraLib(...reactLib);
104 +
105 + // Remeasure the font in case the custom font is loaded only after
106 + // Monaco Editor is mounted.
107 + // N.B. that this applies also to the output editor as it seems
108 + // Monaco Editor instances share the same font config.
109 + document.fonts.ready.then(() => {
110 + monaco.editor.remeasureFonts();
111 + });
112 + };
113 +
114 + return (
115 + <div className="relative flex flex-col flex-none border-r border-gray-200">
116 + <InputTabSelector />
117 + {/* Restrict MonacoEditor's height, since the config autoLayout:true
118 + will grow the editor to fit within parent element */}
119 + <div className="w-full h-monaco_small sm:h-monaco">
120 + <MonacoEditor
121 + path={selectedFile.id}
122 + // .js and .jsx files are specified to be TS so that Monaco can actually
123 + // check their syntax using its TS language service. They are still JS files
124 + // due to their extensions, so TS language features don't work.
125 + language={
126 + selectedFile.language === "javascript"
127 + ? "typescript"
128 + : selectedFile.language
129 + }
130 + value={selectedFile.content}
131 + onMount={handleMount}
132 + onChange={handleChange}
133 + options={monacoOptions}
134 + />
135 + </div>
136 + </div>
137 + );
138 +}
compiler/forget/packages/playground/components/Editor/InputTab.tsx new
+108
@@ -0,0 +1,108 @@
1 +/*
2 + * Copyright (c) Facebook, Inc. and its affiliates.
3 + */
4 +
5 +import XIcon from "@heroicons/react/solid/XIcon";
6 +import clsx from "clsx";
7 +import type { RefObject } from "react";
8 +import { memo, useEffect, useRef, useState } from "react";
9 +
10 +const MemoizedInputTab = memo(InputTab);
11 +
12 +export default MemoizedInputTab;
13 +
14 +function InputTab({
15 + tabId,
16 + autoFocus,
17 + allowEdit,
18 + isDeletable,
19 + borderColor,
20 + cursorStyle,
21 + onMountEffect,
22 + onSubmit,
23 + onDelete,
24 + onSwitchTab,
25 +}: {
26 + tabId: string;
27 + autoFocus: boolean;
28 + allowEdit: boolean;
29 + isDeletable: boolean;
30 + borderColor: string;
31 + cursorStyle: string;
32 + onMountEffect: (tabId: string, tabRef: RefObject<HTMLDivElement>) => void;
33 + onSubmit: (oldTabId: string, newTabId: string) => void;
34 + onDelete: (tabId: string) => void;
35 + onSwitchTab: (tabId: string) => void;
36 +}) {
37 + const [newTabId, setNewTabId] = useState(tabId);
38 + const tabIdWidth = `${newTabId.length}ch`;
39 + const [isEditing, setIsEditing] = useState(autoFocus);
40 + const tabRef = useRef<HTMLDivElement>(null);
41 +
42 + useEffect(() => {
43 + onMountEffect(tabId, tabRef);
44 + }, [tabId, onMountEffect]);
45 +
46 + return (
47 + <div
48 + ref={tabRef}
49 + className={clsx(
50 + "border-b-2 border-white px-2.5 py-0.5 h-full flex flex-1 items-center cursor-pointer",
51 + borderColor
52 + )}
53 + onClick={() => {
54 + onSwitchTab(tabId);
55 + }}
56 + >
57 + {isEditing ? (
58 + <form
59 + spellCheck={false}
60 + onSubmit={(e) => {
61 + e.preventDefault();
62 + onSubmit(tabId, newTabId);
63 + }}
64 + >
65 + <input
66 + type="text"
67 + autoFocus
68 + value={newTabId}
69 + style={{ width: tabIdWidth }}
70 + className={clsx("text-center bg-white outline-none", {
71 + "text-gray-500": isEditing,
72 + })}
73 + onChange={(e) => setNewTabId(e.target.value)}
74 + onBlur={(e) => {
75 + // Stop if clicking on delete button.
76 + if (e.relatedTarget && e.relatedTarget.id === "delete-button")
77 + return;
78 + setIsEditing(false);
79 + onSubmit(tabId, newTabId);
80 + }}
81 + />
82 + </form>
83 + ) : (
84 + <div
85 + style={{ width: tabIdWidth }}
86 + className={clsx("text-center", cursorStyle)}
87 + onClick={() => {
88 + if (allowEdit) setIsEditing(true);
89 + }}
90 + >
91 + {tabId}
92 + </div>
93 + )}
94 + {isDeletable ? (
95 + <button
96 + id="delete-button"
97 + className="relative top-[1px] z-10"
98 + onClick={(e) => {
99 + e.stopPropagation();
100 + onDelete(tabId);
101 + }}
102 + >
103 + <XIcon className="w-[18px] h-[18px] transition-colors duration-150 ease-in hover:fill-gray-800 fill-gray-500" />
104 + </button>
105 + ) : null}
106 + </div>
107 + );
108 +}
compiler/forget/packages/playground/components/Editor/InputTabSelector.tsx new
+203
@@ -0,0 +1,203 @@
1 +/*
2 + * Copyright (c) Facebook, Inc. and its affiliates.
3 + */
4 +
5 +import { PlusIcon } from "@heroicons/react/solid";
6 +import invariant from "invariant";
7 +import { useSnackbar } from "notistack";
8 +import { useState, type RefObject } from "react";
9 +import {
10 + checkInputFile,
11 + createInputFile,
12 + createMessage,
13 + MessageLevel,
14 + MessageSource,
15 + type Store,
16 +} from "../../lib/stores";
17 +import { useStore, useStoreDispatch } from "../StoreContext";
18 +import InputTab from "./InputTab";
19 +
20 +export default function InputTabSelector() {
21 + const store = useStore();
22 + const dispatchStore = useStoreDispatch();
23 + const [isCreating, setIsCreating] = useState(false);
24 + const tabIds = isCreating
25 + ? [...store.files.map((f) => f.id), generateUniqueFileId(store.files)]
26 + : store.files.map((f) => f.id);
27 + const { enqueueSnackbar } = useSnackbar();
28 +
29 + const handleMountEffect = (
30 + tabId: string,
31 + tabRef: RefObject<HTMLDivElement>
32 + ) => {
33 + const isPendingCreation = isCreating && tabIds[tabIds.length - 1] === tabId;
34 + if (isPendingCreation || store.selectedFileId === tabId) {
35 + // Scroll new or selected tab into view when loading the page, switching tabs,
36 + // and adding new tabs.
37 + tabRef.current?.scrollIntoView({
38 + block: "nearest",
39 + inline: "start",
40 + behavior: "smooth",
41 + });
42 + }
43 + };
44 +
45 + // Create a new tab.
46 + const handleAddTab = (_oldTabId: string, newTabId: string) => {
47 + try {
48 + const newTab = createInputFile(newTabId, "");
49 + checkInputFile(newTab, undefined, store);
50 +
51 + dispatchStore({
52 + type: "addFile",
53 + payload: { file: newTab },
54 + });
55 + setIsCreating(false);
56 + } catch (e) {
57 + if (e instanceof Error) {
58 + enqueueSnackbar(e.message, {
59 + variant: "message",
60 + ...createMessage(
61 + e.message,
62 + MessageLevel.Error,
63 + MessageSource.Playground
64 + ),
65 + });
66 + }
67 + }
68 + };
69 +
70 + // Update ID of an existing tab.
71 + const handleUpdateId = (oldTabId: string, newTabId: string) => {
72 + if (newTabId === oldTabId) return;
73 + const oldTab = store.files.find((f) => f.id === oldTabId);
74 + invariant(oldTab, "Tab being updated must exist.");
75 +
76 + try {
77 + const newTab = createInputFile(newTabId, oldTab.content);
78 + checkInputFile(newTab, oldTab, store);
79 +
80 + dispatchStore({
81 + type: "updateFile",
82 + payload: { oldFileId: oldTabId, file: newTab },
83 + });
84 + } catch (e) {
85 + if (e instanceof Error) {
86 + enqueueSnackbar(e.message, {
87 + variant: "message",
88 + ...createMessage(
89 + e.message,
90 + MessageLevel.Error,
91 + MessageSource.Playground
92 + ),
93 + });
94 + }
95 + }
96 + };
97 +
98 + const handleDeleteTab = (tabId: string) => {
99 + // Tab being created.
100 + if (isCreating) {
101 + setIsCreating(false);
102 + }
103 + // Existing tabs.
104 + else {
105 + const ok = confirm(`Are you sure you want to delete ${tabId}?`);
106 + if (!ok) return;
107 +
108 + dispatchStore({
109 + type: "deleteFile",
110 + payload: { fileId: tabId },
111 + });
112 + }
113 + };
114 +
115 + const handleSwitchTab = (tabId: string) => {
116 + const isPendingCreation = isCreating && tabIds[tabIds.length - 1] === tabId;
117 + if (!isPendingCreation) {
118 + dispatchStore({
119 + type: "switchInputTab",
120 + payload: { selectedFileId: tabId },
121 + });
122 + }
123 + };
124 +
125 + return (
126 + <div className="relative flex w-full border-b border-gray-200 h-9">
127 + <div className="flex h-full overflow-x-auto no-scrollbar">
128 + {tabIds.map((tabId, index) => {
129 + // Hide _app.js on UI.
130 + if (tabId === "_app.js") return;
131 +
132 + const isSelected = store.selectedFileId === tabId;
133 + const isPendingCreation = isCreating && index === tabIds.length - 1;
134 + const isIndexTab = index === 1;
135 + const isDeletable = !isIndexTab || isPendingCreation;
136 + const shouldDivide = index < tabIds.length - 1;
137 +
138 + return (
139 + <div
140 + className="flex items-center h-full"
141 + // So that once the new tab is created its states are reset,
142 + // essentially blurring its input field (especially when creating
143 + // the tab by pressing Enter).
144 + key={`${tabId}${isPendingCreation ? "_new" : ""}`}
145 + >
146 + <InputTab
147 + tabId={tabId}
148 + autoFocus={isPendingCreation}
149 + allowEdit={isSelected}
150 + isDeletable={isDeletable}
151 + borderColor={
152 + isPendingCreation
153 + ? "border-gray-400"
154 + : isSelected
155 + ? "border-link"
156 + : "border-white"
157 + }
158 + cursorStyle={
159 + isSelected || isPendingCreation
160 + ? "cursor-text"
161 + : "cursor-pointer"
162 + }
163 + onMountEffect={handleMountEffect}
164 + onSubmit={isPendingCreation ? handleAddTab : handleUpdateId}
165 + onDelete={handleDeleteTab}
166 + onSwitchTab={handleSwitchTab}
167 + />
168 + {shouldDivide && (
169 + <div className="w-[1px] h-[18px] border-gray-200 border-l mx-1" />
170 + )}
171 + </div>
172 + );
173 + })}
174 + </div>
175 + <button
176 + className="z-10 flex items-center justify-center flex-none w-8 h-full bg-transparent group"
177 + onClick={() => setIsCreating(true)}
178 + >
179 + <PlusIcon className="w-[18px] h-[18px] transition-colors duration-150 ease-in group-hover:fill-gray-800 fill-gray-500" />
180 + </button>
181 + <div className="absolute w-16 h-full right-8 bg-gradient-to-l from-white" />
182 + </div>
183 + );
184 +}
185 +
186 +/**
187 + * Generate a file ID different from those of exsiting @param inputFiles.
188 + */
189 +function generateUniqueFileId(inputFiles: Store["files"]) {
190 + let name = "Component";
191 + const ext = "js";
192 +
193 + let i = 0;
194 + while (true) {
195 + if (inputFiles.find((f) => f.id === `${name}.${ext}`)) {
196 + name = `Component${++i}`;
197 + } else {
198 + break;
199 + }
200 + }
201 +
202 + return `${name}.${ext}`;
203 +}
compiler/forget/packages/playground/components/Editor/Output.tsx new
+150
@@ -0,0 +1,150 @@
1 +/*
2 + * Copyright (c) Facebook, Inc. and its affiliates.
3 + */
4 +
5 +import MonacoEditor from "@monaco-editor/react";
6 +import {
7 + OutputKind,
8 + stringifyCompilerOutputs,
9 + type Diagnostic,
10 +} from "babel-plugin-react-forget";
11 +import clsx from "clsx";
12 +import { memo, useEffect, useMemo, useState } from "react";
13 +import compile from "../../lib/compilerDriver";
14 +import {
15 + getSelectedFile,
16 + getVisualizedGraphKind,
17 + isGraph,
18 + isVisualizedGraph,
19 + type OutputTabKind,
20 + type Store,
21 +} from "../../lib/stores";
22 +import GraphView from "../GraphView";
23 +import Preview from "../Preview";
24 +import { monacoOptions } from "./monacoOptions";
25 +
26 +const MemoizedOutput = memo(Output);
27 +
28 +export default MemoizedOutput;
29 +
30 +type Props = {
31 + store: Store;
32 + updateDiagnostics: (newDiags: Diagnostic[]) => void;
33 +};
34 +
35 +function Output({ store, updateDiagnostics }: Props) {
36 + const [selectedTab, setSelectedTab] = useState<OutputTabKind>("Preview");
37 + const { outputs, diagnostics } = useMemo(
38 + () => compile(getSelectedFile(store), store.compilerFlags),
39 + [store]
40 + );
41 + const prettyOutputs = useMemo(
42 + () => stringifyCompilerOutputs(outputs),
43 + [outputs]
44 + );
45 + const outputTabs = [
46 + ["Preview", "Preview"] as const,
47 + ...Object.entries(OutputKind),
48 + ];
49 +
50 + useEffect(() => {
51 + updateDiagnostics(diagnostics);
52 + }, [diagnostics, updateDiagnostics]);
53 +
54 + const outputContainer = () => {
55 + // Special-case Preview to keep it mounted, saving its state.
56 + if (selectedTab === "Preview") return null;
57 + if (isVisualizedGraph(selectedTab)) {
58 + const graphKind = getVisualizedGraphKind(selectedTab);
59 + return (
60 + <div className="w-full h-full overflow-auto">
61 + <GraphView graphs={outputs[graphKind]} />
62 + </div>
63 + );
64 + }
65 + return (
66 + <div className="w-full h-full">
67 + <MonacoEditor
68 + path={selectedTab}
69 + defaultLanguage="javascript"
70 + value={prettyOutputs[selectedTab] ?? "(Empty)"}
71 + options={{
72 + ...monacoOptions,
73 + readOnly: true,
74 + }}
75 + />
76 + </div>
77 + );
78 + };
79 +
80 + // TODO: Abstract into "TabbedWindow" component to reuse across input/output.
81 + // TODO: Add indicator that output tabs have overflowed as part of responsive design.
82 + return (
83 + <div className="flex flex-col w-full h-full">
84 + <div className="flex flex-none overflow-x-auto border-b border-gray-200 h-9 no-scrollbar">
85 + {outputTabs.map(([outputName, outputKind], index) => {
86 + const isGraphViewSelected = selectedTab === `Visualized${outputKind}`;
87 + const isTextViewSelected = selectedTab === outputKind;
88 + const shouldDivide = index < outputTabs.length - 1;
89 +
90 + return (
91 + <div className="flex items-center h-full" key={outputName}>
92 + <div
93 + className={clsx(
94 + "h-full border-b-2 border-white px-4 py-0.5 flex items-center",
95 + {
96 + "border-link": isTextViewSelected || isGraphViewSelected,
97 + }
98 + )}
99 + >
100 + <button
101 + disabled={isTextViewSelected}
102 + onClick={() => setSelectedTab(outputKind)}
103 + className="transition-colors duration-150 ease-in"
104 + >
105 + {outputName}
106 + </button>
107 + {isGraph(outputKind) ? (
108 + <button
109 + title={`Visualize ${outputName}`}
110 + onClick={() =>
111 + setSelectedTab(
112 + isGraphViewSelected
113 + ? outputKind
114 + : `Visualized${outputKind}`
115 + )
116 + }
117 + className="flex-none pl-2 group"
118 + >
119 + <div
120 + title={`Show visualized ${outputName}`}
121 + className={clsx(
122 + "px-1 text-sm font-medium tracking-wide uppercase rounded text-link bg-highlight whitespace-nowrap",
123 + {
124 + "bg-link text-highlight": isGraphViewSelected,
125 + }
126 + )}
127 + >
128 + Vis
129 + </div>
130 + </button>
131 + ) : null}
132 + </div>
133 + {shouldDivide && (
134 + <div className="w-[1px] h-[18px] border-gray-200 border-l mx-1" />
135 + )}
136 + </div>
137 + );
138 + })}
139 + </div>
140 + <div
141 + className={clsx("w-full h-full bg-card", {
142 + hidden: selectedTab !== "Preview",
143 + })}
144 + >
145 + <Preview store={store} />
146 + </div>
147 + {outputContainer()}
148 + </div>
149 + );
150 +}
compiler/forget/packages/playground/components/Editor/index.tsx new
+110
@@ -0,0 +1,110 @@
1 +/*
2 + * Copyright (c) Facebook, Inc. and its affiliates.
3 + */
4 +
5 +import { useDrag } from "@use-gesture/react";
6 +import type { Diagnostic } from "babel-plugin-react-forget";
7 +import clsx from "clsx";
8 +import invariant from "invariant";
9 +import { useSnackbar } from "notistack";
10 +import { useCallback, useDeferredValue, useState } from "react";
11 +import { useMountEffect, useWindowSize } from "../../hooks";
12 +import { defaultStore } from "../../lib/defaultStore";
13 +import {
14 + createMessage,
15 + initStoreFromUrlOrLocalStorage,
16 + MessageLevel,
17 + MessageSource,
18 + type Store,
19 +} from "../../lib/stores";
20 +import { useStore, useStoreDispatch } from "../StoreContext";
21 +import Input from "./Input";
22 +import Output from "./Output";
23 +import CompilerFlagsEditor from "./CompilerFlagsEditor";
24 +
25 +export default function Editor() {
26 + const store = useStore();
27 + const deferredStore = useDeferredValue(store);
28 + const dispatchStore = useStoreDispatch();
29 + const { enqueueSnackbar } = useSnackbar();
30 + const [showOutputOnMobile, setShowOutputOnMobile] = useState(false);
31 + const { width: windowWidth } = useWindowSize();
32 + const isMobile = windowWidth < 640;
33 + const [inputWidthInPct, setInputWidthInPct] = useState(50);
34 + const handleDrag = useDrag(({ delta: [x], xy: [currentPos] }) => {
35 + if (x !== 0) setInputWidthInPct(((currentPos + x) / windowWidth) * 100);
36 + });
37 + const [diagnostics, setDiagnostics] = useState<Diagnostic[]>([]);
38 + const updateDiagnostics = useCallback(
39 + (newDiags: Diagnostic[]) => setDiagnostics(newDiags),
40 + [setDiagnostics]
41 + );
42 +
43 + /**
44 + * Initialize store from encoded data or fallback to the default store.
45 + */
46 + useMountEffect(() => {
47 + let mountStore: Store;
48 + try {
49 + mountStore = initStoreFromUrlOrLocalStorage();
50 + } catch (e) {
51 + invariant(e instanceof Error, "Only Error may be caught.");
52 + enqueueSnackbar(e.message, {
53 + variant: "message",
54 + ...createMessage(
55 + "Bad URL - fell back to the default Playground.",
56 + MessageLevel.Info,
57 + MessageSource.Playground
58 + ),
59 + });
60 + mountStore = defaultStore;
61 + }
62 + dispatchStore({
63 + type: "setStore",
64 + payload: { store: mountStore },
65 + });
66 + });
67 +
68 + return (
69 + <>
70 + <div className="flex grow">
71 + <div
72 + style={{
73 + width: isMobile ? "100%" : `${inputWidthInPct}%`,
74 + }}
75 + className={clsx("relative sm:min-w-[300px] sm:block", {
76 + hidden: showOutputOnMobile,
77 + })}
78 + >
79 + <Input diagnostics={diagnostics} />
80 + <div
81 + {...handleDrag()}
82 + className="absolute w-[5px] top-0 h-full right-[-2px] flex-none hidden transition-opacity duration-300 ease-out opacity-0 hover:opacity-100 bg-gray-300 sm:block cursor-col-resize touch-pan-x z-50"
83 + />
84 + </div>
85 + <div
86 + style={{ width: isMobile ? "100%" : `${100 - inputWidthInPct}%` }}
87 + className={clsx("flex sm:flex flex-col sm:min-w-[300px]", {
88 + hidden: !showOutputOnMobile,
89 + })}
90 + >
91 + <Output store={deferredStore} updateDiagnostics={updateDiagnostics} />
92 + <div
93 + className={clsx("sm:block sm:min-h-[150px] border border-gray-200")}
94 + >
95 + <h3>Compiler Options</h3>
96 + <CompilerFlagsEditor />
97 + </div>
98 + </div>
99 + </div>
100 + <div className="bottom-4 left-4 sm:hidden">
101 + <button
102 + className="px-3 py-2 font-mono text-sm rounded-lg shadow-md bg-highlight text-link"
103 + onClick={() => setShowOutputOnMobile(!showOutputOnMobile)}
104 + >
105 + {showOutputOnMobile ? "< Code" : "Output >"}
106 + </button>
107 + </div>
108 + </>
109 + );
110 +}
compiler/forget/packages/playground/components/Editor/monacoOptions.ts new
+20
@@ -0,0 +1,20 @@
1 +/*
2 + * Copyright (c) Facebook, Inc. and its affiliates.
3 + */
4 +
5 +import type { EditorProps } from "@monaco-editor/react";
6 +
7 +export const monacoOptions: Partial<EditorProps["options"]> = {
8 + fontSize: 14,
9 + padding: { top: 8 },
10 + scrollbar: {
11 + verticalScrollbarSize: 10,
12 + },
13 + minimap: {
14 + enabled: false,
15 + },
16 + formatOnPaste: true,
17 + formatOnType: true,
18 + fontFamily: '"Source Code Pro", monospace',
19 + glyphMargin: true,
20 +};
compiler/forget/packages/playground/components/GraphView.tsx new
+48
@@ -0,0 +1,48 @@
1 +import { graphviz, wasmFolder } from "@hpcc-js/wasm";
2 +import { OutputKind, type CompilerOutputs } from "babel-plugin-react-forget";
3 +import { memo, useEffect, useState } from "react";
4 +import genDotProgram from "../lib/dotProgramGenerator";
5 +
6 +/*
7 + Look for graphvizlib.wasm in the /public folder.
8 + It's recommended to put the WASM files along with the JS files.
9 + See https://github.com/hpcc-systems/hpcc-js-wasm/#contents.
10 +*/
11 +wasmFolder("/");
12 +
13 +const MemoizedGraphView = memo(GraphView);
14 +
15 +export default MemoizedGraphView;
16 +
17 +function GraphView({
18 + graphs,
19 +}: {
20 + graphs:
21 + | CompilerOutputs[OutputKind.ValGraph]
22 + | CompilerOutputs[OutputKind.SCCGraph]
23 + | CompilerOutputs[OutputKind.RedGraph];
24 +}) {
25 + const [renderedGraphs, setRenderedGraphs] = useState<string[]>([]);
26 +
27 + useEffect(() => {
28 + async function generateGraph() {
29 + const svgs = [];
30 + for (const graph of graphs) {
31 + const svg = await graphviz.layout(genDotProgram(graph), "svg", "dot");
32 + svgs.push(svg);
33 + }
34 + setRenderedGraphs(svgs);
35 + }
36 +
37 + generateGraph();
38 + }, [graphs]);
39 +
40 + return (
41 + <>
42 + {renderedGraphs.map((graph, i) => (
43 + // TODO: Make an ID for each graph snapshot and use it as key here.
44 + <div dangerouslySetInnerHTML={{ __html: graph }} key={i} />
45 + ))}
46 + </>
47 + );
48 +}
compiler/forget/packages/playground/components/Header.tsx new
+92
@@ -0,0 +1,92 @@
1 +/*
2 + * Copyright (c) Facebook, Inc. and its affiliates.
3 + */
4 +
5 +import { RefreshIcon, ShareIcon, TrashIcon } from "@heroicons/react/outline";
6 +import { CheckIcon } from "@heroicons/react/solid";
7 +import { useSnackbar } from "notistack";
8 +import { useState } from "react";
9 +import { defaultStore, minimalStore } from "../lib/defaultStore";
10 +import Logo from "./Logo";
11 +import { useStoreDispatch } from "./StoreContext";
12 +
13 +export default function Header() {
14 + const [showCheck, setShowCheck] = useState(false);
15 + const dispatchStore = useStoreDispatch();
16 + const { closeSnackbar } = useSnackbar();
17 +
18 + const handleReset = () => {
19 + if (confirm("Are you sure you want to reset the playground?")) {
20 + /*
21 + Close open snackbars if any. This is necessary because when displaying
22 + outputs (Preview or not), we only close previous snackbars if we received
23 + new messages, which is needed in order to display "Bad URL" or success
24 + messages when loading Playground for the first time. Otherwise, messages
25 + such as "Bad URL" will be closed by the outputs calling `closeSnackbar`.
26 + */
27 + closeSnackbar();
28 + dispatchStore({ type: "setStore", payload: { store: defaultStore } });
29 + }
30 + };
31 +
32 + const handleWipe = () => {
33 + if (confirm("Are you sure you want to wipe the playground?")) {
34 + closeSnackbar();
35 + dispatchStore({ type: "setStore", payload: { store: minimalStore } });
36 + }
37 + };
38 +
39 + const handleShare = () => {
40 + navigator.clipboard.writeText(location.href).then(() => {
41 + setShowCheck(true);
42 + // Show the check mark icon briefly after URL is copied
43 + setTimeout(() => setShowCheck(false), 1000);
44 + });
45 + };
46 +
47 + return (
48 + <div className="flex items-center justify-between w-screen px-5 py-3 border-b border-gray-200">
49 + <div className="flex items-center flex-none h-full gap-2 text-lg">
50 + <Logo className="w-8 h-8 text-link" />
51 + <p className="hidden select-none sm:block">React Forget Playground</p>
52 + <div
53 + title="Do not share this outside of Meta"
54 + className="px-1 mb-px text-sm font-bold tracking-wide text-red-600 uppercase rounded bg-highlight dark:bg-highlight-dark whitespace-nowrap"
55 + >
56 + Private
57 + </div>
58 + </div>
59 + <div className="flex items-center text-[15px] gap-4">
60 + <button
61 + title="Wipe Playground"
62 + className="flex items-center gap-1 transition-colors duration-150 ease-in text-secondary hover:text-link"
63 + onClick={handleWipe}
64 + >
65 + <TrashIcon className="w-5 h-5" />
66 + <p className="hidden sm:block">Wipe</p>
67 + </button>
68 + <button
69 + title="Reset Playground"
70 + className="flex items-center gap-1 transition-colors duration-150 ease-in text-secondary hover:text-link"
71 + onClick={handleReset}
72 + >
73 + <RefreshIcon className="w-5 h-5" />
74 + <p className="hidden sm:block">Reset</p>
75 + </button>
76 + <button
77 + title="Copy sharable URL"
78 + className="flex items-center gap-1 transition-colors duration-150 ease-in text-secondary hover:text-link"
79 + onClick={handleShare}
80 + disabled={showCheck}
81 + >
82 + {!showCheck ? (
83 + <ShareIcon className="w-5 h-5" />
84 + ) : (
85 + <CheckIcon className="w-5 h-5 fill-blue-50" />
86 + )}
87 + <p className="hidden sm:block">Share</p>
88 + </button>
89 + </div>
90 + </div>
91 + );
92 +}
compiler/forget/packages/playground/components/Logo.tsx new
+25
@@ -0,0 +1,25 @@
1 +/*
2 + * Copyright (c) Facebook, Inc. and its affiliates.
3 + */
4 +
5 +// https://github.com/reactjs/reactjs.org/blob/main/beta/src/components/Logo.tsx
6 +
7 +export default function Logo(props: JSX.IntrinsicElements["svg"]) {
8 + return (
9 + <svg
10 + viewBox="0 0 410 369"
11 + fill="none"
12 + xmlns="http://www.w3.org/2000/svg"
13 + {...props}
14 + >
15 + <path
16 + d="M204.995 224.552C226.56 224.552 244.042 207.07 244.042 185.506C244.042 163.941 226.56 146.459 204.995 146.459C183.43 146.459 165.948 163.941 165.948 185.506C165.948 207.07 183.43 224.552 204.995 224.552Z"
17 + fill="currentColor"
18 + />
19 + <path
20 + d="M409.99 184.505C409.99 153.707 381.437 126.667 335.996 108.925C343.342 60.6535 334.19 22.3878 307.492 6.98883C283.649 -6.77511 250.631 -0.0395641 214.512 25.9753C211.316 28.2692 208.143 30.7097 204.97 33.2477C201.822 30.7097 198.65 28.2692 195.477 25.9753C159.359 -0.0395641 126.34 -6.79951 102.497 6.98883C75.8237 22.3878 66.6721 60.6291 74.0422 108.852C28.5529 126.618 0 153.682 0 184.505C0 215.303 28.5528 242.342 73.9934 260.084C66.6477 308.356 75.7993 346.621 102.497 362.02C110.575 366.682 119.727 369 129.684 369C149.085 369 171.61 360.215 195.477 343.034C198.674 340.74 201.847 338.3 205.019 335.762C208.167 338.3 211.34 340.74 214.512 343.034C238.38 360.239 260.905 369 280.306 369C290.263 369 299.415 366.682 307.492 362.02C331.335 348.256 342 316.287 337.534 271.993C337.143 268.089 336.631 264.135 335.996 260.109C381.461 242.367 409.99 215.327 409.99 184.505ZM225.934 41.8136C246.238 27.1955 265.127 19.5814 280.306 19.5814C286.871 19.5814 292.728 20.9968 297.731 23.8765C315.204 33.9798 322.672 62.9475 317.327 102.433C299.756 97.0401 280.306 92.9158 259.392 90.2802C246.872 73.8074 233.597 58.9453 220.003 46.2551C221.98 44.7421 223.957 43.229 225.934 41.8136ZM112.259 23.8765C117.262 20.9968 123.119 19.5814 129.684 19.5814C144.863 19.5814 163.752 27.1711 184.056 41.8136C186.033 43.229 188.01 44.7176 189.986 46.2551C176.393 58.9453 163.142 73.783 150.622 90.2558C129.732 92.8914 110.258 97.0401 92.687 102.409C87.3424 62.9475 94.7857 33.9798 112.259 23.8765ZM19.5233 184.505C19.5233 164.322 40.9014 143.359 77.776 128.253C81.9003 146.141 88.0502 165.054 96.1768 184.456C88.0014 203.881 81.8515 222.819 77.7272 240.732C40.9014 225.626 19.5233 204.687 19.5233 184.505ZM184.056 327.196C154.966 348.134 128.805 354.675 112.259 345.133C94.7857 335.029 87.3181 306.062 92.6626 266.576C110.234 271.969 129.684 276.093 150.598 278.729C163.117 295.202 176.393 310.064 189.986 322.754C188.01 324.292 186.033 325.78 184.056 327.196ZM204.995 310.04C180.591 287.685 157.138 257.815 137.347 223.551C132.051 214.4 121.344 191.396 117 182.489C113.535 190.786 110.112 198.398 107.427 206.5C109.623 210.575 118.092 229.213 120.434 233.288C125.071 241.317 129.928 249.127 134.931 256.692C120.898 254.227 107.915 251.055 96.1035 247.321C102.815 217.011 116.213 182.064 137.347 145.458C142.545 136.453 153.838 116.346 159.5 108C150.568 109.147 143.395 108.767 135 110.5C132.56 114.453 122.777 131.645 120.434 135.721C115.749 143.823 111.454 151.925 107.427 159.978C102.546 146.581 98.8124 133.744 96.1524 121.64C125.755 112.293 162.727 106.411 204.995 106.411C215.562 106.411 237.63 106.197 247.49 106.905C242.048 99.7544 237.38 93.2819 231.694 86.888C227.082 86.7416 209.705 86.888 204.995 86.888C195.672 86.888 186.545 87.2053 177.589 87.7422C186.472 77.1752 195.672 67.5111 204.995 58.9697C229.375 81.3239 252.851 111.195 272.643 145.458C277.841 154.463 289.073 175.426 293.49 184.505C296.98 176.207 300.281 168.64 302.99 160.489C300.793 156.389 291.898 139.747 289.555 135.696C284.918 127.667 280.062 119.858 275.059 112.317C289.092 114.782 302.075 117.954 313.886 121.688C307.175 151.998 293.777 186.945 272.643 223.551C267.445 232.556 252.651 253.178 246.99 261.524C255.922 260.377 265.595 258.663 273.99 256.93C276.43 252.976 287.212 237.364 289.555 233.288C294.216 225.235 298.512 217.182 302.489 209.153C307.224 222.185 310.982 234.997 313.715 247.394C284.138 256.741 247.214 262.598 204.995 262.598C194.428 262.598 169.859 261.208 160 260.5C165.442 267.65 171.304 275.095 176.99 281.489C181.602 281.635 200.285 282.121 204.995 282.121C214.317 282.121 223.444 281.804 232.401 281.267C223.493 291.834 214.317 301.498 204.995 310.04ZM297.731 345.133C281.185 354.699 254.999 348.159 225.934 327.196C223.957 325.78 221.98 324.292 220.003 322.754C233.597 310.064 246.848 295.226 259.367 278.753C280.233 276.118 299.659 271.993 317.205 266.625C317.547 269.089 317.888 271.554 318.132 273.97C321.72 309.649 314.277 335.566 297.731 345.133ZM332.262 240.756C328.065 222.599 321.842 203.686 313.813 184.578C321.988 165.152 328.138 146.215 332.262 128.302C369.088 143.408 390.466 164.322 390.466 184.505C390.466 204.687 369.113 225.626 332.262 240.756Z"
21 + fill="currentColor"
22 + />
23 + </svg>
24 + );
25 +}
compiler/forget/packages/playground/components/Message.tsx new
+77
@@ -0,0 +1,77 @@
1 +import {
2 + BanIcon,
3 + ExclamationIcon,
4 + InformationCircleIcon,
5 + XIcon,
6 +} from "@heroicons/react/solid";
7 +import { CustomContentProps, SnackbarContent, useSnackbar } from "notistack";
8 +import { forwardRef } from "react";
9 +import { MessageLevel, MessageSource } from "../lib/stores";
10 +
11 +// https://notistack.com/examples/advanced/custom-component#custom-variant-(typescript)
12 +declare module "notistack" {
13 + interface VariantOverrides {
14 + message: {
15 + title: string;
16 + level: MessageLevel;
17 + codeframe: string | undefined;
18 + };
19 + }
20 +}
21 +
22 +interface MessageProps extends CustomContentProps {
23 + title: string;
24 + level: MessageLevel;
25 + source: MessageSource;
26 + codeframe: string | undefined;
27 +}
28 +
29 +const Message = forwardRef<HTMLDivElement, MessageProps>(
30 + ({ id, title, level, source, codeframe }, ref) => {
31 + const { closeSnackbar } = useSnackbar();
32 + const isDismissible = source !== MessageSource.Playground;
33 +
34 + return (
35 + <SnackbarContent
36 + ref={ref}
37 + className="flex items-start justify-between gap-3 px-4 py-3 text-sm bg-white border rounded-md shadow w-toast"
38 + >
39 + <div className="flex gap-3 w-toast-body">
40 + {level === MessageLevel.Warning ? (
41 + <div className="flex items-center justify-center flex-none rounded-md w-7 h-7 bg-amber-100">
42 + <ExclamationIcon className="w-5 h-5 text-amber-600" />
43 + </div>
44 + ) : level === MessageLevel.Error ? (
45 + <div className="flex items-center justify-center flex-none bg-red-100 rounded-md w-7 h-7">
46 + <BanIcon className="w-5 h-5 text-red-600" />
47 + </div>
48 + ) : (
49 + <div className="flex items-center justify-center flex-none rounded-md bg-sky-100 w-7 h-7">
50 + <InformationCircleIcon className="w-5 h-5 text-sky-600" />
51 + </div>
52 + )}
53 + <div className="flex flex-col justify-center gap-1 w-toast-title">
54 + <p className="w-full">{title}</p>
55 + {codeframe ? (
56 + <pre className="overflow-x-auto break-words whitespace-pre-wrap">
57 + <code className="text-xs">{codeframe}</code>
58 + </pre>
59 + ) : null}
60 + </div>
61 + </div>
62 + {isDismissible ? (
63 + <button
64 + className="flex items-center justify-center flex-none transition-colors duration-150 ease-in rounded-md justify-self-end group w-7 h-7 hover:bg-gray-200"
65 + onClick={() => closeSnackbar(id)}
66 + >
67 + <XIcon className="w-5 h-5 fill-gray-500 group-hover:fill-gray-800" />
68 + </button>
69 + ) : null}
70 + </SnackbarContent>
71 + );
72 + }
73 +);
74 +
75 +Message.displayName = "MessageComponent";
76 +
77 +export default Message;
compiler/forget/packages/playground/components/Preview.tsx new
+137
@@ -0,0 +1,137 @@
1 +/*
2 + * Copyright (c) Facebook, Inc. and its affiliates.
3 + */
4 +
5 +import LightBulbIcon from "@heroicons/react/solid/LightBulbIcon";
6 +import { FormControlLabel, Switch } from "@mui/material";
7 +import clsx from "clsx";
8 +import invariant from "invariant";
9 +import { useEffect, useRef, useState } from "react";
10 +import { useMountEffect } from "../hooks";
11 +import { bundle, BundleResult, defaultBundleRes } from "../lib/moduleBundler";
12 +import { Store } from "../lib/stores";
13 +
14 +const srcDoc = `
15 +<!DOCTYPE html>
16 +<html lang="en">
17 + <head>
18 + <meta charset="UTF-8" />
19 + <meta name="viewport" content="width=device-width, initial-scale=1.0" />
20 + <meta http-equiv="X-UA-Compatible" content="ie=edge" />
21 + <script>
22 + // Enable DevTools to inspect React inside of an <iframe>
23 + // This must run before React is loaded
24 + __REACT_DEVTOOLS_GLOBAL_HOOK__ = parent.__REACT_DEVTOOLS_GLOBAL_HOOK__;
25 + </script>
26 + <script>
27 + window.addEventListener("message", async ({ data }) => {
28 + try {
29 + const { event, source, id } = data;
30 + if (event === "CodeUpdate") {
31 + const encodedCode = encodeURIComponent(source);
32 + const dataUri = "data:text/javascript;charset=utf-8," + encodedCode;
33 + await import(dataUri);
34 + }
35 + } catch (e) {
36 + console.error(e);
37 + }
38 + });
39 + </script>
40 + </head>
41 + <body>
42 + <div id="app" />
43 + </body>
44 +</html>
45 +`;
46 +
47 +enum MessageType {
48 + CodeUpdate = "CodeUpdate",
49 +}
50 +
51 +export default function Preview({ store }: { store: Store }) {
52 + const [iframeReady, setIframeReady] = useState(false);
53 + const iframeRef = useRef<HTMLIFrameElement>(null);
54 + const [bundleRes, setBundleRes] = useState<BundleResult>(defaultBundleRes);
55 + const [enableForget, setEnableForget] = useState<boolean>(true);
56 + // used to invalidate import cache (when toggling enableForget)
57 + const [toggleCount, setToggleCount] = useState<number>(0);
58 +
59 + useMountEffect(() => {
60 + if (!iframeRef || !iframeRef.current) return;
61 + iframeRef.current.srcdoc = srcDoc;
62 + iframeRef.current.addEventListener("load", () => {
63 + setIframeReady(true);
64 + });
65 + });
66 +
67 + // Perform async operations which will trigger a 2nd render.
68 + useEffect(() => {
69 + async function bundleInputs() {
70 + const bundleRes = await bundle(store.files, store.compilerFlags);
71 + setBundleRes(bundleRes);
72 + }
73 + bundleInputs();
74 + }, [store.files, store.compilerFlags]);
75 +
76 + // Synchronzie with iframe and messaging UIs.
77 + useEffect(() => {
78 + if (!bundleRes) return;
79 + const { res } = bundleRes;
80 +
81 + if (iframeReady && res) {
82 + iframeRef.current!.contentWindow!.postMessage({
83 + event: MessageType.CodeUpdate,
84 + source: res.getCode(enableForget ? "after" : "before", toggleCount),
85 + });
86 + }
87 + }, [iframeReady, bundleRes, store.selectedFileId, enableForget, toggleCount]);
88 +
89 + const diff = bundleRes.res?.codeSizeDiff;
90 + const showCodeSizeChange = diff != null && enableForget;
91 +
92 + const ticker = (percentage: number) => (
93 + <>
94 + {percentage >= 0 ? "increased" : "decreased"} by{" "}
95 + <span
96 + className={clsx("text-red-600", {
97 + "text-emerald-600": percentage <= 0,
98 + })}
99 + >
100 + {Math.abs(percentage).toFixed(2)}%
101 + </span>
102 + </>
103 + );
104 +
105 + return (
106 + <div className="flex flex-col w-full h-full">
107 + <FormControlLabel
108 + className={"mx-3"}
109 + control={
110 + <Switch
111 + checked={enableForget}
112 + onChange={(e) => {
113 + setEnableForget(e.target.checked);
114 + setToggleCount(toggleCount + 1);
115 + }}
116 + />
117 + }
118 + label="Compile using Forget?"
119 + />
120 + {showCodeSizeChange && (
121 + <div className="flex items-center gap-1 p-2 bg-slate-200">
122 + <LightBulbIcon className="flex-none w-5 h-5 text-yellow-500" />
123 + <p className="text-sm">
124 + Compiled code size {ticker(diff.minPercent)} ({diff.min} minified)
125 + and {ticker(diff.gzipPercent)} ({diff.gzip} minified & gzipped) from
126 + the original.
127 + </p>
128 + </div>
129 + )}
130 + <iframe
131 + title="React Forget Playground"
132 + ref={iframeRef}
133 + className="flex-1 w-full"
134 + />
135 + </div>
136 + );
137 +}
compiler/forget/packages/playground/components/StoreContext.tsx new
+151
@@ -0,0 +1,151 @@
1 +/*
2 + * Copyright (c) Facebook, Inc. and its affiliates.
3 + */
4 +
5 +import type { Dispatch, ReactNode } from "react";
6 +import { useReducer } from "react";
7 +import createContext from "../lib/createContext";
8 +import { emptyStore } from "../lib/defaultStore";
9 +import type { InputFile, Store } from "../lib/stores";
10 +import { saveStore } from "../lib/stores";
11 +import { ForgetCompilerFlags } from "../lib/compilerDriver";
12 +
13 +const StoreContext = createContext<Store>();
14 +
15 +/**
16 + * Hook to access the store.
17 + */
18 +export const useStore = StoreContext.useContext;
19 +
20 +const StoreDispatchContext = createContext<Dispatch<ReducerAction>>();
21 +
22 +/**
23 + * Hook to access the store dispatch function.
24 + */
25 +export const useStoreDispatch = StoreDispatchContext.useContext;
26 +
27 +/**
28 + * Make Store and dispatch function available to all sub-components in children.
29 + */
30 +export function StoreProvider({ children }: { children: ReactNode }) {
31 + const [store, dispatch] = useReducer(storeReducer, emptyStore);
32 +
33 + return (
34 + <StoreContext.Provider value={store}>
35 + <StoreDispatchContext.Provider value={dispatch}>
36 + {children}
37 + </StoreDispatchContext.Provider>
38 + </StoreContext.Provider>
39 + );
40 +}
41 +
42 +type ReducerAction =
43 + | {
44 + type: "setStore";
45 + payload: {
46 + store: Store;
47 + };
48 + }
49 + | {
50 + type: "addFile";
51 + payload: {
52 + file: InputFile;
53 + };
54 + }
55 + | {
56 + type: "updateFile";
57 + payload: {
58 + file: InputFile;
59 + oldFileId?: string;
60 + };
61 + }
62 + | {
63 + type: "deleteFile";
64 + payload: { fileId: string };
65 + }
66 + | {
67 + type: "switchInputTab";
68 + payload: { selectedFileId: string };
69 + }
70 + | {
71 + type: "setCompilerFlag";
72 + payload: { flag: keyof ForgetCompilerFlags; value: boolean };
73 + };
74 +
75 +function storeReducer(store: Store, action: ReducerAction): Store {
76 + switch (action.type) {
77 + case "setStore": {
78 + const newStore = action.payload.store;
79 +
80 + saveStore(newStore);
81 + return newStore;
82 + }
83 + case "addFile": {
84 + const { file } = action.payload;
85 +
86 + const newStore = {
87 + ...store,
88 + files: [...store.files, file],
89 + selectedFileId: file.id,
90 + };
91 +
92 + saveStore(newStore);
93 + return newStore;
94 + }
95 + case "updateFile": {
96 + const { file, oldFileId } = action.payload;
97 +
98 + const newStore = {
99 + ...store,
100 + files: store.files.map((f) =>
101 + f.id === file.id || f.id === oldFileId ? file : f
102 + ),
103 + selectedFileId: file.id,
104 + };
105 +
106 + saveStore(newStore);
107 + return newStore;
108 + }
109 + case "deleteFile": {
110 + const { fileId } = action.payload;
111 +
112 + // If the current selected file is deleted, fall back to selecting
113 + // the index file (at index 1 of the files array).
114 + const fallbackFileId =
115 + store.selectedFileId === fileId
116 + ? store.files[1].id
117 + : store.selectedFileId;
118 +
119 + const newStore = {
120 + ...store,
121 + files: store.files.filter((f) => f.id !== fileId),
122 + selectedFileId: fallbackFileId,
123 + };
124 +
125 + saveStore(newStore);
126 + return newStore;
127 + }
128 + case "switchInputTab": {
129 + const { selectedFileId } = action.payload;
130 +
131 + const newStore = {
132 + ...store,
133 + selectedFileId: selectedFileId,
134 + };
135 +
136 + saveStore(newStore);
137 + return newStore;
138 + }
139 + case "setCompilerFlag": {
140 + const { flag, value } = action.payload;
141 +
142 + const newStore = {
143 + ...store,
144 + compilerFlags: { ...store.compilerFlags },
145 + };
146 + newStore.compilerFlags[flag] = value;
147 + saveStore(newStore);
148 + return newStore;
149 + }
150 + }
151 +}
compiler/forget/packages/playground/components/index.ts new
+7
@@ -0,0 +1,7 @@
1 +/*
2 + * Copyright (c) Facebook, Inc. and its affiliates.
3 + */
4 +
5 +export { default as Editor } from "./Editor";
6 +export { default as Header } from "./Header";
7 +export { StoreProvider } from "./StoreContext";
compiler/forget/packages/playground/hooks/index.ts new
+6
@@ -0,0 +1,6 @@
1 +/*
2 + * Copyright (c) Facebook, Inc. and its affiliates.
3 + */
4 +
5 +export { default as useMountEffect } from "./useMountEffect";
6 +export { default as useWindowSize } from "./useWindowSize";
compiler/forget/packages/playground/hooks/useMountEffect.ts new
+10
@@ -0,0 +1,10 @@
1 +/*
2 + * Copyright (c) Facebook, Inc. and its affiliates.
3 + */
4 +
5 +import type { EffectCallback } from "react";
6 +import { useEffect } from "react";
7 +
8 +export default function useMountEffect(effect: EffectCallback) {
9 + return useEffect(effect, []);
10 +}
compiler/forget/packages/playground/hooks/useWindowSize.ts new
+32
@@ -0,0 +1,32 @@
1 +/*
2 + * Copyright (c) Facebook, Inc. and its affiliates.
3 + */
4 +
5 +import { useState } from "react";
6 +import useMountEffect from "./useMountEffect";
7 +
8 +/**
9 + * @returns the latest window width and height before/after
10 + * resizing the window.
11 + */
12 +export default function useWindowSize() {
13 + const [windowSize, setWindowSize] = useState({
14 + width: 0,
15 + height: 0,
16 + });
17 +
18 + useMountEffect(() => {
19 + setWindowSize({ width: window.innerWidth, height: window.innerHeight });
20 + });
21 +
22 + useMountEffect(() => {
23 + function handleResize() {
24 + setWindowSize({ width: window.innerWidth, height: window.innerHeight });
25 + }
26 +
27 + window.addEventListener("resize", handleResize);
28 + return () => window.removeEventListener("resize", handleResize);
29 + });
30 +
31 + return windowSize;
32 +}
compiler/forget/packages/playground/lib/compilerDriver.ts new
+91
@@ -0,0 +1,91 @@
1 +/*
2 + * Copyright (c) Facebook, Inc. and its affiliates.
3 + */
4 +
5 +import type { PluginItem, TransformOptions } from "@babel/core";
6 +import { transform } from "@babel/standalone";
7 +import ReactForgetBabelPlugin, {
8 + createArrayLogger,
9 + createCompilerOutputs,
10 + getMostRecentCompilerContext,
11 + OutputKind,
12 + type CompilerContext,
13 + type CompilerOptions,
14 + type CompilerOutputs,
15 + type Diagnostic,
16 +} from "babel-plugin-react-forget";
17 +import type { InputFile } from "./stores";
18 +import { getBabelPlugins } from "./utils";
19 +
20 +declare global {
21 + var Forget$Context: CompilerContext;
22 +}
23 +export type ForgetCompilerFlags = CompilerOptions["flags"];
24 +
25 +interface CompileResult {
26 + outputs: CompilerOutputs;
27 + diagnostics: Diagnostic[];
28 +}
29 +
30 +export default function compile(
31 + file: InputFile,
32 + compilerFlags: ForgetCompilerFlags
33 +): CompileResult {
34 + const outputs = createCompilerOutputs();
35 +
36 + // Bail out if file is CSS.
37 + if (file.language === "css") {
38 + return {
39 + outputs,
40 + diagnostics: [],
41 + };
42 + }
43 +
44 + const forgetLogs: string[] = [];
45 + const forgetPlaygroundOptions: Partial<CompilerOptions> = {
46 + logger: createArrayLogger(forgetLogs),
47 + outputKinds: Object.values(OutputKind),
48 + };
49 + if (compilerFlags) {
50 + forgetPlaygroundOptions.flags = compilerFlags;
51 + }
52 +
53 + const babelPlugins = getBabelPlugins(
54 + file.language,
55 + true,
56 + forgetPlaygroundOptions
57 + );
58 + const babelOptions: TransformOptions = {
59 + compact: true,
60 + plugins: babelPlugins,
61 + filename: file.id,
62 + };
63 +
64 + try {
65 + const result = transform(file.content, babelOptions);
66 +
67 + // Don't throw if resulting code is any string. This includes the
68 + // empty string, which is when `source` is an empty string.
69 + if (typeof result?.code !== "string") {
70 + throw new Error("Compilation Failed.");
71 + }
72 +
73 + const context = getMostRecentCompilerContext();
74 + // assign to global for interactive debugging
75 + globalThis.Forget$Context = context;
76 + const { outputs } = context;
77 + outputs[OutputKind.JS] = result.code;
78 +
79 + return {
80 + outputs,
81 + diagnostics: context.diagnostics,
82 + };
83 + } catch (e) {
84 + const context = getMostRecentCompilerContext();
85 +
86 + return {
87 + outputs,
88 + diagnostics: context.diagnostics,
89 + };
90 + }
91 +}
compiler/forget/packages/playground/lib/createContext.ts new
+34
@@ -0,0 +1,34 @@
1 +/*
2 + * Copyright (c) Facebook, Inc. and its affiliates.
3 + */
4 +
5 +import React from "react";
6 +
7 +/**
8 + * Replacement to React.createContext.
9 + *
10 + * Does not take any default value and avoids non-null assertions when using
11 + * the value of the context, like the following scenario.
12 + *
13 + * ```ts
14 + * const StoreDispatchContext = useContext<Dispatch<ReducerAction>>(null);
15 + * const dispatchStore = useContext(StoreDispatchContext);
16 + * ...
17 + * dipatchStore!({ ... });
18 + * ```
19 + *
20 + * Instead, it throws an error when `useContext` is not called within a
21 + * Provider with a value.
22 + */
23 +export default function createContext<T>() {
24 + const context = React.createContext<T | null>(null);
25 +
26 + function useContext() {
27 + const c = React.useContext(context);
28 + if (!c)
29 + throw new Error("useContext must be within a Provider with a value");
30 + return c;
31 + }
32 +
33 + return { useContext, Provider: context.Provider };
34 +}
compiler/forget/packages/playground/lib/defaultStore.ts new
+232
@@ -0,0 +1,232 @@
1 +/*
2 + * Copyright (c) Facebook, Inc. and its affiliates.
3 + */
4 +
5 +import type { Store } from "./stores";
6 +import { createInputFile } from "./stores";
7 +import { createCompilerFlags } from "babel-plugin-react-forget";
8 +
9 +// Entry point to rendering Preview.
10 +const _app = `\
11 +import { createRoot } from "react-dom/client";
12 +import Home from "./index";
13 +
14 +// Persist the root in the global scope.
15 +let root = globalThis.Forget$PlaygroundRoot;
16 +if (!root) {
17 + root = createRoot(document.getElementById("app"));
18 + globalThis.Forget$PlaygroundRoot = root;
19 +}
20 +
21 +root.render(<Home />);
22 +`;
23 +
24 +// TODO: Add banner similar to the one in Preview to aid the user
25 +// instead of using the comment below.
26 +const index = `\
27 +import { useState } from "react";
28 +import "./styles.css";
29 +import Task from "./Task";
30 +import AddTask from "./AddTask";
31 +
32 +const initialTasks = [
33 + { id: 0, text: "Buy milk", done: true },
34 + { id: 1, text: "Eat tacos", done: false },
35 + { id: 2, text: "Brew tea", done: false },
36 +];
37 +
38 +function TaskBoard() {
39 + const [tasks, setTasks] = useState(initialTasks);
40 + const onChangeTask = task =>
41 + setTasks(ts => ts.map(t => (t.id === task.id ? task : t)));
42 +
43 + return (
44 + <div>
45 + <AddTask setTasks={setTasks} />
46 + {tasks.map(task => (
47 + <Task key={task.id} task={task} onChange={onChangeTask} />
48 + ))}
49 + </div>
50 + );
51 +}
52 +
53 +// Default export a React component to render in the Preview.
54 +export default TaskBoard;
55 +`;
56 +
57 +const task = `\
58 +import { useState, useRef } from "react";
59 +
60 +export default function Task({ task, onChange }) {
61 + const count = useRef(0);
62 + const [isEditing, setIsEditing] = useState(false);
63 +
64 + let taskContent;
65 + if (isEditing) {
66 + taskContent = (
67 + <>
68 + <input
69 + value={task.text}
70 + onChange={e => {
71 + onChange({
72 + ...task,
73 + text: e.target.value,
74 + });
75 + }}
76 + />
77 + <button onClick={() => setIsEditing(false)}>Save</button>
78 + </>
79 + )
80 + } else {
81 + taskContent = (
82 + <>
83 + {task.text}
84 + <button onClick={() => setIsEditing(true)}>Edit</button>
85 + </>
86 + )
87 + }
88 +
89 + return (
90 + <li>
91 + <label>
92 + <input
93 + type="checkbox"
94 + checked={task.done}
95 + onChange={e => {
96 + onChange({
97 + ...task,
98 + done: e.target.checked,
99 + });
100 + }}
101 + />
102 + {taskContent}
103 + {count.current++}
104 + </label>
105 + </li>
106 + );
107 +}`;
108 +
109 +const addTask = `\
110 +import { useState } from "react";
111 +
112 +const defaultTask = "Code bugs";
113 +let nextId = 3;
114 +
115 +export default function AddTask({ setTasks }) {
116 + const [text, setText] = useState(defaultTask);
117 + const handleAddTask = (text) => {
118 + setTasks((ts) => [
119 + ...ts,
120 + {
121 + id: nextId++,
122 + text: text,
123 + done: false,
124 + },
125 + ]);
126 + };
127 +
128 + return (
129 + <>
130 + <input
131 + placeholder="Add task"
132 + value={text}
133 + onChange={(e) => setText(e.target.value)}
134 + />
135 + <button
136 + onClick={() => {
137 + setText(defaultTask);
138 + handleAddTask(text);
139 + }}
140 + >
141 + Add
142 + </button>
143 + </>
144 + );
145 +}
146 +`;
147 +
148 +const styles = `\
149 +* {
150 + box-sizing: border-box;
151 +}
152 +
153 +body {
154 + font-family: "Optimistic Display App", sans-serif;
155 + margin: 20px;
156 + padding: 0;
157 +}
158 +
159 +h1 {
160 + margin-top: 0;
161 + font-size: 22px;
162 +}
163 +
164 +h2 {
165 + margin-top: 0;
166 + font-size: 20px;
167 +}
168 +
169 +h3 {
170 + margin-top: 0;
171 + font-size: 18px;
172 +}
173 +
174 +h4 {
175 + margin-top: 0;
176 + font-size: 16px;
177 +}
178 +
179 +h5 {
180 + margin-top: 0;
181 + font-size: 14px;
182 +}
183 +
184 +h6 {
185 + margin-top: 0;
186 + font-size: 12px;
187 +}
188 +
189 +ul {
190 + padding-left: 20px;
191 +}
192 +
193 +button { margin: 5px; }
194 +li { list-style-type: none; }
195 +ul, li { margin: 0; padding: 0; }
196 +`;
197 +
198 +const defaultFiles: Store["files"] = [
199 + // Hidden tab.
200 + createInputFile("_app.js", _app),
201 + createInputFile("index.js", index),
202 + createInputFile("Task.js", task),
203 + createInputFile("AddTask.js", addTask),
204 + createInputFile("styles.css", styles),
205 +];
206 +
207 +export const defaultStore: Store = {
208 + files: defaultFiles,
209 + selectedFileId: "index.js",
210 + compilerFlags: createCompilerFlags(),
211 +};
212 +
213 +const minimalIndex = `\
214 +export default function MyApp() {
215 + return <div>Hello World</div>;
216 +}
217 +`;
218 +
219 +export const minimalStore: Store = {
220 + files: [
221 + createInputFile("_app.js", _app),
222 + createInputFile("index.js", minimalIndex),
223 + ],
224 + selectedFileId: "index.js",
225 + compilerFlags: createCompilerFlags(),
226 +};
227 +
228 +export const emptyStore: Store = {
229 + files: [createInputFile("_app.js", _app)],
230 + selectedFileId: "_app.js",
231 + compilerFlags: createCompilerFlags(),
232 +};
compiler/forget/packages/playground/lib/dotProgramGenerator.ts new
+173
@@ -0,0 +1,173 @@
1 +/*
2 + * Copyright (c) Facebook, Inc. and its affiliates.
3 + */
4 +
5 +// TODO: Add transform tests for these.
6 +
7 +import { SCCGraph, ValGraph } from "babel-plugin-react-forget";
8 +import invariant from "invariant";
9 +
10 +const dotPrologue = `\
11 + compound=true;
12 + node [shape=rect, fontsize=11];
13 +`;
14 +
15 +export default function genDotProgram(graph: ValGraph | SCCGraph): string {
16 + return graph instanceof ValGraph
17 + ? genValGraphDotProgram(graph)
18 + : genSCCGraphDotProgram(graph);
19 +}
20 +
21 +function genValGraphDotProgram(graph: ValGraph): string {
22 + const stmts: string[] = [];
23 + // Stringified Val => Node ID.
24 + const nodeTable = new Map<string, string>();
25 +
26 + // Nodes
27 + graph.vertices.forEach(({ val }, i) => {
28 + const id = `node${i}`;
29 + const node = genDotNode(id, val.pretty);
30 + stmts.push(node);
31 + nodeTable.set(val.toString(), id);
32 + });
33 +
34 + // Edges (dependency => dependent)
35 + graph.vertices.forEach(({ val, incomings }) => {
36 + const destinationId = getNodeId(nodeTable, val.toString());
37 + incomings.forEach((sourceVal) => {
38 + const sourceId = getNodeId(nodeTable, sourceVal.toString());
39 + const edge = genDotEdge(sourceId, destinationId);
40 + stmts.push(edge);
41 + });
42 + });
43 +
44 + return `\
45 + digraph G {
46 + ${dotPrologue}
47 + ${stmts.join("\n")}
48 + }
49 + `;
50 +}
51 +
52 +function genSCCGraphDotProgram(graph: SCCGraph): string {
53 + const stmts: string[] = [];
54 + // Stringified SCCVertex => subgraph ID + representative node ID.
55 + const subGraphTable = new Map<string, SubgraphId>();
56 + // Stringified Val => Node ID.
57 + const nodeTable = new Map<string, string>();
58 + let nodeCount = 0;
59 +
60 + // Subgraphs
61 + graph.vertices.forEach((sccVertex, i) => {
62 + const id = `cluster_${i}`;
63 +
64 + // Nodes
65 + const nodes = sccVertex.members.map(({ val }) => {
66 + const nodeId = `node${nodeCount++}`;
67 + nodeTable.set(val.toString(), nodeId);
68 + return genDotNode(nodeId, val.pretty);
69 + });
70 +
71 + const subgraph = genDotSubgraph(id, nodes);
72 + stmts.push(subgraph);
73 + subGraphTable.set(sccVertex.toString(), {
74 + id,
75 + repNodeId: `node${nodeCount - 1}`,
76 + });
77 + });
78 +
79 + // Edges
80 + graph.vertices.forEach((sccVertex) => {
81 + const { id: destinationId, repNodeId: destinationNodeId } = getSubgraphId(
82 + subGraphTable,
83 + sccVertex.toString()
84 + );
85 +
86 + // RedGraph: input node => subgraph
87 + sccVertex.inputs.forEach((input) => {
88 + const inputNodeId = getNodeId(nodeTable, input.toString());
89 + // Prevent self-loops on reactive inputs.
90 + if (inputNodeId !== destinationNodeId) {
91 + const edge = genDotEdge(inputNodeId, destinationNodeId, {
92 + lhead: destinationId,
93 + });
94 + stmts.push(edge);
95 + }
96 + });
97 +
98 + // SCCGraph: dependency subgraph => dependent subgraph
99 + sccVertex.incomings.forEach((sourceValVertices) => {
100 + const stringifiedSCCVertex = `[${sourceValVertices
101 + .map(({ val }) => val.toString())
102 + .join(",")}]`;
103 + const { id: sourceId, repNodeId: sourceNodeId } = getSubgraphId(
104 + subGraphTable,
105 + stringifiedSCCVertex
106 + );
107 + // Since Dot doesn't allow connecting two subgraphs directly, we
108 + // instead connect each of their representative nodes and specify
109 + // that the head and tail of the edge should attach to subgraphs instead.
110 + const edge = genDotEdge(sourceNodeId, destinationNodeId, {
111 + ltail: sourceId,
112 + lhead: destinationId,
113 + });
114 + stmts.push(edge);
115 + });
116 + });
117 +
118 + return `\
119 + digraph G {
120 + ${dotPrologue}
121 + ${stmts.join("\n")}
122 + }
123 + `;
124 +}
125 +
126 +function genDotNode(id: string, label: string): string {
127 + return `${id} [id="${id}", label="${label}"];`;
128 +}
129 +
130 +function genDotEdge(
131 + sourceNode: string,
132 + destinationNode: string,
133 + options?: { ltail?: string; lhead?: string }
134 +): string {
135 + const edge = `${sourceNode} -> ${destinationNode}`;
136 + const attrs = options
137 + ? `[ltail=${options.ltail ?? `""`}, lhead=${
138 + options.lhead ?? `""`
139 + }, minlen=3]`
140 + : undefined;
141 + return [edge, attrs].filter(Boolean).join(" ");
142 +}
143 +
144 +function genDotSubgraph(id: string, stmts: string[]): string {
145 + return `\
146 + subgraph ${id} {
147 + style=filled;
148 + color="#EBECF0";
149 + ${stmts.join("\n")}
150 + }
151 + `;
152 +}
153 +
154 +function getNodeId(nodeTable: Map<string, string>, label: string): string {
155 + const id = nodeTable.get(label);
156 + invariant(id, `Could not find Node ID for label: %s`, label);
157 + return id;
158 +}
159 +
160 +interface SubgraphId {
161 + id: string;
162 + // The ID of the node representing a subgraph (the last ID in the subgraph).
163 + repNodeId: string;
164 +}
165 +
166 +function getSubgraphId(
167 + sourceMap: Map<string, SubgraphId>,
168 + label: string
169 +): SubgraphId {
170 + const id = sourceMap.get(label);
171 + invariant(id, `Could not find subgraph ID for label: %s`, label);
172 + return id;
173 +}
compiler/forget/packages/playground/lib/forgetMonacoDiagnostics.ts new
+88
@@ -0,0 +1,88 @@
1 +/*
2 + * Copyright (c) Facebook, Inc. and its affiliates.
3 + */
4 +
5 +import { Monaco } from "@monaco-editor/react";
6 +import { Diagnostic, DiagnosticLevel } from "babel-plugin-react-forget";
7 +import { MarkerSeverity, type editor } from "monaco-editor";
8 +
9 +function mapForgetSeverityToMonaco(
10 + level: DiagnosticLevel,
11 + monaco: Monaco
12 +): MarkerSeverity {
13 + switch (level) {
14 + case DiagnosticLevel.Error:
15 + return monaco.MarkerSeverity.Error;
16 + case DiagnosticLevel.Warning:
17 + return monaco.MarkerSeverity.Warning;
18 + default:
19 + return monaco.MarkerSeverity.Info;
20 + }
21 +}
22 +
23 +function mapForgetDiagnosticToMonacoMarker(
24 + { body, code, level, path, suggestion }: Diagnostic,
25 + monaco: Monaco
26 +): editor.IMarkerData | null {
27 + if (path == null || path.node.loc == null) {
28 + return null;
29 + }
30 + const severity = mapForgetSeverityToMonaco(level, monaco);
31 + let message = `[${level.toUpperCase()}] ${body} (${code})`;
32 + if (suggestion != null) {
33 + message = message.concat(`\n\n${suggestion}`);
34 + }
35 + return {
36 + severity,
37 + message,
38 + startLineNumber: path.node.loc.start.line,
39 + startColumn: path.node.loc.start.column + 1,
40 + endLineNumber: path.node.loc.end.line,
41 + endColumn: path.node.loc.end.column + 1,
42 + };
43 +}
44 +
45 +type ForgetMarkerConfig = {
46 + monaco: Monaco;
47 + model: editor.ITextModel;
48 + diagnostics: Diagnostic[];
49 +};
50 +let decorations: string[] = [];
51 +export function renderForgetMarkers({
52 + monaco,
53 + model,
54 + diagnostics,
55 +}: ForgetMarkerConfig): void {
56 + let markers = [];
57 + for (const diag of diagnostics) {
58 + const marker = mapForgetDiagnosticToMonacoMarker(diag, monaco);
59 + if (marker == null) {
60 + continue;
61 + }
62 + markers.push(marker);
63 + }
64 + if (markers.length > 0) {
65 + monaco.editor.setModelMarkers(model, "owner", markers);
66 + const newDecorations = markers.map((marker) => {
67 + return {
68 + range: new monaco.Range(
69 + marker.startLineNumber,
70 + marker.startColumn,
71 + marker.endLineNumber,
72 + marker.endColumn
73 + ),
74 + options: {
75 + isWholeLine: true,
76 + glyphMarginClassName: "bg-red-300",
77 + },
78 + };
79 + });
80 + decorations = model.deltaDecorations(decorations, newDecorations);
81 + } else {
82 + monaco.editor.setModelMarkers(model, "owner", []);
83 + decorations = model.deltaDecorations(
84 + model.getAllDecorations().map((d) => d.id),
85 + []
86 + );
87 + }
88 +}
compiler/forget/packages/playground/lib/forgetPlaygroundPlugin.ts new
+199
@@ -0,0 +1,199 @@
1 +/*
2 + * Copyright (c) Facebook, Inc. and its affiliates.
3 + */
4 +
5 +import type { TransformOptions } from "@babel/core";
6 +import { transform } from "@babel/standalone";
7 +import invariant from "invariant";
8 +import type { Plugin } from "rollup";
9 +import { ForgetCompilerFlags } from "./compilerDriver";
10 +import patchUseMemoCache from "./patchUseMemoCache";
11 +import { FileExt, matchFileId, type InputFile } from "./stores";
12 +import { getBabelPlugins } from "./utils";
13 +
14 +const MODULE_PREFIX = "\0";
15 +const CDN = "https://esm.sh";
16 +
17 +/**
18 + * Rollup plugin that interprets input tabs as a virtual file system
19 + * and monkeypatches `useMemoCache` into `react`.
20 + */
21 +export default function forgetPlaygroundPlugin({
22 + files,
23 + enableForget,
24 + reactVersion,
25 + compilerFlags,
26 +}: {
27 + files: InputFile[];
28 + enableForget: boolean;
29 + reactVersion: string;
30 + compilerFlags: ForgetCompilerFlags;
31 +}): Plugin {
32 + const fileTable = new Map<string, InputFile>();
33 + files.forEach((f) => fileTable.set(`./${f.id}`, f));
34 +
35 + return {
36 + name: "forget-playground-plugin",
37 + resolveId(source) {
38 + /*
39 + Instruct Rollup to resolve `react` and `react-dom` as internal modules,
40 + where we'll then define their module content in the load hook below.
41 +
42 + Note that setting the `syntheticNamedExports` option to `true` allows
43 + Rollup to fall back missing named exports to the properties of the default
44 + export. This is so that we don't have to export properties of `react` by
45 + name (e.g., export { useState } from "react"). Instead we only export default
46 + from `react` and the subsequent uses of otherwise named exports will be
47 + transformed into the form of `React.useState`.
48 +
49 + Refer to https://github.com/rollup/rollup/pull/3295 for details on
50 + `syntheticNamedExports`.
51 + */
52 + if (source === "react" || source.startsWith("react/")) {
53 + return {
54 + // Prefix each internal module ID with `\0` to prevent other plugins
55 + // from trying to process it. (https://rollupjs.org/guide/en/#conventions)
56 + id: `${MODULE_PREFIX}${source}`,
57 + syntheticNamedExports: true,
58 + };
59 + }
60 +
61 + if (source.startsWith("react-dom")) {
62 + return {
63 + id: `${MODULE_PREFIX}${source}`,
64 + syntheticNamedExports: true,
65 + };
66 + }
67 +
68 + // User-defined CSS
69 + if (source.startsWith(".") && source.endsWith(".css")) {
70 + return `${MODULE_PREFIX}${source}`;
71 + }
72 +
73 + // Playground input tabs
74 + // Signals Rollup to not try to find the id elsewhere
75 + if (source.startsWith(".")) {
76 + const match = matchFileId(source);
77 +
78 + const hasExtension = match !== null;
79 + const isValidImportPath =
80 + hasExtension && (match[1] === "js" || match[1] === "jsx");
81 +
82 + // ES Module imports only allow extensions to be .js/.jsx (can be optionally
83 + // omitted). For .ts/.tsx files, the extension must be omitted. So, whenever
84 + // an file doesn't have an extension or has one that's not .js/.jsx, we try
85 + // to add one and see if the resulting ID exists in the input files.
86 + if (!isValidImportPath) {
87 + for (const ext of Object.keys(FileExt)) {
88 + if (ext === "css") continue;
89 + if (fileTable.has(`${source}.${ext}`)) {
90 + return `${MODULE_PREFIX}${source}.${ext}`;
91 + }
92 + }
93 +
94 + this.error("Bundling failed: invalid import path.");
95 + }
96 +
97 + return `${MODULE_PREFIX}${source}`;
98 + }
99 +
100 + // External URL
101 + if (source.includes("://")) {
102 + return {
103 + id: source,
104 + external: true,
105 + };
106 + }
107 +
108 + // Fallback to NPM packages
109 + return {
110 + id: `${CDN}/${source}`,
111 + external: true,
112 + };
113 + },
114 + load(id) {
115 + if (!id.startsWith(MODULE_PREFIX)) return null;
116 +
117 + id = id.slice(MODULE_PREFIX.length);
118 +
119 + if (id === "react") {
120 + return patchUseMemoCache(dev(`${CDN}/react@${reactVersion}`));
121 + }
122 + // `react/jsx-runtime`, etc.
123 + else if (id.startsWith("react/")) {
124 + const URL = id.replace("react", `${CDN}/react@${reactVersion}`);
125 +
126 + return `export { default } from "${dev(URL)}"`;
127 + }
128 + // `react-dom/client`, etc.
129 + else if (id.startsWith("react-dom")) {
130 + const URL = id.replace("react-dom", `${CDN}/react-dom@${reactVersion}`);
131 +
132 + return `export { default } from "${dev(URL)}"`;
133 + }
134 +
135 + // Load input tab content.
136 + const file = fileTable.get(id);
137 + invariant(
138 + file,
139 + "All non-external IDs that are not `react` or `react-dom` must be in fileTable."
140 + );
141 + return file.content;
142 + },
143 + transform(code, filename) {
144 + filename = filename.slice(MODULE_PREFIX.length);
145 +
146 + const file = fileTable.get(filename);
147 + if (file && file.language === "css") {
148 + // Append CSS as a style tag to the iframe <head> element.
149 + return `
150 + (() => {
151 + let stylesheet = document.getElementById("${filename}");
152 +
153 + // Remove and recreate the style tag to keep the order among style
154 + // tags up to date, so that CSS imported later overrides previous CSS.
155 + if (stylesheet) stylesheet.remove();
156 +
157 + stylesheet = document.createElement("style");
158 + stylesheet.setAttribute("id", "${filename}");
159 + document.head.appendChild(stylesheet);
160 +
161 + const styles = document.createTextNode(\`${code}\`);
162 + stylesheet.innerHTML = "";
163 + stylesheet.appendChild(styles);
164 + })();
165 + `;
166 + }
167 +
168 + const babelPlugins = getBabelPlugins(
169 + file?.language ?? null,
170 + enableForget,
171 + { flags: compilerFlags }
172 + );
173 +
174 + const babelOptions: TransformOptions = {
175 + presets: [["react", { runtime: "automatic" }]],
176 + plugins: babelPlugins,
177 + filename: filename.replace("./", ""),
178 + };
179 +
180 + /*
181 + TODO: Using the Babel Rollup plugin doesn't work out of the box due to
182 + this plugin treating the input tabs as a virtual file system. The Babel
183 + Rollup plugin's default configuration looks for files in the local file
184 + system, so it requires some set up for it to work (since it can work with
185 + this plugin in theory as Rollup plugins execute in turns by each hook).
186 + */
187 + const result = transform(code, babelOptions);
188 +
189 + if (!result?.code) this.error("Bundling failed.");
190 +
191 + return result.code;
192 + },
193 + };
194 +}
195 +
196 +/**
197 + * @see https://esm.sh/ - Development mode.
198 + */
199 +const dev = (url: string) => `${url}?dev`;
compiler/forget/packages/playground/lib/moduleBundler.ts new
+142
@@ -0,0 +1,142 @@
1 +/*
2 + * Copyright (c) Facebook, Inc. and its affiliates.
3 + */
4 +
5 +import { rollup } from "rollup";
6 +import forgetPlaygroundPlugin from "./forgetPlaygroundPlugin";
7 +import type { Store } from "./stores";
8 +import { minify } from "terser";
9 +import invariant from "invariant";
10 +import { gzip, strToU8 } from "fflate";
11 +import prettyBytes from "pretty-bytes";
12 +import { ForgetCompilerFlags } from "./compilerDriver";
13 +
14 +let bundleId = 0;
15 +const ROLLUP_ENTRY = "./_app.js";
16 +export interface BundleResult {
17 + id: number;
18 + res:
19 + | undefined
20 + | {
21 + getCode(version: "before" | "after", cacheBreakId?: number): string;
22 + codeSizeDiff: {
23 + min: string;
24 + minPercent: number;
25 + gzip: string;
26 + gzipPercent: number;
27 + };
28 + };
29 +}
30 +
31 +export const defaultBundleRes = {
32 + id: 0,
33 + res: undefined,
34 + messages: [],
35 +};
36 +
37 +export async function bundle(
38 + files: Store["files"],
39 + compilerFlags: ForgetCompilerFlags,
40 + reactVersion = "18.2.0"
41 +): Promise<BundleResult> {
42 + const codeAfter = await bundleWithRollup(
43 + files,
44 + true,
45 + reactVersion,
46 + compilerFlags
47 + );
48 + if (!codeAfter) return { id: bundleId, res: undefined };
49 +
50 + const codeBefore = await bundleWithRollup(
51 + files,
52 + false,
53 + reactVersion,
54 + compilerFlags
55 + );
56 + invariant(codeBefore, "codeBefore should be consistent with codeAfter.");
57 +
58 + const [minAfter, gzipAfter] = await compress(codeAfter);
59 + const [minBefore, gzipBefore] = await compress(codeBefore);
60 + return {
61 + id: bundleId++,
62 + res: {
63 + getCode(version: "before" | "after", cacheBreakId?: number): string {
64 + // Annotate with cache-busting bundleId and cacheBreakId to form unique moduleName.
65 + // @see https://twitter.com/Huxpro/status/1551017434462621696
66 + return `${
67 + version === "before" ? codeBefore : codeAfter
68 + } /* ${version} ${bundleId} ${cacheBreakId ?? ""} */`;
69 + },
70 + codeSizeDiff: {
71 + min: prettyBytes(minAfter - minBefore, { signed: true }),
72 + minPercent: getPercentage(minAfter, minBefore),
73 + gzip: prettyBytes(gzipAfter - gzipBefore, { signed: true }),
74 + gzipPercent: getPercentage(gzipAfter, gzipBefore),
75 + },
76 + },
77 + };
78 +}
79 +
80 +/**
81 + * Bundle @param files with Rollup.
82 + * @returns a tuple of bundled code (undefined when error) and messages.
83 + */
84 +async function bundleWithRollup(
85 + files: Store["files"],
86 + enableForget: boolean,
87 + reactVersion: string,
88 + compilerFlags: ForgetCompilerFlags
89 +): Promise<string | undefined> {
90 + try {
91 + const rollupBuild = await rollup({
92 + input: ROLLUP_ENTRY,
93 + plugins: [
94 + forgetPlaygroundPlugin({
95 + files,
96 + enableForget,
97 + reactVersion,
98 + compilerFlags,
99 + }),
100 + ],
101 + });
102 +
103 + const {
104 + output: [{ code }],
105 + } = await rollupBuild.generate({
106 + format: "esm",
107 + });
108 +
109 + return code;
110 + } catch (e) {
111 + return undefined;
112 + }
113 +}
114 +/**
115 + * Given @param code, @returns both minified and minified + gzipped code.
116 + */
117 +async function compress(code: string): Promise<[number, number]> {
118 + const minified = (await minify(code)).code;
119 + invariant(minified, "Must have valid minified code.");
120 + const minifiedSize = new Blob([minified]).size;
121 +
122 + const gzipped = await execGzip(minified);
123 + const gzippedSize = new Blob([gzipped]).size;
124 +
125 + return [minifiedSize, gzippedSize];
126 +}
127 +
128 +/**
129 + * @returns the percentage of @param a in relation to @param b.
130 + */
131 +function getPercentage(a: number, b: number): number {
132 + return ((a - b) / b) * 100;
133 +}
134 +
135 +function execGzip(code: string): Promise<Uint8Array> {
136 + return new Promise((resolve, reject) => {
137 + gzip(strToU8(code), (err, data) => {
138 + if (err) reject(err);
139 + resolve(data);
140 + });
141 + });
142 +}
compiler/forget/packages/playground/lib/patchUseMemoCache.ts new
+35
@@ -0,0 +1,35 @@
1 +/*
2 + * Copyright (c) Facebook, Inc. and its affiliates.
3 + */
4 +
5 +/**
6 + * Monkeypatch `useMemoCache` into `react`. The default export will be
7 + * used for Rollup to generate synthetic named exports.
8 + */
9 +export default function patchUseMemoCache(reactSource: string) {
10 + return `\
11 + import React from "${reactSource}";
12 +
13 + const REACT_MEMOCACHE_SENTINEL = Symbol.for('react.memocache_sentinel');
14 +
15 + function useMemoCache(i) {
16 + "use no forget";
17 + const $ = new Array(i).fill(REACT_MEMOCACHE_SENTINEL)
18 + $._ = REACT_MEMOCACHE_SENTINEL
19 + const ref = React.useRef($);
20 + return ref.current;
21 + };
22 +
23 + useMemoCache.read = function (memoCache, index) {
24 + const value = memoCache[index];
25 + if (value === REACT_MEMOCACHE_SENTINEL) {
26 + throw new Error('useMemoCache.read: read before write');
27 + }
28 + return value;
29 + };
30 +
31 + React.useMemoCache = useMemoCache;
32 +
33 + export default React;
34 + `;
35 +}
compiler/forget/packages/playground/lib/stores/index.ts new
+6
@@ -0,0 +1,6 @@
1 +/*
2 + * Copyright (c) Facebook, Inc. and its affiliates.
3 + */
4 +
5 +export * from "./messages";
6 +export * from "./store";
compiler/forget/packages/playground/lib/stores/messages.ts new
+39
@@ -0,0 +1,39 @@
1 +/*
2 + * Copyright (c) Facebook, Inc. and its affiliates.
3 + */
4 +
5 +export enum MessageSource {
6 + Babel,
7 + Rollup,
8 + Forget,
9 + Playground,
10 +}
11 +
12 +export enum MessageLevel {
13 + Info,
14 + Warning,
15 + Error,
16 +}
17 +
18 +export interface Message {
19 + title: string;
20 + level: MessageLevel;
21 + source: MessageSource; // Can be used to further style messages differently.
22 + codeframe: string | undefined;
23 +}
24 +
25 +export function createMessage(
26 + message: string,
27 + level: MessageLevel,
28 + source: MessageSource
29 +): Message {
30 + const [title, ...body] = message.split("\n");
31 + const codeframe = body.length > 0 ? body.join("\n") : undefined;
32 +
33 + return {
34 + source,
35 + level,
36 + title,
37 + codeframe,
38 + };
39 +}
compiler/forget/packages/playground/lib/stores/store.ts new
+197
@@ -0,0 +1,197 @@
1 +/*
2 + * Copyright (c) Facebook, Inc. and its affiliates.
3 + */
4 +
5 +import { createCompilerFlags, OutputKind } from "babel-plugin-react-forget";
6 +import invariant from "invariant";
7 +import { defaultStore } from "../defaultStore";
8 +import { codec } from "../utils";
9 +import { ForgetCompilerFlags } from "../compilerDriver";
10 +import { parseCompilerFlags } from "babel-plugin-react-forget";
11 +
12 +type VisualizedGraph =
13 + | `Visualized${OutputKind.ValGraph}`
14 + | `Visualized${OutputKind.SCCGraph}`
15 + | `Visualized${OutputKind.RedGraph}`;
16 +
17 +export type OutputTabKind = OutputKind | VisualizedGraph | "Preview";
18 +
19 +export function isGraph(
20 + tabKind: OutputTabKind
21 +): tabKind is
22 + | OutputKind.ValGraph
23 + | OutputKind.SCCGraph
24 + | OutputKind.RedGraph
25 + | VisualizedGraph {
26 + return tabKind.endsWith("Graph");
27 +}
28 +
29 +export function isVisualizedGraph(
30 + tabKind: OutputTabKind
31 +): tabKind is VisualizedGraph {
32 + return tabKind.startsWith("Visualized");
33 +}
34 +
35 +export function getVisualizedGraphKind(graphKind: VisualizedGraph) {
36 + const kind = graphKind.slice("Visualized".length);
37 + return kind as
38 + | OutputKind.ValGraph
39 + | OutputKind.SCCGraph
40 + | OutputKind.RedGraph;
41 +}
42 +
43 +export enum FileExt {
44 + js = "javascript",
45 + jsx = "javascript",
46 + ts = "typescript",
47 + tsx = "typescript",
48 + css = "css",
49 +}
50 +
51 +export interface InputFile {
52 + id: string;
53 + language: string;
54 + content: string;
55 +}
56 +
57 +/**
58 + * Match @param fileId with valid FileExt's.
59 + */
60 +export function matchFileId(fileId: string) {
61 + return fileId.match(new RegExp(`.+\\.(${Object.keys(FileExt).join("|")})$`));
62 +}
63 +
64 +/**
65 + * Refine @param ext string to a key in FileExt.
66 + */
67 +function isValidFileExt(ext: string): ext is keyof typeof FileExt {
68 + return Object.keys(FileExt).includes(ext);
69 +}
70 +
71 +/**
72 + * Checks if @param id is a valid file ID.
73 + * @returns an input file that may or may not be a valid input tab to add to Store.
74 + */
75 +export function createInputFile(id: string, content: string): InputFile {
76 + const match = matchFileId(id);
77 + if (!match || !isValidFileExt(match[1])) {
78 + throw new Error(
79 + `Invalid tab name or extension. The tab must have a name and a supported extension (${Object.keys(
80 + FileExt
81 + ).join(", ")}).`
82 + );
83 + }
84 +
85 + return {
86 + id,
87 + language: FileExt[match[1]],
88 + content,
89 + };
90 +}
91 +
92 +export function checkInputFile(
93 + inputFile: InputFile,
94 + fromFile: InputFile | undefined,
95 + store: Store
96 +) {
97 + const isDuplicateFileId =
98 + store.files.find((file) => file.id === inputFile.id) !== undefined;
99 + if (isDuplicateFileId) {
100 + throw new Error(`A tab with ID "${inputFile.id}" already exists.`);
101 + }
102 +
103 + const isIndexLikeId = (id: string) => /^index\..*$/.test(id);
104 + const fromIndex = fromFile && isIndexLikeId(fromFile.id);
105 + if (fromIndex && !isIndexLikeId(inputFile.id)) {
106 + throw new Error(`Only the file extension of the index tab can be changed.`);
107 + }
108 + if (!fromIndex && isIndexLikeId(inputFile.id)) {
109 + throw new Error(`Only the index tab can be named as "index".`);
110 + }
111 +}
112 +
113 +/**
114 + * Global Store for Playground
115 + */
116 +export interface Store {
117 + /**
118 + * Input tabs. The key is FileId joined by a dot.
119 + *
120 + * @example "index.js" => { id: "index.js", language: "javascript", content: "// index.js", isIdEditable: false }
121 + */
122 + files: InputFile[];
123 +
124 + selectedFileId: string;
125 +
126 + /* Compiler settings */
127 + compilerFlags: ForgetCompilerFlags;
128 +}
129 +
130 +export function getSelectedFile(store: Store): InputFile {
131 + const selectedFile = store.files.find((f) => f.id === store.selectedFileId);
132 + invariant(selectedFile, "Selected file must exists.");
133 + return selectedFile;
134 +}
135 +
136 +/**
137 + * Serialize, encode, and save @param store to localStorage and update URL.
138 + */
139 +export function saveStore(store: Store) {
140 + const base64 = codec.utoa(JSON.stringify(store));
141 + localStorage.setItem("playgroundStore", base64);
142 + history.replaceState({}, "", `#${base64}`);
143 +}
144 +
145 +/**
146 + * Check if @param raw is a valid Store by if
147 + * - it has a `files` property and is an Array
148 + * - it has a `selectedFileId` property and is a string
149 + * - its `selectedFileId` has a corresponding file in `files`
150 + */
151 +function getValidStore(raw: any): Store | null {
152 + if ("compilerFlags" in raw && !(raw["compilerFlags"] instanceof Object)) {
153 + return null;
154 + }
155 + const isValidStore =
156 + "files" in raw &&
157 + raw["files"] instanceof Array &&
158 + "selectedFileId" in raw &&
159 + typeof raw["selectedFileId"] === "string" &&
160 + raw["files"].find((f) => f.id === raw["selectedFileId"]);
161 + if (isValidStore) {
162 + if ("compilerFlags" in raw) {
163 + // Merge flags from decoded store into flags valid for this compiler version
164 + // Since the compiler is in active dev, if
165 + // - a flag exists in the decoded store but is not supported by the compiler,
166 + // we discard + ignore it
167 + // - a flag does not exist in the decoded store but is used by the compiler,
168 + // we use the default value
169 + raw.compilerFlags = parseCompilerFlags(raw.compilerFlags, true);
170 + } else {
171 + // some saved Stores may not have `compilerFlags`
172 + raw.compilerFlags = createCompilerFlags();
173 + }
174 + return raw;
175 + } else {
176 + return null;
177 + }
178 +}
179 +
180 +/**
181 + * Deserialize, decode, and initialize @param store from URL and then
182 + * localStorage. Throw an error if Store is malformed.
183 + */
184 +export function initStoreFromUrlOrLocalStorage(): Store {
185 + const encodedSourceFromUrl = location.hash.slice(1);
186 + const encodedSourceFromLocal = localStorage.getItem("playgroundStore");
187 + const encodedSource = encodedSourceFromUrl || encodedSourceFromLocal;
188 +
189 + // No data in the URL and no data in the localStorage to fallback to.
190 + // Initialize with the default store.
191 + if (!encodedSource) return defaultStore;
192 +
193 + const raw = JSON.parse(codec.atou(encodedSource));
194 + const store = getValidStore(raw);
195 + invariant(store != null, "Invalid Store");
196 + return raw;
197 +}
compiler/forget/packages/playground/lib/utils.ts new
+44
@@ -0,0 +1,44 @@
1 +/*
2 + * Copyright (c) Facebook, Inc. and its affiliates.
3 + */
4 +import type { PluginItem, TransformOptions } from "@babel/core";
5 +import ReactForgetBabelPlugin, {
6 + CompilerOptions,
7 +} from "babel-plugin-react-forget";
8 +
9 +/**
10 + * Unicode-Base64 Codec.
11 + *
12 + * @see https://base64.guru/developers/javascript/examples/unicode-strings
13 + * @see https://github.com/vuejs/core/pull/3662/
14 + */
15 +export const codec = {
16 + utoa(data: string): string {
17 + return btoa(unescape(encodeURIComponent(data)));
18 + },
19 +
20 + /**
21 + * @returns undefined if @base64 is not a valid Base64 string.
22 + */
23 + atou(base64: string): string {
24 + return decodeURIComponent(escape(atob(base64)));
25 + },
26 +};
27 +
28 +export function getBabelPlugins(
29 + language: string | null,
30 + enableForget: boolean,
31 + compilerOptions: Partial<CompilerOptions>
32 +): PluginItem[] {
33 + const babelPlugins: PluginItem[] = ["syntax-jsx"];
34 + if (language === "typescript") {
35 + babelPlugins.push(["transform-typescript", { isTSX: true }]);
36 + } else if (language == "javascript") {
37 + babelPlugins.push("transform-flow-strip-types");
38 + }
39 +
40 + if (enableForget) {
41 + babelPlugins.push([ReactForgetBabelPlugin, compilerOptions]);
42 + }
43 + return babelPlugins;
44 +}
compiler/forget/packages/playground/next-env.d.ts new
+5
@@ -0,0 +1,5 @@
1 +/// <reference types="next" />
2 +/// <reference types="next/image-types/global" />
3 +
4 +// NOTE: This file should not be edited
5 +// see https://nextjs.org/docs/basic-features/typescript for more information.
compiler/forget/packages/playground/next.config.js new
+15
@@ -0,0 +1,15 @@
1 +/** @type {import('next').NextConfig} */
2 +const nextConfig = {
3 + reactStrictMode: true,
4 + webpack: (config) => {
5 + // Load *.d.ts files as strings using https://webpack.js.org/guides/asset-modules/#source-assets.
6 + config.module.rules.push({
7 + test: /\.d\.ts/,
8 + type: "asset/source",
9 + });
10 +
11 + return config;
12 + },
13 +};
14 +
15 +module.exports = nextConfig;
compiler/forget/packages/playground/package.json new
+56
@@ -0,0 +1,56 @@
1 +{
2 + "name": "playground",
3 + "version": "0.1.0",
4 + "private": true,
5 + "scripts": {
6 + "preinstall": "./scripts/setup.sh",
7 + "dev": "next dev",
8 + "build": "next build && node ./scripts/downloadFonts.js",
9 + "start": "next start",
10 + "lint": "next lint"
11 + },
12 + "dependencies": {
13 + "@babel/standalone": "^7.18.4",
14 + "@emotion/react": "^11.9.3",
15 + "@emotion/styled": "^11.9.3",
16 + "@heroicons/react": "^1.0.6",
17 + "@hpcc-js/wasm": "^1.15.0",
18 + "@monaco-editor/react": "^4.4.5",
19 + "@mui/material": "^5.9.1",
20 + "@use-gesture/react": "^10.2.17",
21 + "fflate": "^0.7.3",
22 + "invariant": "^2.2.4",
23 + "monaco-editor": "^0.33.0",
24 + "next": "12.1.6",
25 + "notistack": "^3.0.0-alpha.7",
26 + "prettier": "^2.6.2",
27 + "pretty-bytes": "^6.0.0",
28 + "pretty-format": "^28.1.3",
29 + "react": "18.1.0",
30 + "react-dom": "18.1.0",
31 + "rollup": "^2.75.7",
32 + "terser": "^5.14.2"
33 + },
34 + "devDependencies": {
35 + "@types/babel__standalone": "^7.1.4",
36 + "@types/node": "17.0.40",
37 + "@types/prettier": "^2.6.3",
38 + "@types/react": "18.0.12",
39 + "@types/react-dom": "18.0.5",
40 + "autoprefixer": "^10.4.7",
41 + "clsx": "^1.1.1",
42 + "eslint": "8.17.0",
43 + "eslint-config-next": "12.1.6",
44 + "next-transpile-modules": "^9.0.0",
45 + "postcss": "^8.4.14",
46 + "tailwindcss": "^3.0.24",
47 + "typescript": "4.7.3"
48 + },
49 + "resolutions": {
50 + "./**/@babel/parser": "7.7.4",
51 + "./**/@babel/types": "7.7.4",
52 + "@babel/core": "7.2.0",
53 + "@babel/generator": "7.2.0",
54 + "@babel/traverse": "7.1.6"
55 + }
56 +}
compiler/forget/packages/playground/pages/_app.tsx new
+12
@@ -0,0 +1,12 @@
1 +/*
2 + * Copyright (c) Facebook, Inc. and its affiliates.
3 + */
4 +
5 +import type { AppProps } from "next/app";
6 +import "../styles/globals.css";
7 +
8 +function MyApp({ Component, pageProps }: AppProps) {
9 + return <Component {...pageProps} />;
10 +}
11 +
12 +export default MyApp;
compiler/forget/packages/playground/pages/_document.tsx new
+17
@@ -0,0 +1,17 @@
1 +/*
2 + * Copyright (c) Facebook, Inc. and its affiliates.
3 + */
4 +
5 +import { Head, Html, Main, NextScript } from "next/document";
6 +
7 +export default function Document() {
8 + return (
9 + <Html lang="en">
10 + <Head />
11 + <body className="font-sans">
12 + <Main />
13 + <NextScript />
14 + </body>
15 + </Html>
16 + );
17 +}
compiler/forget/packages/playground/pages/index.tsx new
+51
@@ -0,0 +1,51 @@
1 +/*
2 + * Copyright (c) Facebook, Inc. and its affiliates.
3 + */
4 +
5 +import type { NextPage } from "next";
6 +import Head from "next/head";
7 +import { SnackbarProvider } from "notistack";
8 +import { Editor, Header, StoreProvider } from "../components";
9 +import MessageSnackbar from "../components/Message";
10 +
11 +const Home: NextPage = () => {
12 + return (
13 + <div className="flex flex-col w-screen h-screen font-light">
14 + <Head>
15 + <title>React Forget Playground</title>
16 + <meta
17 + name="viewport"
18 + content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=0"
19 + ></meta>
20 + <link rel="icon" href="/favicon.ico" />
21 + <link rel="manifest" href="/site.webmanifest" />
22 + <link
23 + rel="preload"
24 + href="/fonts/Source-Code-Pro-Regular.woff2"
25 + as="font"
26 + type="font/woff2"
27 + crossOrigin="anonymous"
28 + />
29 + <link
30 + rel="preload"
31 + href="https://0xeac7-forget.vercel.app/fonts/Optimistic_Display_W_Lt.woff2"
32 + as="font"
33 + type="font/woff2"
34 + crossOrigin="anonymous"
35 + />
36 + </Head>
37 + <StoreProvider>
38 + <SnackbarProvider
39 + preventDuplicate
40 + maxSnack={10}
41 + Components={{ message: MessageSnackbar }}
42 + >
43 + <Header />
44 + <Editor />
45 + </SnackbarProvider>
46 + </StoreProvider>
47 + </div>
48 + );
49 +};
50 +
51 +export default Home;
compiler/forget/packages/playground/postcss.config.js new
+6
@@ -0,0 +1,6 @@
1 +module.exports = {
2 + plugins: {
3 + tailwindcss: {},
4 + autoprefixer: {},
5 + },
6 +};
compiler/forget/packages/playground/public/favicon.ico
Binary files /dev/null and b/compiler/forget/packages/playground/public/favicon.ico differ
compiler/forget/packages/playground/public/fonts/Source-Code-Pro-Regular.woff2
Binary files /dev/null and b/compiler/forget/packages/playground/public/fonts/Source-Code-Pro-Regular.woff2 differ
compiler/forget/packages/playground/public/graphvizlib.wasm
Binary files /dev/null and b/compiler/forget/packages/playground/public/graphvizlib.wasm differ
compiler/forget/packages/playground/public/icon-180x180.png
Binary files /dev/null and b/compiler/forget/packages/playground/public/icon-180x180.png differ
compiler/forget/packages/playground/public/site.webmanifest new
+16
@@ -0,0 +1,16 @@
1 +{
2 + "name": "React Forget Playground",
3 + "short_name": "React REPL",
4 + "display": "standalone",
5 + "start_url": "/",
6 + "theme_color": "#fff",
7 + "background_color": "#000000",
8 + "orientation": "portrait",
9 + "icons": [
10 + {
11 + "src": "/icon-180x180.png",
12 + "type": "image/png",
13 + "sizes": "180x180"
14 + }
15 + ]
16 +}
compiler/forget/packages/playground/public/vercel.svg new
+4
@@ -0,0 +1,4 @@
1 +<svg width="283" height="64" viewBox="0 0 283 64" fill="none"
2 + xmlns="http://www.w3.org/2000/svg">
3 + <path d="M141.04 16c-11.04 0-19 7.2-19 18s8.96 18 20 18c6.67 0 12.55-2.64 16.19-7.09l-7.65-4.42c-2.02 2.21-5.09 3.5-8.54 3.5-4.79 0-8.86-2.5-10.37-6.5h28.02c.22-1.12.35-2.28.35-3.5 0-10.79-7.96-17.99-19-17.99zm-9.46 14.5c1.25-3.99 4.67-6.5 9.45-6.5 4.79 0 8.21 2.51 9.45 6.5h-18.9zM248.72 16c-11.04 0-19 7.2-19 18s8.96 18 20 18c6.67 0 12.55-2.64 16.19-7.09l-7.65-4.42c-2.02 2.21-5.09 3.5-8.54 3.5-4.79 0-8.86-2.5-10.37-6.5h28.02c.22-1.12.35-2.28.35-3.5 0-10.79-7.96-17.99-19-17.99zm-9.45 14.5c1.25-3.99 4.67-6.5 9.45-6.5 4.79 0 8.21 2.51 9.45 6.5h-18.9zM200.24 34c0 6 3.92 10 10 10 4.12 0 7.21-1.87 8.8-4.92l7.68 4.43c-3.18 5.3-9.14 8.49-16.48 8.49-11.05 0-19-7.2-19-18s7.96-18 19-18c7.34 0 13.29 3.19 16.48 8.49l-7.68 4.43c-1.59-3.05-4.68-4.92-8.8-4.92-6.07 0-10 4-10 10zm82.48-29v46h-9V5h9zM36.95 0L73.9 64H0L36.95 0zm92.38 5l-27.71 48L73.91 5H84.3l17.32 30 17.32-30h10.39zm58.91 12v9.69c-1-.29-2.06-.49-3.2-.49-5.81 0-10 4-10 10V51h-9V17h9v9.2c0-5.08 5.91-9.2 13.2-9.2z" fill="#000"/>
4 +</svg>
\ No newline at end of file
compiler/forget/packages/playground/scripts/downloadFonts.js new
+17
@@ -0,0 +1,17 @@
1 +/**
2 + * Copyright (c) Facebook, Inc. and its affiliates.
3 + */
4 +
5 +const { execSync } = require("child_process");
6 +
7 +// So that we don't need to check them into the repo.
8 +// See https://github.com/reactjs/reactjs.org/blob/main/beta/scripts/downloadFonts.js.
9 +execSync(
10 + "curl https://conf.reactjs.org/fonts/Optimistic_Display_W_Lt.woff2 --output public/fonts/Optimistic_Display_W_Lt.woff2"
11 +);
12 +execSync(
13 + "curl https://conf.reactjs.org/fonts/Optimistic_Display_W_Md.woff2 --output public/fonts/Optimistic_Display_W_Md.woff2"
14 +);
15 +execSync(
16 + "curl https://conf.reactjs.org/fonts/Optimistic_Display_W_Bd.woff2 --output public/fonts/Optimistic_Display_W_Bd.woff2"
17 +);
compiler/forget/packages/playground/scripts/setup.sh new
+25
@@ -0,0 +1,25 @@
1 +#!/usr/bin/env sh
2 +
3 +# Copyright (c) Facebook, Inc. and its affiliates.
4 +
5 +# Script to build the Forget plugin. We're storing it in a
6 +# machine's local file system and symlinking to it from Playground,
7 +# so that it's not cached by Vercel upon deployment.
8 +
9 +cd ../..
10 +
11 +# Build Forget plugin from source.
12 +yarn
13 +yarn build
14 +
15 +# Create a symlink in the global folder that links to Forget.
16 +yarn link
17 +
18 +cd packages/playground
19 +# Create a symlink from the globally-installed Forget to Playground's
20 +# node_modules folder.
21 +yarn link babel-plugin-react-forget
22 +
23 +# This is so that Vercel doesn't cache Forget across deployments, which
24 +# makes sure we're using the latest Forget for Playground.
25 +# Refer to the Yarn docs (https://classic.yarnpkg.com/en/docs/cli/link) for details.
compiler/forget/packages/playground/styles/globals.css new
+71
@@ -0,0 +1,71 @@
1 +/*
2 + * Copyright (c) Facebook, Inc. and its affiliates.
3 + */
4 +
5 +@tailwind base;
6 +@tailwind components;
7 +@tailwind utilities;
8 +
9 +@layer base {
10 + @font-face {
11 + font-family: "Source Code Pro";
12 + font-style: normal;
13 + font-weight: 400;
14 + font-display: swap;
15 + src: url("/fonts/Source-Code-Pro-Regular.woff2") format("woff2");
16 + }
17 +
18 + @font-face {
19 + font-family: "Optimistic Display";
20 + src: url("https://0xeac7-forget.vercel.app/fonts/Optimistic_Display_W_Lt.woff2")
21 + format("woff2");
22 + font-weight: 300;
23 + font-style: normal;
24 + font-display: swap;
25 + }
26 +
27 + @font-face {
28 + font-family: "Optimistic Display";
29 + src: url("https://0xeac7-forget.vercel.app/fonts/Optimistic_Display_W_Md.woff2")
30 + format("woff2");
31 + font-weight: 500;
32 + font-style: normal;
33 + font-display: swap;
34 + }
35 +
36 + @font-face {
37 + font-family: "Optimistic Display";
38 + src: url("https://0xeac7-forget.vercel.app/fonts/Optimistic_Display_W_Bd.woff2")
39 + format("woff2");
40 + font-weight: 700;
41 + font-style: normal;
42 + font-display: swap;
43 + }
44 +
45 + html,
46 + body {
47 + padding: 0;
48 + margin: 0;
49 + }
50 +
51 + a {
52 + color: inherit;
53 + text-decoration: none;
54 + }
55 +
56 + * {
57 + box-sizing: border-box;
58 + }
59 +}
60 +
61 +@layer utilities {
62 + /* Chrome, Safari, Opera */
63 + .no-scrollbar::-webkit-scrollbar {
64 + display: none;
65 + }
66 +
67 + .no-scrollbar {
68 + -ms-overflow-style: none; /* IE, Edge */
69 + scrollbar-width: none; /* Firefox */
70 + }
71 +}
compiler/forget/packages/playground/tailwind.config.js new
+33
@@ -0,0 +1,33 @@
1 +const defaultTheme = require("tailwindcss/defaultTheme");
2 +const colors = require("./colors");
3 +
4 +module.exports = {
5 + content: [
6 + "./pages/**/*.{js,ts,jsx,tsx}",
7 + "./components/**/*.{js,ts,jsx,tsx}",
8 + "./lib/forgetMonacoDiagnostics.ts",
9 + ],
10 + theme: {
11 + extend: {
12 + colors,
13 + width: {
14 + toast: "min(900px, 100vw - 40px)",
15 + "toast-body": "calc(100% - 60px)",
16 + "toast-title": "calc(100% - 40px)",
17 + },
18 + height: {
19 + content: "calc(100vh - 45px)",
20 + monaco: "calc(100vh - 93px)",
21 + monaco_small: "calc(100vh - 129px)",
22 + },
23 + fontFamily: {
24 + sans: [
25 + "Optimistic Display",
26 + "-apple-system",
27 + ...defaultTheme.fontFamily.sans,
28 + ],
29 + },
30 + },
31 + },
32 + plugins: [],
33 +};
compiler/forget/packages/playground/tsconfig.json new
+20
@@ -0,0 +1,20 @@
1 +{
2 + "compilerOptions": {
3 + "target": "es5",
4 + "lib": ["dom", "dom.iterable", "esnext"],
5 + "allowJs": true,
6 + "skipLibCheck": true,
7 + "strict": true,
8 + "forceConsistentCasingInFileNames": true,
9 + "noEmit": true,
10 + "esModuleInterop": true,
11 + "module": "esnext",
12 + "moduleResolution": "node",
13 + "resolveJsonModule": true,
14 + "isolatedModules": true,
15 + "jsx": "preserve",
16 + "incremental": true
17 + },
18 + "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx"],
19 + "exclude": ["node_modules"]
20 +}
compiler/forget/packages/playground/vercel.json new
+13
@@ -0,0 +1,13 @@
1 +{
2 + "headers": [
3 + {
4 + "source": "/fonts/(.*).woff2",
5 + "headers": [
6 + {
7 + "key": "Cache-Control",
8 + "value": "public, max-age=31536000, immutable"
9 + }
10 + ]
11 + }
12 + ]
13 +}
compiler/forget/packages/playground/yarn.lock new
+2874
@@ -0,0 +1,2874 @@
1 +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
2 +# yarn lockfile v1
3 +
4 +
5 +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.18.6":
6 + version "7.18.6"
7 + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.18.6.tgz#3b25d38c89600baa2dcc219edfa88a74eb2c427a"
8 + integrity sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==
9 + dependencies:
10 + "@babel/highlight" "^7.18.6"
11 +
12 +"@babel/core@7.2.0", "@babel/core@^7.1.0":
13 + version "7.2.0"
14 + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.2.0.tgz#a4dd3814901998e93340f0086e9867fefa163ada"
15 + integrity sha512-7pvAdC4B+iKjFFp9Ztj0QgBndJ++qaMeonT185wAqUnhipw8idm9Rv1UMyBuKtYjfl6ORNkgEgcsYLfHX/GpLw==
16 + dependencies:
17 + "@babel/code-frame" "^7.0.0"
18 + "@babel/generator" "^7.2.0"
19 + "@babel/helpers" "^7.2.0"
20 + "@babel/parser" "^7.2.0"
21 + "@babel/template" "^7.1.2"
22 + "@babel/traverse" "^7.1.6"
23 + "@babel/types" "^7.2.0"
24 + convert-source-map "^1.1.0"
25 + debug "^4.1.0"
26 + json5 "^2.1.0"
27 + lodash "^4.17.10"
28 + resolve "^1.3.2"
29 + semver "^5.4.1"
30 + source-map "^0.5.0"
31 +
32 +"@babel/generator@7.2.0", "@babel/generator@^7.1.6", "@babel/generator@^7.2.0":
33 + version "7.2.0"
34 + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.2.0.tgz#eaf3821fa0301d9d4aef88e63d4bcc19b73ba16c"
35 + integrity sha512-BA75MVfRlFQG2EZgFYIwyT1r6xSkwfP2bdkY/kLZusEYWiJs4xCowab/alaEaT0wSvmVuXGqiefeBlP+7V1yKg==
36 + dependencies:
37 + "@babel/types" "^7.2.0"
38 + jsesc "^2.5.1"
39 + lodash "^4.17.10"
40 + source-map "^0.5.0"
41 + trim-right "^1.0.1"
42 +
43 +"@babel/helper-function-name@^7.1.0":
44 + version "7.19.0"
45 + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz#941574ed5390682e872e52d3f38ce9d1bef4648c"
46 + integrity sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w==
47 + dependencies:
48 + "@babel/template" "^7.18.10"
49 + "@babel/types" "^7.19.0"
50 +
51 +"@babel/helper-module-imports@^7.12.13":
52 + version "7.18.6"
53 + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz#1e3ebdbbd08aad1437b428c50204db13c5a3ca6e"
54 + integrity sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==
55 + dependencies:
56 + "@babel/types" "^7.18.6"
57 +
58 +"@babel/helper-plugin-utils@^7.18.6":
59 + version "7.18.9"
60 + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.18.9.tgz#4b8aea3b069d8cb8a72cdfe28ddf5ceca695ef2f"
61 + integrity sha512-aBXPT3bmtLryXaoJLyYPXPlSD4p1ld9aYeR+sJNOZjJJGiOpb+fKfh3NkcCu7J54nUJwCERPBExCCpyCOHnu/w==
62 +
63 +"@babel/helper-split-export-declaration@^7.0.0":
64 + version "7.18.6"
65 + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz#7367949bc75b20c6d5a5d4a97bba2824ae8ef075"
66 + integrity sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==
67 + dependencies:
68 + "@babel/types" "^7.18.6"
69 +
70 +"@babel/helper-string-parser@^7.18.10":
71 + version "7.18.10"
72 + resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.18.10.tgz#181f22d28ebe1b3857fa575f5c290b1aaf659b56"
73 + integrity sha512-XtIfWmeNY3i4t7t4D2t02q50HvqHybPqW2ki1kosnvWCwuCMeo81Jf0gwr85jy/neUdg5XDdeFE/80DXiO+njw==
74 +
75 +"@babel/helper-validator-identifier@^7.18.6":
76 + version "7.18.6"
77 + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.18.6.tgz#9c97e30d31b2b8c72a1d08984f2ca9b574d7a076"
78 + integrity sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g==
79 +
80 +"@babel/helpers@^7.2.0":
81 + version "7.19.0"
82 + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.19.0.tgz#f30534657faf246ae96551d88dd31e9d1fa1fc18"
83 + integrity sha512-DRBCKGwIEdqY3+rPJgG/dKfQy9+08rHIAJx8q2p+HSWP87s2HCrQmaAMMyMll2kIXKCW0cO1RdQskx15Xakftg==
84 + dependencies:
85 + "@babel/template" "^7.18.10"
86 + "@babel/traverse" "^7.19.0"
87 + "@babel/types" "^7.19.0"
88 +
89 +"@babel/highlight@^7.18.6":
90 + version "7.18.6"
91 + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.18.6.tgz#81158601e93e2563795adcbfbdf5d64be3f2ecdf"
92 + integrity sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==
93 + dependencies:
94 + "@babel/helper-validator-identifier" "^7.18.6"
95 + chalk "^2.0.0"
96 + js-tokens "^4.0.0"
97 +
98 +"@babel/parser@7.7.4":
99 + version "7.7.4"
100 + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.7.4.tgz#75ab2d7110c2cf2fa949959afb05fa346d2231bb"
101 + integrity sha512-jIwvLO0zCL+O/LmEJQjWA75MQTWwx3c3u2JOTDK5D3/9egrWRRA0/0hk9XXywYnXZVVpzrBYeIQTmhwUaePI9g==
102 +
103 +"@babel/parser@^7.1.6", "@babel/parser@^7.18.10", "@babel/parser@^7.2.0":
104 + version "7.19.1"
105 + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.19.1.tgz#6f6d6c2e621aad19a92544cc217ed13f1aac5b4c"
106 + integrity sha512-h7RCSorm1DdTVGJf3P2Mhj3kdnkmF/EiysUkzS2TdgAYqyjFdMQJbVuXOBej2SBJaXan/lIVtT6KkGbyyq753A==
107 +
108 +"@babel/plugin-syntax-jsx@^7.12.13":
109 + version "7.18.6"
110 + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.18.6.tgz#a8feef63b010150abd97f1649ec296e849943ca0"
111 + integrity sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q==
112 + dependencies:
113 + "@babel/helper-plugin-utils" "^7.18.6"
114 +
115 +"@babel/runtime-corejs3@^7.10.2":
116 + version "7.18.3"
117 + resolved "https://registry.yarnpkg.com/@babel/runtime-corejs3/-/runtime-corejs3-7.18.3.tgz#52f0241a31e0ec61a6187530af6227c2846bd60c"
118 + integrity sha512-l4ddFwrc9rnR+EJsHsh+TJ4A35YqQz/UqcjtlX2ov53hlJYG5CxtQmNZxyajwDVmCxwy++rtvGU5HazCK4W41Q==
119 + dependencies:
120 + core-js-pure "^3.20.2"
121 + regenerator-runtime "^0.13.4"
122 +
123 +"@babel/runtime@^7.10.2", "@babel/runtime@^7.16.3":
124 + version "7.18.3"
125 + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.18.3.tgz#c7b654b57f6f63cf7f8b418ac9ca04408c4579f4"
126 + integrity sha512-38Y8f7YUhce/K7RMwTp7m0uCumpv9hZkitCbBClqQIow1qSbCvGkcegKOXpEWCQLfWmevgRiWokZ1GkpfhbZug==
127 + dependencies:
128 + regenerator-runtime "^0.13.4"
129 +
130 +"@babel/runtime@^7.13.10", "@babel/runtime@^7.17.2", "@babel/runtime@^7.5.5", "@babel/runtime@^7.7.2", "@babel/runtime@^7.8.7":
131 + version "7.18.9"
132 + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.18.9.tgz#b4fcfce55db3d2e5e080d2490f608a3b9f407f4a"
133 + integrity sha512-lkqXDcvlFT5rvEjiu6+QYO+1GXrEHRo2LOtS7E4GtX5ESIZOgepqsZBVIj6Pv+a6zqsya9VCgiK1KAK4BvJDAw==
134 + dependencies:
135 + regenerator-runtime "^0.13.4"
136 +
137 +"@babel/standalone@^7.18.4":
138 + version "7.18.5"
139 + resolved "https://registry.yarnpkg.com/@babel/standalone/-/standalone-7.18.5.tgz#69aeb99edacb55c509895d7fa6131ec9dbda7c6d"
140 + integrity sha512-3RlzTl3JSvbY1bvaRmuHf3fM2BSy7IbX0zqpVFjsiGO7678KE/LytwvJN+f5MGrarnUFUz2DNcCdetumWdIAKA==
141 +
142 +"@babel/template@^7.1.2", "@babel/template@^7.18.10":
143 + version "7.18.10"
144 + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.18.10.tgz#6f9134835970d1dbf0835c0d100c9f38de0c5e71"
145 + integrity sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA==
146 + dependencies:
147 + "@babel/code-frame" "^7.18.6"
148 + "@babel/parser" "^7.18.10"
149 + "@babel/types" "^7.18.10"
150 +
151 +"@babel/traverse@7.1.6", "@babel/traverse@^7.1.6", "@babel/traverse@^7.19.0":
152 + version "7.1.6"
153 + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.1.6.tgz#c8db9963ab4ce5b894222435482bd8ea854b7b5c"
154 + integrity sha512-CXedit6GpISz3sC2k2FsGCUpOhUqKdyL0lqNrImQojagnUMXf8hex4AxYFRuMkNGcvJX5QAFGzB5WJQmSv8SiQ==
155 + dependencies:
156 + "@babel/code-frame" "^7.0.0"
157 + "@babel/generator" "^7.1.6"
158 + "@babel/helper-function-name" "^7.1.0"
159 + "@babel/helper-split-export-declaration" "^7.0.0"
160 + "@babel/parser" "^7.1.6"
161 + "@babel/types" "^7.1.6"
162 + debug "^4.1.0"
163 + globals "^11.1.0"
164 + lodash "^4.17.10"
165 +
166 +"@babel/types@7.7.4":
167 + version "7.7.4"
168 + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.7.4.tgz#516570d539e44ddf308c07569c258ff94fde9193"
169 + integrity sha512-cz5Ji23KCi4T+YIE/BolWosrJuSmoZeN1EFnRtBwF+KKLi8GG/Z2c2hOJJeCXPk4mwk4QFvTmwIodJowXgttRA==
170 + dependencies:
171 + esutils "^2.0.2"
172 + lodash "^4.17.13"
173 + to-fast-properties "^2.0.0"
174 +
175 +"@babel/types@^7.1.6", "@babel/types@^7.18.10", "@babel/types@^7.19.0", "@babel/types@^7.2.0":
176 + version "7.19.0"
177 + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.19.0.tgz#75f21d73d73dc0351f3368d28db73465f4814600"
178 + integrity sha512-YuGopBq3ke25BVSiS6fgF49Ul9gH1x70Bcr6bqRLjWCkcX8Hre1/5+z+IiWOIerRMSSEfGZVB9z9kyq7wVs9YA==
179 + dependencies:
180 + "@babel/helper-string-parser" "^7.18.10"
181 + "@babel/helper-validator-identifier" "^7.18.6"
182 + to-fast-properties "^2.0.0"
183 +
184 +"@babel/types@^7.18.6":
185 + version "7.18.9"
186 + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.18.9.tgz#7148d64ba133d8d73a41b3172ac4b83a1452205f"
187 + integrity sha512-WwMLAg2MvJmt/rKEVQBBhIVffMmnilX4oe0sRe7iPOHIGsqpruFHHdrfj4O1CMMtgMtCU4oPafZjDPCRgO57Wg==
188 + dependencies:
189 + "@babel/helper-validator-identifier" "^7.18.6"
190 + to-fast-properties "^2.0.0"
191 +
192 +"@emotion/babel-plugin@^11.7.1":
193 + version "11.9.2"
194 + resolved "https://registry.yarnpkg.com/@emotion/babel-plugin/-/babel-plugin-11.9.2.tgz#723b6d394c89fb2ef782229d92ba95a740576e95"
195 + integrity sha512-Pr/7HGH6H6yKgnVFNEj2MVlreu3ADqftqjqwUvDy/OJzKFgxKeTQ+eeUf20FOTuHVkDON2iNa25rAXVYtWJCjw==
196 + dependencies:
197 + "@babel/helper-module-imports" "^7.12.13"
198 + "@babel/plugin-syntax-jsx" "^7.12.13"
199 + "@babel/runtime" "^7.13.10"
200 + "@emotion/hash" "^0.8.0"
201 + "@emotion/memoize" "^0.7.5"
202 + "@emotion/serialize" "^1.0.2"
203 + babel-plugin-macros "^2.6.1"
204 + convert-source-map "^1.5.0"
205 + escape-string-regexp "^4.0.0"
206 + find-root "^1.1.0"
207 + source-map "^0.5.7"
208 + stylis "4.0.13"
209 +
210 +"@emotion/cache@^11.9.3":
211 + version "11.9.3"
212 + resolved "https://registry.yarnpkg.com/@emotion/cache/-/cache-11.9.3.tgz#96638449f6929fd18062cfe04d79b29b44c0d6cb"
213 + integrity sha512-0dgkI/JKlCXa+lEXviaMtGBL0ynpx4osh7rjOXE71q9bIF8G+XhJgvi+wDu0B0IdCVx37BffiwXlN9I3UuzFvg==
214 + dependencies:
215 + "@emotion/memoize" "^0.7.4"
216 + "@emotion/sheet" "^1.1.1"
217 + "@emotion/utils" "^1.0.0"
218 + "@emotion/weak-memoize" "^0.2.5"
219 + stylis "4.0.13"
220 +
221 +"@emotion/hash@^0.8.0":
222 + version "0.8.0"
223 + resolved "https://registry.yarnpkg.com/@emotion/hash/-/hash-0.8.0.tgz#bbbff68978fefdbe68ccb533bc8cbe1d1afb5413"
224 + integrity sha512-kBJtf7PH6aWwZ6fka3zQ0p6SBYzx4fl1LoZXE2RrnYST9Xljm7WfKJrU4g/Xr3Beg72MLrp1AWNUmuYJTL7Cow==
225 +
226 +"@emotion/is-prop-valid@^1.1.3":
227 + version "1.1.3"
228 + resolved "https://registry.yarnpkg.com/@emotion/is-prop-valid/-/is-prop-valid-1.1.3.tgz#f0907a416368cf8df9e410117068e20fe87c0a3a"
229 + integrity sha512-RFg04p6C+1uO19uG8N+vqanzKqiM9eeV1LDOG3bmkYmuOj7NbKNlFC/4EZq5gnwAIlcC/jOT24f8Td0iax2SXA==
230 + dependencies:
231 + "@emotion/memoize" "^0.7.4"
232 +
233 +"@emotion/memoize@^0.7.4", "@emotion/memoize@^0.7.5":
234 + version "0.7.5"
235 + resolved "https://registry.yarnpkg.com/@emotion/memoize/-/memoize-0.7.5.tgz#2c40f81449a4e554e9fc6396910ed4843ec2be50"
236 + integrity sha512-igX9a37DR2ZPGYtV6suZ6whr8pTFtyHL3K/oLUotxpSVO2ASaprmAe2Dkq7tBo7CRY7MMDrAa9nuQP9/YG8FxQ==
237 +
238 +"@emotion/react@^11.9.3":
239 + version "11.9.3"
240 + resolved "https://registry.yarnpkg.com/@emotion/react/-/react-11.9.3.tgz#f4f4f34444f6654a2e550f5dab4f2d360c101df9"
241 + integrity sha512-g9Q1GcTOlzOEjqwuLF/Zd9LC+4FljjPjDfxSM7KmEakm+hsHXk+bYZ2q+/hTJzr0OUNkujo72pXLQvXj6H+GJQ==
242 + dependencies:
243 + "@babel/runtime" "^7.13.10"
244 + "@emotion/babel-plugin" "^11.7.1"
245 + "@emotion/cache" "^11.9.3"
246 + "@emotion/serialize" "^1.0.4"
247 + "@emotion/utils" "^1.1.0"
248 + "@emotion/weak-memoize" "^0.2.5"
249 + hoist-non-react-statics "^3.3.1"
250 +
251 +"@emotion/serialize@^1.0.2", "@emotion/serialize@^1.0.4":
252 + version "1.0.4"
253 + resolved "https://registry.yarnpkg.com/@emotion/serialize/-/serialize-1.0.4.tgz#ff31fd11bb07999611199c2229e152faadc21a3c"
254 + integrity sha512-1JHamSpH8PIfFwAMryO2bNka+y8+KA5yga5Ocf2d7ZEiJjb7xlLW7aknBGZqJLajuLOvJ+72vN+IBSwPlXD1Pg==
255 + dependencies:
256 + "@emotion/hash" "^0.8.0"
257 + "@emotion/memoize" "^0.7.4"
258 + "@emotion/unitless" "^0.7.5"
259 + "@emotion/utils" "^1.0.0"
260 + csstype "^3.0.2"
261 +
262 +"@emotion/sheet@^1.1.1":
263 + version "1.1.1"
264 + resolved "https://registry.yarnpkg.com/@emotion/sheet/-/sheet-1.1.1.tgz#015756e2a9a3c7c5f11d8ec22966a8dbfbfac787"
265 + integrity sha512-J3YPccVRMiTZxYAY0IOq3kd+hUP8idY8Kz6B/Cyo+JuXq52Ek+zbPbSQUrVQp95aJ+lsAW7DPL1P2Z+U1jGkKA==
266 +
267 +"@emotion/styled@^11.9.3":
268 + version "11.9.3"
269 + resolved "https://registry.yarnpkg.com/@emotion/styled/-/styled-11.9.3.tgz#47f0c71137fec7c57035bf3659b52fb536792340"
270 + integrity sha512-o3sBNwbtoVz9v7WB1/Y/AmXl69YHmei2mrVnK7JgyBJ//Rst5yqPZCecEJlMlJrFeWHp+ki/54uN265V2pEcXA==
271 + dependencies:
272 + "@babel/runtime" "^7.13.10"
273 + "@emotion/babel-plugin" "^11.7.1"
274 + "@emotion/is-prop-valid" "^1.1.3"
275 + "@emotion/serialize" "^1.0.4"
276 + "@emotion/utils" "^1.1.0"
277 +
278 +"@emotion/unitless@^0.7.5":
279 + version "0.7.5"
280 + resolved "https://registry.yarnpkg.com/@emotion/unitless/-/unitless-0.7.5.tgz#77211291c1900a700b8a78cfafda3160d76949ed"
281 + integrity sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg==
282 +
283 +"@emotion/utils@^1.0.0", "@emotion/utils@^1.1.0":
284 + version "1.1.0"
285 + resolved "https://registry.yarnpkg.com/@emotion/utils/-/utils-1.1.0.tgz#86b0b297f3f1a0f2bdb08eeac9a2f49afd40d0cf"
286 + integrity sha512-iRLa/Y4Rs5H/f2nimczYmS5kFJEbpiVvgN3XVfZ022IYhuNA1IRSHEizcof88LtCTXtl9S2Cxt32KgaXEu72JQ==
287 +
288 +"@emotion/weak-memoize@^0.2.5":
289 + version "0.2.5"
290 + resolved "https://registry.yarnpkg.com/@emotion/weak-memoize/-/weak-memoize-0.2.5.tgz#8eed982e2ee6f7f4e44c253e12962980791efd46"
291 + integrity sha512-6U71C2Wp7r5XtFtQzYrW5iKFT67OixrSxjI4MptCHzdSVlgabczzqLe0ZSgnub/5Kp4hSbpDB1tMytZY9pwxxA==
292 +
293 +"@eslint/eslintrc@^1.3.0":
294 + version "1.3.0"
295 + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-1.3.0.tgz#29f92c30bb3e771e4a2048c95fa6855392dfac4f"
296 + integrity sha512-UWW0TMTmk2d7hLcWD1/e2g5HDM/HQ3csaLSqXCfqwh4uNDuNqlaKWXmEsL4Cs41Z0KnILNvwbHAah3C2yt06kw==
297 + dependencies:
298 + ajv "^6.12.4"
299 + debug "^4.3.2"
300 + espree "^9.3.2"
301 + globals "^13.15.0"
302 + ignore "^5.2.0"
303 + import-fresh "^3.2.1"
304 + js-yaml "^4.1.0"
305 + minimatch "^3.1.2"
306 + strip-json-comments "^3.1.1"
307 +
308 +"@heroicons/react@^1.0.6":
309 + version "1.0.6"
310 + resolved "https://registry.yarnpkg.com/@heroicons/react/-/react-1.0.6.tgz#35dd26987228b39ef2316db3b1245c42eb19e324"
311 + integrity sha512-JJCXydOFWMDpCP4q13iEplA503MQO3xLoZiKum+955ZCtHINWnx26CUxVxxFQu/uLb4LW3ge15ZpzIkXKkJ8oQ==
312 +
313 +"@hpcc-js/wasm@^1.15.0":
314 + version "1.15.0"
315 + resolved "https://registry.yarnpkg.com/@hpcc-js/wasm/-/wasm-1.15.0.tgz#0247d773e95c0d7030ffe6402f0946d54c0338e1"
316 + integrity sha512-bnKS3KT3cVlpIkoNoBC4SwHtKZz6k3/FPS1T6NKcigma71A6SnSo6blSERwAP5gpKOKdcGDAoBajUG7e8frWtg==
317 + dependencies:
318 + yargs "^17.5.1"
319 +
320 +"@humanwhocodes/config-array@^0.9.2":
321 + version "0.9.5"
322 + resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.9.5.tgz#2cbaf9a89460da24b5ca6531b8bbfc23e1df50c7"
323 + integrity sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw==
324 + dependencies:
325 + "@humanwhocodes/object-schema" "^1.2.1"
326 + debug "^4.1.1"
327 + minimatch "^3.0.4"
328 +
329 +"@humanwhocodes/object-schema@^1.2.1":
330 + version "1.2.1"
331 + resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45"
332 + integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==
333 +
334 +"@jest/schemas@^28.1.3":
335 + version "28.1.3"
336 + resolved "https://registry.yarnpkg.com/@jest/schemas/-/schemas-28.1.3.tgz#ad8b86a66f11f33619e3d7e1dcddd7f2d40ff905"
337 + integrity sha512-/l/VWsdt/aBXgjshLWOFyFt3IVdYypu5y2Wn2rOO1un6nkqIn8SLXzgIMYXFyYsRWDyF5EthmKJMIdJvk08grg==
338 + dependencies:
339 + "@sinclair/typebox" "^0.24.1"
340 +
341 +"@jridgewell/gen-mapping@^0.3.0":
342 + version "0.3.1"
343 + resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.1.tgz#cf92a983c83466b8c0ce9124fadeaf09f7c66ea9"
344 + integrity sha512-GcHwniMlA2z+WFPWuY8lp3fsza0I8xPFMWL5+n8LYyP6PSvPrXf4+n8stDHZY2DM0zy9sVkRDy1jDI4XGzYVqg==
345 + dependencies:
346 + "@jridgewell/set-array" "^1.0.0"
347 + "@jridgewell/sourcemap-codec" "^1.4.10"
348 + "@jridgewell/trace-mapping" "^0.3.9"
349 +
350 +"@jridgewell/resolve-uri@^3.0.3":
351 + version "3.0.7"
352 + resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.0.7.tgz#30cd49820a962aff48c8fffc5cd760151fca61fe"
353 + integrity sha512-8cXDaBBHOr2pQ7j77Y6Vp5VDT2sIqWyWQ56TjEq4ih/a4iST3dItRe8Q9fp0rrIl9DoKhWQtUQz/YpOxLkXbNA==
354 +
355 +"@jridgewell/set-array@^1.0.0":
356 + version "1.1.1"
357 + resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.1.tgz#36a6acc93987adcf0ba50c66908bd0b70de8afea"
358 + integrity sha512-Ct5MqZkLGEXTVmQYbGtx9SVqD2fqwvdubdps5D3djjAkgkKwT918VNOz65pEHFaYTeWcukmJmH5SwsA9Tn2ObQ==
359 +
360 +"@jridgewell/source-map@^0.3.2":
361 + version "0.3.2"
362 + resolved "https://registry.yarnpkg.com/@jridgewell/source-map/-/source-map-0.3.2.tgz#f45351aaed4527a298512ec72f81040c998580fb"
363 + integrity sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==
364 + dependencies:
365 + "@jridgewell/gen-mapping" "^0.3.0"
366 + "@jridgewell/trace-mapping" "^0.3.9"
367 +
368 +"@jridgewell/sourcemap-codec@^1.4.10":
369 + version "1.4.13"
370 + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.13.tgz#b6461fb0c2964356c469e115f504c95ad97ab88c"
371 + integrity sha512-GryiOJmNcWbovBxTfZSF71V/mXbgcV3MewDe3kIMCLyIh5e7SKAeUZs+rMnJ8jkMolZ/4/VsdBmMrw3l+VdZ3w==
372 +
373 +"@jridgewell/trace-mapping@^0.3.9":
374 + version "0.3.13"
375 + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.13.tgz#dcfe3e95f224c8fe97a87a5235defec999aa92ea"
376 + integrity sha512-o1xbKhp9qnIAoHJSWd6KlCZfqslL4valSF81H8ImioOAxluWYWOpWkpyktY2vnt4tbrX9XYaxovq6cgowaJp2w==
377 + dependencies:
378 + "@jridgewell/resolve-uri" "^3.0.3"
379 + "@jridgewell/sourcemap-codec" "^1.4.10"
380 +
381 +"@monaco-editor/loader@^1.3.2":
382 + version "1.3.2"
383 + resolved "https://registry.yarnpkg.com/@monaco-editor/loader/-/loader-1.3.2.tgz#04effbb87052d19cd7d3c9d81c0635490f9bb6d8"
384 + integrity sha512-BTDbpHl3e47r3AAtpfVFTlAi7WXv4UQ/xZmz8atKl4q7epQV5e7+JbigFDViWF71VBi4IIBdcWP57Hj+OWuc9g==
385 + dependencies:
386 + state-local "^1.0.6"
387 +
388 +"@monaco-editor/react@^4.4.5":
389 + version "4.4.5"
390 + resolved "https://registry.yarnpkg.com/@monaco-editor/react/-/react-4.4.5.tgz#beabe491efeb2457441a00d1c7651c653697f65b"
391 + integrity sha512-IImtzU7sRc66OOaQVCG+5PFHkSWnnhrUWGBuH6zNmH2h0YgmAhcjHZQc/6MY9JWEbUtVF1WPBMJ9u1XuFbRrVA==
392 + dependencies:
393 + "@monaco-editor/loader" "^1.3.2"
394 + prop-types "^15.7.2"
395 +
396 +"@mui/base@5.0.0-alpha.90":
397 + version "5.0.0-alpha.90"
398 + resolved "https://registry.yarnpkg.com/@mui/base/-/base-5.0.0-alpha.90.tgz#73700ba74e5c75096ee5d0bfe3ba4a3b3b81beef"
399 + integrity sha512-hNKwzr+RkiuGsGrakz8Q2i5ezr4Dz4b4Qsdipt9SiMrhuFAra/i501VSaEIzwec9LC4G+vtW4fE7yJBB0XaAYw==
400 + dependencies:
401 + "@babel/runtime" "^7.17.2"
402 + "@emotion/is-prop-valid" "^1.1.3"
403 + "@mui/types" "^7.1.4"
404 + "@mui/utils" "^5.9.1"
405 + "@popperjs/core" "^2.11.5"
406 + clsx "^1.2.1"
407 + prop-types "^15.8.1"
408 + react-is "^18.2.0"
409 +
410 +"@mui/material@^5.9.1":
411 + version "5.9.1"
412 + resolved "https://registry.yarnpkg.com/@mui/material/-/material-5.9.1.tgz#92990e6d4035792430dcf548b91db6f335aebdd3"
413 + integrity sha512-c09SbaMm7Rl7Df9JRkXwPWNbnfrutmHERTJC46OJ9OMAM9+HGQihIbGln1k2Xj65jb3E+G498FZFAoSrrBDvwQ==
414 + dependencies:
415 + "@babel/runtime" "^7.17.2"
416 + "@mui/base" "5.0.0-alpha.90"
417 + "@mui/system" "^5.9.1"
418 + "@mui/types" "^7.1.4"
419 + "@mui/utils" "^5.9.1"
420 + "@types/react-transition-group" "^4.4.5"
421 + clsx "^1.2.1"
422 + csstype "^3.1.0"
423 + prop-types "^15.8.1"
424 + react-is "^18.2.0"
425 + react-transition-group "^4.4.2"
426 +
427 +"@mui/private-theming@^5.9.1":
428 + version "5.9.1"
429 + resolved "https://registry.yarnpkg.com/@mui/private-theming/-/private-theming-5.9.1.tgz#4f714ed9ebd587373dc77b3fc69e9f3e720f0190"
430 + integrity sha512-eIh2IZJInNTdgPLMo9cruzm8UDX5amBBxxsSoNre7lRj3wcsu3TG5OKjIbzkf4VxHHEhdPeNNQyt92k7L78u2A==
431 + dependencies:
432 + "@babel/runtime" "^7.17.2"
433 + "@mui/utils" "^5.9.1"
434 + prop-types "^15.8.1"
435 +
436 +"@mui/styled-engine@^5.8.7":
437 + version "5.8.7"
438 + resolved "https://registry.yarnpkg.com/@mui/styled-engine/-/styled-engine-5.8.7.tgz#63d0779c07677fe76d4705a02c7ae99f89b50780"
439 + integrity sha512-tVqtowjbYmiRq+qcqXK731L9eWoL9H8xTRhuTgaDGKdch1zlt4I2UwInUe1w2N9N/u3/jHsFbLcl1Un3uOwpQg==
440 + dependencies:
441 + "@babel/runtime" "^7.17.2"
442 + "@emotion/cache" "^11.9.3"
443 + csstype "^3.1.0"
444 + prop-types "^15.8.1"
445 +
446 +"@mui/system@^5.9.1":
447 + version "5.9.1"
448 + resolved "https://registry.yarnpkg.com/@mui/system/-/system-5.9.1.tgz#dadd1094b1582781cc524b112a0a126f60b23c25"
449 + integrity sha512-ZixTmc2+sYp++avoYJ38eM70nfwwudN06vYCU4kfwa4nQPiH+bhLYZnfYkcXRKiDR/hfT0dptbOOfQGZqBYczQ==
450 + dependencies:
451 + "@babel/runtime" "^7.17.2"
452 + "@mui/private-theming" "^5.9.1"
453 + "@mui/styled-engine" "^5.8.7"
454 + "@mui/types" "^7.1.4"
455 + "@mui/utils" "^5.9.1"
456 + clsx "^1.2.1"
457 + csstype "^3.1.0"
458 + prop-types "^15.8.1"
459 +
460 +"@mui/types@^7.1.4":
461 + version "7.1.4"
462 + resolved "https://registry.yarnpkg.com/@mui/types/-/types-7.1.4.tgz#4185c05d6df63ec673cda15feab80440abadc764"
463 + integrity sha512-uveM3byMbthO+6tXZ1n2zm0W3uJCQYtwt/v5zV5I77v2v18u0ITkb8xwhsDD2i3V2Kye7SaNR6FFJ6lMuY/WqQ==
464 +
465 +"@mui/utils@^5.9.1":
466 + version "5.9.1"
467 + resolved "https://registry.yarnpkg.com/@mui/utils/-/utils-5.9.1.tgz#2b2c9dadbf8ba6561e145b5688fb7df5ef15a934"
468 + integrity sha512-8+4adOR3xusyJwvbnZxcjqcmbWvl7Og+260ZKIrSvwnFs0aLubL+8MhiceeDDGcmb0bTKxfUgRJ96j32Jb7P+A==
469 + dependencies:
470 + "@babel/runtime" "^7.17.2"
471 + "@types/prop-types" "^15.7.5"
472 + "@types/react-is" "^16.7.1 || ^17.0.0"
473 + prop-types "^15.8.1"
474 + react-is "^18.2.0"
475 +
476 +"@next/env@12.1.6":
477 + version "12.1.6"
478 + resolved "https://registry.yarnpkg.com/@next/env/-/env-12.1.6.tgz#5f44823a78335355f00f1687cfc4f1dafa3eca08"
479 + integrity sha512-Te/OBDXFSodPU6jlXYPAXpmZr/AkG6DCATAxttQxqOWaq6eDFX25Db3dK0120GZrSZmv4QCe9KsZmJKDbWs4OA==
480 +
481 +"@next/eslint-plugin-next@12.1.6":
482 + version "12.1.6"
483 + resolved "https://registry.yarnpkg.com/@next/eslint-plugin-next/-/eslint-plugin-next-12.1.6.tgz#dde3f98831f15923b25244588d924c716956292e"
484 + integrity sha512-yNUtJ90NEiYFT6TJnNyofKMPYqirKDwpahcbxBgSIuABwYOdkGwzos1ZkYD51Qf0diYwpQZBeVqElTk7Q2WNqw==
485 + dependencies:
486 + glob "7.1.7"
487 +
488 +"@next/swc-android-arm-eabi@12.1.6":
489 + version "12.1.6"
490 + resolved "https://registry.yarnpkg.com/@next/swc-android-arm-eabi/-/swc-android-arm-eabi-12.1.6.tgz#79a35349b98f2f8c038ab6261aa9cd0d121c03f9"
491 + integrity sha512-BxBr3QAAAXWgk/K7EedvzxJr2dE014mghBSA9iOEAv0bMgF+MRq4PoASjuHi15M2zfowpcRG8XQhMFtxftCleQ==
492 +
493 +"@next/swc-android-arm64@12.1.6":
494 + version "12.1.6"
495 + resolved "https://registry.yarnpkg.com/@next/swc-android-arm64/-/swc-android-arm64-12.1.6.tgz#ec08ea61794f8752c8ebcacbed0aafc5b9407456"
496 + integrity sha512-EboEk3ROYY7U6WA2RrMt/cXXMokUTXXfnxe2+CU+DOahvbrO8QSWhlBl9I9ZbFzJx28AGB9Yo3oQHCvph/4Lew==
497 +
498 +"@next/swc-darwin-arm64@12.1.6":
499 + version "12.1.6"
500 + resolved "https://registry.yarnpkg.com/@next/swc-darwin-arm64/-/swc-darwin-arm64-12.1.6.tgz#d1053805615fd0706e9b1667893a72271cd87119"
501 + integrity sha512-P0EXU12BMSdNj1F7vdkP/VrYDuCNwBExtRPDYawgSUakzi6qP0iKJpya2BuLvNzXx+XPU49GFuDC5X+SvY0mOw==
502 +
503 +"@next/swc-darwin-x64@12.1.6":
504 + version "12.1.6"
505 + resolved "https://registry.yarnpkg.com/@next/swc-darwin-x64/-/swc-darwin-x64-12.1.6.tgz#2d1b926a22f4c5230d5b311f9c56cfdcc406afec"
506 + integrity sha512-9FptMnbgHJK3dRDzfTpexs9S2hGpzOQxSQbe8omz6Pcl7rnEp9x4uSEKY51ho85JCjL4d0tDLBcXEJZKKLzxNg==
507 +
508 +"@next/swc-linux-arm-gnueabihf@12.1.6":
509 + version "12.1.6"
510 + resolved "https://registry.yarnpkg.com/@next/swc-linux-arm-gnueabihf/-/swc-linux-arm-gnueabihf-12.1.6.tgz#c021918d2a94a17f823106a5e069335b8a19724f"
511 + integrity sha512-PvfEa1RR55dsik/IDkCKSFkk6ODNGJqPY3ysVUZqmnWMDSuqFtf7BPWHFa/53znpvVB5XaJ5Z1/6aR5CTIqxPw==
512 +
513 +"@next/swc-linux-arm64-gnu@12.1.6":
514 + version "12.1.6"
515 + resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-12.1.6.tgz#ac55c07bfabde378dfa0ce2b8fc1c3b2897e81ae"
516 + integrity sha512-53QOvX1jBbC2ctnmWHyRhMajGq7QZfl974WYlwclXarVV418X7ed7o/EzGY+YVAEKzIVaAB9JFFWGXn8WWo0gQ==
517 +
518 +"@next/swc-linux-arm64-musl@12.1.6":
519 + version "12.1.6"
520 + resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-12.1.6.tgz#e429f826279894be9096be6bec13e75e3d6bd671"
521 + integrity sha512-CMWAkYqfGdQCS+uuMA1A2UhOfcUYeoqnTW7msLr2RyYAys15pD960hlDfq7QAi8BCAKk0sQ2rjsl0iqMyziohQ==
522 +
523 +"@next/swc-linux-x64-gnu@12.1.6":
524 + version "12.1.6"
525 + resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-12.1.6.tgz#1f276c0784a5ca599bfa34b2fcc0b38f3a738e08"
526 + integrity sha512-AC7jE4Fxpn0s3ujngClIDTiEM/CQiB2N2vkcyWWn6734AmGT03Duq6RYtPMymFobDdAtZGFZd5nR95WjPzbZAQ==
527 +
528 +"@next/swc-linux-x64-musl@12.1.6":
529 + version "12.1.6"
530 + resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-12.1.6.tgz#1d9933dd6ba303dcfd8a2acd6ac7c27ed41e2eea"
531 + integrity sha512-c9Vjmi0EVk0Kou2qbrynskVarnFwfYIi+wKufR9Ad7/IKKuP6aEhOdZiIIdKsYWRtK2IWRF3h3YmdnEa2WLUag==
532 +
533 +"@next/swc-win32-arm64-msvc@12.1.6":
534 + version "12.1.6"
535 + resolved "https://registry.yarnpkg.com/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-12.1.6.tgz#2ef9837f12ca652b1783d72ecb86208906042f02"
536 + integrity sha512-3UTOL/5XZSKFelM7qN0it35o3Cegm6LsyuERR3/OoqEExyj3aCk7F025b54/707HTMAnjlvQK3DzLhPu/xxO4g==
537 +
538 +"@next/swc-win32-ia32-msvc@12.1.6":
539 + version "12.1.6"
540 + resolved "https://registry.yarnpkg.com/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-12.1.6.tgz#74003d0aa1c59dfa56cb15481a5c607cbc0027b9"
541 + integrity sha512-8ZWoj6nCq6fI1yCzKq6oK0jE6Mxlz4MrEsRyu0TwDztWQWe7rh4XXGLAa2YVPatYcHhMcUL+fQQbqd1MsgaSDA==
542 +
543 +"@next/swc-win32-x64-msvc@12.1.6":
544 + version "12.1.6"
545 + resolved "https://registry.yarnpkg.com/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-12.1.6.tgz#a350caf42975e7197b24b495b8d764eec7e6a36e"
546 + integrity sha512-4ZEwiRuZEicXhXqmhw3+de8Z4EpOLQj/gp+D9fFWo6ii6W1kBkNNvvEx4A90ugppu+74pT1lIJnOuz3A9oQeJA==
547 +
548 +"@nodelib/fs.scandir@2.1.5":
549 + version "2.1.5"
550 + resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5"
551 + integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==
552 + dependencies:
553 + "@nodelib/fs.stat" "2.0.5"
554 + run-parallel "^1.1.9"
555 +
556 +"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2":
557 + version "2.0.5"
558 + resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b"
559 + integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==
560 +
561 +"@nodelib/fs.walk@^1.2.3":
562 + version "1.2.8"
563 + resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a"
564 + integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==
565 + dependencies:
566 + "@nodelib/fs.scandir" "2.1.5"
567 + fastq "^1.6.0"
568 +
569 +"@popperjs/core@^2.11.5":
570 + version "2.11.5"
571 + resolved "https://registry.yarnpkg.com/@popperjs/core/-/core-2.11.5.tgz#db5a11bf66bdab39569719555b0f76e138d7bd64"
572 + integrity sha512-9X2obfABZuDVLCgPK9aX0a/x4jaOEweTTWE2+9sr0Qqqevj2Uv5XorvusThmc9XGYpS9yI+fhh8RTafBtGposw==
573 +
574 +"@rushstack/eslint-patch@^1.1.3":
575 + version "1.1.3"
576 + resolved "https://registry.yarnpkg.com/@rushstack/eslint-patch/-/eslint-patch-1.1.3.tgz#6801033be7ff87a6b7cadaf5b337c9f366a3c4b0"
577 + integrity sha512-WiBSI6JBIhC6LRIsB2Kwh8DsGTlbBU+mLRxJmAe3LjHTdkDpwIbEOZgoXBbZilk/vlfjK8i6nKRAvIRn1XaIMw==
578 +
579 +"@sinclair/typebox@^0.24.1":
580 + version "0.24.22"
581 + resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.24.22.tgz#0da18e6e75701d6609c7c68fe18002bb1f47345f"
582 + integrity sha512-JsBe3cOFpNZ6yjBYnXKhcENWy5qZE3PQZwExQ5ksA/h8qp4bwwxFmy07A6bC2R6qv6+RF3SfrbQTskTwYNTXUQ==
583 +
584 +"@types/babel__standalone@^7.1.4":
585 + version "7.1.4"
586 + resolved "https://registry.yarnpkg.com/@types/babel__standalone/-/babel__standalone-7.1.4.tgz#a0c04d1e1bf519468edde5fb245d97ae31e425ae"
587 + integrity sha512-HijIDmcNl3Wmo0guqjYkQvMzyRCM6zMCkYcdG8f+2X7mPBNa9ikSeaQlWs2Yg18KN1klOJzyupX5BPOf+7ahaw==
588 + dependencies:
589 + "@babel/core" "^7.1.0"
590 +
591 +"@types/json5@^0.0.29":
592 + version "0.0.29"
593 + resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee"
594 + integrity sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==
595 +
596 +"@types/node@17.0.40":
597 + version "17.0.40"
598 + resolved "https://registry.yarnpkg.com/@types/node/-/node-17.0.40.tgz#76ee88ae03650de8064a6cf75b8d95f9f4a16090"
599 + integrity sha512-UXdBxNGqTMtm7hCwh9HtncFVLrXoqA3oJW30j6XWp5BH/wu3mVeaxo7cq5benFdBw34HB3XDT2TRPI7rXZ+mDg==
600 +
601 +"@types/parse-json@^4.0.0":
602 + version "4.0.0"
603 + resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0"
604 + integrity sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==
605 +
606 +"@types/prettier@^2.6.3":
607 + version "2.6.3"
608 + resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.6.3.tgz#68ada76827b0010d0db071f739314fa429943d0a"
609 + integrity sha512-ymZk3LEC/fsut+/Q5qejp6R9O1rMxz3XaRHDV6kX8MrGAhOSPqVARbDi+EZvInBpw+BnCX3TD240byVkOfQsHg==
610 +
611 +"@types/prop-types@*", "@types/prop-types@^15.7.5":
612 + version "15.7.5"
613 + resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.5.tgz#5f19d2b85a98e9558036f6a3cacc8819420f05cf"
614 + integrity sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==
615 +
616 +"@types/react-dom@18.0.5":
617 + version "18.0.5"
618 + resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-18.0.5.tgz#330b2d472c22f796e5531446939eacef8378444a"
619 + integrity sha512-OWPWTUrY/NIrjsAPkAk1wW9LZeIjSvkXRhclsFO8CZcZGCOg2G0YZy4ft+rOyYxy8B7ui5iZzi9OkDebZ7/QSA==
620 + dependencies:
621 + "@types/react" "*"
622 +
623 +"@types/react-is@^16.7.1 || ^17.0.0":
624 + version "17.0.3"
625 + resolved "https://registry.yarnpkg.com/@types/react-is/-/react-is-17.0.3.tgz#2d855ba575f2fc8d17ef9861f084acc4b90a137a"
626 + integrity sha512-aBTIWg1emtu95bLTLx0cpkxwGW3ueZv71nE2YFBpL8k/z5czEW8yYpOo8Dp+UUAFAtKwNaOsh/ioSeQnWlZcfw==
627 + dependencies:
628 + "@types/react" "*"
629 +
630 +"@types/react-transition-group@^4.4.5":
631 + version "4.4.5"
632 + resolved "https://registry.yarnpkg.com/@types/react-transition-group/-/react-transition-group-4.4.5.tgz#aae20dcf773c5aa275d5b9f7cdbca638abc5e416"
633 + integrity sha512-juKD/eiSM3/xZYzjuzH6ZwpP+/lejltmiS3QEzV/vmb/Q8+HfDmxu+Baga8UEMGBqV88Nbg4l2hY/K2DkyaLLA==
634 + dependencies:
635 + "@types/react" "*"
636 +
637 +"@types/react@*", "@types/react@18.0.12":
638 + version "18.0.12"
639 + resolved "https://registry.yarnpkg.com/@types/react/-/react-18.0.12.tgz#cdaa209d0a542b3fcf69cf31a03976ec4cdd8840"
640 + integrity sha512-duF1OTASSBQtcigUvhuiTB1Ya3OvSy+xORCiEf20H0P0lzx+/KeVsA99U5UjLXSbyo1DRJDlLKqTeM1ngosqtg==
641 + dependencies:
642 + "@types/prop-types" "*"
643 + "@types/scheduler" "*"
644 + csstype "^3.0.2"
645 +
646 +"@types/scheduler@*":
647 + version "0.16.2"
648 + resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.16.2.tgz#1a62f89525723dde24ba1b01b092bf5df8ad4d39"
649 + integrity sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==
650 +
651 +"@typescript-eslint/parser@^5.21.0":
652 + version "5.28.0"
653 + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.28.0.tgz#639b101cad2bfb7ae16e69710ac95c42bd4eae33"
654 + integrity sha512-ekqoNRNK1lAcKhZESN/PdpVsWbP9jtiNqzFWkp/yAUdZvJalw2heCYuqRmM5eUJSIYEkgq5sGOjq+ZqsLMjtRA==
655 + dependencies:
656 + "@typescript-eslint/scope-manager" "5.28.0"
657 + "@typescript-eslint/types" "5.28.0"
658 + "@typescript-eslint/typescript-estree" "5.28.0"
659 + debug "^4.3.4"
660 +
661 +"@typescript-eslint/scope-manager@5.28.0":
662 + version "5.28.0"
663 + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.28.0.tgz#ef9a5c68fecde72fd2ff8a84b9c120324826c1b9"
664 + integrity sha512-LeBLTqF/he1Z+boRhSqnso6YrzcKMTQ8bO/YKEe+6+O/JGof9M0g3IJlIsqfrK/6K03MlFIlycbf1uQR1IjE+w==
665 + dependencies:
666 + "@typescript-eslint/types" "5.28.0"
667 + "@typescript-eslint/visitor-keys" "5.28.0"
668 +
669 +"@typescript-eslint/types@5.28.0":
670 + version "5.28.0"
671 + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.28.0.tgz#cffd9bcdce28db6daaa146e48a0be4387a6f4e9d"
672 + integrity sha512-2OOm8ZTOQxqkPbf+DAo8oc16sDlVR5owgJfKheBkxBKg1vAfw2JsSofH9+16VPlN9PWtv8Wzhklkqw3k/zCVxA==
673 +
674 +"@typescript-eslint/typescript-estree@5.28.0":
675 + version "5.28.0"
676 + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.28.0.tgz#3487d158d091ca2772b285e67412ff6d9797d863"
677 + integrity sha512-9GX+GfpV+F4hdTtYc6OV9ZkyYilGXPmQpm6AThInpBmKJEyRSIjORJd1G9+bknb7OTFYL+Vd4FBJAO6T78OVqA==
678 + dependencies:
679 + "@typescript-eslint/types" "5.28.0"
680 + "@typescript-eslint/visitor-keys" "5.28.0"
681 + debug "^4.3.4"
682 + globby "^11.1.0"
683 + is-glob "^4.0.3"
684 + semver "^7.3.7"
685 + tsutils "^3.21.0"
686 +
687 +"@typescript-eslint/visitor-keys@5.28.0":
688 + version "5.28.0"
689 + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.28.0.tgz#982bb226b763c48fc1859a60de33fbf939d40a0f"
690 + integrity sha512-BtfP1vCor8cWacovzzPFOoeW4kBQxzmhxGoOpt0v1SFvG+nJ0cWaVdJk7cky1ArTcFHHKNIxyo2LLr3oNkSuXA==
691 + dependencies:
692 + "@typescript-eslint/types" "5.28.0"
693 + eslint-visitor-keys "^3.3.0"
694 +
695 +"@use-gesture/core@10.2.17":
696 + version "10.2.17"
697 + resolved "https://registry.yarnpkg.com/@use-gesture/core/-/core-10.2.17.tgz#dc78913cd5d105217c3f1d1c16a32ad6426a00ba"
698 + integrity sha512-62hCybe4x6oGZ1/JA9gSYIdghV1FqxCdvYWt9SqCEAAikwT1OmVl2Q/Uu8CP636L57D+DfXtw6PWM+fdhr4oJQ==
699 +
700 +"@use-gesture/react@^10.2.17":
701 + version "10.2.17"
702 + resolved "https://registry.yarnpkg.com/@use-gesture/react/-/react-10.2.17.tgz#00bc413da42a358dd3f9173c0631b54522e76614"
703 + integrity sha512-Vfrp1KgdYn/kOEUAYNXtGBCl2dr38s3G6rru1TOPs+cVUjfNyNxvJK56grUyJ336N3rQLK8F9G7+FfrHuc3g/Q==
704 + dependencies:
705 + "@use-gesture/core" "10.2.17"
706 +
707 +acorn-jsx@^5.3.2:
708 + version "5.3.2"
709 + resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937"
710 + integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==
711 +
712 +acorn-node@^1.8.2:
713 + version "1.8.2"
714 + resolved "https://registry.yarnpkg.com/acorn-node/-/acorn-node-1.8.2.tgz#114c95d64539e53dede23de8b9d96df7c7ae2af8"
715 + integrity sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==
716 + dependencies:
717 + acorn "^7.0.0"
718 + acorn-walk "^7.0.0"
719 + xtend "^4.0.2"
720 +
721 +acorn-walk@^7.0.0:
722 + version "7.2.0"
723 + resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-7.2.0.tgz#0de889a601203909b0fbe07b8938dc21d2e967bc"
724 + integrity sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==
725 +
726 +acorn@^7.0.0:
727 + version "7.4.1"
728 + resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa"
729 + integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==
730 +
731 +acorn@^8.5.0:
732 + version "8.8.0"
733 + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.0.tgz#88c0187620435c7f6015803f5539dae05a9dbea8"
734 + integrity sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w==
735 +
736 +acorn@^8.7.1:
737 + version "8.7.1"
738 + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.7.1.tgz#0197122c843d1bf6d0a5e83220a788f278f63c30"
739 + integrity sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A==
740 +
741 +ajv@^6.10.0, ajv@^6.12.4:
742 + version "6.12.6"
743 + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4"
744 + integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==
745 + dependencies:
746 + fast-deep-equal "^3.1.1"
747 + fast-json-stable-stringify "^2.0.0"
748 + json-schema-traverse "^0.4.1"
749 + uri-js "^4.2.2"
750 +
751 +ansi-regex@^5.0.1:
752 + version "5.0.1"
753 + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304"
754 + integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==
755 +
756 +ansi-styles@^3.2.1:
757 + version "3.2.1"
758 + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d"
759 + integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==
760 + dependencies:
761 + color-convert "^1.9.0"
762 +
763 +ansi-styles@^4.0.0, ansi-styles@^4.1.0:
764 + version "4.3.0"
765 + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937"
766 + integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==
767 + dependencies:
768 + color-convert "^2.0.1"
769 +
770 +ansi-styles@^5.0.0:
771 + version "5.2.0"
772 + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-5.2.0.tgz#07449690ad45777d1924ac2abb2fc8895dba836b"
773 + integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==
774 +
775 +anymatch@~3.1.2:
776 + version "3.1.2"
777 + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716"
778 + integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==
779 + dependencies:
780 + normalize-path "^3.0.0"
781 + picomatch "^2.0.4"
782 +
783 +arg@^5.0.2:
784 + version "5.0.2"
785 + resolved "https://registry.yarnpkg.com/arg/-/arg-5.0.2.tgz#c81433cc427c92c4dcf4865142dbca6f15acd59c"
786 + integrity sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==
787 +
788 +argparse@^2.0.1:
789 + version "2.0.1"
790 + resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38"
791 + integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==
792 +
793 +aria-query@^4.2.2:
794 + version "4.2.2"
795 + resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-4.2.2.tgz#0d2ca6c9aceb56b8977e9fed6aed7e15bbd2f83b"
796 + integrity sha512-o/HelwhuKpTj/frsOsbNLNgnNGVIFsVP/SW2BSF14gVl7kAfMOJ6/8wUAUvG1R1NHKrfG+2sHZTu0yauT1qBrA==
797 + dependencies:
798 + "@babel/runtime" "^7.10.2"
799 + "@babel/runtime-corejs3" "^7.10.2"
800 +
801 +array-includes@^3.1.4, array-includes@^3.1.5:
802 + version "3.1.5"
803 + resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.5.tgz#2c320010db8d31031fd2a5f6b3bbd4b1aad31bdb"
804 + integrity sha512-iSDYZMMyTPkiFasVqfuAQnWAYcvO/SeBSCGKePoEthjp4LEMTe4uLc7b025o4jAZpHhihh8xPo99TNWUWWkGDQ==
805 + dependencies:
806 + call-bind "^1.0.2"
807 + define-properties "^1.1.4"
808 + es-abstract "^1.19.5"
809 + get-intrinsic "^1.1.1"
810 + is-string "^1.0.7"
811 +
812 +array-union@^2.1.0:
813 + version "2.1.0"
814 + resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d"
815 + integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==
816 +
817 +array.prototype.flat@^1.2.5:
818 + version "1.3.0"
819 + resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.3.0.tgz#0b0c1567bf57b38b56b4c97b8aa72ab45e4adc7b"
820 + integrity sha512-12IUEkHsAhA4DY5s0FPgNXIdc8VRSqD9Zp78a5au9abH/SOBrsp082JOWFNTjkMozh8mqcdiKuaLGhPeYztxSw==
821 + dependencies:
822 + call-bind "^1.0.2"
823 + define-properties "^1.1.3"
824 + es-abstract "^1.19.2"
825 + es-shim-unscopables "^1.0.0"
826 +
827 +array.prototype.flatmap@^1.3.0:
828 + version "1.3.0"
829 + resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.3.0.tgz#a7e8ed4225f4788a70cd910abcf0791e76a5534f"
830 + integrity sha512-PZC9/8TKAIxcWKdyeb77EzULHPrIX/tIZebLJUQOMR1OwYosT8yggdfWScfTBCDj5utONvOuPQQumYsU2ULbkg==
831 + dependencies:
832 + call-bind "^1.0.2"
833 + define-properties "^1.1.3"
834 + es-abstract "^1.19.2"
835 + es-shim-unscopables "^1.0.0"
836 +
837 +ast-types-flow@^0.0.7:
838 + version "0.0.7"
839 + resolved "https://registry.yarnpkg.com/ast-types-flow/-/ast-types-flow-0.0.7.tgz#f70b735c6bca1a5c9c22d982c3e39e7feba3bdad"
840 + integrity sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag==
841 +
842 +autoprefixer@^10.4.7:
843 + version "10.4.7"
844 + resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-10.4.7.tgz#1db8d195f41a52ca5069b7593be167618edbbedf"
845 + integrity sha512-ypHju4Y2Oav95SipEcCcI5J7CGPuvz8oat7sUtYj3ClK44bldfvtvcxK6IEK++7rqB7YchDGzweZIBG+SD0ZAA==
846 + dependencies:
847 + browserslist "^4.20.3"
848 + caniuse-lite "^1.0.30001335"
849 + fraction.js "^4.2.0"
850 + normalize-range "^0.1.2"
851 + picocolors "^1.0.0"
852 + postcss-value-parser "^4.2.0"
853 +
854 +axe-core@^4.3.5:
855 + version "4.4.2"
856 + resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-4.4.2.tgz#dcf7fb6dea866166c3eab33d68208afe4d5f670c"
857 + integrity sha512-LVAaGp/wkkgYJcjmHsoKx4juT1aQvJyPcW09MLCjVTh3V2cc6PnyempiLMNH5iMdfIX/zdbjUx2KDjMLCTdPeA==
858 +
859 +axobject-query@^2.2.0:
860 + version "2.2.0"
861 + resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-2.2.0.tgz#943d47e10c0b704aa42275e20edf3722648989be"
862 + integrity sha512-Td525n+iPOOyUQIeBfcASuG6uJsDOITl7Mds5gFyerkWiX7qhUTdYUBlSgNMyVqtSJqwpt1kXGLdUt6SykLMRA==
863 +
864 +babel-plugin-macros@^2.6.1:
865 + version "2.8.0"
866 + resolved "https://registry.yarnpkg.com/babel-plugin-macros/-/babel-plugin-macros-2.8.0.tgz#0f958a7cc6556b1e65344465d99111a1e5e10138"
867 + integrity sha512-SEP5kJpfGYqYKpBrj5XU3ahw5p5GOHJ0U5ssOSQ/WBVdwkD2Dzlce95exQTs3jOVWPPKLBN2rlEWkCK7dSmLvg==
868 + dependencies:
869 + "@babel/runtime" "^7.7.2"
870 + cosmiconfig "^6.0.0"
871 + resolve "^1.12.0"
872 +
873 +balanced-match@^1.0.0:
874 + version "1.0.2"
875 + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee"
876 + integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==
877 +
878 +binary-extensions@^2.0.0:
879 + version "2.2.0"
880 + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d"
881 + integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==
882 +
883 +brace-expansion@^1.1.7:
884 + version "1.1.11"
885 + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd"
886 + integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==
887 + dependencies:
888 + balanced-match "^1.0.0"
889 + concat-map "0.0.1"
890 +
891 +braces@^3.0.2, braces@~3.0.2:
892 + version "3.0.2"
893 + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107"
894 + integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==
895 + dependencies:
896 + fill-range "^7.0.1"
897 +
898 +browserslist@^4.20.3:
899 + version "4.20.4"
900 + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.20.4.tgz#98096c9042af689ee1e0271333dbc564b8ce4477"
901 + integrity sha512-ok1d+1WpnU24XYN7oC3QWgTyMhY/avPJ/r9T00xxvUOIparA/gc+UPUMaod3i+G6s+nI2nUb9xZ5k794uIwShw==
902 + dependencies:
903 + caniuse-lite "^1.0.30001349"
904 + electron-to-chromium "^1.4.147"
905 + escalade "^3.1.1"
906 + node-releases "^2.0.5"
907 + picocolors "^1.0.0"
908 +
909 +buffer-from@^1.0.0:
910 + version "1.1.2"
911 + resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5"
912 + integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==
913 +
914 +call-bind@^1.0.0, call-bind@^1.0.2:
915 + version "1.0.2"
916 + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c"
917 + integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==
918 + dependencies:
919 + function-bind "^1.1.1"
920 + get-intrinsic "^1.0.2"
921 +
922 +callsites@^3.0.0:
923 + version "3.1.0"
924 + resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73"
925 + integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==
926 +
927 +camelcase-css@^2.0.1:
928 + version "2.0.1"
929 + resolved "https://registry.yarnpkg.com/camelcase-css/-/camelcase-css-2.0.1.tgz#ee978f6947914cc30c6b44741b6ed1df7f043fd5"
930 + integrity sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==
931 +
932 +caniuse-lite@^1.0.30001332, caniuse-lite@^1.0.30001335, caniuse-lite@^1.0.30001349:
933 + version "1.0.30001352"
934 + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001352.tgz#cc6f5da3f983979ad1e2cdbae0505dccaa7c6a12"
935 + integrity sha512-GUgH8w6YergqPQDGWhJGt8GDRnY0L/iJVQcU3eJ46GYf52R8tk0Wxp0PymuFVZboJYXGiCqwozAYZNRjVj6IcA==
936 +
937 +chalk@^2.0.0:
938 + version "2.4.2"
939 + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424"
940 + integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==
941 + dependencies:
942 + ansi-styles "^3.2.1"
943 + escape-string-regexp "^1.0.5"
944 + supports-color "^5.3.0"
945 +
946 +chalk@^4.0.0:
947 + version "4.1.2"
948 + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01"
949 + integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==
950 + dependencies:
951 + ansi-styles "^4.1.0"
952 + supports-color "^7.1.0"
953 +
954 +chokidar@^3.5.3:
955 + version "3.5.3"
956 + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd"
957 + integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==
958 + dependencies:
959 + anymatch "~3.1.2"
960 + braces "~3.0.2"
961 + glob-parent "~5.1.2"
962 + is-binary-path "~2.1.0"
963 + is-glob "~4.0.1"
964 + normalize-path "~3.0.0"
965 + readdirp "~3.6.0"
966 + optionalDependencies:
967 + fsevents "~2.3.2"
968 +
969 +cliui@^7.0.2:
970 + version "7.0.4"
971 + resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f"
972 + integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==
973 + dependencies:
974 + string-width "^4.2.0"
975 + strip-ansi "^6.0.0"
976 + wrap-ansi "^7.0.0"
977 +
978 +clsx@^1.1.0, clsx@^1.2.1:
979 + version "1.2.1"
980 + resolved "https://registry.yarnpkg.com/clsx/-/clsx-1.2.1.tgz#0ddc4a20a549b59c93a4116bb26f5294ca17dc12"
981 + integrity sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==
982 +
983 +clsx@^1.1.1:
984 + version "1.1.1"
985 + resolved "https://registry.yarnpkg.com/clsx/-/clsx-1.1.1.tgz#98b3134f9abbdf23b2663491ace13c5c03a73188"
986 + integrity sha512-6/bPho624p3S2pMyvP5kKBPXnI3ufHLObBFCfgx+LkeR5lg2XYy2hqZqUf45ypD8COn2bhgGJSUE+l5dhNBieA==
987 +
988 +color-convert@^1.9.0:
989 + version "1.9.3"
990 + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8"
991 + integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==
992 + dependencies:
993 + color-name "1.1.3"
994 +
995 +color-convert@^2.0.1:
996 + version "2.0.1"
997 + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3"
998 + integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==
999 + dependencies:
1000 + color-name "~1.1.4"
1001 +
1002 +color-name@1.1.3:
1003 + version "1.1.3"
1004 + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25"
1005 + integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==
1006 +
1007 +color-name@^1.1.4, color-name@~1.1.4:
1008 + version "1.1.4"
1009 + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2"
1010 + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==
1011 +
1012 +commander@^2.20.0:
1013 + version "2.20.3"
1014 + resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33"
1015 + integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==
1016 +
1017 +concat-map@0.0.1:
1018 + version "0.0.1"
1019 + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
1020 + integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==
1021 +
1022 +convert-source-map@^1.1.0, convert-source-map@^1.5.0:
1023 + version "1.8.0"
1024 + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.8.0.tgz#f3373c32d21b4d780dd8004514684fb791ca4369"
1025 + integrity sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==
1026 + dependencies:
1027 + safe-buffer "~5.1.1"
1028 +
1029 +core-js-pure@^3.20.2:
1030 + version "3.23.1"
1031 + resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.23.1.tgz#0b27e4c3ad46178b84e790dbbb81987218ab82ad"
1032 + integrity sha512-3qNgf6TqI3U1uhuSYRzJZGfFd4T+YlbyVPl+jgRiKjdZopvG4keZQwWZDAWpu1UH9nCgTpUzIV3GFawC7cJsqg==
1033 +
1034 +cosmiconfig@^6.0.0:
1035 + version "6.0.0"
1036 + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-6.0.0.tgz#da4fee853c52f6b1e6935f41c1a2fc50bd4a9982"
1037 + integrity sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==
1038 + dependencies:
1039 + "@types/parse-json" "^4.0.0"
1040 + import-fresh "^3.1.0"
1041 + parse-json "^5.0.0"
1042 + path-type "^4.0.0"
1043 + yaml "^1.7.2"
1044 +
1045 +cross-spawn@^7.0.2:
1046 + version "7.0.3"
1047 + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6"
1048 + integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==
1049 + dependencies:
1050 + path-key "^3.1.0"
1051 + shebang-command "^2.0.0"
1052 + which "^2.0.1"
1053 +
1054 +cssesc@^3.0.0:
1055 + version "3.0.0"
1056 + resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee"
1057 + integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==
1058 +
1059 +csstype@^3.0.2, csstype@^3.1.0:
1060 + version "3.1.0"
1061 + resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.0.tgz#4ddcac3718d787cf9df0d1b7d15033925c8f29f2"
1062 + integrity sha512-uX1KG+x9h5hIJsaKR9xHUeUraxf8IODOwq9JLNPq6BwB04a/xgpq3rcx47l5BZu5zBPlgD342tdke3Hom/nJRA==
1063 +
1064 +damerau-levenshtein@^1.0.7:
1065 + version "1.0.8"
1066 + resolved "https://registry.yarnpkg.com/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz#b43d286ccbd36bc5b2f7ed41caf2d0aba1f8a6e7"
1067 + integrity sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==
1068 +
1069 +debug@^2.6.9:
1070 + version "2.6.9"
1071 + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f"
1072 + integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==
1073 + dependencies:
1074 + ms "2.0.0"
1075 +
1076 +debug@^3.2.7:
1077 + version "3.2.7"
1078 + resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a"
1079 + integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==
1080 + dependencies:
1081 + ms "^2.1.1"
1082 +
1083 +debug@^4.1.0, debug@^4.1.1, debug@^4.3.2, debug@^4.3.4:
1084 + version "4.3.4"
1085 + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865"
1086 + integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==
1087 + dependencies:
1088 + ms "2.1.2"
1089 +
1090 +deep-is@^0.1.3:
1091 + version "0.1.4"
1092 + resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831"
1093 + integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==
1094 +
1095 +define-properties@^1.1.3, define-properties@^1.1.4:
1096 + version "1.1.4"
1097 + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.4.tgz#0b14d7bd7fbeb2f3572c3a7eda80ea5d57fb05b1"
1098 + integrity sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==
1099 + dependencies:
1100 + has-property-descriptors "^1.0.0"
1101 + object-keys "^1.1.1"
1102 +
1103 +defined@^1.0.0:
1104 + version "1.0.0"
1105 + resolved "https://registry.yarnpkg.com/defined/-/defined-1.0.0.tgz#c98d9bcef75674188e110969151199e39b1fa693"
1106 + integrity sha512-Y2caI5+ZwS5c3RiNDJ6u53VhQHv+hHKwhkI1iHvceKUHw9Df6EK2zRLfjejRgMuCuxK7PfSWIMwWecceVvThjQ==
1107 +
1108 +detective@^5.2.1:
1109 + version "5.2.1"
1110 + resolved "https://registry.yarnpkg.com/detective/-/detective-5.2.1.tgz#6af01eeda11015acb0e73f933242b70f24f91034"
1111 + integrity sha512-v9XE1zRnz1wRtgurGu0Bs8uHKFSTdteYZNbIPFVhUZ39L/S79ppMpdmVOZAnoz1jfEFodc48n6MX483Xo3t1yw==
1112 + dependencies:
1113 + acorn-node "^1.8.2"
1114 + defined "^1.0.0"
1115 + minimist "^1.2.6"
1116 +
1117 +didyoumean@^1.2.2:
1118 + version "1.2.2"
1119 + resolved "https://registry.yarnpkg.com/didyoumean/-/didyoumean-1.2.2.tgz#989346ffe9e839b4555ecf5666edea0d3e8ad037"
1120 + integrity sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==
1121 +
1122 +dir-glob@^3.0.1:
1123 + version "3.0.1"
1124 + resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f"
1125 + integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==
1126 + dependencies:
1127 + path-type "^4.0.0"
1128 +
1129 +dlv@^1.1.3:
1130 + version "1.1.3"
1131 + resolved "https://registry.yarnpkg.com/dlv/-/dlv-1.1.3.tgz#5c198a8a11453596e751494d49874bc7732f2e79"
1132 + integrity sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==
1133 +
1134 +doctrine@^2.1.0:
1135 + version "2.1.0"
1136 + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d"
1137 + integrity sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==
1138 + dependencies:
1139 + esutils "^2.0.2"
1140 +
1141 +doctrine@^3.0.0:
1142 + version "3.0.0"
1143 + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961"
1144 + integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==
1145 + dependencies:
1146 + esutils "^2.0.2"
1147 +
1148 +dom-helpers@^5.0.1:
1149 + version "5.2.1"
1150 + resolved "https://registry.yarnpkg.com/dom-helpers/-/dom-helpers-5.2.1.tgz#d9400536b2bf8225ad98fe052e029451ac40e902"
1151 + integrity sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==
1152 + dependencies:
1153 + "@babel/runtime" "^7.8.7"
1154 + csstype "^3.0.2"
1155 +
1156 +electron-to-chromium@^1.4.147:
1157 + version "1.4.155"
1158 + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.155.tgz#9c7190bf5e8608c5a5e4953b1ccf0facf3d1b49d"
1159 + integrity sha512-niPzKBSYPG06gxLKO0c2kEmgdRMTtIbNrBlvD31Ld8Q57b/K0218U4j8u/OOt25XE1eFOn47FcmQVdx9R1qqxA==
1160 +
1161 +emoji-regex@^8.0.0:
1162 + version "8.0.0"
1163 + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37"
1164 + integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==
1165 +
1166 +emoji-regex@^9.2.2:
1167 + version "9.2.2"
1168 + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72"
1169 + integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==
1170 +
1171 +enhanced-resolve@^5.7.0:
1172 + version "5.9.3"
1173 + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.9.3.tgz#44a342c012cbc473254af5cc6ae20ebd0aae5d88"
1174 + integrity sha512-Bq9VSor+kjvW3f9/MiiR4eE3XYgOl7/rS8lnSxbRbF3kS0B2r+Y9w5krBWxZgDxASVZbdYrn5wT4j/Wb0J9qow==
1175 + dependencies:
1176 + graceful-fs "^4.2.4"
1177 + tapable "^2.2.0"
1178 +
1179 +error-ex@^1.3.1:
1180 + version "1.3.2"
1181 + resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf"
1182 + integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==
1183 + dependencies:
1184 + is-arrayish "^0.2.1"
1185 +
1186 +es-abstract@^1.19.0, es-abstract@^1.19.1, es-abstract@^1.19.2, es-abstract@^1.19.5:
1187 + version "1.20.1"
1188 + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.20.1.tgz#027292cd6ef44bd12b1913b828116f54787d1814"
1189 + integrity sha512-WEm2oBhfoI2sImeM4OF2zE2V3BYdSF+KnSi9Sidz51fQHd7+JuF8Xgcj9/0o+OWeIeIS/MiuNnlruQrJf16GQA==
1190 + dependencies:
1191 + call-bind "^1.0.2"
1192 + es-to-primitive "^1.2.1"
1193 + function-bind "^1.1.1"
1194 + function.prototype.name "^1.1.5"
1195 + get-intrinsic "^1.1.1"
1196 + get-symbol-description "^1.0.0"
1197 + has "^1.0.3"
1198 + has-property-descriptors "^1.0.0"
1199 + has-symbols "^1.0.3"
1200 + internal-slot "^1.0.3"
1201 + is-callable "^1.2.4"
1202 + is-negative-zero "^2.0.2"
1203 + is-regex "^1.1.4"
1204 + is-shared-array-buffer "^1.0.2"
1205 + is-string "^1.0.7"
1206 + is-weakref "^1.0.2"
1207 + object-inspect "^1.12.0"
1208 + object-keys "^1.1.1"
1209 + object.assign "^4.1.2"
1210 + regexp.prototype.flags "^1.4.3"
1211 + string.prototype.trimend "^1.0.5"
1212 + string.prototype.trimstart "^1.0.5"
1213 + unbox-primitive "^1.0.2"
1214 +
1215 +es-shim-unscopables@^1.0.0:
1216 + version "1.0.0"
1217 + resolved "https://registry.yarnpkg.com/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz#702e632193201e3edf8713635d083d378e510241"
1218 + integrity sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==
1219 + dependencies:
1220 + has "^1.0.3"
1221 +
1222 +es-to-primitive@^1.2.1:
1223 + version "1.2.1"
1224 + resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a"
1225 + integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==
1226 + dependencies:
1227 + is-callable "^1.1.4"
1228 + is-date-object "^1.0.1"
1229 + is-symbol "^1.0.2"
1230 +
1231 +escalade@^3.1.1:
1232 + version "3.1.1"
1233 + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40"
1234 + integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==
1235 +
1236 +escape-string-regexp@^1.0.5:
1237 + version "1.0.5"
1238 + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
1239 + integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==
1240 +
1241 +escape-string-regexp@^4.0.0:
1242 + version "4.0.0"
1243 + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34"
1244 + integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==
1245 +
1246 +eslint-config-next@12.1.6:
1247 + version "12.1.6"
1248 + resolved "https://registry.yarnpkg.com/eslint-config-next/-/eslint-config-next-12.1.6.tgz#55097028982dce49159d8753000be3916ac55254"
1249 + integrity sha512-qoiS3g/EPzfCTkGkaPBSX9W0NGE/B1wNO3oWrd76QszVGrdpLggNqcO8+LR6MB0CNqtp9Q8NoeVrxNVbzM9hqA==
1250 + dependencies:
1251 + "@next/eslint-plugin-next" "12.1.6"
1252 + "@rushstack/eslint-patch" "^1.1.3"
1253 + "@typescript-eslint/parser" "^5.21.0"
1254 + eslint-import-resolver-node "^0.3.6"
1255 + eslint-import-resolver-typescript "^2.7.1"
1256 + eslint-plugin-import "^2.26.0"
1257 + eslint-plugin-jsx-a11y "^6.5.1"
1258 + eslint-plugin-react "^7.29.4"
1259 + eslint-plugin-react-hooks "^4.5.0"
1260 +
1261 +eslint-import-resolver-node@^0.3.6:
1262 + version "0.3.6"
1263 + resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz#4048b958395da89668252001dbd9eca6b83bacbd"
1264 + integrity sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw==
1265 + dependencies:
1266 + debug "^3.2.7"
1267 + resolve "^1.20.0"
1268 +
1269 +eslint-import-resolver-typescript@^2.7.1:
1270 + version "2.7.1"
1271 + resolved "https://registry.yarnpkg.com/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-2.7.1.tgz#a90a4a1c80da8d632df25994c4c5fdcdd02b8751"
1272 + integrity sha512-00UbgGwV8bSgUv34igBDbTOtKhqoRMy9bFjNehT40bXg6585PNIct8HhXZ0SybqB9rWtXj9crcku8ndDn/gIqQ==
1273 + dependencies:
1274 + debug "^4.3.4"
1275 + glob "^7.2.0"
1276 + is-glob "^4.0.3"
1277 + resolve "^1.22.0"
1278 + tsconfig-paths "^3.14.1"
1279 +
1280 +eslint-module-utils@^2.7.3:
1281 + version "2.7.3"
1282 + resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.7.3.tgz#ad7e3a10552fdd0642e1e55292781bd6e34876ee"
1283 + integrity sha512-088JEC7O3lDZM9xGe0RerkOMd0EjFl+Yvd1jPWIkMT5u3H9+HC34mWWPnqPrN13gieT9pBOO+Qt07Nb/6TresQ==
1284 + dependencies:
1285 + debug "^3.2.7"
1286 + find-up "^2.1.0"
1287 +
1288 +eslint-plugin-import@^2.26.0:
1289 + version "2.26.0"
1290 + resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.26.0.tgz#f812dc47be4f2b72b478a021605a59fc6fe8b88b"
1291 + integrity sha512-hYfi3FXaM8WPLf4S1cikh/r4IxnO6zrhZbEGz2b660EJRbuxgpDS5gkCuYgGWg2xxh2rBuIr4Pvhve/7c31koA==
1292 + dependencies:
1293 + array-includes "^3.1.4"
1294 + array.prototype.flat "^1.2.5"
1295 + debug "^2.6.9"
1296 + doctrine "^2.1.0"
1297 + eslint-import-resolver-node "^0.3.6"
1298 + eslint-module-utils "^2.7.3"
1299 + has "^1.0.3"
1300 + is-core-module "^2.8.1"
1301 + is-glob "^4.0.3"
1302 + minimatch "^3.1.2"
1303 + object.values "^1.1.5"
1304 + resolve "^1.22.0"
1305 + tsconfig-paths "^3.14.1"
1306 +
1307 +eslint-plugin-jsx-a11y@^6.5.1:
1308 + version "6.5.1"
1309 + resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.5.1.tgz#cdbf2df901040ca140b6ec14715c988889c2a6d8"
1310 + integrity sha512-sVCFKX9fllURnXT2JwLN5Qgo24Ug5NF6dxhkmxsMEUZhXRcGg+X3e1JbJ84YePQKBl5E0ZjAH5Q4rkdcGY99+g==
1311 + dependencies:
1312 + "@babel/runtime" "^7.16.3"
1313 + aria-query "^4.2.2"
1314 + array-includes "^3.1.4"
1315 + ast-types-flow "^0.0.7"
1316 + axe-core "^4.3.5"
1317 + axobject-query "^2.2.0"
1318 + damerau-levenshtein "^1.0.7"
1319 + emoji-regex "^9.2.2"
1320 + has "^1.0.3"
1321 + jsx-ast-utils "^3.2.1"
1322 + language-tags "^1.0.5"
1323 + minimatch "^3.0.4"
1324 +
1325 +eslint-plugin-react-hooks@^4.5.0:
1326 + version "4.6.0"
1327 + resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz#4c3e697ad95b77e93f8646aaa1630c1ba607edd3"
1328 + integrity sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==
1329 +
1330 +eslint-plugin-react@^7.29.4:
1331 + version "7.30.0"
1332 + resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.30.0.tgz#8e7b1b2934b8426ac067a0febade1b13bd7064e3"
1333 + integrity sha512-RgwH7hjW48BleKsYyHK5vUAvxtE9SMPDKmcPRQgtRCYaZA0XQPt5FSkrU3nhz5ifzMZcA8opwmRJ2cmOO8tr5A==
1334 + dependencies:
1335 + array-includes "^3.1.5"
1336 + array.prototype.flatmap "^1.3.0"
1337 + doctrine "^2.1.0"
1338 + estraverse "^5.3.0"
1339 + jsx-ast-utils "^2.4.1 || ^3.0.0"
1340 + minimatch "^3.1.2"
1341 + object.entries "^1.1.5"
1342 + object.fromentries "^2.0.5"
1343 + object.hasown "^1.1.1"
1344 + object.values "^1.1.5"
1345 + prop-types "^15.8.1"
1346 + resolve "^2.0.0-next.3"
1347 + semver "^6.3.0"
1348 + string.prototype.matchall "^4.0.7"
1349 +
1350 +eslint-scope@^7.1.1:
1351 + version "7.1.1"
1352 + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.1.1.tgz#fff34894c2f65e5226d3041ac480b4513a163642"
1353 + integrity sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==
1354 + dependencies:
1355 + esrecurse "^4.3.0"
1356 + estraverse "^5.2.0"
1357 +
1358 +eslint-utils@^3.0.0:
1359 + version "3.0.0"
1360 + resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-3.0.0.tgz#8aebaface7345bb33559db0a1f13a1d2d48c3672"
1361 + integrity sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==
1362 + dependencies:
1363 + eslint-visitor-keys "^2.0.0"
1364 +
1365 +eslint-visitor-keys@^2.0.0:
1366 + version "2.1.0"
1367 + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303"
1368 + integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==
1369 +
1370 +eslint-visitor-keys@^3.3.0:
1371 + version "3.3.0"
1372 + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz#f6480fa6b1f30efe2d1968aa8ac745b862469826"
1373 + integrity sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==
1374 +
1375 +eslint@8.17.0:
1376 + version "8.17.0"
1377 + resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.17.0.tgz#1cfc4b6b6912f77d24b874ca1506b0fe09328c21"
1378 + integrity sha512-gq0m0BTJfci60Fz4nczYxNAlED+sMcihltndR8t9t1evnU/azx53x3t2UHXC/uRjcbvRw/XctpaNygSTcQD+Iw==
1379 + dependencies:
1380 + "@eslint/eslintrc" "^1.3.0"
1381 + "@humanwhocodes/config-array" "^0.9.2"
1382 + ajv "^6.10.0"
1383 + chalk "^4.0.0"
1384 + cross-spawn "^7.0.2"
1385 + debug "^4.3.2"
1386 + doctrine "^3.0.0"
1387 + escape-string-regexp "^4.0.0"
1388 + eslint-scope "^7.1.1"
1389 + eslint-utils "^3.0.0"
1390 + eslint-visitor-keys "^3.3.0"
1391 + espree "^9.3.2"
1392 + esquery "^1.4.0"
1393 + esutils "^2.0.2"
1394 + fast-deep-equal "^3.1.3"
1395 + file-entry-cache "^6.0.1"
1396 + functional-red-black-tree "^1.0.1"
1397 + glob-parent "^6.0.1"
1398 + globals "^13.15.0"
1399 + ignore "^5.2.0"
1400 + import-fresh "^3.0.0"
1401 + imurmurhash "^0.1.4"
1402 + is-glob "^4.0.0"
1403 + js-yaml "^4.1.0"
1404 + json-stable-stringify-without-jsonify "^1.0.1"
1405 + levn "^0.4.1"
1406 + lodash.merge "^4.6.2"
1407 + minimatch "^3.1.2"
1408 + natural-compare "^1.4.0"
1409 + optionator "^0.9.1"
1410 + regexpp "^3.2.0"
1411 + strip-ansi "^6.0.1"
1412 + strip-json-comments "^3.1.0"
1413 + text-table "^0.2.0"
1414 + v8-compile-cache "^2.0.3"
1415 +
1416 +espree@^9.3.2:
1417 + version "9.3.2"
1418 + resolved "https://registry.yarnpkg.com/espree/-/espree-9.3.2.tgz#f58f77bd334731182801ced3380a8cc859091596"
1419 + integrity sha512-D211tC7ZwouTIuY5x9XnS0E9sWNChB7IYKX/Xp5eQj3nFXhqmiUDB9q27y76oFl8jTg3pXcQx/bpxMfs3CIZbA==
1420 + dependencies:
1421 + acorn "^8.7.1"
1422 + acorn-jsx "^5.3.2"
1423 + eslint-visitor-keys "^3.3.0"
1424 +
1425 +esquery@^1.4.0:
1426 + version "1.4.0"
1427 + resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.4.0.tgz#2148ffc38b82e8c7057dfed48425b3e61f0f24a5"
1428 + integrity sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==
1429 + dependencies:
1430 + estraverse "^5.1.0"
1431 +
1432 +esrecurse@^4.3.0:
1433 + version "4.3.0"
1434 + resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921"
1435 + integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==
1436 + dependencies:
1437 + estraverse "^5.2.0"
1438 +
1439 +estraverse@^5.1.0, estraverse@^5.2.0, estraverse@^5.3.0:
1440 + version "5.3.0"
1441 + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123"
1442 + integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==
1443 +
1444 +esutils@^2.0.2:
1445 + version "2.0.3"
1446 + resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64"
1447 + integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==
1448 +
1449 +fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3:
1450 + version "3.1.3"
1451 + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525"
1452 + integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==
1453 +
1454 +fast-glob@^3.2.11, fast-glob@^3.2.9:
1455 + version "3.2.11"
1456 + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.11.tgz#a1172ad95ceb8a16e20caa5c5e56480e5129c1d9"
1457 + integrity sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==
1458 + dependencies:
1459 + "@nodelib/fs.stat" "^2.0.2"
1460 + "@nodelib/fs.walk" "^1.2.3"
1461 + glob-parent "^5.1.2"
1462 + merge2 "^1.3.0"
1463 + micromatch "^4.0.4"
1464 +
1465 +fast-json-stable-stringify@^2.0.0:
1466 + version "2.1.0"
1467 + resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633"
1468 + integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==
1469 +
1470 +fast-levenshtein@^2.0.6:
1471 + version "2.0.6"
1472 + resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917"
1473 + integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==
1474 +
1475 +fastq@^1.6.0:
1476 + version "1.13.0"
1477 + resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.13.0.tgz#616760f88a7526bdfc596b7cab8c18938c36b98c"
1478 + integrity sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==
1479 + dependencies:
1480 + reusify "^1.0.4"
1481 +
1482 +fflate@^0.7.3:
1483 + version "0.7.3"
1484 + resolved "https://registry.yarnpkg.com/fflate/-/fflate-0.7.3.tgz#288b034ff0e9c380eaa2feff48c787b8371b7fa5"
1485 + integrity sha512-0Zz1jOzJWERhyhsimS54VTqOteCNwRtIlh8isdL0AXLo0g7xNTfTL7oWrkmCnPhZGocKIkWHBistBrrpoNH3aw==
1486 +
1487 +file-entry-cache@^6.0.1:
1488 + version "6.0.1"
1489 + resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027"
1490 + integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==
1491 + dependencies:
1492 + flat-cache "^3.0.4"
1493 +
1494 +fill-range@^7.0.1:
1495 + version "7.0.1"
1496 + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40"
1497 + integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==
1498 + dependencies:
1499 + to-regex-range "^5.0.1"
1500 +
1501 +find-root@^1.1.0:
1502 + version "1.1.0"
1503 + resolved "https://registry.yarnpkg.com/find-root/-/find-root-1.1.0.tgz#abcfc8ba76f708c42a97b3d685b7e9450bfb9ce4"
1504 + integrity sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==
1505 +
1506 +find-up@^2.1.0:
1507 + version "2.1.0"
1508 + resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7"
1509 + integrity sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==
1510 + dependencies:
1511 + locate-path "^2.0.0"
1512 +
1513 +flat-cache@^3.0.4:
1514 + version "3.0.4"
1515 + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11"
1516 + integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==
1517 + dependencies:
1518 + flatted "^3.1.0"
1519 + rimraf "^3.0.2"
1520 +
1521 +flatted@^3.1.0:
1522 + version "3.2.5"
1523 + resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.5.tgz#76c8584f4fc843db64702a6bd04ab7a8bd666da3"
1524 + integrity sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg==
1525 +
1526 +fraction.js@^4.2.0:
1527 + version "4.2.0"
1528 + resolved "https://registry.yarnpkg.com/fraction.js/-/fraction.js-4.2.0.tgz#448e5109a313a3527f5a3ab2119ec4cf0e0e2950"
1529 + integrity sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==
1530 +
1531 +fs.realpath@^1.0.0:
1532 + version "1.0.0"
1533 + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
1534 + integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==
1535 +
1536 +fsevents@~2.3.2:
1537 + version "2.3.2"
1538 + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a"
1539 + integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==
1540 +
1541 +function-bind@^1.1.1:
1542 + version "1.1.1"
1543 + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d"
1544 + integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==
1545 +
1546 +function.prototype.name@^1.1.5:
1547 + version "1.1.5"
1548 + resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.5.tgz#cce0505fe1ffb80503e6f9e46cc64e46a12a9621"
1549 + integrity sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==
1550 + dependencies:
1551 + call-bind "^1.0.2"
1552 + define-properties "^1.1.3"
1553 + es-abstract "^1.19.0"
1554 + functions-have-names "^1.2.2"
1555 +
1556 +functional-red-black-tree@^1.0.1:
1557 + version "1.0.1"
1558 + resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327"
1559 + integrity sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==
1560 +
1561 +functions-have-names@^1.2.2:
1562 + version "1.2.3"
1563 + resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834"
1564 + integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==
1565 +
1566 +get-caller-file@^2.0.5:
1567 + version "2.0.5"
1568 + resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e"
1569 + integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==
1570 +
1571 +get-intrinsic@^1.0.2, get-intrinsic@^1.1.0, get-intrinsic@^1.1.1:
1572 + version "1.1.2"
1573 + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.2.tgz#336975123e05ad0b7ba41f152ee4aadbea6cf598"
1574 + integrity sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA==
1575 + dependencies:
1576 + function-bind "^1.1.1"
1577 + has "^1.0.3"
1578 + has-symbols "^1.0.3"
1579 +
1580 +get-symbol-description@^1.0.0:
1581 + version "1.0.0"
1582 + resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.0.tgz#7fdb81c900101fbd564dd5f1a30af5aadc1e58d6"
1583 + integrity sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==
1584 + dependencies:
1585 + call-bind "^1.0.2"
1586 + get-intrinsic "^1.1.1"
1587 +
1588 +glob-parent@^5.1.2, glob-parent@~5.1.2:
1589 + version "5.1.2"
1590 + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4"
1591 + integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==
1592 + dependencies:
1593 + is-glob "^4.0.1"
1594 +
1595 +glob-parent@^6.0.1, glob-parent@^6.0.2:
1596 + version "6.0.2"
1597 + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3"
1598 + integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==
1599 + dependencies:
1600 + is-glob "^4.0.3"
1601 +
1602 +glob@7.1.7:
1603 + version "7.1.7"
1604 + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.7.tgz#3b193e9233f01d42d0b3f78294bbeeb418f94a90"
1605 + integrity sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==
1606 + dependencies:
1607 + fs.realpath "^1.0.0"
1608 + inflight "^1.0.4"
1609 + inherits "2"
1610 + minimatch "^3.0.4"
1611 + once "^1.3.0"
1612 + path-is-absolute "^1.0.0"
1613 +
1614 +glob@^7.1.3, glob@^7.2.0:
1615 + version "7.2.3"
1616 + resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b"
1617 + integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==
1618 + dependencies:
1619 + fs.realpath "^1.0.0"
1620 + inflight "^1.0.4"
1621 + inherits "2"
1622 + minimatch "^3.1.1"
1623 + once "^1.3.0"
1624 + path-is-absolute "^1.0.0"
1625 +
1626 +globals@^11.1.0:
1627 + version "11.12.0"
1628 + resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e"
1629 + integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==
1630 +
1631 +globals@^13.15.0:
1632 + version "13.15.0"
1633 + resolved "https://registry.yarnpkg.com/globals/-/globals-13.15.0.tgz#38113218c907d2f7e98658af246cef8b77e90bac"
1634 + integrity sha512-bpzcOlgDhMG070Av0Vy5Owklpv1I6+j96GhUI7Rh7IzDCKLzboflLrrfqMu8NquDbiR4EOQk7XzJwqVJxicxog==
1635 + dependencies:
1636 + type-fest "^0.20.2"
1637 +
1638 +globby@^11.1.0:
1639 + version "11.1.0"
1640 + resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b"
1641 + integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==
1642 + dependencies:
1643 + array-union "^2.1.0"
1644 + dir-glob "^3.0.1"
1645 + fast-glob "^3.2.9"
1646 + ignore "^5.2.0"
1647 + merge2 "^1.4.1"
1648 + slash "^3.0.0"
1649 +
1650 +goober@^2.0.33:
1651 + version "2.1.10"
1652 + resolved "https://registry.yarnpkg.com/goober/-/goober-2.1.10.tgz#058def43ba1e3b06f973dbb372a4978aa42f1049"
1653 + integrity sha512-7PpuQMH10jaTWm33sQgBQvz45pHR8N4l3Cu3WMGEWmHShAcTuuP7I+5/DwKo39fwti5A80WAjvqgz6SSlgWmGA==
1654 +
1655 +graceful-fs@^4.2.4:
1656 + version "4.2.10"
1657 + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c"
1658 + integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==
1659 +
1660 +has-bigints@^1.0.1, has-bigints@^1.0.2:
1661 + version "1.0.2"
1662 + resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.2.tgz#0871bd3e3d51626f6ca0966668ba35d5602d6eaa"
1663 + integrity sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==
1664 +
1665 +has-flag@^3.0.0:
1666 + version "3.0.0"
1667 + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd"
1668 + integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==
1669 +
1670 +has-flag@^4.0.0:
1671 + version "4.0.0"
1672 + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b"
1673 + integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==
1674 +
1675 +has-property-descriptors@^1.0.0:
1676 + version "1.0.0"
1677 + resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz#610708600606d36961ed04c196193b6a607fa861"
1678 + integrity sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==
1679 + dependencies:
1680 + get-intrinsic "^1.1.1"
1681 +
1682 +has-symbols@^1.0.1, has-symbols@^1.0.2, has-symbols@^1.0.3:
1683 + version "1.0.3"
1684 + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8"
1685 + integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==
1686 +
1687 +has-tostringtag@^1.0.0:
1688 + version "1.0.0"
1689 + resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.0.tgz#7e133818a7d394734f941e73c3d3f9291e658b25"
1690 + integrity sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==
1691 + dependencies:
1692 + has-symbols "^1.0.2"
1693 +
1694 +has@^1.0.3:
1695 + version "1.0.3"
1696 + resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796"
1697 + integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==
1698 + dependencies:
1699 + function-bind "^1.1.1"
1700 +
1701 +hoist-non-react-statics@^3.3.1:
1702 + version "3.3.2"
1703 + resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz#ece0acaf71d62c2969c2ec59feff42a4b1a85b45"
1704 + integrity sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==
1705 + dependencies:
1706 + react-is "^16.7.0"
1707 +
1708 +ignore@^5.2.0:
1709 + version "5.2.0"
1710 + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.0.tgz#6d3bac8fa7fe0d45d9f9be7bac2fc279577e345a"
1711 + integrity sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==
1712 +
1713 +import-fresh@^3.0.0, import-fresh@^3.1.0, import-fresh@^3.2.1:
1714 + version "3.3.0"
1715 + resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b"
1716 + integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==
1717 + dependencies:
1718 + parent-module "^1.0.0"
1719 + resolve-from "^4.0.0"
1720 +
1721 +imurmurhash@^0.1.4:
1722 + version "0.1.4"
1723 + resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea"
1724 + integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==
1725 +
1726 +inflight@^1.0.4:
1727 + version "1.0.6"
1728 + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
1729 + integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==
1730 + dependencies:
1731 + once "^1.3.0"
1732 + wrappy "1"
1733 +
1734 +inherits@2:
1735 + version "2.0.4"
1736 + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
1737 + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
1738 +
1739 +internal-slot@^1.0.3:
1740 + version "1.0.3"
1741 + resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.3.tgz#7347e307deeea2faac2ac6205d4bc7d34967f59c"
1742 + integrity sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==
1743 + dependencies:
1744 + get-intrinsic "^1.1.0"
1745 + has "^1.0.3"
1746 + side-channel "^1.0.4"
1747 +
1748 +invariant@^2.2.4:
1749 + version "2.2.4"
1750 + resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6"
1751 + integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==
1752 + dependencies:
1753 + loose-envify "^1.0.0"
1754 +
1755 +is-arrayish@^0.2.1:
1756 + version "0.2.1"
1757 + resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d"
1758 + integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==
1759 +
1760 +is-bigint@^1.0.1:
1761 + version "1.0.4"
1762 + resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.4.tgz#08147a1875bc2b32005d41ccd8291dffc6691df3"
1763 + integrity sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==
1764 + dependencies:
1765 + has-bigints "^1.0.1"
1766 +
1767 +is-binary-path@~2.1.0:
1768 + version "2.1.0"
1769 + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09"
1770 + integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==
1771 + dependencies:
1772 + binary-extensions "^2.0.0"
1773 +
1774 +is-boolean-object@^1.1.0:
1775 + version "1.1.2"
1776 + resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.2.tgz#5c6dc200246dd9321ae4b885a114bb1f75f63719"
1777 + integrity sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==
1778 + dependencies:
1779 + call-bind "^1.0.2"
1780 + has-tostringtag "^1.0.0"
1781 +
1782 +is-callable@^1.1.4, is-callable@^1.2.4:
1783 + version "1.2.4"
1784 + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.4.tgz#47301d58dd0259407865547853df6d61fe471945"
1785 + integrity sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==
1786 +
1787 +is-core-module@^2.2.0, is-core-module@^2.8.1, is-core-module@^2.9.0:
1788 + version "2.9.0"
1789 + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.9.0.tgz#e1c34429cd51c6dd9e09e0799e396e27b19a9c69"
1790 + integrity sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==
1791 + dependencies:
1792 + has "^1.0.3"
1793 +
1794 +is-date-object@^1.0.1:
1795 + version "1.0.5"
1796 + resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.5.tgz#0841d5536e724c25597bf6ea62e1bd38298df31f"
1797 + integrity sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==
1798 + dependencies:
1799 + has-tostringtag "^1.0.0"
1800 +
1801 +is-extglob@^2.1.1:
1802 + version "2.1.1"
1803 + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2"
1804 + integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==
1805 +
1806 +is-fullwidth-code-point@^3.0.0:
1807 + version "3.0.0"
1808 + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d"
1809 + integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==
1810 +
1811 +is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1:
1812 + version "4.0.3"
1813 + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084"
1814 + integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==
1815 + dependencies:
1816 + is-extglob "^2.1.1"
1817 +
1818 +is-negative-zero@^2.0.2:
1819 + version "2.0.2"
1820 + resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.2.tgz#7bf6f03a28003b8b3965de3ac26f664d765f3150"
1821 + integrity sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==
1822 +
1823 +is-number-object@^1.0.4:
1824 + version "1.0.7"
1825 + resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.7.tgz#59d50ada4c45251784e9904f5246c742f07a42fc"
1826 + integrity sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==
1827 + dependencies:
1828 + has-tostringtag "^1.0.0"
1829 +
1830 +is-number@^7.0.0:
1831 + version "7.0.0"
1832 + resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b"
1833 + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==
1834 +
1835 +is-regex@^1.1.4:
1836 + version "1.1.4"
1837 + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958"
1838 + integrity sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==
1839 + dependencies:
1840 + call-bind "^1.0.2"
1841 + has-tostringtag "^1.0.0"
1842 +
1843 +is-shared-array-buffer@^1.0.2:
1844 + version "1.0.2"
1845 + resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz#8f259c573b60b6a32d4058a1a07430c0a7344c79"
1846 + integrity sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==
1847 + dependencies:
1848 + call-bind "^1.0.2"
1849 +
1850 +is-string@^1.0.5, is-string@^1.0.7:
1851 + version "1.0.7"
1852 + resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.7.tgz#0dd12bf2006f255bb58f695110eff7491eebc0fd"
1853 + integrity sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==
1854 + dependencies:
1855 + has-tostringtag "^1.0.0"
1856 +
1857 +is-symbol@^1.0.2, is-symbol@^1.0.3:
1858 + version "1.0.4"
1859 + resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.4.tgz#a6dac93b635b063ca6872236de88910a57af139c"
1860 + integrity sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==
1861 + dependencies:
1862 + has-symbols "^1.0.2"
1863 +
1864 +is-weakref@^1.0.2:
1865 + version "1.0.2"
1866 + resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.0.2.tgz#9529f383a9338205e89765e0392efc2f100f06f2"
1867 + integrity sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==
1868 + dependencies:
1869 + call-bind "^1.0.2"
1870 +
1871 +isexe@^2.0.0:
1872 + version "2.0.0"
1873 + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10"
1874 + integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==
1875 +
1876 +"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0:
1877 + version "4.0.0"
1878 + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499"
1879 + integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==
1880 +
1881 +js-yaml@^4.1.0:
1882 + version "4.1.0"
1883 + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602"
1884 + integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==
1885 + dependencies:
1886 + argparse "^2.0.1"
1887 +
1888 +jsesc@^2.5.1:
1889 + version "2.5.2"
1890 + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4"
1891 + integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==
1892 +
1893 +json-parse-even-better-errors@^2.3.0:
1894 + version "2.3.1"
1895 + resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d"
1896 + integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==
1897 +
1898 +json-schema-traverse@^0.4.1:
1899 + version "0.4.1"
1900 + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660"
1901 + integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==
1902 +
1903 +json-stable-stringify-without-jsonify@^1.0.1:
1904 + version "1.0.1"
1905 + resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651"
1906 + integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==
1907 +
1908 +json5@^1.0.1:
1909 + version "1.0.1"
1910 + resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe"
1911 + integrity sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==
1912 + dependencies:
1913 + minimist "^1.2.0"
1914 +
1915 +json5@^2.1.0:
1916 + version "2.2.1"
1917 + resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.1.tgz#655d50ed1e6f95ad1a3caababd2b0efda10b395c"
1918 + integrity sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==
1919 +
1920 +"jsx-ast-utils@^2.4.1 || ^3.0.0", jsx-ast-utils@^3.2.1:
1921 + version "3.3.0"
1922 + resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-3.3.0.tgz#e624f259143b9062c92b6413ff92a164c80d3ccb"
1923 + integrity sha512-XzO9luP6L0xkxwhIJMTJQpZo/eeN60K08jHdexfD569AGxeNug6UketeHXEhROoM8aR7EcUoOQmIhcJQjcuq8Q==
1924 + dependencies:
1925 + array-includes "^3.1.4"
1926 + object.assign "^4.1.2"
1927 +
1928 +language-subtag-registry@~0.3.2:
1929 + version "0.3.21"
1930 + resolved "https://registry.yarnpkg.com/language-subtag-registry/-/language-subtag-registry-0.3.21.tgz#04ac218bea46f04cb039084602c6da9e788dd45a"
1931 + integrity sha512-L0IqwlIXjilBVVYKFT37X9Ih11Um5NEl9cbJIuU/SwP/zEEAbBPOnEeeuxVMf45ydWQRDQN3Nqc96OgbH1K+Pg==
1932 +
1933 +language-tags@^1.0.5:
1934 + version "1.0.5"
1935 + resolved "https://registry.yarnpkg.com/language-tags/-/language-tags-1.0.5.tgz#d321dbc4da30ba8bf3024e040fa5c14661f9193a"
1936 + integrity sha512-qJhlO9cGXi6hBGKoxEG/sKZDAHD5Hnu9Hs4WbOY3pCWXDhw0N8x1NenNzm2EnNLkLkk7J2SdxAkDSbb6ftT+UQ==
1937 + dependencies:
1938 + language-subtag-registry "~0.3.2"
1939 +
1940 +levn@^0.4.1:
1941 + version "0.4.1"
1942 + resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade"
1943 + integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==
1944 + dependencies:
1945 + prelude-ls "^1.2.1"
1946 + type-check "~0.4.0"
1947 +
1948 +lilconfig@^2.0.5:
1949 + version "2.0.5"
1950 + resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-2.0.5.tgz#19e57fd06ccc3848fd1891655b5a447092225b25"
1951 + integrity sha512-xaYmXZtTHPAw5m+xLN8ab9C+3a8YmV3asNSPOATITbtwrfbwaLJj8h66H1WMIpALCkqsIzK3h7oQ+PdX+LQ9Eg==
1952 +
1953 +lines-and-columns@^1.1.6:
1954 + version "1.2.4"
1955 + resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632"
1956 + integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==
1957 +
1958 +locate-path@^2.0.0:
1959 + version "2.0.0"
1960 + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e"
1961 + integrity sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==
1962 + dependencies:
1963 + p-locate "^2.0.0"
1964 + path-exists "^3.0.0"
1965 +
1966 +lodash.merge@^4.6.2:
1967 + version "4.6.2"
1968 + resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a"
1969 + integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==
1970 +
1971 +lodash@^4.17.10, lodash@^4.17.13:
1972 + version "4.17.21"
1973 + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c"
1974 + integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==
1975 +
1976 +loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.4.0:
1977 + version "1.4.0"
1978 + resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf"
1979 + integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==
1980 + dependencies:
1981 + js-tokens "^3.0.0 || ^4.0.0"
1982 +
1983 +lru-cache@^6.0.0:
1984 + version "6.0.0"
1985 + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94"
1986 + integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==
1987 + dependencies:
1988 + yallist "^4.0.0"
1989 +
1990 +merge2@^1.3.0, merge2@^1.4.1:
1991 + version "1.4.1"
1992 + resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae"
1993 + integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==
1994 +
1995 +micromatch@^4.0.4:
1996 + version "4.0.5"
1997 + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6"
1998 + integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==
1999 + dependencies:
2000 + braces "^3.0.2"
2001 + picomatch "^2.3.1"
2002 +
2003 +minimatch@^3.0.4, minimatch@^3.1.1, minimatch@^3.1.2:
2004 + version "3.1.2"
2005 + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b"
2006 + integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==
2007 + dependencies:
2008 + brace-expansion "^1.1.7"
2009 +
2010 +minimist@^1.2.0, minimist@^1.2.6:
2011 + version "1.2.6"
2012 + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.6.tgz#8637a5b759ea0d6e98702cfb3a9283323c93af44"
2013 + integrity sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==
2014 +
2015 +monaco-editor@^0.33.0:
2016 + version "0.33.0"
2017 + resolved "https://registry.yarnpkg.com/monaco-editor/-/monaco-editor-0.33.0.tgz#842e244f3750a2482f8a29c676b5684e75ff34af"
2018 + integrity sha512-VcRWPSLIUEgQJQIE0pVT8FcGBIgFoxz7jtqctE+IiCxWugD0DwgyQBcZBhdSrdMC84eumoqMZsGl2GTreOzwqw==
2019 +
2020 +ms@2.0.0:
2021 + version "2.0.0"
2022 + resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8"
2023 + integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==
2024 +
2025 +ms@2.1.2:
2026 + version "2.1.2"
2027 + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009"
2028 + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==
2029 +
2030 +ms@^2.1.1:
2031 + version "2.1.3"
2032 + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2"
2033 + integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==
2034 +
2035 +nanoid@^3.1.30, nanoid@^3.3.4:
2036 + version "3.3.4"
2037 + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.4.tgz#730b67e3cd09e2deacf03c027c81c9d9dbc5e8ab"
2038 + integrity sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==
2039 +
2040 +natural-compare@^1.4.0:
2041 + version "1.4.0"
2042 + resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7"
2043 + integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==
2044 +
2045 +next-transpile-modules@^9.0.0:
2046 + version "9.0.0"
2047 + resolved "https://registry.yarnpkg.com/next-transpile-modules/-/next-transpile-modules-9.0.0.tgz#133b1742af082e61cc76b02a0f12ffd40ce2bf90"
2048 + integrity sha512-VCNFOazIAnXn1hvgYYSTYMnoWgKgwlYh4lm1pKbSfiB3kj5ZYLcKVhfh3jkPOg1cnd9DP+pte9yCUocdPEUBTQ==
2049 + dependencies:
2050 + enhanced-resolve "^5.7.0"
2051 + escalade "^3.1.1"
2052 +
2053 +next@12.1.6:
2054 + version "12.1.6"
2055 + resolved "https://registry.yarnpkg.com/next/-/next-12.1.6.tgz#eb205e64af1998651f96f9df44556d47d8bbc533"
2056 + integrity sha512-cebwKxL3/DhNKfg9tPZDQmbRKjueqykHHbgaoG4VBRH3AHQJ2HO0dbKFiS1hPhe1/qgc2d/hFeadsbPicmLD+A==
2057 + dependencies:
2058 + "@next/env" "12.1.6"
2059 + caniuse-lite "^1.0.30001332"
2060 + postcss "8.4.5"
2061 + styled-jsx "5.0.2"
2062 + optionalDependencies:
2063 + "@next/swc-android-arm-eabi" "12.1.6"
2064 + "@next/swc-android-arm64" "12.1.6"
2065 + "@next/swc-darwin-arm64" "12.1.6"
2066 + "@next/swc-darwin-x64" "12.1.6"
2067 + "@next/swc-linux-arm-gnueabihf" "12.1.6"
2068 + "@next/swc-linux-arm64-gnu" "12.1.6"
2069 + "@next/swc-linux-arm64-musl" "12.1.6"
2070 + "@next/swc-linux-x64-gnu" "12.1.6"
2071 + "@next/swc-linux-x64-musl" "12.1.6"
2072 + "@next/swc-win32-arm64-msvc" "12.1.6"
2073 + "@next/swc-win32-ia32-msvc" "12.1.6"
2074 + "@next/swc-win32-x64-msvc" "12.1.6"
2075 +
2076 +node-releases@^2.0.5:
2077 + version "2.0.5"
2078 + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.5.tgz#280ed5bc3eba0d96ce44897d8aee478bfb3d9666"
2079 + integrity sha512-U9h1NLROZTq9uE1SNffn6WuPDg8icmi3ns4rEl/oTfIle4iLjTliCzgTsbaIFMq/Xn078/lfY/BL0GWZ+psK4Q==
2080 +
2081 +normalize-path@^3.0.0, normalize-path@~3.0.0:
2082 + version "3.0.0"
2083 + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65"
2084 + integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==
2085 +
2086 +normalize-range@^0.1.2:
2087 + version "0.1.2"
2088 + resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942"
2089 + integrity sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==
2090 +
2091 +notistack@^3.0.0-alpha.7:
2092 + version "3.0.0-alpha.7"
2093 + resolved "https://registry.yarnpkg.com/notistack/-/notistack-3.0.0-alpha.7.tgz#24733fdce2346a950e3fade28a149215bc55ceb5"
2094 + integrity sha512-H/L/MyDBlpa0+9+4mp4p10WScDobpPkvWy6naBtAVDgSlCynaSGLitQZ0xHxtN7G7+dCyOBDqy1frCOPQHvOig==
2095 + dependencies:
2096 + clsx "^1.1.0"
2097 + goober "^2.0.33"
2098 +
2099 +object-assign@^4.1.1:
2100 + version "4.1.1"
2101 + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
2102 + integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==
2103 +
2104 +object-hash@^3.0.0:
2105 + version "3.0.0"
2106 + resolved "https://registry.yarnpkg.com/object-hash/-/object-hash-3.0.0.tgz#73f97f753e7baffc0e2cc9d6e079079744ac82e9"
2107 + integrity sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==
2108 +
2109 +object-inspect@^1.12.0, object-inspect@^1.9.0:
2110 + version "1.12.2"
2111 + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.2.tgz#c0641f26394532f28ab8d796ab954e43c009a8ea"
2112 + integrity sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==
2113 +
2114 +object-keys@^1.1.1:
2115 + version "1.1.1"
2116 + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e"
2117 + integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==
2118 +
2119 +object.assign@^4.1.2:
2120 + version "4.1.2"
2121 + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.2.tgz#0ed54a342eceb37b38ff76eb831a0e788cb63940"
2122 + integrity sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==
2123 + dependencies:
2124 + call-bind "^1.0.0"
2125 + define-properties "^1.1.3"
2126 + has-symbols "^1.0.1"
2127 + object-keys "^1.1.1"
2128 +
2129 +object.entries@^1.1.5:
2130 + version "1.1.5"
2131 + resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.5.tgz#e1acdd17c4de2cd96d5a08487cfb9db84d881861"
2132 + integrity sha512-TyxmjUoZggd4OrrU1W66FMDG6CuqJxsFvymeyXI51+vQLN67zYfZseptRge703kKQdo4uccgAKebXFcRCzk4+g==
2133 + dependencies:
2134 + call-bind "^1.0.2"
2135 + define-properties "^1.1.3"
2136 + es-abstract "^1.19.1"
2137 +
2138 +object.fromentries@^2.0.5:
2139 + version "2.0.5"
2140 + resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.5.tgz#7b37b205109c21e741e605727fe8b0ad5fa08251"
2141 + integrity sha512-CAyG5mWQRRiBU57Re4FKoTBjXfDoNwdFVH2Y1tS9PqCsfUTymAohOkEMSG3aRNKmv4lV3O7p1et7c187q6bynw==
2142 + dependencies:
2143 + call-bind "^1.0.2"
2144 + define-properties "^1.1.3"
2145 + es-abstract "^1.19.1"
2146 +
2147 +object.hasown@^1.1.1:
2148 + version "1.1.1"
2149 + resolved "https://registry.yarnpkg.com/object.hasown/-/object.hasown-1.1.1.tgz#ad1eecc60d03f49460600430d97f23882cf592a3"
2150 + integrity sha512-LYLe4tivNQzq4JdaWW6WO3HMZZJWzkkH8fnI6EebWl0VZth2wL2Lovm74ep2/gZzlaTdV62JZHEqHQ2yVn8Q/A==
2151 + dependencies:
2152 + define-properties "^1.1.4"
2153 + es-abstract "^1.19.5"
2154 +
2155 +object.values@^1.1.5:
2156 + version "1.1.5"
2157 + resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.5.tgz#959f63e3ce9ef108720333082131e4a459b716ac"
2158 + integrity sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg==
2159 + dependencies:
2160 + call-bind "^1.0.2"
2161 + define-properties "^1.1.3"
2162 + es-abstract "^1.19.1"
2163 +
2164 +once@^1.3.0:
2165 + version "1.4.0"
2166 + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
2167 + integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==
2168 + dependencies:
2169 + wrappy "1"
2170 +
2171 +optionator@^0.9.1:
2172 + version "0.9.1"
2173 + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499"
2174 + integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==
2175 + dependencies:
2176 + deep-is "^0.1.3"
2177 + fast-levenshtein "^2.0.6"
2178 + levn "^0.4.1"
2179 + prelude-ls "^1.2.1"
2180 + type-check "^0.4.0"
2181 + word-wrap "^1.2.3"
2182 +
2183 +p-limit@^1.1.0:
2184 + version "1.3.0"
2185 + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8"
2186 + integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==
2187 + dependencies:
2188 + p-try "^1.0.0"
2189 +
2190 +p-locate@^2.0.0:
2191 + version "2.0.0"
2192 + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43"
2193 + integrity sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==
2194 + dependencies:
2195 + p-limit "^1.1.0"
2196 +
2197 +p-try@^1.0.0:
2198 + version "1.0.0"
2199 + resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3"
2200 + integrity sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==
2201 +
2202 +parent-module@^1.0.0:
2203 + version "1.0.1"
2204 + resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2"
2205 + integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==
2206 + dependencies:
2207 + callsites "^3.0.0"
2208 +
2209 +parse-json@^5.0.0:
2210 + version "5.2.0"
2211 + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd"
2212 + integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==
2213 + dependencies:
2214 + "@babel/code-frame" "^7.0.0"
2215 + error-ex "^1.3.1"
2216 + json-parse-even-better-errors "^2.3.0"
2217 + lines-and-columns "^1.1.6"
2218 +
2219 +path-exists@^3.0.0:
2220 + version "3.0.0"
2221 + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515"
2222 + integrity sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==
2223 +
2224 +path-is-absolute@^1.0.0:
2225 + version "1.0.1"
2226 + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
2227 + integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==
2228 +
2229 +path-key@^3.1.0:
2230 + version "3.1.1"
2231 + resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375"
2232 + integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==
2233 +
2234 +path-parse@^1.0.6, path-parse@^1.0.7:
2235 + version "1.0.7"
2236 + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735"
2237 + integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==
2238 +
2239 +path-type@^4.0.0:
2240 + version "4.0.0"
2241 + resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b"
2242 + integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==
2243 +
2244 +picocolors@^1.0.0:
2245 + version "1.0.0"
2246 + resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c"
2247 + integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==
2248 +
2249 +picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.3.1:
2250 + version "2.3.1"
2251 + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42"
2252 + integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==
2253 +
2254 +pify@^2.3.0:
2255 + version "2.3.0"
2256 + resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c"
2257 + integrity sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==
2258 +
2259 +postcss-import@^14.1.0:
2260 + version "14.1.0"
2261 + resolved "https://registry.yarnpkg.com/postcss-import/-/postcss-import-14.1.0.tgz#a7333ffe32f0b8795303ee9e40215dac922781f0"
2262 + integrity sha512-flwI+Vgm4SElObFVPpTIT7SU7R3qk2L7PyduMcokiaVKuWv9d/U+Gm/QAd8NDLuykTWTkcrjOeD2Pp1rMeBTGw==
2263 + dependencies:
2264 + postcss-value-parser "^4.0.0"
2265 + read-cache "^1.0.0"
2266 + resolve "^1.1.7"
2267 +
2268 +postcss-js@^4.0.0:
2269 + version "4.0.0"
2270 + resolved "https://registry.yarnpkg.com/postcss-js/-/postcss-js-4.0.0.tgz#31db79889531b80dc7bc9b0ad283e418dce0ac00"
2271 + integrity sha512-77QESFBwgX4irogGVPgQ5s07vLvFqWr228qZY+w6lW599cRlK/HmnlivnnVUxkjHnCu4J16PDMHcH+e+2HbvTQ==
2272 + dependencies:
2273 + camelcase-css "^2.0.1"
2274 +
2275 +postcss-load-config@^3.1.4:
2276 + version "3.1.4"
2277 + resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-3.1.4.tgz#1ab2571faf84bb078877e1d07905eabe9ebda855"
2278 + integrity sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==
2279 + dependencies:
2280 + lilconfig "^2.0.5"
2281 + yaml "^1.10.2"
2282 +
2283 +postcss-nested@5.0.6:
2284 + version "5.0.6"
2285 + resolved "https://registry.yarnpkg.com/postcss-nested/-/postcss-nested-5.0.6.tgz#466343f7fc8d3d46af3e7dba3fcd47d052a945bc"
2286 + integrity sha512-rKqm2Fk0KbA8Vt3AdGN0FB9OBOMDVajMG6ZCf/GoHgdxUJ4sBFp0A/uMIRm+MJUdo33YXEtjqIz8u7DAp8B7DA==
2287 + dependencies:
2288 + postcss-selector-parser "^6.0.6"
2289 +
2290 +postcss-selector-parser@^6.0.10, postcss-selector-parser@^6.0.6:
2291 + version "6.0.10"
2292 + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz#79b61e2c0d1bfc2602d549e11d0876256f8df88d"
2293 + integrity sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==
2294 + dependencies:
2295 + cssesc "^3.0.0"
2296 + util-deprecate "^1.0.2"
2297 +
2298 +postcss-value-parser@^4.0.0, postcss-value-parser@^4.2.0:
2299 + version "4.2.0"
2300 + resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz#723c09920836ba6d3e5af019f92bc0971c02e514"
2301 + integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==
2302 +
2303 +postcss@8.4.5:
2304 + version "8.4.5"
2305 + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.5.tgz#bae665764dfd4c6fcc24dc0fdf7e7aa00cc77f95"
2306 + integrity sha512-jBDboWM8qpaqwkMwItqTQTiFikhs/67OYVvblFFTM7MrZjt6yMKd6r2kgXizEbTTljacm4NldIlZnhbjr84QYg==
2307 + dependencies:
2308 + nanoid "^3.1.30"
2309 + picocolors "^1.0.0"
2310 + source-map-js "^1.0.1"
2311 +
2312 +postcss@^8.4.14:
2313 + version "8.4.14"
2314 + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.14.tgz#ee9274d5622b4858c1007a74d76e42e56fd21caf"
2315 + integrity sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig==
2316 + dependencies:
2317 + nanoid "^3.3.4"
2318 + picocolors "^1.0.0"
2319 + source-map-js "^1.0.2"
2320 +
2321 +prelude-ls@^1.2.1:
2322 + version "1.2.1"
2323 + resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396"
2324 + integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==
2325 +
2326 +prettier@^2.6.2:
2327 + version "2.7.0"
2328 + resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.7.0.tgz#a4fdae07e5596c51c9857ea676cd41a0163879d6"
2329 + integrity sha512-nwoX4GMFgxoPC6diHvSwmK/4yU8FFH3V8XWtLQrbj4IBsK2pkYhG4kf/ljF/haaZ/aii+wNJqISrCDPgxGWDVQ==
2330 +
2331 +pretty-bytes@^6.0.0:
2332 + version "6.0.0"
2333 + resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-6.0.0.tgz#928be2ad1f51a2e336add8ba764739f9776a8140"
2334 + integrity sha512-6UqkYefdogmzqAZWzJ7laYeJnaXDy2/J+ZqiiMtS7t7OfpXWTlaeGMwX8U6EFvPV/YWWEKRkS8hKS4k60WHTOg==
2335 +
2336 +pretty-format@^28.1.3:
2337 + version "28.1.3"
2338 + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-28.1.3.tgz#c9fba8cedf99ce50963a11b27d982a9ae90970d5"
2339 + integrity sha512-8gFb/To0OmxHR9+ZTb14Df2vNxdGCX8g1xWGUTqUw5TiZvcQf5sHKObd5UcPyLLyowNwDAMTF3XWOG1B6mxl1Q==
2340 + dependencies:
2341 + "@jest/schemas" "^28.1.3"
2342 + ansi-regex "^5.0.1"
2343 + ansi-styles "^5.0.0"
2344 + react-is "^18.0.0"
2345 +
2346 +prop-types@^15.6.2, prop-types@^15.7.2, prop-types@^15.8.1:
2347 + version "15.8.1"
2348 + resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.8.1.tgz#67d87bf1a694f48435cf332c24af10214a3140b5"
2349 + integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==
2350 + dependencies:
2351 + loose-envify "^1.4.0"
2352 + object-assign "^4.1.1"
2353 + react-is "^16.13.1"
2354 +
2355 +punycode@^2.1.0:
2356 + version "2.1.1"
2357 + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec"
2358 + integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==
2359 +
2360 +queue-microtask@^1.2.2:
2361 + version "1.2.3"
2362 + resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243"
2363 + integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==
2364 +
2365 +quick-lru@^5.1.1:
2366 + version "5.1.1"
2367 + resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-5.1.1.tgz#366493e6b3e42a3a6885e2e99d18f80fb7a8c932"
2368 + integrity sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==
2369 +
2370 +react-dom@18.1.0:
2371 + version "18.1.0"
2372 + resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-18.1.0.tgz#7f6dd84b706408adde05e1df575b3a024d7e8a2f"
2373 + integrity sha512-fU1Txz7Budmvamp7bshe4Zi32d0ll7ect+ccxNu9FlObT605GOEB8BfO4tmRJ39R5Zj831VCpvQ05QPBW5yb+w==
2374 + dependencies:
2375 + loose-envify "^1.1.0"
2376 + scheduler "^0.22.0"
2377 +
2378 +react-is@^16.13.1, react-is@^16.7.0:
2379 + version "16.13.1"
2380 + resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4"
2381 + integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==
2382 +
2383 +react-is@^18.0.0, react-is@^18.2.0:
2384 + version "18.2.0"
2385 + resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.2.0.tgz#199431eeaaa2e09f86427efbb4f1473edb47609b"
2386 + integrity sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==
2387 +
2388 +react-transition-group@^4.4.2:
2389 + version "4.4.2"
2390 + resolved "https://registry.yarnpkg.com/react-transition-group/-/react-transition-group-4.4.2.tgz#8b59a56f09ced7b55cbd53c36768b922890d5470"
2391 + integrity sha512-/RNYfRAMlZwDSr6z4zNKV6xu53/e2BuaBbGhbyYIXTrmgu/bGHzmqOs7mJSJBHy9Ud+ApHx3QjrkKSp1pxvlFg==
2392 + dependencies:
2393 + "@babel/runtime" "^7.5.5"
2394 + dom-helpers "^5.0.1"
2395 + loose-envify "^1.4.0"
2396 + prop-types "^15.6.2"
2397 +
2398 +react@18.1.0:
2399 + version "18.1.0"
2400 + resolved "https://registry.yarnpkg.com/react/-/react-18.1.0.tgz#6f8620382decb17fdc5cc223a115e2adbf104890"
2401 + integrity sha512-4oL8ivCz5ZEPyclFQXaNksK3adutVS8l2xzZU0cqEFrE9Sb7fC0EFK5uEk74wIreL1DERyjvsU915j1pcT2uEQ==
2402 + dependencies:
2403 + loose-envify "^1.1.0"
2404 +
2405 +read-cache@^1.0.0:
2406 + version "1.0.0"
2407 + resolved "https://registry.yarnpkg.com/read-cache/-/read-cache-1.0.0.tgz#e664ef31161166c9751cdbe8dbcf86b5fb58f774"
2408 + integrity sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==
2409 + dependencies:
2410 + pify "^2.3.0"
2411 +
2412 +readdirp@~3.6.0:
2413 + version "3.6.0"
2414 + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7"
2415 + integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==
2416 + dependencies:
2417 + picomatch "^2.2.1"
2418 +
2419 +regenerator-runtime@^0.13.4:
2420 + version "0.13.9"
2421 + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz#8925742a98ffd90814988d7566ad30ca3b263b52"
2422 + integrity sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==
2423 +
2424 +regexp.prototype.flags@^1.4.1, regexp.prototype.flags@^1.4.3:
2425 + version "1.4.3"
2426 + resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz#87cab30f80f66660181a3bb7bf5981a872b367ac"
2427 + integrity sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==
2428 + dependencies:
2429 + call-bind "^1.0.2"
2430 + define-properties "^1.1.3"
2431 + functions-have-names "^1.2.2"
2432 +
2433 +regexpp@^3.2.0:
2434 + version "3.2.0"
2435 + resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2"
2436 + integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==
2437 +
2438 +require-directory@^2.1.1:
2439 + version "2.1.1"
2440 + resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42"
2441 + integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==
2442 +
2443 +resolve-from@^4.0.0:
2444 + version "4.0.0"
2445 + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6"
2446 + integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==
2447 +
2448 +resolve@^1.1.7, resolve@^1.20.0, resolve@^1.22.0:
2449 + version "1.22.0"
2450 + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.0.tgz#5e0b8c67c15df57a89bdbabe603a002f21731198"
2451 + integrity sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==
2452 + dependencies:
2453 + is-core-module "^2.8.1"
2454 + path-parse "^1.0.7"
2455 + supports-preserve-symlinks-flag "^1.0.0"
2456 +
2457 +resolve@^1.12.0, resolve@^1.3.2:
2458 + version "1.22.1"
2459 + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.1.tgz#27cb2ebb53f91abb49470a928bba7558066ac177"
2460 + integrity sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==
2461 + dependencies:
2462 + is-core-module "^2.9.0"
2463 + path-parse "^1.0.7"
2464 + supports-preserve-symlinks-flag "^1.0.0"
2465 +
2466 +resolve@^2.0.0-next.3:
2467 + version "2.0.0-next.3"
2468 + resolved "https://registry.yarnpkg.com/resolve/-/resolve-2.0.0-next.3.tgz#d41016293d4a8586a39ca5d9b5f15cbea1f55e46"
2469 + integrity sha512-W8LucSynKUIDu9ylraa7ueVZ7hc0uAgJBxVsQSKOXOyle8a93qXhcz+XAXZ8bIq2d6i4Ehddn6Evt+0/UwKk6Q==
2470 + dependencies:
2471 + is-core-module "^2.2.0"
2472 + path-parse "^1.0.6"
2473 +
2474 +reusify@^1.0.4:
2475 + version "1.0.4"
2476 + resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76"
2477 + integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==
2478 +
2479 +rimraf@^3.0.2:
2480 + version "3.0.2"
2481 + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a"
2482 + integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==
2483 + dependencies:
2484 + glob "^7.1.3"
2485 +
2486 +rollup@^2.75.7:
2487 + version "2.75.7"
2488 + resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.75.7.tgz#221ff11887ae271e37dcc649ba32ce1590aaa0b9"
2489 + integrity sha512-VSE1iy0eaAYNCxEXaleThdFXqZJ42qDBatAwrfnPlENEZ8erQ+0LYX4JXOLPceWfZpV1VtZwZ3dFCuOZiSyFtQ==
2490 + optionalDependencies:
2491 + fsevents "~2.3.2"
2492 +
2493 +run-parallel@^1.1.9:
2494 + version "1.2.0"
2495 + resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee"
2496 + integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==
2497 + dependencies:
2498 + queue-microtask "^1.2.2"
2499 +
2500 +safe-buffer@~5.1.1:
2501 + version "5.1.2"
2502 + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d"
2503 + integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==
2504 +
2505 +scheduler@^0.22.0:
2506 + version "0.22.0"
2507 + resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.22.0.tgz#83a5d63594edf074add9a7198b1bae76c3db01b8"
2508 + integrity sha512-6QAm1BgQI88NPYymgGQLCZgvep4FyePDWFpXVK+zNSUgHwlqpJy8VEh8Et0KxTACS4VWwMousBElAZOH9nkkoQ==
2509 + dependencies:
2510 + loose-envify "^1.1.0"
2511 +
2512 +semver@^5.4.1:
2513 + version "5.7.1"
2514 + resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7"
2515 + integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==
2516 +
2517 +semver@^6.3.0:
2518 + version "6.3.0"
2519 + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d"
2520 + integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==
2521 +
2522 +semver@^7.3.7:
2523 + version "7.3.7"
2524 + resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.7.tgz#12c5b649afdbf9049707796e22a4028814ce523f"
2525 + integrity sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==
2526 + dependencies:
2527 + lru-cache "^6.0.0"
2528 +
2529 +shebang-command@^2.0.0:
2530 + version "2.0.0"
2531 + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea"
2532 + integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==
2533 + dependencies:
2534 + shebang-regex "^3.0.0"
2535 +
2536 +shebang-regex@^3.0.0:
2537 + version "3.0.0"
2538 + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172"
2539 + integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==
2540 +
2541 +side-channel@^1.0.4:
2542 + version "1.0.4"
2543 + resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf"
2544 + integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==
2545 + dependencies:
2546 + call-bind "^1.0.0"
2547 + get-intrinsic "^1.0.2"
2548 + object-inspect "^1.9.0"
2549 +
2550 +slash@^3.0.0:
2551 + version "3.0.0"
2552 + resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634"
2553 + integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==
2554 +
2555 +source-map-js@^1.0.1, source-map-js@^1.0.2:
2556 + version "1.0.2"
2557 + resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c"
2558 + integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==
2559 +
2560 +source-map-support@~0.5.20:
2561 + version "0.5.21"
2562 + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f"
2563 + integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==
2564 + dependencies:
2565 + buffer-from "^1.0.0"
2566 + source-map "^0.6.0"
2567 +
2568 +source-map@^0.5.0, source-map@^0.5.7:
2569 + version "0.5.7"
2570 + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc"
2571 + integrity sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==
2572 +
2573 +source-map@^0.6.0:
2574 + version "0.6.1"
2575 + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263"
2576 + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==
2577 +
2578 +state-local@^1.0.6:
2579 + version "1.0.7"
2580 + resolved "https://registry.yarnpkg.com/state-local/-/state-local-1.0.7.tgz#da50211d07f05748d53009bee46307a37db386d5"
2581 + integrity sha512-HTEHMNieakEnoe33shBYcZ7NX83ACUjCu8c40iOGEZsngj9zRnkqS9j1pqQPXwobB0ZcVTk27REb7COQ0UR59w==
2582 +
2583 +string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3:
2584 + version "4.2.3"
2585 + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010"
2586 + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==
2587 + dependencies:
2588 + emoji-regex "^8.0.0"
2589 + is-fullwidth-code-point "^3.0.0"
2590 + strip-ansi "^6.0.1"
2591 +
2592 +string.prototype.matchall@^4.0.7:
2593 + version "4.0.7"
2594 + resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.7.tgz#8e6ecb0d8a1fb1fda470d81acecb2dba057a481d"
2595 + integrity sha512-f48okCX7JiwVi1NXCVWcFnZgADDC/n2vePlQ/KUCNqCikLLilQvwjMO8+BHVKvgzH0JB0J9LEPgxOGT02RoETg==
2596 + dependencies:
2597 + call-bind "^1.0.2"
2598 + define-properties "^1.1.3"
2599 + es-abstract "^1.19.1"
2600 + get-intrinsic "^1.1.1"
2601 + has-symbols "^1.0.3"
2602 + internal-slot "^1.0.3"
2603 + regexp.prototype.flags "^1.4.1"
2604 + side-channel "^1.0.4"
2605 +
2606 +string.prototype.trimend@^1.0.5:
2607 + version "1.0.5"
2608 + resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.5.tgz#914a65baaab25fbdd4ee291ca7dde57e869cb8d0"
2609 + integrity sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog==
2610 + dependencies:
2611 + call-bind "^1.0.2"
2612 + define-properties "^1.1.4"
2613 + es-abstract "^1.19.5"
2614 +
2615 +string.prototype.trimstart@^1.0.5:
2616 + version "1.0.5"
2617 + resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.5.tgz#5466d93ba58cfa2134839f81d7f42437e8c01fef"
2618 + integrity sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg==
2619 + dependencies:
2620 + call-bind "^1.0.2"
2621 + define-properties "^1.1.4"
2622 + es-abstract "^1.19.5"
2623 +
2624 +strip-ansi@^6.0.0, strip-ansi@^6.0.1:
2625 + version "6.0.1"
2626 + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9"
2627 + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==
2628 + dependencies:
2629 + ansi-regex "^5.0.1"
2630 +
2631 +strip-bom@^3.0.0:
2632 + version "3.0.0"
2633 + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3"
2634 + integrity sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==
2635 +
2636 +strip-json-comments@^3.1.0, strip-json-comments@^3.1.1:
2637 + version "3.1.1"
2638 + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006"
2639 + integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==
2640 +
2641 +styled-jsx@5.0.2:
2642 + version "5.0.2"
2643 + resolved "https://registry.yarnpkg.com/styled-jsx/-/styled-jsx-5.0.2.tgz#ff230fd593b737e9e68b630a694d460425478729"
2644 + integrity sha512-LqPQrbBh3egD57NBcHET4qcgshPks+yblyhPlH2GY8oaDgKs8SK4C3dBh3oSJjgzJ3G5t1SYEZGHkP+QEpX9EQ==
2645 +
2646 +stylis@4.0.13:
2647 + version "4.0.13"
2648 + resolved "https://registry.yarnpkg.com/stylis/-/stylis-4.0.13.tgz#f5db332e376d13cc84ecfe5dace9a2a51d954c91"
2649 + integrity sha512-xGPXiFVl4YED9Jh7Euv2V220mriG9u4B2TA6Ybjc1catrstKD2PpIdU3U0RKpkVBC2EhmL/F0sPCr9vrFTNRag==
2650 +
2651 +supports-color@^5.3.0:
2652 + version "5.5.0"
2653 + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f"
2654 + integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==
2655 + dependencies:
2656 + has-flag "^3.0.0"
2657 +
2658 +supports-color@^7.1.0:
2659 + version "7.2.0"
2660 + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da"
2661 + integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==
2662 + dependencies:
2663 + has-flag "^4.0.0"
2664 +
2665 +supports-preserve-symlinks-flag@^1.0.0:
2666 + version "1.0.0"
2667 + resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09"
2668 + integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==
2669 +
2670 +tailwindcss@^3.0.24:
2671 + version "3.1.3"
2672 + resolved "https://registry.yarnpkg.com/tailwindcss/-/tailwindcss-3.1.3.tgz#b9ef2c1ae537c339679e8e89635af8e143d1c7eb"
2673 + integrity sha512-PRJNYdSIthrb8hjmAyymEyEN8Yo61TMXpzyFUpxULeeyRn3Y3gpvuw6FlRTKrJvK7thSGKRnhT36VovVx4WeMA==
2674 + dependencies:
2675 + arg "^5.0.2"
2676 + chokidar "^3.5.3"
2677 + color-name "^1.1.4"
2678 + detective "^5.2.1"
2679 + didyoumean "^1.2.2"
2680 + dlv "^1.1.3"
2681 + fast-glob "^3.2.11"
2682 + glob-parent "^6.0.2"
2683 + is-glob "^4.0.3"
2684 + lilconfig "^2.0.5"
2685 + normalize-path "^3.0.0"
2686 + object-hash "^3.0.0"
2687 + picocolors "^1.0.0"
2688 + postcss "^8.4.14"
2689 + postcss-import "^14.1.0"
2690 + postcss-js "^4.0.0"
2691 + postcss-load-config "^3.1.4"
2692 + postcss-nested "5.0.6"
2693 + postcss-selector-parser "^6.0.10"
2694 + postcss-value-parser "^4.2.0"
2695 + quick-lru "^5.1.1"
2696 + resolve "^1.22.0"
2697 +
2698 +tapable@^2.2.0:
2699 + version "2.2.1"
2700 + resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.1.tgz#1967a73ef4060a82f12ab96af86d52fdb76eeca0"
2701 + integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==
2702 +
2703 +terser@^5.14.2:
2704 + version "5.14.2"
2705 + resolved "https://registry.yarnpkg.com/terser/-/terser-5.14.2.tgz#9ac9f22b06994d736174f4091aa368db896f1c10"
2706 + integrity sha512-oL0rGeM/WFQCUd0y2QrWxYnq7tfSuKBiqTjRPWrRgB46WD/kiwHwF8T23z78H6Q6kGCuuHcPB+KULHRdxvVGQA==
2707 + dependencies:
2708 + "@jridgewell/source-map" "^0.3.2"
2709 + acorn "^8.5.0"
2710 + commander "^2.20.0"
2711 + source-map-support "~0.5.20"
2712 +
2713 +text-table@^0.2.0:
2714 + version "0.2.0"
2715 + resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4"
2716 + integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==
2717 +
2718 +to-fast-properties@^2.0.0:
2719 + version "2.0.0"
2720 + resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e"
2721 + integrity sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==
2722 +
2723 +to-regex-range@^5.0.1:
2724 + version "5.0.1"
2725 + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4"
2726 + integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==
2727 + dependencies:
2728 + is-number "^7.0.0"
2729 +
2730 +trim-right@^1.0.1:
2731 + version "1.0.1"
2732 + resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003"
2733 + integrity sha512-WZGXGstmCWgeevgTL54hrCuw1dyMQIzWy7ZfqRJfSmJZBwklI15egmQytFP6bPidmw3M8d5yEowl1niq4vmqZw==
2734 +
2735 +tsconfig-paths@^3.14.1:
2736 + version "3.14.1"
2737 + resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz#ba0734599e8ea36c862798e920bcf163277b137a"
2738 + integrity sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ==
2739 + dependencies:
2740 + "@types/json5" "^0.0.29"
2741 + json5 "^1.0.1"
2742 + minimist "^1.2.6"
2743 + strip-bom "^3.0.0"
2744 +
2745 +tslib@^1.8.1:
2746 + version "1.14.1"
2747 + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00"
2748 + integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==
2749 +
2750 +tsutils@^3.21.0:
2751 + version "3.21.0"
2752 + resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623"
2753 + integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==
2754 + dependencies:
2755 + tslib "^1.8.1"
2756 +
2757 +type-check@^0.4.0, type-check@~0.4.0:
2758 + version "0.4.0"
2759 + resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1"
2760 + integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==
2761 + dependencies:
2762 + prelude-ls "^1.2.1"
2763 +
2764 +type-fest@^0.20.2:
2765 + version "0.20.2"
2766 + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4"
2767 + integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==
2768 +
2769 +typescript@4.7.3:
2770 + version "4.7.3"
2771 + resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.7.3.tgz#8364b502d5257b540f9de4c40be84c98e23a129d"
2772 + integrity sha512-WOkT3XYvrpXx4vMMqlD+8R8R37fZkjyLGlxavMc4iB8lrl8L0DeTcHbYgw/v0N/z9wAFsgBhcsF0ruoySS22mA==
2773 +
2774 +unbox-primitive@^1.0.2:
2775 + version "1.0.2"
2776 + resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.2.tgz#29032021057d5e6cdbd08c5129c226dff8ed6f9e"
2777 + integrity sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==
2778 + dependencies:
2779 + call-bind "^1.0.2"
2780 + has-bigints "^1.0.2"
2781 + has-symbols "^1.0.3"
2782 + which-boxed-primitive "^1.0.2"
2783 +
2784 +uri-js@^4.2.2:
2785 + version "4.4.1"
2786 + resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e"
2787 + integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==
2788 + dependencies:
2789 + punycode "^2.1.0"
2790 +
2791 +util-deprecate@^1.0.2:
2792 + version "1.0.2"
2793 + resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
2794 + integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==
2795 +
2796 +v8-compile-cache@^2.0.3:
2797 + version "2.3.0"
2798 + resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz#2de19618c66dc247dcfb6f99338035d8245a2cee"
2799 + integrity sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==
2800 +
2801 +which-boxed-primitive@^1.0.2:
2802 + version "1.0.2"
2803 + resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6"
2804 + integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==
2805 + dependencies:
2806 + is-bigint "^1.0.1"
2807 + is-boolean-object "^1.1.0"
2808 + is-number-object "^1.0.4"
2809 + is-string "^1.0.5"
2810 + is-symbol "^1.0.3"
2811 +
2812 +which@^2.0.1:
2813 + version "2.0.2"
2814 + resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1"
2815 + integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==
2816 + dependencies:
2817 + isexe "^2.0.0"
2818 +
2819 +word-wrap@^1.2.3:
2820 + version "1.2.3"
2821 + resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c"
2822 + integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==
2823 +
2824 +wrap-ansi@^7.0.0:
2825 + version "7.0.0"
2826 + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43"
2827 + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==
2828 + dependencies:
2829 + ansi-styles "^4.0.0"
2830 + string-width "^4.1.0"
2831 + strip-ansi "^6.0.0"
2832 +
2833 +wrappy@1:
2834 + version "1.0.2"
2835 + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
2836 + integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==
2837 +
2838 +xtend@^4.0.2:
2839 + version "4.0.2"
2840 + resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54"
2841 + integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==
2842 +
2843 +y18n@^5.0.5:
2844 + version "5.0.8"
2845 + resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55"
2846 + integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==
2847 +
2848 +yallist@^4.0.0:
2849 + version "4.0.0"
2850 + resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72"
2851 + integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==
2852 +
2853 +yaml@^1.10.2, yaml@^1.7.2:
2854 + version "1.10.2"
2855 + resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b"
2856 + integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==
2857 +
2858 +yargs-parser@^21.0.0:
2859 + version "21.0.1"
2860 + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.0.1.tgz#0267f286c877a4f0f728fceb6f8a3e4cb95c6e35"
2861 + integrity sha512-9BK1jFpLzJROCI5TzwZL/TU4gqjK5xiHV/RfWLOahrjAko/e4DJkRDZQXfvqAsiZzzYhgAzbgz6lg48jcm4GLg==
2862 +
2863 +yargs@^17.5.1:
2864 + version "17.5.1"
2865 + resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.5.1.tgz#e109900cab6fcb7fd44b1d8249166feb0b36e58e"
2866 + integrity sha512-t6YAJcxDkNX7NFYiVtKvWUz8l+PaKTLiL63mJYWR2GnHq2gjEWISzsLp9wg3aY36dY1j+gfIEL3pIF+XlJJfbA==
2867 + dependencies:
2868 + cliui "^7.0.2"
2869 + escalade "^3.1.1"
2870 + get-caller-file "^2.0.5"
2871 + require-directory "^2.1.1"
2872 + string-width "^4.2.3"
2873 + y18n "^5.0.5"
2874 + yargs-parser "^21.0.0"
compiler/forget/scripts/jest/e2e-classic.config.js new
+10
@@ -0,0 +1,10 @@
1 +/**
2 + * Copyright (c) Meta Platforms, Inc. and affiliates.
3 + *
4 + * This source code is licensed under the MIT license found in the
5 + * LICENSE file in the root directory of this source tree.
6 + */
7 +
8 +const makeE2EConfig = require("../jest/makeE2EConfig");
9 +
10 +module.exports = makeE2EConfig("e2e no forget", false);
compiler/forget/scripts/jest/e2e-forget.config.js new
+10
@@ -0,0 +1,10 @@
1 +/**
2 + * Copyright (c) Meta Platforms, Inc. and affiliates.
3 + *
4 + * This source code is licensed under the MIT license found in the
5 + * LICENSE file in the root directory of this source tree.
6 + */
7 +
8 +const makeE2EConfig = require("../jest/makeE2EConfig");
9 +
10 +module.exports = makeE2EConfig("e2e with forget", true);
compiler/forget/scripts/jest/main.config.js new
+16
@@ -0,0 +1,16 @@
1 +/**
2 + * Copyright (c) Meta Platforms, Inc. and affiliates.
3 + *
4 + * This source code is licensed under the MIT license found in the
5 + * LICENSE file in the root directory of this source tree.
6 + */
7 +
8 +module.exports = {
9 + displayName: "main",
10 + preset: "ts-jest",
11 + rootDir: "../../src",
12 + testPathIgnorePatterns: ["e2e", "TestDriver", "test-utils", "fixtures"],
13 + globals: {
14 + __DEV__: true,
15 + },
16 +};
compiler/forget/scripts/jest/makeE2EConfig.js new
+34
@@ -0,0 +1,34 @@
1 +/**
2 + * Copyright (c) Meta Platforms, Inc. and affiliates.
3 + *
4 + * This source code is licensed under the MIT license found in the
5 + * LICENSE file in the root directory of this source tree.
6 + */
7 +
8 +module.exports = function makeE2EConfig(displayName, useForget) {
9 + return {
10 + displayName,
11 + testEnvironment: "jsdom",
12 + rootDir: "../../src",
13 + testMatch: ["**/*.e2e.(js|tsx)"],
14 + modulePathIgnorePatterns: [
15 + // ignore snapshots from the opposite forget configuration
16 + useForget ? ".*\\.no-forget\\.snap$" : ".*\\.with-forget\\.snap$",
17 + // ignore snapshots from the main project
18 + ".*\\.ts\\.snap$",
19 + ],
20 + globals: {
21 + __FORGET__: useForget,
22 + },
23 + snapshotResolver: useForget
24 + ? "<rootDir>/../scripts/jest/snapshot-resolver-with-forget.js"
25 + : "<rootDir>/../scripts/jest/snapshot-resolver-no-forget.js",
26 +
27 + transform: {
28 + "\\.[tj]sx?$": useForget
29 + ? "<rootDir>/../scripts/jest/transform-with-forget"
30 + : "<rootDir>/../scripts/jest/transform-no-forget",
31 + },
32 + transformIgnorePatterns: ["/node_modules/"],
33 + };
34 +};
compiler/forget/scripts/jest/makeSnapshotResolver.js new
+22
@@ -0,0 +1,22 @@
1 +/**
2 + * Copyright (c) Meta Platforms, Inc. and affiliates.
3 + *
4 + * This source code is licensed under the MIT license found in the
5 + * LICENSE file in the root directory of this source tree.
6 + */
7 +
8 +module.exports = function makeSnapshotResolver(useForget) {
9 + const modeExtension = useForget ? ".with-forget" : ".no-forget";
10 + return {
11 + resolveSnapshotPath: (testPath, snapshotExtension) =>
12 + testPath + modeExtension + snapshotExtension,
13 +
14 + resolveTestPath: (snapshotFilePath, snapshotExtension) =>
15 + snapshotFilePath.slice(
16 + 0,
17 + -modeExtension.length - snapshotExtension.length
18 + ),
19 +
20 + testPathForConsistencyCheck: "some/__tests__/example.test.js",
21 + };
22 +};
compiler/forget/scripts/jest/makeTransform.js new
+37
@@ -0,0 +1,37 @@
1 +/**
2 + * Copyright (c) Meta Platforms, Inc. and affiliates.
3 + *
4 + * This source code is licensed under the MIT license found in the
5 + * LICENSE file in the root directory of this source tree.
6 + */
7 +
8 +const ReactForgetBabelPlugin = require("../../dist").default;
9 +const babelJest = require("babel-jest");
10 +
11 +module.exports = (useForget) => {
12 + function createTransformer() {
13 + return babelJest.createTransformer({
14 + passPerPreset: true,
15 + presets: [
16 + "@babel/preset-typescript",
17 + {
18 + plugins: [
19 + "@babel/plugin-syntax-jsx",
20 + ...(useForget ? [ReactForgetBabelPlugin, {}] : []),
21 + ],
22 + },
23 + "@babel/preset-react",
24 + {
25 + plugins: ["@babel/plugin-transform-modules-commonjs"],
26 + },
27 + ],
28 + targets: {
29 + esmodules: true,
30 + },
31 + });
32 + }
33 +
34 + return {
35 + createTransformer,
36 + };
37 +};
compiler/forget/scripts/jest/snapshot-resolver-no-forget.js new
+10
@@ -0,0 +1,10 @@
1 +/**
2 + * Copyright (c) Meta Platforms, Inc. and affiliates.
3 + *
4 + * This source code is licensed under the MIT license found in the
5 + * LICENSE file in the root directory of this source tree.
6 + */
7 +
8 +const makeSnapshotResolver = require("./makeSnapshotResolver");
9 +
10 +module.exports = makeSnapshotResolver(false);
compiler/forget/scripts/jest/snapshot-resolver-with-forget.js new
+10
@@ -0,0 +1,10 @@
1 +/**
2 + * Copyright (c) Meta Platforms, Inc. and affiliates.
3 + *
4 + * This source code is licensed under the MIT license found in the
5 + * LICENSE file in the root directory of this source tree.
6 + */
7 +
8 +const makeSnapshotResolver = require("./makeSnapshotResolver");
9 +
10 +module.exports = makeSnapshotResolver(true);
compiler/forget/scripts/jest/transform-no-forget.js new
+8
@@ -0,0 +1,8 @@
1 +/**
2 + * Copyright (c) Meta Platforms, Inc. and affiliates.
3 + *
4 + * This source code is licensed under the MIT license found in the
5 + * LICENSE file in the root directory of this source tree.
6 + */
7 +
8 +module.exports = require("./makeTransform")(false);
compiler/forget/scripts/jest/transform-with-forget.js new
+8
@@ -0,0 +1,8 @@
1 +/**
2 + * Copyright (c) Meta Platforms, Inc. and affiliates.
3 + *
4 + * This source code is licensed under the MIT license found in the
5 + * LICENSE file in the root directory of this source tree.
6 + */
7 +
8 +module.exports = require("./makeTransform")(true);
compiler/forget/src/BabelPlugin.ts new
+42
@@ -0,0 +1,42 @@
1 +/**
2 + * Copyright (c) Facebook, Inc. and its affiliates.
3 + *
4 + * This source code is licensed under the MIT license found in the
5 + * LICENSE file in the root directory of this source tree.
6 + */
7 +
8 +/// <reference path="./plugin-syntax-jsx.d.ts" />
9 +
10 +import jsx from "@babel/plugin-syntax-jsx";
11 +import type { PluginObj } from "@babel/core";
12 +import type * as BabelCore from "@babel/core";
13 +import { createCompilerDriver } from "./CompilerDriver";
14 +import { CompilerOptions, parseCompilerOptions } from "./CompilerOptions";
15 +
16 +/**
17 + * The React Forget Babel Plugin
18 + * @param {*} babel
19 + * @returns
20 + */
21 +export default function (babel: typeof BabelCore): PluginObj {
22 + return {
23 + name: "react-forget",
24 + inherits: jsx,
25 + visitor: {
26 + Program: {
27 + enter(program, pass) {
28 + let compilerOptions: CompilerOptions;
29 + try {
30 + compilerOptions = parseCompilerOptions(pass.opts);
31 + } catch (err) {
32 + throw new Error(
33 + `PluginOptions is required to be valid CompilerOptions: ${err}.`
34 + );
35 + }
36 + let compiler = createCompilerDriver(compilerOptions, program);
37 + compiler.compile();
38 + },
39 + },
40 + },
41 + };
42 +}
compiler/forget/src/BackEnd/DumpLIR.ts new
+37
@@ -0,0 +1,37 @@
1 +/**
2 + * Copyright (c) Facebook, Inc. and its affiliates.
3 + *
4 + * This source code is licensed under the MIT license found in the
5 + * LICENSE file in the root directory of this source tree.
6 + */
7 +
8 +import type { NodePath } from "@babel/traverse";
9 +import * as t from "@babel/types";
10 +import type { CompilerContext } from "../CompilerContext";
11 +import { OutputKind } from "../CompilerOutputs";
12 +import * as IR from "../IR";
13 +import prettyPrint from "../LIR/PrettyPrinter";
14 +import { PassKind, PassName } from "../Pass";
15 +
16 +/**
17 + * Dump LIR
18 + */
19 +export default {
20 + name: PassName.DumpLIR,
21 + kind: PassKind.IRFunc as const,
22 + run,
23 +};
24 +
25 +export function run(
26 + irFunc: IR.Func,
27 + func: NodePath<t.Function>,
28 + context: CompilerContext
29 +) {
30 + if (context.opts.outputKinds.includes(OutputKind.LIR)) {
31 + const output = [...context.lirProg.funcs.values()]
32 + .map((lirFunc) => prettyPrint(lirFunc))
33 + .join("\n\n");
34 +
35 + context.outputs[OutputKind.LIR] = output;
36 + }
37 +}
compiler/forget/src/BackEnd/JS.ts new
+575
@@ -0,0 +1,575 @@
1 +/**
2 + * Copyright (c) Facebook, Inc. and its affiliates.
3 + *
4 + * This source code is licensed under the MIT license found in the
5 + * LICENSE file in the root directory of this source tree.
6 + */
7 +
8 +/**
9 + * JavaScript Generator.
10 + */
11 +
12 +import { Node, NodePath, Scope } from "@babel/traverse";
13 +import * as t from "@babel/types";
14 +import { CompilerContext } from "../CompilerContext";
15 +import { invariant } from "../CompilerError";
16 +import * as IR from "../IR";
17 +import * as LIR from "../LIR";
18 +
19 +export type Code = Node[];
20 +
21 +/**
22 + * "DSL" for writing memoCache manipulation.
23 + */
24 +class MemoCache {
25 + static #RETURN_VALUE = 0;
26 + static #RETURN_INDEX = 1;
27 +
28 + entries: Map<LIR.MemoCache.EntryKey, LIR.MemoCache.Entry>;
29 + id: t.Identifier;
30 + hasRetIdx: boolean;
31 + #guardReads: boolean;
32 +
33 + constructor(
34 + lirMemoCache: LIR.MemoCache.MemoCache,
35 + context: CompilerContext,
36 + scope: Scope
37 + ) {
38 + this.#guardReads = context.opts.flags.guardReads;
39 + lirMemoCache.finializeIndices();
40 + this.entries = lirMemoCache.entries;
41 + if (scope.hasBinding("$")) {
42 + this.id = scope.generateUidIdentifier("$");
43 + } else {
44 + this.id = t.identifier("$");
45 + }
46 +
47 + invariant(
48 + lirMemoCache.retValPos != null,
49 + "retVal should always be allocated!"
50 + );
51 + this.hasRetIdx = lirMemoCache.retIdxPos != null;
52 + this.#guardReads = context.opts.flags.guardReads;
53 + }
54 +
55 + /**
56 + * `$[RETURN_INDEX] === index`
57 + */
58 + isMemoizedReturnIndex(index: number): t.Expression {
59 + return t.binaryExpression(
60 + "===",
61 + this.#cacheMember(MemoCache.#RETURN_INDEX),
62 + t.numericLiteral(index)
63 + );
64 + }
65 +
66 + /**
67 + * `$[RETURN_INDEX] = index`
68 + */
69 + writeReturnIndex(index: number): t.Expression {
70 + invariant(this.hasRetIdx, "Invalid call of writeReturnIndex");
71 + return this.#writeIndex(MemoCache.#RETURN_INDEX, t.numericLiteral(index));
72 + }
73 +
74 + /**
75 + * `$[RETURN_VALUE]`
76 + */
77 + readReturnValue(): t.Expression {
78 + return this.#readIndex(MemoCache.#RETURN_VALUE);
79 + }
80 +
81 + /**
82 + * `$[RETURN_VALUE] = value`
83 + */
84 + writeReturnValue(value: t.Expression): t.Expression {
85 + return this.#writeIndex(MemoCache.#RETURN_VALUE, value);
86 + }
87 +
88 + /**
89 + * `$[entry]`
90 + */
91 + read(entry: LIR.MemoCache.Entry): t.Expression {
92 + return this.#readIndex(entry.index);
93 + }
94 +
95 + /**
96 + * `$[entry] = value`
97 + */
98 + write(entry: LIR.MemoCache.Entry, value: t.Expression): t.Expression {
99 + return this.#writeIndex(entry.index, value);
100 + }
101 +
102 + /**
103 + * `$[entry] == $._`
104 + */
105 + isEmpty(entry: LIR.MemoCache.Entry): t.BinaryExpression {
106 + return t.binaryExpression(
107 + "===",
108 + this.#cacheMember(entry.index),
109 + t.memberExpression(this.id, t.identifier("_"))
110 + );
111 + }
112 +
113 + /**
114 + * `$[entry] !== value`
115 + */
116 + isChanged(
117 + entry: LIR.MemoCache.Entry,
118 + value: t.Expression
119 + ): t.BinaryExpression {
120 + return t.binaryExpression("!==", this.#cacheMember(entry.index), value);
121 + }
122 +
123 + #readIndex(index: number): t.Expression {
124 + if (this.#guardReads) {
125 + return t.callExpression(
126 + t.memberExpression(t.identifier("useMemoCache"), t.identifier("read")),
127 + [this.id, t.numericLiteral(index)]
128 + );
129 + } else {
130 + return this.#cacheMember(index);
131 + }
132 + }
133 +
134 + #writeIndex(index: number, value: t.Expression): t.Expression {
135 + return t.assignmentExpression("=", this.#cacheMember(index), value);
136 + }
137 +
138 + #cacheMember(index: number): t.MemberExpression {
139 + return t.memberExpression(this.id, t.numericLiteral(index), true);
140 + }
141 +}
142 +/**
143 + * JS Func
144 + */
145 +export class Func {
146 + lir: LIR.Func;
147 +
148 + context: CompilerContext;
149 +
150 + /**
151 + * Code are owned by JS Func and are emitted by side effect for better perf.
152 + */
153 + code: Code;
154 +
155 + memoCache: MemoCache;
156 + changeVarIds: Map<string, t.Identifier>;
157 +
158 + constructor(lirFunc: LIR.Func, context: CompilerContext) {
159 + this.code = [];
160 + this.lir = lirFunc;
161 + this.context = context;
162 + this.memoCache = new MemoCache(
163 + this.lir.memoCache,
164 + this.context,
165 + this.lir.ir.ast.scope
166 + );
167 + this.changeVarIds = new Map();
168 + }
169 +
170 + emit(node: Node) {
171 + this.code.push(node);
172 + }
173 +
174 + /**
175 + * Helpers that generate the `useMemoCache` call
176 + * @returns
177 + * let $ = useMemoCache(size)
178 + */
179 + useMemoCacheCall(size: number): t.Statement {
180 + return t.variableDeclaration("let", [
181 + t.variableDeclarator(
182 + /*id*/ this.memoCache.id,
183 + /*init*/ t.callExpression(
184 + /* callee*/ t.identifier("useMemoCache"),
185 + /*arguments*/ [t.numericLiteral(size)]
186 + )
187 + ),
188 + ]);
189 + }
190 +
191 + /**
192 + * Generate code materializing reactions
193 + * @returns
194 + * let c_input = $[i] !== input; // compute the "change/reaction".
195 + * $[i] = input; // replace caches.
196 + *
197 + * Or, with `.flags.condCache`:
198 + * if (c_input) $[i] = input;
199 + */
200 + emitReactiveVal(val: IR.ReactiveVal) {
201 + const valIdent = val.binding.identifier;
202 + const changeVar = this.getChangeVar(valIdent.name);
203 +
204 + const entry = this.memoCache.entries.get(val);
205 + invariant(entry, "ReactiveVals are always cached.");
206 +
207 + // let c_var = $[i] !== var;
208 + this.code.push(
209 + t.variableDeclaration("let", [
210 + t.variableDeclarator(
211 + /*id*/ changeVar,
212 + this.memoCache.isChanged(entry, valIdent)
213 + ),
214 + ])
215 + );
216 +
217 + // $[i] = var
218 + const cacheReplacement = t.expressionStatement(
219 + this.memoCache.write(entry, valIdent)
220 + );
221 +
222 + if (this.context.opts.flags.condCache) {
223 + // if (c_var) $[i] = var;
224 + this.code.push(
225 + t.ifStatement(/*test*/ changeVar, /*consequent*/ cacheReplacement)
226 + );
227 + } else {
228 + this.code.push(cacheReplacement);
229 + }
230 + }
231 +
232 + /**
233 + * @return
234 + * let output1, output2;
235 + */
236 + emitReactiveBlockOutputDecls(block: LIR.ReactiveBlock) {
237 + if (block.outputDecls.size > 0) {
238 + this.code.push(
239 + t.variableDeclaration(
240 + /*kind*/ "let",
241 + /*declarators*/ [...block.outputDecls.values()].map((output) =>
242 + t.variableDeclarator(/*id*/ output.binding.identifier)
243 + )
244 + )
245 + );
246 + }
247 + }
248 +
249 + /**
250 + * Generate code materializing {@link ReactiveBlock}
251 + * @return
252 + * let output1, output2;
253 + * if ( Reactions(Inputs) ) {
254 + * ...body
255 + * $[i1] = output1;
256 + * $[i2] = output2;
257 + * } else {
258 + * output1 = $[i1]
259 + * output2 = $[i2]
260 + * }
261 + *
262 + * OR (when there is only outputs w/o any inputs)
263 + * @return
264 + * let output1, output2;
265 + * if ( $.isEmpty(i1) ) {
266 + * ...body
267 + * $[i1] = output1;
268 + * $[i2] = output2;
269 + * } else {
270 + * output1 = $[i1]
271 + * output2 = $[i2]
272 + * }
273 + */
274 + emitReactiveBlock(block: LIR.ReactiveBlock) {
275 + const hasNoInputs = block.inputs.size === 0;
276 + const hasNoOutputs = block.outputs.size === 0;
277 +
278 + let cond: t.Expression;
279 + if (hasNoInputs) {
280 + if (hasNoOutputs) {
281 + // If there is neither inputs nor outputs then it likely doesn't contribute
282 + // to rendering at all. The safest thing may just be keeping them as-is.
283 + for (const instr of block.body) {
284 + if (instr.ir.returnStmts.size > 0) {
285 + for (const [ret, retIdx] of instr.ir.returnStmts) {
286 + ret.replaceWith(this.genRewrittenReturn(ret, retIdx));
287 + }
288 + this.code.push(instr.ast.node);
289 + } else {
290 + this.code.push(instr.ast.node);
291 + }
292 + }
293 + return;
294 + }
295 +
296 + const firstOutput = block.outputs.values().next().value;
297 + const firstOutputEntry = this.memoCache.entries.get(firstOutput);
298 + invariant(firstOutputEntry, "ReactiveBlock outputs are always cached.");
299 + cond = this.memoCache.isEmpty(firstOutputEntry);
300 + } else {
301 + cond = this.genReactions(block.inputs);
302 + }
303 +
304 + // let output1, output2, ...
305 + this.emitReactiveBlockOutputDecls(block);
306 +
307 + let evalBody: t.Statement[] = [];
308 + let skipBody: t.Statement[] = [];
309 +
310 + // ...body
311 + for (const instr of block.body) {
312 + instr.ir.jsxTreeRoots.forEach((root) => this.rewriteExprInJSXTree(root));
313 +
314 + if (instr.ir.isDecl) {
315 + for (const rewrittenInstr of this.genDeclWithOutputsRewritten(instr)) {
316 + evalBody.push(rewrittenInstr);
317 + }
318 + } else {
319 + if (instr.ir.returnStmts.size > 0) {
320 + for (const [ret, retIdx] of instr.ir.returnStmts) {
321 + ret.replaceWith(this.genRewrittenReturn(ret, retIdx));
322 + skipBody.push(this.genReturnReplay(retIdx));
323 + }
324 + evalBody.push(instr.ast.node);
325 + } else {
326 + evalBody.push(instr.ast.node);
327 + }
328 + }
329 + }
330 + for (const output of block.outputs) {
331 + const entry = this.memoCache.entries.get(output);
332 + invariant(entry, "ReactiveBlock outputs are always cached.");
333 +
334 + // Since the binding is re-assigned in the generated code
335 + if (output.binding.kind == "const") {
336 + output.binding.kind = "let";
337 + }
338 +
339 + // $[i] = output
340 + evalBody.push(
341 + t.expressionStatement(
342 + this.memoCache.write(entry, output.binding.identifier)
343 + )
344 + );
345 +
346 + // output = $[i]
347 + skipBody.push(
348 + t.expressionStatement(
349 + t.assignmentExpression(
350 + "=",
351 + output.binding.identifier,
352 + this.memoCache.read(entry)
353 + )
354 + )
355 + );
356 + }
357 +
358 + if (this.context.opts.flags.guardHooks) {
359 + const startLazyCall = t.expressionStatement(
360 + t.callExpression(
361 + t.memberExpression(
362 + t.identifier("useMemoCache"),
363 + t.identifier("startLazy")
364 + ),
365 + []
366 + )
367 + );
368 + const endLazyCall = t.expressionStatement(
369 + t.callExpression(
370 + t.memberExpression(
371 + t.identifier("useMemoCache"),
372 + t.identifier("endLazy")
373 + ),
374 + []
375 + )
376 + );
377 + evalBody = [
378 + t.tryStatement(
379 + t.blockStatement([startLazyCall, ...evalBody]),
380 + null,
381 + t.blockStatement([endLazyCall])
382 + ),
383 + ];
384 + }
385 +
386 + // if ( Reactive(Inputs) ) { ...evalBody } else { ...memoBody }
387 + this.code.push(
388 + t.ifStatement(
389 + /*test*/ cond,
390 + /*consequent*/ t.blockStatement(evalBody),
391 + /*alternate*/ skipBody.length > 0
392 + ? t.blockStatement(skipBody)
393 + : undefined
394 + )
395 + );
396 + }
397 +
398 + /**
399 + * TODO: Currently, all decls are considered as outputs. We'll need a better check.
400 + */
401 + genDeclWithOutputsRewritten(instr: LIR.Instr): t.Statement[] {
402 + invariant(instr.ir.isDecl, "Should only be called on Decl.");
403 +
404 + const res: t.Statement[] = [];
405 +
406 + // Rewrite ClassDeclaration to assignment to ClassExpression.
407 + if (instr.ast.isClassDeclaration()) {
408 + const cd = instr.ast.node;
409 + res.push(
410 + t.expressionStatement(
411 + t.assignmentExpression(
412 + "=",
413 + cd.id,
414 + t.classExpression(cd.id, cd.superClass, cd.body, cd.decorators)
415 + )
416 + )
417 + );
418 + }
419 +
420 + // Rewrite FunctionDeclaration to assignment to FunctionExpression.
421 + if (instr.ast.isFunctionDeclaration()) {
422 + const fd = instr.ast.node;
423 + invariant(fd.id, "Can you have a FD without a name??");
424 +
425 + res.push(
426 + t.expressionStatement(
427 + t.assignmentExpression(
428 + "=",
429 + fd.id,
430 + t.functionExpression(
431 + fd.id,
432 + fd.params,
433 + fd.body,
434 + fd.generator,
435 + fd.async
436 + )
437 + )
438 + )
439 + );
440 + }
441 +
442 + // Rewrite each VariableDeclarators in VariableDeclaration to assignments.
443 + if (instr.ast.isVariableDeclaration()) {
444 + // A destructuring declarators can produce multiple bindings, so we need
445 + // to narrow to a set first.
446 + const varDeclaratorNodes = new Set<t.VariableDeclarator>();
447 +
448 + for (const def of instr.ir.decls) {
449 + const vd = def.binding.path;
450 + invariant(vd.isVariableDeclarator(), "");
451 + varDeclaratorNodes.add(vd.node);
452 + }
453 +
454 + for (const vd of varDeclaratorNodes) {
455 + if (vd.init) {
456 + res.push(
457 + t.expressionStatement(t.assignmentExpression("=", vd.id, vd.init))
458 + );
459 + }
460 + }
461 + }
462 +
463 + return res;
464 + }
465 +
466 + genRewrittenReturn(
467 + ret: NodePath<t.ReturnStatement>,
468 + retIdx: number
469 + ): t.Statement {
470 + const returnVal = ret.node.argument
471 + ? this.memoCache.writeReturnValue(ret.node.argument)
472 + : t.identifier("undefined");
473 +
474 + if (this.memoCache.hasRetIdx) {
475 + // $[ret] = <ret arg>
476 + return t.returnStatement(
477 + t.sequenceExpression([this.genUpdateReturnIdx(retIdx), returnVal])
478 + );
479 + } else {
480 + return t.returnStatement(returnVal);
481 + }
482 + }
483 +
484 + genUpdateReturnIdx(retIdx: number) {
485 + // $[ret_i] = ret_idx
486 + return this.memoCache.writeReturnIndex(retIdx);
487 + }
488 +
489 + genReturnReplay(retIdx: number): t.Statement {
490 + invariant(retIdx < this.lir.ir.returnCount, "retIdx >= returnCount");
491 + const returnReplay = t.returnStatement(this.memoCache.readReturnValue());
492 + if (this.memoCache.hasRetIdx) {
493 + return t.ifStatement(
494 + this.memoCache.isMemoizedReturnIndex(retIdx),
495 + /*cons*/ returnReplay
496 + );
497 + } else {
498 + // Single Return Optimization
499 + return returnReplay;
500 + }
501 + }
502 +
503 + /**
504 + * Note that it's critical to keep this method a POST-order traveral so that
505 + * the children of @param expr is rewritten BEFORE it's rewritten. Otherwise,
506 + * Babel will complain "Container is falsy".
507 + */
508 + rewriteExprInJSXTree(expr: IR.ExprVal) {
509 + if (IR.isJSXTagVal(expr)) {
510 + expr.children.forEach((child) => this.rewriteExprInJSXTree(child));
511 + }
512 + if (!expr.stable) {
513 + const entry = this.memoCache.entries.get(expr);
514 + if (entry) {
515 + invariant(LIR.MemoCache.isExprEntry(entry), "");
516 + expr.ast.replaceWith(this.genReactiveTenary(entry));
517 + }
518 + }
519 + }
520 +
521 + /**
522 + * Rewrite expression to a tenary to be reactive.
523 + * If inputs of @param entry is empty, @returns
524 + * ( $.isEmpty(i) ) ? ($[i] = expr) : $[i]
525 + * Otherwise, @returns
526 + * ( Reactions(Inputs) ) ? ($[i] = expr) : $[i]
527 + */
528 + genReactiveTenary(entry: LIR.MemoCache.ExprEntry) {
529 + const { inputs } = this.lir.ir.depGraph.getOrCreateVertex(entry.value);
530 + const cacheInvalidation =
531 + inputs.size === 0
532 + ? this.memoCache.isEmpty(entry)
533 + : this.genReactions(inputs);
534 +
535 + const rewrittenExpr = t.conditionalExpression(
536 + cacheInvalidation,
537 + this.memoCache.write(entry, entry.value.ast.path.node),
538 + this.memoCache.read(entry)
539 + );
540 +
541 + // If the expr is originated from the JSX children position, wrap the
542 + // rewritten expression in an JSXExpressionContainer.
543 + return entry.value.ast.path.listKey === "children"
544 + ? t.jsxExpressionContainer(rewrittenExpr)
545 + : rewrittenExpr;
546 + }
547 +
548 + /**
549 + * Helpers that generate code checking the inputs diffing results.
550 + * @param inputs
551 + * @returns
552 + * c_input1 || c_input2 || ...
553 + */
554 + genReactions(inputs: Set<IR.ReactiveVal>): t.Expression {
555 + const inputIdents: t.Expression[] = [...inputs].map((input) =>
556 + this.getChangeVar(input.binding.identifier.name)
557 + );
558 +
559 + return inputIdents.reduce((tree, depIdent) =>
560 + t.logicalExpression("||", tree, depIdent)
561 + );
562 + }
563 +
564 + getChangeVar(varName: string): t.Identifier {
565 + let changeVarIdentifier = this.changeVarIds.get(varName);
566 + if (changeVarIdentifier == null) {
567 + const changeVarName = `c_${varName}`;
568 + changeVarIdentifier = this.lir.ir.ast.scope.hasBinding(changeVarName)
569 + ? this.lir.ir.ast.scope.generateUidIdentifier(changeVarName)
570 + : t.identifier(changeVarName);
571 + this.changeVarIds.set(varName, changeVarIdentifier);
572 + }
573 + return changeVarIdentifier;
574 + }
575 +}
compiler/forget/src/BackEnd/JSGen.ts new
+169
@@ -0,0 +1,169 @@
1 +/**
2 + * Copyright (c) Facebook, Inc. and its affiliates.
3 + *
4 + * This source code is licensed under the MIT license found in the
5 + * LICENSE file in the root directory of this source tree.
6 + */
7 +
8 +import { NodePath } from "@babel/traverse";
9 +import type { Function } from "@babel/types";
10 +import * as t from "@babel/types";
11 +import { assertExhaustive } from "../Common/utils";
12 +import type { CompilerContext } from "../CompilerContext";
13 +import { invariant } from "../CompilerError";
14 +import * as IR from "../IR";
15 +import * as LIR from "../LIR";
16 +import { isReactiveBlock, isRenderBlock } from "../LIR";
17 +import { PassKind, PassName } from "../Pass";
18 +import * as JS from "./JS";
19 +
20 +/**
21 + * JavaScript Code Generation.
22 + */
23 +export default {
24 + name: PassName.JSGen,
25 + kind: PassKind.LIRProg as const,
26 + run,
27 + mutatesBabelAST: true,
28 +};
29 +
30 +export function run(lirProg: LIR.Prog, context: CompilerContext) {
31 + if (lirProg.importUseMemoCache()) {
32 + const prog = lirProg.ir.ast;
33 + prog.unshiftContainer(
34 + "body",
35 + t.importDeclaration(
36 + /*specifier*/ [
37 + t.importSpecifier(
38 + t.identifier("useMemoCache"),
39 + t.identifier("useMemoCache")
40 + ),
41 + ],
42 + /*source*/ t.stringLiteral("react")
43 + )
44 + );
45 + }
46 +
47 + for (const [irFunc, lirFunc] of lirProg.funcs) {
48 + runFunc(lirFunc, irFunc.ast, context);
49 + }
50 +}
51 +
52 +export function runFunc(
53 + lirFunc: LIR.Func,
54 + func: NodePath<Function>,
55 + context: CompilerContext
56 +) {
57 + const irFunc = lirFunc.ir;
58 + const jsFunc = new JS.Func(lirFunc, context);
59 +
60 + genPrologue();
61 +
62 + for (const block of lirFunc.blocks) {
63 + switch (block.kind) {
64 + case LIR.BlockKind.Render:
65 + invariant(isRenderBlock(block), "");
66 + genRenderBlock(block);
67 + break;
68 + case LIR.BlockKind.Reactive:
69 + invariant(isReactiveBlock(block), "");
70 + genReactiveBlock(block);
71 + break;
72 + default:
73 + assertExhaustive(block.kind, `Unhandled block ${block}`);
74 + }
75 + }
76 +
77 + if (irFunc.isImplicitReturn && !lirFunc.hasSingleReturnPath) {
78 + jsFunc.emit(jsFunc.genUpdateReturnIdx(irFunc.returnCount));
79 + }
80 +
81 + /**
82 + * Prologue ::
83 + * useMemoCache()
84 + * Reactive(Params)
85 + */
86 + function genPrologue(): void {
87 + for (const param of irFunc.params) {
88 + if (IR.isReactiveVal(param)) {
89 + jsFunc.emitReactiveVal(param);
90 + }
91 + }
92 + }
93 +
94 + /**
95 + * RenderBlock ::
96 + * | Instr
97 + * | Instr
98 + * Reactive(Inputs)
99 + */
100 + function genRenderBlock(block: LIR.RenderBlock): void {
101 + for (const instr of block.body) {
102 + jsFunc.emit(instr.ast.node);
103 +
104 + for (const decl of instr.ir.decls) {
105 + if (IR.isReactiveVal(decl)) {
106 + jsFunc.emitReactiveVal(decl);
107 + }
108 + }
109 + }
110 + }
111 +
112 + /**
113 + * @see {@link JS.Func.emitReactiveBlock}
114 + */
115 + function genReactiveBlock(block: LIR.ReactiveBlock): void {
116 + jsFunc.emitReactiveBlock(block);
117 + }
118 +
119 + /**
120 + * Replacing body with generated code.
121 + */
122 + const funcBody = func.get("body");
123 +
124 + // See {@link ReactFuncsInfer} for the reason.
125 + if (!funcBody.isBlockStatement()) throw new Error("Unreachable.");
126 + const directives = funcBody.node.directives;
127 +
128 + let code = jsFunc.code;
129 + if (context.opts.flags.guardThrows) {
130 + code = [
131 + jsFunc.useMemoCacheCall(lirFunc.memoCache.size),
132 + t.tryStatement(
133 + t.blockStatement(
134 + code.map((node) => {
135 + if (t.isStatement(node)) {
136 + return node;
137 + } else if (t.isExpression(node)) {
138 + return t.expressionStatement(node);
139 + } else {
140 + throw new Error(`unhandled node type: ${node.type}`);
141 + }
142 + })
143 + ),
144 + t.catchClause(
145 + t.identifier("e"),
146 + t.blockStatement([
147 + t.expressionStatement(
148 + t.callExpression(
149 + t.memberExpression(
150 + t.identifier("useMemoCache"),
151 + t.identifier("reset")
152 + ),
153 + [jsFunc.memoCache.id]
154 + )
155 + ),
156 + t.throwStatement(t.identifier("e")),
157 + ])
158 + ),
159 + null
160 + ),
161 + ];
162 + } else {
163 + code.unshift(jsFunc.useMemoCacheCall(lirFunc.memoCache.size));
164 + }
165 + funcBody.replaceWithMultiple(code);
166 +
167 + // recover directives.
168 + funcBody.node.directives = directives;
169 +}
compiler/forget/src/BackEnd/LIRGen.ts new
+188
@@ -0,0 +1,188 @@
1 +/**
2 + * Copyright (c) Facebook, Inc. and its affiliates.
3 + *
4 + * This source code is licensed under the MIT license found in the
5 + * LICENSE file in the root directory of this source tree.
6 + */
7 +
8 +import { NodePath } from "@babel/traverse";
9 +import * as t from "@babel/types";
10 +import invariant from "invariant";
11 +import { setEmpty, setEq, setIntersect, setSubset } from "../Common/utils";
12 +import type { CompilerContext } from "../CompilerContext";
13 +import * as IR from "../IR";
14 +import * as LIR from "../LIR";
15 +import { PassKind, PassName } from "../Pass";
16 +
17 +/**
18 + * LIR Generation.
19 + * This pass we lower {@link IR.Func} to {@link LIR.Func} to help with codegen.
20 + *
21 + * The major job of this pass is to treat {@link IR.FuncTopLevel} as
22 + * {@link LIR.Instr} and schedule them into {@link LIR.ReactiveBlock} (which also
23 + * needs to be scheuled according to certain rules).
24 + */
25 +export default {
26 + name: PassName.LIRGen,
27 + kind: PassKind.IRFunc as const,
28 + run,
29 +};
30 +
31 +/**
32 + * Generate LIR for the given @param irFunc.
33 + */
34 +export function run(
35 + irFunc: IR.Func,
36 + func: NodePath<t.Function>,
37 + context: CompilerContext
38 +) {
39 + const lirFunc = new LIR.Func(irFunc);
40 + context.lirProg.funcs.set(irFunc, lirFunc);
41 + const scheduler = new InstrScheduler(lirFunc);
42 +
43 + for (const irFuncTopLevel of irFunc.body) {
44 + const instr = new LIR.Instr(irFuncTopLevel, irFunc);
45 +
46 + if (instr.isPinned()) scheduler.flushActiveList();
47 +
48 + if (instr.isRequiredEveryRender()) {
49 + scheduler.scheduleRenderBlock(LIR.createRenderBlock(instr));
50 + } else {
51 + let reactiveBlock = scheduler.findReactiveBlock(instr.inputs);
52 + if (!reactiveBlock) {
53 + const newReactiveBlock = LIR.createReactiveBlock(instr.inputs);
54 + scheduler.scheduleReactiveBlock(newReactiveBlock);
55 + reactiveBlock = newReactiveBlock;
56 + }
57 + reactiveBlock.emit(instr);
58 + }
59 +
60 + if (instr.isPinned()) scheduler.flushActiveList();
61 + }
62 +
63 + scheduler.flushActiveList();
64 + check(lirFunc, context);
65 +}
66 +
67 +class InstrScheduler {
68 + // TODO: may be faster to use a linked list.
69 + activeList: LIR.Block[];
70 +
71 + lirFunc: LIR.Func;
72 +
73 + constructor(lirFunc: LIR.Func) {
74 + this.lirFunc = lirFunc;
75 + this.activeList = [];
76 + }
77 +
78 + /**
79 + * Insert @param newBlock into the ActiveList by moving it from back to front
80 + * until it hits a RenderBlock or a ReactiveBlock it depends on.
81 + */
82 + scheduleRenderBlock(newBlock: LIR.RenderBlock) {
83 + for (const [i, tailBlock] of [...this.activeList.entries()].reverse()) {
84 + let stop = false;
85 + if (LIR.isRenderBlock(tailBlock)) {
86 + stop = true;
87 + } else {
88 + invariant(LIR.isReactiveBlock(tailBlock), "");
89 + const uses = LIR.getAllUses(newBlock);
90 + if (!setEmpty(uses) && setIntersect(LIR.getAllDefs(tailBlock), uses)) {
91 + // Check if newBlock uses any values declared in tailBlock
92 + // so that we don't create uses-before-decls.
93 + stop = true;
94 + }
95 + }
96 + if (stop) {
97 + // after the tailBlock
98 + this.activeList.splice(i + 1, 0, newBlock);
99 + return;
100 + }
101 + }
102 + // Insert at the front.
103 + this.activeList.splice(0, 0, newBlock);
104 + }
105 +
106 + /**
107 + * Insert @param newBlock into the ActiveList while keeping it sorted in
108 + * a partial order where if i < j, then ActiveList[j].Inputs can't be subset
109 + * of ActiveList[i].Inputs.
110 + */
111 + scheduleReactiveBlock(newBlock: LIR.ReactiveBlock) {
112 + for (const [i, headBlock] of this.activeList.entries()) {
113 + if (LIR.isReactiveBlock(headBlock)) {
114 + if (setSubset(newBlock.inputs, headBlock.inputs)) {
115 + // before the headBlock
116 + this.activeList.splice(i, 0, newBlock);
117 + return;
118 + }
119 + }
120 + }
121 + // Insert at the end.
122 + this.activeList.push(newBlock);
123 + }
124 +
125 + /**
126 + * @returns the active block with the same set of @param inputs, if exists.
127 + */
128 + findReactiveBlock(
129 + inputs: Set<IR.ReactiveVal>
130 + ): LIR.ReactiveBlock | undefined {
131 + for (const block of this.activeList) {
132 + if (LIR.isReactiveBlock(block)) {
133 + if (setEq(inputs, block.inputs)) {
134 + return block;
135 + }
136 + }
137 + }
138 + return undefined;
139 + }
140 +
141 + /**
142 + * Flush all pending blocks in the ActiveList to LIR functions. This is used
143 + * by pinned Instr to create boundaries.
144 + */
145 + flushActiveList() {
146 + for (const block of this.activeList) {
147 + this.lirFunc.addBlock(block);
148 + }
149 + this.activeList = [];
150 + }
151 +}
152 +
153 +/**
154 + * Check the validity of generated @param lirFunc.
155 + */
156 +function check(lirFunc: LIR.Func, context: CompilerContext) {
157 + const declared = new Set<IR.Val>();
158 +
159 + for (const param of lirFunc.ir.params) {
160 + declared.add(param);
161 + }
162 +
163 + for (const block of lirFunc.blocks) {
164 + for (const decl of LIR.getAllDecls(block)) {
165 + declared.add(decl);
166 + }
167 +
168 + // Check use-before-decl for instructions in reactive blocks
169 + if (LIR.isReactiveBlock(block)) {
170 + for (const input of block.inputs) {
171 + if (!declared.has(input)) {
172 + // Find the instr that create the use to fire bailout/diagnostics
173 + for (const instr of block.body) {
174 + if (instr.ir.uses.some((ref) => ref.val === input)) {
175 + context.bailout("LazyInstrInputDefinedLater", {
176 + code: "E0008",
177 + path: instr.ast,
178 + context: {
179 + input: input.ast.path.parentPath ?? input.ast.path,
180 + },
181 + });
182 + }
183 + }
184 + }
185 + }
186 + }
187 + }
188 +}
compiler/forget/src/BackEnd/MemoCacheAlloc.ts new
+112
@@ -0,0 +1,112 @@
1 +/**
2 + * Copyright (c) Facebook, Inc. and its affiliates.
3 + *
4 + * This source code is licensed under the MIT license found in the
5 + * LICENSE file in the root directory of this source tree.
6 + */
7 +
8 +import type { NodePath } from "@babel/traverse";
9 +import * as t from "@babel/types";
10 +import { nullableSetEq } from "../Common/utils";
11 +import type { CompilerContext } from "../CompilerContext";
12 +import * as IR from "../IR";
13 +import * as LIR from "../LIR";
14 +import { PassKind, PassName } from "../Pass";
15 +
16 +/**
17 + * MemoCache Allocation.
18 + *
19 + * This pass is responsible for allocating entries into {@link MemoCache}. Each
20 + * entry represents "a unit of computation" that Forget will memoize. This
21 + * includes React-ive inputs (props, states), intermediate values, and React-ive
22 + * outputs (React elements created via JSX).
23 + *
24 + * The smallest unit of computations that can be memoized (so-called the
25 + * "memoization boundary") is constrained by the smallest unit of program
26 + * constructs we collected during {@link DepGraphAnalysis}.
27 + *
28 + * The purpose of having this pass is to be able to fine-tune the memoCache
29 + * allocation to improve the perf characteristics coming from memoization.
30 + * Ideas include:
31 + * 1. Establish criterias on when memoization is considered a saving. Maybe
32 + * sometimes it's cheaper (overall) not not memoize something, and we can
33 + * control that by not allocating an entry for that.
34 + * 2. It's likely that many computations will share the exact same set of react
35 + * func inputs. To help the code generator optimize the tree shape, we could
36 + * use some help here?
37 + */
38 +export default {
39 + name: PassName.MemoCacheAlloc,
40 + kind: PassKind.LIRFunc as const,
41 + run,
42 +};
43 +
44 +/**
45 + * Allocate memoCache for the given React @param func
46 + */
47 +function run(
48 + lirFunc: LIR.Func,
49 + func: NodePath<t.Function>,
50 + context: CompilerContext
51 +) {
52 + const irFunc = lirFunc.ir;
53 +
54 + // Allocating return value cache and return index registers.
55 + lirFunc.memoCache.allocRetVal();
56 + if (
57 + !context.opts.flags.singleReturnShortcut ||
58 + !lirFunc.hasSingleReturnPath
59 + ) {
60 + lirFunc.memoCache.allocRetIdx();
61 + }
62 +
63 + // Allocating entry for reactive vals.
64 + for (const bVal of irFunc.env.decls.values()) {
65 + if (IR.isReactiveVal(bVal)) {
66 + lirFunc.memoCache.allocReactive(bVal);
67 + }
68 + }
69 +
70 + // Allocating entry for block locals.
71 + for (const block of lirFunc.blocks) {
72 + if (!LIR.isReactiveBlock(block)) continue;
73 +
74 + for (const output of block.outputs) {
75 + if (IR.isBindingVal(output)) {
76 + lirFunc.memoCache.allocLocal(output);
77 + }
78 + }
79 + }
80 +
81 + // Allocating entry for JSX values.
82 + for (const irFuncTopLevel of irFunc.body) {
83 + irFuncTopLevel.jsxTreeRoots.forEach((rootVal) =>
84 + visitExprVal(rootVal, undefined)
85 + );
86 + }
87 +
88 + /**
89 + * This performs a pre-order traversal over the JSX tree to accompolish
90 + * memoCache allocations in an optimized manner: we only allocate an new
91 + * entry if the set of inputs of the subtree/leaves changed.
92 + *
93 + * @param parentInputs inputs from parent, undefined if inputs are none.
94 + */
95 + function visitExprVal(
96 + exprVal: IR.ExprVal,
97 + parentInputs: Set<IR.ReactiveVal> | undefined = undefined
98 + ) {
99 + // Prunning for unsafe JSX tag value
100 + if (IR.isJSXTagVal(exprVal) && exprVal.isUnsafeToMemo) return;
101 +
102 + const { inputs } = irFunc.depGraph.getOrCreateVertex(exprVal);
103 + const inputChanged = !nullableSetEq(inputs, parentInputs);
104 + if (inputChanged && !exprVal.stable) {
105 + lirFunc.memoCache.allocExpr(exprVal);
106 + }
107 +
108 + if (IR.isJSXTagVal(exprVal)) {
109 + exprVal.children.forEach((child) => visitExprVal(child, inputs));
110 + }
111 + }
112 +}
compiler/forget/src/BackEnd/index.ts new
+16
@@ -0,0 +1,16 @@
1 +/**
2 + * Copyright (c) Facebook, Inc. and its affiliates.
3 + *
4 + * This source code is licensed under the MIT license found in the
5 + * LICENSE file in the root directory of this source tree.
6 + */
7 +
8 +/**
9 + * Compiler Back End.
10 + * Concerning about code generation.
11 + */
12 +
13 +export { default as DumpLIR } from "./DumpLIR";
14 +export { default as JSGen } from "./JSGen";
15 +export { default as LIRGen } from "./LIRGen";
16 +export { default as MemoCacheAlloc } from "./MemoCacheAlloc";
compiler/forget/src/Common/Dumper.ts new
+113
@@ -0,0 +1,113 @@
1 +/**
2 + * Copyright (c) Facebook, Inc. and its affiliates.
3 + *
4 + * This source code is licensed under the MIT license found in the
5 + * LICENSE file in the root directory of this source tree.
6 + */
7 +
8 +import * as t from "@babel/types";
9 +import generate from "@babel/generator";
10 +
11 +/**
12 + * Dumper.
13 + */
14 +
15 +const defaultDumpNodeOption = {
16 + // dump with location.
17 + loc: false,
18 +
19 + // dump with the node type.
20 + type: false,
21 +
22 + // dump as the entire source code instead of a shorten name.
23 + source: false,
24 +
25 + // instead of <anno>, fallback to source.
26 + fallbackToSource: true,
27 +};
28 +
29 +type DumpNodeOption = typeof defaultDumpNodeOption;
30 +
31 +export function dumpNodeLoc(node: t.Node): string {
32 + return `${node.loc?.start.line ?? "?"}:${node.loc?.start.column ?? "?"}`;
33 +}
34 +
35 +/**
36 + * Dump a string form of the @param node to help with debugging.
37 + */
38 +export function dumpNode(
39 + node: t.Node | null | undefined,
40 + options: Partial<DumpNodeOption> = defaultDumpNodeOption
41 +): string {
42 + let str = "";
43 + let opt = { ...defaultDumpNodeOption, ...options };
44 +
45 + if (!node) return "";
46 +
47 + if (opt.loc) {
48 + str += `${dumpNodeLoc(node)} `;
49 + }
50 +
51 + if (opt.source) {
52 + str += generate(node).code;
53 + } else {
54 + switch (node.type) {
55 + case "Identifier":
56 + str += node.name;
57 + break;
58 +
59 + case "JSXIdentifier":
60 + str += `${node.name}`;
61 + break;
62 +
63 + case "VariableDeclarator":
64 + str += `${dumpNode(node.id, { source: true })}`;
65 + break;
66 +
67 + case "JSXMemberExpression":
68 + str += `${dumpNode(node.object)}.${dumpNode(node.property)}`;
69 + break;
70 +
71 + case "JSXNamespacedName":
72 + str += `${dumpNode(node.namespace)}:${dumpNode(node.name)}`;
73 + break;
74 +
75 + case "JSXOpeningElement":
76 + str += dumpNode(node.name);
77 + break;
78 +
79 + case "JSXAttribute":
80 + str += dumpNode(node.name);
81 + break;
82 +
83 + case "FunctionDeclaration":
84 + str += `function ${dumpNode(node.id)}`;
85 + break;
86 +
87 + case "JSXFragment":
88 + str += `<>`;
89 + break;
90 +
91 + case "JSXElement":
92 + if (node.selfClosing) {
93 + str += `<${dumpNode(node.openingElement)} />`;
94 + } else {
95 + str += `<${dumpNode(node.openingElement)}>`;
96 + }
97 + break;
98 +
99 + default:
100 + if (opt.fallbackToSource) {
101 + str += "`" + generate(node, { compact: true }).code + "`";
102 + } else {
103 + str += `<anno>`;
104 + }
105 + }
106 + }
107 +
108 + if (opt.type) {
109 + str += ` : ${node.type}`;
110 + }
111 +
112 + return str;
113 +}
compiler/forget/src/Common/PathUnion.ts new
+39
@@ -0,0 +1,39 @@
1 +/**
2 + * Copyright (c) Facebook, Inc. and its affiliates.
3 + *
4 + * This source code is licensed under the MIT license found in the
5 + * LICENSE file in the root directory of this source tree.
6 + */
7 +
8 +import { Node, NodePath } from "@babel/traverse";
9 +
10 +/**
11 + * A utility type to generate NodePath as a disjointed union type for better
12 + * type refinement and exhaustiveness check.
13 + *
14 + * @see https://www.typescriptlang.org/docs/handbook/2/conditional-types.html#distributive-conditional-types
15 + */
16 +export type PathUnion<N extends Node | undefined | null> = N extends Node
17 + ? NodePath<N>
18 + : N extends undefined
19 + ? NodePath<undefined>
20 + : N extends null
21 + ? NodePath<null>
22 + : never;
23 +
24 +/**
25 + * Cast @param path of type {@link NodePath} to {@link PathUnion}.
26 + *
27 + * This should only be used right before a type refinement (aka. narrowing):
28 + *
29 + * const path = pathUnion(rawPath)
30 + * switch(path.kind) {
31 + * case "A":
32 + * // path is now refined to NodePath<A>
33 + * }
34 + */
35 +export function pathUnion<N extends Node | null | undefined>(
36 + path: NodePath<N>
37 +): PathUnion<N> {
38 + return path as PathUnion<N>;
39 +}
compiler/forget/src/Common/utils.ts new
+66
@@ -0,0 +1,66 @@
1 +/**
2 + * Copyright (c) Facebook, Inc. and its affiliates.
3 + *
4 + * This source code is licensed under the MIT license found in the
5 + * LICENSE file in the root directory of this source tree.
6 + */
7 +
8 +/**
9 + * Individual util functions.
10 + */
11 +
12 +export function setEq<T>(a: Set<T>, b: Set<T>): boolean {
13 + return a.size === b.size && [...a].every((v) => b.has(v));
14 +}
15 +
16 +export function nullableSetEq<T>(
17 + a: Set<T> | undefined,
18 + b: Set<T> | undefined
19 +): boolean {
20 + if (a === undefined && b === undefined) return true;
21 + if (a === undefined || b === undefined) return false;
22 + return a.size === b.size && [...a].every((v) => b.has(v));
23 +}
24 +
25 +export function setSubset<T>(a: Set<T>, b: Set<T>): boolean {
26 + return a.size <= b.size && [...a].every((v) => b.has(v));
27 +}
28 +
29 +export function setIntersect<T>(a: Set<T>, b: Set<T>): boolean {
30 + return [...a].some((v) => b.has(v));
31 +}
32 +
33 +export function setFirst<T>(s: Set<T>): T {
34 + return [...s][0];
35 +}
36 +
37 +export function setEmpty<T>(s: Set<T>): boolean {
38 + return s.size === 0;
39 +}
40 +
41 +export function hasOwnProperty<T>(obj: T, key: PropertyKey): key is keyof T {
42 + return Object.prototype.hasOwnProperty.call(obj, key);
43 +}
44 +
45 +/**
46 + * Trigger an exhaustivess check in TypeScript and throw at runtime.
47 + *
48 + * Example:
49 + *
50 + * ```ts
51 + * enum ErrorCode = {
52 + * E0001 = "E0001",
53 + * E0002 = "E0002"
54 + * }
55 + *
56 + * switch (code) {
57 + * case ErrorCode.E0001:
58 + * // ...
59 + * default:
60 + * assertExhaustive(code, "Unhandled error code");
61 + * }
62 + * ```
63 + */
64 +export function assertExhaustive(_: never, errorMsg: string): never {
65 + throw new Error(errorMsg);
66 +}
compiler/forget/src/CompilerContext.ts new
+173
@@ -0,0 +1,173 @@
1 +/**
2 + * Copyright (c) Facebook, Inc. and its affiliates.
3 + *
4 + * This source code is licensed under the MIT license found in the
5 + * LICENSE file in the root directory of this source tree.
6 + */
7 +
8 +import { NodePath } from "@babel/traverse";
9 +import * as t from "@babel/types";
10 +import invariant from "invariant";
11 +import { CompilerOptions } from "./CompilerOptions";
12 +import { CompilerOutputs, createCompilerOutputs } from "./CompilerOutputs";
13 +import {
14 + buildDiagnostic,
15 + Diagnostic,
16 + DiagnosticLevel,
17 + DiagnosticOpts,
18 + ErrorCode,
19 + NoErrorCode,
20 + printDiagnostic,
21 + printPathCodeFrame,
22 +} from "./Diagnostic";
23 +import * as IR from "./IR";
24 +import * as LIR from "./LIR";
25 +import { Logger } from "./Logger";
26 +
27 +type Bailout = {
28 + code: ErrorCode;
29 + reason: string;
30 + stack: string | null;
31 + source: string | null;
32 +};
33 +
34 +let mostRecentCompilerContext: CompilerContext | null = null;
35 +/**
36 + * @returns CompilerContext used in the most recent call to {@link createCompilerDriver}
37 + */
38 +export function getMostRecentCompilerContext(): CompilerContext {
39 + invariant(
40 + mostRecentCompilerContext != null,
41 + "Can only call getMostRecentCompilerContext() after a call to createCompilerDriver()"
42 + );
43 + return mostRecentCompilerContext;
44 +}
45 +
46 +function createInvariantError(format: string, ...args: any[]) {
47 + Error.stackTraceLimit = 13;
48 + let ii = 0;
49 + const error = new Error(format.replace(/%s/g, () => args[ii++]));
50 + error.name = "Invariant Violation";
51 + popStackFrames(error, 3);
52 + Error.stackTraceLimit = 10;
53 + return error;
54 +}
55 +
56 +function popStackFrames(e: Error, n: number) {
57 + if (e.stack == null) {
58 + return;
59 + }
60 + const stackframes = e.stack.split("\n");
61 + stackframes.splice(1, n);
62 + e.stack = stackframes.join("\n");
63 +}
64 +
65 +/**
66 + * Global shared mutable context throughout the compilation pipeline.
67 + */
68 +export class CompilerContext {
69 + opts: CompilerOptions;
70 + outputs: CompilerOutputs = createCompilerOutputs();
71 + irProg: IR.Prog;
72 + lirProg: LIR.Prog;
73 + logger: Logger;
74 + diagnostics: Diagnostic[] = [];
75 + bailouts: Bailout[] = [];
76 +
77 + constructor(opts: CompilerOptions, prog: NodePath<t.Program>) {
78 + mostRecentCompilerContext = this;
79 + this.irProg = new IR.Prog(prog);
80 + this.lirProg = new LIR.Prog(this.irProg);
81 + this.opts = opts;
82 + this.logger = opts.logger;
83 + }
84 +
85 + createDiagnostic(opts: DiagnosticOpts): Diagnostic {
86 + const diag = buildDiagnostic(opts);
87 + this.diagnostics.push(diag);
88 +
89 + const loc = opts.path?.node.loc ?? null;
90 + this.logger.logEvent({
91 + name: "diagnostics",
92 + opts: {
93 + code: opts.code,
94 + loc,
95 + },
96 + });
97 +
98 + return diag;
99 + }
100 +
101 + /**
102 + * Record a compiler bailout, and emit a user-facing diagnostic. If this is not a user actionable
103 + * bailout, use {@link CompilerContext.bailoutWithoutDiagnostic} instead.
104 + */
105 + bailout(reason: string, opts: DiagnosticOpts) {
106 + const diag = this.createDiagnostic(opts);
107 + this.bailouts.push({
108 + reason,
109 + code: opts.code ?? NoErrorCode,
110 + source: printDiagnostic(diag),
111 + stack: null,
112 + });
113 + this.logger.logEvent({
114 + name: "bailout",
115 + reason,
116 + });
117 + }
118 +
119 + /**
120 + * Record a compiler bailout, with an optional Babel Path to track the source code that triggered
121 + * the bailout. If this is an actionable bailout (ie the user can fix this), use
122 + * {@link CompilerContext.bailout} instead.
123 + */
124 + bailoutWithoutDiagnostic(reason: string, path?: NodePath) {
125 + const source =
126 + path != null
127 + ? printPathCodeFrame(reason, DiagnosticLevel.Error, path)
128 + : null;
129 + this.bailouts.push({
130 + code: NoErrorCode,
131 + reason,
132 + source,
133 + stack: null,
134 + });
135 + this.logger.logEvent({
136 + name: "bailout",
137 + reason,
138 + });
139 + }
140 +
141 + /**
142 + * Record a bailout if there is an invariant violation and a recently created compiler context.
143 + * Note that no diagnostics are emitted. If a diagnostic is desired, use
144 + * {@link CompilerContext.bailout} instead.
145 + */
146 + invariant(
147 + condition: unknown,
148 + format: string,
149 + ...args: any[]
150 + ): asserts condition {
151 + if (condition) {
152 + return;
153 + }
154 + const error = createInvariantError(format, ...args);
155 + const reason = `InvariantViolation: ${error.message}`;
156 + const stack = error.stack ?? null;
157 + this.bailouts.push({
158 + code: NoErrorCode,
159 + reason,
160 + stack,
161 + source: null,
162 + });
163 + this.logger.logEvent({
164 + name: "bailout",
165 + reason,
166 + });
167 + throw error;
168 + }
169 +
170 + hasBailedOut(): boolean {
171 + return this.bailouts.length > 0;
172 + }
173 +}
compiler/forget/src/CompilerDriver.ts new
+63
@@ -0,0 +1,63 @@
1 +/**
2 + * Copyright (c) Facebook, Inc. and its affiliates.
3 + *
4 + * This source code is licensed under the MIT license found in the
5 + * LICENSE file in the root directory of this source tree.
6 + */
7 +
8 +import { NodePath } from "@babel/traverse";
9 +import * as t from "@babel/types";
10 +import * as BE from "./BackEnd";
11 +import { CompilerContext } from "./CompilerContext";
12 +import { CompilerOptions } from "./CompilerOptions";
13 +import * as ME from "./MiddleEnd";
14 +import { PassManager } from "./PassManager";
15 +
16 +/**
17 + * Compiler Driver
18 + *
19 + * Owns {@link CompilerContext} and source program.
20 + */
21 +export interface CompilerDriver {
22 + context: CompilerContext;
23 + program: NodePath<t.Program>;
24 + compile(): void;
25 +}
26 +
27 +export function createCompilerDriver(
28 + options: CompilerOptions,
29 + program: NodePath<t.Program>
30 +): CompilerDriver {
31 + const context = new CompilerContext(options, program);
32 +
33 + return {
34 + context,
35 + program,
36 + compile() {
37 + const passManager = new PassManager(program, context);
38 +
39 + // Syntax Analysis and IR Generation.
40 + passManager.addPass(ME.ReactFuncsInfer);
41 + passManager.addPass(ME.ParamAnalysis);
42 + passManager.addPass(ME.BodyAnalysis);
43 + passManager.addPass(ME.SketchyCodeCheck);
44 + passManager.addPass(ME.RefKindInfer);
45 + passManager.addPass(ME.DumpIR);
46 + passManager.addPass(ME.IRCheck);
47 + passManager.addPass(ME.DumpCFG);
48 +
49 + // Dependency Analysis via DepGraph.
50 + passManager.addPass(ME.DepGraphAnalysis);
51 +
52 + // LIR Generation.
53 + passManager.addPass(BE.LIRGen);
54 + passManager.addPass(BE.MemoCacheAlloc);
55 + passManager.addPass(BE.DumpLIR);
56 +
57 + // JS Generation.
58 + passManager.addPass(BE.JSGen);
59 +
60 + passManager.runAll();
61 + },
62 + };
63 +}
compiler/forget/src/CompilerError.ts new
+27
@@ -0,0 +1,27 @@
1 +/**
2 + * Copyright (c) Facebook, Inc. and its affiliates.
3 + *
4 + * This source code is licensed under the MIT license found in the
5 + * LICENSE file in the root directory of this source tree.
6 + */
7 +
8 +import invariant from "invariant";
9 +import { getMostRecentCompilerContext } from "./CompilerContext";
10 +
11 +// Record a bailout if there is an invariant violation and a recently created compiler context.
12 +// Otherwise, just throws a regular invariant.
13 +function compilerInvariant(
14 + condition: unknown,
15 + format: string,
16 + ...args: any[]
17 +): asserts condition {
18 + let context = null;
19 + try {
20 + context = getMostRecentCompilerContext();
21 + } catch (_) {}
22 + if (context != null) {
23 + return context.invariant(condition, format, ...args);
24 + }
25 + return invariant(condition, format, ...args);
26 +}
27 +export { compilerInvariant as invariant };
compiler/forget/src/CompilerFlags.ts new
+130
@@ -0,0 +1,130 @@
1 +/**
2 + * Copyright (c) Facebook, Inc. and its affiliates.
3 + *
4 + * This source code is licensed under the MIT license found in the
5 + * LICENSE file in the root directory of this source tree.
6 + */
7 +
8 +/**
9 + * Compiler Flags.
10 + */
11 +
12 +export type CompilerFlags = {
13 + // Analysis
14 +
15 + /**
16 + * Although global mutation is unsafe, (render-)local mutation through free
17 + * vars could still be safe. This flag will include references to free vars
18 + * into the analysis and conservatively assume the value itself being mutable.
19 + */
20 + localMutationThroughFreeVars: boolean;
21 +
22 + /**
23 + * Abort compilation of functions with more than one return (implicit or
24 + * explicit).
25 + */
26 + bailOnMultipleReturns: boolean;
27 +
28 + /**
29 + * Abort compilation when a function starting with a capictal letter is
30 + * called as this might indicate a component called w/o JSX.
31 + *
32 + * Examples:
33 + * - `Container(memoizedProps)` might contain hook calls in
34 + * https://fburl.com/code/l9mmhzlg
35 + */
36 + bailOnCapitalizedFunctionCalls: boolean;
37 +
38 + /**
39 + * Bail out on components defined in nested scopes.
40 + *
41 + * Examples:
42 + * - `getter` function call might contain hook calls in
43 + * https://fburl.com/code/yji3smfm
44 + * While this bailout doesn't directly discover this case, HOCs are a
45 + * common source of calls like this.
46 + */
47 + bailOnNestedComponents: boolean;
48 +
49 + /**
50 + * Abort compilation of functions that contain any `useRef` calls.
51 + */
52 + bailOnUseRef: boolean;
53 +
54 + // Optimizations
55 + singleReturnShortcut: boolean;
56 +
57 + // Codegen
58 + /**
59 + * Conditional Cache Replacement For ReactiveVal.
60 + * @See <https://github.com/facebook/react-forget/issues/115>
61 + */
62 + condCache: boolean;
63 +
64 + /**
65 + * Enable runtime guards against reads of uninitialied memo cache values.
66 + */
67 + guardReads: boolean;
68 +
69 + /**
70 + * Enable runtime guards against calls to hooks in reactive blocks. These calls
71 + * are bugs in the compiler or user code not following Rules of Hooks, such
72 + * as calling a component like a function or naming a hook incorrectly.
73 + */
74 + guardHooks: boolean;
75 +
76 + /**
77 + * Adds a guard around the whole function to ensure the memo cache is reset
78 + * on any throw.
79 + *
80 + * When https://github.com/facebook/react/pull/25143 lands on internally, we
81 + * can remove this flag.
82 + */
83 + guardThrows: boolean;
84 +};
85 +
86 +export function createCompilerFlags(): CompilerFlags {
87 + return {
88 + localMutationThroughFreeVars: false,
89 + bailOnMultipleReturns: false,
90 + bailOnCapitalizedFunctionCalls: false,
91 + bailOnNestedComponents: false,
92 + bailOnUseRef: false,
93 + singleReturnShortcut: true,
94 + condCache: false,
95 + guardReads: false,
96 + guardHooks: false,
97 + guardThrows: false,
98 + };
99 +}
100 +
101 +export function parseCompilerFlags(
102 + flags: object,
103 + ignoreInvalidInput: boolean = false
104 +): CompilerFlags {
105 + const res = createCompilerFlags();
106 + for (const [key, value] of Object.entries(flags)) {
107 + switch (key) {
108 + case "localMutationThroughFreeVars":
109 + case "bailOnMultipleReturns":
110 + case "bailOnCapitalizedFunctionCalls":
111 + case "bailOnNestedComponents":
112 + case "bailOnUseRef":
113 + case "singleReturnShortcut":
114 + case "condCache":
115 + case "guardReads":
116 + case "guardHooks":
117 + case "guardThrows":
118 + if (typeof value !== "boolean") {
119 + throw `Expected boolean for flag '${key}': ${value}`;
120 + }
121 + res[key] = value;
122 + break;
123 + default:
124 + if (!ignoreInvalidInput) {
125 + throw `Unknown flag: ${key}`;
126 + }
127 + }
128 + }
129 + return res;
130 +}
compiler/forget/src/CompilerOptions.ts new
+115
@@ -0,0 +1,115 @@
1 +/**
2 + * Copyright (c) Facebook, Inc. and its affiliates.
3 + *
4 + * This source code is licensed under the MIT license found in the
5 + * LICENSE file in the root directory of this source tree.
6 + */
7 +
8 +import { PluginOptions } from "@babel/core";
9 +import {
10 + createCompilerFlags,
11 + CompilerFlags,
12 + parseCompilerFlags,
13 +} from "./CompilerFlags";
14 +import { isOutputKind, OutputKind } from "./CompilerOutputs";
15 +import { Logger, noopLogger } from "./Logger";
16 +import { PassName } from "./Pass";
17 +import { hasOwnProperty } from "./Common/utils";
18 +
19 +export type CompilerOptions = {
20 + outputKinds: OutputKind[];
21 +
22 + flags: CompilerFlags;
23 +
24 + /**
25 + * Notify the compiler to stop at certain pass.
26 + */
27 + stopPass: PassName;
28 +
29 + /**
30 + * Set this to true to make Forget opt-in at file level.
31 + * - `"use forget"`
32 + * - `@react forget` (tentative)
33 + */
34 + optIn: boolean;
35 +
36 + /**
37 + * Logger for compiler development errors and warnings.
38 + * By default, logs are disabled.
39 + */
40 + logger: Logger;
41 +};
42 +
43 +/**
44 + * Takes an untyped JSON object and converts it to `CompilerOptions`.
45 + *
46 + * @returns A valid `CompilerOptions`.
47 + * @throws An error message describe the invalid input.
48 + */
49 +export function parseCompilerOptions(
50 + pluginOpts: PluginOptions
51 +): CompilerOptions {
52 + const resOpts: CompilerOptions = createCompilerOptions();
53 + if (pluginOpts == null) {
54 + return resOpts;
55 + }
56 + if (typeof pluginOpts !== "object") {
57 + throw "Expected an object";
58 + }
59 + const inputOpts = pluginOpts as {
60 + [P in keyof CompilerOptions]?: any;
61 + };
62 + if (hasOwnProperty(inputOpts, "outputKinds")) {
63 + const outputKinds = inputOpts.outputKinds;
64 + if (
65 + outputKinds == null ||
66 + outputKinds.some((kind: string) => !isOutputKind(kind))
67 + ) {
68 + throw `Invalid value for 'outputKinds': ${outputKinds}`;
69 + }
70 + resOpts.outputKinds = outputKinds;
71 + }
72 + if (hasOwnProperty(inputOpts, "flags")) {
73 + resOpts.flags = parseCompilerFlags(inputOpts.flags);
74 + }
75 + if (hasOwnProperty(inputOpts, "stopPass")) {
76 + const stopPass = inputOpts.stopPass;
77 + if (!(stopPass in PassName)) {
78 + throw `Invalid value for 'stopPass': ${stopPass}`;
79 + }
80 + resOpts.stopPass = stopPass;
81 + }
82 + if (hasOwnProperty(inputOpts, "optIn")) {
83 + const optIn = inputOpts.optIn;
84 + if (typeof optIn !== "boolean") {
85 + throw `Invalid value for 'optIn': ${optIn}`;
86 + }
87 + resOpts.optIn = optIn;
88 + }
89 + if (hasOwnProperty(inputOpts, "logger")) {
90 + const logger = inputOpts.logger;
91 + if (
92 + typeof logger !== "object" ||
93 + typeof logger.error !== "function" ||
94 + typeof logger.warn !== "function" ||
95 + typeof logger.logEvent !== "function"
96 + ) {
97 + throw `Invalid value for 'logger': ${logger}`;
98 + }
99 + resOpts.logger = logger;
100 + }
101 + return resOpts;
102 +}
103 +
104 +/**
105 + * Create default {@link CompilerOptions}.
106 + */
107 +export function createCompilerOptions(): CompilerOptions {
108 + return {
109 + outputKinds: [OutputKind.JS],
110 + flags: createCompilerFlags(),
111 + stopPass: PassName.JSGen,
112 + optIn: false,
113 + logger: noopLogger,
114 + };
115 +}
compiler/forget/src/CompilerOutputs.ts new
+114
@@ -0,0 +1,114 @@
1 +/**
2 + * Copyright (c) Facebook, Inc. and its affiliates.
3 + *
4 + * This source code is licensed under the MIT license found in the
5 + * LICENSE file in the root directory of this source tree.
6 + */
7 +
8 +import invariant from "invariant";
9 +import parserFlow from "prettier/parser-flow";
10 +import prettier from "prettier/standalone";
11 +import prettyFormat from "pretty-format";
12 +import { SCCGraphSnapshot, ValGraphSnapshot } from "./DepGraph";
13 +
14 +/**
15 + * N.B. we use string enum to ease the interop with untyped code.
16 + */
17 +export enum OutputKind {
18 + IR = "DumpIR",
19 + CFG = "DumpCFG",
20 + ValGraph = "DumpValGraph",
21 + SCCGraph = "DumpSCCGraph",
22 + RedGraph = "DumpRedGraph",
23 + LIR = "DumpLIR",
24 + JS = "EmitJS",
25 +}
26 +
27 +/**
28 + * @returns if @param kind is syntactically valid JavaScript
29 + */
30 +export function isSyntacticallyValidJS(kind: OutputKind) {
31 + return [OutputKind.IR, OutputKind.LIR, OutputKind.JS].includes(kind);
32 +}
33 +
34 +export interface CompilerOutputs {
35 + [OutputKind.IR]: string;
36 + [OutputKind.CFG]: string;
37 + [OutputKind.ValGraph]: ValGraphSnapshot[];
38 + [OutputKind.SCCGraph]: SCCGraphSnapshot[];
39 + [OutputKind.RedGraph]: SCCGraphSnapshot[];
40 + [OutputKind.LIR]: string;
41 + [OutputKind.JS]: string;
42 +}
43 +
44 +export function createCompilerOutputs(): CompilerOutputs {
45 + return {
46 + [OutputKind.IR]: "",
47 + [OutputKind.CFG]: "",
48 + [OutputKind.ValGraph]: [],
49 + [OutputKind.SCCGraph]: [],
50 + [OutputKind.RedGraph]: [],
51 + [OutputKind.LIR]: "",
52 + [OutputKind.JS]: "",
53 + };
54 +}
55 +
56 +export function isOutputKind(kind: string): kind is OutputKind {
57 + return Object.values(OutputKind).includes(kind as OutputKind);
58 +}
59 +
60 +export type PrettyCompilerOutputs = Record<OutputKind, string | undefined>;
61 +
62 +export function stringifyCompilerOutputs(
63 + compilerOutputs: CompilerOutputs
64 +): PrettyCompilerOutputs {
65 + const outputs: PrettyCompilerOutputs = {
66 + [OutputKind.IR]: undefined,
67 + [OutputKind.CFG]: undefined,
68 + [OutputKind.ValGraph]: undefined,
69 + [OutputKind.SCCGraph]: undefined,
70 + [OutputKind.RedGraph]: undefined,
71 + [OutputKind.LIR]: undefined,
72 + [OutputKind.JS]: undefined,
73 + };
74 +
75 + Object.entries(compilerOutputs).forEach(([outputKind, output]) => {
76 + if (isOutputKind(outputKind)) {
77 + if (isSyntacticallyValidJS(outputKind)) {
78 + invariant(
79 + typeof output === "string",
80 + "OutputKind that are JS must have string typed output."
81 + );
82 + if (output !== "") {
83 + try {
84 + outputs[outputKind] = prettier
85 + .format(output, {
86 + parser: "flow",
87 + plugins: [parserFlow],
88 + })
89 + .trim();
90 + } catch (e) {
91 + console.warn("Error formatting output:", e);
92 + }
93 + }
94 + } else if (outputKind === OutputKind.CFG) {
95 + invariant(typeof output === "string", "CFG output must be a string");
96 + outputs[outputKind] = output;
97 + } else {
98 + invariant(Array.isArray(output), "Graph outputs are arrays.");
99 + if (output.length > 0) {
100 + outputs[outputKind] = output
101 + .map((o: ValGraphSnapshot | SCCGraphSnapshot) =>
102 + prettyFormat(o.toMap())
103 + )
104 + .join("\n");
105 + }
106 + }
107 + }
108 + });
109 +
110 + return outputs;
111 +}
112 +
113 +export { ValGraphSnapshot as ValGraph };
114 +export { SCCGraphSnapshot as SCCGraph };
compiler/forget/src/ControlFlowGraph/CFGBuilder.ts new
+466
@@ -0,0 +1,466 @@
1 +import { NodePath } from "@babel/traverse";
2 +import * as t from "@babel/types";
3 +import { assertExhaustive } from "../Common/utils";
4 +import { invariant } from "../CompilerError";
5 +import * as IR from "../IR";
6 +import { BasicBlock, BlockId, CFG, Terminal } from "./ControlFlowGraph";
7 +
8 +/**
9 + * A work-in-progress block that does not yet have a terminator
10 + */
11 +export type WipBlock = {
12 + id: BlockId;
13 + body: Array<NodePath<t.Statement | t.Expression>>;
14 + parents: Set<IR.FuncTopLevel>;
15 +};
16 +
17 +export enum TerminatorKind {
18 + Fallthrough,
19 + Normal,
20 +}
21 +
22 +/**
23 + * Scope is used to track contextual information such as break/continue targets
24 + * as well as which variables determine whether control flow to the current
25 + * statement can be reached or not.
26 + */
27 +type Scope = LoopScope | ConditionalScope | LabelScope | SwitchScope;
28 +
29 +type LoopScope = {
30 + kind: "loop";
31 + label: string | null;
32 + continueBlock: BlockId;
33 + breakBlock: BlockId;
34 +};
35 +
36 +type ConditionalScope = {
37 + kind: "conditional";
38 + test: NodePath<t.Expression>;
39 +};
40 +
41 +type LabelScope = {
42 + kind: "label";
43 + label: string;
44 + breakBlock: BlockId;
45 +};
46 +
47 +type SwitchScope = {
48 + kind: "switch";
49 + test: NodePath<t.Expression>;
50 + breakBlock: BlockId;
51 +};
52 +
53 +function newWipBlock(id: BlockId): WipBlock {
54 + return {
55 + id,
56 + body: [],
57 + parents: new Set(),
58 + };
59 +}
60 +
61 +/**
62 + * Helper class for constructing a CFG
63 + */
64 +export default class CFGBuilder {
65 + #completed: Map<BlockId, BasicBlock> = new Map();
66 + #nextId: BlockId = 1;
67 + #current: WipBlock = newWipBlock(0);
68 + #entry: BlockId = 0;
69 + #scopes: Array<Scope> = [];
70 +
71 + /**
72 + * Add a parent IR func top level
73 + */
74 + associateParentBlock(block: IR.FuncTopLevel) {
75 + this.#current.parents.add(block);
76 + }
77 +
78 + /**
79 + * Push a statement or expression onto the current block
80 + */
81 + push(stmt: NodePath<t.Statement | t.Expression>) {
82 + this.#current.body.push(stmt);
83 + }
84 +
85 + /**
86 + * Construct a final CFG from this context
87 + */
88 + build(): CFG {
89 + const { id: blockId, body, parents } = this.#current;
90 + this.#completed.set(blockId, {
91 + body,
92 + terminal: { kind: "return", value: null, fallthrough: null },
93 + parents,
94 + });
95 + return shrink({
96 + blocks: this.#completed,
97 + entry: this.#entry,
98 + });
99 + }
100 +
101 + /**
102 + * Terminate the current block w the given terminal, and start a new block
103 + */
104 + terminate(terminal: Terminal) {
105 + const { id: blockId, body, parents } = this.#current;
106 + this.#completed.set(blockId, {
107 + body,
108 + terminal,
109 + parents,
110 + });
111 + const nextId = this.#nextId++;
112 + this.#current = newWipBlock(nextId);
113 + }
114 +
115 + /**
116 + * Terminate the current block w the given terminal, and set the previously
117 + * reserved block as the new current block
118 + */
119 + terminateWithContinuation(terminal: Terminal, continuation: WipBlock) {
120 + const { id: blockId, body, parents } = this.#current;
121 + this.#completed.set(blockId, {
122 + body,
123 + terminal,
124 + parents,
125 + });
126 + this.#current = continuation;
127 + }
128 +
129 + /**
130 + * Reserve a block so that it can be referenced prior to construction.
131 + * Make this the current block with `terminateWithContinuation()` or
132 + * call `complete()` to save it without setting it as the current block.
133 + */
134 + reserve(): WipBlock {
135 + const blockId = this.#nextId++;
136 + return newWipBlock(blockId);
137 + }
138 +
139 + /**
140 + * Save a previously reserved block as completed
141 + */
142 + complete(block: WipBlock, terminal: Terminal) {
143 + const { id: blockId, body, parents } = block;
144 + this.#completed.set(blockId, { body, terminal, parents });
145 + }
146 +
147 + /**
148 + * Create a new block and execute the provided callback with the new block
149 + * set as the current, resetting to the previously active block upon exit.
150 + * The lambda must return a terminal node, which is used to terminate the
151 + * newly constructed block.
152 + */
153 + enter(fn: (blockId: BlockId) => Terminal): BlockId {
154 + const current = this.#current;
155 + const nextId = this.#nextId++;
156 + this.#current = newWipBlock(nextId);
157 + const terminal = fn(nextId);
158 + const { id: blockId, body, parents } = this.#current;
159 + this.#completed.set(blockId, { body, terminal, parents });
160 + this.#current = current;
161 + return nextId;
162 + }
163 +
164 + condition<T>(test: NodePath<t.Expression>, fn: () => T): T {
165 + this.#scopes.push({
166 + kind: "conditional",
167 + test,
168 + });
169 + const value = fn();
170 + const last = this.#scopes.pop();
171 + invariant(
172 + last != null && last.kind === "conditional" && last.test === test,
173 + "Mismatched condition"
174 + );
175 + return value;
176 + }
177 +
178 + label<T>(label: string, breakBlock: BlockId, fn: () => T): T {
179 + this.#scopes.push({
180 + kind: "label",
181 + breakBlock,
182 + label,
183 + });
184 + const value = fn();
185 + const last = this.#scopes.pop();
186 + invariant(
187 + last != null &&
188 + last.kind === "label" &&
189 + last.label === label &&
190 + last.breakBlock === breakBlock,
191 + "Mismatched label"
192 + );
193 + return value;
194 + }
195 +
196 + switch<T>(test: NodePath<t.Expression>, breakBlock: BlockId, fn: () => T): T {
197 + this.#scopes.push({
198 + kind: "switch",
199 + breakBlock,
200 + test,
201 + });
202 + const value = fn();
203 + const last = this.#scopes.pop();
204 + invariant(
205 + last != null && last.kind === "switch" && last.test === test,
206 + "Mismatched label"
207 + );
208 + return value;
209 + }
210 +
211 + /**
212 + * Executes the provided lambda inside a scope in which the provided loop
213 + * information is cached for lookup with `lookupBreak()` and `lookupContinue()`
214 + */
215 + loop<T>(
216 + label: string | null,
217 + /**
218 + * block of the loop body. "continue" jumps here.
219 + */
220 + continueBlock: BlockId,
221 + /**
222 + * block following the loop. "break" jumps here.
223 + */
224 + breakBlock: BlockId,
225 + fn: () => T
226 + ): T {
227 + this.#scopes.push({
228 + kind: "loop",
229 + label,
230 + continueBlock,
231 + breakBlock,
232 + });
233 + const value = fn();
234 + const last = this.#scopes.pop();
235 + invariant(
236 + last != null &&
237 + last.kind === "loop" &&
238 + last.label === label &&
239 + last.continueBlock === continueBlock &&
240 + last.breakBlock === breakBlock,
241 + "Mismatched loops"
242 + );
243 + return value;
244 + }
245 +
246 + /**
247 + * Returns the set of expressions which appear as conditions (if/switch test)
248 + * determining whether control flow to the current point will be reached.
249 + *
250 + * This is intended for recording "control dependencies" at places such as explicit
251 + * break/return which divert from normal control flow.
252 + */
253 + controlExpressions(): Array<NodePath<t.Expression>> | null {
254 + const tests: Array<NodePath<t.Expression>> = [];
255 + this.#scopes.forEach((scope) => {
256 + if (scope.kind === "conditional" || scope.kind === "switch") {
257 + tests.push(scope.test);
258 + }
259 + });
260 + return tests.length === 0 ? null : tests;
261 + }
262 +
263 + /**
264 + * Lookup the block target for a break statement, based on loops and switch statements
265 + * in scope. Throws if there is no available location to break.
266 + */
267 + lookupBreak(label: string | null): BlockId {
268 + for (let ii = this.#scopes.length - 1; ii >= 0; ii--) {
269 + const scope = this.#scopes[ii];
270 + switch (scope.kind) {
271 + case "label":
272 + case "loop": {
273 + if (label === null || label === scope.label) {
274 + return scope.breakBlock;
275 + }
276 + break;
277 + }
278 + case "switch": {
279 + return scope.breakBlock;
280 + }
281 + default: {
282 + // no-op
283 + }
284 + }
285 + }
286 + invariant(false, "Expected a loop or switch to be in scope");
287 + }
288 +
289 + /**
290 + * Lookup the block target for a continue statement, based on loops
291 + * in scope. Throws if there is no available location to continue, or if the given
292 + * label does not correspond to a loop (this should also be validated at parse time).
293 + */
294 + lookupContinue(label: string | null): BlockId {
295 + for (let ii = this.#scopes.length - 1; ii >= 0; ii--) {
296 + const scope = this.#scopes[ii];
297 + if (scope.kind === "loop") {
298 + if (label === null || label === scope.label) {
299 + return scope.continueBlock;
300 + }
301 + } else if (scope.kind === "label" && scope.label === label) {
302 + invariant(false, "Continue may only refer to a labeled loop");
303 + }
304 + }
305 + invariant(false, "Expected a loop to be in scope");
306 + }
307 +}
308 +
309 +/**
310 + * Helper to shrink a CFG to eliminate unreachable node and eliminate jump-only blocks.
311 + */
312 +function shrink(func: CFG): CFG {
313 + const gotos = new Map();
314 + /**
315 + * Given a target block for some terminator, resolves the ideal block that should be
316 + * targeted instead. This transitively resolves any blocks that are simple indirections
317 + * (empty blocks that terminate in a goto).
318 + */
319 + function resolveBlockTarget(blockId: BlockId): BlockId {
320 + let target = gotos.get(blockId) ?? null;
321 + if (target !== null) {
322 + return target;
323 + }
324 + const block = func.blocks.get(blockId)!;
325 + target = getTargetIfIndirection(block);
326 + if (target !== null) {
327 + // the target might also be a simple goto, recurse
328 + target = resolveBlockTarget(target) ?? target;
329 + gotos.set(blockId, target);
330 + return target;
331 + } else {
332 + // If the block wasn't an indirection, return the original input.
333 + return blockId;
334 + }
335 + }
336 +
337 + /**
338 + * Fixpoint iteration to explore all blocks reachable from the entry block,
339 + * and to resolve their terminator targets to avoid indirections.
340 + * This implicitly prunes unreachable blocks since they are never visited and
341 + * therefore not added to the output.
342 + */
343 + const queue = [func.entry];
344 + // new set of output blocks
345 + const blocks: Map<BlockId, BasicBlock> = new Map();
346 + while (queue.length !== 0) {
347 + const blockId = queue.shift()!;
348 + if (blocks.has(blockId)) {
349 + continue;
350 + }
351 + const { body, terminal: prevTerminal, parents } = func.blocks.get(blockId)!;
352 + const terminal = mapTerminalSuccessors(prevTerminal, (prevTarget, kind) => {
353 + const target = resolveBlockTarget(prevTarget);
354 + if (kind == TerminatorKind.Normal) {
355 + queue.push(target);
356 + }
357 + return target;
358 + });
359 + blocks.set(blockId, {
360 + body,
361 + terminal,
362 + parents,
363 + });
364 + }
365 +
366 + for (const block of blocks.values()) {
367 + if (
368 + (block.terminal.kind === "return" || block.terminal.kind === "goto") &&
369 + block.terminal.fallthrough !== null &&
370 + !blocks.has(block.terminal.fallthrough.block)
371 + ) {
372 + // this fallthrough branch wasn't otherwise reachable, prune it
373 + block.terminal.fallthrough = null;
374 + }
375 + }
376 +
377 + return {
378 + blocks,
379 + entry: func.entry,
380 + };
381 +}
382 +
383 +/**
384 + * If the given block is a simple indirection (empty terminated with a goto),
385 + * returns the block being pointed to. Otherwise returns null
386 + */
387 +function getTargetIfIndirection(block: BasicBlock): number | null {
388 + return block.body.length === 0 &&
389 + block.terminal.kind === "goto" &&
390 + block.terminal.fallthrough === null
391 + ? block.terminal.block
392 + : null;
393 +}
394 +
395 +/**
396 + * Maps a terminal node's block assignments using the provided function.
397 + */
398 +function mapTerminalSuccessors(
399 + terminal: Terminal,
400 + fn: (block: BlockId, fallthrough: TerminatorKind) => BlockId
401 +): Terminal {
402 + switch (terminal.kind) {
403 + case "goto": {
404 + const target = fn(terminal.block, TerminatorKind.Normal);
405 + const fallthrough =
406 + terminal.fallthrough !== null
407 + ? {
408 + block: fn(terminal.fallthrough.block, TerminatorKind.Fallthrough),
409 + tests: terminal.fallthrough.tests,
410 + }
411 + : null;
412 + return {
413 + kind: "goto",
414 + block: target,
415 + fallthrough,
416 + };
417 + }
418 + case "if": {
419 + const consequent = fn(terminal.consequent, TerminatorKind.Normal);
420 + const alternate = fn(terminal.alternate, TerminatorKind.Normal);
421 + return {
422 + kind: "if",
423 + test: terminal.test,
424 + consequent,
425 + alternate,
426 + };
427 + }
428 + case "switch": {
429 + const cases = terminal.cases.map((case_) => {
430 + const target = fn(case_.block, TerminatorKind.Normal);
431 + return {
432 + test: case_.test,
433 + block: target,
434 + };
435 + });
436 + return {
437 + kind: "switch",
438 + test: terminal.test,
439 + cases,
440 + };
441 + }
442 + case "return": {
443 + const fallthrough =
444 + terminal.fallthrough !== null
445 + ? {
446 + block: fn(terminal.fallthrough.block, TerminatorKind.Fallthrough),
447 + tests: terminal.fallthrough.tests,
448 + }
449 + : null;
450 + return {
451 + kind: "return",
452 + value: terminal.value,
453 + fallthrough,
454 + };
455 + }
456 + case "throw": {
457 + return terminal;
458 + }
459 + default: {
460 + assertExhaustive(
461 + terminal,
462 + `Unexpected terminal kind '${(terminal as any as Terminal).kind}'`
463 + );
464 + }
465 + }
466 +}
compiler/forget/src/ControlFlowGraph/ControlFlowGraph.ts new
+125
@@ -0,0 +1,125 @@
1 +import { NodePath } from "@babel/traverse";
2 +import * as t from "@babel/types";
3 +import * as IR from "../IR";
4 +
5 +/**
6 + * A control flow graph comprises of a set of basic blocks plus the entry block id.
7 + */
8 +export type CFG = {
9 + blocks: Map<BlockId, BasicBlock>;
10 + entry: BlockId;
11 +};
12 +
13 +export type BlockId = number;
14 +
15 +/**
16 + * A sequence of zero or more statements that will execute consecutively (barring exceptions)
17 + * followed by a terminal node. The terminal ends the *block*, not the function, though some
18 + * terminals such as throw or return may also exit from the function.
19 + */
20 +export type BasicBlock = {
21 + body: Array<NodePath<t.Statement | t.Expression>>;
22 + terminal: Terminal;
23 + parents: Set<IR.FuncTopLevel>;
24 +};
25 +
26 +/**
27 + * Union of all possible terminal nodes.
28 + */
29 +export type Terminal =
30 + | ReturnTerminal
31 + | GotoTerminal
32 + | ThrowTerminal
33 + | IfTerminal
34 + | SwitchTerminal;
35 +
36 +/**
37 + * Models a `return <expression>`, terminating the block by returning the given value.
38 + */
39 +export type ReturnTerminal = {
40 + kind: "return";
41 + value: NodePath<t.Expression> | null;
42 +
43 + /**
44 + * The block that would otherwise be reached if the return were not present.
45 + * This is only non-null if the fallthrough block is reachable by some other
46 + * control-flow path.
47 + * Represents the block that would otherwise be reached if this return were
48 + * not present, along with the test conditions that are checked to decide if
49 + * this return should be taken. The fallthrough object is only non-null if
50 + * the fallthrough block is reachable by some other control-flow path.
51 + */
52 + fallthrough: {
53 + block: BlockId;
54 + tests: Array<NodePath<t.Expression>> | null;
55 + } | null;
56 +};
57 +
58 +/**
59 + * Models control-flow that unconditionally jumps to another block. In general
60 + * Goto is only used if there is more than one control flow path that will reach
61 + * the target block: if block A is the only block that can flow into block B,
62 + * block A and B would be constructed as a single block.
63 + */
64 +export type GotoTerminal = {
65 + kind: "goto";
66 + block: BlockId;
67 +
68 + /**
69 + * The block that would otherwise be reached if the return were not present.
70 + * This is only non-null if the fallthrough block is reachable by some other
71 + * control-flow path.
72 + * Represents the block that would otherwise be reached if this return were
73 + * not present, along with the test conditions that are checked to decide if
74 + * this return should be taken. The fallthrough object is only non-null if
75 + * the fallthrough block is reachable by some other control-flow path.
76 + */
77 + fallthrough: {
78 + block: BlockId;
79 + tests: Array<NodePath<t.Expression>> | null;
80 + } | null;
81 +};
82 +
83 +/**
84 + * Models a `throw <expression>`. Because this is an exception case, the actual value
85 + * being thrown does not matter and isn't modeled.
86 + */
87 +export type ThrowTerminal = {
88 + kind: "throw";
89 +};
90 +
91 +/**
92 + * Models a if/else conditional branch, which can occur from explicit `if` statements or
93 + * from implicit conditionals such as whether to (re)enter or exit a loop.
94 + */
95 +export type IfTerminal = {
96 + kind: "if";
97 + /**
98 + * The condition being tested to determine whether to enter the consequent (if test is truthy)
99 + * or else the alternate
100 + */
101 + test: NodePath<t.Expression>;
102 + consequent: BlockId;
103 + alternate: BlockId;
104 +};
105 +
106 +/**
107 + * Models a switch statement, where a test value is checked against multiple cases. Default cases
108 + * and fallthrough is made explicit: there will always be exactly one case with a null `test`, which
109 + * represents the default case. Fallthrough is modeled explicitly via gotos in the case blocks.
110 + */
111 +export type SwitchTerminal = {
112 + kind: "switch";
113 + /**
114 + * The expression being evaluated against the possible cases
115 + */
116 + test: NodePath<t.Expression>;
117 + cases: Array<{
118 + /**
119 + * The expression to test to determine if this block should be entered
120 + * null indicates a `default` case, which (bc JS!) may not be the last case.
121 + */
122 + test: NodePath<t.Expression> | null;
123 + block: BlockId;
124 + }>;
125 +};
compiler/forget/src/ControlFlowGraph/buildCFG.ts new
+586
@@ -0,0 +1,586 @@
1 +import { NodePath } from "@babel/traverse";
2 +import * as t from "@babel/types";
3 +import { pathUnion } from "../Common/PathUnion";
4 +import { assertExhaustive } from "../Common/utils";
5 +import { invariant } from "../CompilerError";
6 +import * as IR from "../IR";
7 +import CFGBuilder from "./CFGBuilder";
8 +import {
9 + CFG,
10 + IfTerminal,
11 + ReturnTerminal,
12 + Terminal,
13 + ThrowTerminal,
14 +} from "./ControlFlowGraph";
15 +
16 +/**
17 + * Lower a function declaration into a control flow graph that models aspects of
18 + * control flow that are necessary for memoization. Notably, only control flow
19 + * that occurs at statement granularity is modeled (eg `if`, `for`, `return`
20 + * statements), not control flow at the expression level (ternaries or boolean
21 + * short-circuiting). Throw semantics are also not modeled: in general exceptions
22 + * are treated as exceptional conditions that invalidate memoization.
23 + *
24 + * TODO: consider modeling control-flow at expression level for even more fine-
25 + * grained reactivity.
26 + */
27 +export function buildCFG(func: IR.Func): CFG {
28 + const builder = new CFGBuilder();
29 + for (const topLevel of func.body) {
30 + buildStatement(builder, topLevel.ast, topLevel);
31 + }
32 + return builder.build();
33 +}
34 +
35 +/**
36 + * Helper to lower a statement
37 + */
38 +function buildStatement(
39 + builder: CFGBuilder,
40 + stmtPath: NodePath<t.Statement>,
41 + parent: IR.FuncTopLevel,
42 + label: string | null = null
43 +) {
44 + builder.associateParentBlock(parent);
45 + const stmt = pathUnion(stmtPath);
46 + switch (stmt.type) {
47 + case "ThrowStatement": {
48 + /**
49 + * TODO: consider what to do if there is a try/catch
50 + * one idea is to emit an instruction in the catch block to tell React
51 + * that the memo cache is invalid (not sure that it is though)
52 + */
53 + const terminal: ThrowTerminal = { kind: "throw" };
54 + builder.terminate(terminal);
55 + return;
56 + }
57 + case "ReturnStatement": {
58 + const argument = stmt.get("argument");
59 + const fallthrough = builder.reserve();
60 + const terminal: ReturnTerminal = {
61 + kind: "return",
62 + value: hasNode(argument) ? argument : null,
63 + fallthrough: {
64 + block: fallthrough.id,
65 + tests: builder.controlExpressions(),
66 + },
67 + };
68 + builder.terminateWithContinuation(terminal, fallthrough);
69 + return;
70 + }
71 + case "IfStatement": {
72 + // Block for code following the if
73 + const continuationBlock = builder.reserve();
74 + builder.condition(stmt.get("test"), () => {
75 + // Block for the consequent (if the test is truthy)
76 + const consequentBlock = builder.enter((blockId) => {
77 + // TODO: add associateParentBlock() to all enter calls
78 + // or maybe make it a required arg (?)
79 + buildStatement(builder, stmt.get("consequent"), parent);
80 + return {
81 + kind: "goto",
82 + block: continuationBlock.id,
83 + fallthrough: null,
84 + tests: null,
85 + };
86 + });
87 + // Block for the alternate (if the test is not truthy)
88 + let alternateBlock = null;
89 + const alternate = stmt.get("alternate");
90 + if (hasNode(alternate)) {
91 + alternateBlock = builder.enter((blockId) => {
92 + buildStatement(builder, alternate, parent);
93 + return {
94 + kind: "goto",
95 + block: continuationBlock.id,
96 + fallthrough: null,
97 + tests: null,
98 + };
99 + });
100 + } else {
101 + // If there is no else clause, use the continuation directly
102 + alternateBlock = continuationBlock.id;
103 + }
104 + const terminal: IfTerminal = {
105 + kind: "if",
106 + test: stmt.get("test"),
107 + consequent: consequentBlock,
108 + alternate: alternateBlock,
109 + };
110 + builder.terminateWithContinuation(terminal, continuationBlock);
111 + });
112 + return;
113 + }
114 + case "BlockStatement": {
115 + stmt.get("body").forEach((s) => buildStatement(builder, s, parent));
116 + return;
117 + }
118 + case "BreakStatement": {
119 + const block = builder.lookupBreak(stmt.node.label?.name ?? null);
120 + const continuationBlock = builder.reserve();
121 + builder.terminateWithContinuation(
122 + {
123 + kind: "goto",
124 + block,
125 + // An unlabeled break within a switch statement only bypasses the fallthrough
126 + // branch, which is already reachable otherwise. This type of break doesn't
127 + // bypass normal control flow and doesn't need to record a fallthrough.
128 + fallthrough: {
129 + block: continuationBlock.id,
130 + tests: builder.controlExpressions(),
131 + },
132 + },
133 + continuationBlock
134 + );
135 + return;
136 + }
137 + case "ContinueStatement": {
138 + const block = builder.lookupContinue(stmt.node.label?.name ?? null);
139 + const continuationBlock = builder.reserve();
140 + builder.terminateWithContinuation(
141 + {
142 + kind: "goto",
143 + block,
144 + fallthrough: {
145 + block: continuationBlock.id,
146 + tests: builder.controlExpressions(),
147 + },
148 + },
149 + continuationBlock
150 + );
151 + return;
152 + }
153 + case "ForInStatement": {
154 + // Block used to evaluate whether to (re)enter or exit the loop
155 + const conditionalBlock = builder.reserve();
156 + // Block for code following the loop
157 + const continuationBlock = builder.reserve();
158 + const loopBlock = builder.enter((blockId) => {
159 + return builder.loop(
160 + label,
161 + conditionalBlock.id,
162 + continuationBlock.id,
163 + () => {
164 + buildStatement(builder, stmt.get("body"), parent);
165 + return {
166 + kind: "goto",
167 + block: conditionalBlock.id,
168 + fallthrough: null,
169 + tests: null,
170 + };
171 + }
172 + );
173 + });
174 + // End the block leading up to the loop and jump to the conditional block
175 + builder.terminateWithContinuation(
176 + {
177 + kind: "goto",
178 + block: conditionalBlock.id,
179 + fallthrough: null,
180 + },
181 + conditionalBlock
182 + );
183 + /**
184 + * Terminate the conditional block using the <right> value as the test condition:
185 + * this conceptually represents that the value of <right> influences which branch
186 + * is taken (if it has properties enter the loop, if no properties exit to the continuation)
187 + */
188 + const terminal: IfTerminal = {
189 + kind: "if",
190 + test: stmt.get("right"),
191 + consequent: loopBlock,
192 + alternate: continuationBlock.id,
193 + };
194 + builder.terminateWithContinuation(terminal, continuationBlock);
195 + return;
196 + }
197 + case "ForOfStatement": {
198 + // Block used to evaluate whether to (re)enter or exit the loop
199 + const conditionalBlock = builder.reserve();
200 + // Block for code following the loop
201 + const continuationBlock = builder.reserve();
202 + /**
203 + * Build the loop body, each iteration loops back to the conditional block
204 + * to check whether to continue or exit
205 + */
206 + const loopBlock = builder.enter((blockId) => {
207 + return builder.loop(
208 + label,
209 + conditionalBlock.id,
210 + continuationBlock.id,
211 + () => {
212 + buildStatement(builder, stmt.get("body"), parent);
213 + return {
214 + kind: "goto",
215 + block: conditionalBlock.id,
216 + fallthrough: null,
217 + tests: null,
218 + };
219 + }
220 + );
221 + });
222 + // End the block leading up to the loop and jump to the conditional block
223 + builder.terminateWithContinuation(
224 + {
225 + kind: "goto",
226 + block: conditionalBlock.id,
227 + fallthrough: null,
228 + },
229 + conditionalBlock
230 + );
231 + /**
232 + * Terminate the conditional block using the <right> value as the test condition:
233 + * this conceptually represents that the value of <right> influences which branch
234 + * is taken (even though it isn't actually a boolean check in practice)
235 + */
236 + const terminal: IfTerminal = {
237 + kind: "if",
238 + test: stmt.get("right"),
239 + consequent: loopBlock,
240 + alternate: continuationBlock.id,
241 + };
242 + builder.terminateWithContinuation(terminal, continuationBlock);
243 + return;
244 + }
245 + case "ForStatement": {
246 + /**
247 + * The initializer is evaluated once prior to entering the loop.
248 + * here we are not concerned about scoping, so we can push the
249 + * initializer to the end of of the block leading up to the loop
250 + */
251 + const init = stmt.get("init");
252 + if (hasNode(init)) {
253 + builder.push(init);
254 + }
255 + // Block used to evaluate whether to (re)enter or exit the loop
256 + const conditionalBlock = builder.reserve();
257 + // Block for code following the loop
258 + const continuationBlock = builder.reserve();
259 + /**
260 + * Block for the updater, which runs after each iteration (including upon `continue`)
261 + * Generally this would increment or decrement the loop index variable
262 + */
263 + const updateBlock = builder.reserve();
264 + const update = stmt.get("update");
265 + if (hasNode(update)) {
266 + updateBlock.body.push(
267 + stmt.get("update") as any as NodePath<t.Statement>
268 + );
269 + }
270 + builder.complete(updateBlock, {
271 + kind: "goto",
272 + block: conditionalBlock.id,
273 + fallthrough: null,
274 + });
275 + /**
276 + * Construct the loop itself: the loop body wraps around to the update block
277 + * and the update block is also set as the `continue` target
278 + */
279 + const loopBlock = builder.enter((blockId) => {
280 + return builder.loop(label, updateBlock.id, continuationBlock.id, () => {
281 + buildStatement(builder, stmt.get("body"), parent);
282 + return {
283 + kind: "goto",
284 + block: updateBlock.id,
285 + fallthrough: null,
286 + };
287 + });
288 + });
289 + // End the block leading up to the loop, jumping to the conditional block
290 + builder.terminateWithContinuation(
291 + {
292 + kind: "goto",
293 + block: conditionalBlock.id,
294 + fallthrough: null,
295 + },
296 + conditionalBlock
297 + );
298 +
299 + let terminal: Terminal;
300 + const test = stmt.get("test");
301 + if (hasNode(test)) {
302 + /**
303 + * Terminate the conditional block with the test conditional of the for statement:
304 + * if the condition is true enter the loop block, else exit to the continuation
305 + */
306 + terminal = {
307 + kind: "if",
308 + test,
309 + consequent: loopBlock,
310 + alternate: continuationBlock.id,
311 + };
312 + } else {
313 + /**
314 + * If there is no test, then the "conditional" block unconditionally re-enters the loop.
315 + * this will create an indirection, but `shrink()` will eliminate this in post-processing.
316 + */
317 + terminal = {
318 + kind: "goto",
319 + block: loopBlock,
320 + fallthrough: null,
321 + };
322 + }
323 + builder.terminateWithContinuation(terminal, continuationBlock);
324 + return;
325 + }
326 + case "DoWhileStatement": {
327 + // Block for code following the loop
328 + const continuationBlock = builder.reserve();
329 + // Loop body
330 + const loopBlock = builder.enter((loopBlock) => {
331 + return builder.loop(label, loopBlock, continuationBlock.id, () => {
332 + buildStatement(builder, stmt.get("body"), parent);
333 + /**
334 + * the loop terminates with the while condition, either looping
335 + * around (consequent) or exiting to the continuation (alternate)
336 + */
337 + const terminal: IfTerminal = {
338 + kind: "if",
339 + test: stmt.get("test"),
340 + consequent: loopBlock,
341 + alternate: continuationBlock.id,
342 + };
343 + return terminal;
344 + });
345 + });
346 + // do-while unconditionally enters the loop
347 + builder.terminateWithContinuation(
348 + { kind: "goto", block: loopBlock, fallthrough: null },
349 + continuationBlock
350 + );
351 + return;
352 + }
353 + case "WhileStatement": {
354 + // Block used to evaluate whether to (re)enter or exit the loop
355 + const conditionalBlock = builder.reserve();
356 + // Block for code following the loop
357 + const continuationBlock = builder.reserve();
358 + // Loop body
359 + const loopBlock = builder.enter((blockId) => {
360 + return builder.loop(
361 + label,
362 + conditionalBlock.id,
363 + continuationBlock.id,
364 + () => {
365 + buildStatement(builder, stmt.get("body"), parent);
366 + return {
367 + kind: "goto",
368 + block: conditionalBlock.id,
369 + fallthrough: null,
370 + tests: null,
371 + };
372 + }
373 + );
374 + });
375 + /**
376 + * The code leading up to the loop must jump to the conditional block,
377 + * to evaluate whether to enter the loop or bypass to the continuation.
378 + */
379 + builder.terminateWithContinuation(
380 + {
381 + kind: "goto",
382 + block: conditionalBlock.id,
383 + fallthrough: null,
384 + },
385 + conditionalBlock
386 + );
387 + /**
388 + * The conditional block is empty and exists solely as conditional for
389 + * (re)entering or exiting the loop
390 + */
391 + const terminal: IfTerminal = {
392 + kind: "if",
393 + test: stmt.get("test"),
394 + consequent: loopBlock,
395 + alternate: continuationBlock.id,
396 + };
397 + // Complete the conditional and continue with code after the loop
398 + builder.terminateWithContinuation(terminal, continuationBlock);
399 + return;
400 + }
401 + case "LabeledStatement": {
402 + const label = stmt.node.label.name;
403 + const body = stmt.get("body");
404 + switch (body.node.type) {
405 + case "ForInStatement":
406 + case "ForOfStatement":
407 + case "ForStatement":
408 + case "WhileStatement":
409 + case "DoWhileStatement": {
410 + // Labeled loops can not only break out of the loop to the subsequent code,
411 + // but may also continue to a subsequent iteration of the loop. This means
412 + // the label must be associated specifically with the loop statement (and
413 + // the block generated to test for (re)entry to the block), so special-case
414 + // by passing the label down.
415 + buildStatement(builder, stmt.get("body"), parent, label);
416 + break;
417 + }
418 + default: {
419 + // All other statements create a continuation block to allow `break` to jump
420 + // to the continuation.
421 + const continuationBlock = builder.reserve();
422 + builder.label(label, continuationBlock.id, () => {
423 + buildStatement(builder, stmt.get("body"), parent);
424 + });
425 + // TODO: if there is no break, this can cause code to be split across
426 + // two blocks unnecessarily (ie where the continuation has only one
427 + // incoming edge). shrink() could detect this case and merge the blocks.
428 + builder.terminateWithContinuation(
429 + {
430 + kind: "goto",
431 + block: continuationBlock.id,
432 + fallthrough: null,
433 + },
434 + continuationBlock
435 + );
436 + }
437 + }
438 + return;
439 + }
440 + case "SwitchStatement": {
441 + // Block following the switch
442 + const continuationBlock = builder.reserve();
443 + /**
444 + * The goto target for any cases that fallthrough, which initially starts
445 + * as the continuation block and is then updated as we iterate through cases
446 + * in reverse order.
447 + */
448 + let fallthrough = continuationBlock.id;
449 + /**
450 + * Iterate through cases in reverse order, so that previous blocks can fallthrough
451 + * to successors
452 + */
453 + const cases = [];
454 + let hasDefault = false;
455 + for (let ii = stmt.get("cases").length - 1; ii >= 0; ii--) {
456 + const case_: NodePath<t.SwitchCase> = stmt.get("cases")[ii];
457 + const test = case_.get("test");
458 + if (!hasNode(test)) {
459 + invariant(
460 + !hasDefault,
461 + "Expected at most one `default` branch, this code should have failed to parse"
462 + );
463 + hasDefault = true;
464 + }
465 + const block = builder.enter((_blockId) => {
466 + /**
467 + * Use loop() to save the break target, passing null for the continue target
468 + * since switch doesn't support continue
469 + */
470 + return builder.switch(
471 + stmt.get("discriminant"),
472 + continuationBlock.id,
473 + () => {
474 + case_
475 + .get("consequent")
476 + .forEach((consequent) =>
477 + buildStatement(builder, consequent, parent)
478 + );
479 + /**
480 + * always generate a fallthrough, this may be dead code if there was
481 + * an explicit break
482 + */
483 + return {
484 + kind: "goto",
485 + block: fallthrough,
486 + fallthrough: null,
487 + tests: null,
488 + };
489 + }
490 + );
491 + });
492 + cases.push({ test: hasNode(test) ? test : null, block });
493 + fallthrough = block;
494 + }
495 + /**
496 + * it doesn't matter for our analysis purposes, but reverse the order of the cases
497 + * back to the original to make it match the original code/intent.
498 + */
499 + cases.reverse();
500 + /**
501 + * If there wasn't an explicit default case, generate one to model the fact that execution
502 + * could bypass any of the other cases and jump directly to the continuation.
503 + */
504 + if (!hasDefault) {
505 + cases.push({ test: null, block: continuationBlock.id });
506 + }
507 +
508 + builder.terminateWithContinuation(
509 + { kind: "switch", test: stmt.get("discriminant"), cases },
510 + continuationBlock
511 + );
512 + return;
513 + }
514 + case "TryStatement": {
515 + /**
516 + * NOTE: Accurately modeling control flow within a try statement would require treating
517 + * effectively every expression as a possible branch point (since almost any expression can throw).
518 + * Instead, we model the try statement as an atomic unit from a control-flow perspective,
519 + * and rely on other passes to handle codegen for try statements
520 + */
521 + buildStatement(builder, stmt.get("block"), parent);
522 + const handler = stmt.get("handler");
523 + if (hasNode(handler)) {
524 + // TODO: consider whether we need to track the param
525 + buildStatement(builder, handler.get("body"), parent);
526 + }
527 + const finalizer = stmt.get("finalizer");
528 + if (hasNode(finalizer)) {
529 + buildStatement(builder, finalizer, parent);
530 + }
531 + return;
532 + }
533 + case "ClassDeclaration":
534 + case "DebuggerStatement":
535 + case "DeclareClass":
536 + case "DeclareExportAllDeclaration":
537 + case "DeclareExportDeclaration":
538 + case "DeclareFunction":
539 + case "DeclareInterface":
540 + case "DeclareModule":
541 + case "DeclareModuleExports":
542 + case "DeclareOpaqueType":
543 + case "DeclareTypeAlias":
544 + case "DeclareVariable":
545 + case "EmptyStatement":
546 + case "EnumDeclaration":
547 + case "ExportAllDeclaration":
548 + case "ExportDefaultDeclaration":
549 + case "ExportNamedDeclaration":
550 + case "ExpressionStatement":
551 + case "FunctionDeclaration":
552 + case "ImportDeclaration":
553 + case "InterfaceDeclaration":
554 + case "OpaqueType":
555 + case "TypeAlias":
556 + case "TSDeclareFunction":
557 + case "TSEnumDeclaration":
558 + case "TSExportAssignment":
559 + case "TSImportEqualsDeclaration":
560 + case "TSInterfaceDeclaration":
561 + case "TSModuleDeclaration":
562 + case "TSNamespaceExportDeclaration":
563 + case "TSTypeAliasDeclaration":
564 + case "VariableDeclaration":
565 + case "WithStatement": {
566 + builder.push(stmtPath);
567 + return;
568 + }
569 + default: {
570 + return assertExhaustive(
571 + stmt,
572 + `Unsupported statement kind '${
573 + (stmt as any as NodePath<t.Statement>).type
574 + }'`
575 + );
576 + }
577 + }
578 +}
579 +
580 +/**
581 + * Equivalent to `NodePath.hasNode()` which is missing from older versions of
582 + * @babel.
583 + */
584 +function hasNode<T>(path: NodePath<T | null | undefined>): path is NodePath<T> {
585 + return path.node != null;
586 +}
compiler/forget/src/ControlFlowGraph/index.ts new
+3
@@ -0,0 +1,3 @@
1 +export * from "./buildCFG";
2 +export * from "./CFGBuilder";
3 +export * from "./ControlFlowGraph";
compiler/forget/src/DepGraph/SCCGraph.ts new
+180
@@ -0,0 +1,180 @@
1 +/**
2 + * Copyright (c) Facebook, Inc. and its affiliates.
3 + *
4 + * This source code is licensed under the MIT license found in the
5 + * LICENSE file in the root directory of this source tree.
6 + */
7 +
8 +import { setFirst } from "../Common/utils";
9 +import { invariant } from "../CompilerError";
10 +import * as IR from "../IR";
11 +import { SCCGraphSnapshot, SCCVertexSnapshot } from "./SCCGraphSnapshot";
12 +import type { ValVertex } from "./ValGraph";
13 +
14 +/**
15 + * SCC Dependency Graph
16 + *
17 + * SCCGraph is used to express the dependence relation between SCC, or Strongly
18 + * Connect Componnets in {@link ValGraph}. In other words, SCCGraph is the
19 + * "condensation" of {@link ValGraph}. It's constructed by contracting SCCs of
20 + * {@link ValVertex} into {@link SCCVertex}s. The resulting graph is guranteed
21 + * to be a DAG, or Directed Acyclic Graph, which has the property to be
22 + * topologically sorted, or scheduled, that we leveraged to perform a change
23 + * propagation process that we called "Dependency Reduction".
24 + *
25 + * Although customized, it is insipred by TDG (Task Dependency Graph) that are
26 + * often used in build systems (e.g. Build Systems à la Carte).
27 + */
28 +export class SCCGraph {
29 + /**
30 + * SCCGraph is represented as an (modified) adjacency list:
31 + * It's a collection of {@link SCCVertex}, and every vertex stores a set of
32 + * outgoing edges (as well as incoming edges in our version).
33 + */
34 + vertices: Set<SCCVertex>;
35 +
36 + /**
37 + * SCCGraph are constructed as a whole.
38 + */
39 + constructor(vertices: Set<SCCVertex>) {
40 + this.vertices = vertices;
41 + }
42 +
43 + /**
44 + * Add a (@param from) --depends on--> (@param to) edge (depdenents) while
45 + * setting up the "backward pointer" (dependencies).
46 + */
47 + addEdge(from: SCCVertex, to: SCCVertex) {
48 + from.outgoings.add(to);
49 + to.incomings.add(from);
50 + }
51 +
52 + /**
53 + * Remove a (@param from) --depends on--> (@param to) edge (depdenents) while
54 + * clearing up the "backward pointer" (dependencies).
55 + */
56 + removeEdge(from: SCCVertex, to: SCCVertex) {
57 + from.outgoings.delete(to);
58 + to.incomings.delete(from);
59 + }
60 +
61 + /**
62 + * A topological-ordered reducer (or scheduler, in the build system term) over
63 + * the {@link SCCGraph} using Kahn's algorithm.
64 + * @see https://en.wikipedia.org/wiki/Topological_sorting#Kahn's_algorithm
65 + *
66 + * A fully reduced SCCGraph is consisted of only vertices that have no edges,
67 + * i.e. all {@link SCCVertex.incomings} and {@link SCCVertex.outgoings} have
68 + * been contracted to {@link SCCVertex.inputs} payload.
69 + */
70 + reduce() {
71 + // A queue of all vertices with no incoming edges (0-degree).
72 + const queue = Array.from(this.vertices.values()).filter(
73 + (vertex) => vertex.incomings.size === 0
74 + );
75 +
76 + while (queue.length !== 0) {
77 + const cur = queue.shift();
78 + invariant(cur, "Unexpected Null.");
79 +
80 + // for all its outgoing edges (dependent)
81 + cur.outgoings.forEach((out: SCCVertex) => {
82 + invariant(
83 + out.incomings.has(cur),
84 + "Dependencies and dependents are not paired."
85 + );
86 +
87 + // Propagate inputs to out.
88 + // Except out is itself an Input then the propagration should stop.
89 + if (!out.isInput()) {
90 + cur.inputs.forEach((input) => {
91 + // N.B. out's inputs is a union of all its incomings' inputs.
92 + out.inputs.add(input);
93 + });
94 + }
95 +
96 + // Current dependency reduced. Remove the edge.
97 + this.removeEdge(cur, out);
98 +
99 + // If all incoming edges have been reduced. Add to working queue.
100 + if (out.incomings.size === 0) {
101 + queue.push(out);
102 + }
103 + });
104 + }
105 +
106 + invariant(
107 + this.irreducibleVertices.length === 0,
108 + "DAG should always be fully reduced."
109 + );
110 + }
111 +
112 + /**
113 + * A collcetion of irreducible vertices (due to cycle).
114 + */
115 + get irreducibleVertices(): SCCVertex[] {
116 + return Array.from(this.vertices.values()).filter(
117 + (vertex) => vertex.incomings.size !== 0
118 + );
119 + }
120 +
121 + snapshot() {
122 + return new SCCGraphSnapshot(this);
123 + }
124 +}
125 +
126 +/**
127 + * Strongly Connected Components of {@link ValGraph}.
128 + * Vertices of {@link SCCGraph}.
129 + */
130 +export class SCCVertex {
131 + /**
132 + * Members.
133 + */
134 + members: Set<ValVertex>;
135 +
136 + /**
137 + * Members of a group share the same set of inputs (physically in memory).
138 + */
139 + inputs: Set<IR.ReactiveVal>;
140 +
141 + /**
142 + * Vertices that depend on this vertex (Dependents).
143 + * Outgoing edges ("pointing to") of this vertex.
144 + */
145 + outgoings: Set<SCCVertex>;
146 +
147 + /**
148 + * Vertices that this vertex depends on (Dependencies).
149 + * Incoming edges ("pointing from") of this vertex.
150 + */
151 + incomings: Set<SCCVertex>;
152 +
153 + constructor() {
154 + this.members = new Set();
155 + this.inputs = new Set();
156 + this.outgoings = new Set();
157 + this.incomings = new Set();
158 + }
159 +
160 + /**
161 + * Add @param v to the SCC.
162 + *
163 + * Note that this change the {@link ValVertex}'s input pointing to the inputs
164 + * of SCC so that we can still query {@link ValGraph} for inputs.
165 + */
166 + add(v: ValVertex) {
167 + this.members.add(v);
168 +
169 + v.inputs.forEach((input) => this.inputs.add(input));
170 + v.scc = this;
171 + }
172 +
173 + isInput() {
174 + return this.members.size === 1 && IR.isInputVal(setFirst(this.members).val);
175 + }
176 +
177 + snapshot() {
178 + return new SCCVertexSnapshot(this);
179 + }
180 +}
compiler/forget/src/DepGraph/SCCGraphSnapshot.ts new
+88
@@ -0,0 +1,88 @@
1 +/**
2 + * Copyright (c) Facebook, Inc. and its affiliates.
3 + *
4 + * This source code is licensed under the MIT license found in the
5 + * LICENSE file in the root directory of this source tree.
6 + */
7 +
8 +import * as IR from "../IR";
9 +import type { SCCGraph, SCCVertex } from "./SCCGraph";
10 +import type { MapValue, ValVertexSnapshot } from "./ValGraphSnapshot";
11 +import { reactiveInputTag, stableInputTag } from "./ValGraphSnapshot";
12 +
13 +export class SCCGraphSnapshot {
14 + vertices: SCCVertexSnapshot[];
15 +
16 + constructor(sccGraph: SCCGraph) {
17 + this.vertices = [...sccGraph.vertices.values()].map((v) => v.snapshot());
18 + }
19 +
20 + toMap() {
21 + const lnum = (k: string) => parseInt(k.split(/\[(\d+):/)[1]);
22 +
23 + return new Map(
24 + this.vertices
25 + .map((c) => c.toMapEntry())
26 + .sort(([a], [b]) => lnum(a) - lnum(b))
27 + );
28 + }
29 +}
30 +
31 +export class SCCVertexSnapshot {
32 + members: ValVertexSnapshot[];
33 +
34 + inputs: IR.ValSnapshot[];
35 +
36 + outgoings: ValVertexSnapshot[][];
37 +
38 + incomings: ValVertexSnapshot[][];
39 +
40 + constructor(sccVertex: SCCVertex) {
41 + this.members = [...sccVertex.members].map((v) => v.snapshot());
42 + this.inputs = [...sccVertex.inputs].map((v) => v.snapshot());
43 + this.outgoings = [...sccVertex.outgoings].map((v) =>
44 + [...v.members].map((m) => m.snapshot())
45 + );
46 + this.incomings = [...sccVertex.incomings].map((v) =>
47 + [...v.members].map((m) => m.snapshot())
48 + );
49 + }
50 +
51 + toString() {
52 + const vs = this.members.map((v) => v.val.toString()).join(",");
53 + return `[${vs}]`;
54 + }
55 +
56 + isInput() {
57 + return this.members.length === 1 && this.members[0].val.isInput;
58 + }
59 +
60 + isReactive() {
61 + return this.members.length === 1 && this.members[0].val.isReactive;
62 + }
63 +
64 + toMapEntry(): [string, MapValue] {
65 + const data: MapValue = {};
66 + const key = this.toString();
67 + const inputs = this.inputs.map((val) => val.toString());
68 + const dependencies = this.incomings.map((d) => stringifyVertices(d));
69 + const dependents = this.outgoings.map((d) => stringifyVertices(d));
70 +
71 + if (dependencies.length > 0) data.dependencies = dependencies;
72 + if (dependents.length > 0) data.dependents = dependents;
73 + if (this.isInput()) {
74 + // Set a prototype as a tag in pretty-format.
75 + const tag = this.isReactive() ? reactiveInputTag : stableInputTag;
76 + Object.setPrototypeOf(data, tag);
77 + } else {
78 + data.inputs = inputs;
79 + }
80 +
81 + return [key, data];
82 + }
83 +}
84 +
85 +function stringifyVertices(members: ValVertexSnapshot[]) {
86 + const vs = members.map((v) => v.val.toString()).join(",");
87 + return `[${vs}]`;
88 +}
compiler/forget/src/DepGraph/ValGraph.ts new
+275
@@ -0,0 +1,275 @@
1 +/**
2 + * Copyright (c) Facebook, Inc. and its affiliates.
3 + *
4 + * This source code is licensed under the MIT license found in the
5 + * LICENSE file in the root directory of this source tree.
6 + */
7 +
8 +import { invariant } from "../CompilerError";
9 +import * as IR from "../IR";
10 +import { SCCGraph, SCCVertex } from "./SCCGraph";
11 +import { ValGraphSnapshot, ValVertexSnapshot } from "./ValGraphSnapshot";
12 +
13 +/**
14 + * Val Dependency Graph
15 + *
16 + * ValGraph is used to express the dependence relation between {@link IR.Val},
17 + * materialzed as {@link ValVertex}. Although it's specialized for our purpose,
18 + * It is inspired by traditional graph IRs e.g. the DDG (Data Dependence Graph)
19 + * and PDG (Program Dependence Graph) that are often found in the compilers
20 + * community e.g. LLVM, HotSpot JVM.
21 + *
22 + * N.B.
23 + * 1. ValGraph can be cyclic. Cicular dependencies (established by either
24 + * direct reference or infered mutation) are intended to be handled as a group
25 + * like mutatually recursive function during the condensation to form a
26 + * {@link SCCGraph} which is a DAG.
27 + * 2. ValGraph is intended to capture the dependence relation between program
28 + * components (i.e. materalized as {@link IR.Val} at the granularity that we
29 + * are concerned about. See {@link DepGraphAnalysis} for the details.
30 + * 3. Due to the nature of undecidability and the limitations from being
31 + * flow-insensitive, mutation (e.g. re-assignment) are handled by assuming
32 + * the worst case where every mutable {@link Ref} may be mutated by,
33 + * therefore depends on, any other {@link Val} that is syntactically possible
34 + * to flow into it. Therefore, the dependency relation captured by this graph
35 + * is intentionally conservative and contains false positives.
36 + */
37 +
38 +export class ValGraph {
39 + /**
40 + * ValGraph is represented as an (modified) adjacency list:
41 + * It's a collection of {@link ValVertex}, and every vertex stores a set of
42 + * outgoing edges (as well as incoming edges in our version).
43 + *
44 + * The collection is a mapping from {@link IR.Val}s to their corresponding
45 + * vertices to ease the lookups needed during construction.
46 + */
47 + vertices: Map<IR.Val, ValVertex> = new Map();
48 +
49 + constructor(funcEnv: IR.FuncEnv) {
50 + // Prepopulate vertices for declarations
51 + for (const [_, b] of funcEnv.decls.entries()) {
52 + this.getOrCreateVertex(b);
53 + }
54 +
55 + // ...and may be free vars.
56 + if (funcEnv.includeFreeVars) {
57 + for (const [_, b] of funcEnv.freeVars.entries()) {
58 + this.getOrCreateVertex(b);
59 + }
60 + }
61 + }
62 +
63 + /**
64 + * Add a (@param from) --is dependency for--> (@param to) edge (dependents) while
65 + * setting up the "backward pointer" (dependencies).
66 + */
67 + addEdge(from: ValVertex, to: ValVertex) {
68 + from.outgoings.add(to);
69 + to.incomings.add(from);
70 + }
71 +
72 + /**
73 + * Remove a (@param from) --is dependency for--> (@param to) edge (dependents) while
74 + * clearing up the "backward pointer" (dependencies).
75 + */
76 + removeEdge(from: ValVertex, to: ValVertex) {
77 + from.outgoings.delete(to);
78 + to.incomings.delete(from);
79 + }
80 +
81 + /**
82 + * @returns the vertex associated with the @param val if it exists, and if it
83 + * does not, create an new vertex and @returns it instead.
84 + *
85 + * This is used to handle the possible presence of "forward references" where
86 + * we may discover {@link dependencies} before we actually visited them and
87 + * created vertices for them.
88 + */
89 + getOrCreateVertex(val: IR.Val): ValVertex {
90 + let vertex = this.vertices.get(val);
91 + if (!vertex) {
92 + vertex = new ValVertex(this, val);
93 + }
94 + return vertex;
95 + }
96 +
97 + /**
98 + * Tarjan's strongly connected components algorithm.
99 + * @see https://en.wikipedia.org/wiki/Tarjan%27s_strongly_connected_components_algorithm
100 + */
101 + tarjan(): Set<SCCVertex> {
102 + const outputs = new Set<SCCVertex>();
103 + const stack: ValVertex[] = [];
104 +
105 + let index = 0;
106 + for (const v of this.vertices.values()) {
107 + if (v.index === -1) strongConnect(v);
108 + }
109 +
110 + function strongConnect(v: ValVertex) {
111 + v.index = index;
112 + v.lowlink = index;
113 + index++;
114 + stack.push(v);
115 + v.onStack = true;
116 +
117 + // Successors of v
118 + for (const w of v.outgoings) {
119 + if (w.index === -1) {
120 + // Successor w has not yet been visited; recurse on it.
121 + strongConnect(w);
122 + // since w is reachable by v, pick the lowest link.
123 + v.lowlink = Math.min(v.lowlink, w.lowlink);
124 + } else if (w.onStack) {
125 + // Successor w is in stack S and hence in the current SCC.
126 + // see if w has a lower index to becomes v's lowlink.
127 + v.lowlink = Math.min(v.lowlink, w.index);
128 + // If w is not on stack, then (v, w) is an edge pointing to an SCC
129 + // already found (since w has been visited) and must be ignored.
130 + }
131 + }
132 +
133 + // If v is a root node, pop the stack and generate an SCC
134 + if (v.lowlink === v.index) {
135 + const scc = new SCCVertex();
136 + let w;
137 + while (w !== v) {
138 + w = stack.pop();
139 + invariant(w, "stack should not be empty");
140 + w.onStack = false;
141 + scc.add(w);
142 + }
143 + outputs.add(scc);
144 + }
145 + }
146 +
147 + return outputs;
148 + }
149 +
150 + /**
151 + * Graph condensation based on Tarjan.
152 + */
153 + condense(): SCCGraph {
154 + const dag = new SCCGraph(this.tarjan());
155 +
156 + // (v.SCC, w.SCC) is an edge in SCCGraph only if they are different and
157 + // (v, w) is an edge in ValGRaph.
158 + for (const scc of dag.vertices) {
159 + for (const v of scc.members) {
160 + for (const w of v.outgoings) {
161 + invariant(v.scc, "v belongs to a SCC.");
162 + invariant(w.scc, "w belongs to a SCC.");
163 + if (v.scc !== w.scc) {
164 + dag.addEdge(v.scc, w.scc);
165 + }
166 + }
167 + }
168 + }
169 +
170 + return dag;
171 + }
172 +
173 + snapshot() {
174 + return new ValGraphSnapshot(this);
175 + }
176 +}
177 +
178 +/**
179 + * Each vertex represents an unique {@link IR.Val}.
180 + * Vertices of {@link ValGraph}.
181 + */
182 +export class ValVertex {
183 + /**
184 + * The belonging graph.
185 + */
186 + graph: ValGraph;
187 +
188 + /**
189 + * The corresponding {@link IR.Val}
190 + */
191 + val: IR.Val;
192 +
193 + /**
194 + * The set of reactive values flowed into this vertex directly.
195 + */
196 + ownInputs: Set<IR.ReactiveVal>;
197 +
198 + /**
199 + * Vertices that depend on this vertex (Dependents).
200 + * Outgoing edges ("pointing to") of this vertex.
201 + */
202 + outgoings: Set<ValVertex>;
203 +
204 + /**
205 + * Vertices that this vertex depends on (Dependencies).
206 + * Incoming edges ("pointing from") of this vertex.
207 + */
208 + incomings: Set<ValVertex>;
209 +
210 + /**
211 + * Used by Tarjan algorithm.
212 + */
213 + index: number;
214 + lowlink: number;
215 + onStack: boolean;
216 +
217 + /**
218 + * Belonging {@link SCCVertex}
219 + */
220 + scc: SCCVertex | undefined;
221 +
222 + constructor(graph: ValGraph, val: IR.Val) {
223 + this.graph = graph;
224 + this.val = val;
225 + this.ownInputs = new Set();
226 + this.incomings = new Set();
227 + this.outgoings = new Set();
228 + this.index = -1;
229 + this.lowlink = -1;
230 + this.onStack = false;
231 + this.scc = undefined;
232 +
233 + this.graph.vertices.set(val, this);
234 + }
235 +
236 + /**
237 + * This getter @return the latest set of reactive values considered inputs.
238 + * - In returns {@link this.ownInputs} initially until it's grouped into SCC.
239 + */
240 + get inputs(): Set<IR.ReactiveVal> {
241 + if (this.scc) {
242 + return this.scc.inputs;
243 + } else {
244 + return this.ownInputs;
245 + }
246 + }
247 +
248 + /**
249 + * Refine a vertex as "Reactive Input" (i.e. roots) of the graph, which
250 + * should only include the val itself in the inputs payload.
251 + */
252 + refineToReactiveInput(this: ValVertex) {
253 + invariant(IR.isReactiveVal(this.val), "This val must be a ReactiveVal.");
254 + invariant(
255 + this.inputs.size === 0 ||
256 + (this.inputs.size === 1 && this.inputs.has(this.val)),
257 + "Inputs was previously empty or only contain itself."
258 + );
259 + this.inputs.add(this.val);
260 + }
261 +
262 + /**
263 + * In initial construction, dependencies are discovered as (to, from) pair
264 + * due to the nature of AST visitation. This method provides a convenient
265 + * way to add them as (from, to) edges.
266 + */
267 + addDependency(val: IR.Val): void {
268 + const dependency = this.graph.getOrCreateVertex(val);
269 + this.graph.addEdge(dependency, this);
270 + }
271 +
272 + snapshot() {
273 + return new ValVertexSnapshot(this);
274 + }
275 +}
compiler/forget/src/DepGraph/ValGraphSnapshot.ts new
+71
@@ -0,0 +1,71 @@
1 +/**
2 + * Copyright (c) Facebook, Inc. and its affiliates.
3 + *
4 + * This source code is licensed under the MIT license found in the
5 + * LICENSE file in the root directory of this source tree.
6 + */
7 +
8 +import * as IR from "../IR";
9 +import type { ValGraph, ValVertex } from "./ValGraph";
10 +
11 +export class ValGraphSnapshot {
12 + vertices: ValVertexSnapshot[];
13 +
14 + constructor(valGraph: ValGraph) {
15 + this.vertices = [...valGraph.vertices.values()].map((v) => v.snapshot());
16 + }
17 +
18 + toMap() {
19 + return new Map(this.vertices.map((c) => c.toMapEntry()));
20 + }
21 +}
22 +
23 +export type MapValue = {
24 + inputs?: string[];
25 + dependencies?: string[];
26 + dependents?: string[];
27 +};
28 +
29 +export class ReactiveInput {}
30 +export const reactiveInputTag = new ReactiveInput();
31 +
32 +export class StableInput {}
33 +export const stableInputTag = new StableInput();
34 +
35 +export class ValVertexSnapshot {
36 + val: IR.ValSnapshot;
37 +
38 + inputs: IR.ValSnapshot[];
39 +
40 + outgoings: IR.ValSnapshot[];
41 +
42 + incomings: IR.ValSnapshot[];
43 +
44 + constructor(valVertex: ValVertex) {
45 + this.val = valVertex.val.snapshot();
46 + this.inputs = [...valVertex.inputs].map((v) => v.snapshot());
47 + this.outgoings = [...valVertex.outgoings].map((v) => v.val.snapshot());
48 + this.incomings = [...valVertex.incomings].map((v) => v.val.snapshot());
49 + }
50 +
51 + toMapEntry(): [string, MapValue] {
52 + const data: MapValue = {};
53 + const key = this.val.toString();
54 + const inputs = this.inputs.map((val) => val.toString());
55 + const dependencies = this.incomings.map((val) => val.toString());
56 + const dependents = this.outgoings.map((val) => val.toString());
57 +
58 + if (dependencies.length > 0) data.dependencies = dependencies;
59 + if (dependents.length > 0) data.dependents = dependents;
60 +
61 + if (this.val.isInput) {
62 + // Set a prototype as a tag in pretty-format.
63 + const tag = this.val.isReactive ? reactiveInputTag : stableInputTag;
64 + Object.setPrototypeOf(data, tag);
65 + } else {
66 + data.inputs = inputs;
67 + }
68 +
69 + return [key, data];
70 + }
71 +}
compiler/forget/src/DepGraph/index.ts new
+18
@@ -0,0 +1,18 @@
1 +/**
2 + * Copyright (c) Facebook, Inc. and its affiliates.
3 + *
4 + * This source code is licensed under the MIT license found in the
5 + * LICENSE file in the root directory of this source tree.
6 + */
7 +
8 +/**
9 + * Graph IRs in the compiler
10 + */
11 +
12 +export * from "./ValGraph";
13 +
14 +export * from "./ValGraphSnapshot";
15 +
16 +export * from "./SCCGraph";
17 +
18 +export * from "./SCCGraphSnapshot";
compiler/forget/src/Diagnostic.ts new
+326
@@ -0,0 +1,326 @@
1 +/**
2 + * Copyright (c) Facebook, Inc. and its affiliates.
3 + *
4 + * This source code is licensed under the MIT license found in the
5 + * LICENSE file in the root directory of this source tree.
6 + */
7 +
8 +import { NodePath } from "@babel/core";
9 +import * as t from "@babel/types";
10 +import { assertExhaustive } from "./Common/utils";
11 +import { Name } from "./IR/Func";
12 +
13 +export enum DiagnosticLevel {
14 + Error = "Error",
15 + Warning = "Warning",
16 +}
17 +type DiagnosticMessage = {
18 + level: DiagnosticLevel;
19 + body: string;
20 + suggestion: string | null;
21 +};
22 +export type Diagnostic = {
23 + code: ErrorCode;
24 + path: NodePath | null;
25 +} & DiagnosticMessage;
26 +
27 +class ForgetError extends Error {
28 + constructor(message: string) {
29 + super(message);
30 + this.name = DiagnosticLevel.Error;
31 + }
32 +}
33 +class ForgetWarning extends Error {
34 + constructor(message: string) {
35 + super(message);
36 + this.name = DiagnosticLevel.Warning;
37 + }
38 +}
39 +
40 +export function mapDiagnosticLevelToErrorCtor(level: DiagnosticLevel) {
41 + switch (level) {
42 + case DiagnosticLevel.Error:
43 + return ForgetError;
44 + case DiagnosticLevel.Warning:
45 + return ForgetWarning;
46 + default:
47 + assertExhaustive(level, `Unhandled diagnostic level: ${level}`);
48 + }
49 +}
50 +
51 +export function printPathCodeFrame(
52 + reason: string,
53 + level: DiagnosticLevel,
54 + path: NodePath
55 +) {
56 + return path
57 + .buildCodeFrameError(reason, mapDiagnosticLevelToErrorCtor(level))
58 + .toString();
59 +}
60 +
61 +export function printDiagnostic({
62 + code,
63 + body,
64 + level,
65 + path,
66 + suggestion,
67 +}: Diagnostic): string {
68 + let buffer = `${body} (${code})`;
69 + if (suggestion != null) {
70 + buffer = `${buffer}\n\n${suggestion}`;
71 + }
72 + if (path != null) {
73 + return printPathCodeFrame(buffer, level, path);
74 + } else {
75 + buffer = `${level}: ${buffer}`;
76 + }
77 + return buffer;
78 +}
79 +
80 +export function buildDiagnostic(opts: DiagnosticOpts): Diagnostic {
81 + const msg = getDiagnosticMessage(opts);
82 + const { code, path } = opts;
83 + return {
84 + code,
85 + path,
86 + ...msg,
87 + };
88 +}
89 +
90 +function getSource(node: NodePath | NodePath[] | null): string | null {
91 + if (node == null) {
92 + return null;
93 + }
94 + return Array.isArray(node)
95 + ? node.map((n) => n.getSource()).join(", ")
96 + : node.getSource();
97 +}
98 +
99 +/**
100 + * Utility type to enforce ErrorCode format. This should only be used in the
101 + * `ErrorCode` type to validate the format, elsewhere we should just pass
102 + * regular strings.
103 + */
104 +type ParseCode<T> = T extends `E${number}` ? T : never;
105 +export const NoErrorCode = "None";
106 +// prettier-ignore
107 +export type ErrorCode =
108 + | typeof NoErrorCode
109 + | ParseCode<"E0001">
110 + | ParseCode<"E0002">
111 + | ParseCode<"E0003">
112 + | ParseCode<"E0004">
113 + | ParseCode<"E0005">
114 + | ParseCode<"E0006">
115 + | ParseCode<"E0007">
116 + | ParseCode<"E0008">
117 + | ParseCode<"E0009">
118 + | ParseCode<"E0010">
119 + | ParseCode<"E0011">
120 + | ParseCode<"E0012">
121 + | ParseCode<"E0013">
122 + | ParseCode<"E0014">
123 + | ParseCode<"E0015">
124 + | ParseCode<"E0016">
125 + | ParseCode<"E0017">
126 + | ParseCode<"E0018">
127 + | ParseCode<"E0019">
128 + | ParseCode<"E0020">
129 + ;
130 +
131 +// prettier-ignore
132 +export type DiagnosticOpts =
133 + | { code: "E0001"; path: NodePath; context: null }
134 + | { code: "E0002"; path: NodePath; context: null }
135 + | { code: "E0003"; path: NodePath<t.Expression>; context: null }
136 + | { code: "E0004"; path: NodePath; context: null }
137 + | {
138 + code: "E0005";
139 + path: NodePath<t.ObjectProperty>;
140 + context: { callee: NodePath | NodePath[]; key: string };
141 + }
142 + | {
143 + code: "E0006";
144 + path: NodePath;
145 + context: {
146 + callee: NodePath | NodePath[];
147 + tupleLength: number;
148 + attemptedLength: number;
149 + };
150 + }
151 + | {
152 + code: "E0007";
153 + path: NodePath;
154 + context: {
155 + callee: NodePath | NodePath[];
156 + };
157 + }
158 + | { code: "E0008"; path: NodePath; context: { input: NodePath } }
159 + | { code: "E0009"; path: NodePath; context: { call: NodePath } }
160 + | { code: "E0010"; path: NodePath; context: { name: Name } }
161 + | { code: "E0011"; path: null; context: null }
162 + | { code: "E0012"; path: NodePath; context: null }
163 + | { code: "E0013"; path: NodePath; context: { name: Name } }
164 + | { code: "E0014"; path: NodePath; context: null }
165 + | { code: "E0015"; path: null; context: { error: Error } }
166 + | { code: "E0016"; path: NodePath; context: null }
167 + | { code: "E0017"; path: NodePath; context: null }
168 + | { code: "E0018"; path: NodePath; context: null }
169 + | { code: "E0019"; path: NodePath; context: null }
170 + | { code: "E0020"; path: NodePath; context: null }
171 + ;
172 +
173 +function getDiagnosticMessage(opts: DiagnosticOpts): DiagnosticMessage {
174 + switch (opts.code) {
175 + case "E0001":
176 + return {
177 + level: DiagnosticLevel.Warning,
178 + body: "Forget does not currently support rest params in Component props.",
179 + suggestion: `Consider destructuring \`${getSource(opts.path)}\`.`,
180 + };
181 + case "E0002":
182 + return {
183 + level: DiagnosticLevel.Warning,
184 + body: "Forget does not currently support tracking the Component props object as a whole.",
185 + suggestion: `Consider destructuring \`${getSource(opts.path)}\`.`,
186 + };
187 + case "E0003":
188 + return {
189 + level: DiagnosticLevel.Warning,
190 + body: "Expression-body React functions are ignored.",
191 + suggestion: null,
192 + };
193 + case "E0004":
194 + return {
195 + level: DiagnosticLevel.Error,
196 + body: "React compiler currently only supports hooks at the Component's top level scope.",
197 + suggestion: `Move \`${opts.path}\` out of \`${opts.path.scope.path.parentPath}\`.`,
198 + };
199 + case "E0005":
200 + return {
201 + level: DiagnosticLevel.Warning,
202 + body: `\`${getSource(
203 + opts.context.callee
204 + )}\` does not have the member \`${
205 + opts.context.key
206 + }\` in its return value.`,
207 + suggestion: `Remove \`${opts.path}\`.`,
208 + };
209 + case "E0006":
210 + return {
211 + level: DiagnosticLevel.Warning,
212 + body: `\`${getSource(
213 + opts.context.callee
214 + )}\` returns a tuple of length ${opts.context.tupleLength}, got ${
215 + opts.context.attemptedLength
216 + } instead.`,
217 + suggestion: `Remove \`${opts.path}\`.`,
218 + };
219 + case "E0007":
220 + return {
221 + level: DiagnosticLevel.Warning,
222 + body: `\`${getSource(
223 + opts.context.callee
224 + )}\` does not have a return value.`,
225 + suggestion: `Do \`${getSource(opts.path.get("init"))}\` instead.`,
226 + };
227 + case "E0008":
228 + return {
229 + level: DiagnosticLevel.Error,
230 + body: "Values used to derive inputs (e.g. passed to Hooks) can only be immutably borrowed afterwards.",
231 + suggestion: `If you are mutating this value, try finish the local mutation before:
232 +
233 +\`\`\`
234 +${opts.context.input}
235 +\`\`\`
236 +
237 +
238 +If you are only reading this value, try annotating the value with \`/*readonly*/\` or \`/*immut*/\` in:
239 +\`\`\`
240 +${getSource(opts.path)}
241 +\`\`\``,
242 + };
243 + case "E0009":
244 + return {
245 + level: DiagnosticLevel.Error,
246 + body: "React compiler currently only supports call expressions when using hooks.",
247 + suggestion: `Try changing \`${getSource(opts.path)}\` to \`${
248 + opts.context.call
249 + }\``,
250 + };
251 + case "E0010":
252 + const parentSource = getSource(opts.path.parentPath);
253 + return {
254 + level: DiagnosticLevel.Error,
255 + body: `\`${opts.context.name}\` is an immutable value enforced by React compiler, and cannot be reassigned or mutated.`,
256 + suggestion:
257 + parentSource == null
258 + ? "Remove the reassignment"
259 + : `Remove the reassignment: \`${parentSource}\``,
260 + };
261 + case "E0011":
262 + return {
263 + level: DiagnosticLevel.Error,
264 + body: "Function has multiple returns and `bailOnMultipleReturns` is enabled.",
265 + suggestion: null,
266 + };
267 + case "E0012":
268 + return {
269 + level: DiagnosticLevel.Error,
270 + body: "Function uses `useRef` hook and `bailOnUseRef` is enabled.",
271 + suggestion: null,
272 + };
273 + case "E0013":
274 + return {
275 + level: DiagnosticLevel.Error,
276 + body: `\`${opts.context.name}\` is an immutable value enforced by React compiler, and cannot be mutated.`,
277 + suggestion: `Remove the mutation: \`${getSource(
278 + opts.path.parentPath
279 + )}\``,
280 + };
281 + case "E0014":
282 + return {
283 + level: DiagnosticLevel.Error,
284 + body: "Function uses a ref-like value from props, arguments or context and `bailOnUseRef` is enabled.",
285 + suggestion: null,
286 + };
287 + case "E0015":
288 + return {
289 + level: DiagnosticLevel.Error,
290 + body: `Unexpected error detected: ${opts.context.error}.`,
291 + suggestion: null,
292 + };
293 + case "E0016":
294 + return {
295 + level: DiagnosticLevel.Error,
296 + body: "A React hook call is under an invalid namespace.",
297 + suggestion: null,
298 + };
299 + case "E0017":
300 + return {
301 + level: DiagnosticLevel.Error,
302 + body: "A hook call is under a valid namespace, but invalid according to eslint.",
303 + suggestion: null,
304 + };
305 + case "E0018":
306 + return {
307 + level: DiagnosticLevel.Error,
308 + body: "React components should not be called directly, but instead constructed using JSX. Other functions should not be capitalized.",
309 + suggestion: null,
310 + };
311 + case "E0019":
312 + return {
313 + level: DiagnosticLevel.Error,
314 + body: "React components not defined on the top level are not supported by Forget.",
315 + suggestion: null,
316 + };
317 + case "E0020":
318 + return {
319 + level: DiagnosticLevel.Error,
320 + body: "Forget does not support the use of the arguments object.",
321 + suggestion: null,
322 + };
323 + default:
324 + assertExhaustive(opts, `Unhandled error code ${opts}`);
325 + }
326 +}
compiler/forget/src/IR/Func.ts new
+312
@@ -0,0 +1,312 @@
1 +/**
2 + * Copyright (c) Facebook, Inc. and its affiliates.
3 + *
4 + * This source code is licensed under the MIT license found in the
5 + * LICENSE file in the root directory of this source tree.
6 + */
7 +
8 +import type { Binding, NodePath } from "@babel/traverse";
9 +import * as t from "@babel/types";
10 +import { invariant } from "../CompilerError";
11 +import * as DepGraph from "../DepGraph";
12 +import * as BabelUtils from "./babel-utils";
13 +import { FuncTopLevel } from "./FuncTopLevel";
14 +import {
15 + BindingVal,
16 + createBindingVal,
17 + createFreeVal,
18 + ExprVal,
19 + FreeVal,
20 + Ref,
21 + ValKind,
22 +} from "./Val";
23 +
24 +/**
25 + * IR Function.
26 + */
27 +export class Func {
28 + name: Name;
29 +
30 + ast: NodePath<BabelUtils.NonMethodFunction>;
31 +
32 + kind: FuncKind;
33 +
34 + paramKind: FuncParamKind;
35 +
36 + get params(): BindingVal[] {
37 + return [...this.env.decls.values()].filter((v) => v.kind === ValKind.Param);
38 + }
39 +
40 + // FunctionBody: FunctionStatementList: StatementListItem
41 + body: FuncTopLevel[] = [];
42 +
43 + /**
44 + * Number of return statements. Does not count a potential implicit return at
45 + * the end of the function.
46 + */
47 + returnCount: number = 0;
48 +
49 + isImplicitReturn: boolean = true;
50 +
51 + env: FuncEnv;
52 +
53 + depGraph: DepGraph.ValGraph;
54 +
55 + constructor(
56 + ast: NodePath<BabelUtils.NonMethodFunction>,
57 + name: Name = undefined,
58 + kind: FuncKind = FuncKind.Unknown,
59 + localMutationThroughFreeVars: boolean = false
60 + ) {
61 + this.name = name;
62 + this.ast = ast;
63 + this.kind = kind;
64 + this.paramKind = FuncParamKind.NonSimple;
65 + this.env = new FuncEnv(this, localMutationThroughFreeVars);
66 + this.depGraph = new DepGraph.ValGraph(this.env);
67 + }
68 +}
69 +
70 +/**
71 + * Fucntion Environments
72 + */
73 +export class FuncEnv {
74 + /**
75 + * Its belonging IR function.
76 + */
77 + func: Func;
78 +
79 + /**
80 + * If the environment includes free vars.
81 + */
82 + includeFreeVars: boolean;
83 +
84 + /**
85 + * Declarative Bindings (Top-level).
86 + *
87 + * This correpondences to the "Function Environment Records" in ECMA-262,
88 + * which is used to represent the top-level scope of a function, and contains
89 + * bindings for the top-level declarations within that function.
90 + *
91 + * @see https://tc39.es/ecma262/#sec-function-environment-records
92 + */
93 + decls: Map<Name, BindingVal>;
94 +
95 + /**
96 + * Expressions.
97 + *
98 + * This is used to represent expressions occurred within this function that
99 + * could be interesting to the compiler optimizations, e.g. common
100 + * sub-expressions that could be lifted/treated as declarations.
101 + */
102 + exprs: Map<NodePath<t.Expression>, ExprVal>;
103 +
104 + /**
105 + * Free Variables
106 + *
107 + * This correpondences to the `[[OuterEnv]]` of the "Function Environment
108 + * Records" (i.e. the [[Environment]]` slot of the instantiated
109 + * "ECMAScript Function Objects") AND all the "Environment Records" that are
110 + * transitively accesible through the `[[OuterEnv]]` slot.
111 + *
112 + * It is used to represent the acumulation of all the outer environments of
113 + * the function, and contains all the free variables closed over.
114 + *
115 + * @see https://tc39.es/ecma262/#sec-ecmascript-function-objects
116 + */
117 + freeVars: Map<Name, FreeVal>;
118 +
119 + constructor(func: Func, includeFreeVars: boolean) {
120 + this.func = func;
121 + this.includeFreeVars = includeFreeVars;
122 +
123 + /**
124 + * Add all own bindings from @param scope as default-kinded {@link Val}.
125 + * To ensure their identity being stable, it's critical that they are only
126 + * created once here and later analysis should look them up from here and
127 + * refine their properties via {@link Val.refineTo} which mutates.
128 + */
129 + this.decls = new Map(
130 + Object.entries(func.ast.scope.bindings).map(([name, binding]) => [
131 + name,
132 + createBindingVal(binding),
133 + ])
134 + );
135 +
136 + /**
137 + * TODO: exprs are currently populated during {@link RefKindInfer} when
138 + * iterating over the JSX tree which basically use this as a cache. We
139 + * should consider splitting the initialization and the analysis, despite
140 + * that means we have to do it in two AST passes.
141 + */
142 + this.exprs = new Map();
143 +
144 + /**
145 + * Add all free bindings referenced from @param scope as {@link FreeVal}.
146 + */
147 + this.freeVars = new Map();
148 + if (this.includeFreeVars) {
149 + for (const refIdent of this.#getFuncOuterScopedReferences(func.ast)) {
150 + const name = refIdent.node.name;
151 + let val = this.freeVars.get(name);
152 + if (!val) {
153 + val = createFreeVal(name);
154 + this.freeVars.set(name, val);
155 + }
156 + val.reference(refIdent);
157 + }
158 + }
159 + }
160 +
161 + /**
162 + * @returns RF-level bindings created by @param path.
163 + */
164 + #getFuncScopedBindings(path: NodePath): Binding[] {
165 + return BabelUtils.getScopedBindings(path, this.func.ast.scope);
166 + }
167 +
168 + /**
169 + * @returns identifiers referencing above-RF-level bindings under @param path.
170 + */
171 + #getFuncOuterScopedReferences(path: NodePath): NodePath<t.Identifier>[] {
172 + return BabelUtils.getOuterScopedReferences(path, this.func.ast.scope);
173 + }
174 +
175 + /**
176 + * @returns identifiers referencing RF-level bindings under @param path.
177 + */
178 + #getFuncScopedReferences(
179 + path: NodePath
180 + ): NodePath<t.Identifier | t.JSXIdentifier>[] {
181 + return BabelUtils.getScopedReferences(path, this.func.ast.scope).filter(
182 + (refIdent) => {
183 + if (refIdent.isJSXIdentifier()) return true;
184 +
185 + // We have to perform a doucble check against `val.references` (the
186 + // source of truth) to be sound.
187 + const val = this.decls.get(refIdent.node.name);
188 + invariant(
189 + val !== undefined,
190 + refIdent
191 + .buildCodeFrameError(`Val of ${refIdent.node.name} must exists`)
192 + .toString()
193 + );
194 +
195 + const maybeRef = val.references.get(refIdent);
196 + return Boolean(maybeRef);
197 + }
198 + );
199 + }
200 +
201 + /**
202 + * @return all declarative {@link BindingVal} originated from @param path.
203 + */
204 + getDeclsFrom(path: NodePath): BindingVal[] {
205 + const decls: BindingVal[] = [];
206 +
207 + for (const b of this.#getFuncScopedBindings(path)) {
208 + const val = this.decls.get(b.identifier.name);
209 + invariant(val, `Decl "${b.identifier.name}" must exists.`);
210 + decls.push(val);
211 + }
212 +
213 + return decls;
214 + }
215 +
216 + /**
217 + * @return all {@link Ref} to declarations originated from @param path.
218 + */
219 + getRefsToDeclsFrom(path: NodePath): Ref<BindingVal>[] {
220 + return this.#getFuncScopedReferences(path).map((refIdent) => {
221 + const val = this.decls.get(refIdent.node.name);
222 + invariant(
223 + val !== undefined,
224 + refIdent
225 + .buildCodeFrameError(`Val of ${refIdent.node.name} must exists`)
226 + .toString()
227 + );
228 +
229 + const ref = val.references.get(refIdent);
230 + invariant(
231 + ref !== undefined,
232 + refIdent
233 + .buildCodeFrameError(
234 + `Ref of ${refIdent.node.type} ${refIdent.node.name} must exists`
235 + )
236 + .toString()
237 + );
238 +
239 + return ref;
240 + });
241 + }
242 +
243 + /**
244 + * @returns all free variables originated from @param path
245 + */
246 + getFreeVarsFrom(path: NodePath): Ref<FreeVal>[] {
247 + if (!this.includeFreeVars) return [];
248 +
249 + return this.#getFuncOuterScopedReferences(path).map((refIdent) => {
250 + const val = this.freeVars.get(refIdent.node.name);
251 + invariant(
252 + val !== undefined,
253 + refIdent
254 + .buildCodeFrameError(`Val of ${refIdent.node.name} must exists`)
255 + .toString()
256 + );
257 +
258 + const ref = val.references.get(refIdent);
259 + invariant(
260 + ref !== undefined,
261 + refIdent
262 + .buildCodeFrameError(
263 + `Ref of ${refIdent.node.type} ${refIdent.node.name} must exists`
264 + )
265 + .toString()
266 + );
267 +
268 + return ref;
269 + });
270 + }
271 +}
272 +
273 +/**
274 + * React Function Kinds
275 + * @default Unset, e.g. when "use forget" is used.
276 + */
277 +export enum FuncKind {
278 + Unknown = "Unknown",
279 + Component = "Component",
280 + Hook = "Hook",
281 +}
282 +
283 +/**
284 + * React Function Param Kinds.
285 + * @default NonSimple
286 + * @see https://tc39.es/ecma262/#sec-static-semantics-issimpleparameterlist
287 + */
288 +export enum FuncParamKind {
289 + /**
290 + * FormalParamerers: [empty] or actually having empty bindings.
291 + */
292 + Empty,
293 + /**
294 + * IsSimpleParameterList and not Empty
295 + */
296 + Simple,
297 + /**
298 + * !IsSimpleParameterList and not Empty
299 + */
300 + NonSimple,
301 +}
302 +
303 +/**
304 + * Due to `var` hoisting and TDZ of lexical bindings, name should be sufficient
305 + * to uniquely identify function top-level bindings (e.g. props, states, hooks).
306 + * If needed, we can change this to unique symbol id in the future.
307 + */
308 +export type Name = String | undefined;
309 +
310 +export function hasMultipleReturn(func: Func): boolean {
311 + return func.isImplicitReturn ? func.returnCount > 0 : func.returnCount > 1;
312 +}
compiler/forget/src/IR/FuncTopLevel.ts new
+103
@@ -0,0 +1,103 @@
1 +/**
2 + * Copyright (c) Facebook, Inc. and its affiliates.
3 + *
4 + * This source code is licensed under the MIT license found in the
5 + * LICENSE file in the root directory of this source tree.
6 + */
7 +
8 +import type { NodePath } from "@babel/traverse";
9 +import * as t from "@babel/types";
10 +import { FuncEnv } from "./Func";
11 +import { HookCall } from "./Hook";
12 +import { BindingVal, ExprVal, FreeVal, JSXTagVal, Ref, Val } from "./Val";
13 +
14 +/**
15 + * IR Func Top Level
16 + */
17 +export class FuncTopLevel {
18 + /**
19 + * Note that Babel treat Declaration <: Statement while ECMA-262 splits them:
20 + * StatementListItem: Declaration | Statement
21 + */
22 + ast: NodePath<t.Statement>;
23 +
24 + /**
25 + * Declaration:
26 + * HoistableDeclaration
27 + * ClassDeclaration
28 + * LexicalDeclaration
29 + */
30 + isDecl: boolean;
31 +
32 + /**
33 + * Declarations.
34 + */
35 + decls: BindingVal[];
36 +
37 + /**
38 + * References to declarations.
39 + */
40 + refsToDecls: Ref<BindingVal>[];
41 +
42 + /**
43 + * References of free vars.
44 + */
45 + refsToFreeVars: Ref<FreeVal>[];
46 +
47 + /**
48 + * References of expressions.
49 + */
50 + refsToExprs: Ref<ExprVal>[];
51 +
52 + /**
53 + * Hook Calls.
54 + */
55 + hookCalls: HookCall[] = [];
56 +
57 + /**
58 + * JSX Tree Roots.
59 + */
60 + jsxTreeRoots: JSXTagVal[] = [];
61 +
62 + /**
63 + * Potential control flow exits.
64 + */
65 + returnStmts: Map<NodePath<t.ReturnStatement>, number> = new Map();
66 +
67 + includeFreeVars: boolean;
68 +
69 + constructor(stmt: NodePath<t.Statement>, funcEnv: FuncEnv) {
70 + this.ast = stmt;
71 + this.isDecl = stmt.isDeclaration();
72 + this.decls = funcEnv.getDeclsFrom(stmt);
73 + this.refsToDecls = funcEnv.getRefsToDeclsFrom(stmt);
74 + this.refsToFreeVars = funcEnv.getFreeVarsFrom(stmt);
75 + this.refsToExprs = [];
76 + this.includeFreeVars = funcEnv.includeFreeVars;
77 + }
78 +
79 + /**
80 + * All "uses" of {@link Val}.
81 + */
82 + get uses(): Ref<Val>[] {
83 + return [
84 + ...this.refsToDecls,
85 + ...this.refsToExprs,
86 + ...(this.includeFreeVars ? this.refsToFreeVars : []),
87 + ];
88 + }
89 +
90 + /**
91 + * All mutable uses. This needs to be lazy so it's computed after refinements.
92 + */
93 + get mutableUses(): Ref<Val>[] {
94 + return this.uses.filter((use) => !use.immutable);
95 + }
96 +
97 + /**
98 + * All defs. This needs to be lazy since it depends on {@link mutableUses}.
99 + */
100 + get defs(): Val[] {
101 + return [...this.decls, ...this.mutableUses.map((use) => use.val)];
102 + }
103 +}
compiler/forget/src/IR/Hook.ts new
+631
@@ -0,0 +1,631 @@
1 +/**
2 + * Copyright (c) Facebook, Inc. and its affiliates.
3 + *
4 + * This source code is licensed under the MIT license found in the
5 + * LICENSE file in the root directory of this source tree.
6 + */
7 +
8 +import type { Node, NodePath } from "@babel/traverse";
9 +import * as t from "@babel/types";
10 +import { assertExhaustive } from "../Common/utils";
11 +import { CompilerContext } from "../CompilerContext";
12 +import { invariant } from "../CompilerError";
13 +import type { Func, Name } from "./Func";
14 +import { refineToHookRetVal, Val } from "./Val";
15 +
16 +/**
17 + * IR Hook.
18 + *
19 + * {@link HookCall}: the compiler IR for "ret = useHook()" in source.
20 + * {@link Hook}: specifications for each hook.
21 + * {@link HookSig}: signatures for each hook.
22 + */
23 +
24 +export type HookCallExpr = t.CallExpression | t.OptionalCallExpression;
25 +
26 +/**
27 + * Hook Call.
28 + */
29 +export class HookCall {
30 + // AST of the call.
31 + call: NodePath<HookCallExpr>;
32 +
33 + // The Hook resolved from the call.
34 + hook: Hook;
35 +
36 + /**
37 + * Return values.
38 + */
39 + unused_retVals: Map<Name, Val>;
40 +
41 + /**
42 + * To guarantee that the @param hook was resolved from the @param call. It's
43 + * recommmended to use {@link resolveHookCall} as a factory instead.
44 + */
45 + private constructor(call: NodePath<HookCallExpr>, hook: Hook) {
46 + this.call = call;
47 + this.hook = hook;
48 + this.unused_retVals = new Map();
49 + }
50 +
51 + /**
52 + * Using this static factory method can guarantee to @returns a new instance
53 + * with its internal {@link Hook} resolved from the @param call.
54 + */
55 + static resolve(
56 + call: NodePath<HookCallExpr>,
57 + onInvalidHookNamespace?: (
58 + expression: t.Expression,
59 + isBuiltinHook: boolean
60 + ) => void
61 + ): HookCall | undefined {
62 + const maybeHook = matchHookCall(call.node, onInvalidHookNamespace);
63 + return maybeHook && new HookCall(call, maybeHook);
64 + }
65 +
66 + matchRetVals(irFunc: Func, context: CompilerContext) {
67 + matchHookCallRetVals(this, irFunc, context);
68 + }
69 +
70 + toString() {
71 + let name = this.hook.name;
72 + if (isCustomHook(this.hook) && this.hook.isNamedLikeBuiltin) {
73 + name += "%custom";
74 + }
75 + return name;
76 + }
77 +}
78 +
79 +/**
80 + * @returns the specific {@link Hook} resolved from @param call ast
81 + * @throws if @param call ast is not hook.
82 + *
83 + * This is more favorable than {@link resolveHookCall} when there is no need
84 + * to allocate an instance of {@link HookCall}.
85 + */
86 +export function matchHookCall(
87 + call: HookCallExpr,
88 + onInvalidHookNamespace?: (
89 + expression: t.Expression,
90 + isBuiltinHook: boolean
91 + ) => void
92 +): Hook | undefined {
93 + const calleeNode = call.callee;
94 + return matchHookNode(calleeNode, onInvalidHookNamespace);
95 +}
96 +
97 +function matchHookNode(
98 + node: Node,
99 + onInvalidHookNamespace?: (
100 + expression: t.Expression,
101 + isBuiltinHook: boolean
102 + ) => void
103 +): Hook | undefined {
104 + const isPascalCaseNameSpace = (ns: string) => /^[A-Z].*/.test(ns);
105 +
106 + // Base case: orphan identifier.
107 + if (t.isIdentifier(node)) {
108 + return matchHookName(node);
109 + }
110 + // Recursive case: within member expression.
111 + else if (
112 + (t.isMemberExpression(node) || t.isOptionalMemberExpression(node)) &&
113 + !node.computed
114 + ) {
115 + // Check substructure.
116 + let maybeHook = matchHookNode(node.property);
117 + if (!maybeHook) return undefined;
118 +
119 + // Following our ESLint plugin, lowercased namespaced hook-like call e.g.
120 + // `x.useHook`, `A.B.useHook` are considered as not hook.
121 + if (
122 + !(t.isIdentifier(node.object) && isPascalCaseNameSpace(node.object.name))
123 + ) {
124 + onInvalidHookNamespace?.(node.object, isBuiltinHook(maybeHook));
125 + return undefined;
126 + }
127 +
128 + // We need to double check the namespace to avoid being fooled
129 + // by cases e.g. `NonReact.useState`.
130 + const underReact =
131 + t.isIdentifier(node.object) &&
132 + node.object.name === "React" &&
133 + t.isIdentifier(node.property);
134 +
135 + if (underReact) {
136 + return maybeHook;
137 + }
138 +
139 + // Any other matches can only be qualified as custom hooks.
140 + return createCustomHook(maybeHook.name, true);
141 + }
142 + // Unknown pattern.
143 + else {
144 + return undefined;
145 + }
146 +}
147 +
148 +function matchHookName(ident: t.Identifier): Hook | undefined {
149 + if (!isHookLikeName(ident.name)) {
150 + return undefined;
151 + }
152 +
153 + // match with builtin hooks.
154 + switch (ident.name) {
155 + case "useState":
156 + return UseState;
157 + case "useReducer":
158 + return UseReducer;
159 + case "useContext":
160 + return UseContext;
161 + case "useRef":
162 + return UseRef;
163 + case "useEffect":
164 + return UseEffect;
165 + case "useLayoutEffect":
166 + return UseLayoutEffect;
167 + case "useCallback":
168 + return UseCallback;
169 + case "useMemo":
170 + return UseMemo;
171 + default:
172 + return createCustomHook(ident.name.slice(3));
173 + }
174 +}
175 +
176 +/**
177 + * Catch all identifiers that begin with "use" followed by an uppercase Latin
178 + * character to exclude identifiers like "user".
179 + */
180 +export function isHookLikeName(name: string): boolean {
181 + // TODO: Deprecate `_` along with its deprecation in react-hooks eslint
182 + return /^_?use[A-Z0-9].*$/.test(name);
183 +}
184 +
185 +/**
186 + * Hook ("Spec")
187 + *
188 + * We will provide the "spec" of builtin hooks. In the future, we may allow
189 + * custom hooks to specify there properties (stateful, effectful) and signature
190 + * (referential stablity and mutability of returned values) through either
191 + * annotations, naming conventions, or {@link CompilerOptions}.
192 + */
193 +export interface Hook {
194 + name: string;
195 +
196 + kind: HookKind;
197 +
198 + signature: HookSig;
199 +
200 + /**
201 + * Hooks that reflexively and transitively depends on builtin stateful hooks.
202 + * This is currently unused.
203 + */
204 + stateful: boolean;
205 +
206 + /**
207 + * Hooks that reflexively and transitively depends on builtin effectful hooks.
208 + * This is currently unused.
209 + */
210 + effectful: boolean;
211 +}
212 +
213 +export interface CustomHook extends Hook {
214 + isNamedLikeBuiltin: boolean;
215 +}
216 +
217 +export enum HookKind {
218 + // Custom Hooks.
219 + Custom = 0,
220 +
221 + // Builtin Hooks.
222 + UseState,
223 + UseReducer,
224 + UseContext,
225 + UseRef,
226 + UseEffect,
227 + UseLayoutEffect,
228 + UseCallback,
229 + UseMemo,
230 +}
231 +
232 +export function isBuiltinHook(hook: Hook) {
233 + return hook.kind > HookKind.Custom;
234 +}
235 +
236 +export function isCustomHook(hook: Hook): hook is CustomHook {
237 + return hook.kind === HookKind.Custom;
238 +}
239 +
240 +/**
241 + * Custom Hooks are hooks provided in the user space.
242 + *
243 + * Until we can tell from either cross-module analysis or user-provided spec,
244 + * we will have to assume the worst case scenarios where it's both stateful
245 + * and effectful.
246 + */
247 +export function createCustomHook(
248 + name: string,
249 + isNamedLikeBuiltin = false
250 +): CustomHook {
251 + return {
252 + name,
253 + isNamedLikeBuiltin,
254 + kind: HookKind.Custom,
255 + stateful: true,
256 + effectful: true,
257 + /**
258 + * Why is custom hook return values immutable?
259 + * @see https://my.workplace.com/groups/335063911811171/permalink/408024221181806/
260 + *
261 + * Tldr; even though mutating hook return values is allowed in today's React,
262 + * it's a bad pattern since it makes it unsafe for the custom hook to
263 + * memoize the return value: it's a quite broken contract.
264 + *
265 + * In Forget, we want to tighten up the cross-call immutable contract. That
266 + * being said, we should either bailout or make it a compiler error.
267 + *
268 + * TODO: error when mutating "wanted-immutable-but-actually-mutable" values.
269 + */
270 + signature: {
271 + retValues: {
272 + kind: "AnyPatternLike",
273 + forall: { immutable: true, stable: false },
274 + },
275 + },
276 + };
277 +}
278 +
279 +export const UseState: Hook = {
280 + name: "State",
281 + kind: HookKind.UseState,
282 + stateful: true,
283 + effectful: false,
284 + signature: {
285 + retValues: /* [state, setState] */ {
286 + kind: "ArrayPattern",
287 + self: { immutable: true, stable: false },
288 + elements: [
289 + { immutable: true, stable: false },
290 + { immutable: true, stable: true },
291 + ],
292 + },
293 + },
294 +};
295 +
296 +export const UseReducer: Hook = {
297 + name: "Reducer",
298 + kind: HookKind.UseReducer,
299 + stateful: true,
300 + effectful: false,
301 + signature: {
302 + retValues: /* [state, dispatch] */ {
303 + kind: "ArrayPattern",
304 + self: { immutable: true, stable: false },
305 + elements: [
306 + { immutable: true, stable: false },
307 + { immutable: true, stable: true },
308 + ],
309 + },
310 + },
311 +};
312 +
313 +export const UseContext: Hook = {
314 + name: "Context",
315 + kind: HookKind.UseContext,
316 + stateful: true,
317 + effectful: false,
318 + signature: {
319 + retValues: /* context value */ {
320 + kind: "AnyPatternLike",
321 + forall: { immutable: true, stable: false },
322 + },
323 + },
324 +};
325 +
326 +/**
327 + * How can ref be {@link IR.HookRetVal} while being mutable? Wouldn't it be
328 + * considered as {@link IR.InputVal}, which are supposed to be deeply immutable?
329 + *
330 + * Technically, `ref.current` shouldn't be read (i.e. unboxing the ref) in the
331 + * render phase, but there is nothing stops people from doing that yet. It's
332 + * also technically safe if the developers ensured `ref.current` is immutable.
333 + *
334 + * To minimize changes/surprises brought up to developers and existing codebase,
335 + * we'll therefore track `useRef` return values as inputs. The ref obj is marked
336 + * as stable but what inside `current` is not.
337 + *
338 + * TODO: in the future, we should add runtime check: if `ref.current` is read
339 + * in render and therefore becoming the inputs of cache key, we should generate
340 + * code (deeply?) `freeze` it on developer mode.
341 + *
342 + * @see https://fb.workplace.com/groups/335063911811171/permalink/380068057310756
343 + *
344 + */
345 +export const UseRef: Hook = {
346 + name: "Ref",
347 + kind: HookKind.UseRef,
348 + stateful: false,
349 + effectful: false,
350 + signature: {
351 + retValues: /* ref object */ {
352 + kind: "ObjectPattern",
353 + self: { immutable: false, stable: true },
354 + properties: {
355 + current: { immutable: false, stable: false },
356 + },
357 + },
358 + },
359 +};
360 +
361 +export const UseEffect: Hook = {
362 + name: "Effect",
363 + kind: HookKind.UseEffect,
364 + stateful: false,
365 + effectful: true,
366 + signature: {
367 + retValues: {
368 + kind: "Void",
369 + },
370 + },
371 +};
372 +
373 +export const UseLayoutEffect: Hook = {
374 + name: "LayoutEffect",
375 + kind: HookKind.UseLayoutEffect,
376 + stateful: false,
377 + effectful: true,
378 + signature: {
379 + retValues: {
380 + kind: "Void",
381 + },
382 + },
383 +};
384 +
385 +export const UseCallback: Hook = {
386 + name: "Callback",
387 + kind: HookKind.UseCallback,
388 + stateful: false,
389 + effectful: false,
390 + signature: {
391 + retValues: /* memoized callback */ {
392 + kind: "AnyPatternLike",
393 + forall: {
394 + immutable: true,
395 + stable: false,
396 + },
397 + },
398 + },
399 +};
400 +
401 +export const UseMemo: Hook = {
402 + name: "Memo",
403 + kind: HookKind.UseMemo,
404 + stateful: false,
405 + effectful: false,
406 + signature: {
407 + retValues: /* memoized value */ {
408 + kind: "AnyPatternLike",
409 + forall: {
410 + immutable: true,
411 + stable: false,
412 + },
413 + },
414 + },
415 +};
416 +
417 +/**
418 + * React Hook Signature
419 + *
420 + * Currenly, only well-known patterns and only own properties are specifiable
421 + * (i.e. 1-level shallow equality). We may add supports to more sophicated
422 + * patterns e.g. AssignmentPattern or RestElement if they became common.
423 + */
424 +
425 +type ValSig = Pick<Val, "immutable" | "stable">;
426 +
427 +/**
428 + * Currently we only care about return values of hooks.
429 + *
430 + * In the future we may need parameters but for now they are all universally
431 + * treated as immutably borrowing.
432 + */
433 +export type HookSig = {
434 + retValues: HookSigVariant;
435 +};
436 +
437 +type HookSigVariant = Void | AnyPatternLike | ArrayPattern | ObjectPattern;
438 +
439 +type Void = {
440 + kind: "Void";
441 +};
442 +
443 +type AnyPatternLike = {
444 + kind: "AnyPatternLike";
445 + // this will apply to all bindings coming from any PatternLike
446 + forall: ValSig;
447 +};
448 +
449 +type ArrayPattern = {
450 + kind: "ArrayPattern";
451 + self: ValSig;
452 + elements: ValSig[];
453 +};
454 +
455 +type ObjectPattern = {
456 + kind: "ObjectPattern";
457 + self: ValSig;
458 + properties: Record<string, ValSig>;
459 +};
460 +
461 +function matchHookCallRetVals(
462 + hookCall: HookCall,
463 + irFunc: Func,
464 + context: CompilerContext
465 +) {
466 + let lval: NodePath<t.LVal> | undefined = undefined;
467 + const parent = hookCall.call.parentPath;
468 +
469 + if (parent.isVariableDeclarator()) {
470 + // e.g. let a = useHook()
471 + lval = parent.get("id");
472 + } else if (parent.isExpressionStatement() || parent.isReturnStatement()) {
473 + // e.g. useHook()
474 + // e.g. return useHook()
475 + // We do not have any values assigned, so nothing to refine.
476 + return;
477 + }
478 +
479 + if (lval == null) {
480 + context.bailout("NonVarDeclHookCallParent", {
481 + code: "E0009",
482 + path: parent,
483 + context: { call: hookCall.call },
484 + });
485 + return;
486 + }
487 +
488 + const pattern = hookCall.hook.signature.retValues;
489 + switch (pattern.kind) {
490 + case "ArrayPattern":
491 + matchArrayPattern(pattern, lval, parent);
492 + break;
493 + case "AnyPatternLike":
494 + matchAnyPatternLike(pattern, lval);
495 + break;
496 + case "ObjectPattern":
497 + matchObjectPattern(pattern, lval, parent);
498 + break;
499 + case "Void":
500 + matchVoid(pattern, lval);
501 + break;
502 + default:
503 + assertExhaustive(pattern, `Unhandled pattern ${pattern}`);
504 + }
505 +
506 + function matchVoid(_pattern: Void, lvals: NodePath<t.LVal>) {
507 + if (lvals.isPatternLike()) {
508 + let callee = lvals.parentPath.get("init.callee");
509 + context.createDiagnostic({
510 + code: "E0007",
511 + path: lvals.parentPath,
512 + context: { callee },
513 + });
514 + }
515 + }
516 +
517 + function matchObjectPattern(
518 + pattern: ObjectPattern,
519 + lvals: NodePath<t.LVal>,
520 + parent: NodePath
521 + ) {
522 + // var/let/const {...} = ...
523 + if (lvals.isObjectPattern()) {
524 + const lvalsProps = lvals.get("properties");
525 + const patternProps = pattern.properties;
526 + lvalsProps.forEach((lvalsProp) => {
527 + const lvalsPropNode = lvalsProp.node;
528 + if (lvalsPropNode.type !== "ObjectProperty") return;
529 + if (!t.isIdentifier(lvalsPropNode.key)) return;
530 + if (!(lvalsPropNode.key.name in patternProps)) {
531 + const callee = parent.get("init.callee");
532 + context.createDiagnostic({
533 + code: "E0005",
534 + path: lvalsProp as NodePath<t.ObjectProperty>,
535 + context: { callee, key: lvalsPropNode.key.name },
536 + });
537 + return;
538 + }
539 + const sig = patternProps[lvalsPropNode.key.name];
540 + irFunc.env.getDeclsFrom(lvalsProp).forEach((val) => {
541 + refineToHookRetVal(val, hookCall, sig.immutable, sig.stable);
542 + });
543 + });
544 + }
545 + // var/let/const obj = ...
546 + else if (lvals.isIdentifier()) {
547 + irFunc.env.getDeclsFrom(lvals).forEach((val) => {
548 + refineToHookRetVal(
549 + val,
550 + hookCall,
551 + pattern.self.immutable,
552 + pattern.self.stable
553 + );
554 + });
555 + }
556 + // Unknown. Downgrade to the worst case.
557 + else {
558 + irFunc.env.getDeclsFrom(lvals).forEach((val) => {
559 + refineToHookRetVal(val, hookCall, false, false);
560 + });
561 + }
562 + }
563 +
564 + function matchAnyPatternLike(
565 + pattern: AnyPatternLike,
566 + lvals: NodePath<t.LVal>
567 + ) {
568 + if (lvals.isPatternLike()) {
569 + irFunc.env.getDeclsFrom(lvals).forEach((val) => {
570 + refineToHookRetVal(
571 + val,
572 + hookCall,
573 + pattern.forall.immutable,
574 + pattern.forall.stable
575 + );
576 + });
577 + }
578 + // Currenlty, the only non-PatternLike LVal are MemberExpression
579 + else {
580 + invariant(false, "Unreachable.");
581 + }
582 + }
583 +
584 + function matchArrayPattern(
585 + pattern: ArrayPattern,
586 + lvals: NodePath<t.LVal>,
587 + parent: NodePath
588 + ) {
589 + // var/let/const [...] = ...
590 + if (lvals.isArrayPattern()) {
591 + const lvalsEles = lvals.get("elements") as NodePath[];
592 + const patternEles = pattern.elements;
593 + lvalsEles.forEach((lvalsEle, n) => {
594 + if (n >= patternEles.length) {
595 + const callee = parent.get("init.callee");
596 + context.createDiagnostic({
597 + code: "E0006",
598 + path: lvalsEle,
599 + context: {
600 + callee,
601 + attemptedLength: lvalsEles.length,
602 + tupleLength: patternEles.length,
603 + },
604 + });
605 + return;
606 + }
607 + const eleSig = patternEles[n];
608 + irFunc.env.getDeclsFrom(lvalsEle).forEach((val) => {
609 + refineToHookRetVal(val, hookCall, eleSig.immutable, eleSig.stable);
610 + });
611 + });
612 + }
613 + // var/let/const arrObj = ...
614 + else if (lvals.isIdentifier()) {
615 + irFunc.env.getDeclsFrom(lvals).forEach((val) => {
616 + refineToHookRetVal(
617 + val,
618 + hookCall,
619 + pattern.self.immutable,
620 + pattern.self.stable
621 + );
622 + });
623 + }
624 + // Unknown. Downgrade to the worst case.
625 + else {
626 + irFunc.env.getDeclsFrom(lvals).forEach((val) => {
627 + refineToHookRetVal(val, hookCall, false, false);
628 + });
629 + }
630 + }
631 +}
compiler/forget/src/IR/JSX.ts new
+173
@@ -0,0 +1,173 @@
1 +/**
2 + * Copyright (c) Facebook, Inc. and its affiliates.
3 + *
4 + * This source code is licensed under the MIT license found in the
5 + * LICENSE file in the root directory of this source tree.
6 + */
7 +
8 +import type { NodePath } from "@babel/traverse";
9 +import * as t from "@babel/types";
10 +import { pathUnion } from "../Common/PathUnion";
11 +import { assertExhaustive } from "../Common/utils";
12 +import { Func } from "./Func";
13 +import {
14 + createExprVal,
15 + createJSXTagVal,
16 + ExprVal,
17 + JSXTagVal,
18 + ValKind,
19 +} from "./Val";
20 +
21 +/**
22 + * React JSX Tree.
23 + */
24 +
25 +/**
26 + * Technically we don't need to distinguish fragments and elements and
27 + * they are lowered to `React.createElement` anyways.
28 + *
29 + * But since Babel and the JSX spec differentiate them syntactically, let's
30 + * call them JSX "tag" then.
31 + */
32 +export type JSXTag = t.JSXElement | t.JSXFragment;
33 +
34 +export class JSXTreeBuilder {
35 + #irFunc: Func;
36 + #rootTag: NodePath<JSXTag>;
37 +
38 + constructor(rootTag: NodePath<JSXTag>, irFunc: Func) {
39 + this.#irFunc = irFunc;
40 + this.#rootTag = rootTag;
41 + }
42 + build(): JSXTagVal {
43 + return this.#jsxTag(this.#rootTag);
44 + }
45 + /**
46 + * Construct a JSX tree and return the {@link JSXTagVal} of root.
47 + */
48 + #jsxTag(tagPath: NodePath<JSXTag>): JSXTagVal {
49 + const val = createJSXTagVal(tagPath);
50 +
51 + const unsafeParent = tagPath.findParent((path) => {
52 + if (
53 + t.isConditional(path) ||
54 + t.isLoop(path) ||
55 + t.isFunction(path) ||
56 + t.isJSXExpressionContainer(path) ||
57 + t.isSwitchStatement(path) ||
58 + t.isLogicalExpression(path)
59 + ) {
60 + return true;
61 + }
62 +
63 + // If Forget runs before Fbt, we should not memoize insde Fbt.
64 + // As the Fbt transform limits allowed content.
65 + // Unsure if this could be loosened within FbtParam.
66 + if (t.isJSXElement(path.node)) {
67 + const name = path.node.openingElement.name;
68 + if (t.isJSXIdentifier(name) && /[Ff]b[st]/.test(name.name)) {
69 + return true;
70 + }
71 + }
72 +
73 + return false;
74 + });
75 +
76 + val.isUnsafeToMemo =
77 + unsafeParent != null && unsafeParent.isDescendant(this.#irFunc.ast);
78 +
79 + const tag = pathUnion(tagPath);
80 + switch (tag.type) {
81 + // <JSXElement attr=ATTRIBUTES>CHILDREN</JSXElement>
82 + case "JSXElement":
83 + const attrs = tag.get("openingElement").get("attributes");
84 +
85 + for (const rawAttr of attrs) {
86 + const attr = pathUnion(rawAttr);
87 + switch (attr.type) {
88 + case "JSXAttribute":
89 + const attrVal = pathUnion(attr.get("value"));
90 + switch (attrVal.type) {
91 + case "JSXExpressionContainer":
92 + this.#expressionContainer(attrVal, val);
93 + break;
94 + case "JSXElement":
95 + case "JSXFragment":
96 + val.children.push(this.#jsxTag(attrVal));
97 + break;
98 + case "StringLiteral":
99 + case undefined:
100 + case null:
101 + break;
102 + default:
103 + assertExhaustive(
104 + attrVal,
105 + `Unhandled ${(attrVal as NodePath).type}.`
106 + );
107 + }
108 + break;
109 + case "JSXSpreadAttribute":
110 + val.children.push(this.#expression(attr.get("argument")));
111 + break;
112 + default:
113 + assertExhaustive(attr, "Unhandled `${(attr as NodePath).type}`.");
114 + }
115 + }
116 + this.#children(tag, val);
117 + break;
118 + case "JSXFragment":
119 + this.#children(tag, val);
120 + break;
121 + default:
122 + assertExhaustive(tag, `Unhandled ${(tag as NodePath).type}.`);
123 + }
124 + return val;
125 + }
126 + #children(tag: NodePath<JSXTag>, parent: JSXTagVal) {
127 + const children = tag.get("children");
128 + for (const rawChild of children) {
129 + const child = pathUnion(rawChild);
130 + switch (child.type) {
131 + case "JSXExpressionContainer":
132 + this.#expressionContainer(child, parent);
133 + break;
134 + case "JSXElement":
135 + case "JSXFragment":
136 + parent.children.push(this.#jsxTag(child));
137 + break;
138 + case "JSXText":
139 + // nothing interesting.
140 + break;
141 + case "JSXSpreadChild":
142 + // React doesn't support this.
143 + break;
144 + default:
145 + assertExhaustive(child, `Unhandled ${(child as NodePath).type}.`);
146 + }
147 + }
148 + }
149 + #expressionContainer(
150 + jsxExprContainer: NodePath<t.JSXExpressionContainer>,
151 + parent: JSXTagVal
152 + ) {
153 + const expr = jsxExprContainer.get("expression");
154 +
155 + // Find sub trees under JSXExpressionContainer e.g. {<JSX />}.
156 + // TODO: verify if we need this again??
157 + expr.traverse({
158 + JSXElement: (jsxEle) => {
159 + parent.children.push(this.#jsxTag(jsxEle));
160 + },
161 + JSXFragment: (jsxFrag) => {
162 + parent.children.push(this.#jsxTag(jsxFrag));
163 + },
164 + });
165 +
166 + if (expr.isExpression()) {
167 + parent.children.push(this.#expression(expr));
168 + }
169 + }
170 + #expression(expr: NodePath<t.Expression>): ExprVal {
171 + return createExprVal(expr, ValKind.Expr, true);
172 + }
173 +}
compiler/forget/src/IR/PrettyPrinter.ts new
+172
@@ -0,0 +1,172 @@
1 +/**
2 + * Copyright (c) Facebook, Inc. and its affiliates.
3 + *
4 + * This source code is licensed under the MIT license found in the
5 + * LICENSE file in the root directory of this source tree.
6 + */
7 +
8 +import generate from "@babel/generator";
9 +import * as t from "@babel/types";
10 +import * as IR from ".";
11 +import * as LIR from "../LIR";
12 +
13 +export default function prettyPrint(irFunc: IR.Func) {
14 + renameReactiveVal(irFunc);
15 +
16 + const commentedNodes: t.Node[] = [];
17 + addComments(irFunc, commentedNodes);
18 +
19 + let funcNode = irFunc.ast.node;
20 +
21 + let funcDecl: t.FunctionDeclaration | undefined;
22 +
23 + // Build new FunctionDeclaration from original FunctionExpression
24 + // or ArrowFunctionExpression
25 + if (
26 + t.isFunctionExpression(funcNode) ||
27 + t.isArrowFunctionExpression(funcNode)
28 + ) {
29 + const params = funcNode.params;
30 + let body: t.BlockStatement;
31 +
32 + if (t.isArrowFunctionExpression(funcNode)) {
33 + if (t.isExpression(funcNode.body)) {
34 + const stmt = t.expressionStatement(funcNode.body);
35 + body = t.blockStatement([stmt]);
36 + } else {
37 + body = funcNode.body;
38 + }
39 + } else {
40 + body = funcNode.body;
41 + }
42 +
43 + const name =
44 + irFunc.name !== undefined
45 + ? t.identifier(irFunc.name.toString())
46 + : t.identifier("_anno");
47 +
48 + const commentedNode = t.addComment(name, "leading", irFunc.kind);
49 + commentedNodes.push(commentedNode);
50 +
51 + funcDecl = t.functionDeclaration(name, params, body);
52 + if (irFunc.name === "Cell") console.log(funcDecl);
53 + } else if (t.isFunctionDeclaration(funcNode)) {
54 + funcDecl = funcNode;
55 +
56 + if (funcNode.id) {
57 + const commentedNode = t.addComment(funcNode.id, "leading", irFunc.kind);
58 + commentedNodes.push(commentedNode);
59 + }
60 + }
61 +
62 + if (funcDecl === undefined) {
63 + revertRenameReactiveVal(irFunc);
64 + return;
65 + }
66 +
67 + const babelOutput = generate(funcDecl, { concise: true }).code;
68 +
69 + revertRenameReactiveVal(irFunc);
70 + revertAddComments(commentedNodes);
71 +
72 + return babelOutput;
73 +}
74 +
75 +/**
76 + * Rename every {@link IR.ReactiveVal} by appending a `$` to the name.
77 + */
78 +export function renameReactiveVal(irFunc: IR.Func) {
79 + for (const [name, bVal] of irFunc.env.decls) {
80 + if (IR.isReactiveVal(bVal)) {
81 + irFunc.ast.scope.rename(`${name}`, `$${name}`);
82 + }
83 + }
84 +}
85 +
86 +export function revertRenameReactiveVal(irFunc: IR.Func) {
87 + for (const [name, bVal] of irFunc.env.decls) {
88 + if (IR.isReactiveVal(bVal)) {
89 + irFunc.ast.scope.rename(`$${name}`, `${name}`);
90 + }
91 + }
92 +}
93 +
94 +export function addComments(
95 + irFunc: IR.Func,
96 + commentedNodes: t.Node[],
97 + lirFunc?: LIR.Func
98 +) {
99 + // Add comments to all decls and uses of {@link BindingVal}
100 + for (const bVal of irFunc.env.decls.values()) {
101 + const commentedNode = t.addComment(
102 + bVal.binding.identifier,
103 + "leading",
104 + bVal.getFormatedProperties()
105 + );
106 + commentedNodes.push(commentedNode);
107 +
108 + bVal.references.forEach((ref) => {
109 + const commentedNode = t.addComment(
110 + ref.path.node,
111 + "leading",
112 + ref.getFormatedProperties()
113 + );
114 + commentedNodes.push(commentedNode);
115 + });
116 + }
117 +
118 + // Add comments to all {@link FreeVal}
119 + for (const fVal of irFunc.env.freeVars.values()) {
120 + fVal.references.forEach((ref) => {
121 + const commentedNode = t.addComment(
122 + ref.path.node,
123 + "leading",
124 + ref.getFormatedProperties()
125 + );
126 + commentedNodes.push(commentedNode);
127 + });
128 + }
129 +
130 + if (lirFunc) {
131 + // Add comments to only non-JSX unstable {@link ExprVal}.
132 + for (const eVal of irFunc.env.exprs.values()) {
133 + const entry = lirFunc.memoCache.entries.get(eVal);
134 + if (entry) {
135 + const eValPath = eVal.ast.path;
136 + let commentedNode;
137 + if (IR.isJSXTagVal(eVal)) {
138 + if (eValPath.isJSXElement()) {
139 + // </*$*/ id>
140 + commentedNode = t.addComment(
141 + eValPath.node.openingElement.name,
142 + // Some highlighters can't parse leading comments in JSX right.
143 + "trailing",
144 + "$"
145 + );
146 + } else if (eValPath.isJSXFragment()) {
147 + // </*$*/>
148 + commentedNode = t.addComment(
149 + eValPath.node.openingFragment,
150 + "inner",
151 + "$"
152 + );
153 + }
154 + } else if (IR.isExprVal(eVal)) {
155 + commentedNode = t.addComment(eValPath.node, "leading", "$");
156 + }
157 + if (commentedNode != null) {
158 + commentedNodes.push(commentedNode);
159 + }
160 + }
161 + }
162 + }
163 +}
164 +
165 +/**
166 + * Note: this will remove all comments of the node but it's fine since {@link DumpIR} will not be run in production.
167 + */
168 +export function revertAddComments(commentedNodes: t.Node[]) {
169 + commentedNodes.forEach((commentedNode) => {
170 + t.removeComments(commentedNode);
171 + });
172 +}
compiler/forget/src/IR/Prog.ts new
+20
@@ -0,0 +1,20 @@
1 +/**
2 + * Copyright (c) Facebook, Inc. and its affiliates.
3 + *
4 + * This source code is licensed under the MIT license found in the
5 + * LICENSE file in the root directory of this source tree.
6 + */
7 +
8 +import { NodePath } from "@babel/core";
9 +import * as t from "@babel/types";
10 +import { Func } from "./Func";
11 +
12 +export class Prog {
13 + ast: NodePath<t.Program>;
14 +
15 + funcs: Map<NodePath<t.Function>, Func> = new Map();
16 +
17 + constructor(ast: NodePath<t.Program>) {
18 + this.ast = ast;
19 + }
20 +}
compiler/forget/src/IR/Val.ts new
+616
@@ -0,0 +1,616 @@
1 +/**
2 + * Copyright (c) Facebook, Inc. and its affiliates.
3 + *
4 + * This source code is licensed under the MIT license found in the
5 + * LICENSE file in the root directory of this source tree.
6 + */
7 +
8 +import { Binding, NodePath } from "@babel/traverse";
9 +import * as t from "@babel/types";
10 +import { dumpNode, dumpNodeLoc } from "../Common/Dumper";
11 +import { assertExhaustive } from "../Common/utils";
12 +import { invariant } from "../CompilerError";
13 +import { isAllocatingExpr } from "./babel-utils";
14 +import { HookCall } from "./Hook";
15 +import { JSXTag } from "./JSX";
16 +import { ValSnapshot } from "./ValSnapshot";
17 +
18 +/**
19 + * Val Kind.
20 + * N.B. It's an numeric enum and we relied on comparsion for classification.
21 + */
22 +export enum ValKind {
23 + // (Deeply) Immutable Binding
24 + Param, // Props and Hook args are immutable so they are safe to be cache key.
25 + HookRet, // Hook return value are immutable so they are safe to be memoized.
26 + DerivedImmut, // Values derived from other immutables are therefore immutable.
27 +
28 + // Mutable (New) Binding
29 + MutableNew,
30 +
31 + // Unknown Binding
32 + Unknown,
33 +
34 + // Free Variable
35 + Free,
36 +
37 + // Expression
38 + Expr,
39 + JSXTag,
40 +}
41 +
42 +export function isBindingVal(val: Val): val is BindingVal {
43 + return val.kind <= ValKind.Unknown;
44 +}
45 +
46 +export function isHookRetVal(val: Val): val is HookRetVal {
47 + return val.kind === ValKind.HookRet;
48 +}
49 +
50 +export function isDerivedImmutVal(val: Val): val is DerivedImmutVal {
51 + return val.kind === ValKind.DerivedImmut;
52 +}
53 +
54 +export function isFreeVal(val: Val): val is FreeVal {
55 + return val.kind === ValKind.Free;
56 +}
57 +
58 +export function isExprVal(val: Val): val is ExprVal {
59 + return val.kind >= ValKind.Expr;
60 +}
61 +
62 +export function isJSXTagVal(val: Val): val is JSXTagVal {
63 + return val.kind === ValKind.JSXTag;
64 +}
65 +
66 +/**
67 + * Reactive Values and Input Values.
68 + *
69 + * These are {@link BindingVal} that are special to React semantics.
70 + * 1. Conceptually, they are either React states or derivations of states
71 + * (including props, hook return values, and their further derivations). They
72 + * are required to be deeply immutable during a rendering, so that their
73 + * referential identity can be used to approximate if there was a update.
74 + * 2. Analysis-wise, they are the roots of all variations of {@link DepGraph}.
75 + * Specifically, they are the set of values that {@link DepsReduction} pass
76 + * aimed to reduce every other vertcies to depend and _only_ depend on.
77 + * 3. Runtime-wise, they are always recomputed; diffed; and cached in the
78 + * generated code. Most interestingly, they are the sources of reactivity,
79 + * or, speaking in terms of memoization, they form the cache key.
80 + *
81 + * The differences between {@link InputVal} and {@link ReactiveVal} is minimal
82 + * and is only relevant as an implementation details, where ReactiveVal is
83 + * defined as every InputVal that is NOT stable so they can be omitted from the
84 + * analysis and code generation, e.g. we don't need to diff and cache `setState`
85 + * since it's stable and owned by React.
86 + *
87 + * Programming model per-se, one may just say "Props and state aren’t the only
88 + * reactive values. Values that you calculate from them are also reactive."
89 + * (https://beta.reactjs.org/learn/lifecycle-of-reactive-effects#all-variables-declared-in-the-component-body-are-reactive),
90 + * Where "stable reactive values" like `setState` were just optimized.
91 + */
92 +export interface InputVal extends BindingVal {}
93 +export interface ReactiveVal extends InputVal {}
94 +
95 +export function isInputVal(val: Val): val is InputVal {
96 + return val.kind <= ValKind.DerivedImmut;
97 +}
98 +
99 +export function isReactiveVal(val: Val): val is ReactiveVal {
100 + return isInputVal(val) && !val.stable;
101 +}
102 +
103 +export function formatValKind(val: Val): string {
104 + switch (val.kind) {
105 + case ValKind.Param:
106 + return "Param";
107 + case ValKind.HookRet:
108 + invariant(isHookRetVal(val), "");
109 + return `${val.hookCall}`;
110 + case ValKind.DerivedImmut:
111 + invariant(isDerivedImmutVal(val), "");
112 + // Only prepend the derivation sign (~) once.
113 + let fromFmt = formatValKind(val.from);
114 + return fromFmt.startsWith("~") ? fromFmt : `~${fromFmt}`;
115 + case ValKind.MutableNew:
116 + return `MutableNew`;
117 + case ValKind.Unknown:
118 + return "Unknown";
119 + case ValKind.Free:
120 + return "Free";
121 + case ValKind.Expr:
122 + return "Expr";
123 + case ValKind.JSXTag:
124 + return "JSX";
125 + default:
126 + assertExhaustive(val.kind, `Unhandled val ${val}`);
127 + }
128 +}
129 +
130 +type ValNode<Val> = Val extends BindingVal
131 + ? t.Node
132 + : Val extends FreeVal
133 + ? t.Identifier
134 + : Val extends JSXTagVal
135 + ? JSXTag
136 + : t.Expression;
137 +
138 +type ValAST<V extends Val> = {
139 + hasMutated: boolean;
140 + unsafePath: NodePath<ValNode<V>>;
141 + path: NodePath<ValNode<V>>;
142 + replaceWith: NodePath["replaceWith"];
143 +};
144 +
145 +/**
146 + * A proxy to Babel's AST so path access is guarded against mutation.
147 + */
148 +function createValAST<V extends Val>(path: NodePath<ValNode<V>>): ValAST<V> {
149 + let hasMutated = false;
150 + return {
151 + hasMutated,
152 + unsafePath: path,
153 + get path() {
154 + invariant(!hasMutated, "Access path after it's mutated.");
155 + return path;
156 + },
157 + replaceWith(replacement) {
158 + hasMutated = true;
159 + return path.replaceWith(replacement);
160 + },
161 + };
162 +}
163 +
164 +/**
165 + * IR Value.
166 + *
167 +┌──────────────┬───────────────────────┬─────────────────┐
168 +│ IR.Val │ immutable │ mutable │
169 +├──────────────┼───────────────────────┼─────────────────┤
170 +│ stable │ useState, dispatch │ ref obj │
171 +├──────────────┼───────────────────────┼─────────────────┤
172 +│ unstable │ prop, state, hook arg │ anything else │
173 +└──────────────┴───────────────────────┴─────────────────┘
174 + */
175 +export interface Val {
176 + kind: ValKind;
177 +
178 + ast: ValAST<Val> | undefined;
179 +
180 + // Whether or not this value is immutable.
181 + immutable: boolean;
182 +
183 + // Whether or not the identity of this value is stable across re-renders.
184 + // N.B. for ExprVal, it is describing whether or not the expression itself
185 + // creating unstable value, e.g. `c ? x : y` is a stable ExprVal that returns
186 + // unstable values like `x` and `y`, which is likely pre-memoized.
187 + stable: boolean;
188 +
189 + // Reference Record.
190 + // Val owns its Ref.
191 + references: Map<NodePath, Ref<Val>>;
192 +
193 + getFormatedProperties(): string;
194 + getFormatedProperties(immutable: boolean): string;
195 +
196 + toString(): string;
197 + toString(immutable: boolean): string;
198 +
199 + toLoc(): string;
200 +
201 + toJSON(): object;
202 +
203 + snapshot(): ValSnapshot;
204 +}
205 +
206 +export interface BindingVal extends Val {
207 + ast: ValAST<BindingVal>;
208 + binding: Binding;
209 + references: Map<RefPath<BindingVal>, Ref<BindingVal>>;
210 +
211 + /**
212 + * Refine value kinds and properties without changing its identity.
213 + */
214 + refineTo(kind: ValKind, immutable?: boolean, stable?: boolean): void;
215 +}
216 +
217 +export interface HookRetVal extends BindingVal {
218 + kind: ValKind.HookRet;
219 + hookCall: HookCall;
220 +}
221 +
222 +export interface DerivedImmutVal extends BindingVal {
223 + kind: ValKind.DerivedImmut;
224 + from: InputVal;
225 +}
226 +
227 +export interface FreeVal extends Val {
228 + name: string;
229 + ast: undefined;
230 + references: Map<RefPath<FreeVal>, Ref<FreeVal>>;
231 + reference(refPath: RefPath<FreeVal>): Ref<FreeVal>;
232 +}
233 +
234 +export interface ExprVal extends Val {
235 + ast: ValAST<ExprVal>;
236 + references: Map<NodePath, Ref<ExprVal>>;
237 + getRef(): Ref<ExprVal>;
238 +}
239 +
240 +export interface JSXTagVal extends ExprVal {
241 + kind: ValKind.JSXTag;
242 + ast: ValAST<JSXTagVal>;
243 + getRef(): Ref<JSXTagVal>;
244 + children: ExprVal[];
245 + isUnsafeToMemo: boolean;
246 +}
247 +
248 +/**
249 + * N.B. it's more common a value is @param immutable over @param stable.
250 + */
251 +export function createBindingVal(
252 + binding: Binding,
253 + kind: ValKind = ValKind.Unknown,
254 + immutable = false,
255 + stable = false
256 +): BindingVal {
257 + const newVal: BindingVal = {
258 + binding,
259 + kind,
260 + ast: createValAST<BindingVal>(binding.path),
261 + immutable,
262 + stable,
263 + references: new Map<RefPath<BindingVal>, Ref<BindingVal>>(),
264 + refineTo(
265 + this: BindingVal,
266 + kind: ValKind,
267 + immutable = this.immutable,
268 + stable = this.stable
269 + ): void {
270 + this.kind = kind;
271 + this.immutable = immutable;
272 + this.stable = stable;
273 + },
274 + getFormatedProperties(
275 + this: BindingVal,
276 + immutable: boolean = this.immutable
277 + ) {
278 + return formatValProperties(this, immutable);
279 + },
280 + toString(this: BindingVal, immutable: boolean = this.immutable) {
281 + const name = this.binding.identifier.name;
282 + const tracked = isReactiveVal(this) ? "$" : "";
283 + const anno = this.getFormatedProperties(immutable);
284 + const annoFmt = anno[anno.length - 1] === "_" ? anno : `${anno} `;
285 +
286 + return `${annoFmt}${tracked}${name}`.trimStart();
287 + },
288 + toLoc(this: BindingVal) {
289 + return dumpNodeLoc(this.ast.path.node);
290 + },
291 + toJSON() {
292 + return {
293 + kind: this.binding.kind,
294 + identifier: this.binding.identifier.name,
295 + referenced: this.binding.referenced,
296 + references: this.binding.references,
297 + constant: this.binding.constant,
298 + };
299 + },
300 + snapshot(this: BindingVal) {
301 + return new ValSnapshot(this);
302 + },
303 + };
304 +
305 + /**
306 + * Babel doesn't consider LHS of Assignment as {@link Binding.referencePaths}
307 + * because they are "write" rather than "read". Instead, "write" are put under
308 + * {@link Binding.constantViolations}.
309 + *
310 + * @see https://github.com/babel/babel/issues/11313
311 + *
312 + * Our notion of {@link IR.Ref} are canonical symbol references so we need
313 + * to collect both reads and writes.
314 + */
315 + for (const ref of binding.referencePaths) {
316 + if (ref.isIdentifier() || ref.isJSXIdentifier()) {
317 + if (!t.isObjectPattern(ref.parentPath.parentPath)) {
318 + // Older version of babel marks `FOO` in `{x: FOO}` as reference (https://github.com/babel/babel/pull/9492/)
319 + newVal.references.set(ref, createRef<BindingVal>(ref, newVal));
320 + }
321 + } else {
322 + invariant(false, `Babel bindings can only be referenced by identifiers`);
323 + }
324 + }
325 +
326 + // This is considered the single source of truth of our notion of "Reference"
327 + // since it performs the strictest check by far until may be
328 + // https://github.com/babel/babel/issues/14771 is fixed.
329 + for (const write of binding.constantViolations) {
330 + invariant(
331 + write.isAssignmentExpression() ||
332 + write.isUpdateExpression() ||
333 + write.isForInStatement() ||
334 + write.isForOfStatement(),
335 + `Unexpected node type for binding update: %s`,
336 + write.type
337 + );
338 +
339 + let path: NodePath = write;
340 + if (write.isAssignmentExpression()) path = write.get("left");
341 +
342 + if (path.isIdentifier()) {
343 + newVal.references.set(
344 + path,
345 + createRef<BindingVal>(path, newVal, RefKind.Reassign)
346 + );
347 + } else {
348 + path.traverse({
349 + Identifier(ref) {
350 + if (ref.node.name === binding.identifier.name) {
351 + newVal.references.set(
352 + ref,
353 + createRef<BindingVal>(ref, newVal, RefKind.Reassign)
354 + );
355 + }
356 + },
357 + });
358 + }
359 + }
360 +
361 + return newVal;
362 +}
363 +
364 +export function refineToHookRetVal(
365 + val: BindingVal,
366 + hookCall: HookCall,
367 + immutable: boolean = val.immutable,
368 + stable: boolean = val.stable
369 +): HookRetVal {
370 + val.refineTo(ValKind.HookRet, immutable, stable);
371 + invariant(isHookRetVal(val), "");
372 + val.hookCall = hookCall;
373 + return val;
374 +}
375 +
376 +export function refineToDerivedImmutVal(
377 + val: BindingVal,
378 + from: InputVal,
379 + immutable: boolean = val.immutable,
380 + stable: boolean = val.stable
381 +): DerivedImmutVal {
382 + val.refineTo(ValKind.DerivedImmut, immutable, stable);
383 + invariant(isDerivedImmutVal(val), "");
384 + val.from = from;
385 + return val;
386 +}
387 +
388 +/**
389 + * React requires no existence of global shared mutable states, therefore all
390 + * free vars are assumed to be stable and immutable.
391 + *
392 + * That being said, by including this analysis into the system we may
393 + * conservatively refine some of them to be mutable in a case-by-case manner.
394 + */
395 +export function createFreeVal(
396 + name: string,
397 + kind: ValKind = ValKind.Free,
398 + immutable = false,
399 + stable = true
400 +): FreeVal {
401 + const newVal: FreeVal = {
402 + kind,
403 + ast: undefined,
404 + immutable,
405 + stable,
406 + name,
407 + references: new Map<RefPath<FreeVal>, Ref<FreeVal>>(),
408 + reference(this: FreeVal, refPath: RefPath<FreeVal>): Ref<FreeVal> {
409 + const ref = createRef<FreeVal>(refPath, this, RefKind.Unknown);
410 + this.references.set(refPath, ref);
411 + return ref;
412 + },
413 + getFormatedProperties(this: FreeVal, immutable: boolean = this.immutable) {
414 + return formatValProperties(this, immutable);
415 + },
416 + toString(this: FreeVal) {
417 + return `${this.getFormatedProperties()}${this.name}`;
418 + },
419 + toLoc(this: FreeVal) {
420 + return "free";
421 + },
422 + toJSON() {
423 + return {};
424 + },
425 + snapshot(this: FreeVal) {
426 + return new ValSnapshot(this);
427 + },
428 + };
429 + return newVal;
430 +}
431 +
432 +export function createExprVal(
433 + expr: NodePath<t.Expression>,
434 + kind: ValKind = ValKind.Expr,
435 + immutable = false,
436 + stable?: boolean
437 +): ExprVal {
438 + if (typeof stable === "undefined") {
439 + stable = !isAllocatingExpr(expr);
440 + }
441 +
442 + const newVal = {
443 + ast: createValAST(expr),
444 + kind,
445 + immutable,
446 + stable,
447 + references: new Map(),
448 + getRef(): Ref<ExprVal> {
449 + return ref;
450 + },
451 + getFormatedProperties(this: ExprVal, immutable = this.immutable) {
452 + return formatValProperties(this, immutable);
453 + },
454 + toString(this: ExprVal, immutable = this.immutable) {
455 + const anno = this.getFormatedProperties(immutable);
456 + const annoFmt = anno[anno.length - 1] === "_" ? anno : `${anno} `;
457 + const str = dumpNode(this.ast.path.node);
458 + return `${annoFmt}${str}`;
459 + },
460 + toLoc(this: ExprVal) {
461 + return dumpNodeLoc(this.ast.path.node);
462 + },
463 + toJSON(this: ExprVal): any {
464 + const key = this.toString();
465 + if (isJSXTagVal(this)) {
466 + return {
467 + [key]: this.children.map((child) => child.toJSON()),
468 + };
469 + } else {
470 + return key;
471 + }
472 + },
473 + snapshot(this: ExprVal) {
474 + return new ValSnapshot(this);
475 + },
476 + };
477 +
478 + // expressions has only one reference which is itself.
479 + const ref = createRef<ExprVal>(expr, newVal);
480 + newVal.references.set(expr, ref);
481 +
482 + return newVal;
483 +}
484 +
485 +export function createJSXTagVal(expr: NodePath<JSXTag>): JSXTagVal {
486 + const jsxTagVal = createExprVal(expr, ValKind.JSXTag, true, false);
487 + invariant(isJSXTagVal(jsxTagVal), "");
488 +
489 + jsxTagVal.children = [];
490 + jsxTagVal.isUnsafeToMemo = false;
491 + return jsxTagVal;
492 +}
493 +
494 +/**
495 + * References to IR Value
496 + *
497 + * Creation of shared references are known as "borrowing". N.B. we are not
498 + * trying to formally formalize ownership here due to the shared and mutable
499 + * nature of JavaScript references, but we are designing with them in mind:
500 + *
501 + * 1. Immutable vals can't be borrowed as mutable, e.g. `unknown(prop)`. But
502 + * instead of erroring like Rust, we'll just assume `unknown` will only borrow
503 + * `prop` immutably, and eventually resulted in an immutable ref. This is
504 + * partially guranteed by React `freeze(prop)` in DEV (which doesn't work for
505 + * variables destructured from the props object though).
506 + *
507 + * 2. Mutable vals can not be mutated when it's immutably borrowed. when a value
508 + * is passing to JSX/Hook, we'll treat it as if the value is moved and owned by
509 + * React, and later references are considered as immutable borrowes. Forget may
510 + * generate `freeze(val)` in DEV to help guard this.
511 + *
512 + * The mutability of the "borrowing" itself is denoted by {@link RefKind}, while
513 + * the eventual mutablity of the resultant references are denoted via a getter
514 + * {@field immutable}.
515 + *
516 + * The overall strategy (@see BodyAnalysis) is that:
517 + * - Everything is started as Unknown which can either be assumed as mutable
518 + * (the current optimistic default) or immutable (if pessmestic).
519 + * - Refine identifier refs directly flowed into JSX and Hook as Freeze.
520 + * - Refine refs reassign-ed (from Binding.constantViolations) as Reassign.
521 + * - Refine all refs under certain syntactical position (e.g. MemberExpr.object,
522 + * CallExpr.argument) conservatively as Borrow
523 + */
524 +
525 +export enum RefKind {
526 + // Immutable
527 + Freeze,
528 +
529 + // Unknown
530 + Unknown,
531 +
532 + // Mutable
533 + Reassign,
534 + Borrow,
535 + MutBorrow,
536 +}
537 +
538 +type RefPath<Val> = Val extends BindingVal
539 + ? NodePath<t.Identifier | t.JSXIdentifier>
540 + : Val extends FreeVal
541 + ? NodePath<t.Identifier>
542 + : Val extends JSXTagVal
543 + ? NodePath<JSXTag>
544 + : NodePath<t.Expression>;
545 +
546 +export interface Ref<V extends Val> {
547 + kind: RefKind;
548 +
549 + val: V;
550 +
551 + path: RefPath<V>;
552 +
553 + // Whether or not this reference is immutable.
554 + // We can only create immutable reference on immutable value.
555 + get immutable(): boolean;
556 +
557 + /**
558 + * Refine value ref kind and properties without changing its identity.
559 + */
560 + refineTo(kind: RefKind): void;
561 +
562 + getFormatedProperties(): string;
563 + toString(): string;
564 +}
565 +
566 +export function createRef<V extends Val>(
567 + path: RefPath<V>,
568 + val: V,
569 + kind = RefKind.Unknown
570 +): Ref<V> {
571 + return {
572 + path,
573 + val,
574 + kind,
575 + get immutable() {
576 + switch (this.kind) {
577 + case RefKind.Freeze:
578 + return true;
579 + case RefKind.Reassign:
580 + case RefKind.Borrow:
581 + return this.val.immutable;
582 + case RefKind.MutBorrow:
583 + return false;
584 + case RefKind.Unknown:
585 + return true;
586 + default:
587 + assertExhaustive(this.kind, `Unhandled Ref ${this}`);
588 + }
589 + },
590 + refineTo(kind: RefKind) {
591 + this.kind = kind;
592 + },
593 + getFormatedProperties(this: Ref<V>) {
594 + // Override val's mutabiliy formatting to the ref's mutability.
595 + return `&${this.val.getFormatedProperties(this.immutable)}`;
596 + },
597 + toString(this: Ref<V>) {
598 + // Override val's mutabiliy formatting to the ref's mutability.
599 + return `&${this.val.toString(this.immutable)}`;
600 + },
601 + };
602 +}
603 +
604 +/**
605 + * @return properties shared by all {@link Val} formatted, with the
606 + * @param immutable overriable conveniently for {@link Ref}.
607 + *
608 + * This is used by {@link PrettyPrinter} to annotate source with comments.
609 + */
610 +function formatValProperties(val: Val, immutable = val.immutable) {
611 + const kind = val.kind !== ValKind.Unknown && formatValKind(val);
612 + const stable = !isExprVal(val) && val.stable && "_";
613 + const mut = !immutable && "mut";
614 +
615 + return [mut, kind, stable].filter(Boolean).join(" ");
616 +}
compiler/forget/src/IR/ValSnapshot.ts new
+36
@@ -0,0 +1,36 @@
1 +/**
2 + * Copyright (c) Facebook, Inc. and its affiliates.
3 + *
4 + * This source code is licensed under the MIT license found in the
5 + * LICENSE file in the root directory of this source tree.
6 + */
7 +
8 +import * as t from "@babel/types";
9 +import * as IR from ".";
10 +import { dumpNodeLoc } from "../Common/Dumper";
11 +
12 +export class ValSnapshot {
13 + node: t.Node | undefined;
14 +
15 + isInput: boolean;
16 +
17 + isReactive: boolean;
18 +
19 + pretty: string;
20 +
21 + constructor(val: IR.Val) {
22 + this.node = val.ast?.path.node;
23 + this.isInput = IR.isInputVal(val);
24 + this.isReactive = IR.isReactiveVal(val);
25 + // TODO: Add a snapshot version of `toString` to lazily compute this.
26 + this.pretty = val.toString();
27 + }
28 +
29 + toLoc() {
30 + return this.node ? dumpNodeLoc(this.node) : "";
31 + }
32 +
33 + toString() {
34 + return [this.toLoc(), this.pretty].filter(Boolean).join(" ");
35 + }
36 +}
compiler/forget/src/IR/__tests__/Hook--test.ts new
+87
@@ -0,0 +1,87 @@
1 +/**
2 + * Copyright (c) Facebook, Inc. and its affiliates.
3 + *
4 + * This source code is licensed under the MIT license found in the
5 + * LICENSE file in the root directory of this source tree.
6 + */
7 +
8 +import { NodePath } from "@babel/core";
9 +import { parse } from "@babel/parser";
10 +import traverse from "@babel/traverse";
11 +import { CallExpression, OptionalCallExpression } from "@babel/types";
12 +import * as Hook from "../Hook";
13 +
14 +/**
15 + * ReactHook Unit Tests
16 + *
17 + * This unit test only focus on the correctness around
18 + * {@link ReactHook.HookCall.resolve}.
19 + */
20 +
21 +describe("ReactHook", () => {
22 + it("Not hook", () => {
23 + // Not hook name.
24 + expect(parseHook("userFetch()")).toBe(undefined);
25 +
26 + // Lowercased namespace
27 + expect(parseHook("x.useState()")).toBe(undefined);
28 + expect(parseHook("jest.useFakeTimer()")).toBe(undefined);
29 +
30 + // Chaining member expression
31 + expect(parseHook("Module?.Other.useMagic()")).toBe(undefined);
32 + expect(parseHook("X.X.useState()")).toBe(undefined);
33 + expect(parseHook("X.React.useState()")).toBe(undefined);
34 + expect(parseHook("React.X.useState()")).toBe(undefined);
35 + });
36 +
37 + it("Builtin hooks", () => {
38 + // Orphan builtins.
39 + expect(parseHook("useState()")).toBe(Hook.UseState);
40 + expect(parseHook("useReducer()")).toBe(Hook.UseReducer);
41 + expect(parseHook("useContext()")).toBe(Hook.UseContext);
42 + expect(parseHook("useRef()")).toBe(Hook.UseRef);
43 + expect(parseHook("useEffect()")).toBe(Hook.UseEffect);
44 + expect(parseHook("useLayoutEffect()")).toBe(Hook.UseLayoutEffect);
45 + expect(parseHook("useCallback()")).toBe(Hook.UseCallback);
46 + expect(parseHook("useMemo()")).toBe(Hook.UseMemo);
47 +
48 + // React-namespaced builtins.
49 + expect(parseHook("React.useState()")).toBe(Hook.UseState);
50 + });
51 +
52 + test.each([
53 + // Unknown hooks.
54 + "useUnkown()",
55 + "React.useUnknown()",
56 +
57 + // Not (or not well) React-namespaced.
58 + "X.useState()",
59 +
60 + // Different custom hooks
61 + "useMagic()",
62 + "Module.useMagic()",
63 + "Module?.useMagic()",
64 + ])("`%s` is a custom hook", (code) => {
65 + const maybeHook = parseHook(code);
66 + expect(maybeHook !== undefined && Hook.isCustomHook(maybeHook)).toBe(true);
67 + });
68 +});
69 +
70 +/**
71 + * Test helper attempting to parse and resolve the first CallExpression in
72 + * @param code as Hook. @returns the hook if resolved, or undefined otherwise.
73 + */
74 +function parseHook(code: string): Hook.Hook | undefined {
75 + let maybeCall: NodePath<CallExpression | OptionalCallExpression> | undefined;
76 + traverse(parse(code), {
77 + CallExpression(call) {
78 + maybeCall = call;
79 + call.stop();
80 + },
81 + OptionalCallExpression(call) {
82 + maybeCall = call;
83 + call.stop();
84 + },
85 + });
86 + return maybeCall && Hook.HookCall.resolve(maybeCall)?.hook;
87 +}
compiler/forget/src/IR/__tests__/JSX--test.ts new
+164
@@ -0,0 +1,164 @@
1 +/**
2 + * Copyright (c) Facebook, Inc. and its affiliates.
3 + *
4 + * This source code is licensed under the MIT license found in the
5 + * LICENSE file in the root directory of this source tree.
6 + */
7 +
8 +import { NodePath } from "@babel/core";
9 +import { parse } from "@babel/parser";
10 +import traverse from "@babel/traverse";
11 +import invariant from "invariant";
12 +import { Func } from "../Func";
13 +import { JSXTag, JSXTreeBuilder } from "../JSX";
14 +import { JSXTagVal } from "../Val";
15 +
16 +/**
17 + * React JSX Unit Tests
18 + */
19 +describe("ReactJSX", () => {
20 + it("JSXElement", () => {
21 + expect(parseJSX("<View />")).toMatchInlineSnapshot(`
22 + {
23 + "JSX <View>": [],
24 + }
25 + `);
26 + expect(parseJSX("<View a='a' />")).toMatchInlineSnapshot(`
27 + {
28 + "JSX <View>": [],
29 + }
30 + `);
31 + expect(parseJSX("<View a={a} />")).toMatchInlineSnapshot(`
32 + {
33 + "JSX <View>": [
34 + "Expr a",
35 + ],
36 + }
37 + `);
38 + expect(parseJSX("<View>a</View>")).toMatchInlineSnapshot(`
39 + {
40 + "JSX <View>": [],
41 + }
42 + `);
43 + expect(parseJSX("<View>{a}</View>")).toMatchInlineSnapshot(`
44 + {
45 + "JSX <View>": [
46 + "Expr a",
47 + ],
48 + }
49 + `);
50 + expect(parseJSX("<ListView><View /></ListView>")).toMatchInlineSnapshot(`
51 + {
52 + "JSX <ListView>": [
53 + {
54 + "JSX <View>": [],
55 + },
56 + ],
57 + }
58 + `);
59 + expect(parseJSX("<ListView><View><Text/></View></ListView>"))
60 + .toMatchInlineSnapshot(`
61 + {
62 + "JSX <ListView>": [
63 + {
64 + "JSX <View>": [
65 + {
66 + "JSX <Text>": [],
67 + },
68 + ],
69 + },
70 + ],
71 + }
72 + `);
73 + expect(
74 + parseJSX(`
75 + <ListView a={a}>
76 + {a}
77 + <View b={b}>
78 + {b}
79 + <Text c={c}/>
80 + </View>
81 + </ListView>
82 + `)
83 + ).toMatchInlineSnapshot(`
84 + {
85 + "JSX <ListView>": [
86 + "Expr a",
87 + "Expr a",
88 + {
89 + "JSX <View>": [
90 + "Expr b",
91 + "Expr b",
92 + {
93 + "JSX <Text>": [
94 + "Expr c",
95 + ],
96 + },
97 + ],
98 + },
99 + ],
100 + }
101 + `);
102 + });
103 +
104 + it("JSXFragment", () => {
105 + expect(parseJSX("<></>")).toMatchInlineSnapshot(`
106 + {
107 + "JSX <>": [],
108 + }
109 + `);
110 + expect(
111 + parseJSX(`
112 + <>
113 + 1
114 + {a}
115 + <View/>
116 + <View b={b}/>
117 + </>
118 + `)
119 + ).toMatchInlineSnapshot(`
120 + {
121 + "JSX <>": [
122 + "Expr a",
123 + {
124 + "JSX <View>": [],
125 + },
126 + {
127 + "JSX <View>": [
128 + "Expr b",
129 + ],
130 + },
131 + ],
132 + }
133 + `);
134 + });
135 +});
136 +
137 +function parseJSX(jsxCode: string): JSXTagVal | undefined {
138 + // Wrap under a func to preserve the invariant that parentalFunc exists.
139 + let code = `
140 + function Comp(){ return ${jsxCode}}
141 + `;
142 +
143 + let maybeFunc;
144 + let maybeJSXTree: NodePath<JSXTag> | undefined;
145 + traverse(parse(code, { plugins: ["jsx"] }), {
146 + JSXElement(jsxEle) {
147 + maybeJSXTree = jsxEle;
148 + jsxEle.stop();
149 + },
150 + JSXFragment(jsxFrag) {
151 + maybeJSXTree = jsxFrag;
152 + jsxFrag.stop();
153 + },
154 + Function(func) {
155 + maybeFunc = func;
156 + },
157 + });
158 +
159 + invariant(maybeFunc, "Wrapped here.");
160 + return (
161 + maybeJSXTree &&
162 + new JSXTreeBuilder(maybeJSXTree, new Func(maybeFunc)).build()
163 + );
164 +}
compiler/forget/src/IR/__tests__/Val--test.ts new
+72
@@ -0,0 +1,72 @@
1 +import { parse } from "@babel/parser";
2 +import traverse, { Binding, NodePath } from "@babel/traverse";
3 +import * as t from "@babel/types";
4 +import {
5 + BindingVal,
6 + createBindingVal,
7 + createRef,
8 + RefKind,
9 + ValKind,
10 +} from "../Val";
11 +
12 +describe("ReactValue", () => {
13 + let def: Binding, ref: NodePath<t.Identifier | t.JSXIdentifier>;
14 + traverse(parse(`var x; use(x)`), {
15 + Identifier(ident) {
16 + if (ident.node.name !== "x") return;
17 + if (ident.isReferenced()) {
18 + ref = ident;
19 + } else {
20 + def = ident.scope.bindings["x"];
21 + }
22 + },
23 + });
24 +
25 + it("immutable stable value", () => {
26 + const v = createBindingVal(def, ValKind.Unknown, true, true);
27 + expect(v.toString()).toMatchInlineSnapshot(`"_x"`);
28 +
29 + const r = createRef<BindingVal>(ref, v, RefKind.Unknown);
30 + expect(r.toString()).toMatchInlineSnapshot(`"&_x"`);
31 +
32 + // Cannot borrow an immutable val as mutable so it still ended as immutable
33 + const mr = createRef<BindingVal>(ref, v, RefKind.Unknown);
34 + expect(mr.toString()).toMatchInlineSnapshot(`"&_x"`);
35 + });
36 +
37 + it("immutable unstable value", () => {
38 + const v = createBindingVal(def, ValKind.Unknown, true, false);
39 + expect(v.toString()).toMatchInlineSnapshot(`"x"`);
40 +
41 + const r = createRef<BindingVal>(ref, v, RefKind.Unknown);
42 + expect(r.toString()).toMatchInlineSnapshot(`"&x"`);
43 +
44 + // Cannot borrow an immutable val as mutable so it still ended as immutable
45 + const mr = createRef<BindingVal>(ref, v, RefKind.Unknown);
46 + expect(mr.toString()).toMatchInlineSnapshot(`"&x"`);
47 + });
48 +
49 + it("mutable stable value", () => {
50 + const v = createBindingVal(def, ValKind.Unknown, false, true);
51 + expect(v.toString()).toMatchInlineSnapshot(`"mut _x"`);
52 +
53 + // Can borrow a mutable value as immutable.
54 + const r = createRef<BindingVal>(ref, v, RefKind.Unknown);
55 + expect(r.toString()).toMatchInlineSnapshot(`"&_x"`);
56 +
57 + const mr = createRef<BindingVal>(ref, v, RefKind.Unknown);
58 + expect(mr.toString()).toMatchInlineSnapshot(`"&_x"`);
59 + });
60 +
61 + it("mutable unstable value", () => {
62 + const v = createBindingVal(def, ValKind.Unknown, false, false);
63 + expect(v.toString()).toMatchInlineSnapshot(`"mut x"`);
64 +
65 + // Can borrow a mutable value as immutable.
66 + const r = createRef<BindingVal>(ref, v, RefKind.Unknown);
67 + expect(r.toString()).toMatchInlineSnapshot(`"&x"`);
68 +
69 + const mr = createRef<BindingVal>(ref, v, RefKind.Unknown);
70 + expect(mr.toString()).toMatchInlineSnapshot(`"&x"`);
71 + });
72 +});
compiler/forget/src/IR/babel-utils.ts new
+354
@@ -0,0 +1,354 @@
1 +/**
2 + * Copyright (c) Facebook, Inc. and its affiliates.
3 + *
4 + * This source code is licensed under the MIT license found in the
5 + * LICENSE file in the root directory of this source tree.
6 + */
7 +
8 +import type { Binding, NodePath, Scope } from "@babel/traverse";
9 +import * as t from "@babel/types";
10 +import { invariant } from "../CompilerError";
11 +
12 +/**
13 + * Babel Utils
14 + *
15 + * This module implements utils (e.g. specialized scope analysis) that
16 + * conceptually fits better in Babel-like toolchain.
17 + */
18 +
19 +/**
20 + * @returns bindings scoped under @param scope that are declared by @param path.
21 + *
22 + * Babel's {@link getBindingIdentifiers} conveniently pattern match on all types
23 + * of nodes to find those {@link Identifier} where {@link Bindings} originated.
24 + * But it has many unwanted quirks:
25 + *
26 + * 1. sometimes include bindings created for inner block scope
27 + *
28 + * function foo(a, b){} // {foo, a, b}
29 + * const foo = function(a, b){} // {foo}
30 + * for (const x of xs){} // {x}
31 + *
32 + * 2. suffers from shadowing, since it can return identifiers with
33 + * the same name but bound on multiple scopes when @param path
34 + * itself introduces new scopes
35 + *
36 + * function foo(foo, b){} // {foo, b} (foo is the param!) duplicate = false
37 + * // {foo: Array(2), b: Array(1)} otherwise
38 + *
39 + * 3. sometimes includes references to existing bindings
40 + * let x; // [x]
41 + * x = 0; // []
42 + * for (x in {}) // [x], but this does not introduce a new binding
43 + *
44 + * N.B. {@link getOuterBindingIdentifiers} special-cased
45 + * {@link FunctionDeclaration} but is still not rigid enough.
46 + *
47 + * This method refined it to only return those bindings that are bound on the
48 + * same scope as @param path, resulting:
49 + *
50 + * function foo(a, b){} // {foo}
51 + * const foo = function(a, b){} // {foo}
52 + * for (const x of xs){} // {}
53 + * function foo(foo, b){} // {foo} (foo is the func)
54 + *
55 + * N.B. we choose return Bindings because it's more generalized. You can
56 + * find path, identifier, name all from it.
57 + */
58 +export function getScopedBindings(path: NodePath, scope: Scope): Binding[] {
59 + // Babel @type doesn't match with the real implementations.
60 + // @ts-ignore
61 + const bindingIdents = path.getBindingIdentifiers(true) as Record<
62 + string,
63 + t.Identifier[]
64 + >;
65 + const res: Binding[] = [];
66 +
67 + for (const [name, ids] of Object.entries(bindingIdents)) {
68 + // Use identifier name and re-lookup from the @param scope
69 + const maybeBinding = scope.getOwnBinding(name);
70 + for (const id of ids) {
71 + // Path may introduce a new binding of `name` under its own scope,
72 + // so we explicitly check whether `id` references the binding
73 + // under @param scope
74 + if (id === maybeBinding?.identifier) {
75 + res.push(maybeBinding);
76 + }
77 + }
78 + }
79 + return res;
80 +}
81 +
82 +/**
83 + * @returns identifiers under @param path referencing bindings on @param scope.
84 + */
85 +export function getScopedReferences(
86 + path: NodePath,
87 + scope: Scope
88 +): NodePath<t.Identifier | t.JSXIdentifier>[] {
89 + const refs: NodePath<t.Identifier | t.JSXIdentifier>[] = [];
90 +
91 + for (const ident of getReferences(path)) {
92 + if (isBoundOnScope(ident, scope)) {
93 + refs.push(ident);
94 + }
95 + }
96 +
97 + return refs;
98 +}
99 +
100 +/**
101 + * @returns identifiers under @param path referencing bindings bound out of
102 + * @param scope.
103 + */
104 +export function getOuterScopedReferences(
105 + path: NodePath,
106 + scope: Scope
107 +): NodePath<t.Identifier>[] {
108 + const refs: NodePath<t.Identifier>[] = [];
109 +
110 + for (const ident of getReferences(path, false)) {
111 + if (isBoundAboveScope(ident, scope)) {
112 + refs.push(ident);
113 + }
114 + }
115 +
116 + return refs;
117 +}
118 +
119 +/**
120 + * @returns references to identifiers under @param path, including itself.
121 + * N.B. our notion of "references" (read and write) is broader than Babel's
122 + * "references" (only "read").
123 + */
124 +export function getReferences(
125 + path: NodePath,
126 + includesJSXIdent: false
127 +): NodePath<t.Identifier>[];
128 +
129 +export function getReferences(
130 + path: NodePath,
131 + includesJSXIdent?: true
132 +): NodePath<t.Identifier | t.JSXIdentifier>[];
133 +
134 +export function getReferences(
135 + path: NodePath,
136 + includesJSXIdent: boolean = true
137 +): NodePath<t.Identifier | t.JSXIdentifier>[] {
138 + const refs: Set<NodePath<t.Identifier | t.JSXIdentifier>> = new Set();
139 +
140 + if (isReferencedIdentifier(path)) {
141 + refs.add(path);
142 + } else {
143 + // Babel actually supports `ReferencedIdentifer()` as virtual type but
144 + // it's not included in `@types`. In addition, we may needs to distinguish
145 + // normal identifiers and JSX identifiers in the future.
146 + path.traverse({
147 + Identifier(ident) {
148 + if (isReferencedIdentifier(ident)) {
149 + refs.add(ident);
150 + }
151 + },
152 + JSXIdentifier(jsxIdent) {
153 + if (includesJSXIdent && jsxIdent.isReferencedIdentifier()) {
154 + refs.add(jsxIdent);
155 + }
156 + },
157 + });
158 +
159 + /**
160 + * We also need to include "writes" in {@link Binding.constantViolations}
161 + * @see Val.ts {@link createBindingVal}. Note that the Identifiers recorded
162 + * here are unsound until {@link IR.Func.getScopedReferences} check against
163 + * with {@link Val.references}.
164 + *
165 + * Note that We don't need to patch `UpdateExpressions` since they are
166 + * already tracked as "read" too.
167 + */
168 + path.traverse({
169 + AssignmentExpression(expr) {
170 + const lhs = expr.get("left");
171 + // Typescript casts, since DefinitelyTyped is missing this class function
172 + invariant(
173 + lhs.getOuterBindingIdentifiers != null,
174 + "Expected getOuterBindingIdentifiers to exist on NodePath"
175 + );
176 + const paths = (lhs as any).getOuterBindingIdentifierPaths() as {
177 + _: NodePath<t.Identifier>;
178 + };
179 + Object.values(paths).forEach((p) => refs.add(p));
180 + },
181 + });
182 + }
183 +
184 + return [...refs];
185 +}
186 +
187 +// Older version of babel marks `FOO` in `{x: FOO}` as reference (https://github.com/babel/babel/pull/9492/)
188 +function isReferencedIdentifier(
189 + path: NodePath<t.Node>
190 +): path is NodePath<t.Identifier | t.JSXIdentifier> {
191 + if (
192 + !path.isReferencedIdentifier() ||
193 + t.isObjectPattern(path.parentPath.parentPath)
194 + ) {
195 + return false;
196 + }
197 + return true;
198 +}
199 +
200 +/**
201 + * Collect all Identifiers targeted by a normal / destructuring assignment.
202 + * We ignore IDENT in the majority of cases. These do not necessarily mutate
203 + * any bound identifiers
204 + * - `call(IDENT)`, or `new IDENT` expressions
205 + * (new Foo(immut.x)).bar = 0;
206 + * foo(immut.x).bar = 0;
207 + * - all "primary expressions" except for IdentifierReference
208 + * - e.g. literals, classes, functions, generators
209 + * (function foo(){}).bar = 0;
210 + * (class foo{}).bar = 0;
211 + *
212 + * https://tc39.es/ecma262/#sec-destructuring-assignment
213 + * https://tc39.es/ecma262/#prod-LeftHandSideExpression
214 + **/
215 +export function getAssignmentTargets(
216 + expr: NodePath<babel.types.Node>
217 +): Set<NodePath<t.Identifier>> {
218 + const refs = new Set<NodePath<t.Identifier>>();
219 + type NotArray<T> = T extends Array<unknown> ? never : T;
220 +
221 + function toArray<T>(o: NotArray<T> | T[]): T[] {
222 + return Array.isArray(o) ? o : [o];
223 + }
224 + function collectIdent(
225 + elem: NodePath<babel.types.Node>,
226 + { inDestructure }: { inDestructure: boolean }
227 + ) {
228 + if (elem.isIdentifier()) {
229 + // collect found identifier
230 + refs.add(elem);
231 + } else if (elem.isMemberExpression() || elem.isOptionalMemberExpression()) {
232 + // recursively visit OBJ_PATH in OBJ_PATH.prop, OBJ_PATH?.prop
233 + toArray(elem.get("object")).forEach((elem) => {
234 + collectIdent(elem, { inDestructure: false });
235 + });
236 + } else if (elem.isArrayPattern()) {
237 + // recursively visit OBJ1, OBJ2 in [OBJ1, OBJ2]
238 + elem.get("elements").forEach((elem) => {
239 + if (elem.node != null)
240 + collectIdent(elem as NodePath<babel.types.Node>, {
241 + inDestructure: true,
242 + });
243 + });
244 + } else if (elem.isObjectPattern()) {
245 + // recursively visit VAL1, VAL2 in {key1: VAL1, key2: VAL2}
246 + elem.get("properties").forEach((elem) => {
247 + if (elem.type === "ObjectProperty") {
248 + collectIdent(elem.get("value") as NodePath, {
249 + inDestructure: true,
250 + });
251 + } else {
252 + collectIdent(elem.get("argument") as NodePath, {
253 + inDestructure: false,
254 + });
255 + }
256 + });
257 + } else if (inDestructure && elem.isAssignmentPattern()) {
258 + // recursively visit LVAL=val
259 + collectIdent(elem.get("left"), { inDestructure: false });
260 + }
261 + }
262 + collectIdent(expr, { inDestructure: false });
263 + return refs;
264 +}
265 +
266 +/**
267 + * @returns whethor or not @param ident is bound to @param scope.
268 + *
269 + * Babel's {@link hasBinding} and {@link hasOwnBinding} are insufficient when
270 + * shadowing came into play, so we perform a stronger check by checking if
271 + * a scope chain look up would be same as direct own scope lookup.
272 + */
273 +export function isBoundOnScope(
274 + ident: NodePath<t.Identifier | t.JSXIdentifier>,
275 + scope: Scope
276 +): boolean {
277 + const bindingFromLookup = ident.scope.getBinding(ident.node.name);
278 + const bindingFromScope = scope.getOwnBinding(ident.node.name);
279 +
280 + if (!bindingFromScope || !bindingFromLookup) return false;
281 +
282 + return bindingFromLookup === bindingFromScope;
283 +}
284 +
285 +export function isBoundAboveScope(
286 + ident: NodePath<t.Identifier | t.JSXIdentifier>,
287 + scope: Scope
288 +): boolean {
289 + const bindingFromLookup = ident.scope.getBinding(ident.node.name);
290 + if (!bindingFromLookup) {
291 + invariant(
292 + ident.scope.hasGlobal(ident.node.name),
293 + `sanity check ${ident.node.name}`
294 + );
295 + return true;
296 + }
297 + let top = bindingFromLookup?.scope.getProgramParent();
298 + let curScope = bindingFromLookup.scope;
299 +
300 + while (curScope !== top) {
301 + if (curScope === scope) return false;
302 + curScope = curScope.parent;
303 + }
304 + return true;
305 +}
306 +
307 +/**
308 + * @returns whether or not @param expr is considered allocating (unstable).
309 + * TODO: we should do this recursively over compound expressions.
310 + */
311 +export function isAllocatingExpr(expr: NodePath<t.Expression>): boolean {
312 + return (
313 + expr.isObjectExpression() ||
314 + expr.isArrayExpression() ||
315 + expr.isFunctionExpression() ||
316 + expr.isArrowFunctionExpression() ||
317 + expr.isClassExpression() ||
318 + expr.isNewExpression() ||
319 + expr.isJSXElement() ||
320 + expr.isJSXFragment() ||
321 + expr.isRegExpLiteral() ||
322 + expr.isCallExpression() ||
323 + expr.isOptionalCallExpression() ||
324 + expr.isTemplateLiteral()
325 + );
326 +}
327 +
328 +/**
329 + * Unlike `t.Function`, this excludes `ClassMethod` and `ClassPrivateMethod`
330 + */
331 +export type NonMethodFunction =
332 + | t.FunctionDeclaration
333 + | t.FunctionExpression
334 + | t.ObjectMethod
335 + | t.ArrowFunctionExpression;
336 +
337 +export function isNonMethodFunction(
338 + node: object | null | undefined,
339 + opts?: object | null
340 +): node is NonMethodFunction {
341 + return (
342 + t.isFunctionDeclaration(node, opts) ||
343 + t.isFunctionExpression(node, opts) ||
344 + t.isObjectMethod(node, opts) ||
345 + t.isArrowFunctionExpression(node, opts)
346 + );
347 +}
348 +
349 +export function isNonMethodFunctionPath(
350 + path: NodePath,
351 + opts?: object | null
352 +): path is NodePath<NonMethodFunction> {
353 + return isNonMethodFunction(path.node, opts);
354 +}
compiler/forget/src/IR/index.ts new
+31
@@ -0,0 +1,31 @@
1 +/**
2 + * Copyright (c) Facebook, Inc. and its affiliates.
3 + *
4 + * This source code is licensed under the MIT license found in the
5 + * LICENSE file in the root directory of this source tree.
6 + */
7 +
8 +/**
9 + * The IR in the compiler, or "React IR".
10 + *
11 + * The purpose of IR is to represent the program in the way to help with
12 + * static analysis (e.g. mutability of values, dependencies between values).
13 + *
14 + * Each IR function is lowered from an (inferred) React function.
15 + */
16 +
17 +export * from "./Func";
18 +export * from "./FuncTopLevel";
19 +export {
20 + Hook,
21 + HookCall,
22 + HookCallExpr,
23 + HookKind,
24 + HookSig,
25 + isHookLikeName,
26 + matchHookCall,
27 +} from "./Hook";
28 +export * from "./JSX";
29 +export * from "./Prog";
30 +export * from "./Val";
31 +export * from "./ValSnapshot";
compiler/forget/src/LIR/Block.ts new
+163
@@ -0,0 +1,163 @@
1 +/**
2 + * Copyright (c) Facebook, Inc. and its affiliates.
3 + *
4 + * This source code is licensed under the MIT license found in the
5 + * LICENSE file in the root directory of this source tree.
6 + */
7 +import * as IR from "../IR";
8 +import { Instr } from "./Instr";
9 +
10 +/**
11 + * LIR Block.
12 + *
13 + * TODO: revisit this notion and explore the idea of organizing the LIR
14 + * differently (as a tree of "Reactive Scope"):
15 + * - React Func
16 + * - Prologue
17 + * - Input section
18 + * - ReactiveScope (Func.inputs)
19 + * - Instr*
20 + * - ReactiveScope (Instr.inputs)
21 + * - Instr*
22 + * - ReactiveScope
23 + * Where
24 + * type SchedulerUnit = Instr | ReactiveScope
25 + */
26 +export interface Block {
27 + kind: BlockKind;
28 + body: Instr[];
29 +}
30 +
31 +export enum BlockKind {
32 + /**
33 + * {@link RenderBlock} are code that are reactive on their parental reactive
34 + * scope, which is often their containing react functions.
35 + *
36 + * They are generated as-is and are unconditioanlly evaluated every render.
37 + * Such blocks are "unmemoized" in terms of auto-memoization.
38 + */
39 + Render,
40 +
41 + /**
42 + * {@link ReactiveBlock} are code that can be reactive on a smaller subset of
43 + * inputs, i.e. they create their own new reactive scope.
44 + *
45 + * They are generated as being wrapped under a conditional so that they are
46 + * only re-evaluated if their reactive inputs has changed.
47 + *
48 + * Such blocks are "memoized" for auto-memoization, but they are also going to
49 + * be used by reactive effects, etc.
50 + */
51 + Reactive,
52 +}
53 +
54 +export interface RenderBlock extends Block {
55 + kind: BlockKind.Render;
56 +}
57 +
58 +export const isRenderBlock = (block: Block): block is RenderBlock =>
59 + block.kind === BlockKind.Render;
60 +
61 +export function createRenderBlock(instr: Instr): RenderBlock {
62 + return {
63 + kind: BlockKind.Render,
64 + body: [instr],
65 + };
66 +}
67 +
68 +export interface ReactiveBlock extends Block {
69 + kind: BlockKind.Reactive;
70 +
71 + /**
72 + * The set of reactive values invalidates this block.
73 + */
74 + inputs: Set<IR.ReactiveVal>;
75 +
76 + /**
77 + * The set of declarations included in this block.
78 + */
79 + outputDecls: Set<IR.BindingVal>;
80 +
81 + /**
82 + * The set of definitions produced by this block.
83 + */
84 + outputs: Set<IR.BindingVal>;
85 +
86 + /**
87 + * TODO: an fusion optimization can merge other {@link ReactiveBlock} as
88 + * its children to save comparsion.
89 + */
90 + subBlocks: Block[];
91 +
92 + emit(instr: Instr): void;
93 +}
94 +
95 +export function isReactiveBlock(b: Block): b is ReactiveBlock {
96 + return b.kind === BlockKind.Reactive;
97 +}
98 +
99 +export function createReactiveBlock(
100 + inputs: Set<IR.ReactiveVal>
101 +): ReactiveBlock {
102 + return {
103 + kind: BlockKind.Reactive,
104 + body: [],
105 + emit(this: ReactiveBlock, instr: Instr) {
106 + this.body.push(instr);
107 +
108 + for (const decl of instr.ir.decls) {
109 + this.outputDecls.add(decl);
110 + }
111 +
112 + // Add all non-input defs (decls and mutable uses) as outputs.
113 + for (const def of instr.ir.defs) {
114 + if (IR.isBindingVal(def) && !IR.isInputVal(def)) {
115 + this.outputs.add(def);
116 + }
117 + }
118 + },
119 + inputs,
120 + outputDecls: new Set(),
121 + outputs: new Set(),
122 + subBlocks: [],
123 + };
124 +}
125 +
126 +/**
127 + * @returns all uses of a @param block
128 + */
129 +export function getAllUses(block: Block): Set<IR.Val> {
130 + const res = new Set<IR.Val>();
131 + for (const instr of block.body) {
132 + for (const use of instr.ir.uses) {
133 + res.add(use.val);
134 + }
135 + }
136 + return res;
137 +}
138 +
139 +/**
140 + * @returns all definitions of a @param block
141 + */
142 +export function getAllDefs(block: Block): Set<IR.Val> {
143 + const res = new Set<IR.Val>();
144 + for (const instr of block.body) {
145 + for (const def of instr.ir.defs) {
146 + res.add(def);
147 + }
148 + }
149 + return res;
150 +}
151 +
152 +/**
153 + * @returns all declared values of a @param block
154 + */
155 +export function getAllDecls(block: Block): Set<IR.Val> {
156 + const res = new Set<IR.Val>();
157 + for (const instr of block.body) {
158 + for (const def of instr.ir.decls) {
159 + res.add(def);
160 + }
161 + }
162 + return res;
163 +}
compiler/forget/src/LIR/Func.ts new
+35
@@ -0,0 +1,35 @@
1 +/**
2 + * Copyright (c) Facebook, Inc. and its affiliates.
3 + *
4 + * This source code is licensed under the MIT license found in the
5 + * LICENSE file in the root directory of this source tree.
6 + */
7 +
8 +import * as IR from "../IR";
9 +import { Block } from "./Block";
10 +import { createMemoCache, MemoCache } from "./MemoCache";
11 +
12 +/**
13 + * LIR Function.
14 + */
15 +export class Func {
16 + // React IR
17 + ir: IR.Func;
18 + hasSingleReturnPath: boolean;
19 +
20 + blocks: Block[] = [];
21 +
22 + // The associated memoization cache IR.
23 + memoCache: MemoCache = createMemoCache();
24 +
25 + constructor(ir: IR.Func) {
26 + this.ir = ir;
27 + this.hasSingleReturnPath =
28 + (!ir.isImplicitReturn && ir.returnCount == 1) ||
29 + (ir.isImplicitReturn && ir.returnCount == 0);
30 + }
31 +
32 + addBlock(block: Block): void {
33 + this.blocks.push(block);
34 + }
35 +}
compiler/forget/src/LIR/Instr.ts new
+70
@@ -0,0 +1,70 @@
1 +/**
2 + * Copyright (c) Facebook, Inc. and its affiliates.
3 + *
4 + * This source code is licensed under the MIT license found in the
5 + * LICENSE file in the root directory of this source tree.
6 + */
7 +import type { NodePath } from "@babel/traverse";
8 +import * as t from "@babel/types";
9 +import * as IR from "../IR";
10 +
11 +/**
12 + * LIR Instruction.
13 + *
14 + * This is a thin abstraction over {@link IR.FuncTopLevel} to help with
15 + * reorder/reoganizing/rescheduling them into {@link LIR.Block} for code gen.
16 + */
17 +export class Instr {
18 + ir: IR.FuncTopLevel;
19 + ast: NodePath<t.Statement>;
20 +
21 + /**
22 + * The set of reactive values invalidates this instr.
23 + */
24 + inputs: Set<IR.ReactiveVal>;
25 +
26 + constructor(topLevel: IR.FuncTopLevel, irFunc: IR.Func) {
27 + this.ir = topLevel;
28 + this.ast = topLevel.ast;
29 + this.inputs = new Set<IR.ReactiveVal>();
30 +
31 + // Iterating over decls and uses of Instr to collect their inputs.
32 + topLevel.decls.forEach((def) =>
33 + irFunc.depGraph
34 + .getOrCreateVertex(def)
35 + .inputs.forEach((val) => this.inputs.add(val))
36 + );
37 + topLevel.uses.forEach((ref) =>
38 + irFunc.depGraph
39 + .getOrCreateVertex(ref.val)
40 + .inputs.forEach((val) => this.inputs.add(val))
41 + );
42 + }
43 +
44 + /**
45 + * @return whether or not this instr is required every render.
46 + *
47 + * This is defined as whether or not the block has inputs or
48 + * contains any hook calls.
49 + */
50 + isRequiredEveryRender(): boolean {
51 + return (
52 + this.ir.hookCalls.length > 0 ||
53 + this.ir.decls.some((bVal) => IR.isInputVal(bVal))
54 + );
55 + }
56 +
57 + /**
58 + * @return whether or not a body item is considered exitable e.g. early return
59 + */
60 + isExitable(): boolean {
61 + return this.ir.returnStmts.size > 0;
62 + }
63 +
64 + /**
65 + * @return whether or not a body item is considered "pinned".
66 + */
67 + isPinned(): boolean {
68 + return this.isExitable();
69 + }
70 +}
compiler/forget/src/LIR/MemoCache.ts new
+175
@@ -0,0 +1,175 @@
1 +/**
2 + * Copyright (c) Facebook, Inc. and its affiliates.
3 + *
4 + * This source code is licensed under the MIT license found in the
5 + * LICENSE file in the root directory of this source tree.
6 + */
7 +
8 +import * as IR from "../IR";
9 +
10 +/**
11 + * The Memoization Cache, or MemoCache.
12 + *
13 + * This is the compile-time abstraction device of the runtime memoCache that
14 + * we'll allocate from `React.useMemoCache` hooks for each React functions.
15 + */
16 +
17 +export enum EntryKind {
18 + Fixed = "FIXED",
19 + Reactive = "REACTIVE",
20 + Local = "LOCAL",
21 + Expr = "EXPR",
22 +}
23 +
24 +/**
25 + * MemoCache entries are allocated in the {@link MemoCacheAlloc} pass.
26 + * They are tagged union of three kinds:
27 + */
28 +export interface Entry {
29 + kind: EntryKind;
30 + value: IR.Val | Symbol;
31 + index: number;
32 +}
33 +
34 +/**
35 + * 0. fixed overhead.
36 + */
37 +export interface FixedEntry extends Entry {
38 + kind: EntryKind.Fixed;
39 + value: Symbol;
40 +}
41 +
42 +/**
43 + * 1. used to cache every reactive values.
44 + */
45 +export interface ReactiveEntry extends Entry {
46 + kind: EntryKind.Reactive;
47 + value: IR.ReactiveVal;
48 +}
49 +
50 +/**
51 + * 2. used to cache intermediate non-reactive local bindings.
52 + */
53 +export interface LocalEntry extends Entry {
54 + kind: EntryKind.Local;
55 + value: IR.BindingVal;
56 +}
57 +
58 +/**
59 + * 3. used to cache intermediate (inlined) expressions.
60 + */
61 +export interface ExprEntry extends Entry {
62 + kind: EntryKind.Expr;
63 + value: IR.ExprVal;
64 +}
65 +
66 +export const isReactiveEntry = (entry: Entry): entry is ReactiveEntry =>
67 + entry.kind === EntryKind.Reactive;
68 +
69 +export const isLocalEntry = (entry: Entry): entry is LocalEntry =>
70 + entry.kind === EntryKind.Local;
71 +
72 +export const isExprEntry = (entry: Entry): entry is ExprEntry =>
73 + entry.kind === EntryKind.Expr;
74 +
75 +export const isFixedEntry = (entry: Entry): entry is FixedEntry =>
76 + entry.kind === EntryKind.Fixed;
77 +
78 +export type EntryKey = IR.Val | Symbol;
79 +
80 +export const BAD_INDEX = -1;
81 +
82 +const retValSym = Symbol.for("ret");
83 +const retIdxSym = Symbol.for("ret_idx");
84 +
85 +/**
86 + * A compilation environment is a fancy way to say a bookkeeping that associates
87 + * part of the program (in this case, `props`, `state` variables and `refs`) to
88 + * some compile-time metadata (in this case, the memoCache {@link Entry}).
89 + */
90 +export class MemoCache {
91 + /**
92 + * The underlying entries of the environment
93 + */
94 + entries: Map<EntryKey, Entry>;
95 + retValPos: number | null;
96 + retIdxPos: number | null;
97 +
98 + constructor() {
99 + this.entries = new Map();
100 + this.retValPos = null;
101 + this.retIdxPos = null;
102 + }
103 +
104 + get size() {
105 + return this.entries.size;
106 + }
107 +
108 + alloc(key: EntryKey, entry: Entry) {
109 + this.entries.set(key, entry);
110 + }
111 +
112 + allocRetVal() {
113 + const entry: FixedEntry = {
114 + kind: EntryKind.Fixed,
115 + value: retValSym,
116 + index: BAD_INDEX,
117 + };
118 + this.alloc(retValSym, entry);
119 + }
120 +
121 + allocRetIdx() {
122 + const entry: FixedEntry = {
123 + kind: EntryKind.Fixed,
124 + value: retIdxSym,
125 + index: BAD_INDEX,
126 + };
127 + this.alloc(retIdxSym, entry);
128 + }
129 +
130 + allocReactive(val: IR.ReactiveVal) {
131 + const entry: ReactiveEntry = {
132 + kind: EntryKind.Reactive,
133 + value: val,
134 + index: BAD_INDEX,
135 + };
136 + this.alloc(val, entry);
137 + }
138 +
139 + allocLocal(val: IR.BindingVal) {
140 + const entry: LocalEntry = {
141 + kind: EntryKind.Local,
142 + value: val,
143 + index: BAD_INDEX,
144 + };
145 + this.alloc(val, entry);
146 + }
147 +
148 + allocExpr(val: IR.ExprVal) {
149 + const entry: ExprEntry = {
150 + kind: EntryKind.Expr,
151 + value: val,
152 + index: BAD_INDEX,
153 + };
154 + this.alloc(val, entry);
155 + }
156 +
157 + /**
158 + * Optimizations over LIR have freedom to manipulate the {@link entries} and
159 + * during that process index may change.
160 + *
161 + * This function is intended to be called right before code generation to
162 + * finalize the index in codegen.
163 + */
164 + finializeIndices(this: MemoCache) {
165 + [...this.entries.values()].forEach((entry, index) => {
166 + entry.index = index;
167 + });
168 + this.retValPos = this.entries.get(retValSym)?.index ?? null;
169 + this.retIdxPos = this.entries.get(retIdxSym)?.index ?? null;
170 + }
171 +}
172 +
173 +export function createMemoCache(): MemoCache {
174 + return new MemoCache();
175 +}
compiler/forget/src/LIR/PrettyPrinter.ts new
+155
@@ -0,0 +1,155 @@
1 +/**
2 + * Copyright (c) Facebook, Inc. and its affiliates.
3 + *
4 + * This source code is licensed under the MIT license found in the
5 + * LICENSE file in the root directory of this source tree.
6 + */
7 +
8 +import generate from "@babel/generator";
9 +import * as t from "@babel/types";
10 +import invariant from "invariant";
11 +import * as LIR from ".";
12 +import { assertExhaustive } from "../Common/utils";
13 +import * as IR from "../IR";
14 +import {
15 + addComments,
16 + renameReactiveVal,
17 + revertAddComments,
18 + revertRenameReactiveVal,
19 +} from "../IR/PrettyPrinter";
20 +import {
21 + EntryKind,
22 + isExprEntry,
23 + isFixedEntry,
24 + isLocalEntry,
25 + isReactiveEntry,
26 +} from "./MemoCache";
27 +
28 +export default function prettyPrint(lirFunc: LIR.Func) {
29 + renameReactiveVal(lirFunc.ir);
30 +
31 + const commentedNodes: t.Node[] = [];
32 + addComments(lirFunc.ir, commentedNodes, lirFunc);
33 +
34 + const prettyAST = buildPrettyAST(lirFunc, commentedNodes);
35 + const babelOutput = generate(prettyAST, { concise: true }).code;
36 +
37 + revertRenameReactiveVal(lirFunc.ir);
38 + revertAddComments(commentedNodes);
39 +
40 + return babelOutput;
41 +}
42 +
43 +/**
44 + * Build an @returns AST for pretty printing to avoid mutating
45 + * the original AST.
46 + */
47 +function buildPrettyAST(lirFunc: LIR.Func, commentedNodes: t.Node[]) {
48 + const funcNode = lirFunc.ir.ast.node;
49 +
50 + let name: t.Identifier | undefined;
51 + if ("id" in funcNode && funcNode.id) name = funcNode.id;
52 + else if (lirFunc.ir.name) name = t.identifier(lirFunc.ir.name.toString());
53 +
54 + if (name) {
55 + const commentedNode = t.addComment(name, "leading", lirFunc.ir.kind);
56 + commentedNodes.push(commentedNode);
57 + }
58 +
59 + const params = funcNode.params;
60 + const body = lirFunc.ir.ast.get("body");
61 +
62 + // See {@link ReactFuncsInfer} for the reason.
63 + if (!body.isBlockStatement()) throw new Error("unreachable");
64 + const directives = body.node.directives;
65 +
66 + const stmts: t.Statement[] = [genPrologue(lirFunc)];
67 +
68 + lirFunc.blocks.forEach((block) => {
69 + // Convert ReactiveBlock into IfStatements with a label of outputs
70 + if (LIR.isReactiveBlock(block)) {
71 + const callExpr = t.callExpression(
72 + t.identifier("$$"),
73 + [...block.inputs].map((reactiveVal) =>
74 + // Must clone since it seems comments are only attached to one
75 + // instance of the same node, regardless of how many references exist.
76 + // Same with the following cases.
77 + t.cloneNode(reactiveVal.binding.identifier)
78 + )
79 + );
80 +
81 + const blockStmt = t.blockStatement(
82 + block.body.map((instr) => instr.ast.node)
83 + );
84 +
85 + const ifStmt = t.ifStatement(callExpr, blockStmt);
86 +
87 + const blockOutputs = block.outputs;
88 +
89 + if (blockOutputs.size !== 0) {
90 + const outputIdents = [...blockOutputs].map((o) =>
91 + t.cloneNode(o.binding.identifier)
92 + );
93 +
94 + stmts.push(
95 + t.labeledStatement(
96 + t.identifier("$"),
97 + t.expressionStatement(t.sequenceExpression(outputIdents))
98 + )
99 + );
100 + }
101 +
102 + stmts.push(ifStmt);
103 + }
104 + // RenderBlock
105 + else {
106 + const subStmts = block.body.map((instr) => instr.ast.node);
107 + stmts.push(...subStmts);
108 + }
109 + });
110 +
111 + const ast = t.functionDeclaration(
112 + name ?? t.identifier("_anno"),
113 + params,
114 + t.blockStatement(stmts, directives)
115 + );
116 +
117 + return ast;
118 +}
119 +
120 +function genPrologue(lirFunc: LIR.Func): t.Statement {
121 + const memoCacheArray: t.Identifier[] = [];
122 +
123 + [...lirFunc.memoCache.entries.values()].forEach((e) => {
124 + let ident;
125 +
126 + switch (e.kind) {
127 + case EntryKind.Fixed:
128 + invariant(isFixedEntry(e), "");
129 + ident = t.identifier(e.value.toString());
130 + break;
131 + case EntryKind.Expr:
132 + invariant(isExprEntry(e), "");
133 + ident = t.identifier(IR.formatValKind(e.value).toLowerCase());
134 + t.addComment(ident, "leading", e.value.toLoc());
135 + break;
136 + case EntryKind.Reactive:
137 + case EntryKind.Local:
138 + invariant(isReactiveEntry(e) || isLocalEntry(e), "");
139 + ident = t.cloneNode(e.value.binding.identifier);
140 + break;
141 + default:
142 + assertExhaustive(e.kind, `Unhandled Entry ${e}`);
143 + }
144 +
145 + memoCacheArray.push(ident);
146 + });
147 +
148 + return t.expressionStatement(
149 + t.assignmentExpression(
150 + "=",
151 + t.identifier("$"),
152 + t.arrayExpression(memoCacheArray)
153 + )
154 + );
155 +}
compiler/forget/src/LIR/Prog.ts new
+26
@@ -0,0 +1,26 @@
1 +/**
2 + * Copyright (c) Facebook, Inc. and its affiliates.
3 + *
4 + * This source code is licensed under the MIT license found in the
5 + * LICENSE file in the root directory of this source tree.
6 + */
7 +
8 +import * as IR from "../IR";
9 +import { Func } from "./Func";
10 +
11 +export class Prog {
12 + ir: IR.Prog;
13 +
14 + funcs: Map<IR.Func, Func> = new Map();
15 +
16 + constructor(ir: IR.Prog) {
17 + this.ir = ir;
18 + }
19 +
20 + /**
21 + * @return whether or not this prog needs to import useMemoCache.
22 + */
23 + importUseMemoCache(): boolean {
24 + return this.funcs.size > 0;
25 + }
26 +}
compiler/forget/src/LIR/index.ts new
+18
@@ -0,0 +1,18 @@
1 +/**
2 + * Copyright (c) Facebook, Inc. and its affiliates.
3 + *
4 + * This source code is licensed under the MIT license found in the
5 + * LICENSE file in the root directory of this source tree.
6 + */
7 +
8 +/**
9 + * The LIR (Low-level IR) in the compiler.
10 + *
11 + * Each LIR function is lowered from an IR function
12 + */
13 +
14 +export * from "./Block";
15 +export * from "./Func";
16 +export * from "./Instr";
17 +export * as MemoCache from "./MemoCache";
18 +export * from "./Prog";
compiler/forget/src/Logger.ts new
+85
@@ -0,0 +1,85 @@
1 +/**
2 + * Copyright (c) Facebook, Inc. and its affiliates.
3 + *
4 + * This source code is licensed under the MIT license found in the
5 + * LICENSE file in the root directory of this source tree.
6 + */
7 +
8 +import * as t from "@babel/types";
9 +import { ErrorCode } from "./Diagnostic";
10 +import * as IR from "./IR";
11 +
12 +/**
13 + * Interface to log from the Babel plugin. In environments where we cannot
14 + * log to stdout/stderr this makes it easy to disable.
15 + */
16 +export interface Logger {
17 + warn(message: string): void;
18 + error(message: string): void;
19 + logEvent(event: LogEvent): void;
20 +}
21 +
22 +/**
23 + * Define events that need to be logged
24 + */
25 +type LogEvent =
26 + | {
27 + name: "bailout";
28 + reason: string;
29 + }
30 + | {
31 + name: "registerReactFunc";
32 + flags: { name: IR.Name; kind: IR.FuncKind };
33 + }
34 + | {
35 + name: "diagnostics";
36 + opts: {
37 + code: ErrorCode;
38 + loc: t.SourceLocation | null;
39 + };
40 + }
41 + | {
42 + name: "matchHookCall";
43 + kind: IR.HookKind;
44 + };
45 +
46 +/**
47 + * Logs to `console`.
48 + */
49 +export const consoleLogger: Logger = {
50 + warn(message: string) {
51 + console.warn(message);
52 + },
53 + error(message: string) {
54 + console.error(message);
55 + },
56 + logEvent(_event: LogEvent) {},
57 +};
58 +
59 +/**
60 + * Logs to an in memory array.
61 + *
62 + * @param logs Logs are written to this array.
63 + */
64 +export function createArrayLogger(logs: Array<string>): Logger {
65 + return {
66 + warn(message: string) {
67 + logs.push(`[WARNING] ${message}`);
68 + },
69 +
70 + error(message: string) {
71 + logs.push(`[ERROR] ${message}`);
72 + },
73 +
74 + logEvent(_event: LogEvent) {},
75 + };
76 +}
77 +
78 +/**
79 + * Does not log anything.
80 + */
81 +export const noopLogger: Logger = {
82 + warn(_message: string) {},
83 + error(_message: string) {},
84 + logEvent(_event: LogEvent) {},
85 +};
compiler/forget/src/MiddleEnd/BodyAnalysis.ts new
+284
@@ -0,0 +1,284 @@
1 +/**
2 + * Copyright (c) Facebook, Inc. and its affiliates.
3 + *
4 + * This source code is licensed under the MIT license found in the
5 + * LICENSE file in the root directory of this source tree.
6 + */
7 +
8 +import type { NodePath } from "@babel/traverse";
9 +import * as t from "@babel/types";
10 +import type { CompilerContext } from "../CompilerContext";
11 +import { invariant } from "../CompilerError";
12 +import * as IR from "../IR";
13 +import { isJSXTagVal } from "../IR";
14 +import { hasMultipleReturn } from "../IR/Func";
15 +import { PassKind, PassName } from "../Pass";
16 +
17 +/**
18 + * Body Analysis
19 + *
20 + * This middle end analyze the "FunctionBody" position of react func to collect
21 + * each "FunctionStatementList" item as {@link IR.FuncTopLevel} and resolve
22 + * hooks calls as {@link React.HookCall}.
23 + */
24 +export default {
25 + name: PassName.BodyAnalysis,
26 + kind: PassKind.IRFunc as const,
27 + run,
28 +};
29 +
30 +export function run(
31 + irFunc: IR.Func,
32 + func: NodePath<t.Function>,
33 + context: CompilerContext
34 +) {
35 + const funcBody = func.get("body");
36 +
37 + invariant(
38 + funcBody.isBlockStatement(),
39 + "ReactFuncsInfer ruled out expression-body functions."
40 + );
41 +
42 + funcBody.traverse({
43 + // FunctionBody: FunctionStatementList: StatementListItem
44 + Statement(stmt) {
45 + // Traverse only top-level statement list items.
46 + stmt.skip();
47 +
48 + let topLevel = new IR.FuncTopLevel(stmt, irFunc.env);
49 + irFunc.body.push(topLevel);
50 +
51 + visitHookCalls(topLevel);
52 + visitDerivedImmutables(topLevel);
53 + visitJSX(topLevel);
54 + visitArgumentsObject(topLevel);
55 + collectExits(topLevel);
56 + checkBlock(topLevel);
57 + },
58 + });
59 +
60 + if (context.opts.flags.bailOnMultipleReturns && hasMultipleReturn(irFunc)) {
61 + context.bailout("BailOnMultipleReturns", {
62 + code: "E0011",
63 + path: null,
64 + context: null,
65 + });
66 + }
67 +
68 + /**
69 + * Sanity check.
70 + */
71 + function checkBlock(topLevel: IR.FuncTopLevel) {
72 + if (topLevel.isDecl) {
73 + invariant(
74 + topLevel.returnStmts.size === 0,
75 + "Decl won't return: %s",
76 + topLevel.ast.node
77 + );
78 + } else {
79 + invariant(
80 + topLevel.decls.length === 0,
81 + "Only Decl can produce decls: %s",
82 + topLevel.ast.node
83 + );
84 + }
85 + }
86 +
87 + /**
88 + * Visit JSX in @param topLevel
89 + */
90 + function visitJSX(topLevel: IR.FuncTopLevel) {
91 + topLevel.ast.traverse({
92 + JSXElement(jsxEle) {
93 + visitJSXTag(jsxEle);
94 + },
95 + JSXFragment(jsxFrag) {
96 + visitJSXTag(jsxFrag);
97 + },
98 + });
99 +
100 + function visitJSXTag(rootTag: NodePath<IR.JSXTag>) {
101 + rootTag.skip();
102 +
103 + const rootVal = new IR.JSXTreeBuilder(rootTag, irFunc).build();
104 + collectExprInJSXTree(rootVal);
105 + topLevel.jsxTreeRoots.push(rootVal);
106 + }
107 +
108 + function collectExprInJSXTree(expr: IR.ExprVal) {
109 + irFunc.env.exprs.set(expr.ast.path, expr);
110 + topLevel.refsToExprs.push(expr.getRef());
111 +
112 + if (isJSXTagVal(expr)) {
113 + expr.children.forEach((subExpr) => collectExprInJSXTree(subExpr));
114 + }
115 + }
116 + }
117 +
118 + /**
119 + * Visit Hook-like CallExpressions in @param topLevel
120 + *
121 + * N.B. Same as {@link ReactFuncsInfer}, CallExpression are where we look
122 + * for hook calls.
123 + */
124 + function visitHookCalls(topLevel: IR.FuncTopLevel) {
125 + function visitHookCallExpr(call: NodePath<IR.HookCallExpr>) {
126 + function onInvalidHookNamespace(
127 + expression: t.Expression,
128 + isBuiltinHook: boolean
129 + ): void {
130 + if (isBuiltinHook) {
131 + context.bailout("BailOnBuiltinHookWithInvalidHookNamespace", {
132 + code: "E0016",
133 + path: call,
134 + context: null,
135 + });
136 + }
137 + if (isAllPascalCaseNameSpace(expression)) {
138 + context.bailout("BailOnValidHookNamespace", {
139 + code: "E0017",
140 + path: call,
141 + context: null,
142 + });
143 + }
144 + }
145 +
146 + const hookCall = IR.HookCall.resolve(call, onInvalidHookNamespace);
147 + if (hookCall) {
148 + if (
149 + context.opts.flags.bailOnUseRef &&
150 + hookCall.hook.kind === IR.HookKind.UseRef
151 + ) {
152 + context.bailout("BailOnUseRef", {
153 + code: "E0012",
154 + path: call,
155 + context: null,
156 + });
157 + }
158 + // Pattern matching and refine the return position.
159 + hookCall.matchRetVals(irFunc, context);
160 + topLevel.hookCalls.push(hookCall);
161 + }
162 + }
163 + topLevel.ast.traverse({
164 + CallExpression: visitHookCallExpr,
165 + OptionalCallExpression: visitHookCallExpr,
166 + });
167 + }
168 +
169 + /**
170 + * Visit VariableDeclarator to look for derived immutables.
171 + */
172 + function visitDerivedImmutables(topLevel: IR.FuncTopLevel) {
173 + topLevel.ast.traverse({
174 + VariableDeclarator(varDeclarator) {
175 + const lval = varDeclarator.get("id");
176 + const rhs = varDeclarator.get("init");
177 +
178 + if (rhs.isExpression()) {
179 + const from = isDerivedFromInput(rhs);
180 + if (from) {
181 + irFunc.env.getDeclsFrom(lval).forEach((val) => {
182 + IR.refineToDerivedImmutVal(val, from, true);
183 + });
184 + }
185 + }
186 + },
187 + });
188 +
189 + function isDerivedFromInput(
190 + expr: NodePath<t.Expression>
191 + ): IR.InputVal | undefined {
192 + // let x = INPUT
193 + if (expr.isIdentifier()) {
194 + const val = irFunc.env.decls.get(expr.node.name);
195 + if (val && IR.isInputVal(val)) return val;
196 + }
197 + // let x = INPUT.property
198 + if (expr.isMemberExpression()) {
199 + const obj = expr.get("object");
200 + if (obj.isIdentifier() || obj.isMemberExpression()) {
201 + return isDerivedFromInput(obj);
202 + }
203 + }
204 + return undefined;
205 + }
206 + }
207 +
208 + /**
209 + * Looking for `argument` object.
210 + */
211 + function visitArgumentsObject(topLevel: IR.FuncTopLevel) {
212 + topLevel.ast.traverse({
213 + Identifier(ident) {
214 + if (ident.node.name !== "arguments") return;
215 +
216 + // Bailout of handling the special arguments object.
217 + // OK, not actually arguments
218 + if (ident.parent) {
219 + // const foo = {arguments: 1}
220 + // class Foo {arguments = 1}
221 + const isProperty =
222 + t.isProperty(ident.parent) && ident.parent.key === ident.node;
223 + // a.arguments
224 + const isPropertyAccess =
225 + t.isMemberExpression(ident.parent) &&
226 + ident.parent.property === ident.node;
227 + // const foo = {arguments() {}}
228 + // class Foo {arguments() {}}
229 + const isMethod =
230 + (t.isClassMethod(ident.parent) || t.isObjectMethod(ident.parent)) &&
231 + ident.parent.key === ident.node;
232 + // class Foo {#arguments = 1}
233 + const isPrivate = t.isPrivateName(ident.parent);
234 +
235 + if (isProperty || isPropertyAccess || isMethod || isPrivate) return;
236 + }
237 +
238 + context.bailout("ArgumentsObject", {
239 + code: "E0020",
240 + path: ident,
241 + context: null,
242 + });
243 + },
244 + });
245 + }
246 +
247 + /**
248 + * Collect control flow exits.
249 + */
250 + function collectExits(topLevel: IR.FuncTopLevel) {
251 + const stmt = topLevel.ast;
252 + if (stmt.isReturnStatement()) {
253 + // Found top-level return.
254 + irFunc.isImplicitReturn = false;
255 + topLevel.returnStmts.set(stmt, irFunc.returnCount++);
256 + } else {
257 + stmt.traverse({
258 + ReturnStatement(ret) {
259 + if (ret.getFunctionParent() === irFunc.ast) {
260 + topLevel.returnStmts.set(ret, irFunc.returnCount++);
261 + }
262 + },
263 + });
264 + }
265 + }
266 +}
267 +
268 +// Detect benign cases of `A.B.C.useFoo()`
269 +function isAllPascalCaseNameSpace(expression: t.Expression): boolean {
270 + const isPascalCaseNameSpace = (ns: string) => /^[A-Z].*/.test(ns);
271 + if (t.isIdentifier(expression)) {
272 + return isPascalCaseNameSpace(expression.name);
273 + }
274 + if (t.isMemberExpression(expression)) {
275 + if (
276 + t.isIdentifier(expression.property) &&
277 + !isPascalCaseNameSpace(expression.property.name)
278 + ) {
279 + return false;
280 + }
281 + return isAllPascalCaseNameSpace(expression.object);
282 + }
283 + return false;
284 +}
compiler/forget/src/MiddleEnd/DepGraphAnalysis.ts new
+299
@@ -0,0 +1,299 @@
1 +/**
2 + * Copyright (c) Facebook, Inc. and its affiliates.
3 + *
4 + * This source code is licensed under the MIT license found in the
5 + * LICENSE file in the root directory of this source tree.
6 + */
7 +
8 +import type { NodePath } from "@babel/traverse";
9 +import * as t from "@babel/types";
10 +import { assertExhaustive } from "../Common/utils";
11 +import type { CompilerContext } from "../CompilerContext";
12 +import { invariant } from "../CompilerError";
13 +import { OutputKind } from "../CompilerOutputs";
14 +import { BlockId, buildCFG, CFG } from "../ControlFlowGraph";
15 +import * as DepGraph from "../DepGraph";
16 +import * as IR from "../IR";
17 +import { PassKind, PassName } from "../Pass";
18 +
19 +/**
20 + * Dependency Graph Analysis.
21 + *
22 + * This pass
23 + * 1. first constructs a {@link DepGraph.ValGraph} upon {@link IR.Func}.
24 + * 2. then condences the collceted ValGraph into {@link DepGraph.SCCGraph}.
25 + * 3. finally reduces the dependency relations of SCCGraph in-place to a
26 + * "invalidation table" via a topological iterative process.
27 + */
28 +export default {
29 + name: PassName.DepGraphAnalysis,
30 + kind: PassKind.IRFunc as const,
31 + run,
32 +};
33 +
34 +function run(
35 + irFunc: IR.Func,
36 + func: NodePath<t.Function>,
37 + context: CompilerContext
38 +) {
39 + const { outputKinds } = context.opts;
40 +
41 + const valGraph = irFunc.depGraph;
42 + populateValGraph(valGraph, irFunc);
43 + checkValGraph(valGraph);
44 +
45 + if (outputKinds.includes(OutputKind.ValGraph)) {
46 + context.outputs[OutputKind.ValGraph].push(valGraph.snapshot());
47 + }
48 +
49 + const sccGraph = valGraph.condense();
50 +
51 + if (outputKinds.includes(OutputKind.SCCGraph)) {
52 + context.outputs[OutputKind.SCCGraph].push(sccGraph.snapshot());
53 + }
54 +
55 + sccGraph.reduce();
56 +
57 + if (outputKinds.includes(OutputKind.RedGraph)) {
58 + context.outputs[OutputKind.RedGraph].push(sccGraph.snapshot());
59 + }
60 +}
61 +
62 +/**
63 + * Collect direct dependencies for the given @param irFunc and construct the
64 + * initial {@link DepGraph.ValGraph} according to syntax-directed rules.
65 + */
66 +function populateValGraph(valGraph: DepGraph.ValGraph, irFunc: IR.Func) {
67 + // Create vertices for params.
68 + for (const param of irFunc.params) {
69 + visitValDefSite(param);
70 + }
71 +
72 + /**
73 + * Pass over ir function body.
74 + *
75 + * Note: Creating vertices for {@link IR.FuncTopLevel} will form cycles. Instead,
76 + * their dependencies can be computed over their defs and uses. We'll compute
77 + * them later in the BackEnd for the sake of code reorganization.
78 + */
79 + for (const topLevel of irFunc.body) {
80 + /**
81 + * Each topLevel may generate 0 or more {@link Vertex} for each of its
82 + * declarations, e.g. a VariableDeclaration may have multiple VarDeclarators.
83 + */
84 + for (const decl of topLevel.decls) {
85 + visitValDefSite(decl);
86 + }
87 +
88 + /**
89 + * Each topLevel will establish dependencies between its "uses".
90 + * For every mutable refs used in the statement, conservatively assume that
91 + * they may be mutated by (therefore, depends on) all other referenced vals:
92 + */
93 + for (const mutableUse of topLevel.mutableUses) {
94 + const mutableRefVertex = valGraph.getOrCreateVertex(mutableUse.val);
95 + for (const otherUse of topLevel.uses) {
96 + // ignore exprVal.
97 + if (IR.isExprVal(otherUse.val)) continue;
98 + // ignore itself.
99 + if (otherUse.val !== mutableUse.val) {
100 + mutableRefVertex.addDependency(otherUse.val);
101 + }
102 + }
103 + }
104 +
105 + /**
106 + * Each toplevel may have multiple JSX tree which will establish
107 + * parent-children dependencnies within the tree nodes.
108 + */
109 + topLevel.jsxTreeRoots.forEach(visitJSXTag);
110 + function visitJSXTag(jsxTagVal: IR.JSXTagVal) {
111 + const v = valGraph.getOrCreateVertex(jsxTagVal);
112 + for (const child of jsxTagVal.children) {
113 + v.addDependency(child);
114 +
115 + if (IR.isJSXTagVal(child)) {
116 + visitJSXTag(child);
117 + } else {
118 + visitValDefSite(child);
119 + }
120 + }
121 + return v;
122 + }
123 + }
124 +
125 + const cfg = buildCFG(irFunc);
126 + const cfgControlDependencies = computeCfgControlDeps(irFunc, cfg);
127 + for (const [blockId, controlDeps] of cfgControlDependencies) {
128 + if (controlDeps.size === 0) {
129 + continue;
130 + }
131 + const basicBlock = cfg.blocks.get(blockId)!;
132 + basicBlock.parents.forEach((parent) => {
133 + for (const dep of controlDeps) {
134 + for (const use of parent.uses) {
135 + valGraph.getOrCreateVertex(use.val).addDependency(dep);
136 + }
137 + }
138 + });
139 + }
140 +
141 + /**
142 + * Visit the defintion site of the given @param val to collect other
143 + * referenced identifiers appeared syntactically during its initialization
144 + * as its dependencies. Such informations are captured by constructing a
145 + * fragment of {@link DepGraph} around the vertex associated with this
146 + * @param value.
147 + * @returns the vertex associated with the @param val
148 + */
149 + function visitValDefSite(
150 + val: IR.BindingVal | IR.ExprVal
151 + ): DepGraph.ValVertex {
152 + const vertex = irFunc.depGraph.getOrCreateVertex(val);
153 +
154 + // Inputs e.g. states are always recomputed on every render so there is
155 + // no need to collect their dependencies. e.g. it's safe to ignore edge
156 + // `p -> x` for `[x, setX] = useState(p)`.
157 + if (IR.isInputVal(val)) {
158 + // However, only unstable inputs need to be tracked as "roots" because
159 + // there is no need to "diff" stable values.
160 + if (IR.isReactiveVal(val)) vertex.refineToReactiveInput();
161 + }
162 +
163 + // Note: For VariableDeclaration, the binding.path is already
164 + // narrowed to only its own definitional VariableDeclarator.
165 + irFunc.env.getRefsToDeclsFrom(val.ast.path).map((ref) => {
166 + // Don't add Inputs to each other
167 + if (IR.isInputVal(val) && IR.isInputVal(ref.val)) return;
168 +
169 + vertex.addDependency(ref.val);
170 + });
171 +
172 + return vertex;
173 + }
174 +}
175 +
176 +function checkValGraph(valGraph: DepGraph.ValGraph) {
177 + for (const [val, vertex] of valGraph.vertices) {
178 + if (IR.isReactiveVal(val)) {
179 + invariant(
180 + vertex.inputs.size === 1 && vertex.inputs.has(val),
181 + "Input vertices must only contain itself."
182 + );
183 + }
184 + }
185 +}
186 +
187 +export function computeCfgControlDeps(
188 + irFunc: IR.Func,
189 + cfg: CFG
190 +): Map<BlockId, Set<IR.Val>> {
191 + const queue: Array<QueueEntry> = [
192 + { targetBlock: cfg.entry, dependencies: new Set() },
193 + ];
194 + const blockControlDeps: Map<BlockId, ControlDependencies> = new Map();
195 + while (queue.length !== 0) {
196 + const { targetBlock: blockId, dependencies: inputDeps } = queue.shift()!;
197 + let controlDeps = blockControlDeps.get(blockId) ?? null;
198 + if (controlDeps === null) {
199 + controlDeps = new ControlDependencies();
200 + controlDeps.addDependencies(inputDeps);
201 + blockControlDeps.set(blockId, controlDeps);
202 + } else {
203 + const hasChanges = controlDeps.addDependencies(inputDeps);
204 + if (!hasChanges) {
205 + continue;
206 + }
207 + }
208 +
209 + const nextDeps = controlDeps.getDependencies();
210 +
211 + const block = cfg.blocks.get(blockId)!;
212 + switch (block.terminal.kind) {
213 + case "if": {
214 + queue.push({
215 + targetBlock: block.terminal.consequent,
216 + dependencies: nextDeps,
217 + });
218 + queue.push({
219 + targetBlock: block.terminal.alternate,
220 + dependencies: nextDeps,
221 + });
222 + break;
223 + }
224 + case "switch": {
225 + for (const case_ of block.terminal.cases) {
226 + queue.push({
227 + targetBlock: case_.block,
228 + dependencies: nextDeps,
229 + });
230 + }
231 + break;
232 + }
233 + case "return":
234 + case "goto": {
235 + if (block.terminal.kind === "goto") {
236 + queue.push({
237 + targetBlock: block.terminal.block,
238 + dependencies: nextDeps,
239 + });
240 + }
241 + if (block.terminal.fallthrough !== null) {
242 + const { block: fallthroughBlock, tests } = block.terminal.fallthrough;
243 + (tests ?? []).forEach((test) => {
244 + irFunc.env.getRefsToDeclsFrom(test).forEach((ref) => {
245 + nextDeps.add(ref.val);
246 + });
247 + });
248 + queue.push({
249 + targetBlock: fallthroughBlock,
250 + dependencies: nextDeps,
251 + });
252 + }
253 + break;
254 + }
255 + case "throw": {
256 + break;
257 + }
258 + default: {
259 + assertExhaustive(block.terminal, "Unexpected terminal kind");
260 + }
261 + }
262 + }
263 + const finalDeps = new Map();
264 + for (const [blockId, controls] of blockControlDeps) {
265 + finalDeps.set(blockId, controls.getDependencies());
266 + }
267 + return finalDeps;
268 +}
269 +
270 +type QueueEntry = {
271 + /**
272 + * Block being transferred to.
273 + */
274 + targetBlock: BlockId;
275 + /**
276 + * "Control" dependencies which affect early returns or breaks that *may* prevent
277 + * the target block from being reached.
278 + */
279 + dependencies: Set<IR.Val>;
280 +};
281 +
282 +class ControlDependencies {
283 + #dependencies: Set<IR.Val> = new Set();
284 +
285 + addDependencies(deps: Set<IR.Val>): boolean {
286 + let hasChanges = false;
287 + for (const dep of deps) {
288 + if (!this.#dependencies.has(dep)) {
289 + hasChanges = true;
290 + this.#dependencies.add(dep);
291 + }
292 + }
293 + return hasChanges;
294 + }
295 +
296 + getDependencies(): Set<IR.Val> {
297 + return new Set([...this.#dependencies]);
298 + }
299 +}
compiler/forget/src/MiddleEnd/DumpCFG.ts new
+124
@@ -0,0 +1,124 @@
1 +/**
2 + * Copyright (c) Facebook, Inc. and its affiliates.
3 + *
4 + * This source code is licensed under the MIT license found in the
5 + * LICENSE file in the root directory of this source tree.
6 + */
7 +
8 +import type { NodePath } from "@babel/traverse";
9 +import * as t from "@babel/types";
10 +import { assertExhaustive } from "../Common/utils";
11 +import type { CompilerContext } from "../CompilerContext";
12 +import { OutputKind } from "../CompilerOutputs";
13 +import { buildCFG, Terminal } from "../ControlFlowGraph";
14 +import * as IR from "../IR";
15 +import { PassKind, PassName } from "../Pass";
16 +import { computeCfgControlDeps } from "./DepGraphAnalysis";
17 +
18 +/**
19 + * Dump CFG
20 + */
21 +export default {
22 + name: PassName.DumpCFG,
23 + kind: PassKind.IRFunc as const,
24 + run,
25 +};
26 +
27 +export function run(
28 + irFunc: IR.Func,
29 + func: NodePath<t.Function>,
30 + context: CompilerContext
31 +) {
32 + if (context.opts.outputKinds.includes(OutputKind.CFG)) {
33 + const cfg = buildCFG(irFunc);
34 + const controlDeps = computeCfgControlDeps(irFunc, cfg);
35 + const output = [];
36 + output.push(`entry: bb${cfg.entry}`);
37 + const blockIds = Array.from(cfg.blocks.keys()).sort();
38 + for (const blockId of blockIds) {
39 + const { body, terminal, parents } = cfg.blocks.get(blockId)!;
40 + output.push("");
41 + output.push(`bb${blockId}:`);
42 + for (const stmt of body) {
43 + output.push(" " + String(stmt));
44 + }
45 + output.push("@parents:");
46 + for (const parent of parents) {
47 + let printed = String(parent.ast).trim();
48 + let limit = printed.indexOf("{");
49 + limit = limit === -1 ? 80 : Math.min(80, limit);
50 + output.push(
51 + ` ${parent.ast.node.loc?.start.line}:${
52 + parent.ast.node.loc?.start.column
53 + }: ${printed.substring(0, limit).trim()}${
54 + printed.length > limit ? "..." : ""
55 + }`
56 + );
57 + }
58 + output.push("@controls:");
59 + const deps = controlDeps.get(blockId)!;
60 + for (const dep of deps) {
61 + output.push(` ${dep.toString()}`);
62 + }
63 + output.push("@terminal:");
64 + let terminalOutput = "";
65 + switch (terminal.kind) {
66 + case "return": {
67 + const retValue = terminal.value != null ? String(terminal.value) : "";
68 + terminalOutput = `return ${retValue}`;
69 + if (terminal.fallthrough !== null) {
70 + const { block: fallthroughBlock, tests } = terminal.fallthrough;
71 + terminalOutput = `${terminalOutput} fallthrough:bb${fallthroughBlock} tests=${(
72 + tests ?? []
73 + )
74 + .map((t) => String(t))
75 + .join(" && ")}`;
76 + }
77 + break;
78 + }
79 + case "goto": {
80 + terminalOutput = `goto bb${terminal.block}`;
81 + if (terminal.fallthrough !== null) {
82 + const { block: fallthroughBlock, tests } = terminal.fallthrough;
83 + terminalOutput = `${terminalOutput} fallthrough:bb${fallthroughBlock} tests=${(
84 + tests ?? ["<empty>"]
85 + )
86 + .map((t) => String(t))
87 + .join(" && ")}`;
88 + }
89 + break;
90 + }
91 + case "throw": {
92 + terminalOutput = "throw";
93 + break;
94 + }
95 + case "if": {
96 + terminalOutput = `if (${String(terminal.test)}) then:bb${
97 + terminal.consequent
98 + } else:bb${terminal.alternate}`;
99 + break;
100 + }
101 + case "switch": {
102 + const lines = [`switch (${String(terminal.test)})`];
103 + terminal.cases.forEach((case_) => {
104 + if (case_.test != null) {
105 + lines.push(` case ${String(case_.test)}: bb${case_.block}`);
106 + } else {
107 + lines.push(` default: bb${case_.block}`);
108 + }
109 + });
110 + terminalOutput = lines.join("\n");
111 + break;
112 + }
113 + default: {
114 + assertExhaustive(
115 + terminal,
116 + `Unexpected terminal kind '${(terminal as any as Terminal).kind}'`
117 + );
118 + }
119 + }
120 + output.push(` ${terminalOutput}`);
121 + }
122 + context.outputs[OutputKind.CFG] = output.join("\n");
123 + }
124 +}
compiler/forget/src/MiddleEnd/DumpIR.ts new
+38
@@ -0,0 +1,38 @@
1 +/**
2 + * Copyright (c) Facebook, Inc. and its affiliates.
3 + *
4 + * This source code is licensed under the MIT license found in the
5 + * LICENSE file in the root directory of this source tree.
6 + */
7 +
8 +import type { NodePath } from "@babel/traverse";
9 +import * as t from "@babel/types";
10 +import type { CompilerContext } from "../CompilerContext";
11 +import { OutputKind } from "../CompilerOutputs";
12 +import * as IR from "../IR";
13 +import prettyPrint from "../IR/PrettyPrinter";
14 +import { PassKind, PassName } from "../Pass";
15 +
16 +/**
17 + * An optional debug step when the output {@link OutputKind.IR} is enabled.
18 + * Records the output IR in the compiler context.
19 + */
20 +export default {
21 + name: PassName.DumpIR,
22 + kind: PassKind.IRFunc as const,
23 + run,
24 +};
25 +
26 +export function run(
27 + irFunc: IR.Func,
28 + func: NodePath<t.Function>,
29 + context: CompilerContext
30 +) {
31 + if (context.opts.outputKinds.includes(OutputKind.IR)) {
32 + const output = [...context.irProg.funcs.values()]
33 + .map((irFunc) => prettyPrint(irFunc))
34 + .join("\n\n");
35 +
36 + context.outputs[OutputKind.IR] = output;
37 + }
38 +}
compiler/forget/src/MiddleEnd/IRCheck.ts new
+71
@@ -0,0 +1,71 @@
1 +/**
2 + * Copyright (c) Facebook, Inc. and its affiliates.
3 + *
4 + * This source code is licensed under the MIT license found in the
5 + * LICENSE file in the root directory of this source tree.
6 + */
7 +
8 +import type { NodePath } from "@babel/traverse";
9 +import * as t from "@babel/types";
10 +import type { CompilerContext } from "../CompilerContext";
11 +import * as IR from "../IR";
12 +import { PassKind, PassName } from "../Pass";
13 +
14 +/**
15 + * Semantic check over IR.
16 + */
17 +export default {
18 + name: PassName.IRCheck,
19 + kind: PassKind.IRFunc as const,
20 + run,
21 +};
22 +
23 +export function run(
24 + irFunc: IR.Func,
25 + func: NodePath<t.Function>,
26 + context: CompilerContext
27 +) {
28 + for (const [name, val] of irFunc.env.decls) {
29 + if (val.immutable) {
30 + for (const [refPath, ref] of val.references) {
31 + if (ref.kind === IR.RefKind.Reassign) {
32 + // Bindings created from Hook calls, Hook variables and Parameters are
33 + // assumed/enforced to be "immutable" (and `const` in terms of JS).
34 + // Violations of this rule would trigger bailout/deopt.
35 + // Alternatively, we can only treat `const` bindings as DerivedImmut
36 + // and still treat `let` bindings as Unknown.
37 + context.bailout("ReassignImmutableValue", {
38 + code: "E0010",
39 + path: refPath,
40 + context: { name },
41 + });
42 + }
43 + if (ref.kind === IR.RefKind.MutBorrow) {
44 + context.bailout("MutateImmutableValue", {
45 + code: "E0013",
46 + path: refPath,
47 + context: { name },
48 + });
49 + }
50 + }
51 + }
52 + }
53 +
54 + if (context.opts.flags.bailOnUseRef) {
55 + func.traverse({
56 + MemberExpression(expression) {
57 + const { node } = expression;
58 + if (
59 + node.property.type === "Identifier" &&
60 + node.property.name === "current"
61 + ) {
62 + context.bailout("BailOnRefLike", {
63 + code: "E0014",
64 + path: expression,
65 + context: null,
66 + });
67 + }
68 + },
69 + });
70 + }
71 +}
compiler/forget/src/MiddleEnd/ParamAnalysis.ts new
+133
@@ -0,0 +1,133 @@
1 +/**
2 + * Copyright (c) Facebook, Inc. and its affiliates.
3 + *
4 + * This source code is licensed under the MIT license found in the
5 + * LICENSE file in the root directory of this source tree.
6 + */
7 +
8 +import type { NodePath } from "@babel/traverse";
9 +import type { Function } from "@babel/types";
10 +import { assertExhaustive } from "../Common/utils";
11 +import type { CompilerContext } from "../CompilerContext";
12 +import { invariant } from "../CompilerError";
13 +import * as IR from "../IR";
14 +import { PassKind, PassName } from "../Pass";
15 +
16 +/**
17 + * Parameter Analysis.
18 + *
19 + * This middle end pass analyze the "FormalParameters" position of ReactFunc and
20 + * resolves bindings considered as {@link IR.FuncInputs}, including "props" to
21 + * Components and (under conservatively approximation) all parameters to Hooks.
22 + *
23 + * Note that treating parameters to Hooks same as "props" to Components imposed
24 + * a new rule of Hooks in that passing arguments to Hooks is effectively
25 + * considered as "immutable borrowing" in the jargons of Rust.
26 + */
27 +export default {
28 + name: PassName.ParamAnalysis,
29 + kind: PassKind.IRFunc as const,
30 + run,
31 +};
32 +
33 +export function run(
34 + irFunc: IR.Func,
35 + func: NodePath<Function>,
36 + context: CompilerContext
37 +) {
38 + // https://tc39.es/ecma262/#prod-FormalParameters
39 + const paramsNode = func.node.params;
40 +
41 + // FormalParameters : [empty]
42 + // Fast path for syntactically empty param e.g. `function foo()`.
43 + // Note that this is incomplete because or the existence of `arguments`.
44 + if (paramsNode.length === 0) {
45 + irFunc.paramKind = IR.FuncParamKind.Empty;
46 + return;
47 + }
48 +
49 + // component Foo(...)
50 + if (irFunc.kind === IR.FuncKind.Component) {
51 + // We assume the first param as Component Props.
52 + const propsParam = func.get("params")[0];
53 +
54 + switch (propsParam.node.type) {
55 + case "ObjectPattern": {
56 + // component Foo({...})
57 + irFunc.paramKind = IR.FuncParamKind.NonSimple;
58 + break;
59 + }
60 + case "RestElement": {
61 + // FormalParameters : FunctionRestParameter
62 + // component Foo(...rest)
63 + irFunc.paramKind = IR.FuncParamKind.NonSimple;
64 + context.createDiagnostic({
65 + code: "E0001",
66 + path: propsParam,
67 + context: null,
68 + });
69 + break;
70 + }
71 + case "ArrayPattern":
72 + case "AssignmentPattern":
73 + case "Identifier":
74 + case "TSParameterProperty": {
75 + irFunc.paramKind = IR.FuncParamKind.Simple;
76 + context.createDiagnostic({
77 + code: "E0002",
78 + path: propsParam,
79 + context: null,
80 + });
81 + break;
82 + }
83 + default:
84 + assertExhaustive(propsParam.node, "Unhandled propsParam");
85 + }
86 + }
87 +
88 + // Currently, we collect all BindingIdentifiers discovered under
89 + // FormalParameters as inputs for all ReactFuncKinds.
90 + //
91 + // TODO: It's likely we don't need to return a map. Refining them is enough.
92 + //
93 + // TODO: In the future, we should specialize for each kinds, e.g.
94 + // - for kind Component, exclude `ref` in `forwardRef((props, ref) => ...)`.
95 + // - for paramKind Simple, track at least one-level down to support
96 + // `let {p1, p2} = props`, `props.foo` or even `props["foo"]`.
97 + // - and only do the most conservative for kind Unknown.
98 + const paramBindings = getParamBindings(irFunc, func);
99 +
100 + // function foo({})
101 + // function foo({}, [])
102 + // Specialize empty destructuring.
103 + if (paramBindings.size === 0) {
104 + irFunc.paramKind = IR.FuncParamKind.Empty;
105 + return;
106 + }
107 +}
108 +
109 +/**
110 + * A helper function to get the Bindings of kind "param" defined in @param func.
111 + */
112 +function getParamBindings(
113 + irFunc: IR.Func,
114 + func: NodePath<Function>
115 +): Map<string, IR.BindingVal> {
116 + const { bindings } = func.scope;
117 + const map = new Map();
118 + for (const [name, b] of Object.entries(bindings)) {
119 + //@ts-ignore: The type of `kind` defined the @type package is not complete.
120 + //See: https://github.com/babel/babel/blob/main/packages/babel-traverse/src/scope/binding.ts#L5
121 + if (b.kind === "param") {
122 + const val = irFunc.env.decls.get(name);
123 + invariant(
124 + typeof val !== "undefined",
125 + "Param must exists in environment."
126 + );
127 +
128 + val.refineTo(IR.ValKind.Param, true, false);
129 + map.set(name, val);
130 + }
131 + }
132 + return map;
133 +}
compiler/forget/src/MiddleEnd/ReactFuncsInfer.ts new
+355
@@ -0,0 +1,355 @@
1 +/**
2 + * Copyright (c) Facebook, Inc. and its affiliates.
3 + *
4 + * This source code is licensed under the MIT license found in the
5 + * LICENSE file in the root directory of this source tree.
6 + */
7 +
8 +import { NodePath } from "@babel/traverse";
9 +import type { Function, Program } from "@babel/types";
10 +import * as t from "@babel/types";
11 +import { pathUnion } from "../Common/PathUnion";
12 +import { assertExhaustive } from "../Common/utils";
13 +import type { CompilerContext } from "../CompilerContext";
14 +import { invariant } from "../CompilerError";
15 +import * as IR from "../IR";
16 +import { isNonMethodFunctionPath, NonMethodFunction } from "../IR/babel-utils";
17 +import { PassKind, PassName } from "../Pass";
18 +
19 +/**
20 + * React Function Inference.
21 + *
22 + * This middle end pass use heurstics to infer JavaScript functions that are
23 + * considered as "React Functions" and will be used as compilation units.
24 + *
25 + * The correctness of this analysis depend on
26 + * - Rules of Hooks, which is materalized by the eslint-plugin-hooks. E.g. we
27 + * don't check reachability of the hook calls in Forget.
28 + * - Sanity, i.e. Forget can go wrong with big anti-patterns. E.g. calling
29 + * Component directly.
30 + */
31 +export default {
32 + name: PassName.ReactFuncsInfer,
33 + kind: PassKind.Prog as const,
34 + run,
35 +};
36 +
37 +export function run(program: NodePath<Program>, context: CompilerContext) {
38 + if (context.opts.optIn) {
39 + const { directives } = program.node;
40 + const useForget = directives.some(
41 + (directive) => directive.value.value === "use forget"
42 + );
43 + if (!useForget) return;
44 + }
45 +
46 + program.traverse({
47 + Function(func) {
48 + runFunc(func, context);
49 + },
50 + });
51 +}
52 +
53 +/**
54 + * Infer whether or not a @param func is a "React Function" using heuristics.
55 + * If it is, register it to the @param context and lower to {@link IR.Func}.
56 + */
57 +export function runFunc(func: NodePath<Function>, context: CompilerContext) {
58 + func.traverse({
59 + /**
60 + * `Directive`s can be used as escape hatches.
61 + */
62 + Directive(directive) {
63 + /**
64 + * Enforced compilation: `function foo(){ "use forget" }`
65 + * This can be used to include false negative.
66 + */
67 + if (directive.node.value.value === "use forget") {
68 + const parentalFunc = directive.findParent(
69 + isNonMethodFunctionPath
70 + ) as NodePath<NonMethodFunction>;
71 + const [name, kind] = getFuncNameAndKind(parentalFunc);
72 + registerReactFunc(parentalFunc, name, kind, context);
73 + }
74 +
75 + /**
76 + * Enforced bailout: `function foo(){ "use no forget" }`
77 + * This can be used to exclused false positive.
78 + */
79 + if (directive.node.value.value === "use no forget") {
80 + // Stop the entire traversal of `func`.
81 + directive.stop();
82 + context.bailoutWithoutDiagnostic("use no forget", directive);
83 + }
84 + },
85 +
86 + /**
87 + * `JSX` presense alone is not safe enough to be considered as a ReactFunc.
88 + * Notably, it could be either a React Component or just a helper function.
89 + *
90 + * We may rethink how to use this information in the future.
91 + */
92 + JSX(jsx) {},
93 +
94 + /**
95 + * `CallExpression`s are where we are looking for hook calls. Similar to
96 + * eslint-plugin-hooks, we don't look for hook names from other places.
97 + */
98 + CallExpression(call) {
99 + // It's possible for a custom hook that only calls other custom hooks, so
100 + // the entry criteria is set to be pretty low.
101 + const hookCall = IR.matchHookCall(call.node);
102 + if (!hookCall) return;
103 + context.logger.logEvent({ name: "matchHookCall", kind: hookCall.kind });
104 +
105 + // To minimize the chance to include false positive, we furthur check
106 + // if the parental function looks like a Component or Hook.
107 + const parentalFunc = call.findParent(
108 + isNonMethodFunctionPath
109 + ) as NodePath<NonMethodFunction>;
110 + invariant(parentalFunc, "parentalFunc exists.");
111 + const [name, kind] = getFuncNameAndKind(parentalFunc);
112 +
113 + if (kind === IR.FuncKind.Unknown) return;
114 +
115 + // According to [Rule of Hooks](https://reactjs.org/docs/hooks-rules.html),
116 + // Hooks should only be called at the RF "Top level". But in practices,
117 + // block scopes e.g. `{}` and `try...catch` are allowed.
118 + // Although we can identify its parental React Func without issues, they
119 + // requires extra work to support. We'll extend their support later.
120 + if (!t.isFunction(call.scope.block)) {
121 + context.createDiagnostic({
122 + code: "E0004",
123 + path: call,
124 + context: null,
125 + });
126 + return;
127 + }
128 +
129 + registerReactFunc(parentalFunc, name, kind, context);
130 + },
131 + });
132 +}
133 +
134 +/**
135 + * @returns the name and infered `FuncKind` of @param parentalFunc
136 + */
137 +function getFuncNameAndKind(
138 + parentalFunc: NodePath<NonMethodFunction>
139 +): [string | undefined, IR.FuncKind] {
140 + const funcName = getFuncName(parentalFunc);
141 + const isInComp = isComponentLike(parentalFunc, funcName);
142 + const isInHook = isHookLike(parentalFunc, funcName);
143 + const kind = isInComp
144 + ? IR.FuncKind.Component
145 + : isInHook
146 + ? IR.FuncKind.Hook
147 + : IR.FuncKind.Unknown;
148 + return [funcName, kind];
149 +}
150 +
151 +/**
152 + * Enforce FunctionBody of @param func is a BlockStatement.
153 + *
154 + * The current heuristics (occurence of hook calls) means function body is
155 + * likely a block (and in cases where it's not, they will be safely omitted).
156 + *
157 + * Note that it doesn't mean we couldn't expand the support to Expression-body
158 + * functions. We just need a thin pre pass rewriting them to BlockStatement ones
159 + * and the rest of the compiler pipeline will stay identical.
160 + */
161 +function validateBlockBody(
162 + func: NodePath<Function>,
163 + context: CompilerContext
164 +): boolean {
165 + const funcBody: NodePath<t.BlockStatement | t.Expression> = func.get("body");
166 +
167 + if (funcBody.isExpression()) {
168 + context.createDiagnostic({
169 + code: "E0003",
170 + path: funcBody,
171 + context: null,
172 + });
173 + }
174 +
175 + return funcBody.isBlockStatement();
176 +}
177 +
178 +/**
179 + * Lower @param func with @param flags to {@link IR.Func} and register it
180 + * into @param context
181 + */
182 +function registerReactFunc(
183 + func: NodePath<NonMethodFunction>,
184 + name: IR.Name,
185 + kind: IR.FuncKind,
186 + context: CompilerContext
187 +) {
188 + if (!validateBlockBody(func, context)) return;
189 +
190 + if (!context.irProg.funcs.has(func)) {
191 + context.logger.logEvent({
192 + name: "registerReactFunc",
193 + flags: { name, kind },
194 + });
195 + const irFunc = new IR.Func(
196 + func,
197 + name,
198 + kind,
199 + context.opts.flags.localMutationThroughFreeVars
200 + );
201 + context.irProg.funcs.set(func, irFunc);
202 + }
203 +}
204 +
205 +/**
206 + * @returns whether or not @param func is like a Component-kinded react func.
207 + */
208 +function isComponentLike(
209 + func: NodePath<Function>,
210 + funcName: string | undefined
211 +) {
212 + return funcName
213 + ? isValidComponentNameNode(funcName)
214 + : isForwardRefCallback(func) || isMemoCallback(func);
215 +}
216 +
217 +/**
218 + * @returns whether or not @param func is like a Hook-kinded react func.
219 + */
220 +function isHookLike(func: NodePath<Function>, funcName: string | undefined) {
221 + return funcName && isValidHookNameNode(funcName);
222 +}
223 +
224 +/**
225 + * Checks if the @param node is a valid React Component name. React Component
226 + * names must always start with a non-lowercase letter. So `MyComponent` or
227 + * `_MyComponent` are valid component names for instance.
228 + */
229 +function isValidComponentNameNode(name: string) {
230 + return !/^[a-z]/.test(name);
231 +}
232 +
233 +function isValidHookNameNode(name: string) {
234 + return IR.isHookLikeName(name);
235 +}
236 +
237 +/**
238 + * @return whether or not @param node is one of React's @param apiName API.
239 + * This was named as `isReactFunction` is eslint-plugin-hooks.
240 + */
241 +function isReactAPI(node: t.Node, apiName: string) {
242 + return (
243 + (node.type === "Identifier" && node.name === apiName) ||
244 + (node.type === "MemberExpression" &&
245 + node.object.type === "Identifier" &&
246 + node.object.name === "React" &&
247 + node.property.type === "Identifier" &&
248 + node.property.name === apiName)
249 + );
250 +}
251 +
252 +/**
253 + * Checks if the @param func is a callback argument of `React.forwardRef`.
254 + */
255 +function isForwardRefCallback(func: NodePath<Function>): boolean {
256 + return !!(
257 + func.parent &&
258 + t.isCallExpression(func.parent) &&
259 + isReactAPI(func.parent.callee, "forwardRef")
260 + );
261 +}
262 +
263 +/**
264 + * Checks if the @param func is a callback argument of `React.memo`.
265 + */
266 +function isMemoCallback(func: NodePath<Function>) {
267 + return !!(
268 + func.parent &&
269 + t.isCallExpression(func.parent) &&
270 + isReactAPI(func.parent.callee, "memo")
271 + );
272 +}
273 +
274 +function getFuncName(func: NodePath<NonMethodFunction>): string | undefined {
275 + const node = getFuncNameNode(func);
276 + return t.isIdentifier(node) ? node.name : undefined;
277 +}
278 +
279 +/**
280 + * Gets the {@link t.Node} representing the name of a @param func AST.
281 + *
282 + * For function declarations it is easy.
283 + * For anonymous function expressions it is much harder. If you search for
284 + * `IsAnonymousFunctionDefinition()` in the ECMAScript spec you'll find places
285 + * where JS gives anonymous function expressions names. We roughly detect the
286 + * same AST nodes with some exceptions to better fit our use case.
287 + */
288 +function getFuncNameNode(funcPath: NodePath<NonMethodFunction>) {
289 + const func = pathUnion(funcPath);
290 + switch (func.type) {
291 + case "FunctionDeclaration": {
292 + // function useHook() {}
293 + //
294 + // Function declaration or function expression names win over any
295 + // assignment statements or other renames.
296 + return func.node.id ?? undefined;
297 + }
298 + case "ArrowFunctionExpression":
299 + case "FunctionExpression": {
300 + if (t.isFunctionExpression(func.node)) {
301 + // const whatever = function useHook() {};
302 + return func.node.id ?? undefined;
303 + }
304 +
305 + if (t.isVariableDeclarator(func.parent) && func.parent.init) {
306 + // const useHook = () => {};
307 + return func.parent.id;
308 + }
309 +
310 + if (
311 + t.isAssignmentExpression(func.parent) &&
312 + func.parent.right === func.node &&
313 + func.parent.operator === "="
314 + ) {
315 + // useHook = () => {};
316 + return func.parent.left;
317 + }
318 +
319 + if (
320 + t.isProperty(func.parent) &&
321 + func.parent.value === func.node &&
322 + !t.isClassPrivateProperty(func.parent) &&
323 + !func.parent.computed
324 + ) {
325 + // {useHook: () => {}}
326 + // {useHook() {}}
327 + return func.parent.key;
328 +
329 + // NOTE: We could also support `ClassProperty` and `MethodDefinition`
330 + // here to be pedantic. However, hooks in a class are an anti-pattern. So
331 + // we don't allow it to error early.
332 + //
333 + // class {useHook = () => {}}
334 + // class {useHook() {}}
335 + }
336 +
337 + if (
338 + t.isAssignmentPattern(func.parent) &&
339 + func.parent.right === func.node
340 + ) {
341 + // const {useHook = () => {}} = {};
342 + // ({useHook = () => {}} = {});
343 + //
344 + // Kinda clowny, but we'd said we'd follow spec convention for
345 + // `IsAnonymousFunctionDefinition()` usage.
346 + return func.parent.left;
347 + }
348 + return undefined;
349 + }
350 + case "ObjectMethod":
351 + return undefined;
352 + default:
353 + assertExhaustive(func, "Unhandled func AST node");
354 + }
355 +}
compiler/forget/src/MiddleEnd/RefKindInfer.ts new
+201
@@ -0,0 +1,201 @@
1 +/**
2 + * Copyright (c) Facebook, Inc. and its affiliates.
3 + *
4 + * This source code is licensed under the MIT license found in the
5 + * LICENSE file in the root directory of this source tree.
6 + */
7 +
8 +import type { NodePath } from "@babel/traverse";
9 +import type { Function } from "@babel/types";
10 +import type { CompilerContext } from "../CompilerContext";
11 +import * as IR from "../IR";
12 +import { getAssignmentTargets } from "../IR/babel-utils";
13 +import { PassKind, PassName } from "../Pass";
14 +
15 +/**
16 + * Reference Kind Inference
17 + */
18 +export default {
19 + name: PassName.RefKindInfer,
20 + kind: PassKind.IRFunc as const,
21 + run,
22 +};
23 +
24 +const ANNOTATIONS_IMMUT = ["immut", "readonly"];
25 +const ANNOTATIONS_MUT = ["mut", "mutable"];
26 +
27 +/**
28 + * Eventually, we probably want to move RefKind refinements
29 + * into a single visitor pass and do context sensitive analysis.
30 + * This would avoid:
31 + * - different passes making inconsistent / incompatible refinements
32 + * - each pass needing to collect its context by traversing parent nodes
33 + * / filtering child nodes
34 + */
35 +export function run(
36 + irFunc: IR.Func,
37 + func: NodePath<Function>,
38 + context: CompilerContext
39 +) {
40 + for (const topLevel of irFunc.body) {
41 + refineBorrows(topLevel);
42 + // We refine MutBorrows and Freezes after Borrows and assume
43 + // that a reference kind cannot be both MutBorrow and Freeze
44 + refineMutBorrows(topLevel);
45 + refineFreezes(topLevel);
46 + refineAnnonatedIdents(topLevel);
47 + }
48 +
49 + /**
50 + * Visit @param topLevel and refined "leaked/borrowed" uses as
51 + * {@link IR.RefKind.Borrow}. This is an over approximation.
52 + */
53 + function refineBorrows(topLevel: IR.FuncTopLevel) {
54 + // var/let/const id = NODE
55 + // function id(NODE) NODE
56 + // class id NODE
57 + if (topLevel.isDecl) {
58 + // Everywhere of declarations.
59 + refineUses(irFunc, topLevel.ast, IR.RefKind.Borrow);
60 + }
61 +
62 + topLevel.ast.traverse({
63 + // lhs = NODE
64 + AssignmentExpression(assignExpr) {
65 + refineUses(irFunc, assignExpr.get("right"), IR.RefKind.Borrow);
66 + },
67 +
68 + // NODE.child
69 + // NODE.child()
70 + MemberExpression(memExpr) {
71 + refineUses(irFunc, memExpr.get("object"), IR.RefKind.Borrow);
72 + },
73 + OptionalMemberExpression(memExpr) {
74 + refineUses(irFunc, memExpr.get("object"), IR.RefKind.Borrow);
75 + },
76 +
77 + // non-hook-callee(NODE)
78 + CallExpression(call) {
79 + const hookCall = IR.HookCall.resolve(call);
80 + const args = call.get("arguments");
81 +
82 + // Normal Call.
83 + if (!hookCall) {
84 + args.forEach((arg) => {
85 + refineUses(irFunc, arg, IR.RefKind.Borrow);
86 + });
87 + }
88 + },
89 + });
90 + }
91 +
92 + /**
93 + * Visit @param topLevel and refine mutative borrows
94 + * {@link IR.RefKind.MutBorrow}. This is an under
95 + * approximation, since we do not track aliasing or
96 + * know whether function calls will mutate their arguments.
97 + */
98 + function refineMutBorrows(topLevel: IR.FuncTopLevel) {
99 + topLevel.ast.traverse({
100 + // immutVal.x = 42; [immutVal.x, immutVal.y] = [1, 2]; {a: immutVal.x} = {a: 42};
101 + // (NOT `foo(immutVal.x).bar = 42`)
102 + AssignmentExpression(assignExpr) {
103 + const lhs = assignExpr.get("left");
104 + getAssignmentTargets(lhs).forEach((ident) => {
105 + if (ident != lhs) {
106 + refineUses(irFunc, ident, IR.RefKind.MutBorrow);
107 + }
108 + });
109 + },
110 + // delete immutVal.x; delete immutVal?.x;
111 + // (NOT `delete foo.func(immutVal.x)`)
112 + UnaryExpression(unaryExpr) {
113 + if (unaryExpr.node.operator == "delete") {
114 + const arg = unaryExpr.get("argument");
115 + // getAssignmentTargets will return an overestimate
116 + getAssignmentTargets(arg).forEach((ident) => {
117 + if (ident != arg) {
118 + refineUses(irFunc, ident, IR.RefKind.MutBorrow);
119 + }
120 + });
121 + }
122 + },
123 + // immutVal.x++
124 + UpdateExpression(updateExpr) {
125 + const arg = updateExpr.get("argument");
126 + // getAssignmentTargets will return an overestimate
127 + getAssignmentTargets(arg).forEach((ident) => {
128 + if (ident != arg) {
129 + refineUses(irFunc, ident, IR.RefKind.MutBorrow);
130 + }
131 + });
132 + },
133 + });
134 + }
135 +
136 + /**
137 + * Visit @param topLevel and refine uses moved to React as
138 + * {@link IR.RefKind.Freeze}. This is an under approximation.
139 + */
140 + function refineFreezes(topLevel: IR.FuncTopLevel) {
141 + for (const rootVal of topLevel.jsxTreeRoots) {
142 + refineExprInJSXTree(rootVal);
143 + function refineExprInJSXTree(expr: IR.ExprVal) {
144 + if (IR.isJSXTagVal(expr)) {
145 + expr.children.forEach(refineExprInJSXTree);
146 + } else {
147 + // <JSX attr={IDENT} />
148 + if (expr.ast.path.isIdentifier()) {
149 + refineUses(irFunc, expr.ast.path, IR.RefKind.Freeze);
150 + }
151 + }
152 + }
153 + }
154 +
155 + for (const call of topLevel.hookCalls) {
156 + // callee(IDENT)
157 + call.call.get("arguments").forEach((arg) => {
158 + if (arg.isIdentifier()) {
159 + refineUses(irFunc, arg, IR.RefKind.Freeze);
160 + }
161 + });
162 + }
163 + }
164 +
165 + /**
166 + * Refine identifiers annotated with "immut" and "mut".
167 + */
168 + function refineAnnonatedIdents(topLevel: IR.FuncTopLevel) {
169 + topLevel.ast.traverse({
170 + Identifier(ident) {
171 + if (ANNOTATIONS_IMMUT.some((anno) => hasLeadingComment(ident, anno))) {
172 + refineUses(irFunc, ident, IR.RefKind.Freeze);
173 + }
174 + if (ANNOTATIONS_MUT.some((anno) => hasLeadingComment(ident, anno))) {
175 + refineUses(irFunc, ident, IR.RefKind.MutBorrow);
176 + }
177 + },
178 + });
179 + }
180 +}
181 +
182 +function refineUses(
183 + irFunc: IR.Func,
184 + path: NodePath,
185 + refKind: IR.RefKind
186 +): void {
187 + irFunc.env.getRefsToDeclsFrom(path).forEach((use) => {
188 + use.refineTo(refKind);
189 + });
190 + irFunc.env.getFreeVarsFrom(path).forEach((use) => {
191 + use.refineTo(refKind);
192 + });
193 +}
194 +
195 +function hasLeadingComment(path: NodePath, annotation: string): boolean {
196 + return (
197 + path.node.leadingComments?.some(
198 + (comment) => comment.value === annotation
199 + ) ?? false
200 + );
201 +}
compiler/forget/src/MiddleEnd/SketchyCodeCheck.ts new
+93
@@ -0,0 +1,93 @@
1 +/**
2 + * Copyright (c) Facebook, Inc. and its affiliates.
3 + *
4 + * This source code is licensed under the MIT license found in the
5 + * LICENSE file in the root directory of this source tree.
6 + */
7 +
8 +import type { NodePath } from "@babel/traverse";
9 +import * as t from "@babel/types";
10 +import type { CompilerContext } from "../CompilerContext";
11 +import * as IR from "../IR";
12 +import { PassKind, PassName } from "../Pass";
13 +
14 +/**
15 + * Sketchy Code Check
16 + *
17 + * This middle end checks for "sketchy" code patterns to potentially bail out
18 + * when found.
19 + */
20 +export default {
21 + name: PassName.SketchyCodeCheck,
22 + kind: PassKind.IRFunc as const,
23 + run,
24 +};
25 +
26 +const ALLOWED_CAPITALIZED_FUNCTIONS = new Set([
27 + "AggregateError",
28 + "Array",
29 + "BigInt",
30 + "Boolean",
31 + "Date",
32 + "Error",
33 + "EvalError",
34 + "Function",
35 + "InternalError",
36 + "Number",
37 + "Object",
38 + "RangeError",
39 + "ReferenceError",
40 + "RegExp",
41 + "String",
42 + "Symbol",
43 + "SyntaxError",
44 + "TypeError",
45 + "URIError",
46 +]);
47 +
48 +export function run(
49 + _irFunc: IR.Func,
50 + func: NodePath<t.Function>,
51 + context: CompilerContext
52 +) {
53 + const funcBody = func.get("body");
54 +
55 + if (context.opts.flags.bailOnCapitalizedFunctionCalls) {
56 + funcBody.traverse({
57 + CallExpression(path) {
58 + const callee = path.get("callee");
59 + if (t.isIdentifier(callee.node)) {
60 + const name = callee.node.name;
61 + if (ALLOWED_CAPITALIZED_FUNCTIONS.has(name)) {
62 + return;
63 + }
64 + // Allow `Module().method()`;
65 + if (
66 + t.isMemberExpression(path.parent) ||
67 + t.isOptionalMemberExpression(path.parent)
68 + ) {
69 + return;
70 + }
71 + if (/^[A-Z]/.test(name)) {
72 + context.bailout("BailOnCapitalizedFunctionCalls", {
73 + code: "E0018",
74 + path: callee,
75 + context: null,
76 + });
77 + }
78 + }
79 + },
80 + });
81 + }
82 +
83 + if (
84 + context.opts.flags.bailOnNestedComponents &&
85 + funcBody.scope.parent.parent != null
86 + ) {
87 + context.bailout("BailOnNestedComponents", {
88 + code: "E0019",
89 + path: func,
90 + context: null,
91 + });
92 + }
93 +}
compiler/forget/src/MiddleEnd/__tests__/ReactFuncsInfer-test.ts new
+330
@@ -0,0 +1,330 @@
1 +/**
2 + * Copyright (c) Facebook, Inc. and its affiliates.
3 + *
4 + * This source code is licensed under the MIT license found in the
5 + * LICENSE file in the root directory of this source tree.
6 + */
7 +
8 +"use strict";
9 +
10 +import { createArrayLogger } from "../../Logger";
11 +import { PassName } from "../../Pass";
12 +import * as TestDriver from "../../__tests__/TestDriver";
13 +import * as IR from "../../IR";
14 +import { printDiagnostic } from "../..";
15 +
16 +const analyze = (source: string) => {
17 + const logs: string[] = [];
18 + const context = TestDriver.analyze(source, {
19 + stopPass: PassName.ReactFuncsInfer,
20 + logger: createArrayLogger(logs),
21 + });
22 + return {
23 + reactFuncs: [...context.irProg.funcs.values()],
24 + logs,
25 + diagnostics: context.diagnostics.map((diag) => printDiagnostic(diag)),
26 + };
27 +};
28 +
29 +describe("ReactFuncsInfer true positive", () => {
30 + it("use forget directive", () => {
31 + const { reactFuncs } = analyze(`
32 + function unknown() {
33 + "use forget";
34 + }
35 + `);
36 +
37 + expect(reactFuncs.length).toBe(1);
38 + expect(reactFuncs[0].name).toBe("unknown");
39 + expect(reactFuncs[0].kind).toBe(IR.FuncKind.Unknown);
40 + });
41 +
42 + it("Component with use forget ", () => {
43 + const { reactFuncs } = analyze(`
44 + function Component() {
45 + "use forget";
46 + }
47 + `);
48 +
49 + expect(reactFuncs.length).toBe(1);
50 + expect(reactFuncs[0].name).toBe("Component");
51 + expect(reactFuncs[0].kind).toBe(IR.FuncKind.Component);
52 + });
53 +
54 + it("Hook with use forget", () => {
55 + const { reactFuncs } = analyze(`
56 + function useHook() {
57 + "use forget";
58 + }
59 + `);
60 +
61 + expect(reactFuncs.length).toBe(1);
62 + expect(reactFuncs[0].name).toBe("useHook");
63 + expect(reactFuncs[0].kind).toBe(IR.FuncKind.Hook);
64 + });
65 +
66 + it("Component with hooks", () => {
67 + const { reactFuncs } = analyze(`
68 + function ComponentWithHook() {
69 + useHook()
70 + }
71 + `);
72 +
73 + expect(reactFuncs.length).toBe(1);
74 + expect(reactFuncs[0].name).toBe("ComponentWithHook");
75 + expect(reactFuncs[0].kind).toBe(IR.FuncKind.Component);
76 + });
77 +
78 + it("Component with hooks and use forget", () => {
79 + const { reactFuncs } = analyze(`
80 + function ComponentWithHook() {
81 + "use forget";
82 + useHook()
83 + }
84 + `);
85 +
86 + expect(reactFuncs.length).toBe(1);
87 + expect(reactFuncs[0].name).toBe("ComponentWithHook");
88 + expect(reactFuncs[0].kind).toBe(IR.FuncKind.Component);
89 + });
90 +
91 + it("Higher-order Component with hooks", () => {
92 + const { reactFuncs } = analyze(`
93 + function createComponentWithHook() {
94 + return function ComponentWithHook() {
95 + useHook();
96 + };
97 + }
98 + `);
99 +
100 + expect(reactFuncs.length).toBe(1);
101 + expect(reactFuncs[0].name).toBe("ComponentWithHook");
102 + });
103 +
104 + it("Hooks with hooks", () => {
105 + const { reactFuncs } = analyze(`
106 + function useHookWithHook() {
107 + useHook()
108 + }
109 + `);
110 +
111 + expect(reactFuncs.length).toBe(1);
112 + expect(reactFuncs[0].name).toBe("useHookWithHook");
113 + expect(reactFuncs[0].kind).toBe(IR.FuncKind.Hook);
114 + });
115 +
116 + it("Hooks with hooks and use forget", () => {
117 + const { reactFuncs } = analyze(`
118 + function useHookWithHook() {
119 + "use forget";
120 + useHook()
121 + }
122 + `);
123 +
124 + expect(reactFuncs.length).toBe(1);
125 + expect(reactFuncs[0].name).toBe("useHookWithHook");
126 + });
127 +
128 + it("Higher-order hooks with hooks", () => {
129 + const { reactFuncs } = analyze(`
130 + function createHook() {
131 + return function useHookWithHook() {
132 + useHook()
133 + }
134 + }
135 + `);
136 +
137 + expect(reactFuncs.length).toBe(1);
138 + expect(reactFuncs[0].name).toBe("useHookWithHook");
139 + expect(reactFuncs[0].kind).toBe(IR.FuncKind.Hook);
140 + });
141 +
142 + it("Memo Callback", () => {
143 + const { reactFuncs } = analyze(`
144 + let a = React.memo(function MemoCallback() {
145 + useHook();
146 + })
147 + let b = memo(() => { useHook() })
148 + `);
149 +
150 + expect(reactFuncs.length).toBe(2);
151 + expect(reactFuncs[0].name).toBe("MemoCallback");
152 + });
153 +
154 + it("ForwardRef Callback", () => {
155 + const { reactFuncs } = analyze(`
156 + let a = React.forwardRef(function ForwardRefCallback() {
157 + useHook();
158 + })
159 + let b = forwardRef(() => { useHook() })
160 + `);
161 +
162 + expect(reactFuncs.length).toBe(2);
163 + expect(reactFuncs[0].name).toBe("ForwardRefCallback");
164 + });
165 +
166 + it("VariableDeclarator", () => {
167 + const { reactFuncs } = analyze(`
168 + const A = () => { useHooks() }
169 + const b = () => { useHooks() } // negative
170 + let c = function C() { useHooks() }
171 + let d = function () { useHooks() } // negative
172 + let e = function E () { useHooks() }
173 + `);
174 +
175 + expect(reactFuncs.length).toBe(3);
176 + expect(reactFuncs[0].name).toBe("A");
177 + expect(reactFuncs[1].name).toBe("C");
178 + expect(reactFuncs[2].name).toBe("E");
179 + });
180 +});
181 +
182 +describe("ReactFuncsInfer true negative", () => {
183 + it("Normal func", () => {
184 + expect(
185 + analyze(`
186 + function normalFunction() {}
187 + `).reactFuncs.length
188 + ).toBe(0);
189 + });
190 +
191 + it("use no forgot directive", () => {
192 + const { reactFuncs } = analyze(`
193 + function Bailout() {
194 + "use no forget";
195 + useHook()
196 + }
197 + `);
198 +
199 + expect(reactFuncs.length).toBe(0);
200 + });
201 +
202 + it("Component with only JSX", () => {
203 + const { reactFuncs } = analyze(`
204 + function ComponentWithOnlyJSX() {
205 + return <Bar />
206 + }
207 + `);
208 +
209 + expect(reactFuncs.length).toBe(0);
210 + });
211 +
212 + it("Function that starts with use but isn't hook", () => {
213 + const { reactFuncs } = analyze(`
214 + function NotReallyHook() {
215 + userFetch();
216 + }
217 + `);
218 +
219 + expect(reactFuncs.length).toBe(0);
220 + });
221 +
222 + it("normal func with hooks", () => {
223 + const { reactFuncs } = analyze(`
224 + function foo() {
225 + useHook()
226 + }
227 + `);
228 +
229 + expect(reactFuncs.length).toBe(0);
230 + });
231 +
232 + it("expression-body func with hooks", () => {
233 + const { reactFuncs, diagnostics, logs } = analyze(`
234 + const useHook = () => useHook()
235 + `);
236 +
237 + expect(reactFuncs.length).toBe(0);
238 + expect(diagnostics).toMatchSnapshot();
239 + expect(logs).toMatchSnapshot();
240 + });
241 +});
242 +
243 +/**
244 + * Test suites specifically for nesting.
245 + */
246 +describe("ReactFuncsInfer Nesting", () => {
247 + it("Component with hook-less mapper", () => {
248 + const { reactFuncs } = analyze(`
249 + function ComponentWithMap({items}) {
250 + useHook()
251 + return (
252 + <div>
253 + {items.map((item, index) => (
254 + <FeedItem key={index} data={item} config={config} />
255 + ))}
256 + </div>
257 + );
258 + }
259 + `);
260 +
261 + expect(reactFuncs.length).toBe(1);
262 + expect(reactFuncs[0].name).toBe("ComponentWithMap");
263 + });
264 +
265 + // It's unclear why you need this, but both will be detected as components.
266 + it("Nested Component", () => {
267 + const { reactFuncs } = analyze(`
268 + function OuterComponent({items}) {
269 + useHook()
270 + function InnerComponnt() {
271 + useHook()
272 + }
273 + }
274 + `);
275 +
276 + expect(reactFuncs.length).toBe(2);
277 + expect(reactFuncs[0].name).toBe("OuterComponent");
278 + expect(reactFuncs[1].name).toBe("InnerComponnt");
279 + });
280 +});
281 +
282 +describe("ReactFuncsInfer error cases", () => {
283 + it("Component use hooks in conditional", () => {
284 + const { diagnostics, logs } = analyze(`
285 + function ComponentWithHookInConditional() {
286 + if (cond) {
287 + useHook()
288 + }
289 + }
290 + `);
291 + expect(diagnostics).toMatchSnapshot();
292 + expect(logs).toMatchSnapshot();
293 + });
294 +
295 + it("Component use hooks in loop", () => {
296 + const { diagnostics, logs } = analyze(`
297 + function ComponentWithHookInConditional() {
298 + for (let i = 0; i < ITEMS.length; i++) {
299 + useHook()
300 + }
301 + }
302 + `);
303 + expect(diagnostics).toMatchSnapshot();
304 + expect(logs).toMatchSnapshot();
305 + });
306 +
307 + it("Component use hooks in a block scope", () => {
308 + const { diagnostics, logs } = analyze(`
309 + function ComponentWithHookInBlock() {
310 + {
311 + useHook()
312 + }
313 + }
314 + `);
315 + expect(diagnostics).toMatchSnapshot();
316 + expect(logs).toMatchSnapshot();
317 + });
318 +
319 + it("Component use hooks in a try-catch block", () => {
320 + const { diagnostics, logs } = analyze(`
321 + function ComponentWithHookInTryCatch() {
322 + try {
323 + useHook()
324 + } catch {}
325 + }
326 + `);
327 + expect(diagnostics).toMatchSnapshot();
328 + expect(logs).toMatchSnapshot();
329 + });
330 +});
compiler/forget/src/MiddleEnd/index.ts new
+21
@@ -0,0 +1,21 @@
1 +/**
2 + * Copyright (c) Facebook, Inc. and its affiliates.
3 + *
4 + * This source code is licensed under the MIT license found in the
5 + * LICENSE file in the root directory of this source tree.
6 + */
7 +
8 +/**
9 + * Compiler Middle End.
10 + * Concerning about static analysis.
11 + */
12 +
13 +export { default as BodyAnalysis } from "./BodyAnalysis";
14 +export { default as DepGraphAnalysis } from "./DepGraphAnalysis";
15 +export { default as DumpCFG } from "./DumpCFG";
16 +export { default as DumpIR } from "./DumpIR";
17 +export { default as IRCheck } from "./IRCheck";
18 +export { default as ParamAnalysis } from "./ParamAnalysis";
19 +export { default as ReactFuncsInfer } from "./ReactFuncsInfer";
20 +export { default as RefKindInfer } from "./RefKindInfer";
21 +export { default as SketchyCodeCheck } from "./SketchyCodeCheck";
compiler/forget/src/Pass.ts new
+163
@@ -0,0 +1,163 @@
1 +/**
2 + * Copyright (c) Facebook, Inc. and its affiliates.
3 + *
4 + * This source code is licensed under the MIT license found in the
5 + * LICENSE file in the root directory of this source tree.
6 + */
7 +
8 +import type { NodePath } from "@babel/traverse";
9 +import type { Function, Program } from "@babel/types";
10 +import { assertExhaustive } from "./Common/utils";
11 +import type { CompilerContext } from "./CompilerContext";
12 +import * as IR from "./IR";
13 +import * as LIR from "./LIR";
14 +
15 +export enum PassName {
16 + // MiddleEnd
17 + ReactFuncsInfer = 0,
18 + ParamAnalysis,
19 + BodyAnalysis,
20 + SketchyCodeCheck,
21 + RefKindInfer,
22 + DumpIR,
23 + IRCheck,
24 + DepGraphAnalysis,
25 + // BackEnd
26 + LIRGen,
27 + MemoCacheAlloc,
28 + DumpLIR,
29 + JSGen,
30 + DumpCFG,
31 +}
32 +
33 +export function isBackEndPass(pass: PassName) {
34 + return pass >= PassName.LIRGen;
35 +}
36 +
37 +export enum PassKind {
38 + Prog,
39 + Func,
40 + IRProg,
41 + IRFunc,
42 + LIRProg,
43 + LIRFunc,
44 +}
45 +
46 +export type Pass =
47 + | ProgPass
48 + | FuncPass
49 + | IRProgPass
50 + | IRFuncPass
51 + | LIRProgPass
52 + | LIRFuncPass;
53 +
54 +export type BasePass = {
55 + name: PassName;
56 +
57 + /**
58 + * If set to true, this pass and any passes after it are not allowed to
59 + * bail out as it's not longer possible to do so cleanly.
60 + */
61 + mutatesBabelAST?: boolean;
62 +};
63 +
64 +/**
65 + * Pass run on Babel's `Program` node, which are really just module btw.
66 + */
67 +export type ProgPass = BasePass & {
68 + kind: PassKind.Prog;
69 + run(prog: NodePath<Program>, context: CompilerContext): void;
70 +};
71 +
72 +/**
73 + * Pass on Babel's `Function` node.
74 + */
75 +export type FuncPass = BasePass & {
76 + kind: PassKind.Func;
77 + run(func: NodePath<Function>, context: CompilerContext): void;
78 +};
79 +
80 +/**
81 + * Pass on {@link IR.Prog}
82 + */
83 +export type IRProgPass = BasePass & {
84 + kind: PassKind.IRProg;
85 + run(prog: IR.Prog, context: CompilerContext): void;
86 +};
87 +
88 +/**
89 + * Pass on {@link IR.Func}
90 + */
91 +export type IRFuncPass = BasePass & {
92 + kind: PassKind.IRFunc;
93 + run(
94 + irFunc: IR.Func,
95 + func: NodePath<Function>,
96 + context: CompilerContext
97 + ): void;
98 +};
99 +
100 +/**
101 + * Pass on {@link LIR.Prog}
102 + */
103 +export type LIRProgPass = BasePass & {
104 + kind: PassKind.LIRProg;
105 + run(prog: LIR.Prog, context: CompilerContext): void;
106 +};
107 +
108 +/**
109 + * Pass on {@link LIR.Func}
110 + */
111 +export type LIRFuncPass = BasePass & {
112 + kind: PassKind.LIRFunc;
113 + run(lir: LIR.Func, func: NodePath<Function>, context: CompilerContext): void;
114 +};
115 +
116 +/**
117 + * Run a pass
118 + * @param pass
119 + * @param program
120 + * @param context
121 + */
122 +export function runPass(
123 + pass: Pass,
124 + program: NodePath<Program>,
125 + context: CompilerContext
126 +) {
127 + switch (pass.kind) {
128 + case PassKind.Prog:
129 + pass.run(program, context);
130 + break;
131 +
132 + case PassKind.Func:
133 + program.traverse({
134 + Function(func) {
135 + pass.run(func, context);
136 + },
137 + });
138 + break;
139 +
140 + case PassKind.IRProg:
141 + pass.run(context.irProg, context);
142 + break;
143 +
144 + case PassKind.IRFunc:
145 + for (const [func, irFunc] of context.irProg.funcs) {
146 + pass.run(irFunc, func, context);
147 + }
148 + break;
149 +
150 + case PassKind.LIRProg:
151 + pass.run(context.lirProg, context);
152 + break;
153 +
154 + case PassKind.LIRFunc:
155 + for (const [irFunc, lirFunc] of context.lirProg.funcs) {
156 + pass.run(lirFunc, irFunc.ast, context);
157 + }
158 + break;
159 +
160 + default:
161 + assertExhaustive(pass, `Unhandled pass: ${pass}`);
162 + }
163 +}
compiler/forget/src/PassManager.ts new
+59
@@ -0,0 +1,59 @@
1 +/**
2 + * Copyright (c) Facebook, Inc. and its affiliates.
3 + *
4 + * This source code is licensed under the MIT license found in the
5 + * LICENSE file in the root directory of this source tree.
6 + */
7 +
8 +import type { NodePath } from "@babel/traverse";
9 +import type { Program } from "@babel/types";
10 +import { CompilerContext } from "./CompilerContext";
11 +import { Pass, PassName, runPass } from "./Pass";
12 +
13 +export class PassManager {
14 + program: NodePath<Program>;
15 + context: CompilerContext;
16 + passes: Pass[];
17 +
18 + constructor(program: NodePath<Program>, context: CompilerContext) {
19 + this.program = program;
20 + this.context = context;
21 + this.passes = [];
22 + }
23 +
24 + addPass(pass: Pass) {
25 + this.passes.push(pass);
26 + }
27 +
28 + runAll() {
29 + let hasMutatedBabelAST = false;
30 + for (const pass of this.passes) {
31 + if (pass.mutatesBabelAST) {
32 + hasMutatedBabelAST = true;
33 + }
34 + if (pass.name === PassName.JSGen && this.context.hasBailedOut()) {
35 + break;
36 + }
37 + try {
38 + runPass(pass, this.program, this.context);
39 + } catch (e) {
40 + this.context.bailoutWithoutDiagnostic(`UnexpectedError: ${e}`);
41 + // console log stacktrace in jest
42 + if (global.__DEV__) {
43 + console.error(e.stack);
44 + }
45 + if (hasMutatedBabelAST) {
46 + // The AST has been mutated, we can't bail out anymore.
47 + throw e;
48 + } else {
49 + this.context.logger.error(e.toString());
50 + return;
51 + }
52 + }
53 + // check if this is the stopPass
54 + if (pass.name === this.context.opts.stopPass) {
55 + break;
56 + }
57 + }
58 + }
59 +}
compiler/forget/src/__tests__/CompilerOptions-test.ts new
+77
@@ -0,0 +1,77 @@
1 +/**
2 + * Copyright (c) Facebook, Inc. and its affiliates.
3 + *
4 + * This source code is licensed under the MIT license found in the
5 + * LICENSE file in the root directory of this source tree.
6 + */
7 +
8 +"use strict";
9 +
10 +import { PluginOptions } from "@babel/core";
11 +import {
12 + createCompilerOptions,
13 + parseCompilerOptions,
14 +} from "../CompilerOptions";
15 +import { OutputKind } from "../CompilerOutputs";
16 +import { noopLogger } from "../Logger";
17 +import { PassName } from "../Pass";
18 +
19 +describe("CompilerOptions", () => {
20 + function validateCompilerOptionThrows(opt: PluginOptions) {
21 + expect(() => {
22 + parseCompilerOptions(opt);
23 + }).toThrowError();
24 + }
25 +
26 + it("fails invalid compiler options", () => {
27 + validateCompilerOptionThrows(false);
28 + validateCompilerOptionThrows({
29 + outputKinds: ["Zuck"],
30 + });
31 + validateCompilerOptionThrows({
32 + stopPass: ["Zuck"],
33 + });
34 + validateCompilerOptionThrows({
35 + optIn: "Zuck",
36 + });
37 + validateCompilerOptionThrows({
38 + logger: null,
39 + });
40 + validateCompilerOptionThrows({
41 + flags: { "-zuck": true },
42 + });
43 + validateCompilerOptionThrows(false);
44 + });
45 +
46 + it("passes valid compiler options", () => {
47 + expect(parseCompilerOptions({})).toEqual(createCompilerOptions());
48 + expect(parseCompilerOptions(undefined)).toEqual(createCompilerOptions());
49 + const fullInput = {
50 + outputKinds: [OutputKind.JS, OutputKind.LIR],
51 + flags: {
52 + condCache: true,
53 + guardReads: true,
54 + guardHooks: true,
55 + guardThrows: true,
56 + localMutationThroughFreeVars: false,
57 + bailOnMultipleReturns: true,
58 + bailOnCapitalizedFunctionCalls: true,
59 + bailOnNestedComponents: true,
60 + bailOnUseRef: true,
61 + singleReturnShortcut: true,
62 + },
63 + optIn: true,
64 + stopPass: PassName.JSGen,
65 + logger: noopLogger,
66 + };
67 + expect(parseCompilerOptions(fullInput)).toEqual(fullInput);
68 + });
69 +
70 + it("ignores extra top level keys", () => {
71 + expect(
72 + parseCompilerOptions({
73 + unknownExtraKey: "what?",
74 + })
75 + ).toEqual(createCompilerOptions());
76 + });
77 +});
compiler/forget/src/__tests__/TestDriver.ts new
+70
@@ -0,0 +1,70 @@
1 +/**
2 + * Copyright (c) Facebook, Inc. and its affiliates.
3 + *
4 + * This source code is licensed under the MIT license found in the
5 + * LICENSE file in the root directory of this source tree.
6 + */
7 +
8 +/* istanbul ignore file */
9 +import type { PluginItem, TransformOptions } from "@babel/core";
10 +import { transformSync } from "@babel/core";
11 +import ReactForgetBabelPlugin from "../BabelPlugin";
12 +import { getMostRecentCompilerContext } from "../CompilerContext";
13 +import { CompilerOptions as ForgetCompilerOptions } from "../CompilerOptions";
14 +import { CompilerOutputs, OutputKind } from "../CompilerOutputs";
15 +
16 +type CompileOptions = {
17 + // enables the "block scoping" plugin, needed to repro a regression
18 + blockScopingTransform?: boolean;
19 +};
20 +
21 +function createBabelOpt(
22 + forgetPluginOptions: Partial<ForgetCompilerOptions>,
23 + compileOptions: CompileOptions
24 +): TransformOptions {
25 + const plugins: PluginItem[] = [[ReactForgetBabelPlugin, forgetPluginOptions]];
26 + if (compileOptions.blockScopingTransform) {
27 + plugins.push(["@babel/plugin-transform-block-scoping", { loose: true }]);
28 + }
29 + return {
30 + plugins,
31 +
32 + // Set it to false so that CodeFrame won't contain ANSI color code.
33 + highlightCode: false,
34 +
35 + compact: true,
36 + };
37 +}
38 +
39 +/**
40 + * @param source
41 + * @param pluginOpt {@link CompilerOptions}
42 + * @returns {@link CompilerContext.outputs}
43 + */
44 +export function compile(
45 + source: string,
46 + forgetPluginOptions: Partial<ForgetCompilerOptions> = {},
47 + compileOptions: CompileOptions = {}
48 +): CompilerOutputs {
49 + const result = transformSync(
50 + source,
51 + createBabelOpt(forgetPluginOptions, compileOptions)
52 + );
53 + if (!result?.code) {
54 + console.error(result);
55 + throw new Error("Compilation failed.");
56 + }
57 +
58 + const { outputs } = getMostRecentCompilerContext();
59 + outputs[OutputKind.JS] = result.code;
60 +
61 + return outputs;
62 +}
63 +
64 +export function analyze(
65 + source: string,
66 + forgetPluginOptions: Partial<ForgetCompilerOptions> = {}
67 +) {
68 + transformSync(source, createBabelOpt(forgetPluginOptions, {}));
69 + return getMostRecentCompilerContext();
70 +}
compiler/forget/src/__tests__/e2e/expectLogs.js new
+17
@@ -0,0 +1,17 @@
1 +/**
2 + * Copyright (c) Meta Platforms, Inc. and affiliates.
3 + *
4 + * This source code is licensed under the MIT license found in the
5 + * LICENSE file in the root directory of this source tree.
6 + */
7 +
8 +const logs = [];
9 +
10 +export function log(message) {
11 + logs.push(message);
12 +}
13 +
14 +export function expectLogsAndClear(expected) {
15 + expect(logs).toEqual(expected);
16 + logs.length = 0;
17 +}
compiler/forget/src/__tests__/e2e/hello.e2e.js new
+75
@@ -0,0 +1,75 @@
1 +/**
2 + * Copyright (c) Meta Platforms, Inc. and affiliates.
3 + *
4 + * This source code is licensed under the MIT license found in the
5 + * LICENSE file in the root directory of this source tree.
6 + */
7 +
8 +import { useMemoCacheStub } from "../test-utils/useMemoCacheStub";
9 +import * as React from "react";
10 +import { render } from "@testing-library/react";
11 +import { expectLogsAndClear, log } from "./expectLogs";
12 +
13 +React.useMemoCache = useMemoCacheStub;
14 +
15 +function Hello({ name }) {
16 + "use forget";
17 + const items = [1, 2, 3].map((item) => <div key={item}>Item {item}</div>);
18 + log("render");
19 + return (
20 + <div>
21 + Hello <b>{name}</b>
22 + {items}
23 + </div>
24 + );
25 +}
26 +
27 +test("hello", () => {
28 + const { asFragment, rerender } = render(<Hello name="World" />);
29 +
30 + expect(asFragment()).toMatchInlineSnapshot(`
31 + <DocumentFragment>
32 + <div>
33 + Hello
34 + <b>
35 + World
36 + </b>
37 + <div>
38 + Item 1
39 + </div>
40 + <div>
41 + Item 2
42 + </div>
43 + <div>
44 + Item 3
45 + </div>
46 + </div>
47 + </DocumentFragment>
48 + `);
49 +
50 + expectLogsAndClear(["render"]);
51 +
52 + rerender(<Hello name="Universe" />);
53 +
54 + expect(asFragment()).toMatchInlineSnapshot(`
55 + <DocumentFragment>
56 + <div>
57 + Hello
58 + <b>
59 + Universe
60 + </b>
61 + <div>
62 + Item 1
63 + </div>
64 + <div>
65 + Item 2
66 + </div>
67 + <div>
68 + Item 3
69 + </div>
70 + </div>
71 + </DocumentFragment>
72 + `);
73 +
74 + expectLogsAndClear(__FORGET__ ? [] : ["render"]);
75 +});
compiler/forget/src/__tests__/e2e/update-button.e2e.js new
+70
@@ -0,0 +1,70 @@
1 +/**
2 + * Copyright (c) Meta Platforms, Inc. and affiliates.
3 + *
4 + * This source code is licensed under the MIT license found in the
5 + * LICENSE file in the root directory of this source tree.
6 + */
7 +
8 +import { render } from "@testing-library/react";
9 +import * as React from "react";
10 +import { useMemoCacheStub } from "../test-utils/useMemoCacheStub";
11 +
12 +React.useMemoCache = useMemoCacheStub;
13 +
14 +function Button({ label }) {
15 + const theme = useTheme();
16 + const style = computeStyle(theme);
17 + return <button color={style}>{label}</button>;
18 +}
19 +
20 +let currentTheme = "light";
21 +function useTheme() {
22 + return currentTheme;
23 +}
24 +
25 +let styleComputations = 0;
26 +function computeStyle(theme) {
27 + styleComputations++;
28 + return theme === "light" ? "white" : "black";
29 +}
30 +
31 +test("update-button", () => {
32 + const { asFragment, rerender } = render(<Button label="Click me" />);
33 + expect(asFragment()).toMatchInlineSnapshot(`
34 + <DocumentFragment>
35 + <button
36 + color="white"
37 + >
38 + Click me
39 + </button>
40 + </DocumentFragment>
41 + `);
42 +
43 + // Update the label, but not the theme
44 + rerender(<Button label="Click again" />);
45 + // `computeStyle` should not be called again when Forget is enabled
46 + expect(styleComputations).toBe(__FORGET__ ? 1 : 2);
47 + expect(asFragment()).toMatchInlineSnapshot(`
48 + <DocumentFragment>
49 + <button
50 + color="white"
51 + >
52 + Click again
53 + </button>
54 + </DocumentFragment>
55 + `);
56 +
57 + currentTheme = "dark";
58 + rerender(<Button label="Click again" />);
59 + expect(asFragment()).toMatchInlineSnapshot(`
60 + <DocumentFragment>
61 + <button
62 + color="black"
63 + >
64 + Click again
65 + </button>
66 + </DocumentFragment>
67 + `);
68 +
69 + expect(styleComputations).toBe(__FORGET__ ? 2 : 3);
70 +});
compiler/forget/src/__tests__/fixtures/todo/README.md new
+5
@@ -0,0 +1,5 @@
1 +## TODOs
2 +
3 +This directory contains files that are currently crashing the compiler and
4 +should be moved to `../transform/` as a potential new fixture once the crash
5 +is fixed.
compiler/forget/src/__tests__/fixtures/todo/cfg-for-of-statement-with-assignment.js new
+15
@@ -0,0 +1,15 @@
1 +// @Out DumpCFG
2 +function useForOfStatement(x) {
3 + "use forget";
4 + const items = [];
5 + let item;
6 + for (item of x) {
7 + if (shouldBreak()) {
8 + break;
9 + } else if (shouldContinue()) {
10 + continue;
11 + }
12 + items.push(item);
13 + }
14 + return items;
15 +}
compiler/forget/src/__tests__/test-utils/generateTestsFromFixtures.ts new
+174
@@ -0,0 +1,174 @@
1 +/**
2 + * Copyright (c) Facebook, Inc. and its affiliates.
3 + *
4 + * This source code is licensed under the MIT license found in the
5 + * LICENSE file in the root directory of this source tree.
6 + */
7 +
8 +"use strict";
9 +
10 +/* global expect,test */
11 +
12 +import fs from "fs";
13 +import path from "path";
14 +
15 +const EXPECT_SUFFIX = ".expect.md";
16 +
17 +const PROJECT_ROOT = path.dirname(path.dirname(__dirname));
18 +
19 +expect.extend({
20 + accessSnapshotState(_anything, cb) {
21 + cb(this["snapshotState"]._updateSnapshot);
22 + return {
23 + pass: true,
24 + message: () => "",
25 + };
26 + },
27 + toHaveNoUnmatchedSnapshots(unmatchedSnapshots, fixturesPath) {
28 + return {
29 + pass: unmatchedSnapshots.length === 0,
30 + message: () => {
31 + const unmatchedSnapshotsText = unmatchedSnapshots
32 + .map((file: string) => path.join(fixturesPath, file))
33 + .join("\n * ");
34 + return (
35 + `Found ${EXPECT_SUFFIX} files without corresponding inputs:\n* ${unmatchedSnapshotsText}` +
36 + `\n\nRun 'npm test -- -u' to remove these extra ${EXPECT_SUFFIX} files`
37 + );
38 + },
39 + };
40 + },
41 +});
42 +
43 +export default function generateTestsFromFixtures(
44 + fixturesPath: string,
45 + transform: (input: string, file: any) => string
46 +) {
47 + const files = fs.readdirSync(fixturesPath);
48 + const fixtures = matchInputOutputFixtures(files, fixturesPath);
49 +
50 + const relativeFixturesPath = path.relative(PROJECT_ROOT, fixturesPath);
51 + describe(relativeFixturesPath, () => {
52 + test("has input fixtures", () => {
53 + expect(fixtures.size).toBeGreaterThan(0);
54 + });
55 +
56 + test("has a consistent extension for input fixtures", () => {
57 + const extensions = Array.from(
58 + new Set(
59 + Array.from(fixtures.values())
60 + .map((entry) =>
61 + entry.input != null ? path.extname(entry.input) : null
62 + )
63 + .filter(Boolean)
64 + )
65 + );
66 + expect(extensions).toEqual(extensions.slice(0, 1));
67 + });
68 +
69 + describe("fixtures", () => {
70 + test.each(Array.from(fixtures.values()))(
71 + "$basename",
72 + ({ basename, input: inputFile, output: outputFile }) => {
73 + let receivedOutput;
74 + if (inputFile != null) {
75 + const input = fs.readFileSync(inputFile, "utf8");
76 + receivedOutput = transform(input, basename);
77 + } else {
78 + receivedOutput = "<<input deleted>>";
79 + }
80 +
81 + // Use a standard snapshot for the expected output so that the snapshot fails unless the
82 + // value matches
83 + expect(receivedOutput).toMatchSnapshot();
84 +
85 + // Determine whether the snapshot is in update mode or only creating snapshots for new inputs
86 + // to update the .expect file in parallel with updating the snapshot itself.
87 + const snapshotUpdateMode = determineSnapshotMode();
88 + const outputExists = fs.existsSync(outputFile);
89 + if (
90 + snapshotUpdateMode === "all" ||
91 + (snapshotUpdateMode === "new" && !outputExists)
92 + ) {
93 + if (inputFile != null) {
94 + fs.writeFileSync(outputFile, receivedOutput, "utf8");
95 + } else {
96 + fs.unlinkSync(outputFile);
97 + }
98 + } else if (outputFile != null) {
99 + // As a sanity check, make sure that the current output matches the .expect file
100 + const actualOutput = fs.readFileSync(outputFile, "utf8");
101 + expect(receivedOutput).toEqual(actualOutput);
102 + }
103 + }
104 + );
105 + });
106 + });
107 +}
108 +
109 +function determineSnapshotMode() {
110 + // Determine which snapshot mode we're in: ignoring snapshots,
111 + // updating new files only, or updating all files
112 + let updateSnapshots = "none";
113 + // @ts-ignore
114 + expect(null).accessSnapshotState((_updateSnapshots) => {
115 + updateSnapshots = _updateSnapshots;
116 + });
117 + const updateSnapshotEnvVariable = process.env["UPDATE_SNAPSHOTS"];
118 + if (
119 + updateSnapshotEnvVariable === "1" ||
120 + updateSnapshotEnvVariable === "all"
121 + ) {
122 + console.log(
123 + "Updating all snapshots due to UPDATE_SNAPSHOTS environment variable being set"
124 + );
125 + updateSnapshots = "all";
126 + } else {
127 + // @ts-ignore
128 + expect(updateSnapshotEnvVariable).toEqual();
129 + }
130 + expect(updateSnapshots).toEqual(expect.stringMatching(/none|new|all/));
131 + return updateSnapshots;
132 +}
133 +
134 +function matchInputOutputFixtures(files: string[], fixturesPath: string) {
135 + const fixtures = new Map();
136 + for (const file of files) {
137 + const isOutput = file.endsWith(EXPECT_SUFFIX);
138 + const basename = path.basename(
139 + file,
140 + isOutput ? EXPECT_SUFFIX : path.extname(file)
141 + );
142 + let entry = fixtures.get(basename);
143 + if (entry === undefined) {
144 + entry = { basename, input: null, output: null };
145 + fixtures.set(basename, entry);
146 + }
147 + const resolvedPath = path.format({
148 + dir: fixturesPath,
149 + name: file,
150 + });
151 + if (isOutput) {
152 + entry.output = resolvedPath;
153 + } else {
154 + if (entry.input !== null) {
155 + throw new Error(
156 + "Found multiple inputs with the basename '" +
157 + basename +
158 + "': " +
159 + entry.input +
160 + " and " +
161 + resolvedPath
162 + );
163 + }
164 + entry.input = resolvedPath;
165 + const outputFile = path.format({
166 + dir: fixturesPath,
167 + name: basename,
168 + ext: EXPECT_SUFFIX,
169 + });
170 + entry.output = outputFile;
171 + }
172 + }
173 + return fixtures;
174 +}
compiler/forget/src/__tests__/test-utils/useMemoCacheStub.ts new
+26
@@ -0,0 +1,26 @@
1 +/**
2 + * Copyright (c) Meta Platforms, Inc. and affiliates.
3 + *
4 + * This source code is licensed under the MIT license found in the
5 + * LICENSE file in the root directory of this source tree.
6 + */
7 +
8 +import { useRef } from "react";
9 +
10 +const REACT_MEMOCACHE_SENTINEL = Symbol.for("react.memocache_sentinel");
11 +
12 +/**
13 + * Stub for `React.useMemoCache` used in E2E tests until we have a React
14 + * version that supports it.
15 + *
16 + * @param i Cache size
17 + * @returns Memo cache
18 + */
19 +export function useMemoCacheStub(i: number) {
20 + "use no forget";
21 + const $ = new Array(i).fill(REACT_MEMOCACHE_SENTINEL);
22 + // @ts-ignore
23 + $._ = REACT_MEMOCACHE_SENTINEL;
24 + const ref = useRef($);
25 + return ref.current;
26 +}
compiler/forget/src/__tests__/transform-test.ts new
+193
@@ -0,0 +1,193 @@
1 +/**
2 + * Copyright (c) Facebook, Inc. and its affiliates.
3 + *
4 + * This source code is licensed under the MIT license found in the
5 + * LICENSE file in the root directory of this source tree.
6 + */
7 +
8 +"use strict";
9 +
10 +import path from "path";
11 +import { getMostRecentCompilerContext } from "../CompilerContext";
12 +import {
13 + CompilerFlags,
14 + createCompilerFlags,
15 + parseCompilerFlags,
16 +} from "../CompilerFlags";
17 +import {
18 + isOutputKind,
19 + isSyntacticallyValidJS,
20 + OutputKind,
21 + stringifyCompilerOutputs,
22 +} from "../CompilerOutputs";
23 +import { printDiagnostic } from "../Diagnostic";
24 +import { createArrayLogger } from "../Logger";
25 +import { PassName } from "../Pass";
26 +import generateTestsFromFixtures from "./test-utils/generateTestsFromFixtures";
27 +import * as TestDriver from "./TestDriver";
28 +
29 +enum DebugPragma {
30 + Out = "Out",
31 + Transform = "Transform",
32 + Flags = "Flags",
33 + Stop = "Stop",
34 +}
35 +
36 +const DEBUG_PRAGMA_PATTERN = new RegExp(
37 + `\/\/\\s*@(${Object.keys(DebugPragma).join("|")})\\s+(.+)\\s+`,
38 + "g"
39 +);
40 +
41 +function wrapWithTripleBackticks(s: string, ext?: string) {
42 + return `\`\`\`${ext ?? ""}
43 +${s}
44 +\`\`\``;
45 +}
46 +
47 +describe("React Forget", () => {
48 + generateTestsFromFixtures(
49 + path.join(__dirname, "fixtures", "transform"),
50 + (input, file) => {
51 + const matches = input.matchAll(DEBUG_PRAGMA_PATTERN);
52 +
53 + const compileOptions = {
54 + blockScopingTransform: false,
55 + };
56 + let flags: CompilerFlags = createCompilerFlags();
57 + let outputKinds: OutputKind[] = [];
58 + let stopPass: PassName = PassName.JSGen;
59 + for (const match of matches) {
60 + const [, key, value] = match;
61 + switch (key as DebugPragma) {
62 + case DebugPragma.Out:
63 + for (const outputKind of value.split(/\s*,\s*/)) {
64 + if (isOutputKind(outputKind)) {
65 + outputKinds.push(outputKind);
66 + } else {
67 + throw new Error(
68 + `Unsupported value for @${key} pragma: '${outputKind}'`
69 + );
70 + }
71 + }
72 + break;
73 + case DebugPragma.Transform:
74 + switch (value) {
75 + case "block-scoping": {
76 + compileOptions.blockScopingTransform = true;
77 + break;
78 + }
79 + default:
80 + throw new Error(
81 + `Unsupported value for @Transform pragma: '${value}'`
82 + );
83 + }
84 + break;
85 + case DebugPragma.Stop: {
86 + const keyValue = value as keyof typeof PassName;
87 + if (!PassName[keyValue]) {
88 + throw new Error(
89 + `Unsupported value for @${key} pragma: '${value}'`
90 + );
91 + }
92 + stopPass = PassName[keyValue];
93 + break;
94 + }
95 + case DebugPragma.Flags: {
96 + const jsonValue = JSON.parse(value);
97 + flags = parseCompilerFlags(jsonValue);
98 + break;
99 + }
100 + default:
101 + throw new Error(`Unsupported pragma: @${key}`);
102 + }
103 + }
104 + outputKinds.push(OutputKind.JS);
105 + // De-duplicate outputKinds.
106 + outputKinds = [...new Set(outputKinds)];
107 +
108 + // Cache real console.log
109 + let realConsoleLog = console.log;
110 +
111 + const logs: string[] = [];
112 + const compilerOutputs = TestDriver.compile(
113 + input,
114 + {
115 + outputKinds,
116 + stopPass,
117 + flags,
118 + logger: createArrayLogger(logs),
119 + },
120 + compileOptions
121 + );
122 + const context = getMostRecentCompilerContext();
123 + const logOutput =
124 + logs.length === 0
125 + ? "(Empty)"
126 + : `${wrapWithTripleBackticks(logs.join("\n\n"))}`;
127 +
128 + const hasBailout = context.bailouts.length > 0;
129 + const expectBailout = file.startsWith("bailout.");
130 + if (hasBailout !== expectBailout) {
131 + if (expectBailout) {
132 + throw new Error(
133 + `Expected Forget to bail out on '${file}' but it did not.\nLogs:\n${logOutput}`
134 + );
135 + } else {
136 + console.error(context.bailouts);
137 + throw new Error(`Expected '${file}' to succeed but bailed out`);
138 + }
139 + }
140 +
141 + const prettyOutputs = stringifyCompilerOutputs(compilerOutputs);
142 +
143 + const outputs: string[] = [];
144 + outputKinds.forEach((outputKind) => {
145 + const prettyOutput = prettyOutputs[outputKind];
146 + const isJS = isSyntacticallyValidJS(outputKind);
147 +
148 + outputs.push(
149 + `## ${outputKind}\n\n${wrapWithTripleBackticks(
150 + prettyOutput ?? "",
151 + isJS ? "js" : ""
152 + )}`
153 + );
154 + });
155 +
156 + const diagnosticsOutput =
157 + context.diagnostics.length === 0
158 + ? "(Empty)"
159 + : `${wrapWithTripleBackticks(
160 + context.diagnostics
161 + .map((diag) => printDiagnostic(diag))
162 + .join("\n\n")
163 + )}`;
164 +
165 + const bailoutsOutput =
166 + context.bailouts.length === 0
167 + ? "(Empty)"
168 + : `${wrapWithTripleBackticks(
169 + context.bailouts
170 + .map((bail) => `[${bail.code}] ${bail.reason}`)
171 + .join("\n")
172 + )}`;
173 +
174 + // Recover real console.log.
175 + console.log = realConsoleLog;
176 +
177 + return `${outputs.join("\n\n")}
178 +
179 +## Console
180 +
181 +${logOutput}
182 +
183 +## Diagnostics
184 +
185 +${diagnosticsOutput}
186 +
187 +## Bailouts
188 +
189 +${bailoutsOutput}
190 +`;
191 + }
192 + );
193 +});
compiler/forget/src/index.ts new
+23
@@ -0,0 +1,23 @@
1 +/**
2 + * Copyright (c) Facebook, Inc. and its affiliates.
3 + *
4 + * This source code is licensed under the MIT license found in the
5 + * LICENSE file in the root directory of this source tree.
6 + */
7 +
8 +import BabelPlugin from "./BabelPlugin";
9 +
10 +declare global {
11 + var __DEV__: boolean | null | undefined;
12 +}
13 +
14 +// TODO: Replace the following exports with something like `export * as X from "./X";`
15 +// so that we can make calls like `X.stringify` for better naming and DX.
16 +export * from "./CompilerContext";
17 +export { createCompilerFlags, parseCompilerFlags } from "./CompilerFlags";
18 +export * from "./CompilerOptions";
19 +export * from "./CompilerOutputs";
20 +export * from "./Diagnostic";
21 +export * from "./Logger";
22 +
23 +export default BabelPlugin;
compiler/forget/src/plugin-syntax-jsx.d.ts new
+1
@@ -0,0 +1 @@
1 +declare module "@babel/plugin-syntax-jsx";
compiler/forget/tsconfig.json new
+17
@@ -0,0 +1,17 @@
1 +{
2 + "extends": "@tsconfig/node16-strictest/tsconfig.json",
3 + "compilerOptions": {
4 + "declaration": true,
5 + "outDir": "dist",
6 + "jsx": "react-jsxdev",
7 +
8 + // weaken strictness from preset
9 + "importsNotUsedAsValues": "remove",
10 + "noUncheckedIndexedAccess": false,
11 + "noUnusedParameters": false,
12 + "useUnknownInCatchVariables": false,
13 + "target": "ES2015"
14 + },
15 + "exclude": ["node_modules"],
16 + "include": ["src/**/*.ts"]
17 +}
compiler/forget/yarn.lock new
+3181
@@ -0,0 +1,3181 @@
1 +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
2 +# yarn lockfile v1
3 +
4 +
5 +"@ampproject/remapping@^2.1.0":
6 + version "2.2.0"
7 + resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.2.0.tgz#56c133824780de3174aed5ab6834f3026790154d"
8 + integrity sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==
9 + dependencies:
10 + "@jridgewell/gen-mapping" "^0.1.0"
11 + "@jridgewell/trace-mapping" "^0.3.9"
12 +
13 +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.18.6":
14 + version "7.18.6"
15 + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.18.6.tgz#3b25d38c89600baa2dcc219edfa88a74eb2c427a"
16 + integrity sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==
17 + dependencies:
18 + "@babel/highlight" "^7.18.6"
19 +
20 +"@babel/compat-data@^7.19.1":
21 + version "7.19.1"
22 + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.19.1.tgz#72d647b4ff6a4f82878d184613353af1dd0290f9"
23 + integrity sha512-72a9ghR0gnESIa7jBN53U32FOVCEoztyIlKaNoU05zRhEecduGK9L9c3ww7Mp06JiR+0ls0GBPFJQwwtjn9ksg==
24 +
25 +"@babel/core@7.2.0", "@babel/core@^7.11.6", "@babel/core@^7.12.3":
26 + version "7.2.0"
27 + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.2.0.tgz#a4dd3814901998e93340f0086e9867fefa163ada"
28 + integrity sha512-7pvAdC4B+iKjFFp9Ztj0QgBndJ++qaMeonT185wAqUnhipw8idm9Rv1UMyBuKtYjfl6ORNkgEgcsYLfHX/GpLw==
29 + dependencies:
30 + "@babel/code-frame" "^7.0.0"
31 + "@babel/generator" "^7.2.0"
32 + "@babel/helpers" "^7.2.0"
33 + "@babel/parser" "^7.2.0"
34 + "@babel/template" "^7.1.2"
35 + "@babel/traverse" "^7.1.6"
36 + "@babel/types" "^7.2.0"
37 + convert-source-map "^1.1.0"
38 + debug "^4.1.0"
39 + json5 "^2.1.0"
40 + lodash "^4.17.10"
41 + resolve "^1.3.2"
42 + semver "^5.4.1"
43 + source-map "^0.5.0"
44 +
45 +"@babel/core@^7.19.1":
46 + version "7.19.1"
47 + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.19.1.tgz#c8fa615c5e88e272564ace3d42fbc8b17bfeb22b"
48 + integrity sha512-1H8VgqXme4UXCRv7/Wa1bq7RVymKOzC7znjyFM8KiEzwFqcKUKYNoQef4GhdklgNvoBXyW4gYhuBNCM5o1zImw==
49 + dependencies:
50 + "@ampproject/remapping" "^2.1.0"
51 + "@babel/code-frame" "^7.18.6"
52 + "@babel/generator" "^7.19.0"
53 + "@babel/helper-compilation-targets" "^7.19.1"
54 + "@babel/helper-module-transforms" "^7.19.0"
55 + "@babel/helpers" "^7.19.0"
56 + "@babel/parser" "^7.19.1"
57 + "@babel/template" "^7.18.10"
58 + "@babel/traverse" "^7.19.1"
59 + "@babel/types" "^7.19.0"
60 + convert-source-map "^1.7.0"
61 + debug "^4.1.0"
62 + gensync "^1.0.0-beta.2"
63 + json5 "^2.2.1"
64 + semver "^6.3.0"
65 +
66 +"@babel/generator@7.2.0", "@babel/generator@^7.1.6", "@babel/generator@^7.2.0", "@babel/generator@^7.7.2":
67 + version "7.2.0"
68 + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.2.0.tgz#eaf3821fa0301d9d4aef88e63d4bcc19b73ba16c"
69 + integrity sha512-BA75MVfRlFQG2EZgFYIwyT1r6xSkwfP2bdkY/kLZusEYWiJs4xCowab/alaEaT0wSvmVuXGqiefeBlP+7V1yKg==
70 + dependencies:
71 + "@babel/types" "^7.2.0"
72 + jsesc "^2.5.1"
73 + lodash "^4.17.10"
74 + source-map "^0.5.0"
75 + trim-right "^1.0.1"
76 +
77 +"@babel/generator@^7.19.0":
78 + version "7.19.3"
79 + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.19.3.tgz#d7f4d1300485b4547cb6f94b27d10d237b42bf59"
80 + integrity sha512-fqVZnmp1ncvZU757UzDheKZpfPgatqY59XtW2/j/18H7u76akb8xqvjw82f+i2UKd/ksYsSick/BCLQUUtJ/qQ==
81 + dependencies:
82 + "@babel/types" "^7.19.3"
83 + "@jridgewell/gen-mapping" "^0.3.2"
84 + jsesc "^2.5.1"
85 +
86 +"@babel/helper-annotate-as-pure@^7.18.6":
87 + version "7.18.6"
88 + resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz#eaa49f6f80d5a33f9a5dd2276e6d6e451be0a6bb"
89 + integrity sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==
90 + dependencies:
91 + "@babel/types" "^7.18.6"
92 +
93 +"@babel/helper-compilation-targets@^7.19.1":
94 + version "7.19.1"
95 + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.19.1.tgz#7f630911d83b408b76fe584831c98e5395d7a17c"
96 + integrity sha512-LlLkkqhCMyz2lkQPvJNdIYU7O5YjWRgC2R4omjCTpZd8u8KMQzZvX4qce+/BluN1rcQiV7BoGUpmQ0LeHerbhg==
97 + dependencies:
98 + "@babel/compat-data" "^7.19.1"
99 + "@babel/helper-validator-option" "^7.18.6"
100 + browserslist "^4.21.3"
101 + semver "^6.3.0"
102 +
103 +"@babel/helper-create-class-features-plugin@^7.19.0":
104 + version "7.19.0"
105 + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.19.0.tgz#bfd6904620df4e46470bae4850d66be1054c404b"
106 + integrity sha512-NRz8DwF4jT3UfrmUoZjd0Uph9HQnP30t7Ash+weACcyNkiYTywpIjDBgReJMKgr+n86sn2nPVVmJ28Dm053Kqw==
107 + dependencies:
108 + "@babel/helper-annotate-as-pure" "^7.18.6"
109 + "@babel/helper-environment-visitor" "^7.18.9"
110 + "@babel/helper-function-name" "^7.19.0"
111 + "@babel/helper-member-expression-to-functions" "^7.18.9"
112 + "@babel/helper-optimise-call-expression" "^7.18.6"
113 + "@babel/helper-replace-supers" "^7.18.9"
114 + "@babel/helper-split-export-declaration" "^7.18.6"
115 +
116 +"@babel/helper-environment-visitor@^7.18.9":
117 + version "7.18.9"
118 + resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz#0c0cee9b35d2ca190478756865bb3528422f51be"
119 + integrity sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==
120 +
121 +"@babel/helper-function-name@^7.1.0", "@babel/helper-function-name@^7.19.0":
122 + version "7.19.0"
123 + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz#941574ed5390682e872e52d3f38ce9d1bef4648c"
124 + integrity sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w==
125 + dependencies:
126 + "@babel/template" "^7.18.10"
127 + "@babel/types" "^7.19.0"
128 +
129 +"@babel/helper-member-expression-to-functions@^7.18.9":
130 + version "7.18.9"
131 + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.18.9.tgz#1531661e8375af843ad37ac692c132841e2fd815"
132 + integrity sha512-RxifAh2ZoVU67PyKIO4AMi1wTenGfMR/O/ae0CCRqwgBAt5v7xjdtRw7UoSbsreKrQn5t7r89eruK/9JjYHuDg==
133 + dependencies:
134 + "@babel/types" "^7.18.9"
135 +
136 +"@babel/helper-module-imports@^7.18.6":
137 + version "7.18.6"
138 + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz#1e3ebdbbd08aad1437b428c50204db13c5a3ca6e"
139 + integrity sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==
140 + dependencies:
141 + "@babel/types" "^7.18.6"
142 +
143 +"@babel/helper-module-transforms@^7.18.6", "@babel/helper-module-transforms@^7.19.0":
144 + version "7.19.0"
145 + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.19.0.tgz#309b230f04e22c58c6a2c0c0c7e50b216d350c30"
146 + integrity sha512-3HBZ377Fe14RbLIA+ac3sY4PTgpxHVkFrESaWhoI5PuyXPBBX8+C34qblV9G89ZtycGJCmCI/Ut+VUDK4bltNQ==
147 + dependencies:
148 + "@babel/helper-environment-visitor" "^7.18.9"
149 + "@babel/helper-module-imports" "^7.18.6"
150 + "@babel/helper-simple-access" "^7.18.6"
151 + "@babel/helper-split-export-declaration" "^7.18.6"
152 + "@babel/helper-validator-identifier" "^7.18.6"
153 + "@babel/template" "^7.18.10"
154 + "@babel/traverse" "^7.19.0"
155 + "@babel/types" "^7.19.0"
156 +
157 +"@babel/helper-optimise-call-expression@^7.18.6":
158 + version "7.18.6"
159 + resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.18.6.tgz#9369aa943ee7da47edab2cb4e838acf09d290ffe"
160 + integrity sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA==
161 + dependencies:
162 + "@babel/types" "^7.18.6"
163 +
164 +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.18.9", "@babel/helper-plugin-utils@^7.19.0", "@babel/helper-plugin-utils@^7.8.0":
165 + version "7.19.0"
166 + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.19.0.tgz#4796bb14961521f0f8715990bee2fb6e51ce21bf"
167 + integrity sha512-40Ryx7I8mT+0gaNxm8JGTZFUITNqdLAgdg0hXzeVZxVD6nFsdhQvip6v8dqkRHzsz1VFpFAaOCHNn0vKBL7Czw==
168 +
169 +"@babel/helper-replace-supers@^7.18.9":
170 + version "7.19.1"
171 + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.19.1.tgz#e1592a9b4b368aa6bdb8784a711e0bcbf0612b78"
172 + integrity sha512-T7ahH7wV0Hfs46SFh5Jz3s0B6+o8g3c+7TMxu7xKfmHikg7EAZ3I2Qk9LFhjxXq8sL7UkP5JflezNwoZa8WvWw==
173 + dependencies:
174 + "@babel/helper-environment-visitor" "^7.18.9"
175 + "@babel/helper-member-expression-to-functions" "^7.18.9"
176 + "@babel/helper-optimise-call-expression" "^7.18.6"
177 + "@babel/traverse" "^7.19.1"
178 + "@babel/types" "^7.19.0"
179 +
180 +"@babel/helper-simple-access@^7.18.6":
181 + version "7.18.6"
182 + resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.18.6.tgz#d6d8f51f4ac2978068df934b569f08f29788c7ea"
183 + integrity sha512-iNpIgTgyAvDQpDj76POqg+YEt8fPxx3yaNBg3S30dxNKm2SWfYhD0TGrK/Eu9wHpUW63VQU894TsTg+GLbUa1g==
184 + dependencies:
185 + "@babel/types" "^7.18.6"
186 +
187 +"@babel/helper-split-export-declaration@^7.0.0", "@babel/helper-split-export-declaration@^7.18.6":
188 + version "7.18.6"
189 + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz#7367949bc75b20c6d5a5d4a97bba2824ae8ef075"
190 + integrity sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==
191 + dependencies:
192 + "@babel/types" "^7.18.6"
193 +
194 +"@babel/helper-string-parser@^7.18.10":
195 + version "7.18.10"
196 + resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.18.10.tgz#181f22d28ebe1b3857fa575f5c290b1aaf659b56"
197 + integrity sha512-XtIfWmeNY3i4t7t4D2t02q50HvqHybPqW2ki1kosnvWCwuCMeo81Jf0gwr85jy/neUdg5XDdeFE/80DXiO+njw==
198 +
199 +"@babel/helper-validator-identifier@^7.18.6", "@babel/helper-validator-identifier@^7.19.1":
200 + version "7.19.1"
201 + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz#7eea834cf32901ffdc1a7ee555e2f9c27e249ca2"
202 + integrity sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==
203 +
204 +"@babel/helper-validator-option@^7.18.6":
205 + version "7.18.6"
206 + resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz#bf0d2b5a509b1f336099e4ff36e1a63aa5db4db8"
207 + integrity sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==
208 +
209 +"@babel/helpers@^7.19.0", "@babel/helpers@^7.2.0":
210 + version "7.19.0"
211 + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.19.0.tgz#f30534657faf246ae96551d88dd31e9d1fa1fc18"
212 + integrity sha512-DRBCKGwIEdqY3+rPJgG/dKfQy9+08rHIAJx8q2p+HSWP87s2HCrQmaAMMyMll2kIXKCW0cO1RdQskx15Xakftg==
213 + dependencies:
214 + "@babel/template" "^7.18.10"
215 + "@babel/traverse" "^7.19.0"
216 + "@babel/types" "^7.19.0"
217 +
218 +"@babel/highlight@^7.18.6":
219 + version "7.18.6"
220 + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.18.6.tgz#81158601e93e2563795adcbfbdf5d64be3f2ecdf"
221 + integrity sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==
222 + dependencies:
223 + "@babel/helper-validator-identifier" "^7.18.6"
224 + chalk "^2.0.0"
225 + js-tokens "^4.0.0"
226 +
227 +"@babel/parser@7.7.4":
228 + version "7.7.4"
229 + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.7.4.tgz#75ab2d7110c2cf2fa949959afb05fa346d2231bb"
230 + integrity sha512-jIwvLO0zCL+O/LmEJQjWA75MQTWwx3c3u2JOTDK5D3/9egrWRRA0/0hk9XXywYnXZVVpzrBYeIQTmhwUaePI9g==
231 +
232 +"@babel/parser@^7.1.0", "@babel/parser@^7.1.6", "@babel/parser@^7.14.7", "@babel/parser@^7.18.10", "@babel/parser@^7.19.1", "@babel/parser@^7.2.0":
233 + version "7.19.1"
234 + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.19.1.tgz#6f6d6c2e621aad19a92544cc217ed13f1aac5b4c"
235 + integrity sha512-h7RCSorm1DdTVGJf3P2Mhj3kdnkmF/EiysUkzS2TdgAYqyjFdMQJbVuXOBej2SBJaXan/lIVtT6KkGbyyq753A==
236 +
237 +"@babel/plugin-syntax-async-generators@^7.8.4":
238 + version "7.8.4"
239 + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d"
240 + integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==
241 + dependencies:
242 + "@babel/helper-plugin-utils" "^7.8.0"
243 +
244 +"@babel/plugin-syntax-bigint@^7.8.3":
245 + version "7.8.3"
246 + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz#4c9a6f669f5d0cdf1b90a1671e9a146be5300cea"
247 + integrity sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==
248 + dependencies:
249 + "@babel/helper-plugin-utils" "^7.8.0"
250 +
251 +"@babel/plugin-syntax-class-properties@^7.8.3":
252 + version "7.12.13"
253 + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz#b5c987274c4a3a82b89714796931a6b53544ae10"
254 + integrity sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==
255 + dependencies:
256 + "@babel/helper-plugin-utils" "^7.12.13"
257 +
258 +"@babel/plugin-syntax-import-meta@^7.8.3":
259 + version "7.10.4"
260 + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz#ee601348c370fa334d2207be158777496521fd51"
261 + integrity sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==
262 + dependencies:
263 + "@babel/helper-plugin-utils" "^7.10.4"
264 +
265 +"@babel/plugin-syntax-json-strings@^7.8.3":
266 + version "7.8.3"
267 + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a"
268 + integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==
269 + dependencies:
270 + "@babel/helper-plugin-utils" "^7.8.0"
271 +
272 +"@babel/plugin-syntax-jsx@^7.18.6", "@babel/plugin-syntax-jsx@^7.7.2":
273 + version "7.18.6"
274 + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.18.6.tgz#a8feef63b010150abd97f1649ec296e849943ca0"
275 + integrity sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q==
276 + dependencies:
277 + "@babel/helper-plugin-utils" "^7.18.6"
278 +
279 +"@babel/plugin-syntax-logical-assignment-operators@^7.8.3":
280 + version "7.10.4"
281 + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699"
282 + integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==
283 + dependencies:
284 + "@babel/helper-plugin-utils" "^7.10.4"
285 +
286 +"@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3":
287 + version "7.8.3"
288 + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9"
289 + integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==
290 + dependencies:
291 + "@babel/helper-plugin-utils" "^7.8.0"
292 +
293 +"@babel/plugin-syntax-numeric-separator@^7.8.3":
294 + version "7.10.4"
295 + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97"
296 + integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==
297 + dependencies:
298 + "@babel/helper-plugin-utils" "^7.10.4"
299 +
300 +"@babel/plugin-syntax-object-rest-spread@^7.8.3":
301 + version "7.8.3"
302 + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871"
303 + integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==
304 + dependencies:
305 + "@babel/helper-plugin-utils" "^7.8.0"
306 +
307 +"@babel/plugin-syntax-optional-catch-binding@^7.8.3":
308 + version "7.8.3"
309 + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1"
310 + integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==
311 + dependencies:
312 + "@babel/helper-plugin-utils" "^7.8.0"
313 +
314 +"@babel/plugin-syntax-optional-chaining@^7.8.3":
315 + version "7.8.3"
316 + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a"
317 + integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==
318 + dependencies:
319 + "@babel/helper-plugin-utils" "^7.8.0"
320 +
321 +"@babel/plugin-syntax-top-level-await@^7.8.3":
322 + version "7.14.5"
323 + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz#c1cfdadc35a646240001f06138247b741c34d94c"
324 + integrity sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==
325 + dependencies:
326 + "@babel/helper-plugin-utils" "^7.14.5"
327 +
328 +"@babel/plugin-syntax-typescript@^7.18.6", "@babel/plugin-syntax-typescript@^7.7.2":
329 + version "7.18.6"
330 + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.18.6.tgz#1c09cd25795c7c2b8a4ba9ae49394576d4133285"
331 + integrity sha512-mAWAuq4rvOepWCBid55JuRNvpTNf2UGVgoz4JV0fXEKolsVZDzsa4NqCef758WZJj/GDu0gVGItjKFiClTAmZA==
332 + dependencies:
333 + "@babel/helper-plugin-utils" "^7.18.6"
334 +
335 +"@babel/plugin-transform-block-scoping@^7.18.9":
336 + version "7.18.9"
337 + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.18.9.tgz#f9b7e018ac3f373c81452d6ada8bd5a18928926d"
338 + integrity sha512-5sDIJRV1KtQVEbt/EIBwGy4T01uYIo4KRB3VUqzkhrAIOGx7AoctL9+Ux88btY0zXdDyPJ9mW+bg+v+XEkGmtw==
339 + dependencies:
340 + "@babel/helper-plugin-utils" "^7.18.9"
341 +
342 +"@babel/plugin-transform-modules-commonjs@^7.18.6":
343 + version "7.18.6"
344 + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.18.6.tgz#afd243afba166cca69892e24a8fd8c9f2ca87883"
345 + integrity sha512-Qfv2ZOWikpvmedXQJDSbxNqy7Xr/j2Y8/KfijM0iJyKkBTmWuvCA1yeH1yDM7NJhBW/2aXxeucLj6i80/LAJ/Q==
346 + dependencies:
347 + "@babel/helper-module-transforms" "^7.18.6"
348 + "@babel/helper-plugin-utils" "^7.18.6"
349 + "@babel/helper-simple-access" "^7.18.6"
350 + babel-plugin-dynamic-import-node "^2.3.3"
351 +
352 +"@babel/plugin-transform-react-display-name@^7.18.6":
353 + version "7.18.6"
354 + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.18.6.tgz#8b1125f919ef36ebdfff061d664e266c666b9415"
355 + integrity sha512-TV4sQ+T013n61uMoygyMRm+xf04Bd5oqFpv2jAEQwSZ8NwQA7zeRPg1LMVg2PWi3zWBz+CLKD+v5bcpZ/BS0aA==
356 + dependencies:
357 + "@babel/helper-plugin-utils" "^7.18.6"
358 +
359 +"@babel/plugin-transform-react-jsx-development@^7.18.6":
360 + version "7.18.6"
361 + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.18.6.tgz#dbe5c972811e49c7405b630e4d0d2e1380c0ddc5"
362 + integrity sha512-SA6HEjwYFKF7WDjWcMcMGUimmw/nhNRDWxr+KaLSCrkD/LMDBvWRmHAYgE1HDeF8KUuI8OAu+RT6EOtKxSW2qA==
363 + dependencies:
364 + "@babel/plugin-transform-react-jsx" "^7.18.6"
365 +
366 +"@babel/plugin-transform-react-jsx@^7.18.6":
367 + version "7.19.0"
368 + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.19.0.tgz#b3cbb7c3a00b92ec8ae1027910e331ba5c500eb9"
369 + integrity sha512-UVEvX3tXie3Szm3emi1+G63jyw1w5IcMY0FSKM+CRnKRI5Mr1YbCNgsSTwoTwKphQEG9P+QqmuRFneJPZuHNhg==
370 + dependencies:
371 + "@babel/helper-annotate-as-pure" "^7.18.6"
372 + "@babel/helper-module-imports" "^7.18.6"
373 + "@babel/helper-plugin-utils" "^7.19.0"
374 + "@babel/plugin-syntax-jsx" "^7.18.6"
375 + "@babel/types" "^7.19.0"
376 +
377 +"@babel/plugin-transform-react-pure-annotations@^7.18.6":
378 + version "7.18.6"
379 + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.18.6.tgz#561af267f19f3e5d59291f9950fd7b9663d0d844"
380 + integrity sha512-I8VfEPg9r2TRDdvnHgPepTKvuRomzA8+u+nhY7qSI1fR2hRNebasZEETLyM5mAUr0Ku56OkXJ0I7NHJnO6cJiQ==
381 + dependencies:
382 + "@babel/helper-annotate-as-pure" "^7.18.6"
383 + "@babel/helper-plugin-utils" "^7.18.6"
384 +
385 +"@babel/plugin-transform-typescript@^7.18.6":
386 + version "7.19.1"
387 + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.19.1.tgz#adcf180a041dcbd29257ad31b0c65d4de531ce8d"
388 + integrity sha512-+ILcOU+6mWLlvCwnL920m2Ow3wWx3Wo8n2t5aROQmV55GZt+hOiLvBaa3DNzRjSEHa1aauRs4/YLmkCfFkhhRQ==
389 + dependencies:
390 + "@babel/helper-create-class-features-plugin" "^7.19.0"
391 + "@babel/helper-plugin-utils" "^7.19.0"
392 + "@babel/plugin-syntax-typescript" "^7.18.6"
393 +
394 +"@babel/preset-react@^7.18.6":
395 + version "7.18.6"
396 + resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.18.6.tgz#979f76d6277048dc19094c217b507f3ad517dd2d"
397 + integrity sha512-zXr6atUmyYdiWRVLOZahakYmOBHtWc2WGCkP8PYTgZi0iJXDY2CN180TdrIW4OGOAdLc7TifzDIvtx6izaRIzg==
398 + dependencies:
399 + "@babel/helper-plugin-utils" "^7.18.6"
400 + "@babel/helper-validator-option" "^7.18.6"
401 + "@babel/plugin-transform-react-display-name" "^7.18.6"
402 + "@babel/plugin-transform-react-jsx" "^7.18.6"
403 + "@babel/plugin-transform-react-jsx-development" "^7.18.6"
404 + "@babel/plugin-transform-react-pure-annotations" "^7.18.6"
405 +
406 +"@babel/preset-typescript@^7.18.6":
407 + version "7.18.6"
408 + resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.18.6.tgz#ce64be3e63eddc44240c6358daefac17b3186399"
409 + integrity sha512-s9ik86kXBAnD760aybBucdpnLsAt0jK1xqJn2juOn9lkOvSHV60os5hxoVJsPzMQxvnUJFAlkont2DvvaYEBtQ==
410 + dependencies:
411 + "@babel/helper-plugin-utils" "^7.18.6"
412 + "@babel/helper-validator-option" "^7.18.6"
413 + "@babel/plugin-transform-typescript" "^7.18.6"
414 +
415 +"@babel/runtime@^7.12.5":
416 + version "7.19.0"
417 + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.19.0.tgz#22b11c037b094d27a8a2504ea4dcff00f50e2259"
418 + integrity sha512-eR8Lo9hnDS7tqkO7NsV+mKvCmv5boaXFSZ70DnfhcgiEne8hv9oCEd36Klw74EtizEqLsy4YnW8UWwpBVolHZA==
419 + dependencies:
420 + regenerator-runtime "^0.13.4"
421 +
422 +"@babel/template@^7.1.2", "@babel/template@^7.18.10", "@babel/template@^7.3.3":
423 + version "7.18.10"
424 + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.18.10.tgz#6f9134835970d1dbf0835c0d100c9f38de0c5e71"
425 + integrity sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA==
426 + dependencies:
427 + "@babel/code-frame" "^7.18.6"
428 + "@babel/parser" "^7.18.10"
429 + "@babel/types" "^7.18.10"
430 +
431 +"@babel/traverse@7.1.6", "@babel/traverse@^7.1.6", "@babel/traverse@^7.19.0", "@babel/traverse@^7.19.1", "@babel/traverse@^7.7.2":
432 + version "7.1.6"
433 + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.1.6.tgz#c8db9963ab4ce5b894222435482bd8ea854b7b5c"
434 + integrity sha512-CXedit6GpISz3sC2k2FsGCUpOhUqKdyL0lqNrImQojagnUMXf8hex4AxYFRuMkNGcvJX5QAFGzB5WJQmSv8SiQ==
435 + dependencies:
436 + "@babel/code-frame" "^7.0.0"
437 + "@babel/generator" "^7.1.6"
438 + "@babel/helper-function-name" "^7.1.0"
439 + "@babel/helper-split-export-declaration" "^7.0.0"
440 + "@babel/parser" "^7.1.6"
441 + "@babel/types" "^7.1.6"
442 + debug "^4.1.0"
443 + globals "^11.1.0"
444 + lodash "^4.17.10"
445 +
446 +"@babel/types@7.7.4":
447 + version "7.7.4"
448 + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.7.4.tgz#516570d539e44ddf308c07569c258ff94fde9193"
449 + integrity sha512-cz5Ji23KCi4T+YIE/BolWosrJuSmoZeN1EFnRtBwF+KKLi8GG/Z2c2hOJJeCXPk4mwk4QFvTmwIodJowXgttRA==
450 + dependencies:
451 + esutils "^2.0.2"
452 + lodash "^4.17.13"
453 + to-fast-properties "^2.0.0"
454 +
455 +"@babel/types@^7.0.0", "@babel/types@^7.1.6", "@babel/types@^7.18.10", "@babel/types@^7.18.6", "@babel/types@^7.18.9", "@babel/types@^7.19.0", "@babel/types@^7.2.0", "@babel/types@^7.3.0", "@babel/types@^7.3.3":
456 + version "7.19.0"
457 + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.19.0.tgz#75f21d73d73dc0351f3368d28db73465f4814600"
458 + integrity sha512-YuGopBq3ke25BVSiS6fgF49Ul9gH1x70Bcr6bqRLjWCkcX8Hre1/5+z+IiWOIerRMSSEfGZVB9z9kyq7wVs9YA==
459 + dependencies:
460 + "@babel/helper-string-parser" "^7.18.10"
461 + "@babel/helper-validator-identifier" "^7.18.6"
462 + to-fast-properties "^2.0.0"
463 +
464 +"@babel/types@^7.19.3":
465 + version "7.19.3"
466 + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.19.3.tgz#fc420e6bbe54880bce6779ffaf315f5e43ec9624"
467 + integrity sha512-hGCaQzIY22DJlDh9CH7NOxgKkFjBk0Cw9xDO1Xmh2151ti7wiGfQ3LauXzL4HP1fmFlTX6XjpRETTpUcv7wQLw==
468 + dependencies:
469 + "@babel/helper-string-parser" "^7.18.10"
470 + "@babel/helper-validator-identifier" "^7.19.1"
471 + to-fast-properties "^2.0.0"
472 +
473 +"@bcoe/v8-coverage@^0.2.3":
474 + version "0.2.3"
475 + resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39"
476 + integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==
477 +
478 +"@cspotcode/source-map-support@^0.8.0":
479 + version "0.8.1"
480 + resolved "https://registry.yarnpkg.com/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz#00629c35a688e05a88b1cda684fb9d5e73f000a1"
481 + integrity sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==
482 + dependencies:
483 + "@jridgewell/trace-mapping" "0.3.9"
484 +
485 +"@istanbuljs/load-nyc-config@^1.0.0":
486 + version "1.1.0"
487 + resolved "https://registry.yarnpkg.com/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz#fd3db1d59ecf7cf121e80650bb86712f9b55eced"
488 + integrity sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==
489 + dependencies:
490 + camelcase "^5.3.1"
491 + find-up "^4.1.0"
492 + get-package-type "^0.1.0"
493 + js-yaml "^3.13.1"
494 + resolve-from "^5.0.0"
495 +
496 +"@istanbuljs/schema@^0.1.2":
497 + version "0.1.3"
498 + resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.3.tgz#e45e384e4b8ec16bce2fd903af78450f6bf7ec98"
499 + integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==
500 +
501 +"@jest/console@^29.0.3":
502 + version "29.0.3"
503 + resolved "https://registry.yarnpkg.com/@jest/console/-/console-29.0.3.tgz#a222ab87e399317a89db88a58eaec289519e807a"
504 + integrity sha512-cGg0r+klVHSYnfE977S9wmpuQ9L+iYuYgL+5bPXiUlUynLLYunRxswEmhBzvrSKGof5AKiHuTTmUKAqRcDY9dg==
505 + dependencies:
506 + "@jest/types" "^29.0.3"
507 + "@types/node" "*"
508 + chalk "^4.0.0"
509 + jest-message-util "^29.0.3"
510 + jest-util "^29.0.3"
511 + slash "^3.0.0"
512 +
513 +"@jest/core@^29.0.3":
514 + version "29.0.3"
515 + resolved "https://registry.yarnpkg.com/@jest/core/-/core-29.0.3.tgz#ba22a9cbd0c7ba36e04292e2093c547bf53ec1fd"
516 + integrity sha512-1d0hLbOrM1qQE3eP3DtakeMbKTcXiXP3afWxqz103xPyddS2NhnNghS7MaXx1dcDt4/6p4nlhmeILo2ofgi8cQ==
517 + dependencies:
518 + "@jest/console" "^29.0.3"
519 + "@jest/reporters" "^29.0.3"
520 + "@jest/test-result" "^29.0.3"
521 + "@jest/transform" "^29.0.3"
522 + "@jest/types" "^29.0.3"
523 + "@types/node" "*"
524 + ansi-escapes "^4.2.1"
525 + chalk "^4.0.0"
526 + ci-info "^3.2.0"
527 + exit "^0.1.2"
528 + graceful-fs "^4.2.9"
529 + jest-changed-files "^29.0.0"
530 + jest-config "^29.0.3"
531 + jest-haste-map "^29.0.3"
532 + jest-message-util "^29.0.3"
533 + jest-regex-util "^29.0.0"
534 + jest-resolve "^29.0.3"
535 + jest-resolve-dependencies "^29.0.3"
536 + jest-runner "^29.0.3"
537 + jest-runtime "^29.0.3"
538 + jest-snapshot "^29.0.3"
539 + jest-util "^29.0.3"
540 + jest-validate "^29.0.3"
541 + jest-watcher "^29.0.3"
542 + micromatch "^4.0.4"
543 + pretty-format "^29.0.3"
544 + slash "^3.0.0"
545 + strip-ansi "^6.0.0"
546 +
547 +"@jest/environment@^29.0.3":
548 + version "29.0.3"
549 + resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-29.0.3.tgz#7745ec30a954e828e8cc6df6a13280d3b51d8f35"
550 + integrity sha512-iKl272NKxYNQNqXMQandAIwjhQaGw5uJfGXduu8dS9llHi8jV2ChWrtOAVPnMbaaoDhnI3wgUGNDvZgHeEJQCA==
551 + dependencies:
552 + "@jest/fake-timers" "^29.0.3"
553 + "@jest/types" "^29.0.3"
554 + "@types/node" "*"
555 + jest-mock "^29.0.3"
556 +
557 +"@jest/expect-utils@^29.0.3":
558 + version "29.0.3"
559 + resolved "https://registry.yarnpkg.com/@jest/expect-utils/-/expect-utils-29.0.3.tgz#f5bb86f5565bf2dacfca31ccbd887684936045b2"
560 + integrity sha512-i1xUkau7K/63MpdwiRqaxgZOjxYs4f0WMTGJnYwUKubsNRZSeQbLorS7+I4uXVF9KQ5r61BUPAUMZ7Lf66l64Q==
561 + dependencies:
562 + jest-get-type "^29.0.0"
563 +
564 +"@jest/expect@^29.0.3":
565 + version "29.0.3"
566 + resolved "https://registry.yarnpkg.com/@jest/expect/-/expect-29.0.3.tgz#9dc7c46354eeb7a348d73881fba6402f5fdb2c30"
567 + integrity sha512-6W7K+fsI23FQ01H/BWccPyDZFrnU9QlzDcKOjrNVU5L8yUORFAJJIpmyxWPW70+X624KUNqzZwPThPMX28aXEQ==
568 + dependencies:
569 + expect "^29.0.3"
570 + jest-snapshot "^29.0.3"
571 +
572 +"@jest/fake-timers@^29.0.3":
573 + version "29.0.3"
574 + resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-29.0.3.tgz#ad5432639b715d45a86a75c47fd75019bc36b22c"
575 + integrity sha512-tmbUIo03x0TdtcZCESQ0oQSakPCpo7+s6+9mU19dd71MptkP4zCwoeZqna23//pgbhtT1Wq02VmA9Z9cNtvtCQ==
576 + dependencies:
577 + "@jest/types" "^29.0.3"
578 + "@sinonjs/fake-timers" "^9.1.2"
579 + "@types/node" "*"
580 + jest-message-util "^29.0.3"
581 + jest-mock "^29.0.3"
582 + jest-util "^29.0.3"
583 +
584 +"@jest/globals@^29.0.3":
585 + version "29.0.3"
586 + resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-29.0.3.tgz#681950c430fdc13ff9aa89b2d8d572ac0e4a1bf5"
587 + integrity sha512-YqGHT65rFY2siPIHHFjuCGUsbzRjdqkwbat+Of6DmYRg5shIXXrLdZoVE/+TJ9O1dsKsFmYhU58JvIbZRU1Z9w==
588 + dependencies:
589 + "@jest/environment" "^29.0.3"
590 + "@jest/expect" "^29.0.3"
591 + "@jest/types" "^29.0.3"
592 + jest-mock "^29.0.3"
593 +
594 +"@jest/reporters@^29.0.3":
595 + version "29.0.3"
596 + resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-29.0.3.tgz#735f110e08b44b38729d8dbbb74063bdf5aba8a5"
597 + integrity sha512-3+QU3d4aiyOWfmk1obDerie4XNCaD5Xo1IlKNde2yGEi02WQD+ZQD0i5Hgqm1e73sMV7kw6pMlCnprtEwEVwxw==
598 + dependencies:
599 + "@bcoe/v8-coverage" "^0.2.3"
600 + "@jest/console" "^29.0.3"
601 + "@jest/test-result" "^29.0.3"
602 + "@jest/transform" "^29.0.3"
603 + "@jest/types" "^29.0.3"
604 + "@jridgewell/trace-mapping" "^0.3.15"
605 + "@types/node" "*"
606 + chalk "^4.0.0"
607 + collect-v8-coverage "^1.0.0"
608 + exit "^0.1.2"
609 + glob "^7.1.3"
610 + graceful-fs "^4.2.9"
611 + istanbul-lib-coverage "^3.0.0"
612 + istanbul-lib-instrument "^5.1.0"
613 + istanbul-lib-report "^3.0.0"
614 + istanbul-lib-source-maps "^4.0.0"
615 + istanbul-reports "^3.1.3"
616 + jest-message-util "^29.0.3"
617 + jest-util "^29.0.3"
618 + jest-worker "^29.0.3"
619 + slash "^3.0.0"
620 + string-length "^4.0.1"
621 + strip-ansi "^6.0.0"
622 + terminal-link "^2.0.0"
623 + v8-to-istanbul "^9.0.1"
624 +
625 +"@jest/schemas@^29.0.0":
626 + version "29.0.0"
627 + resolved "https://registry.yarnpkg.com/@jest/schemas/-/schemas-29.0.0.tgz#5f47f5994dd4ef067fb7b4188ceac45f77fe952a"
628 + integrity sha512-3Ab5HgYIIAnS0HjqJHQYZS+zXc4tUmTmBH3z83ajI6afXp8X3ZtdLX+nXx+I7LNkJD7uN9LAVhgnjDgZa2z0kA==
629 + dependencies:
630 + "@sinclair/typebox" "^0.24.1"
631 +
632 +"@jest/source-map@^29.0.0":
633 + version "29.0.0"
634 + resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-29.0.0.tgz#f8d1518298089f8ae624e442bbb6eb870ee7783c"
635 + integrity sha512-nOr+0EM8GiHf34mq2GcJyz/gYFyLQ2INDhAylrZJ9mMWoW21mLBfZa0BUVPPMxVYrLjeiRe2Z7kWXOGnS0TFhQ==
636 + dependencies:
637 + "@jridgewell/trace-mapping" "^0.3.15"
638 + callsites "^3.0.0"
639 + graceful-fs "^4.2.9"
640 +
641 +"@jest/test-result@^29.0.3":
642 + version "29.0.3"
643 + resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-29.0.3.tgz#b03d8ef4c58be84cd5d5d3b24d4b4c8cabbf2746"
644 + integrity sha512-vViVnQjCgTmbhDKEonKJPtcFe9G/CJO4/Np4XwYJah+lF2oI7KKeRp8t1dFvv44wN2NdbDb/qC6pi++Vpp0Dlg==
645 + dependencies:
646 + "@jest/console" "^29.0.3"
647 + "@jest/types" "^29.0.3"
648 + "@types/istanbul-lib-coverage" "^2.0.0"
649 + collect-v8-coverage "^1.0.0"
650 +
651 +"@jest/test-sequencer@^29.0.3":
652 + version "29.0.3"
653 + resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-29.0.3.tgz#0681061ad21fb8e293b49c4fdf7e631ca79240ba"
654 + integrity sha512-Hf4+xYSWZdxTNnhDykr8JBs0yBN/nxOXyUQWfotBUqqy0LF9vzcFB0jm/EDNZCx587znLWTIgxcokW7WeZMobQ==
655 + dependencies:
656 + "@jest/test-result" "^29.0.3"
657 + graceful-fs "^4.2.9"
658 + jest-haste-map "^29.0.3"
659 + slash "^3.0.0"
660 +
661 +"@jest/transform@^29.0.3":
662 + version "29.0.3"
663 + resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-29.0.3.tgz#9eb1fed2072a0354f190569807d1250572fb0970"
664 + integrity sha512-C5ihFTRYaGDbi/xbRQRdbo5ddGtI4VSpmL6AIcZxdhwLbXMa7PcXxxqyI91vGOFHnn5aVM3WYnYKCHEqmLVGzg==
665 + dependencies:
666 + "@babel/core" "^7.11.6"
667 + "@jest/types" "^29.0.3"
668 + "@jridgewell/trace-mapping" "^0.3.15"
669 + babel-plugin-istanbul "^6.1.1"
670 + chalk "^4.0.0"
671 + convert-source-map "^1.4.0"
672 + fast-json-stable-stringify "^2.1.0"
673 + graceful-fs "^4.2.9"
674 + jest-haste-map "^29.0.3"
675 + jest-regex-util "^29.0.0"
676 + jest-util "^29.0.3"
677 + micromatch "^4.0.4"
678 + pirates "^4.0.4"
679 + slash "^3.0.0"
680 + write-file-atomic "^4.0.1"
681 +
682 +"@jest/types@^24.9.0":
683 + version "24.9.0"
684 + resolved "https://registry.yarnpkg.com/@jest/types/-/types-24.9.0.tgz#63cb26cb7500d069e5a389441a7c6ab5e909fc59"
685 + integrity sha512-XKK7ze1apu5JWQ5eZjHITP66AX+QsLlbaJRBGYr8pNzwcAE2JVkwnf0yqjHTsDRcjR0mujy/NmZMXw5kl+kGBw==
686 + dependencies:
687 + "@types/istanbul-lib-coverage" "^2.0.0"
688 + "@types/istanbul-reports" "^1.1.1"
689 + "@types/yargs" "^13.0.0"
690 +
691 +"@jest/types@^29.0.3":
692 + version "29.0.3"
693 + resolved "https://registry.yarnpkg.com/@jest/types/-/types-29.0.3.tgz#0be78fdddb1a35aeb2041074e55b860561c8ef63"
694 + integrity sha512-coBJmOQvurXjN1Hh5PzF7cmsod0zLIOXpP8KD161mqNlroMhLcwpODiEzi7ZsRl5Z/AIuxpeNm8DCl43F4kz8A==
695 + dependencies:
696 + "@jest/schemas" "^29.0.0"
697 + "@types/istanbul-lib-coverage" "^2.0.0"
698 + "@types/istanbul-reports" "^3.0.0"
699 + "@types/node" "*"
700 + "@types/yargs" "^17.0.8"
701 + chalk "^4.0.0"
702 +
703 +"@jridgewell/gen-mapping@^0.1.0":
704 + version "0.1.1"
705 + resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz#e5d2e450306a9491e3bd77e323e38d7aff315996"
706 + integrity sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==
707 + dependencies:
708 + "@jridgewell/set-array" "^1.0.0"
709 + "@jridgewell/sourcemap-codec" "^1.4.10"
710 +
711 +"@jridgewell/gen-mapping@^0.3.2":
712 + version "0.3.2"
713 + resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz#c1aedc61e853f2bb9f5dfe6d4442d3b565b253b9"
714 + integrity sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==
715 + dependencies:
716 + "@jridgewell/set-array" "^1.0.1"
717 + "@jridgewell/sourcemap-codec" "^1.4.10"
718 + "@jridgewell/trace-mapping" "^0.3.9"
719 +
720 +"@jridgewell/resolve-uri@^3.0.3":
721 + version "3.1.0"
722 + resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz#2203b118c157721addfe69d47b70465463066d78"
723 + integrity sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==
724 +
725 +"@jridgewell/set-array@^1.0.0", "@jridgewell/set-array@^1.0.1":
726 + version "1.1.2"
727 + resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72"
728 + integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==
729 +
730 +"@jridgewell/sourcemap-codec@^1.4.10":
731 + version "1.4.14"
732 + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz#add4c98d341472a289190b424efbdb096991bb24"
733 + integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==
734 +
735 +"@jridgewell/trace-mapping@0.3.9":
736 + version "0.3.9"
737 + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz#6534fd5933a53ba7cbf3a17615e273a0d1273ff9"
738 + integrity sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==
739 + dependencies:
740 + "@jridgewell/resolve-uri" "^3.0.3"
741 + "@jridgewell/sourcemap-codec" "^1.4.10"
742 +
743 +"@jridgewell/trace-mapping@^0.3.12", "@jridgewell/trace-mapping@^0.3.15", "@jridgewell/trace-mapping@^0.3.9":
744 + version "0.3.15"
745 + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.15.tgz#aba35c48a38d3fd84b37e66c9c0423f9744f9774"
746 + integrity sha512-oWZNOULl+UbhsgB51uuZzglikfIKSUBO/M9W2OfEjn7cmqoAiCgmv9lyACTUacZwBz0ITnJ2NqjU8Tx0DHL88g==
747 + dependencies:
748 + "@jridgewell/resolve-uri" "^3.0.3"
749 + "@jridgewell/sourcemap-codec" "^1.4.10"
750 +
751 +"@sinclair/typebox@^0.24.1":
752 + version "0.24.42"
753 + resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.24.42.tgz#a74b608d494a1f4cc079738e050142a678813f52"
754 + integrity sha512-d+2AtrHGyWek2u2ITF0lHRIv6Tt7X0dEHW+0rP+5aDCEjC3fiN2RBjrLD0yU0at52BcZbRGxLbAtXiR0hFCjYw==
755 +
756 +"@sinonjs/commons@^1.7.0":
757 + version "1.8.3"
758 + resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-1.8.3.tgz#3802ddd21a50a949b6721ddd72da36e67e7f1b2d"
759 + integrity sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ==
760 + dependencies:
761 + type-detect "4.0.8"
762 +
763 +"@sinonjs/fake-timers@^9.1.2":
764 + version "9.1.2"
765 + resolved "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-9.1.2.tgz#4eaab737fab77332ab132d396a3c0d364bd0ea8c"
766 + integrity sha512-BPS4ynJW/o92PUR4wgriz2Ud5gpST5vz6GQfMixEDK0Z8ZCUv2M7SkBLykH56T++Xs+8ln9zTGbOvNGIe02/jw==
767 + dependencies:
768 + "@sinonjs/commons" "^1.7.0"
769 +
770 +"@testing-library/dom@^8.5.0":
771 + version "8.18.1"
772 + resolved "https://registry.yarnpkg.com/@testing-library/dom/-/dom-8.18.1.tgz#80f91be02bc171fe5a3a7003f88207be31ac2cf3"
773 + integrity sha512-oEvsm2B/WtcHKE+IcEeeCqNU/ltFGaVyGbpcm4g/2ytuT49jrlH9x5qRKL/H3A6yfM4YAbSbC0ceT5+9CEXnLg==
774 + dependencies:
775 + "@babel/code-frame" "^7.10.4"
776 + "@babel/runtime" "^7.12.5"
777 + "@types/aria-query" "^4.2.0"
778 + aria-query "^5.0.0"
779 + chalk "^4.1.0"
780 + dom-accessibility-api "^0.5.9"
781 + lz-string "^1.4.4"
782 + pretty-format "^27.0.2"
783 +
784 +"@testing-library/react@^13.4.0":
785 + version "13.4.0"
786 + resolved "https://registry.yarnpkg.com/@testing-library/react/-/react-13.4.0.tgz#6a31e3bf5951615593ad984e96b9e5e2d9380966"
787 + integrity sha512-sXOGON+WNTh3MLE9rve97ftaZukN3oNf2KjDy7YTx6hcTO2uuLHuCGynMDhFwGw/jYf4OJ2Qk0i4i79qMNNkyw==
788 + dependencies:
789 + "@babel/runtime" "^7.12.5"
790 + "@testing-library/dom" "^8.5.0"
791 + "@types/react-dom" "^18.0.0"
792 +
793 +"@tootallnate/once@2":
794 + version "2.0.0"
795 + resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-2.0.0.tgz#f544a148d3ab35801c1f633a7441fd87c2e484bf"
796 + integrity sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==
797 +
798 +"@tsconfig/node10@^1.0.7":
799 + version "1.0.9"
800 + resolved "https://registry.yarnpkg.com/@tsconfig/node10/-/node10-1.0.9.tgz#df4907fc07a886922637b15e02d4cebc4c0021b2"
801 + integrity sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==
802 +
803 +"@tsconfig/node12@^1.0.7":
804 + version "1.0.11"
805 + resolved "https://registry.yarnpkg.com/@tsconfig/node12/-/node12-1.0.11.tgz#ee3def1f27d9ed66dac6e46a295cffb0152e058d"
806 + integrity sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==
807 +
808 +"@tsconfig/node14@^1.0.0":
809 + version "1.0.3"
810 + resolved "https://registry.yarnpkg.com/@tsconfig/node14/-/node14-1.0.3.tgz#e4386316284f00b98435bf40f72f75a09dabf6c1"
811 + integrity sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==
812 +
813 +"@tsconfig/node16-strictest@^1.0.3":
814 + version "1.0.4"
815 + resolved "https://registry.yarnpkg.com/@tsconfig/node16-strictest/-/node16-strictest-1.0.4.tgz#14218b0341223d5caa692fa789fb374909690875"
816 + integrity sha512-kp6/DuAoKzHVv5U+p0uOesYbjrEvrYVNdQMl163a+yXXUv9twabvkCGEn3pmVxKXB45JU5MPGolDDWnONZL5ZQ==
817 +
818 +"@tsconfig/node16@^1.0.2":
819 + version "1.0.3"
820 + resolved "https://registry.yarnpkg.com/@tsconfig/node16/-/node16-1.0.3.tgz#472eaab5f15c1ffdd7f8628bd4c4f753995ec79e"
821 + integrity sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==
822 +
823 +"@types/aria-query@^4.2.0":
824 + version "4.2.2"
825 + resolved "https://registry.yarnpkg.com/@types/aria-query/-/aria-query-4.2.2.tgz#ed4e0ad92306a704f9fb132a0cfcf77486dbe2bc"
826 + integrity sha512-HnYpAE1Y6kRyKM/XkEuiRQhTHvkzMBurTHnpFLYLBGPIylZNPs9jJcuOOYWxPLJCSEtmZT0Y8rHDokKN7rRTig==
827 +
828 +"@types/babel__core@^7.1.14":
829 + version "7.1.19"
830 + resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.1.19.tgz#7b497495b7d1b4812bdb9d02804d0576f43ee460"
831 + integrity sha512-WEOTgRsbYkvA/KCsDwVEGkd7WAr1e3g31VHQ8zy5gul/V1qKullU/BU5I68X5v7V3GnB9eotmom4v5a5gjxorw==
832 + dependencies:
833 + "@babel/parser" "^7.1.0"
834 + "@babel/types" "^7.0.0"
835 + "@types/babel__generator" "*"
836 + "@types/babel__template" "*"
837 + "@types/babel__traverse" "*"
838 +
839 +"@types/babel__generator@*":
840 + version "7.6.4"
841 + resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.6.4.tgz#1f20ce4c5b1990b37900b63f050182d28c2439b7"
842 + integrity sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==
843 + dependencies:
844 + "@babel/types" "^7.0.0"
845 +
846 +"@types/babel__template@*":
847 + version "7.4.1"
848 + resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.4.1.tgz#3d1a48fd9d6c0edfd56f2ff578daed48f36c8969"
849 + integrity sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==
850 + dependencies:
851 + "@babel/parser" "^7.1.0"
852 + "@babel/types" "^7.0.0"
853 +
854 +"@types/babel__traverse@*", "@types/babel__traverse@^7.0.6":
855 + version "7.18.2"
856 + resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.18.2.tgz#235bf339d17185bdec25e024ca19cce257cc7309"
857 + integrity sha512-FcFaxOr2V5KZCviw1TnutEMVUVsGt4D2hP1TAfXZAMKuHYW3xQhe3jTxNPWutgCJ3/X1c5yX8ZoGVEItxKbwBg==
858 + dependencies:
859 + "@babel/types" "^7.3.0"
860 +
861 +"@types/graceful-fs@^4.1.3":
862 + version "4.1.5"
863 + resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.5.tgz#21ffba0d98da4350db64891f92a9e5db3cdb4e15"
864 + integrity sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw==
865 + dependencies:
866 + "@types/node" "*"
867 +
868 +"@types/invariant@^2.2.35":
869 + version "2.2.35"
870 + resolved "https://registry.yarnpkg.com/@types/invariant/-/invariant-2.2.35.tgz#cd3ebf581a6557452735688d8daba6cf0bd5a3be"
871 + integrity sha512-DxX1V9P8zdJPYQat1gHyY0xj3efl8gnMVjiM9iCY6y27lj+PoQWkgjt8jDqmovPqULkKVpKRg8J36iQiA+EtEg==
872 +
873 +"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0", "@types/istanbul-lib-coverage@^2.0.1":
874 + version "2.0.4"
875 + resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz#8467d4b3c087805d63580480890791277ce35c44"
876 + integrity sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==
877 +
878 +"@types/istanbul-lib-report@*":
879 + version "3.0.0"
880 + resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#c14c24f18ea8190c118ee7562b7ff99a36552686"
881 + integrity sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==
882 + dependencies:
883 + "@types/istanbul-lib-coverage" "*"
884 +
885 +"@types/istanbul-reports@^1.1.1":
886 + version "1.1.2"
887 + resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-1.1.2.tgz#e875cc689e47bce549ec81f3df5e6f6f11cfaeb2"
888 + integrity sha512-P/W9yOX/3oPZSpaYOCQzGqgCQRXn0FFO/V8bWrCQs+wLmvVVxk6CRBXALEvNs9OHIatlnlFokfhuDo2ug01ciw==
889 + dependencies:
890 + "@types/istanbul-lib-coverage" "*"
891 + "@types/istanbul-lib-report" "*"
892 +
893 +"@types/istanbul-reports@^3.0.0":
894 + version "3.0.1"
895 + resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz#9153fe98bba2bd565a63add9436d6f0d7f8468ff"
896 + integrity sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==
897 + dependencies:
898 + "@types/istanbul-lib-report" "*"
899 +
900 +"@types/jest@^29.0.3":
901 + version "29.0.3"
902 + resolved "https://registry.yarnpkg.com/@types/jest/-/jest-29.0.3.tgz#b61a5ed100850686b8d3c5e28e3a1926b2001b59"
903 + integrity sha512-F6ukyCTwbfsEX5F2YmVYmM5TcTHy1q9P5rWlRbrk56KyMh3v9xRGUO3aa8+SkvMi0SHXtASJv1283enXimC0Og==
904 + dependencies:
905 + expect "^29.0.0"
906 + pretty-format "^29.0.0"
907 +
908 +"@types/jsdom@^20.0.0":
909 + version "20.0.0"
910 + resolved "https://registry.yarnpkg.com/@types/jsdom/-/jsdom-20.0.0.tgz#4414fb629465167f8b7b3804b9e067bdd99f1791"
911 + integrity sha512-YfAchFs0yM1QPDrLm2VHe+WHGtqms3NXnXAMolrgrVP6fgBHHXy1ozAbo/dFtPNtZC/m66bPiCTWYmqp1F14gA==
912 + dependencies:
913 + "@types/node" "*"
914 + "@types/tough-cookie" "*"
915 + parse5 "^7.0.0"
916 +
917 +"@types/node@*", "@types/node@^18.7.18":
918 + version "18.7.19"
919 + resolved "https://registry.yarnpkg.com/@types/node/-/node-18.7.19.tgz#ad83aa9b7af470fab7e0f562be87e97dc8ffe08e"
920 + integrity sha512-Sq1itGUKUX1ap7GgZlrzdBydjbsJL/NSQt/4wkAxUJ7/OS5c2WkoN6WSpWc2Yc5wtKMZOUA0VCs/j2XJadN3HA==
921 +
922 +"@types/prettier@^2.1.5":
923 + version "2.7.0"
924 + resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.7.0.tgz#ea03e9f0376a4446f44797ca19d9c46c36e352dc"
925 + integrity sha512-RI1L7N4JnW5gQw2spvL7Sllfuf1SaHdrZpCHiBlCXjIlufi1SMNnbu2teze3/QE67Fg2tBlH7W+mi4hVNk4p0A==
926 +
927 +"@types/prop-types@*":
928 + version "15.7.5"
929 + resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.5.tgz#5f19d2b85a98e9558036f6a3cacc8819420f05cf"
930 + integrity sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==
931 +
932 +"@types/react-dom@^18.0.0":
933 + version "18.0.6"
934 + resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-18.0.6.tgz#36652900024842b74607a17786b6662dd1e103a1"
935 + integrity sha512-/5OFZgfIPSwy+YuIBP/FgJnQnsxhZhjjrnxudMddeblOouIodEQ75X14Rr4wGSG/bknL+Omy9iWlLo1u/9GzAA==
936 + dependencies:
937 + "@types/react" "*"
938 +
939 +"@types/react@*":
940 + version "18.0.21"
941 + resolved "https://registry.yarnpkg.com/@types/react/-/react-18.0.21.tgz#b8209e9626bb00a34c76f55482697edd2b43cc67"
942 + integrity sha512-7QUCOxvFgnD5Jk8ZKlUAhVcRj7GuJRjnjjiY/IUBWKgOlnvDvTMLD4RTF7NPyVmbRhNrbomZiOepg7M/2Kj1mA==
943 + dependencies:
944 + "@types/prop-types" "*"
945 + "@types/scheduler" "*"
946 + csstype "^3.0.2"
947 +
948 +"@types/scheduler@*":
949 + version "0.16.2"
950 + resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.16.2.tgz#1a62f89525723dde24ba1b01b092bf5df8ad4d39"
951 + integrity sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==
952 +
953 +"@types/stack-utils@^2.0.0":
954 + version "2.0.1"
955 + resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.1.tgz#20f18294f797f2209b5f65c8e3b5c8e8261d127c"
956 + integrity sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==
957 +
958 +"@types/tough-cookie@*":
959 + version "4.0.2"
960 + resolved "https://registry.yarnpkg.com/@types/tough-cookie/-/tough-cookie-4.0.2.tgz#6286b4c7228d58ab7866d19716f3696e03a09397"
961 + integrity sha512-Q5vtl1W5ue16D+nIaW8JWebSSraJVlK+EthKn7e7UcD4KWsaSJ8BqGPXNaPghgtcn/fhvrN17Tv8ksUsQpiplw==
962 +
963 +"@types/yargs-parser@*":
964 + version "21.0.0"
965 + resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-21.0.0.tgz#0c60e537fa790f5f9472ed2776c2b71ec117351b"
966 + integrity sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==
967 +
968 +"@types/yargs@^13.0.0":
969 + version "13.0.12"
970 + resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-13.0.12.tgz#d895a88c703b78af0465a9de88aa92c61430b092"
971 + integrity sha512-qCxJE1qgz2y0hA4pIxjBR+PelCH0U5CK1XJXFwCNqfmliatKp47UCXXE9Dyk1OXBDLvsCF57TqQEJaeLfDYEOQ==
972 + dependencies:
973 + "@types/yargs-parser" "*"
974 +
975 +"@types/yargs@^17.0.8":
976 + version "17.0.13"
977 + resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-17.0.13.tgz#34cced675ca1b1d51fcf4d34c3c6f0fa142a5c76"
978 + integrity sha512-9sWaruZk2JGxIQU+IhI1fhPYRcQ0UuTNuKuCW9bR5fp7qi2Llf7WDzNa17Cy7TKnh3cdxDOiyTu6gaLS0eDatg==
979 + dependencies:
980 + "@types/yargs-parser" "*"
981 +
982 +abab@^2.0.6:
983 + version "2.0.6"
984 + resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.6.tgz#41b80f2c871d19686216b82309231cfd3cb3d291"
985 + integrity sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==
986 +
987 +acorn-globals@^6.0.0:
988 + version "6.0.0"
989 + resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-6.0.0.tgz#46cdd39f0f8ff08a876619b55f5ac8a6dc770b45"
990 + integrity sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==
991 + dependencies:
992 + acorn "^7.1.1"
993 + acorn-walk "^7.1.1"
994 +
995 +acorn-walk@^7.1.1:
996 + version "7.2.0"
997 + resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-7.2.0.tgz#0de889a601203909b0fbe07b8938dc21d2e967bc"
998 + integrity sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==
999 +
1000 +acorn-walk@^8.1.1:
1001 + version "8.2.0"
1002 + resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.2.0.tgz#741210f2e2426454508853a2f44d0ab83b7f69c1"
1003 + integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==
1004 +
1005 +acorn@^7.1.1:
1006 + version "7.4.1"
1007 + resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa"
1008 + integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==
1009 +
1010 +acorn@^8.4.1, acorn@^8.7.1:
1011 + version "8.8.0"
1012 + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.0.tgz#88c0187620435c7f6015803f5539dae05a9dbea8"
1013 + integrity sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w==
1014 +
1015 +agent-base@6:
1016 + version "6.0.2"
1017 + resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77"
1018 + integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==
1019 + dependencies:
1020 + debug "4"
1021 +
1022 +ansi-escapes@^4.2.1:
1023 + version "4.3.2"
1024 + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e"
1025 + integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==
1026 + dependencies:
1027 + type-fest "^0.21.3"
1028 +
1029 +ansi-regex@^4.0.0:
1030 + version "4.1.1"
1031 + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.1.tgz#164daac87ab2d6f6db3a29875e2d1766582dabed"
1032 + integrity sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==
1033 +
1034 +ansi-regex@^5.0.1:
1035 + version "5.0.1"
1036 + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304"
1037 + integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==
1038 +
1039 +ansi-styles@^3.2.0, ansi-styles@^3.2.1:
1040 + version "3.2.1"
1041 + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d"
1042 + integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==
1043 + dependencies:
1044 + color-convert "^1.9.0"
1045 +
1046 +ansi-styles@^4.0.0, ansi-styles@^4.1.0:
1047 + version "4.3.0"
1048 + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937"
1049 + integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==
1050 + dependencies:
1051 + color-convert "^2.0.1"
1052 +
1053 +ansi-styles@^5.0.0:
1054 + version "5.2.0"
1055 + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-5.2.0.tgz#07449690ad45777d1924ac2abb2fc8895dba836b"
1056 + integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==
1057 +
1058 +anymatch@^3.0.3:
1059 + version "3.1.2"
1060 + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716"
1061 + integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==
1062 + dependencies:
1063 + normalize-path "^3.0.0"
1064 + picomatch "^2.0.4"
1065 +
1066 +arg@^4.1.0:
1067 + version "4.1.3"
1068 + resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089"
1069 + integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==
1070 +
1071 +argparse@^1.0.7:
1072 + version "1.0.10"
1073 + resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911"
1074 + integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==
1075 + dependencies:
1076 + sprintf-js "~1.0.2"
1077 +
1078 +aria-query@^5.0.0:
1079 + version "5.0.2"
1080 + resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-5.0.2.tgz#0b8a744295271861e1d933f8feca13f9b70cfdc1"
1081 + integrity sha512-eigU3vhqSO+Z8BKDnVLN/ompjhf3pYzecKXz8+whRy+9gZu8n1TCGfwzQUUPnqdHl9ax1Hr9031orZ+UOEYr7Q==
1082 +
1083 +asynckit@^0.4.0:
1084 + version "0.4.0"
1085 + resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79"
1086 + integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==
1087 +
1088 +babel-jest@^29.0.3:
1089 + version "29.0.3"
1090 + resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-29.0.3.tgz#64e156a47a77588db6a669a88dedff27ed6e260f"
1091 + integrity sha512-ApPyHSOhS/sVzwUOQIWJmdvDhBsMG01HX9z7ogtkp1TToHGGUWFlnXJUIzCgKPSfiYLn3ibipCYzsKSURHEwLg==
1092 + dependencies:
1093 + "@jest/transform" "^29.0.3"
1094 + "@types/babel__core" "^7.1.14"
1095 + babel-plugin-istanbul "^6.1.1"
1096 + babel-preset-jest "^29.0.2"
1097 + chalk "^4.0.0"
1098 + graceful-fs "^4.2.9"
1099 + slash "^3.0.0"
1100 +
1101 +babel-plugin-dynamic-import-node@^2.3.3:
1102 + version "2.3.3"
1103 + resolved "https://registry.yarnpkg.com/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz#84fda19c976ec5c6defef57f9427b3def66e17a3"
1104 + integrity sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==
1105 + dependencies:
1106 + object.assign "^4.1.0"
1107 +
1108 +babel-plugin-istanbul@^6.1.1:
1109 + version "6.1.1"
1110 + resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz#fa88ec59232fd9b4e36dbbc540a8ec9a9b47da73"
1111 + integrity sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==
1112 + dependencies:
1113 + "@babel/helper-plugin-utils" "^7.0.0"
1114 + "@istanbuljs/load-nyc-config" "^1.0.0"
1115 + "@istanbuljs/schema" "^0.1.2"
1116 + istanbul-lib-instrument "^5.0.4"
1117 + test-exclude "^6.0.0"
1118 +
1119 +babel-plugin-jest-hoist@^29.0.2:
1120 + version "29.0.2"
1121 + resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.0.2.tgz#ae61483a829a021b146c016c6ad39b8bcc37c2c8"
1122 + integrity sha512-eBr2ynAEFjcebVvu8Ktx580BD1QKCrBG1XwEUTXJe285p9HA/4hOhfWCFRQhTKSyBV0VzjhG7H91Eifz9s29hg==
1123 + dependencies:
1124 + "@babel/template" "^7.3.3"
1125 + "@babel/types" "^7.3.3"
1126 + "@types/babel__core" "^7.1.14"
1127 + "@types/babel__traverse" "^7.0.6"
1128 +
1129 +babel-preset-current-node-syntax@^1.0.0:
1130 + version "1.0.1"
1131 + resolved "https://registry.yarnpkg.com/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz#b4399239b89b2a011f9ddbe3e4f401fc40cff73b"
1132 + integrity sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==
1133 + dependencies:
1134 + "@babel/plugin-syntax-async-generators" "^7.8.4"
1135 + "@babel/plugin-syntax-bigint" "^7.8.3"
1136 + "@babel/plugin-syntax-class-properties" "^7.8.3"
1137 + "@babel/plugin-syntax-import-meta" "^7.8.3"
1138 + "@babel/plugin-syntax-json-strings" "^7.8.3"
1139 + "@babel/plugin-syntax-logical-assignment-operators" "^7.8.3"
1140 + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3"
1141 + "@babel/plugin-syntax-numeric-separator" "^7.8.3"
1142 + "@babel/plugin-syntax-object-rest-spread" "^7.8.3"
1143 + "@babel/plugin-syntax-optional-catch-binding" "^7.8.3"
1144 + "@babel/plugin-syntax-optional-chaining" "^7.8.3"
1145 + "@babel/plugin-syntax-top-level-await" "^7.8.3"
1146 +
1147 +babel-preset-jest@^29.0.2:
1148 + version "29.0.2"
1149 + resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-29.0.2.tgz#e14a7124e22b161551818d89e5bdcfb3b2b0eac7"
1150 + integrity sha512-BeVXp7rH5TK96ofyEnHjznjLMQ2nAeDJ+QzxKnHAAMs0RgrQsCywjAN8m4mOm5Di0pxU//3AoEeJJrerMH5UeA==
1151 + dependencies:
1152 + babel-plugin-jest-hoist "^29.0.2"
1153 + babel-preset-current-node-syntax "^1.0.0"
1154 +
1155 +balanced-match@^1.0.0:
1156 + version "1.0.2"
1157 + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee"
1158 + integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==
1159 +
1160 +brace-expansion@^1.1.7:
1161 + version "1.1.11"
1162 + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd"
1163 + integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==
1164 + dependencies:
1165 + balanced-match "^1.0.0"
1166 + concat-map "0.0.1"
1167 +
1168 +braces@^3.0.2:
1169 + version "3.0.2"
1170 + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107"
1171 + integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==
1172 + dependencies:
1173 + fill-range "^7.0.1"
1174 +
1175 +browser-process-hrtime@^1.0.0:
1176 + version "1.0.0"
1177 + resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz#3c9b4b7d782c8121e56f10106d84c0d0ffc94626"
1178 + integrity sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==
1179 +
1180 +browserslist@^4.21.3:
1181 + version "4.21.4"
1182 + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.4.tgz#e7496bbc67b9e39dd0f98565feccdcb0d4ff6987"
1183 + integrity sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==
1184 + dependencies:
1185 + caniuse-lite "^1.0.30001400"
1186 + electron-to-chromium "^1.4.251"
1187 + node-releases "^2.0.6"
1188 + update-browserslist-db "^1.0.9"
1189 +
1190 +bs-logger@0.x:
1191 + version "0.2.6"
1192 + resolved "https://registry.yarnpkg.com/bs-logger/-/bs-logger-0.2.6.tgz#eb7d365307a72cf974cc6cda76b68354ad336bd8"
1193 + integrity sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==
1194 + dependencies:
1195 + fast-json-stable-stringify "2.x"
1196 +
1197 +bser@2.1.1:
1198 + version "2.1.1"
1199 + resolved "https://registry.yarnpkg.com/bser/-/bser-2.1.1.tgz#e6787da20ece9d07998533cfd9de6f5c38f4bc05"
1200 + integrity sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==
1201 + dependencies:
1202 + node-int64 "^0.4.0"
1203 +
1204 +buffer-from@^1.0.0:
1205 + version "1.1.2"
1206 + resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5"
1207 + integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==
1208 +
1209 +call-bind@^1.0.2:
1210 + version "1.0.2"
1211 + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c"
1212 + integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==
1213 + dependencies:
1214 + function-bind "^1.1.1"
1215 + get-intrinsic "^1.0.2"
1216 +
1217 +callsites@^3.0.0:
1218 + version "3.1.0"
1219 + resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73"
1220 + integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==
1221 +
1222 +camelcase@^5.3.1:
1223 + version "5.3.1"
1224 + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320"
1225 + integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==
1226 +
1227 +camelcase@^6.2.0:
1228 + version "6.3.0"
1229 + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a"
1230 + integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==
1231 +
1232 +caniuse-lite@^1.0.30001400:
1233 + version "1.0.30001410"
1234 + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001410.tgz#b5a86366fbbf439d75dd3db1d21137a73e829f44"
1235 + integrity sha512-QoblBnuE+rG0lc3Ur9ltP5q47lbguipa/ncNMyyGuqPk44FxbScWAeEO+k5fSQ8WekdAK4mWqNs1rADDAiN5xQ==
1236 +
1237 +chalk@^2.0.0:
1238 + version "2.4.2"
1239 + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424"
1240 + integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==
1241 + dependencies:
1242 + ansi-styles "^3.2.1"
1243 + escape-string-regexp "^1.0.5"
1244 + supports-color "^5.3.0"
1245 +
1246 +chalk@^4.0.0, chalk@^4.1.0:
1247 + version "4.1.2"
1248 + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01"
1249 + integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==
1250 + dependencies:
1251 + ansi-styles "^4.1.0"
1252 + supports-color "^7.1.0"
1253 +
1254 +char-regex@^1.0.2:
1255 + version "1.0.2"
1256 + resolved "https://registry.yarnpkg.com/char-regex/-/char-regex-1.0.2.tgz#d744358226217f981ed58f479b1d6bcc29545dcf"
1257 + integrity sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==
1258 +
1259 +ci-info@^3.2.0:
1260 + version "3.4.0"
1261 + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.4.0.tgz#b28484fd436cbc267900364f096c9dc185efb251"
1262 + integrity sha512-t5QdPT5jq3o262DOQ8zA6E1tlH2upmUc4Hlvrbx1pGYJuiiHl7O7rvVNI+l8HTVhd/q3Qc9vqimkNk5yiXsAug==
1263 +
1264 +cjs-module-lexer@^1.0.0:
1265 + version "1.2.2"
1266 + resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz#9f84ba3244a512f3a54e5277e8eef4c489864e40"
1267 + integrity sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==
1268 +
1269 +cliui@^7.0.2:
1270 + version "7.0.4"
1271 + resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f"
1272 + integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==
1273 + dependencies:
1274 + string-width "^4.2.0"
1275 + strip-ansi "^6.0.0"
1276 + wrap-ansi "^7.0.0"
1277 +
1278 +co@^4.6.0:
1279 + version "4.6.0"
1280 + resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184"
1281 + integrity sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==
1282 +
1283 +collect-v8-coverage@^1.0.0:
1284 + version "1.0.1"
1285 + resolved "https://registry.yarnpkg.com/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz#cc2c8e94fc18bbdffe64d6534570c8a673b27f59"
1286 + integrity sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==
1287 +
1288 +color-convert@^1.9.0:
1289 + version "1.9.3"
1290 + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8"
1291 + integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==
1292 + dependencies:
1293 + color-name "1.1.3"
1294 +
1295 +color-convert@^2.0.1:
1296 + version "2.0.1"
1297 + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3"
1298 + integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==
1299 + dependencies:
1300 + color-name "~1.1.4"
1301 +
1302 +color-name@1.1.3:
1303 + version "1.1.3"
1304 + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25"
1305 + integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==
1306 +
1307 +color-name@~1.1.4:
1308 + version "1.1.4"
1309 + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2"
1310 + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==
1311 +
1312 +combined-stream@^1.0.8:
1313 + version "1.0.8"
1314 + resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f"
1315 + integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==
1316 + dependencies:
1317 + delayed-stream "~1.0.0"
1318 +
1319 +concat-map@0.0.1:
1320 + version "0.0.1"
1321 + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
1322 + integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==
1323 +
1324 +concurrently@^7.4.0:
1325 + version "7.4.0"
1326 + resolved "https://registry.yarnpkg.com/concurrently/-/concurrently-7.4.0.tgz#bb0e344964bc172673577c420db21e963f2f7368"
1327 + integrity sha512-M6AfrueDt/GEna/Vg9BqQ+93yuvzkSKmoTixnwEJkH0LlcGrRC2eCmjeG1tLLHIYfpYJABokqSGyMcXjm96AFA==
1328 + dependencies:
1329 + chalk "^4.1.0"
1330 + date-fns "^2.29.1"
1331 + lodash "^4.17.21"
1332 + rxjs "^7.0.0"
1333 + shell-quote "^1.7.3"
1334 + spawn-command "^0.0.2-1"
1335 + supports-color "^8.1.0"
1336 + tree-kill "^1.2.2"
1337 + yargs "^17.3.1"
1338 +
1339 +convert-source-map@^1.1.0, convert-source-map@^1.4.0, convert-source-map@^1.6.0, convert-source-map@^1.7.0:
1340 + version "1.8.0"
1341 + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.8.0.tgz#f3373c32d21b4d780dd8004514684fb791ca4369"
1342 + integrity sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==
1343 + dependencies:
1344 + safe-buffer "~5.1.1"
1345 +
1346 +create-require@^1.1.0:
1347 + version "1.1.1"
1348 + resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333"
1349 + integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==
1350 +
1351 +cross-spawn@^7.0.3:
1352 + version "7.0.3"
1353 + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6"
1354 + integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==
1355 + dependencies:
1356 + path-key "^3.1.0"
1357 + shebang-command "^2.0.0"
1358 + which "^2.0.1"
1359 +
1360 +cssom@^0.5.0:
1361 + version "0.5.0"
1362 + resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.5.0.tgz#d254fa92cd8b6fbd83811b9fbaed34663cc17c36"
1363 + integrity sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw==
1364 +
1365 +cssom@~0.3.6:
1366 + version "0.3.8"
1367 + resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.8.tgz#9f1276f5b2b463f2114d3f2c75250af8c1a36f4a"
1368 + integrity sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==
1369 +
1370 +cssstyle@^2.3.0:
1371 + version "2.3.0"
1372 + resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-2.3.0.tgz#ff665a0ddbdc31864b09647f34163443d90b0852"
1373 + integrity sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==
1374 + dependencies:
1375 + cssom "~0.3.6"
1376 +
1377 +csstype@^3.0.2:
1378 + version "3.1.1"
1379 + resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.1.tgz#841b532c45c758ee546a11d5bd7b7b473c8c30b9"
1380 + integrity sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==
1381 +
1382 +data-urls@^3.0.2:
1383 + version "3.0.2"
1384 + resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-3.0.2.tgz#9cf24a477ae22bcef5cd5f6f0bfbc1d2d3be9143"
1385 + integrity sha512-Jy/tj3ldjZJo63sVAvg6LHt2mHvl4V6AgRAmNDtLdm7faqtsx+aJG42rsyCo9JCoRVKwPFzKlIPx3DIibwSIaQ==
1386 + dependencies:
1387 + abab "^2.0.6"
1388 + whatwg-mimetype "^3.0.0"
1389 + whatwg-url "^11.0.0"
1390 +
1391 +date-fns@^2.29.1:
1392 + version "2.29.3"
1393 + resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-2.29.3.tgz#27402d2fc67eb442b511b70bbdf98e6411cd68a8"
1394 + integrity sha512-dDCnyH2WnnKusqvZZ6+jA1O51Ibt8ZMRNkDZdyAyK4YfbDwa/cEmuztzG5pk6hqlp9aSBPYcjOlktquahGwGeA==
1395 +
1396 +debug@4, debug@^4.1.0, debug@^4.1.1:
1397 + version "4.3.4"
1398 + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865"
1399 + integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==
1400 + dependencies:
1401 + ms "2.1.2"
1402 +
1403 +decimal.js@^10.3.1:
1404 + version "10.4.1"
1405 + resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.4.1.tgz#be75eeac4a2281aace80c1a8753587c27ef053e7"
1406 + integrity sha512-F29o+vci4DodHYT9UrR5IEbfBw9pE5eSapIJdTqXK5+6hq+t8VRxwQyKlW2i+KDKFkkJQRvFyI/QXD83h8LyQw==
1407 +
1408 +dedent@^0.7.0:
1409 + version "0.7.0"
1410 + resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c"
1411 + integrity sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==
1412 +
1413 +deep-is@~0.1.3:
1414 + version "0.1.4"
1415 + resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831"
1416 + integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==
1417 +
1418 +deepmerge@^4.2.2:
1419 + version "4.2.2"
1420 + resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.2.2.tgz#44d2ea3679b8f4d4ffba33f03d865fc1e7bf4955"
1421 + integrity sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==
1422 +
1423 +define-properties@^1.1.4:
1424 + version "1.1.4"
1425 + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.4.tgz#0b14d7bd7fbeb2f3572c3a7eda80ea5d57fb05b1"
1426 + integrity sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==
1427 + dependencies:
1428 + has-property-descriptors "^1.0.0"
1429 + object-keys "^1.1.1"
1430 +
1431 +delayed-stream@~1.0.0:
1432 + version "1.0.0"
1433 + resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619"
1434 + integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==
1435 +
1436 +detect-newline@^3.0.0:
1437 + version "3.1.0"
1438 + resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651"
1439 + integrity sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==
1440 +
1441 +diff-sequences@^29.0.0:
1442 + version "29.0.0"
1443 + resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-29.0.0.tgz#bae49972ef3933556bcb0800b72e8579d19d9e4f"
1444 + integrity sha512-7Qe/zd1wxSDL4D/X/FPjOMB+ZMDt71W94KYaq05I2l0oQqgXgs7s4ftYYmV38gBSrPz2vcygxfs1xn0FT+rKNA==
1445 +
1446 +diff@^4.0.1:
1447 + version "4.0.2"
1448 + resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d"
1449 + integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==
1450 +
1451 +dom-accessibility-api@^0.5.9:
1452 + version "0.5.14"
1453 + resolved "https://registry.yarnpkg.com/dom-accessibility-api/-/dom-accessibility-api-0.5.14.tgz#56082f71b1dc7aac69d83c4285eef39c15d93f56"
1454 + integrity sha512-NMt+m9zFMPZe0JcY9gN224Qvk6qLIdqex29clBvc/y75ZBX9YA9wNK3frsYvu2DI1xcCIwxwnX+TlsJ2DSOADg==
1455 +
1456 +domexception@^4.0.0:
1457 + version "4.0.0"
1458 + resolved "https://registry.yarnpkg.com/domexception/-/domexception-4.0.0.tgz#4ad1be56ccadc86fc76d033353999a8037d03673"
1459 + integrity sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw==
1460 + dependencies:
1461 + webidl-conversions "^7.0.0"
1462 +
1463 +electron-to-chromium@^1.4.251:
1464 + version "1.4.260"
1465 + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.260.tgz#9aa3348d037686b47ccc5d3b48fe417b1f20017a"
1466 + integrity sha512-1GxPM2Bdz1AjuNjho9/TqJfxM7KZ7R8s4vA5cbbIoVacQXfvZlV+d7Y1lu4BhGzEBfjjhakr3NXKqN0PxPXIsg==
1467 +
1468 +emittery@^0.10.2:
1469 + version "0.10.2"
1470 + resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.10.2.tgz#902eec8aedb8c41938c46e9385e9db7e03182933"
1471 + integrity sha512-aITqOwnLanpHLNXZJENbOgjUBeHocD+xsSJmNrjovKBW5HbSpW3d1pEls7GFQPUWXiwG9+0P4GtHfEqC/4M0Iw==
1472 +
1473 +emoji-regex@^8.0.0:
1474 + version "8.0.0"
1475 + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37"
1476 + integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==
1477 +
1478 +entities@^4.4.0:
1479 + version "4.4.0"
1480 + resolved "https://registry.yarnpkg.com/entities/-/entities-4.4.0.tgz#97bdaba170339446495e653cfd2db78962900174"
1481 + integrity sha512-oYp7156SP8LkeGD0GF85ad1X9Ai79WtRsZ2gxJqtBuzH+98YUV6jkHEKlZkMbcrjJjIVJNIDP/3WL9wQkoPbWA==
1482 +
1483 +error-ex@^1.3.1:
1484 + version "1.3.2"
1485 + resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf"
1486 + integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==
1487 + dependencies:
1488 + is-arrayish "^0.2.1"
1489 +
1490 +escalade@^3.1.1:
1491 + version "3.1.1"
1492 + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40"
1493 + integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==
1494 +
1495 +escape-string-regexp@^1.0.5:
1496 + version "1.0.5"
1497 + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
1498 + integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==
1499 +
1500 +escape-string-regexp@^2.0.0:
1501 + version "2.0.0"
1502 + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344"
1503 + integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==
1504 +
1505 +escodegen@^2.0.0:
1506 + version "2.0.0"
1507 + resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-2.0.0.tgz#5e32b12833e8aa8fa35e1bf0befa89380484c7dd"
1508 + integrity sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==
1509 + dependencies:
1510 + esprima "^4.0.1"
1511 + estraverse "^5.2.0"
1512 + esutils "^2.0.2"
1513 + optionator "^0.8.1"
1514 + optionalDependencies:
1515 + source-map "~0.6.1"
1516 +
1517 +esprima@^4.0.0, esprima@^4.0.1:
1518 + version "4.0.1"
1519 + resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71"
1520 + integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==
1521 +
1522 +estraverse@^5.2.0:
1523 + version "5.3.0"
1524 + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123"
1525 + integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==
1526 +
1527 +esutils@^2.0.2:
1528 + version "2.0.3"
1529 + resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64"
1530 + integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==
1531 +
1532 +execa@^5.0.0:
1533 + version "5.1.1"
1534 + resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd"
1535 + integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==
1536 + dependencies:
1537 + cross-spawn "^7.0.3"
1538 + get-stream "^6.0.0"
1539 + human-signals "^2.1.0"
1540 + is-stream "^2.0.0"
1541 + merge-stream "^2.0.0"
1542 + npm-run-path "^4.0.1"
1543 + onetime "^5.1.2"
1544 + signal-exit "^3.0.3"
1545 + strip-final-newline "^2.0.0"
1546 +
1547 +exit@^0.1.2:
1548 + version "0.1.2"
1549 + resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c"
1550 + integrity sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==
1551 +
1552 +expect@^29.0.0, expect@^29.0.3:
1553 + version "29.0.3"
1554 + resolved "https://registry.yarnpkg.com/expect/-/expect-29.0.3.tgz#6be65ddb945202f143c4e07c083f4f39f3bd326f"
1555 + integrity sha512-t8l5DTws3212VbmPL+tBFXhjRHLmctHB0oQbL8eUc6S7NzZtYUhycrFO9mkxA0ZUC6FAWdNi7JchJSkODtcu1Q==
1556 + dependencies:
1557 + "@jest/expect-utils" "^29.0.3"
1558 + jest-get-type "^29.0.0"
1559 + jest-matcher-utils "^29.0.3"
1560 + jest-message-util "^29.0.3"
1561 + jest-util "^29.0.3"
1562 +
1563 +fast-json-stable-stringify@2.x, fast-json-stable-stringify@^2.1.0:
1564 + version "2.1.0"
1565 + resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633"
1566 + integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==
1567 +
1568 +fast-levenshtein@~2.0.6:
1569 + version "2.0.6"
1570 + resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917"
1571 + integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==
1572 +
1573 +fb-watchman@^2.0.0:
1574 + version "2.0.2"
1575 + resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.2.tgz#e9524ee6b5c77e9e5001af0f85f3adbb8623255c"
1576 + integrity sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==
1577 + dependencies:
1578 + bser "2.1.1"
1579 +
1580 +fill-range@^7.0.1:
1581 + version "7.0.1"
1582 + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40"
1583 + integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==
1584 + dependencies:
1585 + to-regex-range "^5.0.1"
1586 +
1587 +find-up@^4.0.0, find-up@^4.1.0:
1588 + version "4.1.0"
1589 + resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19"
1590 + integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==
1591 + dependencies:
1592 + locate-path "^5.0.0"
1593 + path-exists "^4.0.0"
1594 +
1595 +form-data@^4.0.0:
1596 + version "4.0.0"
1597 + resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452"
1598 + integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==
1599 + dependencies:
1600 + asynckit "^0.4.0"
1601 + combined-stream "^1.0.8"
1602 + mime-types "^2.1.12"
1603 +
1604 +fs.realpath@^1.0.0:
1605 + version "1.0.0"
1606 + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
1607 + integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==
1608 +
1609 +fsevents@^2.3.2:
1610 + version "2.3.2"
1611 + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a"
1612 + integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==
1613 +
1614 +function-bind@^1.1.1:
1615 + version "1.1.1"
1616 + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d"
1617 + integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==
1618 +
1619 +gensync@^1.0.0-beta.2:
1620 + version "1.0.0-beta.2"
1621 + resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0"
1622 + integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==
1623 +
1624 +get-caller-file@^2.0.5:
1625 + version "2.0.5"
1626 + resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e"
1627 + integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==
1628 +
1629 +get-intrinsic@^1.0.2, get-intrinsic@^1.1.1:
1630 + version "1.1.3"
1631 + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.3.tgz#063c84329ad93e83893c7f4f243ef63ffa351385"
1632 + integrity sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==
1633 + dependencies:
1634 + function-bind "^1.1.1"
1635 + has "^1.0.3"
1636 + has-symbols "^1.0.3"
1637 +
1638 +get-package-type@^0.1.0:
1639 + version "0.1.0"
1640 + resolved "https://registry.yarnpkg.com/get-package-type/-/get-package-type-0.1.0.tgz#8de2d803cff44df3bc6c456e6668b36c3926e11a"
1641 + integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==
1642 +
1643 +get-stream@^6.0.0:
1644 + version "6.0.1"
1645 + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7"
1646 + integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==
1647 +
1648 +glob@^7.1.3, glob@^7.1.4:
1649 + version "7.2.3"
1650 + resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b"
1651 + integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==
1652 + dependencies:
1653 + fs.realpath "^1.0.0"
1654 + inflight "^1.0.4"
1655 + inherits "2"
1656 + minimatch "^3.1.1"
1657 + once "^1.3.0"
1658 + path-is-absolute "^1.0.0"
1659 +
1660 +globals@^11.1.0:
1661 + version "11.12.0"
1662 + resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e"
1663 + integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==
1664 +
1665 +graceful-fs@^4.2.9:
1666 + version "4.2.10"
1667 + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c"
1668 + integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==
1669 +
1670 +has-flag@^3.0.0:
1671 + version "3.0.0"
1672 + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd"
1673 + integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==
1674 +
1675 +has-flag@^4.0.0:
1676 + version "4.0.0"
1677 + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b"
1678 + integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==
1679 +
1680 +has-property-descriptors@^1.0.0:
1681 + version "1.0.0"
1682 + resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz#610708600606d36961ed04c196193b6a607fa861"
1683 + integrity sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==
1684 + dependencies:
1685 + get-intrinsic "^1.1.1"
1686 +
1687 +has-symbols@^1.0.3:
1688 + version "1.0.3"
1689 + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8"
1690 + integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==
1691 +
1692 +has@^1.0.3:
1693 + version "1.0.3"
1694 + resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796"
1695 + integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==
1696 + dependencies:
1697 + function-bind "^1.1.1"
1698 +
1699 +html-encoding-sniffer@^3.0.0:
1700 + version "3.0.0"
1701 + resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz#2cb1a8cf0db52414776e5b2a7a04d5dd98158de9"
1702 + integrity sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==
1703 + dependencies:
1704 + whatwg-encoding "^2.0.0"
1705 +
1706 +html-escaper@^2.0.0:
1707 + version "2.0.2"
1708 + resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453"
1709 + integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==
1710 +
1711 +http-proxy-agent@^5.0.0:
1712 + version "5.0.0"
1713 + resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz#5129800203520d434f142bc78ff3c170800f2b43"
1714 + integrity sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==
1715 + dependencies:
1716 + "@tootallnate/once" "2"
1717 + agent-base "6"
1718 + debug "4"
1719 +
1720 +https-proxy-agent@^5.0.1:
1721 + version "5.0.1"
1722 + resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6"
1723 + integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==
1724 + dependencies:
1725 + agent-base "6"
1726 + debug "4"
1727 +
1728 +human-signals@^2.1.0:
1729 + version "2.1.0"
1730 + resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0"
1731 + integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==
1732 +
1733 +iconv-lite@0.6.3:
1734 + version "0.6.3"
1735 + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501"
1736 + integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==
1737 + dependencies:
1738 + safer-buffer ">= 2.1.2 < 3.0.0"
1739 +
1740 +import-local@^3.0.2:
1741 + version "3.1.0"
1742 + resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.1.0.tgz#b4479df8a5fd44f6cdce24070675676063c95cb4"
1743 + integrity sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==
1744 + dependencies:
1745 + pkg-dir "^4.2.0"
1746 + resolve-cwd "^3.0.0"
1747 +
1748 +imurmurhash@^0.1.4:
1749 + version "0.1.4"
1750 + resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea"
1751 + integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==
1752 +
1753 +inflight@^1.0.4:
1754 + version "1.0.6"
1755 + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
1756 + integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==
1757 + dependencies:
1758 + once "^1.3.0"
1759 + wrappy "1"
1760 +
1761 +inherits@2:
1762 + version "2.0.4"
1763 + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
1764 + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
1765 +
1766 +invariant@^2.2.4:
1767 + version "2.2.4"
1768 + resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6"
1769 + integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==
1770 + dependencies:
1771 + loose-envify "^1.0.0"
1772 +
1773 +is-arrayish@^0.2.1:
1774 + version "0.2.1"
1775 + resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d"
1776 + integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==
1777 +
1778 +is-core-module@^2.9.0:
1779 + version "2.10.0"
1780 + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.10.0.tgz#9012ede0a91c69587e647514e1d5277019e728ed"
1781 + integrity sha512-Erxj2n/LDAZ7H8WNJXd9tw38GYM3dv8rk8Zcs+jJuxYTW7sozH+SS8NtrSjVL1/vpLvWi1hxy96IzjJ3EHTJJg==
1782 + dependencies:
1783 + has "^1.0.3"
1784 +
1785 +is-fullwidth-code-point@^3.0.0:
1786 + version "3.0.0"
1787 + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d"
1788 + integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==
1789 +
1790 +is-generator-fn@^2.0.0:
1791 + version "2.1.0"
1792 + resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-2.1.0.tgz#7d140adc389aaf3011a8f2a2a4cfa6faadffb118"
1793 + integrity sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==
1794 +
1795 +is-number@^7.0.0:
1796 + version "7.0.0"
1797 + resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b"
1798 + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==
1799 +
1800 +is-potential-custom-element-name@^1.0.1:
1801 + version "1.0.1"
1802 + resolved "https://registry.yarnpkg.com/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz#171ed6f19e3ac554394edf78caa05784a45bebb5"
1803 + integrity sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==
1804 +
1805 +is-stream@^2.0.0:
1806 + version "2.0.1"
1807 + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077"
1808 + integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==
1809 +
1810 +isexe@^2.0.0:
1811 + version "2.0.0"
1812 + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10"
1813 + integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==
1814 +
1815 +istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.2.0:
1816 + version "3.2.0"
1817 + resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz#189e7909d0a39fa5a3dfad5b03f71947770191d3"
1818 + integrity sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==
1819 +
1820 +istanbul-lib-instrument@^5.0.4, istanbul-lib-instrument@^5.1.0:
1821 + version "5.2.0"
1822 + resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.0.tgz#31d18bdd127f825dd02ea7bfdfd906f8ab840e9f"
1823 + integrity sha512-6Lthe1hqXHBNsqvgDzGO6l03XNeu3CrG4RqQ1KM9+l5+jNGpEJfIELx1NS3SEHmJQA8np/u+E4EPRKRiu6m19A==
1824 + dependencies:
1825 + "@babel/core" "^7.12.3"
1826 + "@babel/parser" "^7.14.7"
1827 + "@istanbuljs/schema" "^0.1.2"
1828 + istanbul-lib-coverage "^3.2.0"
1829 + semver "^6.3.0"
1830 +
1831 +istanbul-lib-report@^3.0.0:
1832 + version "3.0.0"
1833 + resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#7518fe52ea44de372f460a76b5ecda9ffb73d8a6"
1834 + integrity sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==
1835 + dependencies:
1836 + istanbul-lib-coverage "^3.0.0"
1837 + make-dir "^3.0.0"
1838 + supports-color "^7.1.0"
1839 +
1840 +istanbul-lib-source-maps@^4.0.0:
1841 + version "4.0.1"
1842 + resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz#895f3a709fcfba34c6de5a42939022f3e4358551"
1843 + integrity sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==
1844 + dependencies:
1845 + debug "^4.1.1"
1846 + istanbul-lib-coverage "^3.0.0"
1847 + source-map "^0.6.1"
1848 +
1849 +istanbul-reports@^3.1.3:
1850 + version "3.1.5"
1851 + resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.1.5.tgz#cc9a6ab25cb25659810e4785ed9d9fb742578bae"
1852 + integrity sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w==
1853 + dependencies:
1854 + html-escaper "^2.0.0"
1855 + istanbul-lib-report "^3.0.0"
1856 +
1857 +jest-changed-files@^29.0.0:
1858 + version "29.0.0"
1859 + resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-29.0.0.tgz#aa238eae42d9372a413dd9a8dadc91ca1806dce0"
1860 + integrity sha512-28/iDMDrUpGoCitTURuDqUzWQoWmOmOKOFST1mi2lwh62X4BFf6khgH3uSuo1e49X/UDjuApAj3w0wLOex4VPQ==
1861 + dependencies:
1862 + execa "^5.0.0"
1863 + p-limit "^3.1.0"
1864 +
1865 +jest-circus@^29.0.3:
1866 + version "29.0.3"
1867 + resolved "https://registry.yarnpkg.com/jest-circus/-/jest-circus-29.0.3.tgz#90faebc90295291cfc636b27dbd82e3bfb9e7a48"
1868 + integrity sha512-QeGzagC6Hw5pP+df1+aoF8+FBSgkPmraC1UdkeunWh0jmrp7wC0Hr6umdUAOELBQmxtKAOMNC3KAdjmCds92Zg==
1869 + dependencies:
1870 + "@jest/environment" "^29.0.3"
1871 + "@jest/expect" "^29.0.3"
1872 + "@jest/test-result" "^29.0.3"
1873 + "@jest/types" "^29.0.3"
1874 + "@types/node" "*"
1875 + chalk "^4.0.0"
1876 + co "^4.6.0"
1877 + dedent "^0.7.0"
1878 + is-generator-fn "^2.0.0"
1879 + jest-each "^29.0.3"
1880 + jest-matcher-utils "^29.0.3"
1881 + jest-message-util "^29.0.3"
1882 + jest-runtime "^29.0.3"
1883 + jest-snapshot "^29.0.3"
1884 + jest-util "^29.0.3"
1885 + p-limit "^3.1.0"
1886 + pretty-format "^29.0.3"
1887 + slash "^3.0.0"
1888 + stack-utils "^2.0.3"
1889 +
1890 +jest-cli@^29.0.3:
1891 + version "29.0.3"
1892 + resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-29.0.3.tgz#fd8f0ef363a7a3d9c53ef62e0651f18eeffa77b9"
1893 + integrity sha512-aUy9Gd/Kut1z80eBzG10jAn6BgS3BoBbXyv+uXEqBJ8wnnuZ5RpNfARoskSrTIy1GY4a8f32YGuCMwibtkl9CQ==
1894 + dependencies:
1895 + "@jest/core" "^29.0.3"
1896 + "@jest/test-result" "^29.0.3"
1897 + "@jest/types" "^29.0.3"
1898 + chalk "^4.0.0"
1899 + exit "^0.1.2"
1900 + graceful-fs "^4.2.9"
1901 + import-local "^3.0.2"
1902 + jest-config "^29.0.3"
1903 + jest-util "^29.0.3"
1904 + jest-validate "^29.0.3"
1905 + prompts "^2.0.1"
1906 + yargs "^17.3.1"
1907 +
1908 +jest-config@^29.0.3:
1909 + version "29.0.3"
1910 + resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-29.0.3.tgz#c2e52a8f5adbd18de79f99532d8332a19e232f13"
1911 + integrity sha512-U5qkc82HHVYe3fNu2CRXLN4g761Na26rWKf7CjM8LlZB3In1jadEkZdMwsE37rd9RSPV0NfYaCjHdk/gu3v+Ew==
1912 + dependencies:
1913 + "@babel/core" "^7.11.6"
1914 + "@jest/test-sequencer" "^29.0.3"
1915 + "@jest/types" "^29.0.3"
1916 + babel-jest "^29.0.3"
1917 + chalk "^4.0.0"
1918 + ci-info "^3.2.0"
1919 + deepmerge "^4.2.2"
1920 + glob "^7.1.3"
1921 + graceful-fs "^4.2.9"
1922 + jest-circus "^29.0.3"
1923 + jest-environment-node "^29.0.3"
1924 + jest-get-type "^29.0.0"
1925 + jest-regex-util "^29.0.0"
1926 + jest-resolve "^29.0.3"
1927 + jest-runner "^29.0.3"
1928 + jest-util "^29.0.3"
1929 + jest-validate "^29.0.3"
1930 + micromatch "^4.0.4"
1931 + parse-json "^5.2.0"
1932 + pretty-format "^29.0.3"
1933 + slash "^3.0.0"
1934 + strip-json-comments "^3.1.1"
1935 +
1936 +jest-diff@^29.0.3:
1937 + version "29.0.3"
1938 + resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-29.0.3.tgz#41cc02409ad1458ae1bf7684129a3da2856341ac"
1939 + integrity sha512-+X/AIF5G/vX9fWK+Db9bi9BQas7M9oBME7egU7psbn4jlszLFCu0dW63UgeE6cs/GANq4fLaT+8sGHQQ0eCUfg==
1940 + dependencies:
1941 + chalk "^4.0.0"
1942 + diff-sequences "^29.0.0"
1943 + jest-get-type "^29.0.0"
1944 + pretty-format "^29.0.3"
1945 +
1946 +jest-docblock@^29.0.0:
1947 + version "29.0.0"
1948 + resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-29.0.0.tgz#3151bcc45ed7f5a8af4884dcc049aee699b4ceae"
1949 + integrity sha512-s5Kpra/kLzbqu9dEjov30kj1n4tfu3e7Pl8v+f8jOkeWNqM6Ds8jRaJfZow3ducoQUrf2Z4rs2N5S3zXnb83gw==
1950 + dependencies:
1951 + detect-newline "^3.0.0"
1952 +
1953 +jest-each@^29.0.3:
1954 + version "29.0.3"
1955 + resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-29.0.3.tgz#7ef3157580b15a609d7ef663dd4fc9b07f4e1299"
1956 + integrity sha512-wILhZfESURHHBNvPMJ0lZlYZrvOQJxAo3wNHi+ycr90V7M+uGR9Gh4+4a/BmaZF0XTyZsk4OiYEf3GJN7Ltqzg==
1957 + dependencies:
1958 + "@jest/types" "^29.0.3"
1959 + chalk "^4.0.0"
1960 + jest-get-type "^29.0.0"
1961 + jest-util "^29.0.3"
1962 + pretty-format "^29.0.3"
1963 +
1964 +jest-environment-jsdom@^29.0.3:
1965 + version "29.0.3"
1966 + resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-29.0.3.tgz#0c6ee841133dd6acbe957bceaceea93b7ec60ca9"
1967 + integrity sha512-KIGvpm12c71hoYTjL4wC2c8K6KfhOHJqJtaHc1IApu5rG047YWZoEP13BlbucWfzGISBrmli8KFqdhdQEa8Wnw==
1968 + dependencies:
1969 + "@jest/environment" "^29.0.3"
1970 + "@jest/fake-timers" "^29.0.3"
1971 + "@jest/types" "^29.0.3"
1972 + "@types/jsdom" "^20.0.0"
1973 + "@types/node" "*"
1974 + jest-mock "^29.0.3"
1975 + jest-util "^29.0.3"
1976 + jsdom "^20.0.0"
1977 +
1978 +jest-environment-node@^29.0.3:
1979 + version "29.0.3"
1980 + resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-29.0.3.tgz#293804b1e0fa5f0e354dacbe510655caa478a3b2"
1981 + integrity sha512-cdZqRCnmIlTXC+9vtvmfiY/40Cj6s2T0czXuq1whvQdmpzAnj4sbqVYuZ4zFHk766xTTJ+Ij3uUqkk8KCfXoyg==
1982 + dependencies:
1983 + "@jest/environment" "^29.0.3"
1984 + "@jest/fake-timers" "^29.0.3"
1985 + "@jest/types" "^29.0.3"
1986 + "@types/node" "*"
1987 + jest-mock "^29.0.3"
1988 + jest-util "^29.0.3"
1989 +
1990 +jest-get-type@^29.0.0:
1991 + version "29.0.0"
1992 + resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-29.0.0.tgz#843f6c50a1b778f7325df1129a0fd7aa713aef80"
1993 + integrity sha512-83X19z/HuLKYXYHskZlBAShO7UfLFXu/vWajw9ZNJASN32li8yHMaVGAQqxFW1RCFOkB7cubaL6FaJVQqqJLSw==
1994 +
1995 +jest-haste-map@^29.0.3:
1996 + version "29.0.3"
1997 + resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-29.0.3.tgz#d7f3f7180f558d760eacc5184aac5a67f20ef939"
1998 + integrity sha512-uMqR99+GuBHo0RjRhOE4iA6LmsxEwRdgiIAQgMU/wdT2XebsLDz5obIwLZm/Psj+GwSEQhw9AfAVKGYbh2G55A==
1999 + dependencies:
2000 + "@jest/types" "^29.0.3"
2001 + "@types/graceful-fs" "^4.1.3"
2002 + "@types/node" "*"
2003 + anymatch "^3.0.3"
2004 + fb-watchman "^2.0.0"
2005 + graceful-fs "^4.2.9"
2006 + jest-regex-util "^29.0.0"
2007 + jest-util "^29.0.3"
2008 + jest-worker "^29.0.3"
2009 + micromatch "^4.0.4"
2010 + walker "^1.0.8"
2011 + optionalDependencies:
2012 + fsevents "^2.3.2"
2013 +
2014 +jest-leak-detector@^29.0.3:
2015 + version "29.0.3"
2016 + resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-29.0.3.tgz#e85cf3391106a7a250850b6766b508bfe9c7bc6f"
2017 + integrity sha512-YfW/G63dAuiuQ3QmQlh8hnqLDe25WFY3eQhuc/Ev1AGmkw5zREblTh7TCSKLoheyggu6G9gxO2hY8p9o6xbaRQ==
2018 + dependencies:
2019 + jest-get-type "^29.0.0"
2020 + pretty-format "^29.0.3"
2021 +
2022 +jest-matcher-utils@^29.0.3:
2023 + version "29.0.3"
2024 + resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-29.0.3.tgz#b8305fd3f9e27cdbc210b21fc7dbba92d4e54560"
2025 + integrity sha512-RsR1+cZ6p1hDV4GSCQTg+9qjeotQCgkaleIKLK7dm+U4V/H2bWedU3RAtLm8+mANzZ7eDV33dMar4pejd7047w==
2026 + dependencies:
2027 + chalk "^4.0.0"
2028 + jest-diff "^29.0.3"
2029 + jest-get-type "^29.0.0"
2030 + pretty-format "^29.0.3"
2031 +
2032 +jest-message-util@^29.0.3:
2033 + version "29.0.3"
2034 + resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-29.0.3.tgz#f0254e1ffad21890c78355726202cc91d0a40ea8"
2035 + integrity sha512-7T8JiUTtDfppojosORAflABfLsLKMLkBHSWkjNQrjIltGoDzNGn7wEPOSfjqYAGTYME65esQzMJxGDjuLBKdOg==
2036 + dependencies:
2037 + "@babel/code-frame" "^7.12.13"
2038 + "@jest/types" "^29.0.3"
2039 + "@types/stack-utils" "^2.0.0"
2040 + chalk "^4.0.0"
2041 + graceful-fs "^4.2.9"
2042 + micromatch "^4.0.4"
2043 + pretty-format "^29.0.3"
2044 + slash "^3.0.0"
2045 + stack-utils "^2.0.3"
2046 +
2047 +jest-mock@^29.0.3:
2048 + version "29.0.3"
2049 + resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-29.0.3.tgz#4f0093f6a9cb2ffdb9c44a07a3912f0c098c8de9"
2050 + integrity sha512-ort9pYowltbcrCVR43wdlqfAiFJXBx8l4uJDsD8U72LgBcetvEp+Qxj1W9ZYgMRoeAo+ov5cnAGF2B6+Oth+ww==
2051 + dependencies:
2052 + "@jest/types" "^29.0.3"
2053 + "@types/node" "*"
2054 +
2055 +jest-pnp-resolver@^1.2.2:
2056 + version "1.2.2"
2057 + resolved "https://registry.yarnpkg.com/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz#b704ac0ae028a89108a4d040b3f919dfddc8e33c"
2058 + integrity sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==
2059 +
2060 +jest-regex-util@^29.0.0:
2061 + version "29.0.0"
2062 + resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-29.0.0.tgz#b442987f688289df8eb6c16fa8df488b4cd007de"
2063 + integrity sha512-BV7VW7Sy0fInHWN93MMPtlClweYv2qrSCwfeFWmpribGZtQPWNvRSq9XOVgOEjU1iBGRKXUZil0o2AH7Iy9Lug==
2064 +
2065 +jest-resolve-dependencies@^29.0.3:
2066 + version "29.0.3"
2067 + resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-29.0.3.tgz#f23a54295efc6374b86b198cf8efed5606d6b762"
2068 + integrity sha512-KzuBnXqNvbuCdoJpv8EanbIGObk7vUBNt/PwQPPx2aMhlv/jaXpUJsqWYRpP/0a50faMBY7WFFP8S3/CCzwfDw==
2069 + dependencies:
2070 + jest-regex-util "^29.0.0"
2071 + jest-snapshot "^29.0.3"
2072 +
2073 +jest-resolve@^29.0.3:
2074 + version "29.0.3"
2075 + resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-29.0.3.tgz#329a3431e3b9eb6629a2cd483e9bed95b26827b9"
2076 + integrity sha512-toVkia85Y/BPAjJasTC9zIPY6MmVXQPtrCk8SmiheC4MwVFE/CMFlOtMN6jrwPMC6TtNh8+sTMllasFeu1wMPg==
2077 + dependencies:
2078 + chalk "^4.0.0"
2079 + graceful-fs "^4.2.9"
2080 + jest-haste-map "^29.0.3"
2081 + jest-pnp-resolver "^1.2.2"
2082 + jest-util "^29.0.3"
2083 + jest-validate "^29.0.3"
2084 + resolve "^1.20.0"
2085 + resolve.exports "^1.1.0"
2086 + slash "^3.0.0"
2087 +
2088 +jest-runner@^29.0.3:
2089 + version "29.0.3"
2090 + resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-29.0.3.tgz#2e47fe1e8777aea9b8970f37e8f83630b508fb87"
2091 + integrity sha512-Usu6VlTOZlCZoNuh3b2Tv/yzDpKqtiNAetG9t3kJuHfUyVMNW7ipCCJOUojzKkjPoaN7Bl1f7Buu6PE0sGpQxw==
2092 + dependencies:
2093 + "@jest/console" "^29.0.3"
2094 + "@jest/environment" "^29.0.3"
2095 + "@jest/test-result" "^29.0.3"
2096 + "@jest/transform" "^29.0.3"
2097 + "@jest/types" "^29.0.3"
2098 + "@types/node" "*"
2099 + chalk "^4.0.0"
2100 + emittery "^0.10.2"
2101 + graceful-fs "^4.2.9"
2102 + jest-docblock "^29.0.0"
2103 + jest-environment-node "^29.0.3"
2104 + jest-haste-map "^29.0.3"
2105 + jest-leak-detector "^29.0.3"
2106 + jest-message-util "^29.0.3"
2107 + jest-resolve "^29.0.3"
2108 + jest-runtime "^29.0.3"
2109 + jest-util "^29.0.3"
2110 + jest-watcher "^29.0.3"
2111 + jest-worker "^29.0.3"
2112 + p-limit "^3.1.0"
2113 + source-map-support "0.5.13"
2114 +
2115 +jest-runtime@^29.0.3:
2116 + version "29.0.3"
2117 + resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-29.0.3.tgz#5a823ec5902257519556a4e5a71a868e8fd788aa"
2118 + integrity sha512-12gZXRQ7ozEeEHKTY45a+YLqzNDR/x4c//X6AqwKwKJPpWM8FY4vwn4VQJOcLRS3Nd1fWwgP7LU4SoynhuUMHQ==
2119 + dependencies:
2120 + "@jest/environment" "^29.0.3"
2121 + "@jest/fake-timers" "^29.0.3"
2122 + "@jest/globals" "^29.0.3"
2123 + "@jest/source-map" "^29.0.0"
2124 + "@jest/test-result" "^29.0.3"
2125 + "@jest/transform" "^29.0.3"
2126 + "@jest/types" "^29.0.3"
2127 + "@types/node" "*"
2128 + chalk "^4.0.0"
2129 + cjs-module-lexer "^1.0.0"
2130 + collect-v8-coverage "^1.0.0"
2131 + glob "^7.1.3"
2132 + graceful-fs "^4.2.9"
2133 + jest-haste-map "^29.0.3"
2134 + jest-message-util "^29.0.3"
2135 + jest-mock "^29.0.3"
2136 + jest-regex-util "^29.0.0"
2137 + jest-resolve "^29.0.3"
2138 + jest-snapshot "^29.0.3"
2139 + jest-util "^29.0.3"
2140 + slash "^3.0.0"
2141 + strip-bom "^4.0.0"
2142 +
2143 +jest-snapshot@^29.0.3:
2144 + version "29.0.3"
2145 + resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-29.0.3.tgz#0a024706986a915a6eefae74d7343069d2fc8eef"
2146 + integrity sha512-52q6JChm04U3deq+mkQ7R/7uy7YyfVIrebMi6ZkBoDJ85yEjm/sJwdr1P0LOIEHmpyLlXrxy3QP0Zf5J2kj0ew==
2147 + dependencies:
2148 + "@babel/core" "^7.11.6"
2149 + "@babel/generator" "^7.7.2"
2150 + "@babel/plugin-syntax-jsx" "^7.7.2"
2151 + "@babel/plugin-syntax-typescript" "^7.7.2"
2152 + "@babel/traverse" "^7.7.2"
2153 + "@babel/types" "^7.3.3"
2154 + "@jest/expect-utils" "^29.0.3"
2155 + "@jest/transform" "^29.0.3"
2156 + "@jest/types" "^29.0.3"
2157 + "@types/babel__traverse" "^7.0.6"
2158 + "@types/prettier" "^2.1.5"
2159 + babel-preset-current-node-syntax "^1.0.0"
2160 + chalk "^4.0.0"
2161 + expect "^29.0.3"
2162 + graceful-fs "^4.2.9"
2163 + jest-diff "^29.0.3"
2164 + jest-get-type "^29.0.0"
2165 + jest-haste-map "^29.0.3"
2166 + jest-matcher-utils "^29.0.3"
2167 + jest-message-util "^29.0.3"
2168 + jest-util "^29.0.3"
2169 + natural-compare "^1.4.0"
2170 + pretty-format "^29.0.3"
2171 + semver "^7.3.5"
2172 +
2173 +jest-util@^29.0.0, jest-util@^29.0.3:
2174 + version "29.0.3"
2175 + resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-29.0.3.tgz#06d1d77f9a1bea380f121897d78695902959fbc0"
2176 + integrity sha512-Q0xaG3YRG8QiTC4R6fHjHQPaPpz9pJBEi0AeOE4mQh/FuWOijFjGXMMOfQEaU9i3z76cNR7FobZZUQnL6IyfdQ==
2177 + dependencies:
2178 + "@jest/types" "^29.0.3"
2179 + "@types/node" "*"
2180 + chalk "^4.0.0"
2181 + ci-info "^3.2.0"
2182 + graceful-fs "^4.2.9"
2183 + picomatch "^2.2.3"
2184 +
2185 +jest-validate@^29.0.3:
2186 + version "29.0.3"
2187 + resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-29.0.3.tgz#f9521581d7344685428afa0a4d110e9c519aeeb6"
2188 + integrity sha512-OebiqqT6lK8cbMPtrSoS3aZP4juID762lZvpf1u+smZnwTEBCBInan0GAIIhv36MxGaJvmq5uJm7dl5gVt+Zrw==
2189 + dependencies:
2190 + "@jest/types" "^29.0.3"
2191 + camelcase "^6.2.0"
2192 + chalk "^4.0.0"
2193 + jest-get-type "^29.0.0"
2194 + leven "^3.1.0"
2195 + pretty-format "^29.0.3"
2196 +
2197 +jest-watcher@^29.0.3:
2198 + version "29.0.3"
2199 + resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-29.0.3.tgz#8e220d1cc4f8029875e82015d084cab20f33d57f"
2200 + integrity sha512-tQX9lU91A+9tyUQKUMp0Ns8xAcdhC9fo73eqA3LFxP2bSgiF49TNcc+vf3qgGYYK9qRjFpXW9+4RgF/mbxyOOw==
2201 + dependencies:
2202 + "@jest/test-result" "^29.0.3"
2203 + "@jest/types" "^29.0.3"
2204 + "@types/node" "*"
2205 + ansi-escapes "^4.2.1"
2206 + chalk "^4.0.0"
2207 + emittery "^0.10.2"
2208 + jest-util "^29.0.3"
2209 + string-length "^4.0.1"
2210 +
2211 +jest-worker@^29.0.3:
2212 + version "29.0.3"
2213 + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-29.0.3.tgz#c2ba0aa7e41eec9eb0be8e8a322ae6518df72647"
2214 + integrity sha512-Tl/YWUugQOjoTYwjKdfJWkSOfhufJHO5LhXTSZC3TRoQKO+fuXnZAdoXXBlpLXKGODBL3OvdUasfDD4PcMe6ng==
2215 + dependencies:
2216 + "@types/node" "*"
2217 + merge-stream "^2.0.0"
2218 + supports-color "^8.0.0"
2219 +
2220 +jest@^29.0.3:
2221 + version "29.0.3"
2222 + resolved "https://registry.yarnpkg.com/jest/-/jest-29.0.3.tgz#5227a0596d30791b2649eea347e4aa97f734944d"
2223 + integrity sha512-ElgUtJBLgXM1E8L6K1RW1T96R897YY/3lRYqq9uVcPWtP2AAl/nQ16IYDh/FzQOOQ12VEuLdcPU83mbhG2C3PQ==
2224 + dependencies:
2225 + "@jest/core" "^29.0.3"
2226 + "@jest/types" "^29.0.3"
2227 + import-local "^3.0.2"
2228 + jest-cli "^29.0.3"
2229 +
2230 +"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0:
2231 + version "4.0.0"
2232 + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499"
2233 + integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==
2234 +
2235 +js-yaml@^3.13.1:
2236 + version "3.14.1"
2237 + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537"
2238 + integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==
2239 + dependencies:
2240 + argparse "^1.0.7"
2241 + esprima "^4.0.0"
2242 +
2243 +jsdom@^20.0.0:
2244 + version "20.0.0"
2245 + resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-20.0.0.tgz#882825ac9cc5e5bbee704ba16143e1fa78361ebf"
2246 + integrity sha512-x4a6CKCgx00uCmP+QakBDFXwjAJ69IkkIWHmtmjd3wvXPcdOS44hfX2vqkOQrVrq8l9DhNNADZRXaCEWvgXtVA==
2247 + dependencies:
2248 + abab "^2.0.6"
2249 + acorn "^8.7.1"
2250 + acorn-globals "^6.0.0"
2251 + cssom "^0.5.0"
2252 + cssstyle "^2.3.0"
2253 + data-urls "^3.0.2"
2254 + decimal.js "^10.3.1"
2255 + domexception "^4.0.0"
2256 + escodegen "^2.0.0"
2257 + form-data "^4.0.0"
2258 + html-encoding-sniffer "^3.0.0"
2259 + http-proxy-agent "^5.0.0"
2260 + https-proxy-agent "^5.0.1"
2261 + is-potential-custom-element-name "^1.0.1"
2262 + nwsapi "^2.2.0"
2263 + parse5 "^7.0.0"
2264 + saxes "^6.0.0"
2265 + symbol-tree "^3.2.4"
2266 + tough-cookie "^4.0.0"
2267 + w3c-hr-time "^1.0.2"
2268 + w3c-xmlserializer "^3.0.0"
2269 + webidl-conversions "^7.0.0"
2270 + whatwg-encoding "^2.0.0"
2271 + whatwg-mimetype "^3.0.0"
2272 + whatwg-url "^11.0.0"
2273 + ws "^8.8.0"
2274 + xml-name-validator "^4.0.0"
2275 +
2276 +jsesc@^2.5.1:
2277 + version "2.5.2"
2278 + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4"
2279 + integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==
2280 +
2281 +json-parse-even-better-errors@^2.3.0:
2282 + version "2.3.1"
2283 + resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d"
2284 + integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==
2285 +
2286 +json5@^2.1.0, json5@^2.2.1:
2287 + version "2.2.1"
2288 + resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.1.tgz#655d50ed1e6f95ad1a3caababd2b0efda10b395c"
2289 + integrity sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==
2290 +
2291 +kleur@^3.0.3:
2292 + version "3.0.3"
2293 + resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e"
2294 + integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==
2295 +
2296 +leven@^3.1.0:
2297 + version "3.1.0"
2298 + resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2"
2299 + integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==
2300 +
2301 +levn@~0.3.0:
2302 + version "0.3.0"
2303 + resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee"
2304 + integrity sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==
2305 + dependencies:
2306 + prelude-ls "~1.1.2"
2307 + type-check "~0.3.2"
2308 +
2309 +lines-and-columns@^1.1.6:
2310 + version "1.2.4"
2311 + resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632"
2312 + integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==
2313 +
2314 +locate-path@^5.0.0:
2315 + version "5.0.0"
2316 + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0"
2317 + integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==
2318 + dependencies:
2319 + p-locate "^4.1.0"
2320 +
2321 +lodash.memoize@4.x:
2322 + version "4.1.2"
2323 + resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe"
2324 + integrity sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==
2325 +
2326 +lodash@^4.17.10, lodash@^4.17.13, lodash@^4.17.21:
2327 + version "4.17.21"
2328 + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c"
2329 + integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==
2330 +
2331 +loose-envify@^1.0.0, loose-envify@^1.1.0:
2332 + version "1.4.0"
2333 + resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf"
2334 + integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==
2335 + dependencies:
2336 + js-tokens "^3.0.0 || ^4.0.0"
2337 +
2338 +lru-cache@^6.0.0:
2339 + version "6.0.0"
2340 + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94"
2341 + integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==
2342 + dependencies:
2343 + yallist "^4.0.0"
2344 +
2345 +lz-string@^1.4.4:
2346 + version "1.4.4"
2347 + resolved "https://registry.yarnpkg.com/lz-string/-/lz-string-1.4.4.tgz#c0d8eaf36059f705796e1e344811cf4c498d3a26"
2348 + integrity sha512-0ckx7ZHRPqb0oUm8zNr+90mtf9DQB60H1wMCjBtfi62Kl3a7JbHob6gA2bC+xRvZoOL+1hzUK8jeuEIQE8svEQ==
2349 +
2350 +make-dir@^3.0.0:
2351 + version "3.1.0"
2352 + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f"
2353 + integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==
2354 + dependencies:
2355 + semver "^6.0.0"
2356 +
2357 +make-error@1.x, make-error@^1.1.1:
2358 + version "1.3.6"
2359 + resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2"
2360 + integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==
2361 +
2362 +makeerror@1.0.12:
2363 + version "1.0.12"
2364 + resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.12.tgz#3e5dd2079a82e812e983cc6610c4a2cb0eaa801a"
2365 + integrity sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==
2366 + dependencies:
2367 + tmpl "1.0.5"
2368 +
2369 +merge-stream@^2.0.0:
2370 + version "2.0.0"
2371 + resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60"
2372 + integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==
2373 +
2374 +micromatch@^4.0.4:
2375 + version "4.0.5"
2376 + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6"
2377 + integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==
2378 + dependencies:
2379 + braces "^3.0.2"
2380 + picomatch "^2.3.1"
2381 +
2382 +mime-db@1.52.0:
2383 + version "1.52.0"
2384 + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70"
2385 + integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==
2386 +
2387 +mime-types@^2.1.12:
2388 + version "2.1.35"
2389 + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a"
2390 + integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==
2391 + dependencies:
2392 + mime-db "1.52.0"
2393 +
2394 +mimic-fn@^2.1.0:
2395 + version "2.1.0"
2396 + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b"
2397 + integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==
2398 +
2399 +minimatch@^3.0.4, minimatch@^3.1.1:
2400 + version "3.1.2"
2401 + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b"
2402 + integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==
2403 + dependencies:
2404 + brace-expansion "^1.1.7"
2405 +
2406 +ms@2.1.2:
2407 + version "2.1.2"
2408 + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009"
2409 + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==
2410 +
2411 +natural-compare@^1.4.0:
2412 + version "1.4.0"
2413 + resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7"
2414 + integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==
2415 +
2416 +node-int64@^0.4.0:
2417 + version "0.4.0"
2418 + resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b"
2419 + integrity sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==
2420 +
2421 +node-releases@^2.0.6:
2422 + version "2.0.6"
2423 + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.6.tgz#8a7088c63a55e493845683ebf3c828d8c51c5503"
2424 + integrity sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==
2425 +
2426 +normalize-path@^3.0.0:
2427 + version "3.0.0"
2428 + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65"
2429 + integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==
2430 +
2431 +npm-run-path@^4.0.1:
2432 + version "4.0.1"
2433 + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea"
2434 + integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==
2435 + dependencies:
2436 + path-key "^3.0.0"
2437 +
2438 +nwsapi@^2.2.0:
2439 + version "2.2.2"
2440 + resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.2.tgz#e5418863e7905df67d51ec95938d67bf801f0bb0"
2441 + integrity sha512-90yv+6538zuvUMnN+zCr8LuV6bPFdq50304114vJYJ8RDyK8D5O9Phpbd6SZWgI7PwzmmfN1upeOJlvybDSgCw==
2442 +
2443 +object-keys@^1.1.1:
2444 + version "1.1.1"
2445 + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e"
2446 + integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==
2447 +
2448 +object.assign@^4.1.0:
2449 + version "4.1.4"
2450 + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.4.tgz#9673c7c7c351ab8c4d0b516f4343ebf4dfb7799f"
2451 + integrity sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==
2452 + dependencies:
2453 + call-bind "^1.0.2"
2454 + define-properties "^1.1.4"
2455 + has-symbols "^1.0.3"
2456 + object-keys "^1.1.1"
2457 +
2458 +once@^1.3.0:
2459 + version "1.4.0"
2460 + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
2461 + integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==
2462 + dependencies:
2463 + wrappy "1"
2464 +
2465 +onetime@^5.1.2:
2466 + version "5.1.2"
2467 + resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e"
2468 + integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==
2469 + dependencies:
2470 + mimic-fn "^2.1.0"
2471 +
2472 +optionator@^0.8.1:
2473 + version "0.8.3"
2474 + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495"
2475 + integrity sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==
2476 + dependencies:
2477 + deep-is "~0.1.3"
2478 + fast-levenshtein "~2.0.6"
2479 + levn "~0.3.0"
2480 + prelude-ls "~1.1.2"
2481 + type-check "~0.3.2"
2482 + word-wrap "~1.2.3"
2483 +
2484 +p-limit@^2.2.0:
2485 + version "2.3.0"
2486 + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1"
2487 + integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==
2488 + dependencies:
2489 + p-try "^2.0.0"
2490 +
2491 +p-limit@^3.1.0:
2492 + version "3.1.0"
2493 + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b"
2494 + integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==
2495 + dependencies:
2496 + yocto-queue "^0.1.0"
2497 +
2498 +p-locate@^4.1.0:
2499 + version "4.1.0"
2500 + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07"
2501 + integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==
2502 + dependencies:
2503 + p-limit "^2.2.0"
2504 +
2505 +p-try@^2.0.0:
2506 + version "2.2.0"
2507 + resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6"
2508 + integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==
2509 +
2510 +parse-json@^5.2.0:
2511 + version "5.2.0"
2512 + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd"
2513 + integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==
2514 + dependencies:
2515 + "@babel/code-frame" "^7.0.0"
2516 + error-ex "^1.3.1"
2517 + json-parse-even-better-errors "^2.3.0"
2518 + lines-and-columns "^1.1.6"
2519 +
2520 +parse5@^7.0.0:
2521 + version "7.1.1"
2522 + resolved "https://registry.yarnpkg.com/parse5/-/parse5-7.1.1.tgz#4649f940ccfb95d8754f37f73078ea20afe0c746"
2523 + integrity sha512-kwpuwzB+px5WUg9pyK0IcK/shltJN5/OVhQagxhCQNtT9Y9QRZqNY2e1cmbu/paRh5LMnz/oVTVLBpjFmMZhSg==
2524 + dependencies:
2525 + entities "^4.4.0"
2526 +
2527 +path-exists@^4.0.0:
2528 + version "4.0.0"
2529 + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3"
2530 + integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==
2531 +
2532 +path-is-absolute@^1.0.0:
2533 + version "1.0.1"
2534 + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
2535 + integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==
2536 +
2537 +path-key@^3.0.0, path-key@^3.1.0:
2538 + version "3.1.1"
2539 + resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375"
2540 + integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==
2541 +
2542 +path-parse@^1.0.7:
2543 + version "1.0.7"
2544 + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735"
2545 + integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==
2546 +
2547 +picocolors@^1.0.0:
2548 + version "1.0.0"
2549 + resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c"
2550 + integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==
2551 +
2552 +picomatch@^2.0.4, picomatch@^2.2.3, picomatch@^2.3.1:
2553 + version "2.3.1"
2554 + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42"
2555 + integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==
2556 +
2557 +pirates@^4.0.4:
2558 + version "4.0.5"
2559 + resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.5.tgz#feec352ea5c3268fb23a37c702ab1699f35a5f3b"
2560 + integrity sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==
2561 +
2562 +pkg-dir@^4.2.0:
2563 + version "4.2.0"
2564 + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3"
2565 + integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==
2566 + dependencies:
2567 + find-up "^4.0.0"
2568 +
2569 +prelude-ls@~1.1.2:
2570 + version "1.1.2"
2571 + resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54"
2572 + integrity sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==
2573 +
2574 +prettier@2.7.1:
2575 + version "2.7.1"
2576 + resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.7.1.tgz#e235806850d057f97bb08368a4f7d899f7760c64"
2577 + integrity sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==
2578 +
2579 +pretty-format@^24:
2580 + version "24.9.0"
2581 + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-24.9.0.tgz#12fac31b37019a4eea3c11aa9a959eb7628aa7c9"
2582 + integrity sha512-00ZMZUiHaJrNfk33guavqgvfJS30sLYf0f8+Srklv0AMPodGGHcoHgksZ3OThYnIvOd+8yMCn0YiEOogjlgsnA==
2583 + dependencies:
2584 + "@jest/types" "^24.9.0"
2585 + ansi-regex "^4.0.0"
2586 + ansi-styles "^3.2.0"
2587 + react-is "^16.8.4"
2588 +
2589 +pretty-format@^27.0.2:
2590 + version "27.5.1"
2591 + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-27.5.1.tgz#2181879fdea51a7a5851fb39d920faa63f01d88e"
2592 + integrity sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==
2593 + dependencies:
2594 + ansi-regex "^5.0.1"
2595 + ansi-styles "^5.0.0"
2596 + react-is "^17.0.1"
2597 +
2598 +pretty-format@^29.0.0, pretty-format@^29.0.3:
2599 + version "29.0.3"
2600 + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-29.0.3.tgz#23d5f8cabc9cbf209a77d49409d093d61166a811"
2601 + integrity sha512-cHudsvQr1K5vNVLbvYF/nv3Qy/F/BcEKxGuIeMiVMRHxPOO1RxXooP8g/ZrwAp7Dx+KdMZoOc7NxLHhMrP2f9Q==
2602 + dependencies:
2603 + "@jest/schemas" "^29.0.0"
2604 + ansi-styles "^5.0.0"
2605 + react-is "^18.0.0"
2606 +
2607 +prompts@^2.0.1:
2608 + version "2.4.2"
2609 + resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.4.2.tgz#7b57e73b3a48029ad10ebd44f74b01722a4cb069"
2610 + integrity sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==
2611 + dependencies:
2612 + kleur "^3.0.3"
2613 + sisteransi "^1.0.5"
2614 +
2615 +psl@^1.1.33:
2616 + version "1.9.0"
2617 + resolved "https://registry.yarnpkg.com/psl/-/psl-1.9.0.tgz#d0df2a137f00794565fcaf3b2c00cd09f8d5a5a7"
2618 + integrity sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==
2619 +
2620 +punycode@^2.1.1:
2621 + version "2.1.1"
2622 + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec"
2623 + integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==
2624 +
2625 +querystringify@^2.1.1:
2626 + version "2.2.0"
2627 + resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.2.0.tgz#3345941b4153cb9d082d8eee4cda2016a9aef7f6"
2628 + integrity sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==
2629 +
2630 +react-dom@^18.2.0:
2631 + version "18.2.0"
2632 + resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-18.2.0.tgz#22aaf38708db2674ed9ada224ca4aa708d821e3d"
2633 + integrity sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==
2634 + dependencies:
2635 + loose-envify "^1.1.0"
2636 + scheduler "^0.23.0"
2637 +
2638 +react-is@^16.8.4:
2639 + version "16.13.1"
2640 + resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4"
2641 + integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==
2642 +
2643 +react-is@^17.0.1:
2644 + version "17.0.2"
2645 + resolved "https://registry.yarnpkg.com/react-is/-/react-is-17.0.2.tgz#e691d4a8e9c789365655539ab372762b0efb54f0"
2646 + integrity sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==
2647 +
2648 +react-is@^18.0.0:
2649 + version "18.2.0"
2650 + resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.2.0.tgz#199431eeaaa2e09f86427efbb4f1473edb47609b"
2651 + integrity sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==
2652 +
2653 +react@^18.2.0:
2654 + version "18.2.0"
2655 + resolved "https://registry.yarnpkg.com/react/-/react-18.2.0.tgz#555bd98592883255fa00de14f1151a917b5d77d5"
2656 + integrity sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==
2657 + dependencies:
2658 + loose-envify "^1.1.0"
2659 +
2660 +regenerator-runtime@^0.13.4:
2661 + version "0.13.9"
2662 + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz#8925742a98ffd90814988d7566ad30ca3b263b52"
2663 + integrity sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==
2664 +
2665 +require-directory@^2.1.1:
2666 + version "2.1.1"
2667 + resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42"
2668 + integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==
2669 +
2670 +requires-port@^1.0.0:
2671 + version "1.0.0"
2672 + resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff"
2673 + integrity sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==
2674 +
2675 +resolve-cwd@^3.0.0:
2676 + version "3.0.0"
2677 + resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d"
2678 + integrity sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==
2679 + dependencies:
2680 + resolve-from "^5.0.0"
2681 +
2682 +resolve-from@^5.0.0:
2683 + version "5.0.0"
2684 + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69"
2685 + integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==
2686 +
2687 +resolve.exports@^1.1.0:
2688 + version "1.1.0"
2689 + resolved "https://registry.yarnpkg.com/resolve.exports/-/resolve.exports-1.1.0.tgz#5ce842b94b05146c0e03076985d1d0e7e48c90c9"
2690 + integrity sha512-J1l+Zxxp4XK3LUDZ9m60LRJF/mAe4z6a4xyabPHk7pvK5t35dACV32iIjJDFeWZFfZlO29w6SZ67knR0tHzJtQ==
2691 +
2692 +resolve@^1.20.0, resolve@^1.3.2:
2693 + version "1.22.1"
2694 + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.1.tgz#27cb2ebb53f91abb49470a928bba7558066ac177"
2695 + integrity sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==
2696 + dependencies:
2697 + is-core-module "^2.9.0"
2698 + path-parse "^1.0.7"
2699 + supports-preserve-symlinks-flag "^1.0.0"
2700 +
2701 +rxjs@^7.0.0:
2702 + version "7.5.6"
2703 + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.5.6.tgz#0446577557862afd6903517ce7cae79ecb9662bc"
2704 + integrity sha512-dnyv2/YsXhnm461G+R/Pe5bWP41Nm6LBXEYWI6eiFP4fiwx6WRI/CD0zbdVAudd9xwLEF2IDcKXLHit0FYjUzw==
2705 + dependencies:
2706 + tslib "^2.1.0"
2707 +
2708 +safe-buffer@~5.1.1:
2709 + version "5.1.2"
2710 + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d"
2711 + integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==
2712 +
2713 +"safer-buffer@>= 2.1.2 < 3.0.0":
2714 + version "2.1.2"
2715 + resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
2716 + integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
2717 +
2718 +saxes@^6.0.0:
2719 + version "6.0.0"
2720 + resolved "https://registry.yarnpkg.com/saxes/-/saxes-6.0.0.tgz#fe5b4a4768df4f14a201b1ba6a65c1f3d9988cc5"
2721 + integrity sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==
2722 + dependencies:
2723 + xmlchars "^2.2.0"
2724 +
2725 +scheduler@^0.23.0:
2726 + version "0.23.0"
2727 + resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.23.0.tgz#ba8041afc3d30eb206a487b6b384002e4e61fdfe"
2728 + integrity sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==
2729 + dependencies:
2730 + loose-envify "^1.1.0"
2731 +
2732 +semver@7.x, semver@^7.3.5:
2733 + version "7.3.7"
2734 + resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.7.tgz#12c5b649afdbf9049707796e22a4028814ce523f"
2735 + integrity sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==
2736 + dependencies:
2737 + lru-cache "^6.0.0"
2738 +
2739 +semver@^5.4.1:
2740 + version "5.7.1"
2741 + resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7"
2742 + integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==
2743 +
2744 +semver@^6.0.0, semver@^6.3.0:
2745 + version "6.3.0"
2746 + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d"
2747 + integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==
2748 +
2749 +shebang-command@^2.0.0:
2750 + version "2.0.0"
2751 + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea"
2752 + integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==
2753 + dependencies:
2754 + shebang-regex "^3.0.0"
2755 +
2756 +shebang-regex@^3.0.0:
2757 + version "3.0.0"
2758 + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172"
2759 + integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==
2760 +
2761 +shell-quote@^1.7.3:
2762 + version "1.7.3"
2763 + resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.7.3.tgz#aa40edac170445b9a431e17bb62c0b881b9c4123"
2764 + integrity sha512-Vpfqwm4EnqGdlsBFNmHhxhElJYrdfcxPThu+ryKS5J8L/fhAwLazFZtq+S+TWZ9ANj2piSQLGj6NQg+lKPmxrw==
2765 +
2766 +signal-exit@^3.0.3, signal-exit@^3.0.7:
2767 + version "3.0.7"
2768 + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9"
2769 + integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==
2770 +
2771 +sisteransi@^1.0.5:
2772 + version "1.0.5"
2773 + resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed"
2774 + integrity sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==
2775 +
2776 +slash@^3.0.0:
2777 + version "3.0.0"
2778 + resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634"
2779 + integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==
2780 +
2781 +source-map-support@0.5.13:
2782 + version "0.5.13"
2783 + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.13.tgz#31b24a9c2e73c2de85066c0feb7d44767ed52932"
2784 + integrity sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==
2785 + dependencies:
2786 + buffer-from "^1.0.0"
2787 + source-map "^0.6.0"
2788 +
2789 +source-map@^0.5.0:
2790 + version "0.5.7"
2791 + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc"
2792 + integrity sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==
2793 +
2794 +source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1:
2795 + version "0.6.1"
2796 + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263"
2797 + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==
2798 +
2799 +spawn-command@^0.0.2-1:
2800 + version "0.0.2-1"
2801 + resolved "https://registry.yarnpkg.com/spawn-command/-/spawn-command-0.0.2-1.tgz#62f5e9466981c1b796dc5929937e11c9c6921bd0"
2802 + integrity sha512-n98l9E2RMSJ9ON1AKisHzz7V42VDiBQGY6PB1BwRglz99wpVsSuGzQ+jOi6lFXBGVTCrRpltvjm+/XA+tpeJrg==
2803 +
2804 +sprintf-js@~1.0.2:
2805 + version "1.0.3"
2806 + resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c"
2807 + integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==
2808 +
2809 +stack-utils@^2.0.3:
2810 + version "2.0.5"
2811 + resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-2.0.5.tgz#d25265fca995154659dbbfba3b49254778d2fdd5"
2812 + integrity sha512-xrQcmYhOsn/1kX+Vraq+7j4oE2j/6BFscZ0etmYg81xuM8Gq0022Pxb8+IqgOFUIaxHs0KaSb7T1+OegiNrNFA==
2813 + dependencies:
2814 + escape-string-regexp "^2.0.0"
2815 +
2816 +string-length@^4.0.1:
2817 + version "4.0.2"
2818 + resolved "https://registry.yarnpkg.com/string-length/-/string-length-4.0.2.tgz#a8a8dc7bd5c1a82b9b3c8b87e125f66871b6e57a"
2819 + integrity sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==
2820 + dependencies:
2821 + char-regex "^1.0.2"
2822 + strip-ansi "^6.0.0"
2823 +
2824 +string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3:
2825 + version "4.2.3"
2826 + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010"
2827 + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==
2828 + dependencies:
2829 + emoji-regex "^8.0.0"
2830 + is-fullwidth-code-point "^3.0.0"
2831 + strip-ansi "^6.0.1"
2832 +
2833 +strip-ansi@^6.0.0, strip-ansi@^6.0.1:
2834 + version "6.0.1"
2835 + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9"
2836 + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==
2837 + dependencies:
2838 + ansi-regex "^5.0.1"
2839 +
2840 +strip-bom@^4.0.0:
2841 + version "4.0.0"
2842 + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-4.0.0.tgz#9c3505c1db45bcedca3d9cf7a16f5c5aa3901878"
2843 + integrity sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==
2844 +
2845 +strip-final-newline@^2.0.0:
2846 + version "2.0.0"
2847 + resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad"
2848 + integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==
2849 +
2850 +strip-json-comments@^3.1.1:
2851 + version "3.1.1"
2852 + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006"
2853 + integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==
2854 +
2855 +supports-color@^5.3.0:
2856 + version "5.5.0"
2857 + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f"
2858 + integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==
2859 + dependencies:
2860 + has-flag "^3.0.0"
2861 +
2862 +supports-color@^7.0.0, supports-color@^7.1.0:
2863 + version "7.2.0"
2864 + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da"
2865 + integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==
2866 + dependencies:
2867 + has-flag "^4.0.0"
2868 +
2869 +supports-color@^8.0.0, supports-color@^8.1.0:
2870 + version "8.1.1"
2871 + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c"
2872 + integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==
2873 + dependencies:
2874 + has-flag "^4.0.0"
2875 +
2876 +supports-hyperlinks@^2.0.0:
2877 + version "2.3.0"
2878 + resolved "https://registry.yarnpkg.com/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz#3943544347c1ff90b15effb03fc14ae45ec10624"
2879 + integrity sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==
2880 + dependencies:
2881 + has-flag "^4.0.0"
2882 + supports-color "^7.0.0"
2883 +
2884 +supports-preserve-symlinks-flag@^1.0.0:
2885 + version "1.0.0"
2886 + resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09"
2887 + integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==
2888 +
2889 +symbol-tree@^3.2.4:
2890 + version "3.2.4"
2891 + resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2"
2892 + integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==
2893 +
2894 +terminal-link@^2.0.0:
2895 + version "2.1.1"
2896 + resolved "https://registry.yarnpkg.com/terminal-link/-/terminal-link-2.1.1.tgz#14a64a27ab3c0df933ea546fba55f2d078edc994"
2897 + integrity sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==
2898 + dependencies:
2899 + ansi-escapes "^4.2.1"
2900 + supports-hyperlinks "^2.0.0"
2901 +
2902 +test-exclude@^6.0.0:
2903 + version "6.0.0"
2904 + resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-6.0.0.tgz#04a8698661d805ea6fa293b6cb9e63ac044ef15e"
2905 + integrity sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==
2906 + dependencies:
2907 + "@istanbuljs/schema" "^0.1.2"
2908 + glob "^7.1.4"
2909 + minimatch "^3.0.4"
2910 +
2911 +tmpl@1.0.5:
2912 + version "1.0.5"
2913 + resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.5.tgz#8683e0b902bb9c20c4f726e3c0b69f36518c07cc"
2914 + integrity sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==
2915 +
2916 +to-fast-properties@^2.0.0:
2917 + version "2.0.0"
2918 + resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e"
2919 + integrity sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==
2920 +
2921 +to-regex-range@^5.0.1:
2922 + version "5.0.1"
2923 + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4"
2924 + integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==
2925 + dependencies:
2926 + is-number "^7.0.0"
2927 +
2928 +tough-cookie@^4.0.0:
2929 + version "4.1.2"
2930 + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-4.1.2.tgz#e53e84b85f24e0b65dd526f46628db6c85f6b874"
2931 + integrity sha512-G9fqXWoYFZgTc2z8Q5zaHy/vJMjm+WV0AkAeHxVCQiEB1b+dGvWzFW6QV07cY5jQ5gRkeid2qIkzkxUnmoQZUQ==
2932 + dependencies:
2933 + psl "^1.1.33"
2934 + punycode "^2.1.1"
2935 + universalify "^0.2.0"
2936 + url-parse "^1.5.3"
2937 +
2938 +tr46@^3.0.0:
2939 + version "3.0.0"
2940 + resolved "https://registry.yarnpkg.com/tr46/-/tr46-3.0.0.tgz#555c4e297a950617e8eeddef633c87d4d9d6cbf9"
2941 + integrity sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==
2942 + dependencies:
2943 + punycode "^2.1.1"
2944 +
2945 +tree-kill@^1.2.2:
2946 + version "1.2.2"
2947 + resolved "https://registry.yarnpkg.com/tree-kill/-/tree-kill-1.2.2.tgz#4ca09a9092c88b73a7cdc5e8a01b507b0790a0cc"
2948 + integrity sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==
2949 +
2950 +trim-right@^1.0.1:
2951 + version "1.0.1"
2952 + resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003"
2953 + integrity sha512-WZGXGstmCWgeevgTL54hrCuw1dyMQIzWy7ZfqRJfSmJZBwklI15egmQytFP6bPidmw3M8d5yEowl1niq4vmqZw==
2954 +
2955 +ts-jest@^29.0.1:
2956 + version "29.0.1"
2957 + resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-29.0.1.tgz#3296b39d069dc55825ce1d059a9510b33c718b86"
2958 + integrity sha512-htQOHshgvhn93QLxrmxpiQPk69+M1g7govO1g6kf6GsjCv4uvRV0znVmDrrvjUrVCnTYeY4FBxTYYYD4airyJA==
2959 + dependencies:
2960 + bs-logger "0.x"
2961 + fast-json-stable-stringify "2.x"
2962 + jest-util "^29.0.0"
2963 + json5 "^2.2.1"
2964 + lodash.memoize "4.x"
2965 + make-error "1.x"
2966 + semver "7.x"
2967 + yargs-parser "^21.0.1"
2968 +
2969 +ts-node@^10.9.1:
2970 + version "10.9.1"
2971 + resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.9.1.tgz#e73de9102958af9e1f0b168a6ff320e25adcff4b"
2972 + integrity sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==
2973 + dependencies:
2974 + "@cspotcode/source-map-support" "^0.8.0"
2975 + "@tsconfig/node10" "^1.0.7"
2976 + "@tsconfig/node12" "^1.0.7"
2977 + "@tsconfig/node14" "^1.0.0"
2978 + "@tsconfig/node16" "^1.0.2"
2979 + acorn "^8.4.1"
2980 + acorn-walk "^8.1.1"
2981 + arg "^4.1.0"
2982 + create-require "^1.1.0"
2983 + diff "^4.0.1"
2984 + make-error "^1.1.1"
2985 + v8-compile-cache-lib "^3.0.1"
2986 + yn "3.1.1"
2987 +
2988 +tslib@^2.1.0:
2989 + version "2.4.0"
2990 + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.4.0.tgz#7cecaa7f073ce680a05847aa77be941098f36dc3"
2991 + integrity sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==
2992 +
2993 +type-check@~0.3.2:
2994 + version "0.3.2"
2995 + resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72"
2996 + integrity sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==
2997 + dependencies:
2998 + prelude-ls "~1.1.2"
2999 +
3000 +type-detect@4.0.8:
3001 + version "4.0.8"
3002 + resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c"
3003 + integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==
3004 +
3005 +type-fest@^0.21.3:
3006 + version "0.21.3"
3007 + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37"
3008 + integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==
3009 +
3010 +typescript@^4.8.3:
3011 + version "4.8.3"
3012 + resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.8.3.tgz#d59344522c4bc464a65a730ac695007fdb66dd88"
3013 + integrity sha512-goMHfm00nWPa8UvR/CPSvykqf6dVV8x/dp0c5mFTMTIu0u0FlGWRioyy7Nn0PGAdHxpJZnuO/ut+PpQ8UiHAig==
3014 +
3015 +universalify@^0.2.0:
3016 + version "0.2.0"
3017 + resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.2.0.tgz#6451760566fa857534745ab1dde952d1b1761be0"
3018 + integrity sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==
3019 +
3020 +update-browserslist-db@^1.0.9:
3021 + version "1.0.9"
3022 + resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.9.tgz#2924d3927367a38d5c555413a7ce138fc95fcb18"
3023 + integrity sha512-/xsqn21EGVdXI3EXSum1Yckj3ZVZugqyOZQ/CxYPBD/R+ko9NSUScf8tFF4dOKY+2pvSSJA/S+5B8s4Zr4kyvg==
3024 + dependencies:
3025 + escalade "^3.1.1"
3026 + picocolors "^1.0.0"
3027 +
3028 +url-parse@^1.5.3:
3029 + version "1.5.10"
3030 + resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.5.10.tgz#9d3c2f736c1d75dd3bd2be507dcc111f1e2ea9c1"
3031 + integrity sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==
3032 + dependencies:
3033 + querystringify "^2.1.1"
3034 + requires-port "^1.0.0"
3035 +
3036 +v8-compile-cache-lib@^3.0.1:
3037 + version "3.0.1"
3038 + resolved "https://registry.yarnpkg.com/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz#6336e8d71965cb3d35a1bbb7868445a7c05264bf"
3039 + integrity sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==
3040 +
3041 +v8-to-istanbul@^9.0.1:
3042 + version "9.0.1"
3043 + resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-9.0.1.tgz#b6f994b0b5d4ef255e17a0d17dc444a9f5132fa4"
3044 + integrity sha512-74Y4LqY74kLE6IFyIjPtkSTWzUZmj8tdHT9Ii/26dvQ6K9Dl2NbEfj0XgU2sHCtKgt5VupqhlO/5aWuqS+IY1w==
3045 + dependencies:
3046 + "@jridgewell/trace-mapping" "^0.3.12"
3047 + "@types/istanbul-lib-coverage" "^2.0.1"
3048 + convert-source-map "^1.6.0"
3049 +
3050 +w3c-hr-time@^1.0.2:
3051 + version "1.0.2"
3052 + resolved "https://registry.yarnpkg.com/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz#0a89cdf5cc15822df9c360543676963e0cc308cd"
3053 + integrity sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==
3054 + dependencies:
3055 + browser-process-hrtime "^1.0.0"
3056 +
3057 +w3c-xmlserializer@^3.0.0:
3058 + version "3.0.0"
3059 + resolved "https://registry.yarnpkg.com/w3c-xmlserializer/-/w3c-xmlserializer-3.0.0.tgz#06cdc3eefb7e4d0b20a560a5a3aeb0d2d9a65923"
3060 + integrity sha512-3WFqGEgSXIyGhOmAFtlicJNMjEps8b1MG31NCA0/vOF9+nKMUW1ckhi9cnNHmf88Rzw5V+dwIwsm2C7X8k9aQg==
3061 + dependencies:
3062 + xml-name-validator "^4.0.0"
3063 +
3064 +walker@^1.0.8:
3065 + version "1.0.8"
3066 + resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.8.tgz#bd498db477afe573dc04185f011d3ab8a8d7653f"
3067 + integrity sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==
3068 + dependencies:
3069 + makeerror "1.0.12"
3070 +
3071 +webidl-conversions@^7.0.0:
3072 + version "7.0.0"
3073 + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-7.0.0.tgz#256b4e1882be7debbf01d05f0aa2039778ea080a"
3074 + integrity sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==
3075 +
3076 +whatwg-encoding@^2.0.0:
3077 + version "2.0.0"
3078 + resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz#e7635f597fd87020858626805a2729fa7698ac53"
3079 + integrity sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==
3080 + dependencies:
3081 + iconv-lite "0.6.3"
3082 +
3083 +whatwg-mimetype@^3.0.0:
3084 + version "3.0.0"
3085 + resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz#5fa1a7623867ff1af6ca3dc72ad6b8a4208beba7"
3086 + integrity sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==
3087 +
3088 +whatwg-url@^11.0.0:
3089 + version "11.0.0"
3090 + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-11.0.0.tgz#0a849eebb5faf2119b901bb76fd795c2848d4018"
3091 + integrity sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==
3092 + dependencies:
3093 + tr46 "^3.0.0"
3094 + webidl-conversions "^7.0.0"
3095 +
3096 +which@^2.0.1:
3097 + version "2.0.2"
3098 + resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1"
3099 + integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==
3100 + dependencies:
3101 + isexe "^2.0.0"
3102 +
3103 +word-wrap@~1.2.3:
3104 + version "1.2.3"
3105 + resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c"
3106 + integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==
3107 +
3108 +wrap-ansi@^7.0.0:
3109 + version "7.0.0"
3110 + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43"
3111 + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==
3112 + dependencies:
3113 + ansi-styles "^4.0.0"
3114 + string-width "^4.1.0"
3115 + strip-ansi "^6.0.0"
3116 +
3117 +wrappy@1:
3118 + version "1.0.2"
3119 + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
3120 + integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==
3121 +
3122 +write-file-atomic@^4.0.1:
3123 + version "4.0.2"
3124 + resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-4.0.2.tgz#a9df01ae5b77858a027fd2e80768ee433555fcfd"
3125 + integrity sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==
3126 + dependencies:
3127 + imurmurhash "^0.1.4"
3128 + signal-exit "^3.0.7"
3129 +
3130 +ws@^8.8.0:
3131 + version "8.9.0"
3132 + resolved "https://registry.yarnpkg.com/ws/-/ws-8.9.0.tgz#2a994bb67144be1b53fe2d23c53c028adeb7f45e"
3133 + integrity sha512-Ja7nszREasGaYUYCI2k4lCKIRTt+y7XuqVoHR44YpI49TtryyqbqvDMn5eqfW7e6HzTukDRIsXqzVHScqRcafg==
3134 +
3135 +xml-name-validator@^4.0.0:
3136 + version "4.0.0"
3137 + resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-4.0.0.tgz#79a006e2e63149a8600f15430f0a4725d1524835"
3138 + integrity sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==
3139 +
3140 +xmlchars@^2.2.0:
3141 + version "2.2.0"
3142 + resolved "https://registry.yarnpkg.com/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb"
3143 + integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==
3144 +
3145 +y18n@^5.0.5:
3146 + version "5.0.8"
3147 + resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55"
3148 + integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==
3149 +
3150 +yallist@^4.0.0:
3151 + version "4.0.0"
3152 + resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72"
3153 + integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==
3154 +
3155 +yargs-parser@^21.0.0, yargs-parser@^21.0.1:
3156 + version "21.1.1"
3157 + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35"
3158 + integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==
3159 +
3160 +yargs@^17.3.1:
3161 + version "17.5.1"
3162 + resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.5.1.tgz#e109900cab6fcb7fd44b1d8249166feb0b36e58e"
3163 + integrity sha512-t6YAJcxDkNX7NFYiVtKvWUz8l+PaKTLiL63mJYWR2GnHq2gjEWISzsLp9wg3aY36dY1j+gfIEL3pIF+XlJJfbA==
3164 + dependencies:
3165 + cliui "^7.0.2"
3166 + escalade "^3.1.1"
3167 + get-caller-file "^2.0.5"
3168 + require-directory "^2.1.1"
3169 + string-width "^4.2.3"
3170 + y18n "^5.0.5"
3171 + yargs-parser "^21.0.0"
3172 +
3173 +yn@3.1.1:
3174 + version "3.1.1"
3175 + resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50"
3176 + integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==
3177 +
3178 +yocto-queue@^0.1.0:
3179 + version "0.1.0"
3180 + resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b"
3181 + integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==