diff --git a/DISCO3.md b/DISCO3.md index 150c97e..9d667c5 100644 --- a/DISCO3.md +++ b/DISCO3.md @@ -1,77 +1,88 @@ -| title: | disco: distributed computing aesthetic and critique | -|---------- |----------------------------------------------------- | -| version: | 2022.02 | -| summary: | distributed computing: a design framework | -| license: | Apache-2.0 / CC-2.5 SA | - +| title: | disco: distributed computing aesthetic and critique | +| -------- | --------------------------------------------------- | +| version: | 2022.02 | +| summary: | distributed computing: a design framework | +| license: | Apache-2.0 / CC-2.5 SA | --- - -# disco - a web3 engineering and design system - +# disco - a web3 engineering and design system > State is the root of all revenue. - - -
- ## abstract - -> [abstract]: -> we present an engineering focused aesthetic for a novel design framework: disco. disco's is a web3 focused UI/UX framework that is built to enable, provide and reinforce *trust* in the underlying process (both the activity and the application they are using itself). By communicating to the end user directly and indirectly we hope to significatly reduce user error prone mistakes - +> [abstract]: we present an engineering focused aesthetic for a novel design +> framework: disco. disco's is a web3 focused UI/UX framework that is built to +> enable, provide and reinforce _trust_ in the underlying process (both the +> activity and the application they are using itself). By communicating to the +> end user directly and indirectly we hope to significatly reduce user error +> prone mistakes ## motivation -User interface development tools are very powerful. They can be used to construct large and complex user interfaces, with only a relatively small amount of code written by an application developer. And yet, despite the power of such tools and the relatively small amount of code that is written, user interface software often has the following characteristics: - -- the code can be difficult to understand and review thoroughly: -- the code can be difficult to test in a systematic and thorough way; -- the code can contain bugs even after extensive testing and bug fixing; -- the code can be difficult to enhance without introducing unwanted side-effects; -- the quality of the code tends to deteriorate as enhancements are made to it. - -Despite the obvious problems associated with user interface development, **little effort has been made to improve the situation**. Any practitioner who has worked on large user interface projects will be familiar with many of the above characteristics, which are **symptomatic of the way in which the software is constructed**. - +User interface development tools are very powerful. They can be used to +construct large and complex user interfaces, with only a relatively small amount +of code written by an application developer. And yet, despite the power of such +tools and the relatively small amount of code that is written, user interface +software often has the following characteristics: + +- the code can be difficult to understand and review thoroughly: +- the code can be difficult to test in a systematic and thorough way; +- the code can contain bugs even after extensive testing and bug fixing; +- the code can be difficult to enhance without introducing unwanted + side-effects; +- the quality of the code tends to deteriorate as enhancements are made to it. + +Despite the obvious problems associated with user interface development, +**little effort has been made to improve the situation**. Any practitioner who +has worked on large user interface projects will be familiar with many of the +above characteristics, which are **symptomatic of the way in which the software +is constructed**. ### Principles for Transactions -[UX/UI] Manage transaction wait time. Clarify blockchain specific times and manage user’s wait in various phases and feedback.
-[UX/UI] Within the context of an individual, adapt to progressively increase/decrease the amount of new lingo and specific concepts that they need to learn and are exposed to. never combine expert-level blockchain-specific lingo with the need-to-know basics when acting within the same context of an individual; create tiers of knowledge levels. You can show an expert the basics, but never the other way around.
-[UX/UI] Use a consistent visual language to dictate addresses. use human-readable deterministic visual representation of the hash (i.e. Identicons, Blockies et al.) when possible. allow users to expand the full address/hash and copy.
-[UX/UI] Apply relevance to interrupting messages only for information relevant to the current user.
-[UX/UI] Clarify which data comes from the blockchain and which doesn’t.
-[UX/UI] Types of transactions i.e. value transfers, function calls, contract generating.
-[UX/UI] When a blockchain event aborts or otherwise fails to complete as expected, the fallback must remain functional with resulting blockchain state clear.
-[UX/UI] Allow users to subscribe-to, unsubscribe-from or temporarily mute certain events.
-[UX/UI] Errors MUST populate back to the user. -[UX/UI] Budget performance and response time so that stallouts or failovers can be approximated in worse-case - +[UX/UI] Manage transaction wait time. Clarify blockchain specific times and +manage user’s wait in various phases and feedback.
[UX/UI] Within the +context of an individual, adapt to progressively increase/decrease the amount of +new lingo and specific concepts that they need to learn and are exposed to. +never combine expert-level blockchain-specific lingo with the need-to-know +basics when acting within the same context of an individual; create tiers of +knowledge levels. You can show an expert the basics, but never the other way +around.
[UX/UI] Use a consistent visual language to dictate addresses. use +human-readable deterministic visual representation of the hash (i.e. Identicons, +Blockies et al.) when possible. allow users to expand the full address/hash and +copy.
[UX/UI] Apply relevance to interrupting messages only for information +relevant to the current user.
[UX/UI] Clarify which data comes from the +blockchain and which doesn’t.
[UX/UI] Types of transactions i.e. value +transfers, function calls, contract generating.
[UX/UI] When a blockchain +event aborts or otherwise fails to complete as expected, the fallback must +remain functional with resulting blockchain state clear.
[UX/UI] Allow +users to subscribe-to, unsubscribe-from or temporarily mute certain events.
+[UX/UI] Errors MUST populate back to the user. [UX/UI] Budget performance and +response time so that stallouts or failovers can be approximated in worse-case #### Example: Bad UI/UX can cost big -UI issue causes Citibank to accidentally pay off its insolvent client's $900M loan. - (accessed, 2021.12.20) +UI issue causes Citibank to accidentally pay off its insolvent client's $900M +loan. + +(accessed, 2021.12.20) --- - ## UI/X - Design Decision Records - ## Colors - Semantic Aliases A guide to providing semantic aliases for colors. -Referencing color scales by their actual scale name can work well, like `blue` and `red`. -But often, creating semantic aliases like `accent`, `primary`, `neutral`, or `brand` can be helpful, especially when it comes to theming. - +Referencing color scales by their actual scale name can work well, like `blue` +and `red`. But often, creating semantic aliases like `accent`, `primary`, +`neutral`, or `brand` can be helpful, especially when it comes to theming. #### Bad Color Aliasing @@ -111,20 +122,22 @@ But often, creating semantic aliases like `accent`, `primary`, `neutral`, or `br ## Why Color Alias Matters -With this approach, you will likely run into issues where you need to use the same scale for multiple semantics. Common examples include: +With this approach, you will likely run into issues where you need to use the +same scale for multiple semantics. Common examples include: -- If you map `yellow` to "**warning**", you might also need `yellow` to communicate "**pending**". - -- If you map `red` to "danger", you might also need `red` to communicate "error" or "rejected". - -- If you map `green` to "success", you might also need `green` to communicate "valid". - -- If you map `blue` to "accent", you might also need `blue` to communicate "info". - +- If you map `yellow` to "**warning**", you might also need `yellow` to + communicate "**pending**". +- If you map `red` to "danger", you might also need `red` to communicate "error" + or "rejected". +- If you map `green` to "success", you might also need `green` to communicate + "valid". +- If you map `blue` to "accent", you might also need `blue` to communicate + "info". -> 💡 In this scenario, you can choose to define multiple semantic aliases which map to the same scale. +> 💡 In this scenario, you can choose to define multiple semantic aliases which +> map to the same scale. -#### Good Color Alias +#### Good Color Alias ```css @import 'https://cdn.jsdelivr.net/npm/@radix-ui/colors@latest/blue.css'; @@ -147,11 +160,9 @@ With this approach, you will likely run into issues where you need to use the sa --pending1: var(--yellow1); --pending2: var(--yellow2); } - ``` - - + ## Table of Contents - - [Table of Contents](#table-of-contents) +- [Table of Contents](#table-of-contents) - [Antipatterns](#antipatterns) - [Strict email validation](#strict-email-validation) - [Late returns](#late-returns) @@ -277,29 +292,28 @@ You might also say: "Things that change together should be located as close as r # Antipatterns -Most of those are antipatterns in the Python programming language, but -some of them might be more generic. +Most of those are antipatterns in the Python programming language, but some of +them might be more generic. ## Strict email validation -It is almost impossible to strictly validate an email. Even if you were -writing or using a regex that follows -[RFC5322](http://tools.ietf.org/html/rfc5322#section-3.4), you would -have false positives when trying to validate actual emails that don't -follow the RFC. +It is almost impossible to strictly validate an email. Even if you were writing +or using a regex that follows +[RFC5322](http://tools.ietf.org/html/rfc5322#section-3.4), you would have false +positives when trying to validate actual emails that don't follow the RFC. -What's more, validating an email provides very weak guarantees. A -stronger, more meaningful validation would be to send an email and -validate that the user received it. +What's more, validating an email provides very weak guarantees. A stronger, more +meaningful validation would be to send an email and validate that the user +received it. -To sum up, don't waste your time trying to validate an email if you -don't need to (or just check that there's a `@` in it). If you need to, -send an email with a token and validate that the user received it. +To sum up, don't waste your time trying to validate an email if you don't need +to (or just check that there's a `@` in it). If you need to, send an email with +a token and validate that the user received it. ## Late returns -Returning early reduces cognitive overhead, and improve readability by -killing indentation levels. +Returning early reduces cognitive overhead, and improve readability by killing +indentation levels. Bad: @@ -331,15 +345,14 @@ toaster.restart() There's multiple things wrong with this comment: -- Even if it is actually a hack, no need to say it in a comment. It - lowers the perceived quality of a codebase and impacts developer - motivation. -- Putting the author and the date is totally useless when using source - control (`git blame`). +- Even if it is actually a hack, no need to say it in a comment. It lowers the + perceived quality of a codebase and impacts developer motivation. +- Putting the author and the date is totally useless when using source control + (`git blame`). - This does not explain why it's temporary. - It's impossible to easily grep for temporary fixes. -- [Louis de Funès](https://en.wikipedia.org/wiki/Louis_de_Fun%C3%A8s) - would never write a hack. +- [Louis de Funès](https://en.wikipedia.org/wiki/Louis_de_Fun%C3%A8s) would + never write a hack. Good: @@ -350,8 +363,8 @@ toaster.restart() ``` - This clearly explains the nature of the temporary fix. -- Using `TODO` is an ubiquitous pattern that allows easy grepping and - plays nice with most text editors. +- Using `TODO` is an ubiquitous pattern that allows easy grepping and plays nice + with most text editors. - The perceived quality of this temporary fix is much higher. ## Repeating arguments in function name @@ -363,8 +376,8 @@ def get_by_color(color): return Toasters.filter_by(color=color) ``` -Putting the argument name in both the function name and in arguments is, -in most cases and for most interpreted languages, redundant. +Putting the argument name in both the function name and in arguments is, in most +cases and for most interpreted languages, redundant. Good: @@ -384,10 +397,10 @@ class Toasters(object): pass ``` -This is bad because it's unnecessarily redundant -(`Toasters.get_toaster(1)`). According to the single responsibility -principle, a class should focus on one area of responsibility. So the -`Toasters` class should only focus on toasters object. +This is bad because it's unnecessarily redundant (`Toasters.get_toaster(1)`). +According to the single responsibility principle, a class should focus on one +area of responsibility. So the `Toasters` class should only focus on toasters +object. Good: @@ -464,8 +477,8 @@ def get_data(): ## Undeterministic tests -When testing function that don't behave deterministically, it can be -tempting to run them multiple time and average their results. +When testing function that don't behave deterministically, it can be tempting to +run them multiple time and average their results. Bad: @@ -508,21 +521,19 @@ This is a deterministic test that clearly tells what's going on. ## Unbalanced boilerplate -One thing to strive for in libraries is have as little boilerplate as -possible, but not less. +One thing to strive for in libraries is have as little boilerplate as possible, +but not less. Not enough boilerplate: you'll spend hours trying to understand specific -behaviors that are too magical/implicit. You will need flexibility and -you won't be able to get it. Boilerplate is useful insofar as it -increases +behaviors that are too magical/implicit. You will need flexibility and you won't +be able to get it. Boilerplate is useful insofar as it increases [transparency](http://www.catb.org/esr/writings/taoup/html/ch01s06.html). Too much boilerplate: users of your library will be stuck using outdated -patterns. Users will write library to generate the boilerplate required -by your library. +patterns. Users will write library to generate the boilerplate required by your +library. -I think Flask and SQLAlchemy do a very good job at keeping this under -control. +I think Flask and SQLAlchemy do a very good job at keeping this under control. ## Inconsistent use of verbs in functions @@ -546,17 +557,17 @@ def find_toasts(color): return filter(lambda toast: toast.color == color, TOASTS) ``` -The use of verb is inconsistent in this example. `get` is used to return -a possibly empty list of toasters, and `find` is used to return a single -toaster (or raise an exception) in the second function or a possibly -empty list of toasts in the third function. +The use of verb is inconsistent in this example. `get` is used to return a +possibly empty list of toasters, and `find` is used to return a single toaster +(or raise an exception) in the second function or a possibly empty list of +toasts in the third function. This is based on personal taste but I have the following rule: -- `get` prefixes function that return at most one object (they either - return none or raise an exception depending on the cases) -- `find` prefixes function that return a possibly empty list (or - iterable) of objects. +- `get` prefixes function that return at most one object (they either return + none or raise an exception depending on the cases) +- `find` prefixes function that return a possibly empty list (or iterable) of + objects. Good: @@ -601,16 +612,16 @@ def create2(*args, **kwargs): Why is this bad? -- It's really easy to make a mistake, especially in interpreted - languages such as Python. For instance, if I call - `create({'name': 'hello', 'ccolor': 'blue'})`, I won't get any error, - but the color won't be the one I expect. -- It increases cognitive load, as I have to understand where the object - is coming from to introspect its content. +- It's really easy to make a mistake, especially in interpreted languages such + as Python. For instance, if I call + `create({'name': 'hello', 'ccolor': 'blue'})`, I won't get any error, but the + color won't be the one I expect. +- It increases cognitive load, as I have to understand where the object is + coming from to introspect its content. - It makes the job of static analyzer harder or impossible. -Granted, this pattern is sometimes required (for instance when the -number of params is too large, or when dealing with pure data). +Granted, this pattern is sometimes required (for instance when the number of +params is too large, or when dealing with pure data). A better way is to be explicit: @@ -641,10 +652,10 @@ def get_url(user_id): return 'http://127.0.0.1/users/%s' % user_id ``` -I consider this an antipattern because it hides the request formatting -from the developer, making it more complex to see what `url` look like. -In this extreme example, the formatting function is a one-liner which -sounds a bit overkill for a function. +I consider this an antipattern because it hides the request formatting from the +developer, making it more complex to see what `url` look like. In this extreme +example, the formatting function is a one-liner which sounds a bit overkill for +a function. Good: @@ -654,12 +665,12 @@ def get_user(user_id): return requests.get(url) ``` -Even if you were duplicating the logic once or twice it might still be -fine, because: +Even if you were duplicating the logic once or twice it might still be fine, +because: - You're unlikely to re-use anywhere else outside this file. -- Putting this inline makes it easier for follow the flow. Code is - written to be read primarily by computers. +- Putting this inline makes it easier for follow the flow. Code is written to be + read primarily by computers. ## Returning nothing instead of raising NotFound exception @@ -680,16 +691,15 @@ def toast(toaster_id): ``` It all depends on the caller, but in this cases I'd argue that it is bad -practice to return nothing when the toaster identified by `toaster_id` -can't be found, for two main reasons. +practice to return nothing when the toaster identified by `toaster_id` can't be +found, for two main reasons. **First reason**: when we provide an identifier, we expect it to return -something. Once again, this depends on the caller (for instance, we -could try to see if a user exists by checking an email for instance). In -this simple example it's ok because the `toaster.toast()` will fail -immediately, but what if we were never calling it and creating some -other unrelated objects? We would be doing things that we should never -be doing if the object did not exist: +something. Once again, this depends on the caller (for instance, we could try to +see if a user exists by checking an email for instance). In this simple example +it's ok because the `toaster.toast()` will fail immediately, but what if we were +never calling it and creating some other unrelated objects? We would be doing +things that we should never be doing if the object did not exist: ```python def toast(toaster_id, user): @@ -699,12 +709,11 @@ def toast(toaster_id, user): bill_new_toaster(user) ``` -**Second reason**: `toaster.toast` will fail anyway if `toaster` is none -(in Python with `AttributeError: NoneType has no attribute toast`). In -this abstract example it's ok because the two lines are next to each -other, but the actual `toaster.toast()` call might happen further down -the stack - and it will be very difficult for the developer to -understand where the error is coming from. +**Second reason**: `toaster.toast` will fail anyway if `toaster` is none (in +Python with `AttributeError: NoneType has no attribute toast`). In this abstract +example it's ok because the two lines are next to each other, but the actual +`toaster.toast()` call might happen further down the stack - and it will be very +difficult for the developer to understand where the error is coming from. ```python def toast(toaster_id, user): @@ -726,10 +735,9 @@ def do_stuff_b(toaster): What's the correct things to do? -- If you expect the object to be there, make sure to raise if you don't - find it. -- If you're using SQLAlchemy, use `one()` to force raising an exception - if the object can't be found. Don't use `first` or `one_or_none()`. +- If you expect the object to be there, make sure to raise if you don't find it. +- If you're using SQLAlchemy, use `one()` to force raising an exception if the + object can't be found. Don't use `first` or `one_or_none()`. ## Having a library that contains all utils @@ -748,26 +756,24 @@ def upload_to_sftp(...): ... ``` -`util` or `tools` or `lib` modules that contain all sorts of utilities -have a tendency to become bloated and unmaintainable. Prefer to have -small, dedicated files. +`util` or `tools` or `lib` modules that contain all sorts of utilities have a +tendency to become bloated and unmaintainable. Prefer to have small, dedicated +files. This will keep your imports logical (`lib.date_utils`, `lib.csv_utils`, -`lib.sftp`), make it easier for the reader to identify all the utilities -around a specific topic, and test files easy to keep organized. - +`lib.sftp`), make it easier for the reader to identify all the utilities around +a specific topic, and test files easy to keep organized. - -### Conformance: Configurations for linting, etc +### Conformance: Configurations for linting, etc > Engineering and Design Practices - [Conformance](#conformance) - * [Prettier](#prettier) - + [whitespace](#whitespace) - + [arrow-parens](#arrow-parens) - + [comma-dangle](#202-additional-trailing-comma--yup-eslint--comma-dangle) - + [implicit-arrow-linebreak](#86-enforce-the-location-of-arrow-function-bodies-with-implicit-returns-eslint--implicit-arrow-linebreak) + - [Prettier](#prettier) + - [whitespace](#whitespace) + - [arrow-parens](#arrow-parens) + - [comma-dangle](#202-additional-trailing-comma--yup-eslint--comma-dangle) + - [implicit-arrow-linebreak](#86-enforce-the-location-of-arrow-function-bodies-with-implicit-returns-eslint--implicit-arrow-linebreak) - [Naming Convention](#naming-convention) - [Naming Components](#naming-components) - [Class vs `React.createClass` vs stateless](#class-vs--reactcreateclass--vs-stateless) @@ -786,23 +792,23 @@ around a specific topic, and test files easy to keep organized. - [General Constructs](#general-constructs) - [Style](#style) - [Reference Specification](#reference-specification) - * [System UI](#system-ui) - + [Scale Objects](#scale-objects) - + [Scale Aliases](#scale-aliases) - + [Excluded Values](#excluded-values) - * [Keys](#keys) - + [Space](#space) - * [Breakpoints](#breakpoints) - + [Media Queries](#media-queries) - * [Key Reference](#key-reference) - * [Prior Art](#prior-art) - + - [System UI](#system-ui) + - [Scale Objects](#scale-objects) + - [Scale Aliases](#scale-aliases) + - [Excluded Values](#excluded-values) + - [Keys](#keys) + - [Space](#space) + - [Breakpoints](#breakpoints) + - [Media Queries](#media-queries) + - [Key Reference](#key-reference) + - [Prior Art](#prior-art) ## Conformance -Conformance objectives are to reduce AST diff churn and improve developer experience +Conformance objectives are to reduce AST diff churn and improve developer +experience -### Prettier +### Prettier ### whitespace @@ -891,7 +897,7 @@ const dragonball = 'z'; #### comma-dangle -> 20.2 Additional trailing comma: Yup. eslint: +> 20.2 Additional trailing comma: Yup. eslint: Why? This leads to cleaner git diffs. Also, transpilers like Babel will remove the additional trailing comma in the transpiled code which means you don’t have to worry about the trailing comma problem in legacy browsers. @@ -914,7 +920,7 @@ const hero = { #### implicit-arrow-linebreak -Enforce the location of arrow function bodies with implicit returns. eslint: +Enforce the location of arrow function bodies with implicit returns. eslint: ```js // bad @@ -928,118 +934,125 @@ Enforce the location of arrow function bodies with implicit returns. eslint: (foo) => bar; ``` - ## Naming Convention -We recommend using camel case, pascal case or snake case for your theme tokens. Other word separators may not work as expected. +We recommend using camel case, pascal case or snake case for your theme tokens. +Other word separators may not work as expected. ```js // recommended -tokenName -token_name -token-name +tokenName; +token_name; +token - name; // avoid -token.name -token$name -token*name +token.name; +token$name; +token * name; ``` ## Naming Components - - **Extensions**: Use `.jsx` extension for React components. eslint: [`react/jsx-filename-extension`](https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-filename-extension.md) - - **Filename**: Use PascalCase for filenames. E.g., `ReservationCard.jsx`. - - **Reference Naming**: Use PascalCase for React components and camelCase for their instances. eslint: [`react/jsx-pascal-case`](https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-pascal-case.md) +- **Extensions**: Use `.jsx` extension for React components. eslint: + [`react/jsx-filename-extension`](https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-filename-extension.md) +- **Filename**: Use PascalCase for filenames. E.g., `ReservationCard.jsx`. +- **Reference Naming**: Use PascalCase for React components and camelCase for + their instances. eslint: + [`react/jsx-pascal-case`](https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-pascal-case.md) ```jsx - // bad - import reservationCard from './ReservationCard'; +// bad +import reservationCard from './ReservationCard'; - // good - import ReservationCard from './ReservationCard'; +// good +import ReservationCard from './ReservationCard'; - // bad - const ReservationItem = ; +// bad +const ReservationItem = ; - // good - const reservationItem = ; - ``` +// good +const reservationItem = ; +``` -- **Component Naming**: Use the filename as the component name. For example, `ReservationCard.jsx` should have a reference name of `ReservationCard`. However, for root components of a directory, use `index.jsx` as the filename and use the directory name as the component name: +- **Component Naming**: Use the filename as the component name. For example, + `ReservationCard.jsx` should have a reference name of `ReservationCard`. + However, for root components of a directory, use `index.jsx` as the filename + and use the directory name as the component name: ```jsx - // bad - import Footer from './Footer/Footer'; +// bad +import Footer from './Footer/Footer'; - // bad - import Footer from './Footer/index'; +// bad +import Footer from './Footer/index'; - // good - import Footer from './Footer'; +// good +import Footer from './Footer'; ``` - ## Class vs `React.createClass` vs stateless - - If you have internal state and/or refs, prefer `class extends React.Component` over `React.createClass`. eslint: [`react/prefer-es6-class`](https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/prefer-es6-class.md) [`react/prefer-stateless-function`](https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/prefer-stateless-function.md) +- If you have internal state and/or refs, prefer `class extends React.Component` + over `React.createClass`. eslint: + [`react/prefer-es6-class`](https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/prefer-es6-class.md) + [`react/prefer-stateless-function`](https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/prefer-stateless-function.md) ```jsx - // bad - const Listing = React.createClass({ - // ... - render() { - return
{this.state.hello}
; - } - }); - - // good - class Listing extends React.Component { - // ... - render() { - return
{this.state.hello}
; - } - } +// bad +const Listing = React.createClass({ + // ... + render() { + return
{this.state.hello}
; + }, +}); + +// good +class Listing extends React.Component { + // ... + render() { + return
{this.state.hello}
; + } +} ``` -> And if you don’t have state or refs, prefer normal functions (not arrow functions) over classes: +> And if you don’t have state or refs, prefer normal functions (not arrow +> functions) over classes: ```jsx - // bad - class Listing extends React.Component { - render() { - return
{this.props.hello}
; - } - } +// bad +class Listing extends React.Component { + render() { + return
{this.props.hello}
; + } +} - // bad (relying on function name inference is discouraged) - const Listing = ({ hello }) => ( -
{hello}
- ); +// bad (relying on function name inference is discouraged) +const Listing = ({ hello }) =>
{hello}
; - // good - function Listing({ hello }) { - return
{hello}
; - } +// good +function Listing({ hello }) { + return
{hello}
; +} ``` ## TypeScript -These guidelines are adapted from the TypeScript core's contributor coding guidelines. - -* [Names](#names) -* [Exports](#exports) -* [Components](#components) -* [Types](#types) -* [`null` and `undefined`](#null-and-undefined) -* [General Assumptions](#general-assumptions) -* [Flags](#flags) -* [Comments](#comments) -* [Strings](#strings) -* [When to use `any`](#when-to-use-any) -* [Diagnostic Messages](#diagnostic-messages) -* [General Constructs](#general-constructs) -* [Style](#style) +These guidelines are adapted from the TypeScript core's contributor coding +guidelines. +- [Names](#names) +- [Exports](#exports) +- [Components](#components) +- [Types](#types) +- [`null` and `undefined`](#null-and-undefined) +- [General Assumptions](#general-assumptions) +- [Flags](#flags) +- [Comments](#comments) +- [Strings](#strings) +- [When to use `any`](#when-to-use-any) +- [Diagnostic Messages](#diagnostic-messages) +- [General Constructs](#general-constructs) +- [Style](#style) ## Names @@ -1050,115 +1063,144 @@ These guidelines are adapted from the TypeScript core's contributor coding guide 5. Use camelCase for property names and local variables. 6. Do not use "\_" as a prefix for private properties. 7. Use whole words in names when possible. -8. Use `isXXXing` or `hasXXXXed` for variables representing states of things (e.g. `isLoading`, `hasCompletedOnboarding`). +8. Use `isXXXing` or `hasXXXXed` for variables representing states of things + (e.g. `isLoading`, `hasCompletedOnboarding`). 9. Give folders/files/components/functions unique names. ## Exports -1. Only use named exports. The only exceptions are a tool requires default exports (e.g `React.lazy()`, Gatsby and Next.js `pages`, `typography.js`) +1. Only use named exports. The only exceptions are a tool requires default + exports (e.g `React.lazy()`, Gatsby and Next.js `pages`, `typography.js`) ## Components 1. 1 file per logical component (e.g. parser, scanner, emitter, checker). -2. If not kept in a separate folder, files with ".generated.\*" suffix are auto-generated, do not hand-edit them. +2. If not kept in a separate folder, files with ".generated.\*" suffix are + auto-generated, do not hand-edit them. 3. Tests should be kept in the same directory with ".test.\*" suffix -4. Filename should match the component name. Interfaces for React components should be called `Props` and `State`. The only exception is when writing a render prop. In this situation, you, the author, should call the interface for your component's props `Config` and then the render prop interface `Props` so it is easy for everyone else to use. +4. Filename should match the component name. Interfaces for React components + should be called `Props` and `State`. The only + exception is when writing a render prop. In this situation, you, the author, + should call the interface for your component's props `Config` + and then the render prop interface `Props` so it is easy for + everyone else to use. ## Types -1. Do not export types/functions unless you need to share it across multiple components. +1. Do not export types/functions unless you need to share it across multiple + components. 2. Do not introduce new types/values to the global namespace. 3. Shared types should be defined in 'types.ts'. 4. Within a file, type definitions should come first (after the imports). ## `null` and `undefined` -1. Use **undefined**. Do not use `null`. EVER. If null is used (like in legacy Redux code), it should be kept isolated from other code with selectors. +1. Use **undefined**. Do not use `null`. EVER. If null is used (like in legacy + Redux code), it should be kept isolated from other code with selectors. ## General Assumptions -1. Consider objects like Nodes, Symbols, etc. as immutable outside the component that created them. Do not change them. +1. Consider objects like Nodes, Symbols, etc. as immutable outside the + component that created them. Do not change them. 2. Consider arrays as immutable by default after creation. ## Flags -1. More than 2 related Boolean properties on a type should be turned into a flag. +1. More than 2 related Boolean properties on a type should be turned into a + flag. ## Comments 1. Use JSDoc style comments for functions, interfaces, enums, and classes. -2. **Document crazy stuff.** Always add `@see ` and the current date when referencing external resources, blog posts, tweets, snippets, gists, issues etc. +2. **Document crazy stuff.** Always add `@see ` and the current date when + referencing external resources, blog posts, tweets, snippets, gists, issues + etc. 3. Make note conditions upon which hacks and smelly code can be removed. ## Strings 1. Use single quotes for strings. Double quotes around JSX string props. -2. All strings visible to the user need to be localized (make an entry in diagnosticMessages.json). +2. All strings visible to the user need to be localized (make an entry in + diagnosticMessages.json). ## When to use `any` -1. If something takes you longer than 10 minutes to type or you feel the need to read through TS Advanced Types docs, you should take a step back and ask for help, or use `any`. -2. Custom typings of 3rd-party modules should be added to a `.d.ts` file in a `typings` directory. Document the date and version of the module you are typing at the top of the file. -3. Consider rewriting tiny modules in typescript if types are too hard to think through. +1. If something takes you longer than 10 minutes to type or you feel the need + to read through TS Advanced Types docs, you should take a step back and ask + for help, or use `any`. +2. Custom typings of 3rd-party modules should be added to a `.d.ts` file in a + `typings` directory. Document the date and version of the module you are + typing at the top of the file. +3. Consider rewriting tiny modules in typescript if types are too hard to think + through. ## Diagnostic Messages 1. Use a period at the end of a sentence. 2. Use indefinite articles for indefinite entities. -3. Definite entities should be named (this is for a variable name, type name, etc..). -4. When stating a rule, the subject should be in the singular (e.g. "An external module cannot..." instead of "External modules cannot..."). +3. Definite entities should be named (this is for a variable name, type name, + etc..). +4. When stating a rule, the subject should be in the singular (e.g. "An + external module cannot..." instead of "External modules cannot..."). 5. Use present tense. 6. Use active voice. ## General Constructs -For a variety of reasons, we avoid certain constructs, and use some of our own. Among them: +For a variety of reasons, we avoid certain constructs, and use some of our own. +Among them: -1. Do not use `for..in` statements; instead, use `ts.forEach`, `ts.forEachKey` and `ts.forEachValue`. Be aware of their slightly different semantics. -2. Try to use `ts.forEach`, `ts.map`, and `ts.filter` instead of loops when it is not strongly inconvenient. +1. Do not use `for..in` statements; instead, use `ts.forEach`, `ts.forEachKey` + and `ts.forEachValue`. Be aware of their slightly different semantics. +2. Try to use `ts.forEach`, `ts.map`, and `ts.filter` instead of loops when it + is not strongly inconvenient. ## Style 0. Use prettier and tslint/eslint. 1. Use arrow functions over anonymous function expressions. -1. Only surround arrow function parameters when necessary.
For example, `(x) => x + x` is wrong but the following are correct: +1. Only surround arrow function parameters when necessary.
For example, + `(x) => x + x` is wrong but the following are correct: 1. `x => x + x` 2. `(x,y) => x + y` 3. `(x: T, y: T) => x === y` -1. Always surround loop and conditional bodies with curly braces. Statements on the same line are allowed to omit braces. +1. Always surround loop and conditional bodies with curly braces. Statements on + the same line are allowed to omit braces. 1. Open curly braces always go on the same line as whatever necessitates them. -1. Parenthesized constructs should have no surrounding whitespace.
A single space follows commas, colons, and semicolons in those constructs. For example: +1. Parenthesized constructs should have no surrounding whitespace.
A + single space follows commas, colons, and semicolons in those constructs. For + example: 1. `for (var i = 0, n = str.length; i < 10; i++) { }` 2. `if (x < 10) { }` 3. `function f(x: number, y: string): void { }` -1. Use a single declaration per variable statement
(i.e. use `var x = 1; var y = 2;` over `var x = 1, y = 2;`). +1. Use a single declaration per variable statement
(i.e. use + `var x = 1; var y = 2;` over `var x = 1, y = 2;`). 1. Use 2 spaces per indentation. - ## Reference Specification ### System UI > [System UI Theme Specification](https://system-ui.com] - -The theme object is intended to be a general purpose format for storing design system style values, scales, and/or design tokens. -The object itself is not coupled to any particular library's implementation and can be used -in places where sharing common style values in multiple parts of a code base is desirable. +The theme object is intended to be a general purpose format for storing design +system style values, scales, and/or design tokens. The object itself is not +coupled to any particular library's implementation and can be used in places +where sharing common style values in multiple parts of a code base is desirable. #### Scale Objects -Many CSS style properties accept open-ended values like lengths, colors, and font names. -In order to create a consistent styling system, the theme object is centered around the idea of scales, -such as a typographic (font-size) scale, a spacing scale for margin and padding, and a color object. -These scales can be defined in multiple ways depending on needs, but tend to use arrays for ordinal values like font sizes, -or plain objects for named values like colors, with the option of nesting objects for more complex systems. +Many CSS style properties accept open-ended values like lengths, colors, and +font names. In order to create a consistent styling system, the theme object is +centered around the idea of scales, such as a typographic (font-size) scale, a +spacing scale for margin and padding, and a color object. These scales can be +defined in multiple ways depending on needs, but tend to use arrays for ordinal +values like font sizes, or plain objects for named values like colors, with the +option of nesting objects for more complex systems. ```js // example fontSizes scale as an array -fontSizes: [ - 12, 14, 16, 20, 24, 32 -] +fontSizes: [12, 14, 16, 20, 24, 32]; ``` ```js @@ -1184,49 +1226,55 @@ colors: { #### Scale Aliases -For typically ordinal values like font sizes that are stored in arrays, it can be helpful to create aliases by adding named properties to the object. +For typically ordinal values like font sizes that are stored in arrays, it can +be helpful to create aliases by adding named properties to the object. ```js // example fontSizes aliases -fontSizes: [ - 12, 14, 16, 20, 24, 32 -] +fontSizes: [12, 14, 16, 20, 24, 32]; // aliases -fontSizes.body = fontSizes[2] -fontSizes.display = fontSizes[5] +fontSizes.body = fontSizes[2]; +fontSizes.display = fontSizes[5]; ``` #### Excluded Values -Some CSS properties accept only a small, finite number of valid CSS values and should *not* be included as a scale object. -For example, the `text-align` property accepts the following values: -`left`, `right`, `center`, `justify`, `justify-all`, `start`, `end`, or `match-parent`. -Other properties that are intentionally excluded from this specification include: `float`, `clear`, `display`, `overflow`, `position`, `vertical-align`, `align-items`, `justify-content`, and `flex-direction`. +Some CSS properties accept only a small, finite number of valid CSS values and +should _not_ be included as a scale object. For example, the `text-align` +property accepts the following values: `left`, `right`, `center`, `justify`, +`justify-all`, `start`, `end`, or `match-parent`. Other properties that are +intentionally excluded from this specification include: `float`, `clear`, +`display`, `overflow`, `position`, `vertical-align`, `align-items`, +`justify-content`, and `flex-direction`. ### Keys -The keys in the theme object should typically correspond with the CSS properties they are used for, and follow a plural naming convention. -For example, the CSS property `font-size` is expected to use values from the `fontSizes` scale, and the `color` property uses values from the `colors` scale. - -Some keys can be used for multiple CSS properties, where the data type is the same. -The `color` object is intended to be used with any property that accepts a CSS color value, such as `background-color` or `border-color`. +The keys in the theme object should typically correspond with the CSS properties +they are used for, and follow a plural naming convention. For example, the CSS +property `font-size` is expected to use values from the `fontSizes` scale, and +the `color` property uses values from the `colors` scale. +Some keys can be used for multiple CSS properties, where the data type is the +same. The `color` object is intended to be used with any property that accepts a +CSS color value, such as `background-color` or `border-color`. #### Space -The `space` key is a specially-named scale intended for use with margin, padding, and other layout-related CSS properties. -A space scale can be defined as either a plain object or an array, but by convention an array is preferred. -This is an intentional constraint that makes it difficult to add *"one-off"* or *"in-between"* sizes that could lead to unwanted and rippling affects to layout. +The `space` key is a specially-named scale intended for use with margin, +padding, and other layout-related CSS properties. A space scale can be defined +as either a plain object or an array, but by convention an array is preferred. +This is an intentional constraint that makes it difficult to add _"one-off"_ or +_"in-between"_ sizes that could lead to unwanted and rippling affects to layout. -> Note: other names under consideration include *spacing*, *spaces*, and *lengths*. +> Note: other names under consideration include _spacing_, _spaces_, and +> _lengths_. -When defining space scales as an array, it is conventional to use the value `0` as the first value so that `space[0] === 0`. +When defining space scales as an array, it is conventional to use the value `0` +as the first value so that `space[0] === 0`. ```js // example space scale -space: [ - 0, 4, 8, 16, 32, 64 -] +space: [0, 4, 8, 16, 32, 64]; ``` ```js @@ -1240,22 +1288,22 @@ space: { ```js // example space scale with aliases -space: [ - 0, 4, 8, 16, 32 -] -space.small = space[1] -space.medium = space[2] -space.large = space[3] +space: [0, 4, 8, 16, 32]; +space.small = space[1]; +space.medium = space[2]; +space.large = space[3]; ``` ### Breakpoints -Breakpoints are CSS lengths intended for use in media queries. -Commonly, the breakpoints scale is used to create mobile-first responsive media queries based on array values. +Breakpoints are CSS lengths intended for use in media queries. Commonly, the +breakpoints scale is used to create mobile-first responsive media queries based +on array values. #### Media Queries -For convenience and for use with other styling approaches, a `mediaQueries` scale derived from the `breakpoints` scale can be added to the theme object. +For convenience and for use with other styling approaches, a `mediaQueries` +scale derived from the `breakpoints` scale can be added to the theme object. ```js breakpoints: [ '40em', '52em', '64em' ] @@ -1269,30 +1317,31 @@ mediaQueries: { ### Key Reference -The following is a list of theme object keys and their corresponding CSS properties. -This list may be non-exhaustive. - -Theme Key | CSS Properties -------------------|-------------- -`space` | `margin`, `margin-top`, `margin-right`, `margin-bottom`, `margin-left`, `padding`, `padding-top`, `padding-right`, `padding-bottom`, `padding-left`, `grid-gap`, `grid-column-gap`, `grid-row-gap` -`fontSizes` | `font-size` -`colors` | `color`, `background-color`, `border-color` -`fonts` | `font-family` -`fontWeights` | `font-weight` -`lineHeights` | `line-height` -`letterSpacings` | `letter-spacing` -`sizes` | `width`, `height`, `min-width`, `max-width`, `min-height`, `max-height` -`borders` | `border`, `border-top`, `border-right`, `border-bottom`, `border-left` -`borderWidths` | `border-width` -`borderStyles` | `border-style` -`radii` | `border-radius` -`shadows` | `box-shadow`, `text-shadow` -`zIndices` | `z-index` -`transitions` | `transition` +The following is a list of theme object keys and their corresponding CSS +properties. This list may be non-exhaustive. + +| Theme Key | CSS Properties | +| ---------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `space` | `margin`, `margin-top`, `margin-right`, `margin-bottom`, `margin-left`, `padding`, `padding-top`, `padding-right`, `padding-bottom`, `padding-left`, `grid-gap`, `grid-column-gap`, `grid-row-gap` | +| `fontSizes` | `font-size` | +| `colors` | `color`, `background-color`, `border-color` | +| `fonts` | `font-family` | +| `fontWeights` | `font-weight` | +| `lineHeights` | `line-height` | +| `letterSpacings` | `letter-spacing` | +| `sizes` | `width`, `height`, `min-width`, `max-width`, `min-height`, `max-height` | +| `borders` | `border`, `border-top`, `border-right`, `border-bottom`, `border-left` | +| `borderWidths` | `border-width` | +| `borderStyles` | `border-style` | +| `radii` | `border-radius` | +| `shadows` | `box-shadow`, `text-shadow` | +| `zIndices` | `z-index` | +| `transitions` | `transition` | ### Prior Art -Prior art includes, but is not limited to the following. Please open an issue or pull request to help ensure this list is inclusive. +Prior art includes, but is not limited to the following. Please open an issue or +pull request to help ensure this list is inclusive. - [Theo](https://github.com/salesforce-ux/theo) - [Style Dictionary](https://amzn.github.io/style-dictionary/) diff --git a/README.md b/README.md index c8f7fcc..088b043 100644 --- a/README.md +++ b/README.md @@ -4,11 +4,13 @@ > a performant web3 react library - > [Read the Disco3 Design and Arch. Document](https://github.com/manifoldfinance/disco3-react/blob/master/DISCO3.md) + --- -[![CII Best Practices](https://bestpractices.coreinfrastructure.org/projects/5693/badge)](https://bestpractices.coreinfrastructure.org/projects/5693) [![manifoldfinance.eth](https://img.shields.io/static/v1?label=&message=manifoldfinance.eth&color=black&logo=ethereum&logoColor=white)](https://etherscan.io/enslookup-search?search=manifoldfinance.eth) [![manifoldfinance - disco3-react](https://img.shields.io/static/v1?label=manifoldfinance&message=disco3-react&color=black&logo=github)](https://github.com/manifoldfinance/disco3-react 'Go to GitHub repo') +[![CII Best Practices](https://bestpractices.coreinfrastructure.org/projects/5693/badge)](https://bestpractices.coreinfrastructure.org/projects/5693) +[![manifoldfinance.eth](https://img.shields.io/static/v1?label=&message=manifoldfinance.eth&color=black&logo=ethereum&logoColor=white)](https://etherscan.io/enslookup-search?search=manifoldfinance.eth) +[![manifoldfinance - disco3-react](https://img.shields.io/static/v1?label=manifoldfinance&message=disco3-react&color=black&logo=github)](https://github.com/manifoldfinance/disco3-react 'Go to GitHub repo') | package | description | | ---------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | diff --git a/packages/network/src/index.spec.ts b/packages/network/src/index.spec.ts index 7e44b2a..a4ca994 100644 --- a/packages/network/src/index.spec.ts +++ b/packages/network/src/index.spec.ts @@ -3,6 +3,7 @@ import type { Actions, Web3ReactStore } from '@disco3/types'; import { MockEip1193Bridge } from '../../url/src/index.spec'; import { Network } from './'; import { createWeb3ReactStoreAndActions } from '@disco3/store'; + jest.mock('@ethersproject/providers', () => ({ JsonRpcProvider: class MockJsonRpcProvider { getSigner() {} diff --git a/packages/store/package.json b/packages/store/package.json index 9ca16ff..00fc176 100644 --- a/packages/store/package.json +++ b/packages/store/package.json @@ -41,7 +41,7 @@ "start": "tsc --watch" }, "dependencies": { - "@disco3/types": "8.0.2-beta.0", + "@disco3/types": "^8.0.2-beta.1", "@ethersproject/address": "^5.4.0", "zustand": "^4.0.0-beta.0" } diff --git a/packages/store/src/index.spec.ts b/packages/store/src/index.spec.ts index 22c257a..2d569ba 100644 --- a/packages/store/src/index.spec.ts +++ b/packages/store/src/index.spec.ts @@ -1,4 +1,8 @@ -import { ChainIdNotAllowedError, createWeb3ReactStoreAndActions } from '.'; +import { + ChainIdNotAllowedError, + MAX_SAFE_CHAIN_ID, + createWeb3ReactStoreAndActions, +} from '.'; test('ChainIdNotAllowedError', () => { const error = new ChainIdNotAllowedError(1, [2]); @@ -25,7 +29,7 @@ describe('#createWeb3ReactStoreAndActions', () => { }); describe('#startActivation', () => { - test('#works', () => { + test('works', () => { const [store, actions] = createWeb3ReactStoreAndActions(); actions.startActivation(); expect(store.getState()).toEqual({ @@ -35,6 +39,7 @@ describe('#createWeb3ReactStoreAndActions', () => { error: undefined, }); }); + test('cancellation works', () => { const [store, actions] = createWeb3ReactStoreAndActions(); const cancelActivation = actions.startActivation(); @@ -53,7 +58,7 @@ describe('#createWeb3ReactStoreAndActions', () => { describe('#update', () => { test('throws on bad chainIds', () => { const [, actions] = createWeb3ReactStoreAndActions(); - for (const chainId of [1.1, 0, Number.MAX_SAFE_INTEGER + 1]) { + for (const chainId of [1.1, 0, MAX_SAFE_CHAIN_ID + 1]) { expect(() => actions.update({ chainId })).toThrow( `Invalid chainId ${chainId}`, ); @@ -196,15 +201,29 @@ describe('#createWeb3ReactStoreAndActions', () => { }); }); - test('#reportError', () => { - const [store, actions] = createWeb3ReactStoreAndActions(); - const error = new Error(); - actions.reportError(error); - expect(store.getState()).toEqual({ - chainId: undefined, - accounts: undefined, - activating: false, - error, + describe('#reportError', () => { + test('sets error', () => { + const [store, actions] = createWeb3ReactStoreAndActions(); + const error = new Error(); + actions.reportError(error); + expect(store.getState()).toEqual({ + chainId: undefined, + accounts: undefined, + activating: false, + error, + }); + }); + + test('resets state', () => { + const [store, actions] = createWeb3ReactStoreAndActions(); + actions.reportError(new Error()); + actions.reportError(undefined); + expect(store.getState()).toEqual({ + chainId: undefined, + accounts: undefined, + activating: false, + error: undefined, + }); }); }); }); diff --git a/packages/store/src/index.ts b/packages/store/src/index.ts index 40059a7..50b6aed 100644 --- a/packages/store/src/index.ts +++ b/packages/store/src/index.ts @@ -1,17 +1,26 @@ -import { getAddress } from '@ethersproject/address'; import type { Actions, Web3ReactState, Web3ReactStateUpdate, Web3ReactStore, } from '@disco3/types'; + import create from 'zustand/vanilla'; +import { getAddress } from '@ethersproject/address'; + +/** + * MAX_SAFE_CHAIN_ID is the upper bound limit on what will be accepted for `chainId` + * `MAX_SAFE_CHAIN_ID = floor( ( 2**53 - 39 ) / 2 ) = 4503599627370476` + * + * @see {@link https://github.com/MetaMask/metamask-extension/blob/b6673731e2367e119a5fee9a454dd40bd4968948/shared/constants/network.js#L31} + */ +export const MAX_SAFE_CHAIN_ID = 4503599627370476; function validateChainId(chainId: number): void { if ( !Number.isInteger(chainId) || chainId <= 0 || - chainId > Number.MAX_SAFE_INTEGER + chainId > MAX_SAFE_CHAIN_ID ) { throw new Error(`Invalid chainId ${chainId}`); } @@ -73,9 +82,7 @@ export function createWeb3ReactStoreAndActions( // return a function that cancels the activation iff nothing else has happened return () => { - if (nullifier === nullifierCached) { - store.setState({ ...DEFAULT_STATE, activating: false }); - } + if (nullifier === nullifierCached) store.setState({ activating: false }); }; } diff --git a/packages/types/package.json b/packages/types/package.json index da10a48..6f25bca 100644 --- a/packages/types/package.json +++ b/packages/types/package.json @@ -6,7 +6,7 @@ "publishConfig": { "access": "public" }, - "version": "8.0.2-beta.0", + "version": "8.0.2-beta.1", "type": "module", "files": [ "dist/*" @@ -25,6 +25,6 @@ "start": "tsc --watch" }, "dependencies": { - "zustand": "^4.0.0-beta.0" + "zustand": "^4.0.0-beta.2" } } diff --git a/packages/types/src/index.ts b/packages/types/src/index.ts index 13ea5ab..a5ad2cb 100644 --- a/packages/types/src/index.ts +++ b/packages/types/src/index.ts @@ -1,3 +1,7 @@ +/** + * @version 0.0.18 + */ + import type { State, StoreApi } from 'zustand/vanilla'; import type { EventEmitter } from 'node:events'; @@ -88,6 +92,11 @@ export abstract class Connector { this.actions = actions; } + /** + * Attempt to initiate a connection, failing silently + */ + public connectEagerly?(...args: unknown[]): Promise | void; + /** * Initiate a connection. */ diff --git a/packages/types/yarn.lock b/packages/types/yarn.lock deleted file mode 100644 index f31ef42..0000000 --- a/packages/types/yarn.lock +++ /dev/null @@ -1,8 +0,0 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -"zustand@^3.7.0": - "integrity" "sha512-USzVzLGrvZ8VK1/sEsOAmeqa8N7D3OBdZskVaL7DL89Q4QLTYD053iIlZ5KDidyZ+Od80Dttin/f8ZulOLFFDQ==" - "resolved" "https://registry.npmjs.org/zustand/-/zustand-3.7.0.tgz" - "version" "3.7.0" diff --git a/packages/walletconnect/src/index.spec.ts b/packages/walletconnect/src/index.spec.ts index 086b668..bd1ef23 100644 --- a/packages/walletconnect/src/index.spec.ts +++ b/packages/walletconnect/src/index.spec.ts @@ -1,10 +1,13 @@ -import { createWeb3ReactStoreAndActions } from '@disco3/store'; import type { Actions, RequestArguments, Web3ReactStore } from '@disco3/types'; -import { WalletConnect } from '.'; + import { MockEIP1193Provider } from '../../eip1193/src/index.spec'; +import { WalletConnect } from '.'; +import { createWeb3ReactStoreAndActions } from '@disco3/store'; // necessary because walletconnect returns chainId as a number -export class MockMockWalletConnectProvider extends MockEIP1193Provider { +class MockMockWalletConnectProvider extends MockEIP1193Provider { + public connector = new EventEmitter(); + public eth_chainId_number = jest.fn((chainId?: string) => chainId === undefined ? chainId : Number.parseInt(chainId, 16), ); @@ -35,7 +38,7 @@ describe('WalletConnect', () => { beforeEach(() => { let actions: Actions; [store, actions] = createWeb3ReactStoreAndActions(); - connector = new WalletConnect(actions, {}); + connector = new WalletConnect(actions, { rpc: {} }, true); }); beforeEach(async () => { diff --git a/packages/walletconnect/src/index.ts b/packages/walletconnect/src/index.ts index 6a58945..ed7f4ce 100644 --- a/packages/walletconnect/src/index.ts +++ b/packages/walletconnect/src/index.ts @@ -1,27 +1,33 @@ -import type WalletConnectProvider from '@walletconnect/ethereum-provider'; -import type { IWCEthRpcConnectionOptions } from '@walletconnect/types'; -import type { - Actions, - AddEthereumChainParameter, - ProviderConnectInfo, - ProviderRpcError, -} from '@disco3/types'; +import type { Actions, ProviderRpcError } from '@disco3/types'; + import { Connector } from '@disco3/types'; import type { EventEmitter } from 'node:events'; +import type { IWCEthRpcConnectionOptions } from '@walletconnect/types'; +import type WalletConnectProvider from '@walletconnect/ethereum-provider'; +import { getBestUrl } from './utils'; -interface MockWalletConnectProvider - extends Omit, - EventEmitter {} +export const URI_AVAILABLE = 'URI_AVAILABLE'; + +type MockWalletConnectProvider = WalletConnectProvider & EventEmitter; function parseChainId(chainId: string | number) { return typeof chainId === 'string' ? Number.parseInt(chainId) : chainId; } +type WalletConnectOptions = Omit< + IWCEthRpcConnectionOptions, + 'rpc' | 'infuraId' | 'chainId' +> & { + rpc: { [chainId: number]: string | string[] }; +}; + export class WalletConnect extends Connector { /** {@inheritdoc Connector.provider} */ - provider: MockWalletConnectProvider | undefined; + public provider: MockWalletConnectProvider | undefined; + public readonly events = new EventEmitter3(); - private readonly options?: IWCEthRpcConnectionOptions; + private readonly options: Omit; + private readonly rpc: { [chainId: number]: string[] }; private eagerConnection?: Promise; private treatModalCloseAsError: boolean; @@ -31,17 +37,31 @@ export class WalletConnect extends Connector { */ constructor( actions: Actions, - options: IWCEthRpcConnectionOptions, - connectEagerly = true, + options: WalletConnectOptions, + connectEagerly = false, treatModalCloseAsError = true, ) { super(actions); - this.options = options; - this.treatModalCloseAsError = treatModalCloseAsError; - if (connectEagerly) { - this.eagerConnection = this.initialize(true); + if (connectEagerly && typeof window === 'undefined') { + throw new Error( + 'connectEagerly = true is invalid for SSR, instead use the connectEagerly method in a useEffect', + ); } + + const { rpc, ...rest } = options; + this.rpc = Object.keys(rpc).reduce<{ [chainId: number]: string[] }>( + (accumulator, chainId) => { + const value = rpc[Number(chainId)]; + accumulator[Number(chainId)] = Array.isArray(value) ? value : [value]; + return accumulator; + }, + {}, + ); + this.options = rest; + this.treatModalCloseAsError = treatModalCloseAsError; + + if (connectEagerly) void this.connectEagerly(); } private disconnectListener = (error: ProviderRpcError | undefined): void => { @@ -56,52 +76,86 @@ export class WalletConnect extends Connector { this.actions.update({ accounts }); }; - private async initialize( - connectEagerly: boolean, - chainId?: number, - ): Promise { - let cancelActivation: () => void; - if (connectEagerly) { - cancelActivation = this.actions.startActivation(); - } + private URIListener = ( + _: Error | null, + payload: { params: string[] }, + ): void => { + this.events.emit(URI_AVAILABLE, payload.params[0]); + }; - return import('@walletconnect/ethereum-provider').then((m) => { + private async isomorphicInitialize( + chainId = Number(Object.keys(this.rpc)[0]), + ): Promise { + if (this.eagerConnection) return this.eagerConnection; + + // because we can only use 1 url per chainId, we need to decide between multiple, where necessary + const rpc = Promise.all( + Object.keys(this.rpc).map( + async (chainId): Promise<[number, string]> => [ + Number(chainId), + await getBestUrl(this.rpc[Number(chainId)]), + ], + ), + ).then((results) => + results.reduce<{ [chainId: number]: string }>( + (accumulator, [chainId, url]) => { + accumulator[chainId] = url; + return accumulator; + }, + {}, + ), + ); + + await (this.eagerConnection = import( + '@walletconnect/ethereum-provider' + ).then(async (m) => { this.provider = new m.default({ ...this.options, - ...(chainId ? { chainId } : undefined), + chainId, + rpc: await rpc, }) as unknown as MockWalletConnectProvider; this.provider.on('disconnect', this.disconnectListener); this.provider.on('chainChanged', this.chainChangedListener); this.provider.on('accountsChanged', this.accountsChangedListener); + this.provider.connector.on('display_uri', this.URIListener); + })); + } + + /** {@inheritdoc Connector.connectEagerly} */ + public async connectEagerly(): Promise { + const cancelActivation = this.actions.startActivation(); + + await this.isomorphicInitialize(); + + // eslint-disable-next-line @typescript-eslint/no-non-null-assertion + if (this.provider!.connected) { + try { + // for walletconnect, we always use sequential instead of parallel fetches because otherwise + // chainId defaults to 1 even if the connecting wallet isn't on mainnet + // eslint-disable-next-line @typescript-eslint/no-non-null-assertion + const accounts = await this.provider!.request({ + method: 'eth_accounts', + }); + // eslint-disable-next-line @typescript-eslint/no-non-null-assertion + const chainId = parseChainId( + await this.provider!.request({ + method: 'eth_chainId', + }), + ); - if (connectEagerly) { - if (this.provider.connected) { - return ( - Promise.all([ - this.provider.request({ method: 'eth_chainId' }), - this.provider.request({ method: 'eth_accounts' }), - ]) as Promise<[number | string, string[]]> - ) - .then(([chainId, accounts]) => { - if (accounts?.length) { - this.actions.update({ - chainId: parseChainId(chainId), - accounts, - }); - } else { - throw new Error('No accounts returned'); - } - }) - .catch((error) => { - console.debug('Could not connect eagerly', error); - cancelActivation(); - }); + if (accounts.length) { + this.actions.update({ chainId, accounts }); } else { - cancelActivation(); + throw new Error('No accounts returned'); } + } catch (error) { + console.debug('Could not connect eagerly', error); + cancelActivation(); } - }); + } else { + cancelActivation(); + } } /** @@ -112,10 +166,15 @@ export class WalletConnect extends Connector { * to the chain, if their wallet supports it. */ public async activate(desiredChainId?: number): Promise { + if (desiredChainId && this.rpc[desiredChainId] === undefined) { + throw new Error( + `no url(s) provided for desiredChainId ${desiredChainId}`, + ); + } + // this early return clause catches some common cases if we're already connected if (this.provider?.connected) { - if (!desiredChainId) return; - if (desiredChainId === this.provider.chainId) return; + if (!desiredChainId || desiredChainId === this.provider.chainId) return; const desiredChainIdHex = `0x${desiredChainId.toString(16)}`; return this.provider @@ -123,28 +182,17 @@ export class WalletConnect extends Connector { method: 'wallet_switchEthereumChain', params: [{ chainId: desiredChainIdHex }], }) - .catch(() => { - void 0; - }); - } - - // if we're trying to connect to a specific chain, we may have to re-initialize - if (desiredChainId && desiredChainId !== this.provider?.chainId) { - await this.deactivate(); + .catch(() => void 0); } this.actions.startActivation(); - if (!this.eagerConnection) { - this.eagerConnection = this.initialize(false, desiredChainId); - } - await this.eagerConnection; - - const wasConnected = !!this.provider?.connected; + // if we're trying to connect to a specific chain that we're not already initialized for, we have to re-initialize + if (desiredChainId && desiredChainId !== this.provider?.chainId) + await this.deactivate(); + await this.isomorphicInitialize(desiredChainId); try { - // these are sequential instead of parallel because otherwise, chainId defaults to 1 even - // if the connecting wallet isn't on mainnet // eslint-disable-next-line @typescript-eslint/no-non-null-assertion const accounts = await this.provider!.request({ method: 'eth_requestAccounts', @@ -160,28 +208,24 @@ export class WalletConnect extends Connector { return this.actions.update({ chainId, accounts }); } - // because e.g. metamask doesn't support wallet_switchEthereumChain, we have to report first-time connections, + // because e.g. metamask doesn't support wallet_switchEthereumChain, we have to report connections, // even if the chainId isn't necessarily the desired one. this is ok because in e.g. rainbow, // we won't report a connection to the wrong chain while the switch is pending because of the re-initialization // logic above, which ensures first-time connections are to the correct chain in the first place - if (!wasConnected) this.actions.update({ chainId, accounts }); - - // try to switch to the desired chain, ignoring errors - if (desiredChainId && desiredChainId !== chainId) { - const desiredChainIdHex = `0x${desiredChainId.toString(16)}`; - return this.provider - ?.request({ - method: 'wallet_switchEthereumChain', - params: [{ chainId: desiredChainIdHex }], - }) - .catch(() => { - void 0; - }); - } + this.actions.update({ chainId, accounts }); + + // if we're here, we can try to switch networks, ignoring errors + const desiredChainIdHex = `0x${desiredChainId.toString(16)}`; + return this.provider + ?.request({ + method: 'wallet_switchEthereumChain', + params: [{ chainId: desiredChainIdHex }], + }) + .catch(() => void 0); } catch (error) { // this condition is a bit of a hack :/ - // if a user triggers the walletconnect modal, closes it, and then tries to connect again, the modal will not trigger. - // the logic below prevents this from happening + // if a user triggers the walletconnect modal, closes it, and then tries to connect again, + // the modal will not trigger. the logic below prevents this from happening if ((error as Error).message === 'User closed modal') { await this.deactivate( this.treatModalCloseAsError ? (error as Error) : undefined, @@ -197,6 +241,10 @@ export class WalletConnect extends Connector { this.provider?.off('disconnect', this.disconnectListener); this.provider?.off('chainChanged', this.chainChangedListener); this.provider?.off('accountsChanged', this.accountsChangedListener); + (this.provider?.connector as unknown as EventEmitter | undefined)?.off( + 'display_uri', + this.URIListener, + ); await this.provider?.disconnect(); this.provider = undefined; this.eagerConnection = undefined; diff --git a/packages/walletconnect/src/utils.spec.ts b/packages/walletconnect/src/utils.spec.ts new file mode 100644 index 0000000..f9ae657 --- /dev/null +++ b/packages/walletconnect/src/utils.spec.ts @@ -0,0 +1,70 @@ +import { getBestUrl } from './utils'; + +class MockHttpConnection { + public readonly succeed: boolean; + public readonly latency: number; + + constructor(url: string) { + this.succeed = url.startsWith('succeed'); + this.latency = Number.parseInt(url.split('_')[1]); + } +} + +class MockJsonRpcProvider { + private readonly http: MockHttpConnection; + + constructor(http: MockHttpConnection) { + this.http = http; + } + + public async request() { + return new Promise((resolve, reject) => { + setTimeout(() => { + if (this.http.succeed) { + resolve(1); + } else { + reject(); + } + }, this.http.latency); + }); + } +} + +jest.mock('@walletconnect/jsonrpc-http-connection', () => ({ + HttpConnection: MockHttpConnection, +})); +jest.mock('@walletconnect/jsonrpc-provider', () => ({ + JsonRpcProvider: MockJsonRpcProvider, +})); + +describe('getBestUrl', () => { + test('works with 1 url (success)', async () => { + const url = await getBestUrl(['succeed_0']); + expect(url).toBe('succeed_0'); + }); + + test('works with 1 url (failure)', async () => { + const url = await getBestUrl(['fail_0']); + expect(url).toBe('fail_0'); + }); + + test('works with 2 urls (success/failure)', async () => { + const url = await getBestUrl(['succeed_0', 'fail_0']); + expect(url).toBe('succeed_0'); + }); + + test('works with 2 urls (failure/success)', async () => { + const url = await getBestUrl(['fail_0', 'succeed_0']); + expect(url).toBe('succeed_0'); + }); + + test('works with 2 successful urls (fast/slow)', async () => { + const url = await getBestUrl(['succeed_0', 'succeed_1']); + expect(url).toBe('succeed_0'); + }); + + test('works with 2 successful urls (slow/fast)', async () => { + const url = await getBestUrl(['succeed_1', 'succeed_0']); + expect(url).toBe('succeed_1'); + }); +}); diff --git a/packages/walletconnect/src/utils.ts b/packages/walletconnect/src/utils.ts new file mode 100644 index 0000000..a4292b3 --- /dev/null +++ b/packages/walletconnect/src/utils.ts @@ -0,0 +1,61 @@ +export async function getBestUrl(urls: string[]): Promise { + // if we only have 1 url, it's the best! + if (urls.length === 1) return urls[0]; + + const [HttpConnection, JsonRpcProvider] = await Promise.all([ + import('@walletconnect/jsonrpc-http-connection').then( + ({ HttpConnection }) => HttpConnection, + ), + import('@walletconnect/jsonrpc-provider').then( + ({ JsonRpcProvider }) => JsonRpcProvider, + ), + ]); + + // the below returns the first url for which there's been a successful call, prioritized by index + return new Promise((resolve) => { + let resolved = false; + const successes: { [index: number]: boolean } = {}; + + urls.forEach((url, i) => { + const http = new JsonRpcProvider(new HttpConnection(url)); + void http + .request({ method: 'eth_chainId' }) + .then(() => true) + .catch(() => false) + .then((success) => { + // if we already resolved, return + if (resolved) return; + + // store the result of the call + successes[i] = success; + + // if this is the last call and we haven't resolved yet - do so + if (Object.keys(successes).length === urls.length) { + const index = Object.keys(successes).findIndex( + (j) => successes[Number(j)], + ); + // no need to set resolved to true, as this is the last promise + return resolve(urls[index === -1 ? 0 : index]); + } + + // otherwise, for each prospective index, check if we can resolve + new Array(urls.length) + .fill(0) + .forEach((_, prospectiveIndex) => { + // to resolve, we need to: + // a) have successfully made a call + // b) not be waiting on any other higher-index calls + if ( + successes[prospectiveIndex] && + new Array(prospectiveIndex) + .fill(0) + .every((_, j) => successes[j] === false) + ) { + resolved = true; + resolve(urls[prospectiveIndex]); + } + }); + }); + }); + }); +} diff --git a/packages/walletlink/src/index.spec.ts b/packages/walletlink/src/index.spec.ts index 34ab321..6123c56 100644 --- a/packages/walletlink/src/index.spec.ts +++ b/packages/walletlink/src/index.spec.ts @@ -1,15 +1,18 @@ -import { createWeb3ReactStoreAndActions } from '@disco3/store'; import type { Actions, Web3ReactStore } from '@disco3/types'; -import { WalletLink } from '.'; + import { MockEIP1193Provider } from '../../eip1193/src/index.spec'; +import { WalletLink } from '.'; +import { createWeb3ReactStoreAndActions } from '@disco3/store'; -jest.mock('walletlink', () => ({ - WalletLink: class MockWalletLink { - makeWeb3Provider() { - return new MockEIP1193Provider(); - } - }, -})); +jest.mock( + '@coinbase/wallet-sdk', + () => + class MockWalletLink { + makeWeb3Provider() { + return new MockEIP1193Provider(); + } + }, +); const chainId = '0x1'; const accounts: string[] = []; @@ -23,10 +26,14 @@ describe('WalletLink', () => { beforeEach(() => { let actions: Actions; [store, actions] = createWeb3ReactStoreAndActions(); - connector = new WalletLink(actions, { - appName: 'test', - url: 'https://mock.url', - }); + connector = new WalletLink( + actions, + { + appName: 'test', + url: 'https://mock.url', + }, + true, + ); }); beforeEach(async () => { diff --git a/packages/walletlink/src/index.ts b/packages/walletlink/src/index.ts index 9065e0b..969a798 100644 --- a/packages/walletlink/src/index.ts +++ b/packages/walletlink/src/index.ts @@ -4,9 +4,12 @@ import type { ProviderConnectInfo, ProviderRpcError, } from '@disco3/types'; +import type { + CoinbaseWalletProvider, + CoinbaseWalletSDK, +} from '@coinbase/wallet-sdk'; + import { Connector } from '@disco3/types'; -import type { WalletLink as WalletLinkInstance } from 'walletlink'; -import type { WalletLinkOptions } from 'walletlink/dist/WalletLink'; function parseChainId(chainId: string | number) { return typeof chainId === 'number' @@ -14,19 +17,21 @@ function parseChainId(chainId: string | number) { : Number.parseInt(chainId, chainId.startsWith('0x') ? 16 : 10); } +type CoinbaseWalletSDKOptions = ConstructorParameters< + typeof CoinbaseWalletSDK +>[0] & { url: string }; + export class WalletLink extends Connector { /** {@inheritdoc Connector.provider} */ - public provider: - | ReturnType - | undefined; + public provider: CoinbaseWalletProvider | undefined; - private readonly options: WalletLinkOptions & { url: string }; + private readonly options: CoinbaseWalletSDKOptions; private eagerConnection?: Promise; /** * A `walletlink` instance. */ - public walletLink: WalletLinkInstance | undefined; + public walletLink: CoinbaseWalletSDK | undefined; /** * @param options - Options to pass to `walletlink` @@ -34,72 +39,80 @@ export class WalletLink extends Connector { */ constructor( actions: Actions, - options: WalletLinkOptions & { url: string }, - connectEagerly = true, + options: CoinbaseWalletSDKOptions, + connectEagerly = false, ) { super(actions); - this.options = options; - if (connectEagerly) { - this.eagerConnection = this.initialize(true); + if (connectEagerly && typeof window === 'undefined') { + throw new Error( + 'connectEagerly = true is invalid for SSR, instead use the connectEagerly method in a useEffect', + ); } + + this.options = options; + + if (connectEagerly) void this.connectEagerly(); } - private connectListener = ({ chainId }: ProviderConnectInfo): void => { - this.actions.update({ chainId: parseChainId(chainId) }); - }; + // the `connected` property, is bugged, but this works as a hack to check connection status + private get connected() { + return !!this.provider?.selectedAddress; + } - private disconnectListener = (error: ProviderRpcError): void => { - this.actions.reportError(error); - }; + private async isomorphicInitialize(): Promise { + if (this.eagerConnection) return this.eagerConnection; - private chainChangedListener = (chainId: string): void => { - this.actions.update({ chainId: parseChainId(chainId) }); - }; + await (this.eagerConnection = import('@coinbase/wallet-sdk').then((m) => { + const { url, ...options } = this.options; + this.walletLink = new m.default(options); + this.provider = this.walletLink.makeWeb3Provider(url); - private accountsChangedListener = (accounts: string[]): void => { - this.actions.update({ accounts }); - }; + this.provider.on('connect', ({ chainId }: ProviderConnectInfo): void => { + this.actions.update({ chainId: parseChainId(chainId) }); + }); - private async initialize(connectEagerly: boolean): Promise { - let cancelActivation: () => void; - if (connectEagerly) { - cancelActivation = this.actions.startActivation(); - } + this.provider.on('disconnect', (error: ProviderRpcError): void => { + this.actions.reportError(error); + }); - const { url, ...options } = this.options; + this.provider.on('chainChanged', (chainId: string): void => { + this.actions.update({ chainId: parseChainId(chainId) }); + }); - return import('walletlink').then((m) => { - if (!this.walletLink) { - this.walletLink = new m.WalletLink(options); - } - this.provider = this.walletLink.makeWeb3Provider(url); + this.provider.on('accountsChanged', (accounts: string[]): void => { + this.actions.update({ accounts }); + }); + })); + } - this.provider.on('connect', this.connectListener); - this.provider.on('disconnect', this.disconnectListener); - this.provider.on('chainChanged', this.chainChangedListener); - this.provider.on('accountsChanged', this.accountsChangedListener); - - if (connectEagerly) { - return ( - Promise.all([ - this.provider.request({ method: 'eth_chainId' }), - this.provider.request({ method: 'eth_accounts' }), - ]) as Promise<[string, string[]]> - ) - .then(([chainId, accounts]) => { - if (accounts?.length) { - this.actions.update({ chainId: parseChainId(chainId), accounts }); - } else { - throw new Error('No accounts returned'); - } - }) - .catch((error) => { - console.debug('Could not connect eagerly', error); - cancelActivation(); - }); - } - }); + /** {@inheritdoc Connector.connectEagerly} */ + public async connectEagerly(): Promise { + const cancelActivation = this.actions.startActivation(); + + await this.isomorphicInitialize(); + + if (this.connected) { + return Promise.all([ + // eslint-disable-next-line @typescript-eslint/no-non-null-assertion + this.provider!.request({ method: 'eth_chainId' }), + // eslint-disable-next-line @typescript-eslint/no-non-null-assertion + this.provider!.request({ method: 'eth_accounts' }), + ]) + .then(([chainId, accounts]) => { + if (accounts.length) { + this.actions.update({ chainId: parseChainId(chainId), accounts }); + } else { + throw new Error('No accounts returned'); + } + }) + .catch((error) => { + console.debug('Could not connect eagerly', error); + cancelActivation(); + }); + } else { + cancelActivation(); + } } /** @@ -119,24 +132,28 @@ export class WalletLink extends Connector { ? desiredChainIdOrChainParameters : desiredChainIdOrChainParameters?.chainId; - // the `connected` property, is bugged, but this works as a hack to check connection status - if (this.provider?.selectedAddress) { - if (!desiredChainId) return; - if (desiredChainId === parseChainId(this.provider.chainId)) return; + if (this.connected) { + // eslint-disable-next-line @typescript-eslint/no-non-null-assertion + if ( + !desiredChainId || + desiredChainId === parseChainId(this.provider!.chainId) + ) + return; const desiredChainIdHex = `0x${desiredChainId.toString(16)}`; - return this.provider - .request({ - method: 'wallet_switchEthereumChain', - params: [{ chainId: desiredChainIdHex }], - }) + // eslint-disable-next-line @typescript-eslint/no-non-null-assertion + return this.provider!.request({ + method: 'wallet_switchEthereumChain', + params: [{ chainId: desiredChainIdHex }], + }) .catch(async (error: ProviderRpcError) => { if ( error.code === 4902 && typeof desiredChainIdOrChainParameters !== 'number' ) { // if we're here, we can try to add a new network - await this.provider?.request({ + // eslint-disable-next-line @typescript-eslint/no-non-null-assertion + return this.provider!.request({ method: 'wallet_addEthereumChain', params: [ { @@ -146,31 +163,27 @@ export class WalletLink extends Connector { ], }); } else { - this.actions.reportError(error); + throw error; } + }) + .catch((error: ProviderRpcError) => { + this.actions.reportError(error); }); } this.actions.startActivation(); - - if (!this.eagerConnection) { - this.eagerConnection = this.initialize(false); - } - await this.eagerConnection; - - return ( - Promise.all([ - // eslint-disable-next-line @typescript-eslint/no-non-null-assertion - this.provider!.request({ method: 'eth_chainId' }), - // eslint-disable-next-line @typescript-eslint/no-non-null-assertion - this.provider!.request({ method: 'eth_requestAccounts' }), - ]) as Promise<[string, string[]]> - ) + await this.isomorphicInitialize(); + + return Promise.all([ + // eslint-disable-next-line @typescript-eslint/no-non-null-assertion + this.provider!.request({ method: 'eth_chainId' }), + // eslint-disable-next-line @typescript-eslint/no-non-null-assertion + this.provider!.request({ method: 'eth_requestAccounts' }), + ]) .then(([chainId, accounts]) => { const receivedChainId = parseChainId(chainId); - // if there's no desired chain, or it's equal to the received, update - if (!desiredChainId || receivedChainId === desiredChainId) { + if (!desiredChainId || desiredChainId === receivedChainId) { return this.actions.update({ chainId: receivedChainId, accounts }); } @@ -187,7 +200,8 @@ export class WalletLink extends Connector { typeof desiredChainIdOrChainParameters !== 'number' ) { // if we're here, we can try to add a new network - await this.provider?.request({ + // eslint-disable-next-line @typescript-eslint/no-non-null-assertion + return this.provider!.request({ method: 'wallet_addEthereumChain', params: [ { @@ -208,12 +222,6 @@ export class WalletLink extends Connector { /** {@inheritdoc Connector.deactivate} */ public deactivate(): void { - this.provider?.off('connect', this.disconnectListener); - this.provider?.off('disconnect', this.disconnectListener); - this.provider?.off('chainChanged', this.chainChangedListener); - this.provider?.off('accountsChanged', this.accountsChangedListener); - this.provider = undefined; - this.eagerConnection = undefined; this.walletLink?.disconnect(); } } diff --git a/yarn.lock b/yarn.lock index fc2134d..ef5adad 100644 --- a/yarn.lock +++ b/yarn.lock @@ -23,7 +23,7 @@ dependencies: "@babel/highlight" "^7.16.7" -"@babel/compat-data@^7.13.11", "@babel/compat-data@^7.16.4", "@babel/compat-data@^7.16.8": +"@babel/compat-data@^7.13.11", "@babel/compat-data@^7.16.4", "@babel/compat-data@^7.16.8", "@babel/compat-data@^7.17.0": version "7.17.0" resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.17.0.tgz#86850b8597ea6962089770952075dcaabb8dba34" integrity sha512-392byTlpGWXMv4FbyWw3sAZ/FrW/DrwqLGXpy0mbyNe9Taqv1mg9yON5/o0cnr8XYCkFTZbC1eV+c+LAROgrng== @@ -50,6 +50,26 @@ semver "^5.4.1" source-map "^0.5.0" +"@babel/core@7.4.5": + version "7.4.5" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.4.5.tgz#081f97e8ffca65a9b4b0fdc7e274e703f000c06a" + integrity sha512-OvjIh6aqXtlsA8ujtGKfC7LYWksYSX8yQcM8Ay3LuvVeQ63lcOKgoZWVqcpFwkd29aYU9rVx7jxhfhiEDV9MZA== + dependencies: + "@babel/code-frame" "^7.0.0" + "@babel/generator" "^7.4.4" + "@babel/helpers" "^7.4.4" + "@babel/parser" "^7.4.5" + "@babel/template" "^7.4.4" + "@babel/traverse" "^7.4.5" + "@babel/types" "^7.4.4" + convert-source-map "^1.1.0" + debug "^4.1.0" + json5 "^2.1.0" + lodash "^4.17.11" + resolve "^1.3.2" + semver "^5.4.1" + source-map "^0.5.0" + "@babel/core@^7.1.0", "@babel/core@^7.12.3", "@babel/core@^7.4.4", "@babel/core@^7.7.2", "@babel/core@^7.7.5", "@babel/core@^7.8.0": version "7.17.2" resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.17.2.tgz#2c77fc430e95139d816d39b113b31bf40fb22337" @@ -71,7 +91,7 @@ json5 "^2.1.2" semver "^6.3.0" -"@babel/core@^7.17.5": +"@babel/core@^7.13.10", "@babel/core@^7.15.5", "@babel/core@^7.17.5": version "7.17.5" resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.17.5.tgz#6cd2e836058c28f06a4ca8ee7ed955bbf37c8225" integrity sha512-/BBMw4EvjmyquN5O+t5eh0+YqB3XXJkYD2cjKpYtWOfFy4lQ4UozNSmxAcWT8r2XtZs0ewG+zrfsqeR15i1ajA== @@ -101,7 +121,7 @@ eslint-visitor-keys "^2.1.0" semver "^6.3.0" -"@babel/generator@^7.12.5", "@babel/generator@^7.17.3": +"@babel/generator@^7.12.5", "@babel/generator@^7.17.3", "@babel/generator@^7.4.4": version "7.17.3" resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.17.3.tgz#a2c30b0c4f89858cb87050c3ffdfd36bdf443200" integrity sha512-+R6Dctil/MgUsZsZAkYgK+ADNSZzJRRy0TvY65T71z/CR854xHQ1EweBYXdfT+HNeN7w0cSJJEzgxZMv40pxsg== @@ -157,6 +177,19 @@ "@babel/helper-replace-supers" "^7.16.7" "@babel/helper-split-export-declaration" "^7.16.7" +"@babel/helper-create-class-features-plugin@^7.4.4": + version "7.17.6" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.17.6.tgz#3778c1ed09a7f3e65e6d6e0f6fbfcc53809d92c9" + integrity sha512-SogLLSxXm2OkBbSsHZMM4tUi8fUzjs63AT/d0YQIzr6GSd8Hxsbk2KYDX0k0DweAzGMj/YWeiCsorIdtdcW8Eg== + dependencies: + "@babel/helper-annotate-as-pure" "^7.16.7" + "@babel/helper-environment-visitor" "^7.16.7" + "@babel/helper-function-name" "^7.16.7" + "@babel/helper-member-expression-to-functions" "^7.16.7" + "@babel/helper-optimise-call-expression" "^7.16.7" + "@babel/helper-replace-supers" "^7.16.7" + "@babel/helper-split-export-declaration" "^7.16.7" + "@babel/helper-create-regexp-features-plugin@^7.16.7": version "7.17.0" resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.17.0.tgz#1dcc7d40ba0c6b6b25618997c5dbfd310f186fe1" @@ -350,7 +383,7 @@ "@babel/traverse" "^7.16.8" "@babel/types" "^7.16.8" -"@babel/helpers@^7.12.5", "@babel/helpers@^7.17.2": +"@babel/helpers@^7.12.5", "@babel/helpers@^7.17.2", "@babel/helpers@^7.4.4": version "7.17.2" resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.17.2.tgz#23f0a0746c8e287773ccd27c14be428891f63417" integrity sha512-0Qu7RLR1dILozr/6M0xgj+DFPmi6Bnulgm9M8BVa9ZCWxDqlSnqt3cf8IDPB5m45sVXUZ0kuQAgUrdSFFH79fQ== @@ -373,7 +406,7 @@ resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.17.0.tgz#f0ac33eddbe214e4105363bb17c3341c5ffcc43c" integrity sha512-VKXSCQx5D8S04ej+Dqsr1CzYvvWgf20jIw2D+YhQCrIlr2UZGaDds23Y0xg75/skOxpLCRpUZvk/1EAVkGoDOw== -"@babel/parser@^7.12.7", "@babel/parser@^7.17.3": +"@babel/parser@^7.12.7", "@babel/parser@^7.17.3", "@babel/parser@^7.4.5": version "7.17.3" resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.17.3.tgz#b07702b982990bf6fdc1da5049a23fece4c5c3d0" integrity sha512-7yJPvPV+ESz2IUTPbOL+YkIGyCqOyNIzdguKQuJGnH7bg1WTIifuM21YqokFt/THWh1AkCRn9IgoykTRCBVpzA== @@ -394,7 +427,7 @@ "@babel/helper-skip-transparent-expression-wrappers" "^7.16.0" "@babel/plugin-proposal-optional-chaining" "^7.16.7" -"@babel/plugin-proposal-async-generator-functions@^7.16.8": +"@babel/plugin-proposal-async-generator-functions@^7.16.8", "@babel/plugin-proposal-async-generator-functions@^7.2.0": version "7.16.8" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.16.8.tgz#3bdd1ebbe620804ea9416706cd67d60787504bc8" integrity sha512-71YHIvMuiuqWJQkebWJtdhQTfd4Q4mF76q2IX37uZPkG9+olBxsX+rH1vkhFto4UeJZ9dPY2s+mDvhDm1u2BGQ== @@ -403,6 +436,14 @@ "@babel/helper-remap-async-to-generator" "^7.16.8" "@babel/plugin-syntax-async-generators" "^7.8.4" +"@babel/plugin-proposal-class-properties@7.4.4": + version "7.4.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.4.4.tgz#93a6486eed86d53452ab9bab35e368e9461198ce" + integrity sha512-WjKTI8g8d5w1Bc9zgwSz2nfrsNQsXcCf9J9cdCvrJV6RF56yztwm4TmJC0MgJ9tvwO9gUA/mcYe89bLdGfiXFg== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.4.4" + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-proposal-class-properties@^7.16.7", "@babel/plugin-proposal-class-properties@^7.4.4": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.16.7.tgz#925cad7b3b1a2fcea7e59ecc8eb5954f961f91b0" @@ -436,7 +477,7 @@ "@babel/helper-plugin-utils" "^7.16.7" "@babel/plugin-syntax-export-namespace-from" "^7.8.3" -"@babel/plugin-proposal-json-strings@^7.16.7": +"@babel/plugin-proposal-json-strings@^7.16.7", "@babel/plugin-proposal-json-strings@^7.2.0": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.16.7.tgz#9732cb1d17d9a2626a08c5be25186c195b6fa6e8" integrity sha512-lNZ3EEggsGY78JavgbHsK9u5P3pQaW7k4axlgFLYkMd7UBsiNahCITShLjNQschPyjtO6dADrL24757IdhBrsQ== @@ -488,7 +529,18 @@ "@babel/plugin-syntax-object-rest-spread" "^7.8.3" "@babel/plugin-transform-parameters" "^7.16.7" -"@babel/plugin-proposal-optional-catch-binding@^7.16.7": +"@babel/plugin-proposal-object-rest-spread@^7.4.4": + version "7.17.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.17.3.tgz#d9eb649a54628a51701aef7e0ea3d17e2b9dd390" + integrity sha512-yuL5iQA/TbZn+RGAfxQXfi7CNLmKi1f8zInn4IgobuCWcAb7i+zj4TYzQ9l8cEzVyJ89PDGuqxK1xZpUDISesw== + dependencies: + "@babel/compat-data" "^7.17.0" + "@babel/helper-compilation-targets" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-syntax-object-rest-spread" "^7.8.3" + "@babel/plugin-transform-parameters" "^7.16.7" + +"@babel/plugin-proposal-optional-catch-binding@^7.16.7", "@babel/plugin-proposal-optional-catch-binding@^7.2.0": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.16.7.tgz#c623a430674ffc4ab732fd0a0ae7722b67cb74cf" integrity sha512-eMOH/L4OvWSZAE1VkHbr1vckLG1WUcHGJSLqqQwl2GaUqG6QjddvrOaTUMNYiv77H5IKPMZ9U9P7EaHwvAShfA== @@ -531,7 +583,7 @@ "@babel/helper-create-regexp-features-plugin" "^7.16.7" "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-syntax-async-generators@^7.8.4": +"@babel/plugin-syntax-async-generators@^7.2.0", "@babel/plugin-syntax-async-generators@^7.8.4": version "7.8.4" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d" integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw== @@ -580,7 +632,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-syntax-json-strings@^7.8.3": +"@babel/plugin-syntax-json-strings@^7.2.0", "@babel/plugin-syntax-json-strings@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a" integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA== @@ -622,14 +674,14 @@ dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-syntax-object-rest-spread@^7.8.0", "@babel/plugin-syntax-object-rest-spread@^7.8.3": +"@babel/plugin-syntax-object-rest-spread@^7.2.0", "@babel/plugin-syntax-object-rest-spread@^7.8.0", "@babel/plugin-syntax-object-rest-spread@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== dependencies: "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-optional-catch-binding@^7.8.3": +"@babel/plugin-syntax-optional-catch-binding@^7.2.0", "@babel/plugin-syntax-optional-catch-binding@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1" integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q== @@ -664,14 +716,14 @@ dependencies: "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-arrow-functions@^7.16.7": +"@babel/plugin-transform-arrow-functions@^7.16.7", "@babel/plugin-transform-arrow-functions@^7.2.0": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.16.7.tgz#44125e653d94b98db76369de9c396dc14bef4154" integrity sha512-9ffkFFMbvzTvv+7dTp/66xvZAWASuPD5Tl9LK3Z9vhOmANo6j94rik+5YMBt4CwHVMWLWpMsriIc2zsa3WW3xQ== dependencies: "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-async-to-generator@^7.16.8": +"@babel/plugin-transform-async-to-generator@^7.16.8", "@babel/plugin-transform-async-to-generator@^7.4.4": version "7.16.8" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.16.8.tgz#b83dff4b970cf41f1b819f8b49cc0cfbaa53a808" integrity sha512-MtmUmTJQHCnyJVrScNzNlofQJ3dLFuobYn3mwOTKHnSCMtbNsqvF71GQmJfFjdrXSsAA7iysFmYWw4bXZ20hOg== @@ -680,21 +732,21 @@ "@babel/helper-plugin-utils" "^7.16.7" "@babel/helper-remap-async-to-generator" "^7.16.8" -"@babel/plugin-transform-block-scoped-functions@^7.16.7": +"@babel/plugin-transform-block-scoped-functions@^7.16.7", "@babel/plugin-transform-block-scoped-functions@^7.2.0": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.16.7.tgz#4d0d57d9632ef6062cdf354bb717102ee042a620" integrity sha512-JUuzlzmF40Z9cXyytcbZEZKckgrQzChbQJw/5PuEHYeqzCsvebDx0K0jWnIIVcmmDOAVctCgnYs0pMcrYj2zJg== dependencies: "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-block-scoping@^7.16.7": +"@babel/plugin-transform-block-scoping@^7.16.7", "@babel/plugin-transform-block-scoping@^7.4.4": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.16.7.tgz#f50664ab99ddeaee5bc681b8f3a6ea9d72ab4f87" integrity sha512-ObZev2nxVAYA4bhyusELdo9hb3H+A56bxH3FZMbEImZFiEDYVHXQSJ1hQKFlDnlt8G9bBrCZ5ZpURZUrV4G5qQ== dependencies: "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-classes@^7.16.7": +"@babel/plugin-transform-classes@^7.16.7", "@babel/plugin-transform-classes@^7.4.4": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.16.7.tgz#8f4b9562850cd973de3b498f1218796eb181ce00" integrity sha512-WY7og38SFAGYRe64BrjKf8OrE6ulEHtr5jEYaZMwox9KebgqPi67Zqz8K53EKk1fFEJgm96r32rkKZ3qA2nCWQ== @@ -708,7 +760,7 @@ "@babel/helper-split-export-declaration" "^7.16.7" globals "^11.1.0" -"@babel/plugin-transform-computed-properties@^7.16.7": +"@babel/plugin-transform-computed-properties@^7.16.7", "@babel/plugin-transform-computed-properties@^7.2.0": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.16.7.tgz#66dee12e46f61d2aae7a73710f591eb3df616470" integrity sha512-gN72G9bcmenVILj//sv1zLNaPyYcOzUho2lIJBMh/iakJ9ygCo/hEF9cpGb61SCMEDxbbyBoVQxrt+bWKu5KGw== @@ -722,6 +774,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.16.7" +"@babel/plugin-transform-destructuring@^7.4.4": + version "7.17.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.17.3.tgz#c445f75819641788a27a0a3a759d9df911df6abc" + integrity sha512-dDFzegDYKlPqa72xIlbmSkly5MluLoaC1JswABGktyt6NTXSBcUuse/kWE/wvKFWJHPETpi158qJZFS3JmykJg== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-transform-dotall-regex@^7.16.7", "@babel/plugin-transform-dotall-regex@^7.4.4": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.16.7.tgz#6b2d67686fab15fb6a7fd4bd895d5982cfc81241" @@ -730,14 +789,14 @@ "@babel/helper-create-regexp-features-plugin" "^7.16.7" "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-duplicate-keys@^7.16.7": +"@babel/plugin-transform-duplicate-keys@^7.16.7", "@babel/plugin-transform-duplicate-keys@^7.2.0": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.16.7.tgz#2207e9ca8f82a0d36a5a67b6536e7ef8b08823c9" integrity sha512-03DvpbRfvWIXyK0/6QiR1KMTWeT6OcQ7tbhjrXyFS02kjuX/mu5Bvnh5SDSWHxyawit2g5aWhKwI86EE7GUnTw== dependencies: "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-exponentiation-operator@^7.16.7": +"@babel/plugin-transform-exponentiation-operator@^7.16.7", "@babel/plugin-transform-exponentiation-operator@^7.2.0": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.16.7.tgz#efa9862ef97e9e9e5f653f6ddc7b665e8536fe9b" integrity sha512-8UYLSlyLgRixQvlYH3J2ekXFHDFLQutdy7FfFAMm3CPZ6q9wHCwnUyiXpQCe3gVVnQlHc5nsuiEVziteRNTXEA== @@ -745,14 +804,14 @@ "@babel/helper-builder-binary-assignment-operator-visitor" "^7.16.7" "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-for-of@^7.16.7": +"@babel/plugin-transform-for-of@^7.16.7", "@babel/plugin-transform-for-of@^7.4.4": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.16.7.tgz#649d639d4617dff502a9a158c479b3b556728d8c" integrity sha512-/QZm9W92Ptpw7sjI9Nx1mbcsWz33+l8kuMIQnDwgQBG5s3fAfQvkRjQ7NqXhtNcKOnPkdICmUHyCaWW06HCsqg== dependencies: "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-function-name@^7.16.7": +"@babel/plugin-transform-function-name@^7.16.7", "@babel/plugin-transform-function-name@^7.4.4": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.16.7.tgz#5ab34375c64d61d083d7d2f05c38d90b97ec65cf" integrity sha512-SU/C68YVwTRxqWj5kgsbKINakGag0KTgq9f2iZEXdStoAbOzLHEBRYzImmA6yFo8YZhJVflvXmIHUO7GWHmxxA== @@ -761,21 +820,21 @@ "@babel/helper-function-name" "^7.16.7" "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-literals@^7.16.7": +"@babel/plugin-transform-literals@^7.16.7", "@babel/plugin-transform-literals@^7.2.0": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.16.7.tgz#254c9618c5ff749e87cb0c0cef1a0a050c0bdab1" integrity sha512-6tH8RTpTWI0s2sV6uq3e/C9wPo4PTqqZps4uF0kzQ9/xPLFQtipynvmT1g/dOfEJ+0EQsHhkQ/zyRId8J2b8zQ== dependencies: "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-member-expression-literals@^7.16.7": +"@babel/plugin-transform-member-expression-literals@^7.16.7", "@babel/plugin-transform-member-expression-literals@^7.2.0": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.16.7.tgz#6e5dcf906ef8a098e630149d14c867dd28f92384" integrity sha512-mBruRMbktKQwbxaJof32LT9KLy2f3gH+27a5XSuXo6h7R3vqltl0PgZ80C8ZMKw98Bf8bqt6BEVi3svOh2PzMw== dependencies: "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-modules-amd@^7.16.7": +"@babel/plugin-transform-modules-amd@^7.16.7", "@babel/plugin-transform-modules-amd@^7.2.0": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.16.7.tgz#b28d323016a7daaae8609781d1f8c9da42b13186" integrity sha512-KaaEtgBL7FKYwjJ/teH63oAmE3lP34N3kshz8mm4VMAw7U3PxjVwwUmxEFksbgsNUaO3wId9R2AVQYSEGRa2+g== @@ -784,7 +843,7 @@ "@babel/helper-plugin-utils" "^7.16.7" babel-plugin-dynamic-import-node "^2.3.3" -"@babel/plugin-transform-modules-commonjs@^7.16.8": +"@babel/plugin-transform-modules-commonjs@^7.16.8", "@babel/plugin-transform-modules-commonjs@^7.4.4": version "7.16.8" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.16.8.tgz#cdee19aae887b16b9d331009aa9a219af7c86afe" integrity sha512-oflKPvsLT2+uKQopesJt3ApiaIS2HW+hzHFcwRNtyDGieAeC/dIHZX8buJQ2J2X1rxGPy4eRcUijm3qcSPjYcA== @@ -794,7 +853,7 @@ "@babel/helper-simple-access" "^7.16.7" babel-plugin-dynamic-import-node "^2.3.3" -"@babel/plugin-transform-modules-systemjs@^7.16.7": +"@babel/plugin-transform-modules-systemjs@^7.16.7", "@babel/plugin-transform-modules-systemjs@^7.4.4": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.16.7.tgz#887cefaef88e684d29558c2b13ee0563e287c2d7" integrity sha512-DuK5E3k+QQmnOqBR9UkusByy5WZWGRxfzV529s9nPra1GE7olmxfqO2FHobEOYSPIjPBTr4p66YDcjQnt8cBmw== @@ -805,7 +864,7 @@ "@babel/helper-validator-identifier" "^7.16.7" babel-plugin-dynamic-import-node "^2.3.3" -"@babel/plugin-transform-modules-umd@^7.16.7": +"@babel/plugin-transform-modules-umd@^7.16.7", "@babel/plugin-transform-modules-umd@^7.2.0": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.16.7.tgz#23dad479fa585283dbd22215bff12719171e7618" integrity sha512-EMh7uolsC8O4xhudF2F6wedbSHm1HHZ0C6aJ7K67zcDNidMzVcxWdGr+htW9n21klm+bOn+Rx4CBsAntZd3rEQ== @@ -813,21 +872,21 @@ "@babel/helper-module-transforms" "^7.16.7" "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-named-capturing-groups-regex@^7.16.8": +"@babel/plugin-transform-named-capturing-groups-regex@^7.16.8", "@babel/plugin-transform-named-capturing-groups-regex@^7.4.5": version "7.16.8" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.16.8.tgz#7f860e0e40d844a02c9dcf9d84965e7dfd666252" integrity sha512-j3Jw+n5PvpmhRR+mrgIh04puSANCk/T/UA3m3P1MjJkhlK906+ApHhDIqBQDdOgL/r1UYpz4GNclTXxyZrYGSw== dependencies: "@babel/helper-create-regexp-features-plugin" "^7.16.7" -"@babel/plugin-transform-new-target@^7.16.7": +"@babel/plugin-transform-new-target@^7.16.7", "@babel/plugin-transform-new-target@^7.4.4": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.16.7.tgz#9967d89a5c243818e0800fdad89db22c5f514244" integrity sha512-xiLDzWNMfKoGOpc6t3U+etCE2yRnn3SM09BXqWPIZOBpL2gvVrBWUKnsJx0K/ADi5F5YC5f8APFfWrz25TdlGg== dependencies: "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-object-super@^7.16.7": +"@babel/plugin-transform-object-super@^7.16.7", "@babel/plugin-transform-object-super@^7.2.0": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.16.7.tgz#ac359cf8d32cf4354d27a46867999490b6c32a94" integrity sha512-14J1feiQVWaGvRxj2WjyMuXS2jsBkgB3MdSN5HuC2G5nRspa5RK9COcs82Pwy5BuGcjb+fYaUj94mYcOj7rCvw== @@ -835,21 +894,21 @@ "@babel/helper-plugin-utils" "^7.16.7" "@babel/helper-replace-supers" "^7.16.7" -"@babel/plugin-transform-parameters@^7.12.1", "@babel/plugin-transform-parameters@^7.16.7": +"@babel/plugin-transform-parameters@^7.12.1", "@babel/plugin-transform-parameters@^7.16.7", "@babel/plugin-transform-parameters@^7.4.4": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.16.7.tgz#a1721f55b99b736511cb7e0152f61f17688f331f" integrity sha512-AT3MufQ7zZEhU2hwOA11axBnExW0Lszu4RL/tAlUJBuNoRak+wehQW8h6KcXOcgjY42fHtDxswuMhMjFEuv/aw== dependencies: "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-property-literals@^7.16.7": +"@babel/plugin-transform-property-literals@^7.16.7", "@babel/plugin-transform-property-literals@^7.2.0": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.16.7.tgz#2dadac85155436f22c696c4827730e0fe1057a55" integrity sha512-z4FGr9NMGdoIl1RqavCqGG+ZuYjfZ/hkCIeuH6Do7tXmSm0ls11nYVSJqFEUOSJbDab5wC6lRE/w6YjVcr6Hqw== dependencies: "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-react-display-name@^7.16.7": +"@babel/plugin-transform-react-display-name@^7.0.0", "@babel/plugin-transform-react-display-name@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.16.7.tgz#7b6d40d232f4c0f550ea348593db3b21e2404340" integrity sha512-qgIg8BcZgd0G/Cz916D5+9kqX0c7nPZyXaP8R2tLNN5tkyIZdG5fEwBrxwplzSnjC1jvQmyMNVwUCZPcbGY7Pg== @@ -863,6 +922,31 @@ dependencies: "@babel/plugin-transform-react-jsx" "^7.16.7" +"@babel/plugin-transform-react-jsx-self@^7.0.0": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.16.7.tgz#f432ad0cba14c4a1faf44f0076c69e42a4d4479e" + integrity sha512-oe5VuWs7J9ilH3BCCApGoYjHoSO48vkjX2CbA5bFVhIuO2HKxA3vyF7rleA4o6/4rTDbk6r8hBW7Ul8E+UZrpA== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + +"@babel/plugin-transform-react-jsx-source@^7.0.0": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.16.7.tgz#1879c3f23629d287cc6186a6c683154509ec70c0" + integrity sha512-rONFiQz9vgbsnaMtQlZCjIRwhJvlrPET8TabIUK2hzlXw9B9s2Ieaxte1SCOOXMbWRHodbKixNf3BLcWVOQ8Bw== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + +"@babel/plugin-transform-react-jsx@^7.0.0": + version "7.17.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.17.3.tgz#eac1565da176ccb1a715dae0b4609858808008c1" + integrity sha512-9tjBm4O07f7mzKSIlEmPdiE6ub7kfIe6Cd+w+oQebpATfTQMAgW+YOuWxogbKVTulA+MEO7byMeIUtQ1z+z+ZQ== + dependencies: + "@babel/helper-annotate-as-pure" "^7.16.7" + "@babel/helper-module-imports" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-syntax-jsx" "^7.16.7" + "@babel/types" "^7.17.0" + "@babel/plugin-transform-react-jsx@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.16.7.tgz#86a6a220552afd0e4e1f0388a68a372be7add0d4" @@ -882,14 +966,14 @@ "@babel/helper-annotate-as-pure" "^7.16.7" "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-regenerator@^7.16.7": +"@babel/plugin-transform-regenerator@^7.16.7", "@babel/plugin-transform-regenerator@^7.4.5": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.16.7.tgz#9e7576dc476cb89ccc5096fff7af659243b4adeb" integrity sha512-mF7jOgGYCkSJagJ6XCujSQg+6xC1M77/03K2oBmVJWoFGNUtnVJO4WHKJk3dnPC8HCcj4xBQP1Egm8DWh3Pb3Q== dependencies: regenerator-transform "^0.14.2" -"@babel/plugin-transform-reserved-words@^7.16.7": +"@babel/plugin-transform-reserved-words@^7.16.7", "@babel/plugin-transform-reserved-words@^7.2.0": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.16.7.tgz#1d798e078f7c5958eec952059c460b220a63f586" integrity sha512-KQzzDnZ9hWQBjwi5lpY5v9shmm6IVG0U9pB18zvMu2i4H90xpT4gmqwPYsn8rObiadYe2M0gmgsiOIF5A/2rtg== @@ -908,14 +992,14 @@ babel-plugin-polyfill-regenerator "^0.3.0" semver "^6.3.0" -"@babel/plugin-transform-shorthand-properties@^7.16.7": +"@babel/plugin-transform-shorthand-properties@^7.16.7", "@babel/plugin-transform-shorthand-properties@^7.2.0": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.16.7.tgz#e8549ae4afcf8382f711794c0c7b6b934c5fbd2a" integrity sha512-hah2+FEnoRoATdIb05IOXf+4GzXYTq75TVhIn1PewihbpyrNWUt2JbudKQOETWw6QpLe+AIUpJ5MVLYTQbeeUg== dependencies: "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-spread@^7.16.7": +"@babel/plugin-transform-spread@^7.16.7", "@babel/plugin-transform-spread@^7.2.0": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.16.7.tgz#a303e2122f9f12e0105daeedd0f30fb197d8ff44" integrity sha512-+pjJpgAngb53L0iaA5gU/1MLXJIfXcYepLgXB3esVRf4fqmj8f2cxM3/FKaHsZms08hFQJkFccEWuIpm429TXg== @@ -923,28 +1007,28 @@ "@babel/helper-plugin-utils" "^7.16.7" "@babel/helper-skip-transparent-expression-wrappers" "^7.16.0" -"@babel/plugin-transform-sticky-regex@^7.16.7": +"@babel/plugin-transform-sticky-regex@^7.16.7", "@babel/plugin-transform-sticky-regex@^7.2.0": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.16.7.tgz#c84741d4f4a38072b9a1e2e3fd56d359552e8660" integrity sha512-NJa0Bd/87QV5NZZzTuZG5BPJjLYadeSZ9fO6oOUoL4iQx+9EEuw/eEM92SrsT19Yc2jgB1u1hsjqDtH02c3Drw== dependencies: "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-template-literals@^7.16.7": +"@babel/plugin-transform-template-literals@^7.16.7", "@babel/plugin-transform-template-literals@^7.4.4": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.16.7.tgz#f3d1c45d28967c8e80f53666fc9c3e50618217ab" integrity sha512-VwbkDDUeenlIjmfNeDX/V0aWrQH2QiVyJtwymVQSzItFDTpxfyJh3EVaQiS0rIN/CqbLGr0VcGmuwyTdZtdIsA== dependencies: "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-typeof-symbol@^7.16.7": +"@babel/plugin-transform-typeof-symbol@^7.16.7", "@babel/plugin-transform-typeof-symbol@^7.2.0": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.16.7.tgz#9cdbe622582c21368bd482b660ba87d5545d4f7e" integrity sha512-p2rOixCKRJzpg9JB4gjnG4gjWkWa89ZoYUnl9snJ1cWIcTH/hvxZqfO+WjG6T8DRBpctEol5jw1O5rA8gkCokQ== dependencies: "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-typescript@^7.16.7": +"@babel/plugin-transform-typescript@^7.16.7", "@babel/plugin-transform-typescript@^7.3.2": version "7.16.8" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.16.8.tgz#591ce9b6b83504903fa9dd3652c357c2ba7a1ee0" integrity sha512-bHdQ9k7YpBDO2d0NVfkj51DpQcvwIzIusJ7mEUaMlbZq3Kt/U47j24inXZHQ5MDiYpCs+oZiwnXyKedE8+q7AQ== @@ -960,7 +1044,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-unicode-regex@^7.16.7": +"@babel/plugin-transform-unicode-regex@^7.16.7", "@babel/plugin-transform-unicode-regex@^7.4.4": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.16.7.tgz#0f7aa4a501198976e25e82702574c34cfebe9ef2" integrity sha512-oC5tYYKw56HO75KZVLQ+R/Nl3Hro9kf8iG0hXoaHP7tjAyCpvqBiSNe6vGrZni1Z6MggmUOC6A7VP7AVmw225Q== @@ -968,6 +1052,60 @@ "@babel/helper-create-regexp-features-plugin" "^7.16.7" "@babel/helper-plugin-utils" "^7.16.7" +"@babel/preset-env@7.4.5": + version "7.4.5" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.4.5.tgz#2fad7f62983d5af563b5f3139242755884998a58" + integrity sha512-f2yNVXM+FsR5V8UwcFeIHzHWgnhXg3NpRmy0ADvALpnhB0SLbCvrCRr4BLOUYbQNLS+Z0Yer46x9dJXpXewI7w== + dependencies: + "@babel/helper-module-imports" "^7.0.0" + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-proposal-async-generator-functions" "^7.2.0" + "@babel/plugin-proposal-json-strings" "^7.2.0" + "@babel/plugin-proposal-object-rest-spread" "^7.4.4" + "@babel/plugin-proposal-optional-catch-binding" "^7.2.0" + "@babel/plugin-proposal-unicode-property-regex" "^7.4.4" + "@babel/plugin-syntax-async-generators" "^7.2.0" + "@babel/plugin-syntax-json-strings" "^7.2.0" + "@babel/plugin-syntax-object-rest-spread" "^7.2.0" + "@babel/plugin-syntax-optional-catch-binding" "^7.2.0" + "@babel/plugin-transform-arrow-functions" "^7.2.0" + "@babel/plugin-transform-async-to-generator" "^7.4.4" + "@babel/plugin-transform-block-scoped-functions" "^7.2.0" + "@babel/plugin-transform-block-scoping" "^7.4.4" + "@babel/plugin-transform-classes" "^7.4.4" + "@babel/plugin-transform-computed-properties" "^7.2.0" + "@babel/plugin-transform-destructuring" "^7.4.4" + "@babel/plugin-transform-dotall-regex" "^7.4.4" + "@babel/plugin-transform-duplicate-keys" "^7.2.0" + "@babel/plugin-transform-exponentiation-operator" "^7.2.0" + "@babel/plugin-transform-for-of" "^7.4.4" + "@babel/plugin-transform-function-name" "^7.4.4" + "@babel/plugin-transform-literals" "^7.2.0" + "@babel/plugin-transform-member-expression-literals" "^7.2.0" + "@babel/plugin-transform-modules-amd" "^7.2.0" + "@babel/plugin-transform-modules-commonjs" "^7.4.4" + "@babel/plugin-transform-modules-systemjs" "^7.4.4" + "@babel/plugin-transform-modules-umd" "^7.2.0" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.4.5" + "@babel/plugin-transform-new-target" "^7.4.4" + "@babel/plugin-transform-object-super" "^7.2.0" + "@babel/plugin-transform-parameters" "^7.4.4" + "@babel/plugin-transform-property-literals" "^7.2.0" + "@babel/plugin-transform-regenerator" "^7.4.5" + "@babel/plugin-transform-reserved-words" "^7.2.0" + "@babel/plugin-transform-shorthand-properties" "^7.2.0" + "@babel/plugin-transform-spread" "^7.2.0" + "@babel/plugin-transform-sticky-regex" "^7.2.0" + "@babel/plugin-transform-template-literals" "^7.4.4" + "@babel/plugin-transform-typeof-symbol" "^7.2.0" + "@babel/plugin-transform-unicode-regex" "^7.4.4" + "@babel/types" "^7.4.4" + browserslist "^4.6.0" + core-js-compat "^3.1.1" + invariant "^2.2.2" + js-levenshtein "^1.1.3" + semver "^5.5.0" + "@babel/preset-env@^7.11.0", "@babel/preset-env@^7.16.11": version "7.16.11" resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.16.11.tgz#5dd88fd885fae36f88fd7c8342475c9f0abe2982" @@ -1059,6 +1197,17 @@ "@babel/types" "^7.4.4" esutils "^2.0.2" +"@babel/preset-react@7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.0.0.tgz#e86b4b3d99433c7b3e9e91747e2653958bc6b3c0" + integrity sha512-oayxyPS4Zj+hF6Et11BwuBkmpgT/zMxyuZgFrMeZID6Hdh3dGlk4sHCAhdBCpuCKW2ppBfl2uCCetlrUIJRY3w== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-transform-react-display-name" "^7.0.0" + "@babel/plugin-transform-react-jsx" "^7.0.0" + "@babel/plugin-transform-react-jsx-self" "^7.0.0" + "@babel/plugin-transform-react-jsx-source" "^7.0.0" + "@babel/preset-react@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.16.7.tgz#4c18150491edc69c183ff818f9f2aecbe5d93852" @@ -1071,6 +1220,14 @@ "@babel/plugin-transform-react-jsx-development" "^7.16.7" "@babel/plugin-transform-react-pure-annotations" "^7.16.7" +"@babel/preset-typescript@7.3.3": + version "7.3.3" + resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.3.3.tgz#88669911053fa16b2b276ea2ede2ca603b3f307a" + integrity sha512-mzMVuIP4lqtn4du2ynEfdO0+RYcslwrZiJHXu4MGaC1ctJiW2fyaeDrtjJGs7R/KebZ1sgowcIoWf4uRpEfKEg== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-transform-typescript" "^7.3.2" + "@babel/preset-typescript@^ 7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.16.7.tgz#ab114d68bb2020afc069cd51b37ff98a046a70b9" @@ -1080,6 +1237,18 @@ "@babel/helper-validator-option" "^7.16.7" "@babel/plugin-transform-typescript" "^7.16.7" +"@babel/register@7.4.4": + version "7.4.4" + resolved "https://registry.yarnpkg.com/@babel/register/-/register-7.4.4.tgz#370a68ba36f08f015a8b35d4864176c6b65d7a23" + integrity sha512-sn51H88GRa00+ZoMqCVgOphmswG4b7mhf9VOB0LUBAieykq2GnRFerlN+JQkO/ntT7wz4jaHNSRPg9IdMPEUkA== + dependencies: + core-js "^3.0.0" + find-cache-dir "^2.0.0" + lodash "^4.17.11" + mkdirp "^0.5.1" + pirates "^4.0.0" + source-map-support "^0.5.9" + "@babel/runtime-corejs3@^7.10.2": version "7.17.2" resolved "https://registry.yarnpkg.com/@babel/runtime-corejs3/-/runtime-corejs3-7.17.2.tgz#fdca2cd05fba63388babe85d349b6801b008fd13" @@ -1088,14 +1257,14 @@ core-js-pure "^3.20.2" regenerator-runtime "^0.13.4" -"@babel/runtime@^7.10.2", "@babel/runtime@^7.12.5", "@babel/runtime@^7.16.3", "@babel/runtime@^7.5.5", "@babel/runtime@^7.7.2", "@babel/runtime@^7.8.4": +"@babel/runtime@^7.10.2", "@babel/runtime@^7.12.5", "@babel/runtime@^7.16.3", "@babel/runtime@^7.5.5", "@babel/runtime@^7.7.2", "@babel/runtime@^7.8.4", "@babel/runtime@^7.9.2": version "7.17.2" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.17.2.tgz#66f68591605e59da47523c631416b18508779941" integrity sha512-hzeyJyMA1YGdJTuWU0e/j4wKXrU4OMFvY2MSlaI9B7VQb0r5cxTE3EAIS2Q7Tn2RIcDkRvTA/v2JsAEhxe99uw== dependencies: regenerator-runtime "^0.13.4" -"@babel/template@^7.12.7", "@babel/template@^7.16.7", "@babel/template@^7.3.3": +"@babel/template@^7.12.13", "@babel/template@^7.12.7", "@babel/template@^7.16.7", "@babel/template@^7.3.3", "@babel/template@^7.4.4": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.16.7.tgz#8d126c8701fde4d66b264b3eba3d96f07666d155" integrity sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w== @@ -1136,7 +1305,7 @@ debug "^4.1.0" globals "^11.1.0" -"@babel/types@^7.0.0", "@babel/types@^7.12.6", "@babel/types@^7.12.7", "@babel/types@^7.16.0", "@babel/types@^7.16.7", "@babel/types@^7.16.8", "@babel/types@^7.17.0", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4", "@babel/types@^7.7.0": +"@babel/types@^7.0.0", "@babel/types@^7.12.6", "@babel/types@^7.12.7", "@babel/types@^7.15.6", "@babel/types@^7.16.0", "@babel/types@^7.16.7", "@babel/types@^7.16.8", "@babel/types@^7.17.0", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4", "@babel/types@^7.7.0": version "7.17.0" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.17.0.tgz#a826e368bccb6b3d84acd76acad5c0d87342390b" integrity sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw== @@ -1174,11 +1343,21 @@ dependencies: "@cspotcode/source-map-consumer" "0.8.0" +"@cush/relative@^1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@cush/relative/-/relative-1.0.0.tgz#8cd1769bf9bde3bb27dac356b1bc94af40f6cc16" + integrity sha512-RpfLEtTlyIxeNPGKcokS+p3BZII/Q3bYxryFRglh5H3A3T8q9fsLYm72VYAMEOOIBLEa8o93kFLiBDUWKrwXZA== + "@discoveryjs/json-ext@^0.5.5": version "0.5.6" resolved "https://registry.yarnpkg.com/@discoveryjs/json-ext/-/json-ext-0.5.6.tgz#d5e0706cf8c6acd8c6032f8d54070af261bbbb2f" integrity sha512-ws57AidsDvREKrZKYffXddNkyaF14iHNHm8VQnZH6t99E8gczjNN0GpvcGny0imC80yQ0tHz1xVUKk/KFQSUyA== +"@emotion/hash@^0.8.0": + version "0.8.0" + resolved "https://registry.yarnpkg.com/@emotion/hash/-/hash-0.8.0.tgz#bbbff68978fefdbe68ccb533bc8cbe1d1afb5413" + integrity sha512-kBJtf7PH6aWwZ6fka3zQ0p6SBYzx4fl1LoZXE2RrnYST9Xljm7WfKJrU4g/Xr3Beg72MLrp1AWNUmuYJTL7Cow== + "@emotion/is-prop-valid@^0.8.8": version "0.8.8" resolved "https://registry.yarnpkg.com/@emotion/is-prop-valid/-/is-prop-valid-0.8.8.tgz#db28b1c4368a259b60a97311d6a952d4fd01ac1a" @@ -1939,7 +2118,7 @@ "@types/yargs" "^15.0.0" chalk "^3.0.0" -"@jest/types@^27.5.1": +"@jest/types@^27.2.5", "@jest/types@^27.5.1": version "27.5.1" resolved "https://registry.yarnpkg.com/@jest/types/-/types-27.5.1.tgz#3c79ec4a8ba61c170bf937bcf9e98a9df175ec80" integrity sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw== @@ -3209,6 +3388,11 @@ resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-5.4.0.tgz#81ef61947bb268eb9d50523446f9c638fb355906" integrity sha512-ZFf2gs/8/6B8PnSofI0inYXr2SDNTDScPXhN7k5EqD4aZ3gi6u+rbmZHVB8IM3wDyx8ntKACZbtXSm7oZGRqVg== +"@svgr/babel-plugin-add-jsx-attribute@^6.0.0": + version "6.0.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-6.0.0.tgz#bd6d1ff32a31b82b601e73672a789cc41e84fe18" + integrity sha512-MdPdhdWLtQsjd29Wa4pABdhWbaRMACdM1h31BY+c6FghTZqNGT7pEYdBoaGeKtdTOBC/XNFQaKVj+r/Ei2ryWA== + "@svgr/babel-plugin-remove-jsx-attribute@^5.4.0": version "5.4.0" resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-5.4.0.tgz#6b2c770c95c874654fd5e1d5ef475b78a0a962ef" @@ -3224,31 +3408,61 @@ resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-5.0.1.tgz#25621a8915ed7ad70da6cea3d0a6dbc2ea933efd" integrity sha512-LA72+88A11ND/yFIMzyuLRSMJ+tRKeYKeQ+mR3DcAZ5I4h5CPWN9AHyUzJbWSYp/u2u0xhmgOe0+E41+GjEueA== +"@svgr/babel-plugin-remove-jsx-empty-expression@^6.0.0": + version "6.0.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-6.0.0.tgz#d06dd6e8a8f603f92f9979bb9990a1f85a4f57ba" + integrity sha512-Ccj42ApsePD451AZJJf1QzTD1B/BOU392URJTeXFxSK709i0KUsGtbwyiqsKu7vsYxpTM0IA5clAKDyf9RCZyA== + "@svgr/babel-plugin-replace-jsx-attribute-value@^5.0.1": version "5.0.1" resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-5.0.1.tgz#0b221fc57f9fcd10e91fe219e2cd0dd03145a897" integrity sha512-PoiE6ZD2Eiy5mK+fjHqwGOS+IXX0wq/YDtNyIgOrc6ejFnxN4b13pRpiIPbtPwHEc+NT2KCjteAcq33/F1Y9KQ== +"@svgr/babel-plugin-replace-jsx-attribute-value@^6.0.0": + version "6.0.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-6.0.0.tgz#0b85837577b02c31c09c758a12932820f5245cee" + integrity sha512-88V26WGyt1Sfd1emBYmBJRWMmgarrExpKNVmI9vVozha4kqs6FzQJ/Kp5+EYli1apgX44518/0+t9+NU36lThQ== + "@svgr/babel-plugin-svg-dynamic-title@^5.4.0": version "5.4.0" resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-5.4.0.tgz#139b546dd0c3186b6e5db4fefc26cb0baea729d7" integrity sha512-zSOZH8PdZOpuG1ZVx/cLVePB2ibo3WPpqo7gFIjLV9a0QsuQAzJiwwqmuEdTaW2pegyBE17Uu15mOgOcgabQZg== +"@svgr/babel-plugin-svg-dynamic-title@^6.0.0": + version "6.0.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-6.0.0.tgz#28236ec26f7ab9d486a487d36ae52d58ba15676f" + integrity sha512-F7YXNLfGze+xv0KMQxrl2vkNbI9kzT9oDK55/kUuymh1ACyXkMV+VZWX1zEhSTfEKh7VkHVZGmVtHg8eTZ6PRg== + "@svgr/babel-plugin-svg-em-dimensions@^5.4.0": version "5.4.0" resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-5.4.0.tgz#6543f69526632a133ce5cabab965deeaea2234a0" integrity sha512-cPzDbDA5oT/sPXDCUYoVXEmm3VIoAWAPT6mSPTJNbQaBNUuEKVKyGH93oDY4e42PYHRW67N5alJx/eEol20abw== +"@svgr/babel-plugin-svg-em-dimensions@^6.0.0": + version "6.0.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-6.0.0.tgz#40267c5dea1b43c4f83a0eb6169e08b43d8bafce" + integrity sha512-+rghFXxdIqJNLQK08kwPBD3Z22/0b2tEZ9lKiL/yTfuyj1wW8HUXu4bo/XkogATIYuXSghVQOOCwURXzHGKyZA== + "@svgr/babel-plugin-transform-react-native-svg@^5.4.0": version "5.4.0" resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-5.4.0.tgz#00bf9a7a73f1cad3948cdab1f8dfb774750f8c80" integrity sha512-3eYP/SaopZ41GHwXma7Rmxcv9uRslRDTY1estspeB1w1ueZWd/tPlMfEOoccYpEMZU3jD4OU7YitnXcF5hLW2Q== +"@svgr/babel-plugin-transform-react-native-svg@^6.0.0": + version "6.0.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-6.0.0.tgz#eb688d0a5f539e34d268d8a516e81f5d7fede7c9" + integrity sha512-VaphyHZ+xIKv5v0K0HCzyfAaLhPGJXSk2HkpYfXIOKb7DjLBv0soHDxNv6X0vr2titsxE7klb++u7iOf7TSrFQ== + "@svgr/babel-plugin-transform-svg-component@^5.5.0": version "5.5.0" resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-5.5.0.tgz#583a5e2a193e214da2f3afeb0b9e8d3250126b4a" integrity sha512-q4jSH1UUvbrsOtlo/tKcgSeiCHRSBdXoIoqX1pgcKK/aU3JD27wmMKwGtpB8qRYUYoyXvfGxUVKchLuR5pB3rQ== +"@svgr/babel-plugin-transform-svg-component@^6.2.0": + version "6.2.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-6.2.0.tgz#7ba61d9fc1fb42b0ba1a04e4630019fa7e993c4f" + integrity sha512-bhYIpsORb++wpsp91fymbFkf09Z/YEKR0DnFjxvN+8JHeCUD2unnh18jIMKnDJTWtvpTaGYPXELVe4OOzFI0xg== + "@svgr/babel-preset@^5.5.0": version "5.5.0" resolved "https://registry.yarnpkg.com/@svgr/babel-preset/-/babel-preset-5.5.0.tgz#8af54f3e0a8add7b1e2b0fcd5a882c55393df327" @@ -3263,6 +3477,20 @@ "@svgr/babel-plugin-transform-react-native-svg" "^5.4.0" "@svgr/babel-plugin-transform-svg-component" "^5.5.0" +"@svgr/babel-preset@^6.2.0": + version "6.2.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-preset/-/babel-preset-6.2.0.tgz#1d3ad8c7664253a4be8e4a0f0e6872f30d8af627" + integrity sha512-4WQNY0J71JIaL03DRn0vLiz87JXx0b9dYm2aA8XHlQJQoixMl4r/soYHm8dsaJZ3jWtkCiOYy48dp9izvXhDkQ== + dependencies: + "@svgr/babel-plugin-add-jsx-attribute" "^6.0.0" + "@svgr/babel-plugin-remove-jsx-attribute" "^6.0.0" + "@svgr/babel-plugin-remove-jsx-empty-expression" "^6.0.0" + "@svgr/babel-plugin-replace-jsx-attribute-value" "^6.0.0" + "@svgr/babel-plugin-svg-dynamic-title" "^6.0.0" + "@svgr/babel-plugin-svg-em-dimensions" "^6.0.0" + "@svgr/babel-plugin-transform-react-native-svg" "^6.0.0" + "@svgr/babel-plugin-transform-svg-component" "^6.2.0" + "@svgr/cli@^5.5.0": version "5.5.0" resolved "https://registry.yarnpkg.com/@svgr/cli/-/cli-5.5.0.tgz#b5b43383cc3b22c327a7bc3277dd8fc7d962452b" @@ -3287,6 +3515,15 @@ camelcase "^6.2.0" cosmiconfig "^7.0.0" +"@svgr/core@^6.2.1": + version "6.2.1" + resolved "https://registry.yarnpkg.com/@svgr/core/-/core-6.2.1.tgz#195de807a9f27f9e0e0d678e01084b05c54fdf61" + integrity sha512-NWufjGI2WUyrg46mKuySfviEJ6IxHUOm/8a3Ph38VCWSp+83HBraCQrpEM3F3dB6LBs5x8OElS8h3C0oOJaJAA== + dependencies: + "@svgr/plugin-jsx" "^6.2.1" + camelcase "^6.2.0" + cosmiconfig "^7.0.1" + "@svgr/hast-util-to-babel-ast@^5.5.0": version "5.5.0" resolved "https://registry.yarnpkg.com/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-5.5.0.tgz#5ee52a9c2533f73e63f8f22b779f93cd432a5461" @@ -3294,6 +3531,14 @@ dependencies: "@babel/types" "^7.12.6" +"@svgr/hast-util-to-babel-ast@^6.2.1": + version "6.2.1" + resolved "https://registry.yarnpkg.com/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-6.2.1.tgz#ae065567b74cbe745afae617053adf9a764bea25" + integrity sha512-pt7MMkQFDlWJVy9ULJ1h+hZBDGFfSCwlBNW1HkLnVi7jUhyEXUaGYWi1x6bM2IXuAR9l265khBT4Av4lPmaNLQ== + dependencies: + "@babel/types" "^7.15.6" + entities "^3.0.1" + "@svgr/plugin-jsx@^5.5.0": version "5.5.0" resolved "https://registry.yarnpkg.com/@svgr/plugin-jsx/-/plugin-jsx-5.5.0.tgz#1aa8cd798a1db7173ac043466d7b52236b369000" @@ -3304,6 +3549,16 @@ "@svgr/hast-util-to-babel-ast" "^5.5.0" svg-parser "^2.0.2" +"@svgr/plugin-jsx@^6.2.1": + version "6.2.1" + resolved "https://registry.yarnpkg.com/@svgr/plugin-jsx/-/plugin-jsx-6.2.1.tgz#5668f1d2aa18c2f1bb7a1fc9f682d3f9aed263bd" + integrity sha512-u+MpjTsLaKo6r3pHeeSVsh9hmGRag2L7VzApWIaS8imNguqoUwDq/u6U/NDmYs/KAsrmtBjOEaAAPbwNGXXp1g== + dependencies: + "@babel/core" "^7.15.5" + "@svgr/babel-preset" "^6.2.0" + "@svgr/hast-util-to-babel-ast" "^6.2.1" + svg-parser "^2.0.2" + "@svgr/plugin-prettier@^5.5.0": version "5.5.0" resolved "https://registry.yarnpkg.com/@svgr/plugin-prettier/-/plugin-prettier-5.5.0.tgz#6c5cc8100f0c895f356d24d523f6ea5165b75366" @@ -3312,6 +3567,14 @@ deepmerge "^4.2.2" prettier "^2.1.2" +"@svgr/plugin-prettier@^6.1.2": + version "6.1.2" + resolved "https://registry.yarnpkg.com/@svgr/plugin-prettier/-/plugin-prettier-6.1.2.tgz#e87eab379b96a6414ddfb9555754e35e64798a90" + integrity sha512-jd9+Arj+6wsv8XxbE2VxfXGftibV+QIH+Uzl4Y0JZ+j5jgJsbCd+7Yey7ZBgVRe7xaW0aRwshUAmP6axOAl37A== + dependencies: + deepmerge "^4.2.2" + prettier "^2.4.0" + "@svgr/plugin-svgo@^5.5.0": version "5.5.0" resolved "https://registry.yarnpkg.com/@svgr/plugin-svgo/-/plugin-svgo-5.5.0.tgz#02da55d85320549324e201c7b2e53bf431fcc246" @@ -3321,6 +3584,44 @@ deepmerge "^4.2.2" svgo "^1.2.2" +"@svgr/plugin-svgo@^6.2.0": + version "6.2.0" + resolved "https://registry.yarnpkg.com/@svgr/plugin-svgo/-/plugin-svgo-6.2.0.tgz#4cbe6a33ccccdcae4e3b63ded64cc1cbe1faf48c" + integrity sha512-oDdMQONKOJEbuKwuy4Np6VdV6qoaLLvoY86hjvQEgU82Vx1MSWRyYms6Sl0f+NtqxLI/rDVufATbP/ev996k3Q== + dependencies: + cosmiconfig "^7.0.1" + deepmerge "^4.2.2" + svgo "^2.5.0" + +"@testing-library/dom@^8.0.0", "@testing-library/dom@^8.10.1": + version "8.11.3" + resolved "https://registry.yarnpkg.com/@testing-library/dom/-/dom-8.11.3.tgz#38fd63cbfe14557021e88982d931e33fb7c1a808" + integrity sha512-9LId28I+lx70wUiZjLvi1DB/WT2zGOxUh46glrSNMaWVx849kKAluezVzZrXJfTKKoQTmEOutLes/bHg4Bj3aA== + dependencies: + "@babel/code-frame" "^7.10.4" + "@babel/runtime" "^7.12.5" + "@types/aria-query" "^4.2.0" + aria-query "^5.0.0" + chalk "^4.1.0" + dom-accessibility-api "^0.5.9" + lz-string "^1.4.4" + pretty-format "^27.0.2" + +"@testing-library/jest-dom@^5.14.1": + version "5.16.2" + resolved "https://registry.yarnpkg.com/@testing-library/jest-dom/-/jest-dom-5.16.2.tgz#f329b36b44aa6149cd6ced9adf567f8b6aa1c959" + integrity sha512-6ewxs1MXWwsBFZXIk4nKKskWANelkdUehchEOokHsN8X7c2eKXGw+77aRV63UU8f/DTSVUPLaGxdrj4lN7D/ug== + dependencies: + "@babel/runtime" "^7.9.2" + "@types/testing-library__jest-dom" "^5.9.1" + aria-query "^5.0.0" + chalk "^3.0.0" + css "^3.0.0" + css.escape "^1.5.1" + dom-accessibility-api "^0.5.6" + lodash "^4.17.15" + redent "^3.0.0" + "@testing-library/react-hooks@^7.0.2": version "7.0.2" resolved "https://registry.yarnpkg.com/@testing-library/react-hooks/-/react-hooks-7.0.2.tgz#3388d07f562d91e7f2431a4a21b5186062ecfee0" @@ -3332,6 +3633,22 @@ "@types/react-test-renderer" ">=16.9.0" react-error-boundary "^3.1.0" +"@testing-library/react@^12.1.2": + version "12.1.3" + resolved "https://registry.yarnpkg.com/@testing-library/react/-/react-12.1.3.tgz#ef26c5f122661ea9b6f672b23dc6b328cadbbf26" + integrity sha512-oCULRXWRrBtC9m6G/WohPo1GLcLesH7T4fuKzRAKn1CWVu9BzXtqLXDDTA6KhFNNtRwLtfSMr20HFl+Qrdrvmg== + dependencies: + "@babel/runtime" "^7.12.5" + "@testing-library/dom" "^8.0.0" + "@types/react-dom" "*" + +"@testing-library/user-event@^13.5.0": + version "13.5.0" + resolved "https://registry.yarnpkg.com/@testing-library/user-event/-/user-event-13.5.0.tgz#69d77007f1e124d55314a2b73fd204b333b13295" + integrity sha512-5Kwtbo3Y/NowpkbRuSepbyMFkZmHgD+vPzYB/RJ4oxt5Gj/avFFBYjhw27cqSVPVw/3a67NK1PbiIr9k4Gwmdg== + dependencies: + "@babel/runtime" "^7.12.5" + "@tootallnate/once@1": version "1.1.2" resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-1.1.2.tgz#ccb91445360179a04e7fe6aff78c00ffc1eeaf82" @@ -3342,6 +3659,16 @@ resolved "https://registry.yarnpkg.com/@trysound/sax/-/sax-0.2.0.tgz#cccaab758af56761eb7bf37af6f03f326dd798ad" integrity sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA== +"@ts-morph/common@~0.12.3": + version "0.12.3" + resolved "https://registry.yarnpkg.com/@ts-morph/common/-/common-0.12.3.tgz#a96e250217cd30e480ab22ec6a0ebbe65fd784ff" + integrity sha512-4tUmeLyXJnJWvTFOKtcNJ1yh0a3SsTLi2MUoyj8iUNznFRN1ZquaNe7Oukqrnki2FzZkm0J9adCNLDZxUzvj+w== + dependencies: + fast-glob "^3.2.7" + minimatch "^3.0.4" + mkdirp "^1.0.4" + path-browserify "^1.0.1" + "@tsconfig/node10@^1.0.7": version "1.0.8" resolved "https://registry.yarnpkg.com/@tsconfig/node10/-/node10-1.0.8.tgz#c1e4e80d6f964fbecb3359c43bd48b40f7cadad9" @@ -3372,6 +3699,11 @@ resolved "https://registry.yarnpkg.com/@types/archy/-/archy-0.0.32.tgz#8b572741dad9172dfbf289397af1bb41296d3e40" integrity sha512-5ZZ5+YGmUE01yejiXsKnTcvhakMZ2UllZlMsQni53Doc1JWhe21ia8VntRoRD6fAEWw08JBh/z9qQHJ+//MrIg== +"@types/aria-query@^4.2.0": + version "4.2.2" + resolved "https://registry.yarnpkg.com/@types/aria-query/-/aria-query-4.2.2.tgz#ed4e0ad92306a704f9fb132a0cfcf77486dbe2bc" + integrity sha512-HnYpAE1Y6kRyKM/XkEuiRQhTHvkzMBurTHnpFLYLBGPIylZNPs9jJcuOOYWxPLJCSEtmZT0Y8rHDokKN7rRTig== + "@types/babel__core@^7.0.0", "@types/babel__core@^7.1.14", "@types/babel__core@^7.1.7": version "7.1.18" resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.1.18.tgz#1a29abcc411a9c05e2094c98f9a1b7da6cdf49f8" @@ -3462,7 +3794,7 @@ dependencies: "@types/node" "*" -"@types/glob@^7.2.0": +"@types/glob@*", "@types/glob@^7.2.0": version "7.2.0" resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.2.0.tgz#bc1b5bf3aa92f25bd5dd39f35c57361bdce5b2eb" integrity sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA== @@ -3504,6 +3836,14 @@ dependencies: "@types/istanbul-lib-report" "*" +"@types/jest@*": + version "27.4.1" + resolved "https://registry.yarnpkg.com/@types/jest/-/jest-27.4.1.tgz#185cbe2926eaaf9662d340cc02e548ce9e11ab6d" + integrity sha512-23iPJADSmicDVrWk+HT58LMJtzLAnB2AgIzplQuq/bSrGaxCrlvRFjGbXmamnnk/mAmCdLStiGqggu28ocUyiw== + dependencies: + jest-matcher-utils "^27.0.0" + pretty-format "^27.0.0" + "@types/jest@27.0.2": version "27.0.2" resolved "https://registry.yarnpkg.com/@types/jest/-/jest-27.0.2.tgz#ac383c4d4aaddd29bbf2b916d8d105c304a5fcd7" @@ -3562,6 +3902,11 @@ resolved "https://registry.yarnpkg.com/@types/node/-/node-14.18.11.tgz#9bd810a959e1728d78df0f68b5c825b8ea7156f4" integrity sha512-zCoCEMA+IPpsRkyCFBqew5vGb7r8RSiB3uwdu/map7uwLAfu1MTazW26/pUDWoNnF88vJz4W3U56i5gtXNqxGg== +"@types/node@^16.11.6": + version "16.11.26" + resolved "https://registry.yarnpkg.com/@types/node/-/node-16.11.26.tgz#63d204d136c9916fb4dcd1b50f9740fe86884e47" + integrity sha512-GZ7bu5A6+4DtG7q9GsoHXy3ALcgeIHP4NnL0Vv2wu0uUB/yQex26v0tf6/na1mm0+bS9Uw+0DFex7aaKr2qawQ== + "@types/node@^16.9.0": version "16.11.24" resolved "https://registry.yarnpkg.com/@types/node/-/node-16.11.24.tgz#9624338b685fea65fb1aba6c7b7eb45ca2df7188" @@ -3604,6 +3949,13 @@ resolved "https://registry.yarnpkg.com/@types/q/-/q-1.5.5.tgz#75a2a8e7d8ab4b230414505d92335d1dcb53a6df" integrity sha512-L28j2FcJfSZOnL1WBjDYp2vUHCeIFlyYI/53EwD/rKUBQ7MtUUfbQWiyKJGpcnv4/WgrhWsFKrcPstcAt/J0tQ== +"@types/react-dom@*", "@types/react-dom@^17.0.10": + version "17.0.13" + resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-17.0.13.tgz#a3323b974ee4280070982b3112351bb1952a7809" + integrity sha512-wEP+B8hzvy6ORDv1QBhcQia4j6ea4SFIBttHYpXKPFZRviBvknq0FRh3VrIxeXUmsPkwuXVZrVGG7KUVONmXCQ== + dependencies: + "@types/react" "*" + "@types/react-dom@>=16.9.0", "@types/react-dom@^17.0.8": version "17.0.11" resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-17.0.11.tgz#e1eadc3c5e86bdb5f7684e00274ae228e7bcc466" @@ -3618,7 +3970,7 @@ dependencies: "@types/react" "*" -"@types/react@*", "@types/react@>=16.9.0", "@types/react@^17.0.13", "@types/react@^17.0.39": +"@types/react@*", "@types/react@>=16.9.0", "@types/react@^17.0.13", "@types/react@^17.0.33", "@types/react@^17.0.39": version "17.0.39" resolved "https://registry.yarnpkg.com/@types/react/-/react-17.0.39.tgz#d0f4cde092502a6db00a1cded6e6bf2abb7633ce" integrity sha512-UVavlfAxDd/AgAacMa60Azl7ygyQNRwC/DsHZmKgNvPmRR5p70AJ5Q9EAmL2NWOJmeV+vVUI4IAP7GZrN8h8Ug== @@ -3634,6 +3986,14 @@ dependencies: "@types/node" "*" +"@types/rimraf@^3.0.2": + version "3.0.2" + resolved "https://registry.yarnpkg.com/@types/rimraf/-/rimraf-3.0.2.tgz#a63d175b331748e5220ad48c901d7bbf1f44eef8" + integrity sha512-F3OznnSLAUxFrCEu/L5PY8+ny8DtcFRjx7fZZ9bycvXRi3KPTRS9HOitGZwvPg0juRhXFWIeKX58cnX5YqLohQ== + dependencies: + "@types/glob" "*" + "@types/node" "*" + "@types/scheduler@*": version "0.16.2" resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.16.2.tgz#1a62f89525723dde24ba1b01b092bf5df8ad4d39" @@ -3661,6 +4021,13 @@ resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.1.tgz#20f18294f797f2209b5f65c8e3b5c8e8261d127c" integrity sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw== +"@types/testing-library__jest-dom@^5.14.1", "@types/testing-library__jest-dom@^5.9.1": + version "5.14.3" + resolved "https://registry.yarnpkg.com/@types/testing-library__jest-dom/-/testing-library__jest-dom-5.14.3.tgz#ee6c7ffe9f8595882ee7bda8af33ae7b8789ef17" + integrity sha512-oKZe+Mf4ioWlMuzVBaXQ9WDnEm1+umLx0InILg+yvZVBBDmzV5KfZyLrCvadtWcx8+916jLmHafcmqqffl+iIw== + dependencies: + "@types/jest" "*" + "@types/unist@*", "@types/unist@^2.0.0", "@types/unist@^2.0.2": version "2.0.6" resolved "https://registry.yarnpkg.com/@types/unist/-/unist-2.0.6.tgz#250a7b16c3b91f672a24552ec64678eeb1d3a08d" @@ -3871,6 +4238,82 @@ "@typescript-eslint/types" "5.12.1" eslint-visitor-keys "^3.0.0" +"@vanilla-extract/babel-plugin@^1.1.4": + version "1.1.4" + resolved "https://registry.yarnpkg.com/@vanilla-extract/babel-plugin/-/babel-plugin-1.1.4.tgz#4a37a6c6e6bd7f80e399f5771c5d51af0d8bd2c0" + integrity sha512-w1IDtUk91CTyeXCJi2bJdgXnZ4/D38KiyOoctTF7U7rHGoMH7gCIpsEeO400aUupPVlSL9a8pffCYuCkzzOZWA== + dependencies: + "@babel/core" "^7.13.10" + "@babel/template" "^7.12.13" + "@vanilla-extract/integration" "^2.0.1" + +"@vanilla-extract/css-utils@^0.1.2": + version "0.1.2" + resolved "https://registry.yarnpkg.com/@vanilla-extract/css-utils/-/css-utils-0.1.2.tgz#6bcd3e45f187d56c319ce9bc36ae1814b373c581" + integrity sha512-qoxIu5E/UhJtoKsPL1JaU9nhTN0Xl5zYV0pScOgsvc3JN46TvTTt0L3GV8x3PQpZP7x3elw8BsC9czYbhJy9Gg== + +"@vanilla-extract/css@^1.6.8": + version "1.6.8" + resolved "https://registry.yarnpkg.com/@vanilla-extract/css/-/css-1.6.8.tgz#21796c6e11d010a22422185bacf5b65cbd294da8" + integrity sha512-wkZay2jWe9a3Dt30j+WTJicK4+YV7i65lr+QnpkigVY9uU2KPzaiASEyUV8AouT2cZm7AOhteBBVKI8cYeWnVQ== + dependencies: + "@emotion/hash" "^0.8.0" + "@vanilla-extract/private" "^1.0.3" + chalk "^4.1.1" + css-what "^5.0.1" + cssesc "^3.0.0" + csstype "^3.0.7" + deep-object-diff "^1.1.0" + deepmerge "^4.2.2" + escape-string-regexp "^4.0.0" + outdent "^0.8.0" + +"@vanilla-extract/dynamic@^2.0.2": + version "2.0.2" + resolved "https://registry.yarnpkg.com/@vanilla-extract/dynamic/-/dynamic-2.0.2.tgz#13a3e461964c8029a52e6b6b631009ca6a8b27f5" + integrity sha512-U4nKaEQ8Kuz+exXEr51DUpyaOuzo24/S/k1YbDPQR06cYcNjQqvwFRnwWtZ+9ImocqM1wTKtzrdUgSTtLGIwAg== + dependencies: + "@vanilla-extract/private" "^1.0.3" + +"@vanilla-extract/integration@^2.0.1": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@vanilla-extract/integration/-/integration-2.0.1.tgz#042508b92388cb37cea17834eea1108abe4eca21" + integrity sha512-OT0WLxmfDengj63NJAnb3noJmy2Yg9W8FbvGjvGe7c8GMKKMuwRJdW1fV5MeL3tPvZwIeh3YQPsUwCD1mIWS+g== + dependencies: + "@vanilla-extract/css" "^1.6.8" + chalk "^4.1.1" + esbuild "^0.11.16" + eval "^0.1.6" + find-up "^5.0.0" + javascript-stringify "^2.0.1" + lodash "^4.17.21" + outdent "^0.8.0" + +"@vanilla-extract/private@^1.0.3": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@vanilla-extract/private/-/private-1.0.3.tgz#7ec72bc2ff6fe51f9d650f962e8d1989b073690f" + integrity sha512-17kVyLq3ePTKOkveHxXuIJZtGYs+cSoev7BlP+Lf4916qfDhk/HBjvlYDe8egrea7LNPHKwSZJK/bzZC+Q6AwQ== + +"@vanilla-extract/recipes@^0.2.3": + version "0.2.3" + resolved "https://registry.yarnpkg.com/@vanilla-extract/recipes/-/recipes-0.2.3.tgz#cb6390efeb273ce5ac76d944fd65e550bd930654" + integrity sha512-RKCfW2nczXmHLSR8TJcLUOvfE941rJl397GdbJiIBU3DqTSJuqDDOr3bKFiLP28BohLHs3Hz8BAzjYldKqGhXg== + +"@vanilla-extract/sprinkles@^1.3.3": + version "1.4.0" + resolved "https://registry.yarnpkg.com/@vanilla-extract/sprinkles/-/sprinkles-1.4.0.tgz#acad9c9470a41b8350ae97efc02bb33e52553bcf" + integrity sha512-q9Tu5bHkN/fT0IFkBDEsNeTKN/8CFYkgGVDw0iZ+wM/n9IKhWrKLnOjDk1v9NpCXD3rUQqDipl0pdGCEcBe4RQ== + +"@vanilla-extract/vite-plugin@^3.1.2": + version "3.1.2" + resolved "https://registry.yarnpkg.com/@vanilla-extract/vite-plugin/-/vite-plugin-3.1.2.tgz#bda4d322da521be54418267ef7e8003580a823ed" + integrity sha512-WFcPFGo6KjgksgT7n39F4SPCg9JR99a24xe+m22d7NrvJ7OIKNeMIUOgDuVBsCUMtgKUnqjZ/WIa4kbh4jZQcw== + dependencies: + "@vanilla-extract/integration" "^2.0.1" + outdent "^0.8.0" + postcss "^8.3.6" + postcss-load-config "^3.1.0" + "@walletconnect/browser-utils@^1.7.1": version "1.7.1" resolved "https://registry.yarnpkg.com/@walletconnect/browser-utils/-/browser-utils-1.7.1.tgz#2a28846cd4d73166debbbf7d470e78ba25616f5e" @@ -4512,7 +4955,7 @@ ansi-escapes@^3.0.0: resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.2.0.tgz#8780b98ff9dbf5638152d1f1fe5c1d7b4442976b" integrity sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ== -ansi-escapes@^4.2.1: +ansi-escapes@^4.2.1, ansi-escapes@^4.3.1: version "4.3.2" resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== @@ -4539,6 +4982,11 @@ ansi-regex@^5.0.0, ansi-regex@^5.0.1: resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== +ansi-regex@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.0.1.tgz#3183e38fae9a65d7cb5e53945cd5897d0260a06a" + integrity sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA== + ansi-styles@^3.2.0, ansi-styles@^3.2.1: version "3.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" @@ -4622,6 +5070,11 @@ aria-query@^4.2.2: "@babel/runtime" "^7.10.2" "@babel/runtime-corejs3" "^7.10.2" +aria-query@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-5.0.0.tgz#210c21aaf469613ee8c9a62c7f86525e058db52c" + integrity sha512-V+SM7AbUwJ+EBnB8+DXs0hPZHO0W6pqBcc0dW90OwtVG02PswOu/teuARoLQjdDOH+t9pJgGnW5/Qmouf3gPJg== + arr-diff@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" @@ -5271,7 +5724,7 @@ browserslist@^4.0.0, browserslist@^4.16.6, browserslist@^4.17.5, browserslist@^4 node-releases "^2.0.1" picocolors "^1.0.0" -browserslist@^4.14.5: +browserslist@^4.14.5, browserslist@^4.6.0: version "4.19.3" resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.19.3.tgz#29b7caad327ecf2859485f696f9604214bedd383" integrity sha512-XK3X4xtKJ+Txj8G5c30B4gsm71s69lqXlkYui4s6EkKxuv49qjYlY6oVd+IFJ73d4YymtM3+djvvt/R/iJwwDg== @@ -5577,7 +6030,7 @@ chalk@^3.0.0: ansi-styles "^4.1.0" supports-color "^7.1.0" -chalk@^4.0.0, chalk@^4.1.0: +chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.1: version "4.1.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== @@ -5608,6 +6061,11 @@ char-regex@^1.0.2: resolved "https://registry.yarnpkg.com/char-regex/-/char-regex-1.0.2.tgz#d744358226217f981ed58f479b1d6bcc29545dcf" integrity sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw== +char-regex@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/char-regex/-/char-regex-2.0.1.tgz#6dafdb25f9d3349914079f010ba8d0e6ff9cd01e" + integrity sha512-oSvEeo6ZUD7NepqAat3RqoucZ5SeqLJgOvVIwkafu6IP3V0pO38s/ypdVUmDDK6qIIHNlYHJAKX9E7R7HoKElw== + character-entities-html4@^1.0.0: version "1.1.4" resolved "https://registry.yarnpkg.com/character-entities-html4/-/character-entities-html4-1.1.4.tgz#0e64b0a3753ddbf1fdc044c5fd01d0199a02e125" @@ -5812,7 +6270,7 @@ clone@^2.1.1: resolved "https://registry.yarnpkg.com/clone/-/clone-2.1.2.tgz#1b7f4b9f591f1e8f83670401600345a02887435f" integrity sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18= -clsx@^1.1.0: +clsx@^1.1.0, clsx@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/clsx/-/clsx-1.1.1.tgz#98b3134f9abbdf23b2663491ace13c5c03a73188" integrity sha512-6/bPho624p3S2pMyvP5kKBPXnI3ufHLObBFCfgx+LkeR5lg2XYy2hqZqUf45ypD8COn2bhgGJSUE+l5dhNBieA== @@ -5838,6 +6296,13 @@ coa@^2.0.2: chalk "^2.4.1" q "^1.1.2" +code-block-writer@^11.0.0: + version "11.0.0" + resolved "https://registry.yarnpkg.com/code-block-writer/-/code-block-writer-11.0.0.tgz#5956fb186617f6740e2c3257757fea79315dd7d4" + integrity sha512-GEqWvEWWsOvER+g9keO4ohFoD3ymwyCnqY3hoTr7GZipYFwEhMHJw+TtV0rfgRhNImM6QWZGO2XYjlJVyYT62w== + dependencies: + tslib "2.3.1" + code-point-at@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" @@ -6092,7 +6557,7 @@ conventional-recommended-bump@^6.1.0: meow "^8.0.0" q "^1.5.1" -convert-source-map@^1.4.0, convert-source-map@^1.6.0, convert-source-map@^1.7.0: +convert-source-map@^1.1.0, convert-source-map@^1.4.0, convert-source-map@^1.6.0, convert-source-map@^1.7.0: version "1.8.0" resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.8.0.tgz#f3373c32d21b4d780dd8004514684fb791ca4369" integrity sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA== @@ -6128,6 +6593,14 @@ copy-to-clipboard@^3.3.1: dependencies: toggle-selection "^1.0.6" +core-js-compat@^3.1.1: + version "3.21.1" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.21.1.tgz#cac369f67c8d134ff8f9bd1623e3bc2c42068c82" + integrity sha512-gbgX5AUvMb8gwxC7FLVWYT7Kkgu/y7+h/h1X43yJkNqhlK2fuYyQimqvKGNZFAY6CKii/GFKJ2cp/1/42TN36g== + dependencies: + browserslist "^4.19.1" + semver "7.0.0" + core-js-compat@^3.20.2, core-js-compat@^3.21.0: version "3.21.0" resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.21.0.tgz#bcc86aa5a589cee358e7a7fa0a4979d5a76c3885" @@ -6141,6 +6614,11 @@ core-js-pure@^3.20.2: resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.21.0.tgz#819adc8dfb808205ce25b51d50591becd615db7e" integrity sha512-VaJUunCZLnxuDbo1rNOzwbet9E1K9joiXS5+DQMPtgxd24wfsZbJZMMfQLGYMlCUvSxLfsRUUhoOR2x28mFfeg== +core-js@^3.0.0: + version "3.21.1" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.21.1.tgz#f2e0ddc1fc43da6f904706e8e955bc19d06a0d94" + integrity sha512-FRq5b/VMrWlrmCzwRrpDYNxyHP9BcAZC+xHJaqTgIE5091ZV1NTmyh0sGOg5XqpnHvR0svdy0sv1gWA1zmhxig== + core-util-is@1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" @@ -6376,11 +6854,25 @@ css-what@^3.2.1: resolved "https://registry.yarnpkg.com/css-what/-/css-what-3.4.2.tgz#ea7026fcb01777edbde52124e21f327e7ae950e4" integrity sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ== -css-what@^5.1.0: +css-what@^5.0.1, css-what@^5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/css-what/-/css-what-5.1.0.tgz#3f7b707aadf633baf62c2ceb8579b545bb40f7fe" integrity sha512-arSMRWIIFY0hV8pIxZMEfmMI47Wj3R/aWpZDDxWYCPEiOMv6tfOrnpDtgxBYPEQD4V0Y/958+1TdC3iWTFcUPw== +css.escape@^1.5.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/css.escape/-/css.escape-1.5.1.tgz#42e27d4fa04ae32f931a4b4d4191fa9cddee97cb" + integrity sha1-QuJ9T6BK4y+TGktNQZH6nN3ul8s= + +css@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/css/-/css-3.0.0.tgz#4447a4d58fdd03367c516ca9f64ae365cee4aa5d" + integrity sha512-DG9pFfwOrzc+hawpmqX/dHYHJG+Bsdb0klhyi1sDneOgGOXy9wQIC8hzyVp1e4NRYDBdxcylvywPkkXCHAzTyQ== + dependencies: + inherits "^2.0.4" + source-map "^0.6.1" + source-map-resolve "^0.6.0" + cssesc@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" @@ -6464,6 +6956,11 @@ csstype@^3.0.2: resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.0.10.tgz#2ad3a7bed70f35b965707c092e5f30b327c290e5" integrity sha512-2u44ZG2OcNUO9HDp/Jl8C07x6pU/eTR3ncV91SiK3dhG9TWvRVsCoJw14Ckx5DgWkzGA3waZWO3d7pgqpUI/XA== +csstype@^3.0.7: + version "3.0.11" + resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.0.11.tgz#d66700c5eacfac1940deb4e3ee5642792d85cd33" + integrity sha512-sa6P2wJ+CAbgyy4KFssIb/JNMLxFvKF1pCYCSXS8ZMuqZnMsrxqI2E5sPyoTpxoPU/gVZMzr2zjOfg8GIZOMsw== + cycle@1.0.x: version "1.0.3" resolved "https://registry.yarnpkg.com/cycle/-/cycle-1.0.3.tgz#21e80b2be8580f98b468f379430662b046c34ad2" @@ -6593,6 +7090,11 @@ deep-is@^0.1.3, deep-is@~0.1.3: resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== +deep-object-diff@^1.1.0: + version "1.1.7" + resolved "https://registry.yarnpkg.com/deep-object-diff/-/deep-object-diff-1.1.7.tgz#348b3246f426427dd633eaa50e1ed1fc2eafc7e4" + integrity sha512-QkgBca0mL08P6HiOjoqvmm6xOAl2W6CT2+34Ljhg0OeFan8cwlcdq8jrLKsBBuUFAZLsN5b6y491KdKEoSo9lg== + deepmerge@^4.2.2: version "4.2.2" resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.2.2.tgz#44d2ea3679b8f4d4ffba33f03d865fc1e7bf4955" @@ -6755,6 +7257,11 @@ doctrine@^3.0.0: dependencies: esutils "^2.0.2" +dom-accessibility-api@^0.5.6, dom-accessibility-api@^0.5.9: + version "0.5.13" + resolved "https://registry.yarnpkg.com/dom-accessibility-api/-/dom-accessibility-api-0.5.13.tgz#102ee5f25eacce09bdf1cfa5a298f86da473be4b" + integrity sha512-R305kwb5CcMDIpSHUnLyIAp7SrSPBx6F0VfQFB3M75xVMHhXJJIdePYgbPPh1o57vCHNu5QztokWUPsLjWzFqw== + dom-serializer@0: version "0.2.2" resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.2.2.tgz#1afb81f533717175d478655debc5e332d9f9bb51" @@ -6973,6 +7480,11 @@ entities@^2.0.0: resolved "https://registry.yarnpkg.com/entities/-/entities-2.2.0.tgz#098dc90ebb83d8dffa089d55256b351d34c4da55" integrity sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A== +entities@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/entities/-/entities-3.0.1.tgz#2b887ca62585e96db3903482d336c1006c3001d4" + integrity sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q== + env-paths@^2.2.0: version "2.2.1" resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.1.tgz#420399d416ce1fbe9bc0a07c62fa68d67fd0f8f2" @@ -7068,6 +7580,137 @@ es6-symbol@^3.1.1, es6-symbol@~3.1.3: d "^1.0.1" ext "^1.1.2" +esbuild-android-64@0.14.24: + version "0.14.24" + resolved "https://registry.yarnpkg.com/esbuild-android-64/-/esbuild-android-64-0.14.24.tgz#d826ac29a9b983dc200a0ca407c34c64d2480b38" + integrity sha512-mbhO8NepmUZ84cP/axGR8IzH1Trth+uknEJzz36cZl8FfMA3ooaiBsMyzJ35s70QEAreiEt1XzltZ4pcfOsVUA== + +esbuild-android-arm64@0.14.24: + version "0.14.24" + resolved "https://registry.yarnpkg.com/esbuild-android-arm64/-/esbuild-android-arm64-0.14.24.tgz#f8aaf28dbd4d7b80d30b0323c7a645e3a12b5de9" + integrity sha512-wM3iuLZjaA9BhlMOH6mWvTGXwPJsLOuAbMkGiczSY+NLeG2WF1ouCcuhFz2jZCbnw9lnI30QWgzebNBQi9K8SA== + +esbuild-darwin-64@0.14.24: + version "0.14.24" + resolved "https://registry.yarnpkg.com/esbuild-darwin-64/-/esbuild-darwin-64-0.14.24.tgz#9f6e4b94066e9c5e521b19176a85edd7f94ac074" + integrity sha512-GDaCV5e9mdrJkrGT91W8WCqQ/+fvB/nsULIu4l7Ik7dlQd5uB4qeKRcFFl5Vz5ODK/C/UWZmKmMQWokZsLNWLQ== + +esbuild-darwin-arm64@0.14.24: + version "0.14.24" + resolved "https://registry.yarnpkg.com/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.24.tgz#6b8ce7f2a3e1210cc672c73d658669e5f88b8efb" + integrity sha512-reU7/vEdXsg+zZWxKL/gaHsJkGMCC49Y4pqbsaBmx0YAF00K0+V7w5BHBF+iY5jvtJ1ZCYRHTN/iAbYVOnoV0w== + +esbuild-freebsd-64@0.14.24: + version "0.14.24" + resolved "https://registry.yarnpkg.com/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.24.tgz#b586d8aa290bfcdf0aa73fdfcf64c092d49795f2" + integrity sha512-Mp35Rz/XoixG7Uka6l54hU/XUxAEwQozgKoHPusJzX+Fu1vANil0Ypos0RJkidu7skSkd0xisNIT+gtD36BxpA== + +esbuild-freebsd-arm64@0.14.24: + version "0.14.24" + resolved "https://registry.yarnpkg.com/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.24.tgz#4e7098de07791089b6ef6b4f17a8ce6124da7bec" + integrity sha512-+tf4a4zYaHP1XXPt286mxOc2bmj13K57GZYjqYz/G3c3sgNXa0JBkcPlUATIj96WfXhWM115n3nHe9wF88+ZGQ== + +esbuild-linux-32@0.14.24: + version "0.14.24" + resolved "https://registry.yarnpkg.com/esbuild-linux-32/-/esbuild-linux-32-0.14.24.tgz#afe7345f3e8ee58eede36c0254e128924680b305" + integrity sha512-8jMZErn5aLnlSQqzK365yoWRr67ZkGNcoTmk1CK5Bk1EB9g7uwCfdZsmWcclLWPGkIhMbdk4OvzQ+Wp0popwWA== + +esbuild-linux-64@0.14.24: + version "0.14.24" + resolved "https://registry.yarnpkg.com/esbuild-linux-64/-/esbuild-linux-64-0.14.24.tgz#ce7b95e8ed96076dcb329d1d34e4b9ef084e02cf" + integrity sha512-D/JCsk9OY2IZj+fkU74pKD4rD2pjeiYUbze1cS5D6+U0pz8j71GjZY5UkfwHhBBbNyPe6DPCyex97txQUlHwWw== + +esbuild-linux-arm64@0.14.24: + version "0.14.24" + resolved "https://registry.yarnpkg.com/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.24.tgz#f8aee4eb78309fd3c064e86393a698e33908e8ec" + integrity sha512-DypWEDQLE+PoHGMa4FLcmKvS+yQLsYlsN03R496rTpDOiVQGrRdo0LbYtf+uHpDxa1KRrHZsQim6n8m3VBHP6g== + +esbuild-linux-arm@0.14.24: + version "0.14.24" + resolved "https://registry.yarnpkg.com/esbuild-linux-arm/-/esbuild-linux-arm-0.14.24.tgz#eaccc0a4d7d17e7290e5b20c383e6969c6769bf7" + integrity sha512-N+vvGpJAUWv3j+YZGOMEtrHwrrSG582TuAThBwoRE7d2N4zFE2WQBCiSYaAVckMQhvMOPqnCdqeTDUse5nlKTw== + +esbuild-linux-mips64le@0.14.24: + version "0.14.24" + resolved "https://registry.yarnpkg.com/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.24.tgz#9db94b62bbcbaad6229087ea27a6d7dc3fc878d6" + integrity sha512-eMk9pEHba1yd5bOuPZUJfFucigvysdcE2d/wV4M0eUdb/VjyH9fcGqz8byvSjmYSOt3WCn/V4jLVI+pwDSHWYw== + +esbuild-linux-ppc64le@0.14.24: + version "0.14.24" + resolved "https://registry.yarnpkg.com/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.24.tgz#194d59a5ebfcdbfc7e710d13893e6c62216baa77" + integrity sha512-4vQ/Y6EV5Z2BjO7RdpEyTCv702WmOPc95d2CbUcFvg78FpGQAmrbIrHXu/yX4+rdUU6vMNBn3M+7M7/lxmxjjg== + +esbuild-linux-riscv64@0.14.24: + version "0.14.24" + resolved "https://registry.yarnpkg.com/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.24.tgz#0d8cbbcd2f3b7cc4365ebc8fac8d00fdc95691d2" + integrity sha512-pAN9/+NZ487Wo9PmlOM6Ra95SrhG8JQw7fCgi3z7dUufwTApTNTPGs5UOMD4Bmorju+DeGb0f0GddLaeabvqDg== + +esbuild-linux-s390x@0.14.24: + version "0.14.24" + resolved "https://registry.yarnpkg.com/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.24.tgz#460e726f5d827f1171f9eac8c9bbcad8e6574ec5" + integrity sha512-ZR+VMHP2WS3022x2sK/85cBfKGgPalIZzpquDWjra9nUb+WdEzuK9i9bRsstLmjIPs3uIkGfe6xXUh/7PNLllw== + +esbuild-netbsd-64@0.14.24: + version "0.14.24" + resolved "https://registry.yarnpkg.com/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.24.tgz#8f6f4c68b8e84e1e011330096f118013cc275601" + integrity sha512-1PzXU++e0PEaSuGpkhrVb+fDUw9mSp4laY9KRsjJkAuXPDj0rHz7KxK7CAbzY/ucufeIR9Ca8/oMpdVyWdaOGw== + +esbuild-openbsd-64@0.14.24: + version "0.14.24" + resolved "https://registry.yarnpkg.com/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.24.tgz#6fbfc089103d154d74d4ea5a3aefc2844189094a" + integrity sha512-PvXh7JJAFM1kR87XDWbRrUkaOGVMS6Dq/IRXE2E02maio21JELk/jNRijTe81ztr8v+8K9osB3rG9zKqIdTxhQ== + +esbuild-sunos-64@0.14.24: + version "0.14.24" + resolved "https://registry.yarnpkg.com/esbuild-sunos-64/-/esbuild-sunos-64-0.14.24.tgz#09931dbbc610f88feda1c071f2844e7d8867f46e" + integrity sha512-5iYi76kGQdyCqvSUknqjTZ0T19KvQD6hiklPAY6kVoQ1YoDUGCGILRI9eM/3zLNLG1bUFgcdJ2ktaBxwyXuHyA== + +esbuild-windows-32@0.14.24: + version "0.14.24" + resolved "https://registry.yarnpkg.com/esbuild-windows-32/-/esbuild-windows-32-0.14.24.tgz#3c8dddffaec6dce9a3ac8ef2bec939ec5af17e68" + integrity sha512-oDxcNu4P1FWTk2ompKB0uKHfxYw1QuubH189+PlfrrWT9tVu+mxT9dSwJu2erfUDz5dnr6h8rgkg95NGboeJxg== + +esbuild-windows-64@0.14.24: + version "0.14.24" + resolved "https://registry.yarnpkg.com/esbuild-windows-64/-/esbuild-windows-64-0.14.24.tgz#e97081ee16d51c5a210cd1de15454689ac09fc8b" + integrity sha512-0uxXF1yLcGEM2es0OMDgQYQGZXQEEIdq8cG3IWhY2GGfFRLXpMgic1iUE+SKCh+b82t1ftUVoyG0zIFRn5NOIA== + +esbuild-windows-arm64@0.14.24: + version "0.14.24" + resolved "https://registry.yarnpkg.com/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.24.tgz#0fcff2b58c772874f8dc52638557f817609ed699" + integrity sha512-unwaYRaIK/4OaZm0jnM3pLKMPEjaQqmT5teTciSZ86VYaiYZF27Ki7BW7R5ngk27gIw0ovIfUcn9DhJgp7qAlw== + +esbuild@^0.11.16: + version "0.11.23" + resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.11.23.tgz#c42534f632e165120671d64db67883634333b4b8" + integrity sha512-iaiZZ9vUF5wJV8ob1tl+5aJTrwDczlvGP0JoMmnpC2B0ppiMCu8n8gmy5ZTGl5bcG081XBVn+U+jP+mPFm5T5Q== + +esbuild@^0.14.14: + version "0.14.24" + resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.14.24.tgz#543899cf9ff0ebe206dc3de2ac18b9122d9f5697" + integrity sha512-NjfmycVQqY0+iKXoHXsvMAKx4XF/bD/dDm8pK6C/3aJO/i/uby+7AR4z8vu0qkiihkB5Y43+9BjdY2MGnswC/A== + optionalDependencies: + esbuild-android-64 "0.14.24" + esbuild-android-arm64 "0.14.24" + esbuild-darwin-64 "0.14.24" + esbuild-darwin-arm64 "0.14.24" + esbuild-freebsd-64 "0.14.24" + esbuild-freebsd-arm64 "0.14.24" + esbuild-linux-32 "0.14.24" + esbuild-linux-64 "0.14.24" + esbuild-linux-arm "0.14.24" + esbuild-linux-arm64 "0.14.24" + esbuild-linux-mips64le "0.14.24" + esbuild-linux-ppc64le "0.14.24" + esbuild-linux-riscv64 "0.14.24" + esbuild-linux-s390x "0.14.24" + esbuild-netbsd-64 "0.14.24" + esbuild-openbsd-64 "0.14.24" + esbuild-sunos-64 "0.14.24" + esbuild-windows-32 "0.14.24" + esbuild-windows-64 "0.14.24" + esbuild-windows-arm64 "0.14.24" + escalade@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" @@ -7773,6 +8416,13 @@ ethjs-util@0.1.6, ethjs-util@^0.1.3: is-hex-prefixed "1.0.0" strip-hex-prefix "1.0.0" +eval@^0.1.6: + version "0.1.6" + resolved "https://registry.yarnpkg.com/eval/-/eval-0.1.6.tgz#9620d7d8c85515e97e6b47c5814f46ae381cb3cc" + integrity sha512-o0XUw+5OGkXw4pJZzQoXUk+H87DHuC+7ZE//oSrRGtatTmr12oTnLfg6QOq9DyTt0c/p4TwzgmkKrBzWTSizyQ== + dependencies: + require-like ">= 0.1.1" + eventemitter3@4.0.4: version "4.0.4" resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.4.tgz#b5463ace635a083d018bdc7c917b4c5f10a85384" @@ -7991,7 +8641,7 @@ fast-diff@^1.1.2: resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.2.0.tgz#73ee11982d86caaf7959828d519cfe927fac5f03" integrity sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w== -fast-glob@^3.2.9: +fast-glob@^3.2.7, fast-glob@^3.2.9: version "3.2.11" resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.11.tgz#a1172ad95ceb8a16e20caa5c5e56480e5129c1d9" integrity sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew== @@ -8099,7 +8749,7 @@ filter-obj@^1.1.0: resolved "https://registry.yarnpkg.com/filter-obj/-/filter-obj-1.1.0.tgz#9b311112bc6c6127a16e016c6c5d7f19e0805c5b" integrity sha1-mzERErxsYSehbgFsbF1/GeCAXFs= -find-cache-dir@^2.1.0: +find-cache-dir@^2.0.0, find-cache-dir@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-2.1.0.tgz#8d0f94cd13fe43c6c7c261a0d86115ca918c05f7" integrity sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ== @@ -8187,6 +8837,11 @@ flush-write-stream@^1.0.0: inherits "^2.0.3" readable-stream "^2.3.6" +focus-visible@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/focus-visible/-/focus-visible-5.2.0.tgz#3a9e41fccf587bd25dcc2ef045508284f0a4d6b3" + integrity sha512-Rwix9pBtC1Nuy5wysTmKy+UjbDJpIfg8eHjw0rjZ1mX4GNLz1Bmd16uDpI3Gk1i70Fgcs8Csg2lPm8HULFg9DQ== + follow-redirects@^1.14.0: version "1.14.8" resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.14.8.tgz#016996fb9a11a100566398b1c6839337d7bfa8fc" @@ -8254,7 +8909,7 @@ fs-extra@8.1.0: jsonfile "^4.0.0" universalify "^0.1.0" -fs-extra@^10.0.1: +fs-extra@^10.0.0, fs-extra@^10.0.1: version "10.0.1" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-10.0.1.tgz#27de43b4320e833f6867cc044bfce29fdf0ef3b8" integrity sha512-NbdoVMZso2Lsrn/QwLXOy6rm0ufY2zEOKCDzJR/0kBsb0E6qed0P3iYK+Ath3BfvXEeu4JhEtXLgILx5psUfag== @@ -8493,6 +9148,11 @@ glob-parent@^6.0.1: dependencies: is-glob "^4.0.3" +glob-regex@^0.3.0: + version "0.3.2" + resolved "https://registry.yarnpkg.com/glob-regex/-/glob-regex-0.3.2.tgz#27348f2f60648ec32a4a53137090b9fb934f3425" + integrity sha512-m5blUd3/OqDTWwzBBtWBPrGlAzatRywHameHeekAZyZrskYouOGdNB8T/q6JucucvJXtOuyHIn0/Yia7iDasDw== + glob-to-regexp@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz#c75297087c851b9a578bd217dd59a92f59fe546e" @@ -8989,6 +9649,13 @@ interpret@^1.0.0: resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.4.0.tgz#665ab8bc4da27a774a40584e812e3e0fa45b1a1e" integrity sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA== +invariant@^2.2.2: + version "2.2.4" + resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" + integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA== + dependencies: + loose-envify "^1.0.0" + ip-regex@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-2.1.0.tgz#fa78bf5d2e6913c911ce9f819ee5146bb6d844e9" @@ -9489,6 +10156,11 @@ istanbul-reports@^3.0.2, istanbul-reports@^3.1.3: html-escaper "^2.0.0" istanbul-lib-report "^3.0.0" +javascript-stringify@^2.0.1: + version "2.1.0" + resolved "https://registry.yarnpkg.com/javascript-stringify/-/javascript-stringify-2.1.0.tgz#27c76539be14d8bd128219a2d731b09337904e79" + integrity sha512-JVAfqNPTvNq3sB/VHQJAFxN/sPgKnsKrCwyRt15zwNCdrMMJDdcEOdubuy+DuJYYdm0ox1J4uzEuYKkN+9yhVg== + jest-changed-files@^25.5.0: version "25.5.0" resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-25.5.0.tgz#141cc23567ceb3f534526f8614ba39421383634c" @@ -9552,7 +10224,7 @@ jest-cli@^25.5.4: realpath-native "^2.0.0" yargs "^15.3.1" -jest-cli@^27.2.4: +jest-cli@^27.2.4, jest-cli@^27.5.1: version "27.5.1" resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-27.5.1.tgz#278794a6e6458ea8029547e6c6cbf673bd30b145" integrity sha512-Hc6HOOwYq4/74/c62dEE3r5elx8wjYqxY0r0G/nFrLDPMFRu6RA/u8qINOIkvhxG7mMQ5EJsOGfRpI8L6eFUVw== @@ -9852,7 +10524,7 @@ jest-matcher-utils@^25.5.0: jest-get-type "^25.2.6" pretty-format "^25.5.0" -jest-matcher-utils@^27.5.1: +jest-matcher-utils@^27.0.0, jest-matcher-utils@^27.5.1: version "27.5.1" resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-27.5.1.tgz#9c0cdbda8245bc22d2331729d1091308b40cf8ab" integrity sha512-z2uTx/T6LBaCoNWNFWwChLBKYxTMcGBRjAt+2SbP929/Fflb9aa5LGma654Rz8z9HLxsrUaYzxE9T/EFIL/PAw== @@ -9916,7 +10588,7 @@ jest-regex-util@^25.2.1, jest-regex-util@^25.2.6: resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-25.2.6.tgz#d847d38ba15d2118d3b06390056028d0f2fd3964" integrity sha512-KQqf7a0NrtCkYmZZzodPftn7fL1cq3GQAFVMn5Hg8uKx/fIenLEobNanUxb7abQ1sjADHBseG/2FGpsv/wr+Qw== -jest-regex-util@^27.5.1: +jest-regex-util@^27.0.0, jest-regex-util@^27.5.1: version "27.5.1" resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-27.5.1.tgz#4da143f7e9fd1e542d4aa69617b38e4a78365b95" integrity sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg== @@ -10206,6 +10878,19 @@ jest-watch-typeahead@^0.5.0: string-length "^3.1.0" strip-ansi "^6.0.0" +jest-watch-typeahead@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/jest-watch-typeahead/-/jest-watch-typeahead-1.0.0.tgz#4de2ca1eb596acb1889752afbab84b74fcd99173" + integrity sha512-jxoszalAb394WElmiJTFBMzie/RDCF+W7Q29n5LzOPtcoQoHWfdUtHFkbhgf5NwWe8uMOxvKb/g7ea7CshfkTw== + dependencies: + ansi-escapes "^4.3.1" + chalk "^4.0.0" + jest-regex-util "^27.0.0" + jest-watcher "^27.0.0" + slash "^4.0.0" + string-length "^5.0.1" + strip-ansi "^7.0.1" + jest-watcher@^25.2.4, jest-watcher@^25.5.0: version "25.5.0" resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-25.5.0.tgz#d6110d101df98badebe435003956fd4a465e8456" @@ -10218,7 +10903,7 @@ jest-watcher@^25.2.4, jest-watcher@^25.5.0: jest-util "^25.5.0" string-length "^3.1.0" -jest-watcher@^27.5.1: +jest-watcher@^27.0.0, jest-watcher@^27.5.1: version "27.5.1" resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-27.5.1.tgz#71bd85fb9bde3a2c2ec4dc353437971c43c642a2" integrity sha512-z676SuD6Z8o8qbmEGhoEUFOM1+jfEiL3DXHK/xgEiG2EyNYfFG60jluWcupY6dATjfEsKQuibReS1djInQnoVw== @@ -10274,6 +10959,15 @@ jest@^25.3.0: import-local "^3.0.2" jest-cli "^25.5.4" +jest@^27.3.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest/-/jest-27.5.1.tgz#dadf33ba70a779be7a6fc33015843b51494f63fc" + integrity sha512-Yn0mADZB89zTtjkPJEXwrac3LHudkQMR+Paqa8uxJHCBr9agxztUifWCyiYrjhMPBoUVBjyny0I7XH6ozDr7QQ== + dependencies: + "@jest/core" "^27.5.1" + import-local "^3.0.2" + jest-cli "^27.5.1" + jora@^1.0.0-beta.5: version "1.0.0-beta.5" resolved "https://registry.yarnpkg.com/jora/-/jora-1.0.0-beta.5.tgz#55b2c4d86078af1bc74da401e88b67be42b0bddd" @@ -10284,6 +10978,11 @@ jpjs@^1.2.1: resolved "https://registry.yarnpkg.com/jpjs/-/jpjs-1.2.1.tgz#f343833de8838a5beba1f42d5a219be0114c44b7" integrity sha512-GxJWybWU4NV0RNKi6EIqk6IRPOTqd/h+U7sbtyuD7yUISUzV78LdHnq2xkevJsTlz/EImux4sWj+wfMiwKLkiw== +js-levenshtein@^1.1.3: + version "1.1.6" + resolved "https://registry.yarnpkg.com/js-levenshtein/-/js-levenshtein-1.1.6.tgz#c6cee58eb3550372df8deb85fad5ce66ce01d59d" + integrity sha512-X2BB11YZtrRqY4EnQcLX5Rh373zbK4alC1FW7D7MBhL2gtcC17cTnr6DmfHZeS0s2rTHjUTMMHfG7gO8SSdw+g== + js-sha256@0.9.0: version "0.9.0" resolved "https://registry.yarnpkg.com/js-sha256/-/js-sha256-0.9.0.tgz#0b89ac166583e91ef9123644bd3c5334ce9d0966" @@ -10457,7 +11156,7 @@ json-stringify-safe@^5.0.1, json-stringify-safe@~5.0.1: resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= -json5@2.x, json5@^2.1.2: +json5@2.x, json5@^2.1.0, json5@^2.1.2: version "2.2.0" resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.0.tgz#2dfefe720c6ba525d9ebd909950f0515316c89a3" integrity sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA== @@ -10651,7 +11350,7 @@ lie@3.1.1: dependencies: immediate "~3.0.5" -lilconfig@^2.0.3: +lilconfig@^2.0.3, lilconfig@^2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-2.0.4.tgz#f4507d043d7058b380b6a8f5cb7bcd4b34cee082" integrity sha512-bfTIN7lEsiooCocSISTWXkiWJkRqtL9wYtYy+8EK3Y41qh3mpwPU0ycTOgjdY9ErwXCc8QyrQp82bdL0Xkm9yA== @@ -10796,7 +11495,7 @@ lodash.uniq@^4.5.0: resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" integrity sha1-0CJTc662Uq3BvILklFM5qEJ1R3M= -lodash@^4.17.11, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.20, lodash@^4.17.5, lodash@^4.7.0: +lodash@^4.17.11, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.20, lodash@^4.17.21, lodash@^4.17.5, lodash@^4.7.0: version "4.17.21" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== @@ -10829,7 +11528,7 @@ longest-streak@^2.0.1: resolved "https://registry.yarnpkg.com/longest-streak/-/longest-streak-2.0.4.tgz#b8599957da5b5dab64dee3fe316fa774597d90e4" integrity sha512-vM6rUVCVUJJt33bnmHiZEvr7wPT78ztX7rojL+LW51bHtLh6HTjx84LA5W4+oa6aKEJA7jJu5LR6vQRBpA5DVg== -loose-envify@^1.1.0, loose-envify@^1.4.0: +loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== @@ -10862,6 +11561,11 @@ lunr@^2.3.9: resolved "https://registry.yarnpkg.com/lunr/-/lunr-2.3.9.tgz#18b123142832337dd6e964df1a5a7707b25d35e1" integrity sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow== +lz-string@^1.4.4: + version "1.4.4" + resolved "https://registry.yarnpkg.com/lz-string/-/lz-string-1.4.4.tgz#c0d8eaf36059f705796e1e344811cf4c498d3a26" + integrity sha1-wNjq82BZ9wV5bh40SBHPTEmNOiY= + magic-sdk@^6.1.0: version "6.2.1" resolved "https://registry.yarnpkg.com/magic-sdk/-/magic-sdk-6.2.1.tgz#4bf34b4fa12d1b1030add1ff54ec7f7e5c5b1e86" @@ -11964,6 +12668,11 @@ osenv@^0.1.4: os-homedir "^1.0.0" os-tmpdir "^1.0.0" +outdent@^0.8.0: + version "0.8.0" + resolved "https://registry.yarnpkg.com/outdent/-/outdent-0.8.0.tgz#2ebc3e77bf49912543f1008100ff8e7f44428eb0" + integrity sha512-KiOAIsdpUTcAXuykya5fnVVT+/5uS0Q1mrkRHcF89tpieSmY33O/tmc54CqwA+bfhbtEfZUNLHaPUiB9X3jt1A== + p-each-series@^2.1.0: version "2.2.0" resolved "https://registry.yarnpkg.com/p-each-series/-/p-each-series-2.2.0.tgz#105ab0357ce72b202a8a8b94933672657b5e2a9a" @@ -12230,6 +12939,11 @@ path-browserify@0.0.1: resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.1.tgz#e6c4ddd7ed3aa27c68a20cc4e50e1a4ee83bbc4a" integrity sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ== +path-browserify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-1.0.1.tgz#d98454a9c3753d5790860f16f68867b9e46be1fd" + integrity sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g== + path-case@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/path-case/-/path-case-3.0.4.tgz#9168645334eb942658375c56f80b4c0cb5f82c6f" @@ -12336,7 +13050,7 @@ pify@^5.0.0: resolved "https://registry.yarnpkg.com/pify/-/pify-5.0.0.tgz#1f5eca3f5e87ebec28cc6d54a0e4aaf00acc127f" integrity sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA== -pirates@^4.0.1, pirates@^4.0.4: +pirates@^4.0.0, pirates@^4.0.1, pirates@^4.0.4: version "4.0.5" resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.5.tgz#feec352ea5c3268fb23a37c702ab1699f35a5f3b" integrity sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ== @@ -12422,6 +13136,14 @@ postcss-discard-overridden@^5.0.4: resolved "https://registry.yarnpkg.com/postcss-discard-overridden/-/postcss-discard-overridden-5.0.4.tgz#cc999d6caf18ea16eff8b2b58f48ec3ddee35c9c" integrity sha512-3j9QH0Qh1KkdxwiZOW82cId7zdwXVQv/gRXYDnwx5pBtR1sTkU4cXRK9lp5dSdiM0r0OICO/L8J6sV1/7m0kHg== +postcss-load-config@^3.1.0: + version "3.1.3" + resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-3.1.3.tgz#21935b2c43b9a86e6581a576ca7ee1bde2bd1d23" + integrity sha512-5EYgaM9auHGtO//ljHH+v/aC/TQ5LHXtL7bQajNAUBKUVKiYE8rYpFms7+V26D9FncaGe2zwCoPQsFKb5zF/Hw== + dependencies: + lilconfig "^2.0.4" + yaml "^1.10.2" + postcss-merge-longhand@^5.0.6: version "5.0.6" resolved "https://registry.yarnpkg.com/postcss-merge-longhand/-/postcss-merge-longhand-5.0.6.tgz#090e60d5d3b3caad899f8774f8dccb33217d2166" @@ -12623,7 +13345,7 @@ postcss@^8.2.1, postcss@^8.2.15: picocolors "^1.0.0" source-map-js "^1.0.2" -postcss@^8.3.5, postcss@^8.4.5: +postcss@^8.3.5, postcss@^8.3.6, postcss@^8.4.5, postcss@^8.4.6: version "8.4.7" resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.7.tgz#f99862069ec4541de386bf57f5660a6c7a0875a8" integrity sha512-L9Ye3r6hkkCeOETQX6iOaWZgjp3LL6Lpqm6EtgbKrgqGGteRMNb9vzBfRL96YOSu8o7x3MfIH9Mo5cPJFGrW6A== @@ -12659,7 +13381,7 @@ prettier-linter-helpers@^1.0.0: dependencies: fast-diff "^1.1.2" -prettier@>=2.3, prettier@^2.1.2, prettier@^2.5.1: +prettier@>=2.3, prettier@^2.1.2, prettier@^2.4.0, prettier@^2.5.1: version "2.5.1" resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.5.1.tgz#fff75fa9d519c54cf0fce328c1017d94546bc56a" integrity sha512-vBZcPRUR5MZJwoyi3ZoyQlc1rXeEck8KgeC9AwwOn+exuxLxq5toTRDTSaVrXHxelDMHy9zlicw8u66yxoSUFg== @@ -12679,7 +13401,7 @@ pretty-format@^25.2.1, pretty-format@^25.5.0: ansi-styles "^4.0.0" react-is "^16.12.0" -pretty-format@^27.0.0, pretty-format@^27.5.1: +pretty-format@^27.0.0, pretty-format@^27.0.2, pretty-format@^27.5.1: version "27.5.1" resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-27.5.1.tgz#2181879fdea51a7a5851fb39d920faa63f01d88e" integrity sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ== @@ -13180,6 +13902,16 @@ rechoir@^0.6.2: dependencies: resolve "^1.1.6" +recrawl-sync@^2.0.3: + version "2.2.1" + resolved "https://registry.yarnpkg.com/recrawl-sync/-/recrawl-sync-2.2.1.tgz#cb02c8084c22b3cea103abf46bb88734076ed6bb" + integrity sha512-A2yLDgeXNaduJJMlqyUdIN7fewopnNm/mVeeGytS1d2HLXKpS5EthQ0j8tWeX+as9UXiiwQRwfoslKC+/gjqxg== + dependencies: + "@cush/relative" "^1.0.0" + glob-regex "^0.3.0" + slash "^3.0.0" + tslib "^1.9.3" + redent@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/redent/-/redent-3.0.0.tgz#e557b7998316bb53c9f1f56fa626352c6963059f" @@ -13390,6 +14122,11 @@ require-from-string@^2.0.2: resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== +"require-like@>= 0.1.1": + version "0.1.2" + resolved "https://registry.yarnpkg.com/require-like/-/require-like-0.1.2.tgz#ad6f30c13becd797010c468afa775c0c0a6b47fa" + integrity sha1-rW8wwTvs15cBDEaK+ndcDAprR/o= + require-main-filename@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" @@ -13434,7 +14171,7 @@ resolve@1.17.0: dependencies: path-parse "^1.0.6" -resolve@^1.1.6, resolve@^1.10.0, resolve@^1.11.0, resolve@^1.12.0, resolve@^1.14.2, resolve@^1.17.0, resolve@^1.20.0, resolve@^1.3.2: +resolve@^1.1.6, resolve@^1.10.0, resolve@^1.11.0, resolve@^1.12.0, resolve@^1.14.2, resolve@^1.17.0, resolve@^1.20.0, resolve@^1.22.0, resolve@^1.3.2: version "1.22.0" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.0.tgz#5e0b8c67c15df57a89bdbabe603a002f21731198" integrity sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw== @@ -13569,6 +14306,13 @@ rollup@^1.32.1: "@types/node" "*" acorn "^7.1.0" +rollup@^2.59.0: + version "2.69.0" + resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.69.0.tgz#82aa86682a45e9760146b736c1643bf435506156" + integrity sha512-kjER91tHyek8gAkuz7+558vSnTQ+pITEok1P0aNOS45ZXyngaqPsXJmSel4QPQnJo7EJMjXUU1/GErWkWiKORg== + optionalDependencies: + fsevents "~2.3.2" + rsvp@^4.8.4: version "4.8.5" resolved "https://registry.yarnpkg.com/rsvp/-/rsvp-4.8.5.tgz#c8f155311d167f68f21e168df71ec5b083113734" @@ -13916,6 +14660,11 @@ slash@^3.0.0: resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== +slash@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-4.0.0.tgz#2422372176c4c6c5addb5e2ada885af984b396a7" + integrity sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew== + slice-ansi@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-2.1.0.tgz#cacd7693461a637a5788d92a7dd4fba068e81636" @@ -14042,7 +14791,7 @@ source-map-resolve@^0.6.0: atob "^2.1.2" decode-uri-component "^0.2.0" -source-map-support@^0.5.6, source-map-support@~0.5.12, source-map-support@~0.5.20: +source-map-support@^0.5.6, source-map-support@^0.5.9, source-map-support@~0.5.12, source-map-support@~0.5.20: version "0.5.21" resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== @@ -14269,6 +15018,14 @@ string-length@^4.0.1: char-regex "^1.0.2" strip-ansi "^6.0.0" +string-length@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/string-length/-/string-length-5.0.1.tgz#3d647f497b6e8e8d41e422f7e0b23bc536c8381e" + integrity sha512-9Ep08KAMUn0OadnVaBuRdE2l615CQ508kr0XMadjClfYpdCyvrbFp6Taebo8yyxokQ4viUd/xPPUA4FGgUa0ow== + dependencies: + char-regex "^2.0.0" + strip-ansi "^7.0.1" + string-width@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" @@ -14385,6 +15142,13 @@ strip-ansi@^6.0.0, strip-ansi@^6.0.1: dependencies: ansi-regex "^5.0.1" +strip-ansi@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.0.1.tgz#61740a08ce36b61e50e65653f07060d000975fb2" + integrity sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw== + dependencies: + ansi-regex "^6.0.1" + strip-bom@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" @@ -14535,7 +15299,7 @@ svgo@^1.2.2: unquote "~1.1.1" util.promisify "~1.0.0" -svgo@^2.7.0: +svgo@^2.5.0, svgo@^2.7.0: version "2.8.0" resolved "https://registry.yarnpkg.com/svgo/-/svgo-2.8.0.tgz#4ff80cce6710dc2795f0c7c74101e6764cfccd24" integrity sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg== @@ -14915,7 +15679,7 @@ ts-jest@^25.3.1: semver "6.x" yargs-parser "18.x" -ts-jest@^27.1.3: +ts-jest@^27.0.7, ts-jest@^27.1.3: version "27.1.3" resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-27.1.3.tgz#1f723e7e74027c4da92c0ffbd73287e8af2b2957" integrity sha512-6Nlura7s6uM9BVUAoqLH7JHyMXjz8gluryjpPXxr3IxZdAXnU6FhjvVLHFtfd1vsE1p8zD1OJfskkc0jhTSnkA== @@ -14929,6 +15693,14 @@ ts-jest@^27.1.3: semver "7.x" yargs-parser "20.x" +ts-morph@^13.0.0: + version "13.0.3" + resolved "https://registry.yarnpkg.com/ts-morph/-/ts-morph-13.0.3.tgz#c0c51d1273ae2edb46d76f65161eb9d763444c1d" + integrity sha512-pSOfUMx8Ld/WUreoSzvMFQG5i9uEiWIsBYjpU9+TTASOeUa89j5HykomeqVULm1oqWtBdleI3KEFRLrlA3zGIw== + dependencies: + "@ts-morph/common" "~0.12.3" + code-block-writer "^11.0.0" + ts-node@^10.4.0: version "10.5.0" resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.5.0.tgz#618bef5854c1fbbedf5e31465cbb224a1d524ef9" @@ -15030,16 +15802,16 @@ tslib@2.0.1: resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.0.1.tgz#410eb0d113e5b6356490eec749603725b021b43e" integrity sha512-SgIkNheinmEBgx1IUNirK0TUD4X9yjjBRTqqjggWCU3pUEqIk3/Uwl3yRixYKT6WjQuGiwDv4NomL3wqRCj+CQ== +tslib@2.3.1, tslib@^2.0.0, tslib@^2.0.3, tslib@^2.3.0, tslib@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.3.1.tgz#e8a335add5ceae51aa261d32a490158ef042ef01" + integrity sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw== + tslib@^1.10.0, tslib@^1.8.1, tslib@^1.9.0, tslib@^1.9.3: version "1.14.1" resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== -tslib@^2.0.0, tslib@^2.0.3, tslib@^2.3.0, tslib@^2.3.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.3.1.tgz#e8a335add5ceae51aa261d32a490158ef042ef01" - integrity sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw== - tsutils@^3.17.1, tsutils@^3.21.0: version "3.21.0" resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623" @@ -15475,6 +16247,11 @@ use-sync-external-store@1.0.0-rc.0: resolved "https://registry.yarnpkg.com/use-sync-external-store/-/use-sync-external-store-1.0.0-rc.0.tgz#0d8fb7cbc31ddfb3ee01225f6b0a700cf59c449b" integrity sha512-0U9Xlc2QDFzSGMB0DvcJQL0+DIdxDPJC7mnZlYFbl7wrSrPMcs89X5TVkNB6Dzg618m8lZop+U+J6ow3vq9RAQ== +use-sync-external-store@1.0.0-rc.1-next-629036a9c-20220224: + version "1.0.0-rc.1-next-629036a9c-20220224" + resolved "https://registry.yarnpkg.com/use-sync-external-store/-/use-sync-external-store-1.0.0-rc.1-next-629036a9c-20220224.tgz#40cf472454789403c2de6c8471d177459d184dc1" + integrity sha512-IhuMl0apVVYsT3XPfV+0nuwf0T6+3d4YxQXV4tDRsGpSQcYVG4zoWwfX4zdtouUfuelYg4t2SEmFifIMrxPfIw== + use@^3.1.0: version "3.1.1" resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" @@ -15625,6 +16402,37 @@ vfile@^4.0.0, vfile@^4.2.1: unist-util-stringify-position "^2.0.0" vfile-message "^2.0.0" +vite-plugin-dts@^0.9.2: + version "0.9.9" + resolved "https://registry.yarnpkg.com/vite-plugin-dts/-/vite-plugin-dts-0.9.9.tgz#e2d263deccc703646c2392c4715fcd64749a3c85" + integrity sha512-HzLTCBbsN9gotphtIe97TCigeco6aGLBoeSHdxD9QGGl8prO7uykus0fphLkjWCbFlrerb8Uxp9fu82BfIiaIg== + dependencies: + fast-glob "^3.2.7" + fs-extra "^10.0.0" + ts-morph "^13.0.0" + +vite-tsconfig-paths@^3.3.17: + version "3.4.1" + resolved "https://registry.yarnpkg.com/vite-tsconfig-paths/-/vite-tsconfig-paths-3.4.1.tgz#6901b71d4cb7b764f76312e491f8f0622b9bfe56" + integrity sha512-SgK3/pnTuJ3i+gMSAWLR6VCPSw26bnxawrmXGvCDjJgk8MAQgmbCrFrAzfwbwZBXSqSuvWEuX04Wt73qJKx8fQ== + dependencies: + debug "^4.1.1" + globrex "^0.1.2" + recrawl-sync "^2.0.3" + tsconfig-paths "^3.9.0" + +vite@^2.6.13: + version "2.8.6" + resolved "https://registry.yarnpkg.com/vite/-/vite-2.8.6.tgz#32d50e23c99ca31b26b8ccdc78b1d72d4d7323d3" + integrity sha512-e4H0QpludOVKkmOsRyqQ7LTcMUDF3mcgyNU4lmi0B5JUbe0ZxeBBl8VoZ8Y6Rfn9eFKYtdXNPcYK97ZwH+K2ug== + dependencies: + esbuild "^0.14.14" + postcss "^8.4.6" + resolve "^1.22.0" + rollup "^2.59.0" + optionalDependencies: + fsevents "~2.3.2" + vm-browserify@^1.0.1: version "1.1.2" resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.2.tgz#78641c488b8e6ca91a75f511e7a3b32a86e5dda0" @@ -16371,3 +17179,10 @@ zustand@^4.0.0-beta.0: integrity sha512-XdKfCM6I2k758AQY/WaUZoC0uQjj7z6NfvvYBo+cxU58M3iMsrHU9w7yUkUNIOKc9T8/5S0j54ga7wVGQWhcvA== dependencies: use-sync-external-store "1.0.0-rc.0" + +zustand@^4.0.0-beta.2: + version "4.0.0-beta.2" + resolved "https://registry.yarnpkg.com/zustand/-/zustand-4.0.0-beta.2.tgz#27fdc32b62225cc18976c0cf8866ecee9a9f4a98" + integrity sha512-aJ5ypnOwPIa/uSjdZv/oHChTWPplpFOG/hvWwzkR5ahFiPI5R6ifyObf8Fz1Vi6Obz2wY1N32fT2pNrpT2hzPw== + dependencies: + use-sync-external-store "1.0.0-rc.1-next-629036a9c-20220224"