From c9260974f726f58de0fd4974ea024c644d9b7c6f Mon Sep 17 00:00:00 2001 From: Michel Weststrate Date: Sat, 11 Nov 2023 15:42:31 +0000 Subject: [PATCH] TC 39 decorators (#3790) * add support for Stage3/2022.3 decorators * bump Jest stack * Update docs/enabling-decorators.md Co-authored-by: Rick Pastoor * bump from TS beta to 5.0.2 * rebase unto React 18 changes * fix some decorator documentation issues * bump test GC timeout * try fix GC test * v6.11.0-pre * Doc improvements * error on on missing `accessor` fields instead of silently ignoring * fix lint error * docs: added Babel decorator setup * added class decorator * add changelog entry for mobx-react * minor readme improvements * Removed dead code --------- Co-authored-by: Ethan Knapp Co-authored-by: Matchlighter Co-authored-by: Rick Pastoor --- .changeset/afraid-cooks-nail.md | 8 + .changeset/little-dancers-breathe.md | 8 + .github/workflows/build_and_test.yml | 1 + README.md | 2 +- docs/README.md | 6 +- docs/actions.md | 19 + docs/api.md | 8 +- docs/computeds.md | 2 + docs/enabling-decorators.md | 138 +- docs/installation.md | 29 +- docs/observable-state.md | 73 +- docs/the-gist-of-mobx.md | 13 +- jest.base.config.js | 27 +- jest.config.js | 2 +- package.json | 17 +- packages/eslint-plugin-mobx/package.json | 4 +- .../__snapshots__/observer.test.tsx.snap | 24 +- .../printDebugValue.test.ts.snap | 14 +- ...sObservableSource.deprecated.test.tsx.snap | 12 +- .../useLocalStore.deprecated.test.tsx.snap | 16 +- ...rentModeUsingFinalizationRegistry.test.tsx | 14 +- packages/mobx-react-lite/jest.setup.ts | 2 + .../__snapshots__/hooks.test.tsx.snap | 12 +- packages/mobx-react/jest.setup.ts | 2 + packages/mobx-react/src/observer.tsx | 7 +- .../mobx-undecorate/__tests__/cli.spec.tsx | 12 +- .../__tests__/undecorate.spec.ts | 636 ++-- .../decorators_20223/stage3-decorators.ts | 1087 ++++++ .../__tests__/decorators_20223/tsconfig.json | 12 + .../v4/base/__snapshots__/array.js.snap | 8 +- .../v4/base/__snapshots__/extras.js.snap | 12 +- .../v4/base/__snapshots__/object-api.js.snap | 42 +- .../v4/base/__snapshots__/observables.js.snap | 62 +- .../v4/base/__snapshots__/spy.js.snap | 134 +- packages/mobx/__tests__/v4/base/array.js | 10 + .../v5/base/__snapshots__/action.js.snap | 4 +- .../v5/base/__snapshots__/extras.js.snap | 12 +- .../v5/base/__snapshots__/flow.js.snap | 42 +- .../v5/base/__snapshots__/object-api.js.snap | 26 +- .../v5/base/__snapshots__/observables.js.snap | 62 +- .../v5/base/__snapshots__/proxies.js.snap | 36 +- .../v5/base/__snapshots__/spy.js.snap | 150 +- packages/mobx/__tests__/v5/base/map.js | 2 +- packages/mobx/jest.config-decorators.js | 11 + packages/mobx/jest.config.js | 1 + packages/mobx/jest.setup.ts | 2 + packages/mobx/package.json | 2 +- packages/mobx/src/api/action.ts | 25 +- packages/mobx/src/api/annotation.ts | 1 + packages/mobx/src/api/computed.ts | 15 +- packages/mobx/src/api/decorators.ts | 41 +- packages/mobx/src/api/flow.ts | 13 +- packages/mobx/src/api/observable.ts | 26 +- packages/mobx/src/types/actionannotation.ts | 50 +- packages/mobx/src/types/autoannotation.ts | 10 +- packages/mobx/src/types/computedannotation.ts | 41 +- packages/mobx/src/types/decorator_fills.ts | 33 + packages/mobx/src/types/flowannotation.ts | 30 +- .../mobx/src/types/legacyobservablearray.ts | 2 +- .../mobx/src/types/observableannotation.ts | 77 +- packages/mobx/src/types/overrideannotation.ts | 22 +- website/i18n/en.json | 4 +- yarn.lock | 3079 ++++++----------- 63 files changed, 3523 insertions(+), 2771 deletions(-) create mode 100644 .changeset/afraid-cooks-nail.md create mode 100644 .changeset/little-dancers-breathe.md create mode 100644 packages/mobx/__tests__/decorators_20223/stage3-decorators.ts create mode 100644 packages/mobx/__tests__/decorators_20223/tsconfig.json create mode 100644 packages/mobx/jest.config-decorators.js create mode 100644 packages/mobx/src/types/decorator_fills.ts diff --git a/.changeset/afraid-cooks-nail.md b/.changeset/afraid-cooks-nail.md new file mode 100644 index 000000000..65f5cb8df --- /dev/null +++ b/.changeset/afraid-cooks-nail.md @@ -0,0 +1,8 @@ +--- +"mobx": minor +--- + +Added support for modern 2022.3 Decorators. [#3790](https://github.com/mobxjs/mobx/pull/3790) + * [Installation / usage instruction](https://mobx.js.org/enabling-decorators.html). + * [Introduction announcement](https://michel.codes/blogs/mobx-decorators) + * Original PR by [@Matchlighter](https://github.com/Matchlighter) in [#3638](https://github.com/mobxjs/mobx/pull/3638), diff --git a/.changeset/little-dancers-breathe.md b/.changeset/little-dancers-breathe.md new file mode 100644 index 000000000..cbf60f088 --- /dev/null +++ b/.changeset/little-dancers-breathe.md @@ -0,0 +1,8 @@ +--- +"mobx-react": minor +--- + +Added support for modern 2022.3 Decorators. [#3790](https://github.com/mobxjs/mobx/pull/3790) + * [Installation / usage instruction](https://mobx.js.org/enabling-decorators.html). + * [Introduction announcement](https://michel.codes/blogs/mobx-decorators) + * Original PR by [@Matchlighter](https://github.com/Matchlighter) in [#3638](https://github.com/mobxjs/mobx/pull/3638), diff --git a/.github/workflows/build_and_test.yml b/.github/workflows/build_and_test.yml index ef5866b6a..1bf246e94 100644 --- a/.github/workflows/build_and_test.yml +++ b/.github/workflows/build_and_test.yml @@ -5,6 +5,7 @@ on: branches: [main] pull_request: branches: [main] + workflow_dispatch: {} jobs: build: diff --git a/README.md b/README.md index 5e1b19da9..ab2e6bf32 100644 --- a/README.md +++ b/README.md @@ -58,7 +58,7 @@ MobX is made possible by the generosity of the sponsors below, and many other [i _Anything that can be derived from the application state, should be. Automatically._ -MobX is a battle-tested library that makes state management simple and scalable by transparently applying functional reactive programming. +MobX is a signal based, battle-tested library that makes state management simple and scalable by transparently applying functional reactive programming. The philosophy behind MobX is simple:
diff --git a/docs/README.md b/docs/README.md index 0b38c0fcc..6055756aa 100644 --- a/docs/README.md +++ b/docs/README.md @@ -18,10 +18,6 @@ _Simple, scalable state management._ --- -> Documentation for the older **unsupported** V4/V5 can be [found here](https://github.com/mobxjs/mobx/blob/mobx4and5/docs/README.md), but be sure to read about the [current documentation first](https://mobx.js.org/about-this-documentation.html). - ---- - MobX is made possible by the generosity of the sponsors below, and many other [individual backers](backers-sponsors.md#backers). Sponsoring directly impacts the longevity of this project. **🥇 Gold sponsors (\$3000+ total contribution):**
@@ -59,7 +55,7 @@ MobX is made possible by the generosity of the sponsors below, and many other [i _Anything that can be derived from the application state, should be. Automatically._ -MobX is a battle-tested library that makes state management simple and scalable by transparently applying functional reactive programming. +MobX is a signal based, battle-tested library that makes state management simple and scalable by transparently applying functional reactive programming. The philosophy behind MobX is simple:
diff --git a/docs/actions.md b/docs/actions.md index 451af56a0..d627f31a0 100644 --- a/docs/actions.md +++ b/docs/actions.md @@ -13,6 +13,7 @@ Usage: - `action` _(annotation)_ - `action(fn)` - `action(name, fn)` +- `@action` _(method / field decorator)_ All applications have actions. An action is any piece of code that modifies the state. In principle, actions always happen in response to an event. For example, a button was clicked, some input changed, a websocket message arrived, etc. @@ -50,6 +51,23 @@ class Doubler { } ``` + + +```javascript +import { observable, action } from "mobx" + +class Doubler { + @observable accessor value = 0 + + @action + increment() { + // Intermediate states will not become visible to observers. + this.value++ + this.value++ + } +} +``` + ```javascript @@ -399,6 +417,7 @@ Usage: - `flow` _(annotation)_ - `flow(function* (args) { })` +- `@flow` _(method decorator)_ The `flow` wrapper is an optional alternative to `async` / `await` that makes it easier to work with MobX actions. diff --git a/docs/api.md b/docs/api.md index 2258deb56..4db83b102 100644 --- a/docs/api.md +++ b/docs/api.md @@ -57,7 +57,7 @@ It is possible to use `extendObservable` to add observable fields to an existing ### `observable` -Usage: `observable(source, overrides?, options?)` or `observable` _(annotation)_ +Usage: `observable(source, overrides?, options?)`, `observable` _(annotation)_ or `@observable accessor` _(field decorator)_. ([further information](observable-state.md#observable)) Clones an object and makes it observable. Source can be a plain object, array, Map or Set. By default, `observable` is applied recursively. If one of the encountered values is an object or array, that value will be passed through `observable` as well. @@ -172,7 +172,7 @@ _An action is any piece of code that modifies the state._ ### `action` -Usage: `action(fn)` or `action` _(annotation)_ +Usage: `action(fn)`, `action` _(annotation)_ or `@action` _(method / field decorator)_ ([further information](actions.md)) Use on functions that intend to modify the state. @@ -186,7 +186,7 @@ Create a one-time action that is immediately invoked. ### `flow` -Usage: `flow(fn)` or `flow` _(annotation)_ +Usage: `flow(fn)`, `flow` _(annotation)_ or `@flow` _(generator method decorator)_ ([further information](actions.md#using-flow-instead-of-async--await-)) MobX friendly replacement for `async` / `await` that supports cancellation. @@ -207,7 +207,7 @@ _Computed values can be used to derive information from other observables._ ### `computed` -Usage: `computed(fn, options?)` or `computed(options?)` _(annotation)_ +Usage: `computed(fn, options?)`, `computed(options?)` _(annotation)_ or `@computed` _(getter decorator)_ ([further information](computeds.md)) Creates an observable value that is derived from other observables, but won't be recomputed unless one of the underlying observables changes. diff --git a/docs/computeds.md b/docs/computeds.md index 45befc1ad..8dcbb7b94 100644 --- a/docs/computeds.md +++ b/docs/computeds.md @@ -13,6 +13,8 @@ Usage: - `computed` _(annotation)_ - `computed(options)` _(annotation)_ - `computed(fn, options?)` +- `@computed` _(getter decorator)_ +- `@computed(options)` _(getter decorator)_ Computed values can be used to derive information from other observables. They evaluate lazily, caching their output and only recomputing if one of the underlying observables has changed. diff --git a/docs/enabling-decorators.md b/docs/enabling-decorators.md index ed7209755..e864f07ad 100644 --- a/docs/enabling-decorators.md +++ b/docs/enabling-decorators.md @@ -1,16 +1,79 @@ --- -title: Enabling decorators -sidebar_label: Enabling decorators {🚀} +title: Decorators +sidebar_label: Decorators {🚀} hide_title: true --- -# Enabling decorators {🚀} +# Decorators -MobX before version 6 encouraged the use of ES.next decorators to mark things as `observable`, `computed` and `action`. However, decorators are currently not an ES standard, and the process of standardization is taking a long time. It also looks like the standard will be different from the way decorators were implemented previously. In the interest of compatibility we have chosen to move away from them in MobX 6, and recommend the use of [`makeObservable` / `makeAutoObservable`](observable-state.md) instead. +## Enabling decorators -But many existing codebases use decorators, and a lot of the documentation and tutorial material online uses them as well. The rule is that anything you can use as an annotation to `makeObservable`, such as `observable`, `action` and `computed`, you can also use as a decorator. So let's examine what that looks like: +After years of alterations, ES decorators have finally reached Stage 3 in the TC39 process, meaning that they are quite stable and won't undergo breaking changes again like the previous decorator proposals have. MobX has implemented support for this new "2022.3/Stage 3" decorator syntax. +With modern decorators, it is no longer needed to call `makeObservable` / `makeAutoObservable`. + +2022.3 Decorators are supported in: +* TypeScript (5.0 and higher, make sure that the `experimentalDecorators` flag is NOT enabled). [Example commit](https://github.com/mweststrate/currencies-demo/commit/acb9ac8c148e8beef88042c847bb395131e85d60). +* For Babel make sure the plugin [`proposal-decorators`](https://babeljs.io/docs/babel-plugin-proposal-decorators) is enabled with the highest version (currently `2023-05`). [Example commit](https://github.com/mweststrate/currencies-demo/commit/4999d2228208f3e1e10bc00a272046eaefde8585). + +```js +// tsconfig.json +{ + "compilerOptions": { + "experimentalDecorators": false /* or just remove the flag */ + } +} + +// babel.config.json (or equivalent) +{ + "plugins": [ + [ + "@babel/plugin-proposal-decorators", + { + "version": "2023-05" + } + ] + ] +} +``` + +## Using decorators + +```javascript +import { observable, computed, action } from "mobx" + +class Todo { + id = Math.random() + @observable accessor title = "" + @observable accessor finished = false + + @action + toggle() { + this.finished = !this.finished + } +} + +class TodoList { + @observable accessor todos = [] + + @computed + get unfinishedTodoCount() { + return this.todos.filter(todo => !todo.finished).length + } +} +``` + +Notice the usage of the new `accessor` keyword when using `@observable`. +It is part of the 2022.3 spec and is required if you want to use modern decorators. + +
Using legacy decorators + +We do not recommend codebases to use TypeScript / Babel legacy decorators since they well never become an official part of the language, but you can still use them. It does require a specific setup for transpilation: + +MobX before version 6 encouraged the use of legacy decorators and mark things as `observable`, `computed` and `action`. +While MobX 6 recommends against using these decorators (and instead use either modern decorators or [`makeObservable` / `makeAutoObservable`](observable-state.md)), it is in the current major version still possible. +Support for legacy decorators will be removed in MobX 7. ```javascript import { makeObservable, observable, computed, action } from "mobx" @@ -43,62 +106,37 @@ class TodoList { } } ``` +
-MobX before version 6 did not require the `makeObservable(this)` call in the constructor, but because it makes the implementation of decorator simpler and more compatible, it now does. This instructs MobX to make the instances observable following the information in the decorators – the decorators take the place of the second argument to `makeObservable`. +
Migrating from legacy decorators -We intend to continue to support decorators in this form. -Any existing MobX 4/5 codebase can be migrated to use `makeObservable` calls by our [code-mod](https://www.npmjs.com/package/mobx-undecorate). -When migrating from MobX 4/5 to 6, we recommend to always run the code-mod, to make sure the necessary `makeObservable` calls are generated. +To migrate from legacy decorators to modern decorators, perform the following steps: -Check out the [Migrating from MobX 4/5 {🚀}](migrating-from-4-or-5.md) section. - -## Using `observer` as a decorator +1. Disable / remove the `experimentalDecorators` flag from your TypeScript configuration (or Babel equivalent) +2. Remove all `makeObservable(this)` calls from class constructors that use decorators. +3. Replace all instances of `@observable` (and variations) with `@observable accessor` -The `observer` function from `mobx-react` is both a function and a decorator that can be used on class components: - -```javascript -@observer -class Timer extends React.Component { - /* ... */ -} -``` +
-## How to enable decorator support +
Decorator changes / gotchas -We do not recommend new codebases that use MobX use decorators until the point when they become an official part of the language, but you can still use them. It does require setup for transpilation so you have to use Babel or TypeScript. +MobX' 2022.3 Decorators are very similar to the MobX 5 decorators, so usage is mostly the same, but there are some gotchas: -### TypeScript +- `@observable accessor` decorators are _not_ enumerable. `accessor`s do not have a direct equivalent in the past - they're a new concept in the language. We've chosen to make them non-enumerable, non-own properties in order to better follow the spirit of the ES language and what `accessor` means. + The main cases for enumerability seem to have been around serialization and rest destructuring. + - Regarding serialization, implicitly serializing all properties probably isn't ideal in an OOP-world anyway, so this doesn't seem like a substantial issue (consider implementing `toJSON` or using `serializr` as possible alternatives) + - Addressing rest-destructuring, such is an anti-pattern in MobX - doing so would (likely unwantedly) touch all observables and make the observer overly-reactive). +- `@action some_field = () => {}` was and is valid usage (_if_ `makeObservable()` is also used). However, `@action accessor some_field = () => {}` is never valid. -Enable the compiler option `"experimentalDecorators": true` and `"useDefineForClassFields": true` in your `tsconfig.json`. +
-### Babel 7 +## Using `observer` as a decorator -Install support for decorators: `npm i --save-dev @babel/plugin-proposal-class-properties @babel/plugin-proposal-decorators`. And enable it in your `.babelrc` file (note that the order is important): +The `observer` function from `mobx-react` is both a function and a decorator that can be used on class components: ```javascript -{ - "plugins": [ - ["@babel/plugin-proposal-decorators", { "legacy": true }], - ["@babel/plugin-proposal-class-properties", { "loose": false }] - // In contrast to MobX 4/5, "loose" must be false! ^ - ] +@observer +class Timer extends React.Component { + /* ... */ } ``` - -### Decorator syntax and Create React App (v2) - -Decorators are only supported out of the box when using TypeScript in `create-react-app@^2.1.1` and newer. In older versions or when using vanilla JavaScript use eject, or the [customize-cra](https://github.com/arackaf/customize-cra) package. - -## Disclaimer: Limitations of the decorator syntax - -The current transpiler implementations of the decorator syntax are quite limited and don't behave exactly the same. -Also, many compositional patterns are currently not possible with decorators, until the stage-2 proposal has been implemented by all transpilers. -For this reason the scope of decorator syntax support in MobX is currently scoped to make sure that the supported features -behave consistently across all environments. - -The following patterns are not officially supported by the MobX community: - -- Redefining decorated class members in inheritance trees -- Decorating static class members -- Combining decorators provided by MobX with other decorators -- Hot module reloading (HMR) / React-hot-loader might not work as expected diff --git a/docs/installation.md b/docs/installation.md index 8da31496a..516bb291f 100644 --- a/docs/installation.md +++ b/docs/installation.md @@ -18,9 +18,18 @@ There are two types of React bindings, `mobx-react-lite` supports only functiona **CDN:** https://cdnjs.com/libraries/mobx / https://unpkg.com/mobx/dist/mobx.umd.production.min.js +# Transpilation settings + +## MobX and Decorators + +Based on your preference, MobX can be used with or without decorators. +Both the legacy implementation and the standardised TC-39 version of decorators are currently supported. +See [enabling-decorators.md](enabling-decorators.md) for more details on how to enable them. +Legacy decorator support will be removed in MobX 7, in favor of the standard. + ## Use spec compliant transpilation for class properties -⚠️ **Warning:** When using MobX with TypeScript or Babel, and you plan to use classes; make sure to update your configuration to use a TC-39 spec compliant transpilation for class fields, since this is not the default. Without this, class fields cannot be made observable before they are initialized. +When using MobX with TypeScript or Babel, and you plan to use classes; make sure to update your configuration to use a TC-39 spec compliant transpilation for class fields, since this is not always the default. Without this, class fields cannot be made observable before they are initialized. - **TypeScript**: Set the compiler option `"useDefineForClassFields": true`. - **Babel**: Make sure to use at least version 7.12, with the following configuration: @@ -28,7 +37,7 @@ There are two types of React bindings, `mobx-react-lite` supports only functiona { // Babel < 7.13.0 "plugins": [["@babel/plugin-proposal-class-properties", { "loose": false }]], - + // Babel >= 7.13.0 (https://babeljs.io/docs/en/assumptions) "plugins": [["@babel/plugin-proposal-class-properties"]], "assumptions": { @@ -53,21 +62,7 @@ import { configure } from "mobx" configure({ useProxies: "never" }) // Or "ifavailable". ``` -## MobX and Decorators - -If you have used MobX before, or if you followed online tutorials, you probably saw MobX with decorators like `@observable`. -In MobX 6, we have chosen to move away from decorators by default, for maximum compatibility with standard JavaScript. -They can still be used if you [enable them](enabling-decorators.md) though. - -## Development vs production - -Unless you're using pre-build distribution ending with `.[production|development].min.js`, Mobx uses `process.env.NODE_ENV` variable to detect the environment. Make sure it's set to `"production"` on production. This is usually done by your favourite bundler: -[webpack](https://reactjs.org/docs/optimizing-performance.html#webpack) -[Rollup](https://reactjs.org/docs/optimizing-performance.html#rollup) -[Browserify](https://reactjs.org/docs/optimizing-performance.html#browserify) -[Brunch](https://reactjs.org/docs/optimizing-performance.html#brunch) - -Most of the safety checks, like [`enforceAction`](https://mobx.js.org/configuration.html#enforceactions) and similar, happens on development only. +This option will be removed in MobX 7. ## MobX on other frameworks / platforms diff --git a/docs/observable-state.md b/docs/observable-state.md index c9b552a09..b2f26c6e6 100644 --- a/docs/observable-state.md +++ b/docs/observable-state.md @@ -24,7 +24,9 @@ Usage: This function can be used to make _existing_ object properties observable. Any JavaScript object (including class instances) can be passed into `target`. Typically `makeObservable` is used in the constructor of a class, and its first argument is `this`. -The `annotations` argument maps [annotations](#available-annotations) to each member. Only annotated members are affected. Note that when using [decorators](enabling-decorators.md), the `annotations` argument can be omitted. +The `annotations` argument maps [annotations](#available-annotations) to each member. Only annotated members are affected. + +Alternatively, decorators like `@observable` can be used on class members instead of calling `makeObservable` in the constructor. Methods that derive information and take arguments (for example `findUsersOlderThan(age: number): User[]`) can not be annotated as `computed` – their read operations will still be tracked when they are called from a reaction, but their output won't be memoized to avoid memory leaks. To memoize such methods you can use [MobX-utils computedFn {🚀}](https://github.com/mobxjs/mobx-utils#computedfn) instead. @@ -67,6 +69,40 @@ class Doubler { **All annotated** fields are **non-configurable**.
**All non-observable** (stateless) fields (`action`, `flow`) are **non-writable**. + + + +When using modern decorators, there is no need to call `makeObservable`, below is what a decorator based class looks like. +Note that the `@observable` annotation should always be used in combination with the `accessor` keyword. + +```javascript +import { observable, computed, action, flow } from "mobx" + +class Doubler { + @observable accessor value + + constructor(value) { + this.value = value + } + + @computed + get double() { + return this.value * 2 + } + + @action + increment() { + this.value++ + } + + @flow + *fetch() { + const response = yield fetch("/api/value") + this.value = response.json() + } +} +``` + ```javascript @@ -112,6 +148,40 @@ tags.push("prio: for fun") In contrast to the first example with `makeObservable`, `observable` supports adding (and removing) _fields_ to an object. This makes `observable` great for collections like dynamically keyed objects, arrays, Maps and Sets. + + + +To use legacy decorators, `makeObservable(this)` should be called in the constructor to make sure decorators work. + +```javascript +import { observable, computed, action, flow } from "mobx" + +class Doubler { + @observable value + + constructor(value) { + makeObservable(this) + this.value = value + } + + @computed + get double() { + return this.value * 2 + } + + @action + increment() { + this.value++ + } + + @flow + *fetch() { + const response = yield fetch("/api/value") + this.value = response.json() + } +} +``` + ## `makeAutoObservable` @@ -141,6 +211,7 @@ Inference rules: Usage: - `observable(source, overrides?, options?)` +- `@observabe accessor` _(field decorator)_ The `observable` annotation can also be called as a function to make an entire object observable at once. The `source` object will be cloned and all members will be made observable, similar to how it would be done by `makeAutoObservable`. diff --git a/docs/the-gist-of-mobx.md b/docs/the-gist-of-mobx.md index 7c36b77ed..aba00ddc0 100644 --- a/docs/the-gist-of-mobx.md +++ b/docs/the-gist-of-mobx.md @@ -18,6 +18,9 @@ MobX distinguishes between the following three concepts in your application: Let's take a closer look at these concepts below, or alternatively, in the [10 minute introduction to MobX and React](https://mobx.js.org/getting-started), where you can interactively dive deeper into these concepts step by step and build a simple Todo list app. +Some might recognise the concept of "Signals" in the concepts described below. +This is correct, MobX is a signal based state management library avant la lettre. + ### 1. Define state and make it observable _State_ is the data that drives your application. @@ -52,11 +55,16 @@ class Todo { } ``` -**Hint**: this example can be shortened using [`makeAutoObservable`](observable-state.md), but by being explicit we can showcase the different concepts in greater detail. - Using `observable` is like turning a property of an object into a spreadsheet cell. But unlike spreadsheets, these values can not only be primitive values, but also references, objects and arrays. +
Tip: Prefer classes, plain objects or decorators? MobX supports many styles. + +This example can be shortened using [`makeAutoObservable`](observable-state.md), but by being explicit we can showcase the different concepts in greater detail. +Note that MobX doesn't dictate an object style, plain objects instead can be used as well, as can decorators for even more concise classes. See the page for more details. + +
+ But what about `toggle`, which we marked as `action`? ### 2. Update state using actions @@ -189,6 +197,7 @@ To learn more about how MobX determines which observables need to be reacted to, MobX uses a uni-directional data flow where _actions_ change the _state_, which in turn updates all affected _views_. + ![Action, State, View](assets/action-state-view.png) 1. All _derivations_ are updated **automatically** and **atomically** when the _state_ changes. As a result, it is never possible to observe intermediate values. diff --git a/jest.base.config.js b/jest.base.config.js index acd363122..acd82f6c5 100644 --- a/jest.base.config.js +++ b/jest.base.config.js @@ -1,21 +1,28 @@ const fs = require("fs") const path = require("path") -const tsConfig = "tsconfig.test.json" - -module.exports = function buildConfig(packageDirectory, pkgConfig) { +module.exports = function buildConfig( + packageDirectory, + pkgConfig, + tsConfig = "tsconfig.test.json" +) { const packageName = require(`${packageDirectory}/package.json`).name const packageTsconfig = path.resolve(packageDirectory, tsConfig) return { preset: "ts-jest/presets/js-with-ts", - testEnvironment: "jest-environment-jsdom-fifteen", + testEnvironment: "jsdom", globals: { - __DEV__: true, - "ts-jest": { - tsconfig: fs.existsSync(packageTsconfig) - ? packageTsconfig - : path.resolve(__dirname, tsConfig) - } + __DEV__: true + }, + transform: { + "^.+\\.[jt]sx?$": [ + "ts-jest", + { + tsconfig: fs.existsSync(packageTsconfig) + ? packageTsconfig + : path.resolve(__dirname, tsConfig) + } + ] }, testRegex: "__tests__/.*\\.(j|t)sx?$", coverageDirectory: "/coverage/", diff --git a/jest.config.js b/jest.config.js index fb1ffb1f1..e40ab53e2 100644 --- a/jest.config.js +++ b/jest.config.js @@ -1,6 +1,6 @@ const buildConfig = require("./jest.base.config") module.exports = buildConfig(__dirname, { - projects: ["/packages/*/jest.config.js"] + projects: ["/packages/*/jest.config.js", "/packages/*/jest.config-*.js"] // collectCoverageFrom: ["/packages/*/src/**/*.{ts,tsx}"] }) diff --git a/package.json b/package.json index 20de1105f..9cf281e80 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,8 @@ "packages/*" ], "resolutions": { - "typescript": "^4.0.2", + "jest": "^29.5.0", + "typescript": "^5.0.2", "recast": "^0.23.1" }, "repository": { @@ -40,8 +41,8 @@ "@types/prop-types": "^15.5.2", "@types/react": "^18.0.0", "@types/react-dom": "^18.0.0", - "@typescript-eslint/eslint-plugin": "^4.6.1", - "@typescript-eslint/parser": "^4.1.1", + "@typescript-eslint/eslint-plugin": "^5.0.0", + "@typescript-eslint/parser": "^5.0.0", "coveralls": "^3.1.0", "eslint": "^6.8.0", "execa": "^4.1.0", @@ -49,15 +50,15 @@ "husky": "^4.2.5", "import-size": "^1.0.2", "iterall": "^1.3.0", - "jest": "^26.6.2", - "jest-environment-jsdom-fifteen": "^1.0.2", + "jest": "^29.5.0", + "jest-environment-jsdom": "^29.5.0", "jest-mock-console": "^1.0.1", "lerna": "^3.22.1", "lint-staged": "^10.1.7", "lodash": "^4.17.4", "minimist": "^1.2.5", "mkdirp": "1.0.4", - "prettier": "^2.0.5", + "prettier": "^2.8.4", "pretty-quick": "3.1.0", "prop-types": "15.6.2", "react": "^18.0.0", @@ -65,9 +66,9 @@ "react-test-renderer": "^18.0.0", "serializr": "^2.0.3", "tape": "^5.0.1", - "ts-jest": "26.4.1", + "ts-jest": "^29.0.5", "tsdx": "^0.14.1", - "typescript": "^4.0.2" + "typescript": "^5.0.2" }, "husky": { "hooks": { diff --git a/packages/eslint-plugin-mobx/package.json b/packages/eslint-plugin-mobx/package.json index 9f4b90fa4..e2825f92b 100644 --- a/packages/eslint-plugin-mobx/package.json +++ b/packages/eslint-plugin-mobx/package.json @@ -28,8 +28,8 @@ "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0" }, "devDependencies": { - "@typescript-eslint/eslint-plugin": "^4.29.3", - "@typescript-eslint/parser": "^4.0.0", + "@typescript-eslint/eslint-plugin": "^5.0.0", + "@typescript-eslint/parser": "^5.0.0", "eslint": "^7.0.0", "@babel/core": "^7.16.0", "@babel/preset-env": "^7.16.4", diff --git a/packages/mobx-react-lite/__tests__/__snapshots__/observer.test.tsx.snap b/packages/mobx-react-lite/__tests__/__snapshots__/observer.test.tsx.snap index 2186b994d..7be28f953 100644 --- a/packages/mobx-react-lite/__tests__/__snapshots__/observer.test.tsx.snap +++ b/packages/mobx-react-lite/__tests__/__snapshots__/observer.test.tsx.snap @@ -66,13 +66,13 @@ exports[`issue 12 run transaction 2`] = ` exports[`issue 309 isObserverBatched is still defined and yields true by default 1`] = ` [MockFunction] { - "calls": Array [ - Array [ + "calls": [ + [ "[MobX] Deprecated", ], ], - "results": Array [ - Object { + "results": [ + { "type": "return", "value": undefined, }, @@ -82,13 +82,13 @@ exports[`issue 309 isObserverBatched is still defined and yields true by default exports[`issue 309 isObserverBatched is still defined and yields true by default 2`] = ` [MockFunction] { - "calls": Array [ - Array [ + "calls": [ + [ "[MobX] Deprecated", ], ], - "results": Array [ - Object { + "results": [ + { "type": "return", "value": undefined, }, @@ -98,13 +98,13 @@ exports[`issue 309 isObserverBatched is still defined and yields true by default exports[`observer(cmp, { forwardRef: true }) + useImperativeHandle 1`] = ` [MockFunction] { - "calls": Array [ - Array [ + "calls": [ + [ "[mobx-react-lite] \`observer(fn, { forwardRef: true })\` is deprecated, use \`observer(React.forwardRef(fn))\`", ], ], - "results": Array [ - Object { + "results": [ + { "type": "return", "value": undefined, }, diff --git a/packages/mobx-react-lite/__tests__/__snapshots__/printDebugValue.test.ts.snap b/packages/mobx-react-lite/__tests__/__snapshots__/printDebugValue.test.ts.snap index b0db59051..8e2eb85d0 100644 --- a/packages/mobx-react-lite/__tests__/__snapshots__/printDebugValue.test.ts.snap +++ b/packages/mobx-react-lite/__tests__/__snapshots__/printDebugValue.test.ts.snap @@ -1,14 +1,14 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP exports[`printDebugValue 1`] = ` -Object { - "dependencies": Array [ - Object { +{ + "dependencies": [ + { "name": "ObservableObject@1.euro", }, - Object { - "dependencies": Array [ - Object { + { + "dependencies": [ + { "name": "ObservableObject@1.euro", }, ], @@ -20,7 +20,7 @@ Object { `; exports[`printDebugValue 2`] = ` -Object { +{ "name": "Autorun@2", } `; diff --git a/packages/mobx-react-lite/__tests__/__snapshots__/useAsObservableSource.deprecated.test.tsx.snap b/packages/mobx-react-lite/__tests__/__snapshots__/useAsObservableSource.deprecated.test.tsx.snap index adfc5e286..bac8d5a45 100644 --- a/packages/mobx-react-lite/__tests__/__snapshots__/useAsObservableSource.deprecated.test.tsx.snap +++ b/packages/mobx-react-lite/__tests__/__snapshots__/useAsObservableSource.deprecated.test.tsx.snap @@ -2,20 +2,20 @@ exports[`base useAsObservableSource should work with 1`] = ` [MockFunction] { - "calls": Array [ - Array [ + "calls": [ + [ "[mobx-react-lite] 'useAsObservableSource' is deprecated, please store the values directly in an observable, for example by using 'useLocalObservable', and sync future updates using 'useEffect' when needed. See the README for examples.", ], - Array [ + [ "[mobx-react-lite] 'useLocalStore' is deprecated, use 'useLocalObservable' instead.", ], ], - "results": Array [ - Object { + "results": [ + { "type": "return", "value": undefined, }, - Object { + { "type": "return", "value": undefined, }, diff --git a/packages/mobx-react-lite/__tests__/__snapshots__/useLocalStore.deprecated.test.tsx.snap b/packages/mobx-react-lite/__tests__/__snapshots__/useLocalStore.deprecated.test.tsx.snap index ea975d014..da834bf78 100644 --- a/packages/mobx-react-lite/__tests__/__snapshots__/useLocalStore.deprecated.test.tsx.snap +++ b/packages/mobx-react-lite/__tests__/__snapshots__/useLocalStore.deprecated.test.tsx.snap @@ -2,13 +2,13 @@ exports[`base useLocalStore should work 1`] = ` [MockFunction] { - "calls": Array [ - Array [ + "calls": [ + [ "[mobx-react-lite] 'useLocalStore' is deprecated, use 'useLocalObservable' instead.", ], ], - "results": Array [ - Object { + "results": [ + { "type": "return", "value": undefined, }, @@ -18,13 +18,13 @@ exports[`base useLocalStore should work 1`] = ` exports[`is used to keep observable within component body with props and useObserver 1`] = ` [MockFunction] { - "calls": Array [ - Array [ + "calls": [ + [ "[mobx-react-lite] 'useAsObservableSource' is deprecated, please store the values directly in an observable, for example by using 'useLocalObservable', and sync future updates using 'useEffect' when needed. See the README for examples.", ], ], - "results": Array [ - Object { + "results": [ + { "type": "return", "value": undefined, }, diff --git a/packages/mobx-react-lite/__tests__/strictAndConcurrentModeUsingFinalizationRegistry.test.tsx b/packages/mobx-react-lite/__tests__/strictAndConcurrentModeUsingFinalizationRegistry.test.tsx index d10b894fd..7bfac4c0c 100644 --- a/packages/mobx-react-lite/__tests__/strictAndConcurrentModeUsingFinalizationRegistry.test.tsx +++ b/packages/mobx-react-lite/__tests__/strictAndConcurrentModeUsingFinalizationRegistry.test.tsx @@ -13,6 +13,16 @@ expect(observerFinalizationRegistry).toBeInstanceOf(globalThis.FinalizationRegis afterEach(cleanup) +function nextFrame() { + return new Promise(accept => setTimeout(accept, 1)) +} + +async function gc_cycle() { + await nextFrame() + gc() + await nextFrame() +} + test("uncommitted components should not leak observations", async () => { jest.setTimeout(30_000) const store = mobx.observable({ count1: 0, count2: 0 }) @@ -42,8 +52,8 @@ test("uncommitted components should not leak observations", async () => { ) // Allow gc to kick in in case to let finalization registry cleanup - await new Promise(resolve => setTimeout(resolve, 100)) - gc() + await gc_cycle() + // Can take a while (especially on CI) before gc actually calls the registry await waitFor( () => { diff --git a/packages/mobx-react-lite/jest.setup.ts b/packages/mobx-react-lite/jest.setup.ts index 5ae6e034c..c02f52ea9 100644 --- a/packages/mobx-react-lite/jest.setup.ts +++ b/packages/mobx-react-lite/jest.setup.ts @@ -1,6 +1,8 @@ import "@testing-library/jest-dom/extend-expect" import { configure } from "mobx" +global.setImmediate = global.setImmediate || ((fn, ...args) => global.setTimeout(fn, 0, ...args)) + configure({ enforceActions: "never" }) // @ts-ignore diff --git a/packages/mobx-react/__tests__/__snapshots__/hooks.test.tsx.snap b/packages/mobx-react/__tests__/__snapshots__/hooks.test.tsx.snap index b2cc9df75..4826c8ab5 100644 --- a/packages/mobx-react/__tests__/__snapshots__/hooks.test.tsx.snap +++ b/packages/mobx-react/__tests__/__snapshots__/hooks.test.tsx.snap @@ -2,20 +2,20 @@ exports[`computed properties react to props when using hooks 1`] = ` [MockFunction] { - "calls": Array [ - Array [ + "calls": [ + [ "[mobx-react-lite] 'useAsObservableSource' is deprecated, please store the values directly in an observable, for example by using 'useLocalObservable', and sync future updates using 'useEffect' when needed. See the README for examples.", ], - Array [ + [ "[mobx-react-lite] 'useLocalStore' is deprecated, use 'useLocalObservable' instead.", ], ], - "results": Array [ - Object { + "results": [ + { "type": "return", "value": undefined, }, - Object { + { "type": "return", "value": undefined, }, diff --git a/packages/mobx-react/jest.setup.ts b/packages/mobx-react/jest.setup.ts index 5ae6e034c..c02f52ea9 100644 --- a/packages/mobx-react/jest.setup.ts +++ b/packages/mobx-react/jest.setup.ts @@ -1,6 +1,8 @@ import "@testing-library/jest-dom/extend-expect" import { configure } from "mobx" +global.setImmediate = global.setImmediate || ((fn, ...args) => global.setTimeout(fn, 0, ...args)) + configure({ enforceActions: "never" }) // @ts-ignore diff --git a/packages/mobx-react/src/observer.tsx b/packages/mobx-react/src/observer.tsx index 9f5c5eb7f..a16bb1388 100644 --- a/packages/mobx-react/src/observer.tsx +++ b/packages/mobx-react/src/observer.tsx @@ -7,7 +7,12 @@ import { IReactComponent } from "./types/IReactComponent" /** * Observer function / decorator */ -export function observer(component: T): T { +export function observer(component: T, context: ClassDecoratorContext): void +export function observer(component: T): T +export function observer(component: T, context?: ClassDecoratorContext): T { + if (context && context.kind !== "class") { + throw new Error("The @observer decorator can be used on classes only") + } if (component["isMobxInjector"] === true) { console.warn( "Mobx observer: You are trying to use `observer` on a component that already has `inject`. Please apply `observer` before applying `inject`" diff --git a/packages/mobx-undecorate/__tests__/cli.spec.tsx b/packages/mobx-undecorate/__tests__/cli.spec.tsx index 826bc737e..3ceede7a3 100644 --- a/packages/mobx-undecorate/__tests__/cli.spec.tsx +++ b/packages/mobx-undecorate/__tests__/cli.spec.tsx @@ -5,18 +5,18 @@ const dedent = require("dedent-js") test("run cli #2506 #3142", () => { // #3142 - the white space must be in cwd - const cwd = join(__dirname, "fixtures", "some path"); + const cwd = join(__dirname, "fixtures", "some path") const testFile = join(cwd, "some file.tsx") const baseContent = dedent(`import { observable } from "mobx"; class Test { @observable x = 1; } - `) + `) mkdirSync(dirname(testFile), { recursive: true }) writeFileSync(testFile, baseContent) execSync("node ../../../cli.js", { cwd }) expect(readFileSync(testFile, "utf8")).toMatchInlineSnapshot(` - "import { observable, makeObservable } from \\"mobx\\"; + "import { observable, makeObservable } from "mobx"; class Test { x = 1; @@ -64,8 +64,8 @@ test("run cli with --parseTsAsNonJsx #2754", () => { cwd: join(__dirname, "fixtures") }) expect(readFileSync(testNonJsxFile, "utf8")).toMatchInlineSnapshot(` - "import { useSearch } from \\"./useSearch\\" - import { observable, makeObservable } from \\"mobx\\"; + "import { useSearch } from "./useSearch" + import { observable, makeObservable } from "mobx"; class Test { x = 1; @@ -79,7 +79,7 @@ test("run cli with --parseTsAsNonJsx #2754", () => { export function useAlias(): string { const parsedSearch = useSearch() - return (parsedSearch.alias || \\"\\").toUpperCase() + return (parsedSearch.alias || "").toUpperCase() }" `) expect(readFileSync(testJsxFile, "utf8")).toMatchInlineSnapshot(` diff --git a/packages/mobx-undecorate/__tests__/undecorate.spec.ts b/packages/mobx-undecorate/__tests__/undecorate.spec.ts index a5744140d..ca15d6952 100644 --- a/packages/mobx-undecorate/__tests__/undecorate.spec.ts +++ b/packages/mobx-undecorate/__tests__/undecorate.spec.ts @@ -25,20 +25,20 @@ describe("general", () => { field /*2 */ = /*3*/ 1 /*4*/ }`) ).toMatchInlineSnapshot(` - "import { observable, makeObservable } from \\"mobx\\"; - - class Box { - /*0*/ - /*1*/ - field /*2 */ = /*3*/ 1; /*4*/ - - constructor() { - makeObservable(this, { - field: observable - }); - } - }" - `) + "import { observable, makeObservable } from "mobx"; + + class Box { + /*0*/ + /*1*/ + field /*2 */ = /*3*/ 1; /*4*/ + + constructor() { + makeObservable(this, { + field: observable + }); + } + }" + `) }) test("basic observable - skip imports", () => { @@ -109,7 +109,7 @@ describe("general", () => { } `) ).toMatchInlineSnapshot(` - "import { observable, makeObservable } from \\"mobx\\"; + "import { observable, makeObservable } from "mobx"; class ExtendsHasMethod extends Box { x = 1; @@ -125,7 +125,7 @@ describe("general", () => { // test method() { - console.log(\\"hi\\") + console.log("hi") } }" `) @@ -144,20 +144,20 @@ describe("general", () => { } }`) ).toMatchInlineSnapshot(` - "import { observable, makeObservable } from \\"mobx\\"; + "import { observable, makeObservable } from "mobx"; - class ExtendsHasConstructor { - x = 1; + class ExtendsHasConstructor { + x = 1; - constructor() { - makeObservable(this, { - x: observable - }); + constructor() { + makeObservable(this, { + x: observable + }); - console.log(\\"hi\\") - } - }" - `) + console.log("hi") + } + }" + `) }) test("extended class with constructor", () => { @@ -175,22 +175,22 @@ describe("general", () => { } `) ).toMatchInlineSnapshot(` - "import { observable, makeObservable } from \\"mobx\\"; + "import { observable, makeObservable } from "mobx"; - class ExtendsHasConstructorSuper extends Box { - x = 1; + class ExtendsHasConstructorSuper extends Box { + x = 1; - constructor() { - super() + constructor() { + super() - makeObservable(this, { - x: observable - }); + makeObservable(this, { + x: observable + }); - console.log(\\"hi\\") - } - }" - `) + console.log("hi") + } + }" + `) }) }) @@ -208,20 +208,20 @@ describe("action", () => { } `) ).toMatchInlineSnapshot(` - "import { action, makeObservable } from \\"mobx\\"; - - class Box { - x = (arg: number) => { - console.log('hi') - }; - - constructor() { - makeObservable(this, { - x: action.bound(\\"test\\") - }); - } - }" - `) + "import { action, makeObservable } from "mobx"; + + class Box { + x = (arg: number) => { + console.log('hi') + }; + + constructor() { + makeObservable(this, { + x: action.bound("test") + }); + } + }" + `) }) test("method - bound - named", () => { @@ -238,21 +238,21 @@ describe("action", () => { } `) ).toMatchInlineSnapshot(` - "import { action, makeObservable } from \\"mobx\\"; - - class Box { - constructor() { - makeObservable(this, { - x: action.bound(\\"test\\") - }); - } - - async x(arg: number): boolean { - console.log('hi') - return true - } - }" - `) + "import { action, makeObservable } from "mobx"; + + class Box { + constructor() { + makeObservable(this, { + x: action.bound("test") + }); + } + + async x(arg: number): boolean { + console.log('hi') + return true + } + }" + `) }) test("method - bound - named - generator", () => { @@ -269,21 +269,21 @@ describe("action", () => { } `) ).toMatchInlineSnapshot(` - "import { action, makeObservable } from \\"mobx\\"; - - class Box { - constructor() { - makeObservable(this, { - x: action.bound(\\"test\\") - }); - } - - *x(arg: number): boolean { - console.log('hi') - return true - } - }" - `) + "import { action, makeObservable } from "mobx"; + + class Box { + constructor() { + makeObservable(this, { + x: action.bound("test") + }); + } + + *x(arg: number): boolean { + console.log('hi') + return true + } + }" + `) }) test("field - named", () => { @@ -300,21 +300,21 @@ describe("action", () => { } `) ).toMatchInlineSnapshot(` - "import { action, makeObservable } from \\"mobx\\"; - - class Box { - x = async (arg: number): boolean => { - console.log('hi') - return true - }; - - constructor() { - makeObservable(this, { - x: action(\\"test\\") - }); - } - }" - `) + "import { action, makeObservable } from "mobx"; + + class Box { + x = async (arg: number): boolean => { + console.log('hi') + return true + }; + + constructor() { + makeObservable(this, { + x: action("test") + }); + } + }" + `) }) test("field - unnamed", () => { @@ -331,21 +331,21 @@ describe("action", () => { } `) ).toMatchInlineSnapshot(` - "import { action, makeObservable } from \\"mobx\\"; - - class Box { - x = (arg: number): boolean => { - console.log('hi') - return true - }; - - constructor() { - makeObservable(this, { - x: action - }); - } - }" - `) + "import { action, makeObservable } from "mobx"; + + class Box { + x = (arg: number): boolean => { + console.log('hi') + return true + }; + + constructor() { + makeObservable(this, { + x: action + }); + } + }" + `) }) test("method - bound - unnamed", () => { @@ -362,21 +362,21 @@ describe("action", () => { } `) ).toMatchInlineSnapshot(` - "import { action, makeObservable } from \\"mobx\\"; - - class Box { - constructor() { - makeObservable(this, { - x: action.bound - }); - } - - x(arg: number): boolean { - console.log('hi') - return true - } - }" - `) + "import { action, makeObservable } from "mobx"; + + class Box { + constructor() { + makeObservable(this, { + x: action.bound + }); + } + + x(arg: number): boolean { + console.log('hi') + return true + } + }" + `) }) test("method - unbound - named", () => { @@ -393,21 +393,21 @@ describe("action", () => { } `) ).toMatchInlineSnapshot(` - "import { action, makeObservable } from \\"mobx\\"; - - class Box { - constructor() { - makeObservable(this, { - x: action(\\"test\\") - }); - } - - x(arg: number): boolean { - console.log('hi') - return true - } - }" - `) + "import { action, makeObservable } from "mobx"; + + class Box { + constructor() { + makeObservable(this, { + x: action("test") + }); + } + + x(arg: number): boolean { + console.log('hi') + return true + } + }" + `) }) test("method - unbound - unnamed", () => { @@ -424,21 +424,21 @@ describe("action", () => { } `) ).toMatchInlineSnapshot(` - "import { action, makeObservable } from \\"mobx\\"; - - class Box { - constructor() { - makeObservable(this, { - x: action - }); - } - - x(arg: number): boolean { - console.log('hi') - return true - } - }" - `) + "import { action, makeObservable } from "mobx"; + + class Box { + constructor() { + makeObservable(this, { + x: action + }); + } + + x(arg: number): boolean { + console.log('hi') + return true + } + }" + `) }) test("method - unbound - computed name", () => { @@ -455,21 +455,21 @@ describe("action", () => { } `) ).toMatchInlineSnapshot(` - "import { action, makeObservable } from \\"mobx\\"; - - class Box { - constructor() { - makeObservable(this, { - ['x' + 'y']: action - }); - } - - ['x' + 'y'](arg: number): boolean { - console.log('hi') - return true - } - }" - `) + "import { action, makeObservable } from "mobx"; + + class Box { + constructor() { + makeObservable(this, { + ['x' + 'y']: action + }); + } + + ['x' + 'y'](arg: number): boolean { + console.log('hi') + return true + } + }" + `) }) test("method - override", () => { @@ -490,23 +490,23 @@ describe("action", () => { } `) ).toMatchInlineSnapshot(` - "import { action, override, makeObservable } from \\"mobx\\"; - - class Box extends Shape { - constructor(arg) { - super(arg) - - makeObservable(this, { - method: override - }); - } - - override method(arg: number): boolean { - console.log('hi') - return true - } - }" - `) + "import { action, override, makeObservable } from "mobx"; + + class Box extends Shape { + constructor(arg) { + super(arg) + + makeObservable(this, { + method: override + }); + } + + override method(arg: number): boolean { + console.log('hi') + return true + } + }" + `) }) test("method - override - keepDecorators", () => { @@ -530,21 +530,21 @@ describe("action", () => { { keepDecorators: true } ) ).toMatchInlineSnapshot(` - "import { action, override, makeObservable } from \\"mobx\\"; - - class Box extends Shape { - constructor(arg) { - super(arg) - makeObservable(this); - } - - @override - override method(arg: number): boolean { - console.log('hi') - return true - } - }" - `) + "import { action, override, makeObservable } from "mobx"; + + class Box extends Shape { + constructor(arg) { + super(arg) + makeObservable(this); + } + + @override + override method(arg: number): boolean { + console.log('hi') + return true + } + }" + `) }) }) @@ -559,18 +559,18 @@ describe("observable", () => { } `) ).toMatchInlineSnapshot(` - "import { observable, makeObservable } from \\"mobx\\"; - - class Box { - x = 1; - - constructor() { - makeObservable(this, { - x: observable - }); - } - }" - `) + "import { observable, makeObservable } from "mobx"; + + class Box { + x = 1; + + constructor() { + makeObservable(this, { + x: observable + }); + } + }" + `) }) test("observable - shallow ", () => { @@ -583,7 +583,7 @@ describe("observable", () => { } `) ).toMatchInlineSnapshot(` - "import { observable, makeObservable } from \\"mobx\\"; + "import { observable, makeObservable } from "mobx"; class Box { x = 1; @@ -607,14 +607,14 @@ describe("observable", () => { } `) ).toMatchInlineSnapshot(` - "import { observable, makeObservable } from \\"mobx\\"; + "import { observable, makeObservable } from "mobx"; class Box { ['x'] = 1; constructor() { makeObservable(this, { - [\\"x\\"]: observable.shallow + ["x"]: observable.shallow }); } }" @@ -635,20 +635,20 @@ describe("computed", () => { } `) ).toMatchInlineSnapshot(` - "import { computed, makeObservable } from \\"mobx\\"; - - class Box { - constructor() { - makeObservable(this, { - x: computed - }); - } - - get x() { - return 1; - } - }" - `) + "import { computed, makeObservable } from "mobx"; + + class Box { + constructor() { + makeObservable(this, { + x: computed + }); + } + + get x() { + return 1; + } + }" + `) }) test("computed - setter", () => { @@ -666,23 +666,23 @@ describe("computed", () => { } `) ).toMatchInlineSnapshot(` - "import { computed, makeObservable } from \\"mobx\\"; - - class Box { - constructor() { - makeObservable(this, { - x: computed - }); - } - - get x() { - return 1; - } - set x(v) { - console.log(v) - } - }" - `) + "import { computed, makeObservable } from "mobx"; + + class Box { + constructor() { + makeObservable(this, { + x: computed + }); + } + + get x() { + return 1; + } + set x(v) { + console.log(v) + } + }" + `) }) test("computed - setter - options", () => { @@ -703,26 +703,26 @@ describe("computed", () => { } `) ).toMatchInlineSnapshot(` - "import { computed, makeObservable } from \\"mobx\\"; - - class Box { - constructor() { - makeObservable(this, { - x: computed({ name: \\"test\\" }) - }); - } - - get x() { - return 1; - } - set y(z) { - console.log(\\"wrong\\"); - } - set x(v) { - console.log(v) - } - }" - `) + "import { computed, makeObservable } from "mobx"; + + class Box { + constructor() { + makeObservable(this, { + x: computed({ name: "test" }) + }); + } + + get x() { + return 1; + } + set y(z) { + console.log("wrong"); + } + set x(v) { + console.log(v) + } + }" + `) }) test("computed - setter - struct", () => { @@ -740,23 +740,23 @@ describe("computed", () => { } `) ).toMatchInlineSnapshot(` - "import { computed, makeObservable } from \\"mobx\\"; - - class Box { - constructor() { - makeObservable(this, { - x: computed.struct - }); - } - - get x() { - return 1; - } - set x(v) { - console.log(v) - } - }" - `) + "import { computed, makeObservable } from "mobx"; + + class Box { + constructor() { + makeObservable(this, { + x: computed.struct + }); + } + + get x() { + return 1; + } + set x(v) { + console.log(v) + } + }" + `) }) }) @@ -789,7 +789,7 @@ describe("decorate", () => { }) `) ).toMatchInlineSnapshot(` - "import { observable, computed, action, makeObservable } from \\"mobx\\" + "import { observable, computed, action, makeObservable } from "mobx" class Box { width = 3 @@ -843,9 +843,9 @@ describe("decorate", () => { }) `) ).toMatchInlineSnapshot(` - "import { observable, computed, action, makeObservable } from \\"mobx\\" + "import { observable, computed, action, makeObservable } from "mobx" - test(\\"a\\", () => { + test("a", () => { class Box { width = 3 @@ -857,7 +857,7 @@ describe("decorate", () => { } }) - test(\\"b\\", () => { + test("b", () => { class Box { constructor() { makeObservable(this, { @@ -887,7 +887,7 @@ describe("decorate", () => { }) `) ).toMatchInlineSnapshot(` - "import { observable, computed, action, makeObservable } from \\"mobx\\" + "import { observable, computed, action, makeObservable } from "mobx" class Box { constructor() { @@ -916,7 +916,7 @@ describe("decorate", () => { }) `) ).toMatchInlineSnapshot(` - "import { observable, computed, action, makeObservable } from \\"mobx\\" + "import { observable, computed, action, makeObservable } from "mobx" const box = { @@ -940,13 +940,13 @@ describe("decorate", () => { }) `) ).toMatchInlineSnapshot(` - "import { observable, computed, action, makeObservable } from \\"mobx\\" + "import { observable, computed, action, makeObservable } from "mobx" - makeObservable({}, { - width: observable, - height: observable.shallow, - })" - `) + makeObservable({}, { + width: observable, + height: observable.shallow, + })" + `) }) }) @@ -968,15 +968,15 @@ describe("privates", () => { ` ) ).toMatchInlineSnapshot(` - "import { observable, computed, action, makeObservable } from \\"mobx\\" + "import { observable, computed, action, makeObservable } from "mobx" class TryToGetThis { private privateField1: number = 1; protected privateField2 = 1; - public publicField: string = \\"test\\"; + public publicField: string = "test"; constructor() { - makeObservable(this, { + makeObservable(this, { privateField1: observable, privateField2: observable, publicField: observable @@ -1006,7 +1006,7 @@ describe("privates", () => { } ) ).toMatchInlineSnapshot(` - "import { observable, computed, action, makeObservable } from \\"mobx\\" + "import { observable, computed, action, makeObservable } from "mobx" class TryToGetThis { @observable @@ -1014,7 +1014,7 @@ describe("privates", () => { @observable protected privateField2 = 1 @observable - public publicField: string = \\"test\\" + public publicField: string = "test" constructor() { makeObservable(this); @@ -1116,7 +1116,7 @@ describe("@observer", () => { /* 1 */ - export const X = inject(\\"test\\")(class /* 2 */ /* 3 */ X extends React.Component { + export const X = inject("test")(class /* 2 */ /* 3 */ X extends React.Component { });" `) @@ -1139,7 +1139,7 @@ describe("@observer", () => { /* 1 */ - export const X = inject(\\"test\\")(observer(class /* 2 */ /* 3 */ X extends React.Component { + export const X = inject("test")(observer(class /* 2 */ /* 3 */ X extends React.Component { }));" `) @@ -1162,8 +1162,8 @@ describe("@observer", () => { ) ).toMatchInlineSnapshot(` "import {observer, inject} from 'mobx-react' - import { observable, makeObservable } from \\"mobx\\"; - import {Component} from \\"react\\" + import { observable, makeObservable } from "mobx"; + import {Component} from "react" const X = observer(class X extends React.Component { field = 1; @@ -1196,8 +1196,8 @@ describe("@observer", () => { ) ).toMatchInlineSnapshot(` "import {observer, inject} from 'mobx-react' - import { observable, makeObservable } from \\"mobx\\"; - import {PureComponent} from \\"react\\" + import { observable, makeObservable } from "mobx"; + import {PureComponent} from "react" const X = observer(class X extends PureComponent<{x: boolean}> { field = 1; @@ -1230,8 +1230,8 @@ describe("@observer", () => { ) ).toMatchInlineSnapshot(` "import {observer, inject} from 'mobx-react' - import { observable, makeObservable } from \\"mobx\\"; - import {PureComponent} from \\"react\\" + import { observable, makeObservable } from "mobx"; + import {PureComponent} from "react" @observer class X extends PureComponent<{x: boolean}> { @observable field = 1 @@ -1376,7 +1376,7 @@ test("class comp with observer, inject and decorator from another package", () = import {withRouter} from 'react-router-dom' /* 1 */ export const X = withRouter( - inject(\\"test\\")(observer(class /* 2 */ /* 3 */ X extends React.Component {})) + inject("test")(observer(class /* 2 */ /* 3 */ X extends React.Component {})) );" `) }) @@ -1427,9 +1427,9 @@ test("class default export comp with observer and inject", () => { `) ).toMatchInlineSnapshot(` "import {observer, inject} from 'mobx-react' - + class X extends React.Component {} - export default inject(\\"test\\")(observer(X));" + export default inject("test")(observer(X));" `) }) @@ -1449,8 +1449,8 @@ test("class default export comp with observer and inject", () => { import {withRouter} from 'react-router-dom' class X extends React.Component {} - - export default withRouter(inject(\\"test\\")(observer(X)))" + + export default withRouter(inject("test")(observer(X)))" `) }) diff --git a/packages/mobx/__tests__/decorators_20223/stage3-decorators.ts b/packages/mobx/__tests__/decorators_20223/stage3-decorators.ts new file mode 100644 index 000000000..e76c8f9fb --- /dev/null +++ b/packages/mobx/__tests__/decorators_20223/stage3-decorators.ts @@ -0,0 +1,1087 @@ +"use strict" + +import { + observe, + computed, + observable, + autorun, + extendObservable, + action, + IObservableArray, + IArrayWillChange, + IArrayWillSplice, + IObservableValue, + isObservable, + isObservableProp, + isObservableObject, + transaction, + IObjectDidChange, + spy, + configure, + isAction, + IAtom, + createAtom, + runInAction, + makeObservable +} from "../../src/mobx" +import { type ObservableArrayAdministration } from "../../src/internal" +import * as mobx from "../../src/mobx" + +const testFunction = function (a: any) {} + +// lazy wrapper around yest + +const t = { + equal(a: any, b: any) { + expect(a).toBe(b) + }, + deepEqual(a: any, b: any) { + expect(a).toEqual(b) + }, + notEqual(a: any, b: any) { + expect(a).not.toEqual(b) + }, + + throws(a: any, b: any) { + expect(a).toThrow(b) + } +} + +test("decorators", () => { + class Order { + @observable accessor price: number = 3 + @observable accessor amount: number = 2 + @observable accessor orders: string[] = [] + @observable accessor aFunction = testFunction + + @computed + get total() { + return this.amount * this.price * (1 + this.orders.length) + } + } + + const o = new Order() + t.equal(isObservableObject(o), true) + t.equal(isObservableProp(o, "amount"), true) + t.equal(isObservableProp(o, "total"), true) + + const events: any[] = [] + const d1 = observe(o, (ev: IObjectDidChange) => events.push(ev.name, (ev as any).oldValue)) + const d2 = observe(o, "price", ev => events.push(ev.newValue, ev.oldValue)) + const d3 = observe(o, "total", ev => events.push(ev.newValue, ev.oldValue)) + + o.price = 4 + + d1() + d2() + d3() + + o.price = 5 + + t.deepEqual(events, [ + 8, // new total + 6, // old total + 4, // new price + 3, // old price + "price", // event name + 3 // event oldValue + ]) +}) + +test("annotations", () => { + const fn0 = () => 0 + class Order { + @observable accessor price: number = 3 + @observable accessor amount: number = 2 + @observable accessor orders: string[] = [] + @observable accessor aFunction = fn0 + + @computed + get total() { + return this.amount * this.price * (1 + this.orders.length) + } + } + + const order1totals: number[] = [] + const order1 = new Order() + const order2 = new Order() + + const disposer = autorun(() => { + order1totals.push(order1.total) + }) + + order2.price = 4 + order1.amount = 1 + + t.equal(order1.price, 3) + t.equal(order1.total, 3) + t.equal(order2.total, 8) + order2.orders.push("bla") + t.equal(order2.total, 16) + + order1.orders.splice(0, 0, "boe", "hoi") + t.deepEqual(order1totals, [6, 3, 9]) + + disposer() + order1.orders.pop() + t.equal(order1.total, 6) + t.deepEqual(order1totals, [6, 3, 9]) + expect(isAction(order1.aFunction)).toBe(true) + expect(order1.aFunction()).toBe(0) + order1.aFunction = () => 1 + expect(isAction(order1.aFunction)).toBe(true) + expect(order1.aFunction()).toBe(1) +}) + +test("box", () => { + class Box { + @observable accessor uninitialized: any + @observable accessor height = 20 + @observable accessor sizes = [2] + @observable accessor someFunc = function () { + return 2 + } + @computed + get width() { + return this.height * this.sizes.length * this.someFunc() * (this.uninitialized ? 2 : 1) + } + @action("test") + addSize() { + this.sizes.push(3) + this.sizes.push(4) + } + } + + const box = new Box() + + const ar: number[] = [] + + autorun(() => { + ar.push(box.width) + }) + + t.deepEqual(ar.slice(), [40]) + box.height = 10 + t.deepEqual(ar.slice(), [40, 20]) + box.sizes.push(3, 4) + t.deepEqual(ar.slice(), [40, 20, 60]) + box.someFunc = () => 7 + t.deepEqual(ar.slice(), [40, 20, 60, 210]) + box.uninitialized = true + t.deepEqual(ar.slice(), [40, 20, 60, 210, 420]) + box.addSize() + expect(ar.slice()).toEqual([40, 20, 60, 210, 420, 700]) +}) + +test("computed setter should succeed", () => { + class Bla { + @observable accessor a = 3 + @computed + get propX() { + return this.a * 2 + } + set propX(v) { + this.a = v + } + } + + const b = new Bla() + t.equal(b.propX, 6) + b.propX = 4 + t.equal(b.propX, 8) +}) + +test("ClassFieldDecorators should NOT work without accessor without legacy compilation", () => { + expect(() => { + class Order { + @observable price: number = 3 + } + }).toThrowError("[MobX] Please use `@observable accessor price` instead of `@observable price`") +}) + +test("Reasonable error for decorator kind mismatch", () => { + expect(() => { + class Order { + // @ts-ignore + @computed total = 3 + } + }).toThrowError("[MobX] The decorator applied to 'total' cannot be used on a field element") +}) + +test("typescript: parameterized computed decorator", () => { + class TestClass { + @observable accessor x = 3 + @observable accessor y = 3 + @computed.struct + get boxedSum() { + return { sum: Math.round(this.x) + Math.round(this.y) } + } + } + + const t1 = new TestClass() + const changes: { sum: number }[] = [] + const d = autorun(() => changes.push(t1.boxedSum)) + + t1.y = 4 // change + t.equal(changes.length, 2) + t1.y = 4.2 // no change + t.equal(changes.length, 2) + transaction(() => { + t1.y = 3 + t1.x = 4 + }) // no change + t.equal(changes.length, 2) + t1.x = 6 // change + t.equal(changes.length, 3) + d() + + t.deepEqual(changes, [{ sum: 6 }, { sum: 7 }, { sum: 9 }]) +}) + +test("issue 165", () => { + function report(msg: string, value: T) { + // console.log(msg, ":", value) + return value + } + + class Card { + constructor(public game: Game, public id: number) { + makeObservable(this) + } + + @computed + get isWrong() { + return report( + "Computing isWrong for card " + this.id, + this.isSelected && this.game.isMatchWrong + ) + } + + @computed + get isSelected() { + return report( + "Computing isSelected for card" + this.id, + this.game.firstCardSelected === this || this.game.secondCardSelected === this + ) + } + } + + class Game { + @observable accessor firstCardSelected: Card | null = null + @observable accessor secondCardSelected: Card | null = null + + @computed + get isMatchWrong() { + return report( + "Computing isMatchWrong", + this.secondCardSelected !== null && + this.firstCardSelected!.id !== this.secondCardSelected.id + ) + } + } + + let game = new Game() + let card1 = new Card(game, 1), + card2 = new Card(game, 2) + + autorun(() => { + card1.isWrong + card2.isWrong + // console.log("card1.isWrong =", card1.isWrong) + // console.log("card2.isWrong =", card2.isWrong) + // console.log("------------------------------") + }) + + // console.log("Selecting first card") + game.firstCardSelected = card1 + // console.log("Selecting second card") + game.secondCardSelected = card2 + + t.equal(card1.isWrong, true) + t.equal(card2.isWrong, true) +}) + +test("issue 191 - shared initializers (2022.3)", () => { + class Test { + @observable accessor obj = { a: 1 } + @observable accessor array = [2] + } + + const t1 = new Test() + t1.obj.a = 2 + t1.array.push(3) + + const t2 = new Test() + t2.obj.a = 3 + t2.array.push(4) + + t.notEqual(t1.obj, t2.obj) + t.notEqual(t1.array, t2.array) + t.equal(t1.obj.a, 2) + t.equal(t2.obj.a, 3) + + t.deepEqual(t1.array.slice(), [2, 3]) + t.deepEqual(t2.array.slice(), [2, 4]) +}) + +function normalizeSpyEvents(events: any[]) { + events.forEach(ev => { + delete ev.fn + delete ev.time + }) + return events +} + +test("action decorator (2022.3)", () => { + class Store { + constructor(private multiplier: number) { + makeObservable(this) + } + + @action + add(a: number, b: number): number { + return (a + b) * this.multiplier + } + } + + const store1 = new Store(2) + const store2 = new Store(3) + const events: any[] = [] + const d = spy(events.push.bind(events)) + t.equal(store1.add(3, 4), 14) + t.equal(store2.add(2, 2), 12) + t.equal(store1.add(1, 1), 4) + + t.deepEqual(normalizeSpyEvents(events), [ + { arguments: [3, 4], name: "add", spyReportStart: true, object: store1, type: "action" }, + { type: "report-end", spyReportEnd: true }, + { arguments: [2, 2], name: "add", spyReportStart: true, object: store2, type: "action" }, + { type: "report-end", spyReportEnd: true }, + { arguments: [1, 1], name: "add", spyReportStart: true, object: store1, type: "action" }, + { type: "report-end", spyReportEnd: true } + ]) + + d() +}) + +test("custom action decorator (2022.3)", () => { + class Store { + constructor(private multiplier: number) { + makeObservable(this) + } + + @action("zoem zoem") + add(a: number, b: number): number { + return (a + b) * this.multiplier + } + } + + const store1 = new Store(2) + const store2 = new Store(3) + const events: any[] = [] + const d = spy(events.push.bind(events)) + t.equal(store1.add(3, 4), 14) + t.equal(store2.add(2, 2), 12) + t.equal(store1.add(1, 1), 4) + + t.deepEqual(normalizeSpyEvents(events), [ + { + arguments: [3, 4], + name: "zoem zoem", + spyReportStart: true, + object: store1, + type: "action" + }, + { type: "report-end", spyReportEnd: true }, + { + arguments: [2, 2], + name: "zoem zoem", + spyReportStart: true, + object: store2, + type: "action" + }, + { type: "report-end", spyReportEnd: true }, + { + arguments: [1, 1], + name: "zoem zoem", + spyReportStart: true, + object: store1, + type: "action" + }, + { type: "report-end", spyReportEnd: true } + ]) + + d() +}) + +test("action decorator on field (2022.3)", () => { + class Store { + constructor(private multiplier: number) { + makeObservable(this) + } + + @action + add = (a: number, b: number) => { + return (a + b) * this.multiplier + } + } + + const store1 = new Store(2) + const store2 = new Store(7) + expect(store1.add).not.toEqual(store2.add) + + const events: any[] = [] + const d = spy(events.push.bind(events)) + t.equal(store1.add(3, 4), 14) + t.equal(store2.add(4, 5), 63) + t.equal(store1.add(2, 2), 8) + + t.deepEqual(normalizeSpyEvents(events), [ + { arguments: [3, 4], name: "add", spyReportStart: true, object: store1, type: "action" }, + { type: "report-end", spyReportEnd: true }, + { arguments: [4, 5], name: "add", spyReportStart: true, object: store2, type: "action" }, + { type: "report-end", spyReportEnd: true }, + { arguments: [2, 2], name: "add", spyReportStart: true, object: store1, type: "action" }, + { type: "report-end", spyReportEnd: true } + ]) + + d() +}) + +test("custom action decorator on field (2022.3)", () => { + class Store { + constructor(private multiplier: number) { + makeObservable(this) + } + + @action("zoem zoem") + add = (a: number, b: number) => { + return (a + b) * this.multiplier + } + } + + const store1 = new Store(2) + const store2 = new Store(7) + + const events: any[] = [] + const d = spy(events.push.bind(events)) + t.equal(store1.add(3, 4), 14) + t.equal(store2.add(4, 5), 63) + t.equal(store1.add(2, 2), 8) + + t.deepEqual(normalizeSpyEvents(events), [ + { + arguments: [3, 4], + name: "zoem zoem", + spyReportStart: true, + object: store1, + type: "action" + }, + { type: "report-end", spyReportEnd: true }, + { + arguments: [4, 5], + name: "zoem zoem", + spyReportStart: true, + object: store2, + type: "action" + }, + { type: "report-end", spyReportEnd: true }, + { + arguments: [2, 2], + name: "zoem zoem", + spyReportStart: true, + object: store1, + type: "action" + }, + { type: "report-end", spyReportEnd: true } + ]) + + d() +}) + +test("267 (2022.3) should be possible to declare properties observable outside strict mode", () => { + configure({ enforceActions: "observed" }) + + class Store { + @observable accessor timer: number | null = null + } + + configure({ enforceActions: "never" }) +}) + +test("288 atom not detected for object property", () => { + class Store { + @observable accessor foo = "" + } + + const store = new Store() + + mobx.observe( + store, + "foo", + () => { + // console.log("Change observed") + }, + true + ) +}) + +test.skip("observable performance - ts - decorators", () => { + const AMOUNT = 100000 + + class A { + @observable accessor a = 1 + @observable accessor b = 2 + @observable accessor c = 3 + @computed + get d() { + return this.a + this.b + this.c + } + } + + const objs: any[] = [] + const start = Date.now() + + for (let i = 0; i < AMOUNT; i++) objs.push(new A()) + + console.log("created in ", Date.now() - start) + + for (let j = 0; j < 4; j++) { + for (let i = 0; i < AMOUNT; i++) { + const obj = objs[i] + obj.a += 3 + obj.b *= 4 + obj.c = obj.b - obj.a + obj.d + } + } + + console.log("changed in ", Date.now() - start) +}) + +test("unbound methods", () => { + class A { + // shared across all instances + @action + m1() {} + } + + const a1 = new A() + const a2 = new A() + + t.equal(a1.m1, a2.m1) + t.equal(Object.hasOwnProperty.call(a1, "m1"), false) + t.equal(Object.hasOwnProperty.call(a2, "m1"), false) +}) + +test("inheritance", () => { + class A { + @observable accessor a = 2 + } + + class B extends A { + @observable accessor b = 3 + @computed + get c() { + return this.a + this.b + } + constructor() { + super() + makeObservable(this) + } + } + const b1 = new B() + const b2 = new B() + const values: any[] = [] + mobx.autorun(() => values.push(b1.c + b2.c)) + + b1.a = 3 + b1.b = 4 + b2.b = 5 + b2.a = 6 + + t.deepEqual(values, [10, 11, 12, 14, 18]) +}) + +test("inheritance overrides observable", () => { + class A { + @observable accessor a = 2 + } + + class B { + @observable accessor a = 5 + @observable accessor b = 3 + @computed + get c() { + return this.a + this.b + } + } + + const b1 = new B() + const b2 = new B() + const values: any[] = [] + mobx.autorun(() => values.push(b1.c + b2.c)) + + b1.a = 3 + b1.b = 4 + b2.b = 5 + b2.a = 6 + + t.deepEqual(values, [16, 14, 15, 17, 18]) +}) + +test("reusing initializers", () => { + class A { + @observable accessor a = 3 + @observable accessor b = this.a + 2 + @computed + get c() { + return this.a + this.b + } + @computed + get d() { + return this.c + 1 + } + } + + const a = new A() + const values: any[] = [] + mobx.autorun(() => values.push(a.d)) + + a.a = 4 + t.deepEqual(values, [9, 10]) +}) + +test("enumerability", () => { + class A { + @observable accessor a = 1 // enumerable, on proto + @computed + get b() { + return this.a + } // non-enumerable, (and, ideally, on proto) + @action + m() {} // non-enumerable, on proto + } + + const a = new A() + + // not initialized yet + let ownProps = Object.keys(a) + let enumProps: string[] = [] + for (const key in a) enumProps.push(key) + + t.deepEqual(ownProps, []) + + t.deepEqual(enumProps, []) + + t.equal("a" in a, true) + // eslint-disable-next-line + t.equal(a.hasOwnProperty("a"), false) + // eslint-disable-next-line + t.equal(a.hasOwnProperty("b"), false) + // eslint-disable-next-line + t.equal(a.hasOwnProperty("m"), false) + + t.equal(mobx.isAction(a.m), true) + + // after initialization + a.a + a.b + a.m + + ownProps = Object.keys(a) + enumProps = [] + for (const key in a) enumProps.push(key) + + t.deepEqual(ownProps, []) + + t.deepEqual(enumProps, []) + + t.equal("a" in a, true) + // eslint-disable-next-line + t.equal(a.hasOwnProperty("a"), false) + // eslint-disable-next-line + t.equal(a.hasOwnProperty("b"), false) + // eslint-disable-next-line + t.equal(a.hasOwnProperty("m"), false) +}) + +// Re-enable when late initialization is supported in TS +test.skip("issue 285 (2022.3)", () => { + const { observable, toJS } = mobx + + class Todo { + id = 1 + @observable accessor title: string + @observable accessor finished = false + @observable accessor childThings = [1, 2, 3] + @computed get bla() { + return 3 + } + @action someMethod() {} + constructor(title: string) { + this.title = title + } + } + + const todo = new Todo("Something to do") + + t.deepEqual(toJS(todo), { + id: 1, + title: "Something to do", + finished: false, + childThings: [1, 2, 3] + }) +}) + +// Re-enable when late initialization is supported in TS +test.skip("verify object assign (2022.3) (legacy/field decorator)", () => { + class Todo { + @observable accessor title = "test" + @computed + get upperCase() { + return this.title.toUpperCase() + } + } + + t.deepEqual((Object as any).assign({}, new Todo()), { + title: "test" + }) +}) + +test("373 - fix isObservable for unused computed", () => { + class Bla { + ts_53332_workaround: string = "" + + @computed + get computedVal() { + return 3 + } + constructor() { + makeObservable(this) + t.equal(isObservableProp(this, "computedVal"), true) + this.computedVal + t.equal(isObservableProp(this, "computedVal"), true) + } + } + + new Bla() +}) + +test("705 - setter undoing caching (2022.3)", () => { + let recomputes = 0 + let autoruns = 0 + + class Person { + @observable accessor name: string = "" + @observable accessor title: string = "" + + // Typescript bug: if fullName is before the getter, the property is defined twice / incorrectly, see #705 + // set fullName(val) { + // // Noop + // } + @computed + get fullName() { + recomputes++ + return this.title + " " + this.name + } + // Should also be possible to define the setter _before_ the fullname + set fullName(val) { + // Noop + } + } + + let p1 = new Person() + p1.name = "Tom Tank" + p1.title = "Mr." + + t.equal(recomputes, 0) + t.equal(autoruns, 0) + + const d1 = autorun(() => { + autoruns++ + p1.fullName + }) + + const d2 = autorun(() => { + autoruns++ + p1.fullName + }) + + t.equal(recomputes, 1) + t.equal(autoruns, 2) + + p1.title = "Master" + t.equal(recomputes, 2) + t.equal(autoruns, 4) + + d1() + d2() +}) + +test("@observable.ref (2022.3)", () => { + class A { + @observable.ref accessor ref = { a: 3 } + } + + const a = new A() + t.equal(a.ref.a, 3) + t.equal(mobx.isObservable(a.ref), false) + t.equal(mobx.isObservableProp(a, "ref"), true) +}) + +test("@observable.shallow (2022.3)", () => { + class A { + @observable.shallow accessor arr = [{ todo: 1 }] + } + + const a = new A() + const todo2 = { todo: 2 } + a.arr.push(todo2) + t.equal(mobx.isObservable(a.arr), true) + t.equal(mobx.isObservableProp(a, "arr"), true) + t.equal(mobx.isObservable(a.arr[0]), false) + t.equal(mobx.isObservable(a.arr[1]), false) + t.equal(a.arr[1] === todo2, true) +}) + +test("@observable.shallow - 2 (2022.3)", () => { + class A { + @observable.shallow accessor arr: Record = { x: { todo: 1 } } + } + + const a = new A() + const todo2 = { todo: 2 } + a.arr.y = todo2 + t.equal(mobx.isObservable(a.arr), true) + t.equal(mobx.isObservableProp(a, "arr"), true) + t.equal(mobx.isObservable(a.arr.x), false) + t.equal(mobx.isObservable(a.arr.y), false) + t.equal(a.arr.y === todo2, true) +}) + +test("@observable.deep (2022.3)", () => { + class A { + @observable.deep accessor arr = [{ todo: 1 }] + } + + const a = new A() + const todo2 = { todo: 2 } + a.arr.push(todo2) + + t.equal(mobx.isObservable(a.arr), true) + t.equal(mobx.isObservableProp(a, "arr"), true) + t.equal(mobx.isObservable(a.arr[0]), true) + t.equal(mobx.isObservable(a.arr[1]), true) + t.equal(a.arr[1] !== todo2, true) + t.equal(isObservable(todo2), false) +}) + +test("action.bound binds (2022.3)", () => { + class A { + @observable accessor x = 0 + @action.bound + inc(value: number) { + this.x += value + } + } + + const a = new A() + const runner = a.inc + runner(2) + + t.equal(a.x, 2) +}) + +test("@computed.equals (2022.3)", () => { + const sameTime = (from: Time, to: Time) => from.hour === to.hour && from.minute === to.minute + class Time { + constructor(hour: number, minute: number) { + makeObservable(this) + this.hour = hour + this.minute = minute + } + + @observable public accessor hour: number + @observable public accessor minute: number + + @computed({ equals: sameTime }) + public get time() { + return { hour: this.hour, minute: this.minute } + } + } + const time = new Time(9, 0) + + const changes: Array<{ hour: number; minute: number }> = [] + const disposeAutorun = autorun(() => changes.push(time.time)) + + t.deepEqual(changes, [{ hour: 9, minute: 0 }]) + time.hour = 9 + t.deepEqual(changes, [{ hour: 9, minute: 0 }]) + time.minute = 0 + t.deepEqual(changes, [{ hour: 9, minute: 0 }]) + time.hour = 10 + t.deepEqual(changes, [ + { hour: 9, minute: 0 }, + { hour: 10, minute: 0 } + ]) + time.minute = 30 + t.deepEqual(changes, [ + { hour: 9, minute: 0 }, + { hour: 10, minute: 0 }, + { hour: 10, minute: 30 } + ]) + + disposeAutorun() +}) + +test("1072 - @observable accessor without initial value and observe before first access", () => { + class User { + @observable accessor loginCount: number = 0 + } + + const user = new User() + observe(user, "loginCount", () => {}) +}) + +test("unobserved computed reads should warn with requiresReaction enabled", () => { + const consoleWarn = console.warn + const warnings: string[] = [] + console.warn = function (...args) { + warnings.push(...args) + } + try { + class A { + @observable accessor x = 0 + + @computed({ requiresReaction: true }) + get y() { + return this.x * 2 + } + } + + const a = new A() + + a.y + const d = mobx.reaction( + () => a.y, + () => {} + ) + a.y + d() + a.y + + expect(warnings.length).toEqual(2) + expect(warnings[0]).toContain( + "is being read outside a reactive context. Doing a full recompute." + ) + expect(warnings[1]).toContain( + "is being read outside a reactive context. Doing a full recompute." + ) + } finally { + console.warn = consoleWarn + } +}) + +test("multiple inheritance should work", () => { + class A { + @observable accessor x = 1 + } + + class B extends A { + @observable accessor y = 1 + + constructor() { + super() + makeObservable(this) + } + } + + const obsvKeys = [ + ...(mobx._getAdministration(new B()) as ObservableArrayAdministration).values_.keys() + ] + expect(obsvKeys).toEqual(["x", "y"]) +}) + +// 19.12.2020 @urugator: +// All annotated non-observable fields are not writable. +// All annotated fields of non-plain objects are non-configurable. +// https://github.com/mobxjs/mobx/pull/2641 +test.skip("actions are reassignable", () => { + // See #1398 and #1545, make actions reassignable to support stubbing + class A { + @action + m1() {} + @action.bound + m3() {} + } + + const a = new A() + expect(isAction(a.m1)).toBe(true) + expect(isAction(a.m3)).toBe(true) + a.m1 = () => {} + expect(isAction(a.m1)).toBe(false) + a.m3 = () => {} + expect(isAction(a.m3)).toBe(false) +}) + +test("it should support asyncAction as decorator (2022.3)", async () => { + mobx.configure({ enforceActions: "observed" }) + + class X { + @observable accessor a = 1 + + f = mobx.flow(function* f(this: X, initial: number) { + this.a = initial // this runs in action + this.a += yield Promise.resolve(5) as any + this.a = this.a * 2 + return this.a + }) + } + + const x = new X() + + expect(await x.f(3)).toBe(16) +}) + +test("toJS bug #1413 (2022.3)", () => { + class X { + @observable + accessor test = { + test1: 1 + } + } + + const x = new X() + const res = mobx.toJS(x.test) as any + expect(res).toEqual({ test1: 1 }) + expect(res.__mobxDidRunLazyInitializers).toBe(undefined) +}) + +test("#2159 - computed property keys", () => { + const testSymbol = Symbol("test symbol") + const testString = "testString" + + class TestClass { + @observable accessor [testSymbol] = "original symbol value" + @observable accessor [testString] = "original string value" + } + + const o = new TestClass() + + const events: any[] = [] + observe(o, testSymbol, ev => events.push(ev.newValue, ev.oldValue)) + observe(o, testString, ev => events.push(ev.newValue, ev.oldValue)) + + runInAction(() => { + o[testSymbol] = "new symbol value" + o[testString] = "new string value" + }) + + t.deepEqual(events, [ + "new symbol value", // new symbol + "original symbol value", // original symbol + "new string value", // new string + "original string value" // original string + ]) +}) diff --git a/packages/mobx/__tests__/decorators_20223/tsconfig.json b/packages/mobx/__tests__/decorators_20223/tsconfig.json new file mode 100644 index 000000000..31758eb64 --- /dev/null +++ b/packages/mobx/__tests__/decorators_20223/tsconfig.json @@ -0,0 +1,12 @@ +{ + "extends": ["../../tsconfig.json", "../../../../tsconfig.test.json"], + "compilerOptions": { + "target": "ES6", + "experimentalDecorators": false, + "useDefineForClassFields": true, + + "rootDir": "../../" + }, + "exclude": ["__tests__"], + "include": ["./", "../../src"] // ["../../src", "./"] +} diff --git a/packages/mobx/__tests__/v4/base/__snapshots__/array.js.snap b/packages/mobx/__tests__/v4/base/__snapshots__/array.js.snap index 1a4890e74..c08f4279c 100644 --- a/packages/mobx/__tests__/v4/base/__snapshots__/array.js.snap +++ b/packages/mobx/__tests__/v4/base/__snapshots__/array.js.snap @@ -2,13 +2,13 @@ exports[`very long arrays can be safely passed to nativeArray.concat #2379 1`] = ` [MockFunction] { - "calls": Array [ - Array [ + "calls": [ + [ "[mobx.array] Attempt to read an array index (10000) that is out of bounds (10000). Please check length first. Out of bound indices will not be tracked by MobX", ], ], - "results": Array [ - Object { + "results": [ + { "type": "return", "value": undefined, }, diff --git a/packages/mobx/__tests__/v4/base/__snapshots__/extras.js.snap b/packages/mobx/__tests__/v4/base/__snapshots__/extras.js.snap index 140c42984..c2e3bcea8 100644 --- a/packages/mobx/__tests__/v4/base/__snapshots__/extras.js.snap +++ b/packages/mobx/__tests__/v4/base/__snapshots__/extras.js.snap @@ -1,8 +1,8 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP exports[`spy 1 1`] = ` -Array [ - Object { +[ + { "debugObjectName": "ObservableValue@6", "newValue": 4, "observableKind": "value", @@ -10,23 +10,23 @@ Array [ "spyReportStart": true, "type": "update", }, - Object { + { "debugObjectName": "ComputedValue@7", "newValue": 8, "observableKind": "computed", "oldValue": 6, "type": "update", }, - Object { + { "name": "Autorun@8", "spyReportStart": true, "type": "reaction", }, - Object { + { "spyReportEnd": true, "type": "report-end", }, - Object { + { "spyReportEnd": true, "type": "report-end", }, diff --git a/packages/mobx/__tests__/v4/base/__snapshots__/object-api.js.snap b/packages/mobx/__tests__/v4/base/__snapshots__/object-api.js.snap index da9dd33d2..3cb4423e8 100644 --- a/packages/mobx/__tests__/v4/base/__snapshots__/object-api.js.snap +++ b/packages/mobx/__tests__/v4/base/__snapshots__/object-api.js.snap @@ -1,26 +1,26 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP exports[`observe & intercept 1`] = ` -Array [ - Object { - "intercept": Object { +[ + { + "intercept": { "name": "b", - "newValue": Object { + "newValue": { "title": "get tea", }, - "object": Object { - "a": Object { + "object": { + "a": { "title": "get coffee", }, }, "type": "add", }, }, - Object { - "intercept": Object { + { + "intercept": { "name": "a", - "object": Object { - "a": Object { + "object": { + "a": { "title": "get coffee", }, }, @@ -31,16 +31,16 @@ Array [ `; exports[`observe & intercept 2`] = ` -Array [ - Object { - "observe": Object { +[ + { + "observe": { "debugObjectName": "TestObject", "name": "b", - "newValue": Object { + "newValue": { "title": "get tea", }, - "object": Object { - "b": Object { + "object": { + "b": { "title": "get tea", }, }, @@ -48,17 +48,17 @@ Array [ "type": "add", }, }, - Object { - "observe": Object { + { + "observe": { "debugObjectName": "TestObject", "name": "a", - "object": Object { - "b": Object { + "object": { + "b": { "title": "get tea", }, }, "observableKind": "object", - "oldValue": Object { + "oldValue": { "title": "get coffee", }, "type": "remove", diff --git a/packages/mobx/__tests__/v4/base/__snapshots__/observables.js.snap b/packages/mobx/__tests__/v4/base/__snapshots__/observables.js.snap index 9d3551dee..92696318c 100644 --- a/packages/mobx/__tests__/v4/base/__snapshots__/observables.js.snap +++ b/packages/mobx/__tests__/v4/base/__snapshots__/observables.js.snap @@ -1,8 +1,8 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP exports[`delay autorun until end of transaction 1`] = ` -Array [ - Object { +[ + { "debugObjectName": "ObservableObject@1", "name": "a", "newValue": 3, @@ -11,11 +11,11 @@ Array [ "spyReportStart": true, "type": "update", }, - Object { + { "spyReportEnd": true, "type": "report-end", }, - Object { + { "debugObjectName": "ObservableObject@1", "name": "a", "newValue": 4, @@ -24,12 +24,12 @@ Array [ "spyReportStart": true, "type": "update", }, - Object { + { "spyReportEnd": true, "type": "report-end", }, "end1", - Object { + { "debugObjectName": "ObservableObject@1", "name": "a", "newValue": 5, @@ -38,19 +38,19 @@ Array [ "spyReportStart": true, "type": "update", }, - Object { + { "spyReportEnd": true, "type": "report-end", }, "end2", - Object { + { "name": "test", "spyReportStart": true, "type": "reaction", }, "auto", "calc y", - Object { + { "debugObjectName": "ObservableObject@1.b", "newValue": 5, "observableKind": "computed", @@ -59,12 +59,12 @@ Array [ }, "type": "update", }, - Object { + { "spyReportEnd": true, "type": "report-end", }, "post trans1", - Object { + { "debugObjectName": "ObservableObject@1", "name": "a", "newValue": 6, @@ -74,29 +74,29 @@ Array [ "type": "update", }, "calc y", - Object { + { "debugObjectName": "ObservableObject@1.b", "newValue": 6, "observableKind": "computed", "oldValue": 5, "type": "update", }, - Object { + { "name": "test", "spyReportStart": true, "type": "reaction", }, "auto", - Object { + { "spyReportEnd": true, "type": "report-end", }, - Object { + { "spyReportEnd": true, "type": "report-end", }, "post trans2", - Object { + { "debugObjectName": "ObservableObject@1", "name": "a", "newValue": 3, @@ -105,7 +105,7 @@ Array [ "spyReportStart": true, "type": "update", }, - Object { + { "spyReportEnd": true, "type": "report-end", }, @@ -114,11 +114,11 @@ Array [ `; exports[`issue 50 1`] = ` -Array [ +[ "auto", "calc c", "transstart", - Object { + { "debugObjectName": "ObservableObject@1", "name": "a", "newValue": false, @@ -127,11 +127,11 @@ Array [ "spyReportStart": true, "type": "update", }, - Object { + { "spyReportEnd": true, "type": "report-end", }, - Object { + { "debugObjectName": "ObservableObject@1", "name": "b", "newValue": true, @@ -140,26 +140,26 @@ Array [ "spyReportStart": true, "type": "update", }, - Object { + { "spyReportEnd": true, "type": "report-end", }, "transpreend", - Object { + { "name": "ar", "spyReportStart": true, "type": "reaction", }, "auto", "calc c", - Object { + { "debugObjectName": "ObservableObject@1.c", "newValue": true, "observableKind": "computed", "oldValue": false, "type": "update", }, - Object { + { "spyReportEnd": true, "type": "report-end", }, @@ -168,11 +168,11 @@ Array [ `; exports[`verify transaction events 1`] = ` -Array [ +[ "auto", "calc c", "transstart", - Object { + { "debugObjectName": "ObservableObject@1", "name": "b", "newValue": 2, @@ -181,26 +181,26 @@ Array [ "spyReportStart": true, "type": "update", }, - Object { + { "spyReportEnd": true, "type": "report-end", }, "transpreend", "calc c", - Object { + { "debugObjectName": "ObservableObject@1.c", "newValue": 2, "observableKind": "computed", "oldValue": 1, "type": "update", }, - Object { + { "name": "ar", "spyReportStart": true, "type": "reaction", }, "auto", - Object { + { "spyReportEnd": true, "type": "report-end", }, diff --git a/packages/mobx/__tests__/v4/base/__snapshots__/spy.js.snap b/packages/mobx/__tests__/v4/base/__snapshots__/spy.js.snap index bbdb70cc5..b482843bd 100644 --- a/packages/mobx/__tests__/v4/base/__snapshots__/spy.js.snap +++ b/packages/mobx/__tests__/v4/base/__snapshots__/spy.js.snap @@ -1,13 +1,13 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP exports[`spy error 1`] = ` -Array [ - Object { +[ + { "name": "autorun", "spyReportStart": true, "type": "reaction", }, - Object { + { "debugObjectName": "ObservableObject@1.y", "newValue": 4, "observableKind": "computed", @@ -16,11 +16,11 @@ Array [ }, "type": "update", }, - Object { + { "spyReportEnd": true, "type": "report-end", }, - Object { + { "debugObjectName": "ObservableObject@1", "name": "x", "newValue": 3, @@ -29,7 +29,7 @@ Array [ "spyReportStart": true, "type": "update", }, - Object { + { "debugObjectName": "ObservableObject@1.y", "newValue": CaughtException { "cause": "Oops", @@ -38,22 +38,22 @@ Array [ "oldValue": 4, "type": "update", }, - Object { + { "name": "autorun", "spyReportStart": true, "type": "reaction", }, - Object { + { "error": "Oops", "message": "[mobx] Encountered an uncaught exception that was thrown by a reaction or observer component, in: 'Reaction[autorun]'", "name": "autorun", "type": "error", }, - Object { + { "spyReportEnd": true, "type": "report-end", }, - Object { + { "spyReportEnd": true, "type": "report-end", }, @@ -61,14 +61,14 @@ Array [ `; exports[`spy output 1`] = ` -Array [ - Object { +[ + { "debugObjectName": "ObservableValue@1", "newValue": "2", "observableKind": "value", "type": "create", }, - Object { + { "debugObjectName": "ObservableValue@1", "newValue": 3, "observableKind": "value", @@ -76,11 +76,11 @@ Array [ "spyReportStart": true, "type": "update", }, - Object { + { "spyReportEnd": true, "type": "report-end", }, - Object { + { "debugObjectName": "ObservableObject@2", "name": "c", "newValue": 4, @@ -88,11 +88,11 @@ Array [ "spyReportStart": true, "type": "add", }, - Object { + { "spyReportEnd": true, "type": "report-end", }, - Object { + { "debugObjectName": "ObservableObject@2", "name": "c", "newValue": 5, @@ -101,11 +101,11 @@ Array [ "spyReportStart": true, "type": "update", }, - Object { + { "spyReportEnd": true, "type": "report-end", }, - Object { + { "debugObjectName": "ObservableObject@2", "name": "d", "newValue": 6, @@ -113,11 +113,11 @@ Array [ "spyReportStart": true, "type": "add", }, - Object { + { "spyReportEnd": true, "type": "report-end", }, - Object { + { "debugObjectName": "ObservableObject@2", "name": "d", "newValue": 7, @@ -126,12 +126,12 @@ Array [ "spyReportStart": true, "type": "update", }, - Object { + { "spyReportEnd": true, "type": "report-end", }, - Object { - "added": Array [ + { + "added": [ 1, 2, ], @@ -139,17 +139,17 @@ Array [ "debugObjectName": "ObservableArray@3", "index": 0, "observableKind": "array", - "removed": Array [], + "removed": [], "removedCount": 0, "spyReportStart": true, "type": "splice", }, - Object { + { "spyReportEnd": true, "type": "report-end", }, - Object { - "added": Array [ + { + "added": [ 3, 4, ], @@ -157,33 +157,33 @@ Array [ "debugObjectName": "ObservableArray@3", "index": 2, "observableKind": "array", - "removed": Array [], + "removed": [], "removedCount": 0, "spyReportStart": true, "type": "splice", }, - Object { + { "spyReportEnd": true, "type": "report-end", }, - Object { - "added": Array [], + { + "added": [], "addedCount": 0, "debugObjectName": "ObservableArray@3", "index": 0, "observableKind": "array", - "removed": Array [ + "removed": [ 1, ], "removedCount": 1, "spyReportStart": true, "type": "splice", }, - Object { + { "spyReportEnd": true, "type": "report-end", }, - Object { + { "debugObjectName": "ObservableArray@3", "index": 2, "newValue": 5, @@ -192,11 +192,11 @@ Array [ "spyReportStart": true, "type": "update", }, - Object { + { "spyReportEnd": true, "type": "report-end", }, - Object { + { "debugObjectName": "ObservableMap@4", "name": "g", "newValue": 1, @@ -204,11 +204,11 @@ Array [ "spyReportStart": true, "type": "add", }, - Object { + { "spyReportEnd": true, "type": "report-end", }, - Object { + { "debugObjectName": "ObservableMap@4", "name": "g", "observableKind": "map", @@ -216,11 +216,11 @@ Array [ "spyReportStart": true, "type": "delete", }, - Object { + { "spyReportEnd": true, "type": "report-end", }, - Object { + { "debugObjectName": "ObservableMap@4", "name": "i", "newValue": 5, @@ -228,11 +228,11 @@ Array [ "spyReportStart": true, "type": "add", }, - Object { + { "spyReportEnd": true, "type": "report-end", }, - Object { + { "debugObjectName": "ObservableMap@4", "name": "i", "newValue": 6, @@ -241,16 +241,16 @@ Array [ "spyReportStart": true, "type": "update", }, - Object { + { "spyReportEnd": true, "type": "report-end", }, - Object { + { "name": "Autorun@6", "spyReportStart": true, "type": "reaction", }, - Object { + { "debugObjectName": "ComputedValue@5", "newValue": 6, "observableKind": "computed", @@ -259,11 +259,11 @@ Array [ }, "type": "update", }, - Object { + { "spyReportEnd": true, "type": "report-end", }, - Object { + { "debugObjectName": "ObservableValue@1", "newValue": 4, "observableKind": "value", @@ -271,27 +271,27 @@ Array [ "spyReportStart": true, "type": "update", }, - Object { + { "debugObjectName": "ComputedValue@5", "newValue": 8, "observableKind": "computed", "oldValue": 6, "type": "update", }, - Object { + { "name": "Autorun@6", "spyReportStart": true, "type": "reaction", }, - Object { + { "spyReportEnd": true, "type": "report-end", }, - Object { + { "spyReportEnd": true, "type": "report-end", }, - Object { + { "debugObjectName": "ObservableValue@1", "newValue": 5, "observableKind": "value", @@ -299,11 +299,11 @@ Array [ "spyReportStart": true, "type": "update", }, - Object { + { "spyReportEnd": true, "type": "report-end", }, - Object { + { "debugObjectName": "ObservableValue@1", "newValue": 6, "observableKind": "value", @@ -311,35 +311,35 @@ Array [ "spyReportStart": true, "type": "update", }, - Object { + { "spyReportEnd": true, "type": "report-end", }, - Object { + { "debugObjectName": "ComputedValue@5", "newValue": 12, "observableKind": "computed", "oldValue": 8, "type": "update", }, - Object { + { "name": "Autorun@6", "spyReportStart": true, "type": "reaction", }, - Object { + { "spyReportEnd": true, "type": "report-end", }, - Object { - "arguments": Array [ + { + "arguments": [ 7, ], "name": "myTestAction", "spyReportStart": true, "type": "action", }, - Object { + { "debugObjectName": "ObservableValue@1", "newValue": 7, "observableKind": "value", @@ -347,27 +347,27 @@ Array [ "spyReportStart": true, "type": "update", }, - Object { + { "spyReportEnd": true, "type": "report-end", }, - Object { + { "debugObjectName": "ComputedValue@5", "newValue": 14, "observableKind": "computed", "oldValue": 12, "type": "update", }, - Object { + { "name": "Autorun@6", "spyReportStart": true, "type": "reaction", }, - Object { + { "spyReportEnd": true, "type": "report-end", }, - Object { + { "spyReportEnd": true, "type": "report-end", }, diff --git a/packages/mobx/__tests__/v4/base/array.js b/packages/mobx/__tests__/v4/base/array.js index 42d60683e..7632e6451 100644 --- a/packages/mobx/__tests__/v4/base/array.js +++ b/packages/mobx/__tests__/v4/base/array.js @@ -1,5 +1,6 @@ "use strict" +const { LegacyObservableArray } = require("../../../src/internal") const mobx = require("../mobx4") const { observable, _getAdministration, reaction, makeObservable } = mobx const iterall = require("iterall") @@ -9,6 +10,15 @@ afterEach(() => { consoleWarnMock?.mockRestore() }) +expect.addEqualityTesters([ + function (a, b, ...rest) { + if (a instanceof LegacyObservableArray || b instanceof LegacyObservableArray) { + return this.equals([...a], [...b], ...rest) + } + return undefined + } +]) + test("test1", function () { const a = observable.array([]) expect(a.length).toBe(0) diff --git a/packages/mobx/__tests__/v5/base/__snapshots__/action.js.snap b/packages/mobx/__tests__/v5/base/__snapshots__/action.js.snap index 331b296b7..a1a7c345d 100644 --- a/packages/mobx/__tests__/v5/base/__snapshots__/action.js.snap +++ b/packages/mobx/__tests__/v5/base/__snapshots__/action.js.snap @@ -1,14 +1,14 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP exports[`error logging, #1836 - 1 1`] = ` -Array [ +[ " [mobx] (error in reaction 'Autorun@44' suppressed, fix error of causing action below)", " Error: Action error", ] `; exports[`error logging, #1836 - 2 1`] = ` -Array [ +[ " [mobx] Encountered an uncaught exception that was thrown by a reaction or observer component, in: 'Reaction[Autorun@46]'", ] `; diff --git a/packages/mobx/__tests__/v5/base/__snapshots__/extras.js.snap b/packages/mobx/__tests__/v5/base/__snapshots__/extras.js.snap index 420500fb0..d1d5d575f 100644 --- a/packages/mobx/__tests__/v5/base/__snapshots__/extras.js.snap +++ b/packages/mobx/__tests__/v5/base/__snapshots__/extras.js.snap @@ -1,8 +1,8 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP exports[`spy 1 1`] = ` -Array [ - Object { +[ + { "debugObjectName": "ObservableValue@5", "newValue": 4, "observableKind": "value", @@ -10,23 +10,23 @@ Array [ "spyReportStart": true, "type": "update", }, - Object { + { "debugObjectName": "ComputedValue@6", "newValue": 8, "observableKind": "computed", "oldValue": 6, "type": "update", }, - Object { + { "name": "Autorun@7", "spyReportStart": true, "type": "reaction", }, - Object { + { "spyReportEnd": true, "type": "report-end", }, - Object { + { "spyReportEnd": true, "type": "report-end", }, diff --git a/packages/mobx/__tests__/v5/base/__snapshots__/flow.js.snap b/packages/mobx/__tests__/v5/base/__snapshots__/flow.js.snap index 781d2f96c..aae54f05e 100644 --- a/packages/mobx/__tests__/v5/base/__snapshots__/flow.js.snap +++ b/packages/mobx/__tests__/v5/base/__snapshots__/flow.js.snap @@ -1,28 +1,28 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP exports[`it should support logging 1`] = ` -Array [ - Object { - "arguments": Array [ +[ + { + "arguments": [ 2, ], "name": "myaction - runid: 6 - init", "spyReportStart": true, "type": "action", }, - Object { + { "spyReportEnd": true, "type": "report-end", }, - Object { - "arguments": Array [ + { + "arguments": [ undefined, ], "name": "myaction - runid: 6 - yield 0", "spyReportStart": true, "type": "action", }, - Object { + { "debugObjectName": "ObservableObject@7", "name": "a", "newValue": 2, @@ -31,23 +31,23 @@ Array [ "spyReportStart": true, "type": "update", }, - Object { + { "spyReportEnd": true, "type": "report-end", }, - Object { + { "spyReportEnd": true, "type": "report-end", }, - Object { - "arguments": Array [ + { + "arguments": [ 5, ], "name": "myaction - runid: 6 - yield 1", "spyReportStart": true, "type": "action", }, - Object { + { "debugObjectName": "ObservableObject@7", "name": "a", "newValue": 5, @@ -56,11 +56,11 @@ Array [ "spyReportStart": true, "type": "update", }, - Object { + { "spyReportEnd": true, "type": "report-end", }, - Object { + { "debugObjectName": "ObservableObject@7", "name": "a", "newValue": 4, @@ -69,23 +69,23 @@ Array [ "spyReportStart": true, "type": "update", }, - Object { + { "spyReportEnd": true, "type": "report-end", }, - Object { + { "spyReportEnd": true, "type": "report-end", }, - Object { - "arguments": Array [ + { + "arguments": [ 3, ], "name": "myaction - runid: 6 - yield 2", "spyReportStart": true, "type": "action", }, - Object { + { "debugObjectName": "ObservableObject@7", "name": "a", "newValue": 3, @@ -94,11 +94,11 @@ Array [ "spyReportStart": true, "type": "update", }, - Object { + { "spyReportEnd": true, "type": "report-end", }, - Object { + { "spyReportEnd": true, "type": "report-end", }, diff --git a/packages/mobx/__tests__/v5/base/__snapshots__/object-api.js.snap b/packages/mobx/__tests__/v5/base/__snapshots__/object-api.js.snap index 70e287ca1..7f56a48ce 100644 --- a/packages/mobx/__tests__/v5/base/__snapshots__/object-api.js.snap +++ b/packages/mobx/__tests__/v5/base/__snapshots__/object-api.js.snap @@ -1,19 +1,19 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP exports[`observe & intercept 1`] = ` -Array [ - Object { - "intercept": Object { +[ + { + "intercept": { "name": "b", - "newValue": Object { + "newValue": { "title": "get tea", }, "object": "skip", "type": "add", }, }, - Object { - "intercept": Object { + { + "intercept": { "name": "a", "object": "skip", "type": "remove", @@ -23,12 +23,12 @@ Array [ `; exports[`observe & intercept 2`] = ` -Array [ - Object { - "observe": Object { +[ + { + "observe": { "debugObjectName": "TestObject", "name": "b", - "newValue": Object { + "newValue": { "title": "get tea", }, "object": "skip", @@ -36,13 +36,13 @@ Array [ "type": "add", }, }, - Object { - "observe": Object { + { + "observe": { "debugObjectName": "TestObject", "name": "a", "object": "skip", "observableKind": "object", - "oldValue": Object { + "oldValue": { "title": "get coffee", }, "type": "remove", diff --git a/packages/mobx/__tests__/v5/base/__snapshots__/observables.js.snap b/packages/mobx/__tests__/v5/base/__snapshots__/observables.js.snap index 9d3551dee..92696318c 100644 --- a/packages/mobx/__tests__/v5/base/__snapshots__/observables.js.snap +++ b/packages/mobx/__tests__/v5/base/__snapshots__/observables.js.snap @@ -1,8 +1,8 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP exports[`delay autorun until end of transaction 1`] = ` -Array [ - Object { +[ + { "debugObjectName": "ObservableObject@1", "name": "a", "newValue": 3, @@ -11,11 +11,11 @@ Array [ "spyReportStart": true, "type": "update", }, - Object { + { "spyReportEnd": true, "type": "report-end", }, - Object { + { "debugObjectName": "ObservableObject@1", "name": "a", "newValue": 4, @@ -24,12 +24,12 @@ Array [ "spyReportStart": true, "type": "update", }, - Object { + { "spyReportEnd": true, "type": "report-end", }, "end1", - Object { + { "debugObjectName": "ObservableObject@1", "name": "a", "newValue": 5, @@ -38,19 +38,19 @@ Array [ "spyReportStart": true, "type": "update", }, - Object { + { "spyReportEnd": true, "type": "report-end", }, "end2", - Object { + { "name": "test", "spyReportStart": true, "type": "reaction", }, "auto", "calc y", - Object { + { "debugObjectName": "ObservableObject@1.b", "newValue": 5, "observableKind": "computed", @@ -59,12 +59,12 @@ Array [ }, "type": "update", }, - Object { + { "spyReportEnd": true, "type": "report-end", }, "post trans1", - Object { + { "debugObjectName": "ObservableObject@1", "name": "a", "newValue": 6, @@ -74,29 +74,29 @@ Array [ "type": "update", }, "calc y", - Object { + { "debugObjectName": "ObservableObject@1.b", "newValue": 6, "observableKind": "computed", "oldValue": 5, "type": "update", }, - Object { + { "name": "test", "spyReportStart": true, "type": "reaction", }, "auto", - Object { + { "spyReportEnd": true, "type": "report-end", }, - Object { + { "spyReportEnd": true, "type": "report-end", }, "post trans2", - Object { + { "debugObjectName": "ObservableObject@1", "name": "a", "newValue": 3, @@ -105,7 +105,7 @@ Array [ "spyReportStart": true, "type": "update", }, - Object { + { "spyReportEnd": true, "type": "report-end", }, @@ -114,11 +114,11 @@ Array [ `; exports[`issue 50 1`] = ` -Array [ +[ "auto", "calc c", "transstart", - Object { + { "debugObjectName": "ObservableObject@1", "name": "a", "newValue": false, @@ -127,11 +127,11 @@ Array [ "spyReportStart": true, "type": "update", }, - Object { + { "spyReportEnd": true, "type": "report-end", }, - Object { + { "debugObjectName": "ObservableObject@1", "name": "b", "newValue": true, @@ -140,26 +140,26 @@ Array [ "spyReportStart": true, "type": "update", }, - Object { + { "spyReportEnd": true, "type": "report-end", }, "transpreend", - Object { + { "name": "ar", "spyReportStart": true, "type": "reaction", }, "auto", "calc c", - Object { + { "debugObjectName": "ObservableObject@1.c", "newValue": true, "observableKind": "computed", "oldValue": false, "type": "update", }, - Object { + { "spyReportEnd": true, "type": "report-end", }, @@ -168,11 +168,11 @@ Array [ `; exports[`verify transaction events 1`] = ` -Array [ +[ "auto", "calc c", "transstart", - Object { + { "debugObjectName": "ObservableObject@1", "name": "b", "newValue": 2, @@ -181,26 +181,26 @@ Array [ "spyReportStart": true, "type": "update", }, - Object { + { "spyReportEnd": true, "type": "report-end", }, "transpreend", "calc c", - Object { + { "debugObjectName": "ObservableObject@1.c", "newValue": 2, "observableKind": "computed", "oldValue": 1, "type": "update", }, - Object { + { "name": "ar", "spyReportStart": true, "type": "reaction", }, "auto", - Object { + { "spyReportEnd": true, "type": "report-end", }, diff --git a/packages/mobx/__tests__/v5/base/__snapshots__/proxies.js.snap b/packages/mobx/__tests__/v5/base/__snapshots__/proxies.js.snap index c6fc35545..378c1469e 100644 --- a/packages/mobx/__tests__/v5/base/__snapshots__/proxies.js.snap +++ b/packages/mobx/__tests__/v5/base/__snapshots__/proxies.js.snap @@ -1,32 +1,32 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP exports[`decorate proxies 1`] = ` -Object { - "b": Object { +{ + "b": { "configurable": true, "enumerable": true, "get": [Function], "set": [Function], }, - "double": Object { + "double": { "configurable": true, "enumerable": false, "value": [Function], "writable": false, }, - "x": Object { + "x": { "configurable": true, "enumerable": true, "get": [Function], "set": [Function], }, - "y": Object { + "y": { "configurable": true, "enumerable": false, "get": [Function], "set": [Function], }, - Symbol(mobx administration): Object { + Symbol(mobx administration): { "configurable": true, "enumerable": false, "value": "(omitted)", @@ -36,32 +36,32 @@ Object { `; exports[`extend proxies 1`] = ` -Object { - "b": Object { +{ + "b": { "configurable": true, "enumerable": true, "get": [Function], "set": [Function], }, - "double": Object { + "double": { "configurable": true, "enumerable": false, "value": [Function], "writable": false, }, - "x": Object { + "x": { "configurable": true, "enumerable": true, "get": [Function], "set": [Function], }, - "y": Object { + "y": { "configurable": true, "enumerable": false, "get": [Function], "set": [Function], }, - Symbol(mobx administration): Object { + Symbol(mobx administration): { "configurable": true, "enumerable": false, "value": "(omitted)", @@ -71,32 +71,32 @@ Object { `; exports[`non-proxied object 1`] = ` -Object { - "b": Object { +{ + "b": { "configurable": true, "enumerable": true, "value": 4, "writable": true, }, - "double": Object { + "double": { "configurable": true, "enumerable": false, "value": [Function], "writable": false, }, - "x": Object { + "x": { "configurable": true, "enumerable": true, "get": [Function], "set": [Function], }, - "y": Object { + "y": { "configurable": true, "enumerable": false, "get": [Function], "set": [Function], }, - Symbol(mobx administration): Object { + Symbol(mobx administration): { "configurable": true, "enumerable": false, "value": "(omitted)", diff --git a/packages/mobx/__tests__/v5/base/__snapshots__/spy.js.snap b/packages/mobx/__tests__/v5/base/__snapshots__/spy.js.snap index fb2ea0b73..09c357a30 100644 --- a/packages/mobx/__tests__/v5/base/__snapshots__/spy.js.snap +++ b/packages/mobx/__tests__/v5/base/__snapshots__/spy.js.snap @@ -1,13 +1,13 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP exports[`spy error 1`] = ` -Array [ - Object { +[ + { "name": "autorun", "spyReportStart": true, "type": "reaction", }, - Object { + { "debugObjectName": "ObservableObject@1.y", "newValue": 4, "observableKind": "computed", @@ -16,11 +16,11 @@ Array [ }, "type": "update", }, - Object { + { "spyReportEnd": true, "type": "report-end", }, - Object { + { "debugObjectName": "ObservableObject@1", "name": "x", "newValue": 3, @@ -29,7 +29,7 @@ Array [ "spyReportStart": true, "type": "update", }, - Object { + { "debugObjectName": "ObservableObject@1.y", "newValue": CaughtException { "cause": "Oops", @@ -38,34 +38,34 @@ Array [ "oldValue": 4, "type": "update", }, - Object { + { "name": "autorun", "spyReportStart": true, "type": "reaction", }, - Object { + { "error": "Oops", "message": "[mobx] Encountered an uncaught exception that was thrown by a reaction or observer component, in: 'Reaction[autorun]'", "name": "autorun", "type": "error", }, - Object { + { "spyReportEnd": true, "type": "report-end", }, - Object { + { "spyReportEnd": true, "type": "report-end", }, - Object { - "arguments": Array [ + { + "arguments": [ 4, ], "name": "setX", "spyReportStart": true, "type": "action", }, - Object { + { "debugObjectName": "ObservableObject@1", "name": "x", "newValue": 4, @@ -74,11 +74,11 @@ Array [ "spyReportStart": true, "type": "update", }, - Object { + { "spyReportEnd": true, "type": "report-end", }, - Object { + { "debugObjectName": "ObservableObject@1.y", "newValue": 8, "observableKind": "computed", @@ -87,16 +87,16 @@ Array [ }, "type": "update", }, - Object { + { "name": "autorun", "spyReportStart": true, "type": "reaction", }, - Object { + { "spyReportEnd": true, "type": "report-end", }, - Object { + { "spyReportEnd": true, "type": "report-end", }, @@ -104,14 +104,14 @@ Array [ `; exports[`spy output 1`] = ` -Array [ - Object { +[ + { "debugObjectName": "ObservableValue@1", "newValue": "2", "observableKind": "value", "type": "create", }, - Object { + { "debugObjectName": "ObservableValue@1", "newValue": 3, "observableKind": "value", @@ -119,11 +119,11 @@ Array [ "spyReportStart": true, "type": "update", }, - Object { + { "spyReportEnd": true, "type": "report-end", }, - Object { + { "debugObjectName": "ObservableObject@2", "name": "c", "newValue": 4, @@ -131,11 +131,11 @@ Array [ "spyReportStart": true, "type": "add", }, - Object { + { "spyReportEnd": true, "type": "report-end", }, - Object { + { "debugObjectName": "ObservableObject@2", "name": "c", "newValue": 5, @@ -144,11 +144,11 @@ Array [ "spyReportStart": true, "type": "update", }, - Object { + { "spyReportEnd": true, "type": "report-end", }, - Object { + { "debugObjectName": "ObservableObject@2", "name": "d", "newValue": 6, @@ -156,11 +156,11 @@ Array [ "spyReportStart": true, "type": "add", }, - Object { + { "spyReportEnd": true, "type": "report-end", }, - Object { + { "debugObjectName": "ObservableObject@2", "name": "d", "newValue": 7, @@ -169,12 +169,12 @@ Array [ "spyReportStart": true, "type": "update", }, - Object { + { "spyReportEnd": true, "type": "report-end", }, - Object { - "added": Array [ + { + "added": [ 1, 2, ], @@ -182,17 +182,17 @@ Array [ "debugObjectName": "ObservableArray@3", "index": 0, "observableKind": "array", - "removed": Array [], + "removed": [], "removedCount": 0, "spyReportStart": true, "type": "splice", }, - Object { + { "spyReportEnd": true, "type": "report-end", }, - Object { - "added": Array [ + { + "added": [ 3, 4, ], @@ -200,33 +200,33 @@ Array [ "debugObjectName": "ObservableArray@3", "index": 2, "observableKind": "array", - "removed": Array [], + "removed": [], "removedCount": 0, "spyReportStart": true, "type": "splice", }, - Object { + { "spyReportEnd": true, "type": "report-end", }, - Object { - "added": Array [], + { + "added": [], "addedCount": 0, "debugObjectName": "ObservableArray@3", "index": 0, "observableKind": "array", - "removed": Array [ + "removed": [ 1, ], "removedCount": 1, "spyReportStart": true, "type": "splice", }, - Object { + { "spyReportEnd": true, "type": "report-end", }, - Object { + { "debugObjectName": "ObservableArray@3", "index": 2, "newValue": 5, @@ -235,11 +235,11 @@ Array [ "spyReportStart": true, "type": "update", }, - Object { + { "spyReportEnd": true, "type": "report-end", }, - Object { + { "debugObjectName": "ObservableMap@4", "name": "g", "newValue": 1, @@ -247,11 +247,11 @@ Array [ "spyReportStart": true, "type": "add", }, - Object { + { "spyReportEnd": true, "type": "report-end", }, - Object { + { "debugObjectName": "ObservableMap@4", "name": "g", "observableKind": "map", @@ -259,11 +259,11 @@ Array [ "spyReportStart": true, "type": "delete", }, - Object { + { "spyReportEnd": true, "type": "report-end", }, - Object { + { "debugObjectName": "ObservableMap@4", "name": "i", "newValue": 5, @@ -271,11 +271,11 @@ Array [ "spyReportStart": true, "type": "add", }, - Object { + { "spyReportEnd": true, "type": "report-end", }, - Object { + { "debugObjectName": "ObservableMap@4", "name": "i", "newValue": 6, @@ -284,16 +284,16 @@ Array [ "spyReportStart": true, "type": "update", }, - Object { + { "spyReportEnd": true, "type": "report-end", }, - Object { + { "name": "Autorun@6", "spyReportStart": true, "type": "reaction", }, - Object { + { "debugObjectName": "ComputedValue@5", "newValue": 6, "observableKind": "computed", @@ -302,11 +302,11 @@ Array [ }, "type": "update", }, - Object { + { "spyReportEnd": true, "type": "report-end", }, - Object { + { "debugObjectName": "ObservableValue@1", "newValue": 4, "observableKind": "value", @@ -314,27 +314,27 @@ Array [ "spyReportStart": true, "type": "update", }, - Object { + { "debugObjectName": "ComputedValue@5", "newValue": 8, "observableKind": "computed", "oldValue": 6, "type": "update", }, - Object { + { "name": "Autorun@6", "spyReportStart": true, "type": "reaction", }, - Object { + { "spyReportEnd": true, "type": "report-end", }, - Object { + { "spyReportEnd": true, "type": "report-end", }, - Object { + { "debugObjectName": "ObservableValue@1", "newValue": 5, "observableKind": "value", @@ -342,11 +342,11 @@ Array [ "spyReportStart": true, "type": "update", }, - Object { + { "spyReportEnd": true, "type": "report-end", }, - Object { + { "debugObjectName": "ObservableValue@1", "newValue": 6, "observableKind": "value", @@ -354,35 +354,35 @@ Array [ "spyReportStart": true, "type": "update", }, - Object { + { "spyReportEnd": true, "type": "report-end", }, - Object { + { "debugObjectName": "ComputedValue@5", "newValue": 12, "observableKind": "computed", "oldValue": 8, "type": "update", }, - Object { + { "name": "Autorun@6", "spyReportStart": true, "type": "reaction", }, - Object { + { "spyReportEnd": true, "type": "report-end", }, - Object { - "arguments": Array [ + { + "arguments": [ 7, ], "name": "myTestAction", "spyReportStart": true, "type": "action", }, - Object { + { "debugObjectName": "ObservableValue@1", "newValue": 7, "observableKind": "value", @@ -390,27 +390,27 @@ Array [ "spyReportStart": true, "type": "update", }, - Object { + { "spyReportEnd": true, "type": "report-end", }, - Object { + { "debugObjectName": "ComputedValue@5", "newValue": 14, "observableKind": "computed", "oldValue": 12, "type": "update", }, - Object { + { "name": "Autorun@6", "spyReportStart": true, "type": "reaction", }, - Object { + { "spyReportEnd": true, "type": "report-end", }, - Object { + { "spyReportEnd": true, "type": "report-end", }, diff --git a/packages/mobx/__tests__/v5/base/map.js b/packages/mobx/__tests__/v5/base/map.js index e0e0a826a..327e73411 100644 --- a/packages/mobx/__tests__/v5/base/map.js +++ b/packages/mobx/__tests__/v5/base/map.js @@ -70,7 +70,7 @@ test("map crud", function () { ]) ) expect(JSON.stringify(m)).toMatchInlineSnapshot( - `"[[\\"1\\",\\"aa\\"],[1,\\"b\\"],[[\\"arr\\"],\\"arrVal\\"],[null,\\"symbol-value\\"]]"` + `"[["1","aa"],[1,"b"],[["arr"],"arrVal"],[null,"symbol-value"]]"` ) expect(m.toString()).toBe("[object ObservableMap]") expect(m.size).toBe(4) diff --git a/packages/mobx/jest.config-decorators.js b/packages/mobx/jest.config-decorators.js new file mode 100644 index 000000000..751c550a4 --- /dev/null +++ b/packages/mobx/jest.config-decorators.js @@ -0,0 +1,11 @@ +const path = require("path") +const buildConfig = require("../../jest.base.config") + +module.exports = buildConfig( + __dirname, + { + testRegex: "__tests__/decorators_20223/.*\\.(t|j)sx?$", + setupFilesAfterEnv: [`/jest.setup.ts`] + }, + path.resolve(__dirname, "./__tests__/decorators_20223/tsconfig.json") +) diff --git a/packages/mobx/jest.config.js b/packages/mobx/jest.config.js index f0af2b1e2..c5223d1fc 100644 --- a/packages/mobx/jest.config.js +++ b/packages/mobx/jest.config.js @@ -1,6 +1,7 @@ const buildConfig = require("../../jest.base.config") module.exports = buildConfig(__dirname, { + projects: ["/jest.config.js", "/jest.config-decorators.js"], testRegex: "__tests__/v[4|5]/base/.*\\.(t|j)sx?$", setupFilesAfterEnv: [`/jest.setup.ts`] }) diff --git a/packages/mobx/jest.setup.ts b/packages/mobx/jest.setup.ts index d7ff3472c..74251d4e7 100644 --- a/packages/mobx/jest.setup.ts +++ b/packages/mobx/jest.setup.ts @@ -1,5 +1,7 @@ import { configure, _resetGlobalState } from "./src/mobx" +global.setImmediate = global.setImmediate || ((fn, ...args) => global.setTimeout(fn, 0, ...args)) + beforeEach(() => { // @ts-ignore global.__DEV__ = true diff --git a/packages/mobx/package.json b/packages/mobx/package.json index 78b3053b6..70f8ce0a0 100644 --- a/packages/mobx/package.json +++ b/packages/mobx/package.json @@ -1,6 +1,6 @@ { "name": "mobx", - "version": "6.10.2", + "version": "6.11.0-pre", "description": "Simple, scalable state management.", "source": "src/mobx.ts", "main": "dist/index.js", diff --git a/packages/mobx/src/api/action.ts b/packages/mobx/src/api/action.ts index ab5e38601..2fc2b519e 100644 --- a/packages/mobx/src/api/action.ts +++ b/packages/mobx/src/api/action.ts @@ -7,9 +7,12 @@ import { isFunction, isStringish, createDecoratorAnnotation, - createActionAnnotation + createActionAnnotation, + is20223Decorator } from "../internal" +import type { ClassFieldDecorator, ClassMethodDecorator } from "../types/decorator_fills" + export const ACTION = "action" export const ACTION_BOUND = "action.bound" export const AUTOACTION = "autoAction" @@ -29,17 +32,24 @@ const autoActionBoundAnnotation = createActionAnnotation(AUTOACTION_BOUND, { bound: true }) -export interface IActionFactory extends Annotation, PropertyDecorator { +export interface IActionFactory + extends Annotation, + PropertyDecorator, + ClassMethodDecorator, + ClassFieldDecorator { // nameless actions (fn: T): T // named actions (name: string, fn: T): T // named decorator - (customName: string): PropertyDecorator & Annotation + (customName: string): PropertyDecorator & + Annotation & + ClassMethodDecorator & + ClassFieldDecorator // decorator (name no longer supported) - bound: Annotation & PropertyDecorator + bound: Annotation & PropertyDecorator & ClassMethodDecorator & ClassFieldDecorator } function createActionFactory(autoAction: boolean): IActionFactory { @@ -52,6 +62,13 @@ function createActionFactory(autoAction: boolean): IActionFactory { if (isFunction(arg2)) { return createAction(arg1, arg2, autoAction) } + // @action (2022.3 Decorators) + if (is20223Decorator(arg2)) { + return (autoAction ? autoActionAnnotation : actionAnnotation).decorate_20223_( + arg1, + arg2 + ) + } // @action if (isStringish(arg2)) { return storeAnnotation(arg1, arg2, autoAction ? autoActionAnnotation : actionAnnotation) diff --git a/packages/mobx/src/api/annotation.ts b/packages/mobx/src/api/annotation.ts index 87a9ea607..719c72740 100644 --- a/packages/mobx/src/api/annotation.ts +++ b/packages/mobx/src/api/annotation.ts @@ -20,6 +20,7 @@ export type Annotation = { descriptor: PropertyDescriptor, proxyTrap: boolean ): boolean | null + decorate_20223_(value: any, context: DecoratorContext) options_?: any } diff --git a/packages/mobx/src/api/computed.ts b/packages/mobx/src/api/computed.ts index 104932bd3..6ac31e8e0 100644 --- a/packages/mobx/src/api/computed.ts +++ b/packages/mobx/src/api/computed.ts @@ -10,19 +10,22 @@ import { die, IComputedValue, createComputedAnnotation, - comparer + comparer, + is20223Decorator } from "../internal" +import type { ClassGetterDecorator } from "../types/decorator_fills" + export const COMPUTED = "computed" export const COMPUTED_STRUCT = "computed.struct" -export interface IComputedFactory extends Annotation, PropertyDecorator { +export interface IComputedFactory extends Annotation, PropertyDecorator, ClassGetterDecorator { // @computed(opts) - (options: IComputedValueOptions): Annotation & PropertyDecorator + (options: IComputedValueOptions): Annotation & PropertyDecorator & ClassGetterDecorator // computed(fn, opts) (func: () => T, options?: IComputedValueOptions): IComputedValue - struct: Annotation & PropertyDecorator + struct: Annotation & PropertyDecorator & ClassGetterDecorator } const computedAnnotation = createComputedAnnotation(COMPUTED) @@ -35,6 +38,10 @@ const computedStructAnnotation = createComputedAnnotation(COMPUTED_STRUCT, { * For legacy purposes also invokable as ES5 observable created: `computed(() => expr)`; */ export const computed: IComputedFactory = function computed(arg1, arg2) { + if (is20223Decorator(arg2)) { + // @computed (2022.3 Decorators) + return computedAnnotation.decorate_20223_(arg1, arg2) + } if (isStringish(arg2)) { // @computed return storeAnnotation(arg1, arg2, computedAnnotation) diff --git a/packages/mobx/src/api/decorators.ts b/packages/mobx/src/api/decorators.ts index 5e682c6c8..9ecde78c1 100644 --- a/packages/mobx/src/api/decorators.ts +++ b/packages/mobx/src/api/decorators.ts @@ -1,5 +1,7 @@ import { Annotation, addHiddenProp, AnnotationsMap, hasProp, die, isOverride } from "../internal" +import type { Decorator } from "../types/decorator_fills" + export const storedAnnotationsSymbol = Symbol("mobx-stored-annotations") /** @@ -7,11 +9,17 @@ export const storedAnnotationsSymbol = Symbol("mobx-stored-annotations") * - decorator * - annotation object */ -export function createDecoratorAnnotation(annotation: Annotation): PropertyDecorator & Annotation { +export function createDecoratorAnnotation( + annotation: Annotation +): PropertyDecorator & Annotation & D { function decorator(target, property) { - storeAnnotation(target, property, annotation) + if (is20223Decorator(property)) { + return annotation.decorate_20223_(target, property) + } else { + storeAnnotation(target, property, annotation) + } } - return Object.assign(decorator, annotation) + return Object.assign(decorator, annotation) as any } /** @@ -61,13 +69,30 @@ function assertNotDecorated(prototype: object, annotation: Annotation, key: Prop */ export function collectStoredAnnotations(target): AnnotationsMap { if (!hasProp(target, storedAnnotationsSymbol)) { - if (__DEV__ && !target[storedAnnotationsSymbol]) { - die( - `No annotations were passed to makeObservable, but no decorated members have been found either` - ) - } + // if (__DEV__ && !target[storedAnnotationsSymbol]) { + // die( + // `No annotations were passed to makeObservable, but no decorated members have been found either` + // ) + // } // We need a copy as we will remove annotation from the list once it's applied. addHiddenProp(target, storedAnnotationsSymbol, { ...target[storedAnnotationsSymbol] }) } return target[storedAnnotationsSymbol] } + +export function is20223Decorator(context): context is DecoratorContext { + return typeof context == "object" && typeof context["kind"] == "string" +} + +export function assert20223DecoratorType( + context: DecoratorContext, + types: DecoratorContext["kind"][] +) { + if (__DEV__ && !types.includes(context.kind)) { + die( + `The decorator applied to '${String(context.name)}' cannot be used on a ${ + context.kind + } element` + ) + } +} diff --git a/packages/mobx/src/api/flow.ts b/packages/mobx/src/api/flow.ts index daad7a7e5..ced847471 100644 --- a/packages/mobx/src/api/flow.ts +++ b/packages/mobx/src/api/flow.ts @@ -7,9 +7,12 @@ import { isStringish, storeAnnotation, createFlowAnnotation, - createDecoratorAnnotation + createDecoratorAnnotation, + is20223Decorator } from "../internal" +import type { ClassMethodDecorator } from "../types/decorator_fills" + export const FLOW = "flow" let generatorId = 0 @@ -25,11 +28,11 @@ export function isFlowCancellationError(error: Error) { export type CancellablePromise = Promise & { cancel(): void } -interface Flow extends Annotation, PropertyDecorator { +interface Flow extends Annotation, PropertyDecorator, ClassMethodDecorator { ( generator: (...args: Args) => Generator | AsyncGenerator ): (...args: Args) => CancellablePromise - bound: Annotation & PropertyDecorator + bound: Annotation & PropertyDecorator & ClassMethodDecorator } const flowAnnotation = createFlowAnnotation("flow") @@ -37,6 +40,10 @@ const flowBoundAnnotation = createFlowAnnotation("flow.bound", { bound: true }) export const flow: Flow = Object.assign( function flow(arg1, arg2?) { + // @flow (2022.3 Decorators) + if (is20223Decorator(arg2)) { + return flowAnnotation.decorate_20223_(arg1, arg2) + } // @flow if (isStringish(arg2)) { return storeAnnotation(arg1, arg2, flowAnnotation) diff --git a/packages/mobx/src/api/observable.ts b/packages/mobx/src/api/observable.ts index 01a5d119a..47a77c248 100644 --- a/packages/mobx/src/api/observable.ts +++ b/packages/mobx/src/api/observable.ts @@ -30,9 +30,12 @@ import { isStringish, createObservableAnnotation, createAutoAnnotation, + is20223Decorator, initObservable } from "../internal" +import type { ClassAccessorDecorator, ClassFieldDecorator } from "../types/decorator_fills" + export const OBSERVABLE = "observable" export const OBSERVABLE_REF = "observable.ref" export const OBSERVABLE_SHALLOW = "observable.shallow" @@ -71,7 +74,8 @@ const observableShallowAnnotation = createObservableAnnotation(OBSERVABLE_SHALLO const observableStructAnnotation = createObservableAnnotation(OBSERVABLE_STRUCT, { enhancer: refStructEnhancer }) -const observableDecoratorAnnotation = createDecoratorAnnotation(observableAnnotation) +const observableDecoratorAnnotation = + createDecoratorAnnotation(observableAnnotation) export function getEnhancerFromOptions(options: CreateObservableOptions): IEnhancer { return options.deep === true @@ -96,6 +100,11 @@ export function getEnhancerFromAnnotation(annotation?: Annotation): IEnhancer(value?: T, options?: CreateObservableOptions): IObservableValue } -export interface IObservableFactory extends Annotation, PropertyDecorator { +export interface IObservableFactory + extends Annotation, + PropertyDecorator, + ClassAccessorDecorator, + ClassFieldDecorator { + // TODO: remove ClassFieldDecorator, this is only temporarily support for legacy decorators (value: T[], options?: CreateObservableOptions): IObservableArray (value: Set, options?: CreateObservableOptions): ObservableSet (value: Map, options?: CreateObservableOptions): ObservableMap @@ -171,13 +185,13 @@ export interface IObservableFactory extends Annotation, PropertyDecorator { /** * Decorator that creates an observable that only observes the references, but doesn't try to turn the assigned value into an observable.ts. */ - ref: Annotation & PropertyDecorator + ref: Annotation & PropertyDecorator & ClassAccessorDecorator & ClassFieldDecorator /** * Decorator that creates an observable converts its value (objects, maps or arrays) into a shallow observable structure */ - shallow: Annotation & PropertyDecorator - deep: Annotation & PropertyDecorator - struct: Annotation & PropertyDecorator + shallow: Annotation & PropertyDecorator & ClassAccessorDecorator & ClassFieldDecorator + deep: Annotation & PropertyDecorator & ClassAccessorDecorator & ClassFieldDecorator + struct: Annotation & PropertyDecorator & ClassAccessorDecorator & ClassFieldDecorator } const observableFactories: IObservableFactory = { diff --git a/packages/mobx/src/types/actionannotation.ts b/packages/mobx/src/types/actionannotation.ts index 7385c108b..831cf5236 100644 --- a/packages/mobx/src/types/actionannotation.ts +++ b/packages/mobx/src/types/actionannotation.ts @@ -7,7 +7,9 @@ import { isFunction, Annotation, globalState, - MakeResult + MakeResult, + assert20223DecoratorType, + storeAnnotation } from "../internal" export function createActionAnnotation(name: string, options?: object): Annotation { @@ -15,11 +17,13 @@ export function createActionAnnotation(name: string, options?: object): Annotati annotationType_: name, options_: options, make_, - extend_ + extend_, + decorate_20223_ } } function make_( + this: Annotation, adm: ObservableObjectAdministration, key: PropertyKey, descriptor: PropertyDescriptor, @@ -49,6 +53,7 @@ function make_( } function extend_( + this: Annotation, adm: ObservableObjectAdministration, key: PropertyKey, descriptor: PropertyDescriptor, @@ -58,6 +63,47 @@ function extend_( return adm.defineProperty_(key, actionDescriptor, proxyTrap) } +function decorate_20223_(this: Annotation, mthd, context: DecoratorContext) { + if (__DEV__) { + assert20223DecoratorType(context, ["method", "field"]) + } + const { kind, name, addInitializer } = context + const ann = this + + const _createAction = m => + createAction(ann.options_?.name ?? name!.toString(), m, ann.options_?.autoAction ?? false) + + // Backwards/Legacy behavior, expects makeObservable(this) + if (kind == "field") { + addInitializer(function () { + storeAnnotation(this, name, ann) + }) + return + } + + if (kind == "method") { + if (!isAction(mthd)) { + mthd = _createAction(mthd) + } + + if (this.options_?.bound) { + addInitializer(function () { + const self = this as any + const bound = self[name].bind(self) + bound.isMobxAction = true + self[name] = bound + }) + } + + return mthd + } + + die( + `Cannot apply '${ann.annotationType_}' to '${String(name)}' (kind: ${kind}):` + + `\n'${ann.annotationType_}' can only be used on properties with a function value.` + ) +} + function assertActionDescriptor( adm: ObservableObjectAdministration, { annotationType_ }: Annotation, diff --git a/packages/mobx/src/types/autoannotation.ts b/packages/mobx/src/types/autoannotation.ts index 1be4e2636..c80f3b48d 100644 --- a/packages/mobx/src/types/autoannotation.ts +++ b/packages/mobx/src/types/autoannotation.ts @@ -9,7 +9,8 @@ import { computed, autoAction, isGenerator, - MakeResult + MakeResult, + die } from "../internal" const AUTO = "true" @@ -21,7 +22,8 @@ export function createAutoAnnotation(options?: object): Annotation { annotationType_: AUTO, options_: options, make_, - extend_ + extend_, + decorate_20223_ } } @@ -105,3 +107,7 @@ function extend_( let observableAnnotation = this.options_?.deep === false ? observable.ref : observable return observableAnnotation.extend_(adm, key, descriptor, proxyTrap) } + +function decorate_20223_(this: Annotation, desc, context: ClassGetterDecoratorContext) { + die(`'${this.annotationType_}' cannot be used as a decorator`) +} diff --git a/packages/mobx/src/types/computedannotation.ts b/packages/mobx/src/types/computedannotation.ts index 4caa11f6e..dd398741f 100644 --- a/packages/mobx/src/types/computedannotation.ts +++ b/packages/mobx/src/types/computedannotation.ts @@ -1,15 +1,26 @@ -import { ObservableObjectAdministration, die, Annotation, MakeResult } from "../internal" +import { + ObservableObjectAdministration, + die, + Annotation, + MakeResult, + assert20223DecoratorType, + $mobx, + asObservableObject, + ComputedValue +} from "../internal" export function createComputedAnnotation(name: string, options?: object): Annotation { return { annotationType_: name, options_: options, make_, - extend_ + extend_, + decorate_20223_ } } function make_( + this: Annotation, adm: ObservableObjectAdministration, key: PropertyKey, descriptor: PropertyDescriptor @@ -18,6 +29,7 @@ function make_( } function extend_( + this: Annotation, adm: ObservableObjectAdministration, key: PropertyKey, descriptor: PropertyDescriptor, @@ -35,6 +47,31 @@ function extend_( ) } +function decorate_20223_(this: Annotation, get, context: ClassGetterDecoratorContext) { + if (__DEV__) { + assert20223DecoratorType(context, ["getter"]) + } + const ann = this + const { name: key, addInitializer } = context + + addInitializer(function () { + const adm: ObservableObjectAdministration = asObservableObject(this)[$mobx] + const options = { + ...ann.options_, + get, + context: this + } + options.name ||= __DEV__ + ? `${adm.name_}.${key.toString()}` + : `ObservableObject.${key.toString()}` + adm.values_.set(key, new ComputedValue(options)) + }) + + return function () { + return this[$mobx].getObservablePropValue_(key) + } +} + function assertComputedDescriptor( adm: ObservableObjectAdministration, { annotationType_ }: Annotation, diff --git a/packages/mobx/src/types/decorator_fills.ts b/packages/mobx/src/types/decorator_fills.ts new file mode 100644 index 000000000..084f02337 --- /dev/null +++ b/packages/mobx/src/types/decorator_fills.ts @@ -0,0 +1,33 @@ +// Hopefully these will be main-lined into Typescipt, but at the moment TS only declares the Contexts + +export type ClassAccessorDecorator = ( + value: ClassAccessorDecoratorTarget, + context: ClassAccessorDecoratorContext +) => ClassAccessorDecoratorResult | void + +export type ClassGetterDecorator = ( + value: (this: This) => Value, + context: ClassGetterDecoratorContext +) => ((this: This) => Value) | void + +export type ClassSetterDecorator = ( + value: (this: This, value: Value) => void, + context: ClassSetterDecoratorContext +) => ((this: This, value: Value) => void) | void + +export type ClassMethodDecorator any = any> = ( + value: Value, + context: ClassMethodDecoratorContext +) => Value | void + +export type ClassFieldDecorator any = any> = ( + value: Value, + context: ClassFieldDecoratorContext +) => Value | void + +export type Decorator = + | ClassAccessorDecorator + | ClassGetterDecorator + | ClassSetterDecorator + | ClassMethodDecorator + | ClassFieldDecorator diff --git a/packages/mobx/src/types/flowannotation.ts b/packages/mobx/src/types/flowannotation.ts index 42d6f3e10..530b95942 100644 --- a/packages/mobx/src/types/flowannotation.ts +++ b/packages/mobx/src/types/flowannotation.ts @@ -8,7 +8,8 @@ import { isFunction, globalState, MakeResult, - hasProp + hasProp, + assert20223DecoratorType } from "../internal" export function createFlowAnnotation(name: string, options?: object): Annotation { @@ -16,11 +17,13 @@ export function createFlowAnnotation(name: string, options?: object): Annotation annotationType_: name, options_: options, make_, - extend_ + extend_, + decorate_20223_ } } function make_( + this: Annotation, adm: ObservableObjectAdministration, key: PropertyKey, descriptor: PropertyDescriptor, @@ -50,6 +53,7 @@ function make_( } function extend_( + this: Annotation, adm: ObservableObjectAdministration, key: PropertyKey, descriptor: PropertyDescriptor, @@ -59,6 +63,28 @@ function extend_( return adm.defineProperty_(key, flowDescriptor, proxyTrap) } +function decorate_20223_(this: Annotation, mthd, context: ClassMethodDecoratorContext) { + if (__DEV__) { + assert20223DecoratorType(context, ["method"]) + } + const { name, addInitializer } = context + + if (!isFlow(mthd)) { + mthd = flow(mthd) + } + + if (this.options_?.bound) { + addInitializer(function () { + const self = this as any + const bound = self[name].bind(self) + bound.isMobXFlow = true + self[name] = bound + }) + } + + return mthd +} + function assertFlowDescriptor( adm: ObservableObjectAdministration, { annotationType_ }: Annotation, diff --git a/packages/mobx/src/types/legacyobservablearray.ts b/packages/mobx/src/types/legacyobservablearray.ts index 81e60dbf6..4b1a0ae9a 100644 --- a/packages/mobx/src/types/legacyobservablearray.ts +++ b/packages/mobx/src/types/legacyobservablearray.ts @@ -52,7 +52,7 @@ inherit(StubArray, Array.prototype) // but it is unclear why the hack is need as MobX never changed the prototype // anyway, so removed it in V6 -class LegacyObservableArray extends StubArray { +export class LegacyObservableArray extends StubArray { constructor( initialValues: T[] | undefined, enhancer: IEnhancer, diff --git a/packages/mobx/src/types/observableannotation.ts b/packages/mobx/src/types/observableannotation.ts index 4e5175e43..69dee5775 100644 --- a/packages/mobx/src/types/observableannotation.ts +++ b/packages/mobx/src/types/observableannotation.ts @@ -3,7 +3,11 @@ import { deepEnhancer, die, Annotation, - MakeResult + MakeResult, + assert20223DecoratorType, + ObservableValue, + asObservableObject, + $mobx } from "../internal" export function createObservableAnnotation(name: string, options?: object): Annotation { @@ -11,11 +15,13 @@ export function createObservableAnnotation(name: string, options?: object): Anno annotationType_: name, options_: options, make_, - extend_ + extend_, + decorate_20223_ } } function make_( + this: Annotation, adm: ObservableObjectAdministration, key: PropertyKey, descriptor: PropertyDescriptor @@ -24,6 +30,7 @@ function make_( } function extend_( + this: Annotation, adm: ObservableObjectAdministration, key: PropertyKey, descriptor: PropertyDescriptor, @@ -38,6 +45,72 @@ function extend_( ) } +function decorate_20223_( + this: Annotation, + desc, + context: ClassAccessorDecoratorContext | ClassFieldDecoratorContext +) { + if (__DEV__) { + if (context.kind === "field") { + throw die( + `Please use \`@observable accessor ${String( + context.name + )}\` instead of \`@observable ${String(context.name)}\`` + ) + } + assert20223DecoratorType(context, ["accessor"]) + } + + const ann = this + const { kind, name } = context + + // The laziness here is not ideal... It's a workaround to how 2022.3 Decorators are implemented: + // `addInitializer` callbacks are executed _before_ any accessors are defined (instead of the ideal-for-us right after each). + // This means that, if we were to do our stuff in an `addInitializer`, we'd attempt to read a private slot + // before it has been initialized. The runtime doesn't like that and throws a `Cannot read private member + // from an object whose class did not declare it` error. + // TODO: it seems that this will not be required anymore in the final version of the spec + // See TODO: link + const initializedObjects = new WeakSet() + + function initializeObservable(target, value) { + const adm: ObservableObjectAdministration = asObservableObject(target)[$mobx] + const observable = new ObservableValue( + value, + ann.options_?.enhancer ?? deepEnhancer, + __DEV__ ? `${adm.name_}.${name.toString()}` : `ObservableObject.${name.toString()}`, + false + ) + adm.values_.set(name, observable) + initializedObjects.add(target) + } + + if (kind == "accessor") { + return { + get() { + if (!initializedObjects.has(this)) { + initializeObservable(this, desc.get.call(this)) + } + return this[$mobx].getObservablePropValue_(name) + }, + set(value) { + if (!initializedObjects.has(this)) { + initializeObservable(this, value) + } + return this[$mobx].setObservablePropValue_(name, value) + }, + init(value) { + if (!initializedObjects.has(this)) { + initializeObservable(this, value) + } + return value + } + } + } + + return +} + function assertObservableDescriptor( adm: ObservableObjectAdministration, { annotationType_ }: Annotation, diff --git a/packages/mobx/src/types/overrideannotation.ts b/packages/mobx/src/types/overrideannotation.ts index 36fe60d55..f688c9963 100644 --- a/packages/mobx/src/types/overrideannotation.ts +++ b/packages/mobx/src/types/overrideannotation.ts @@ -7,19 +7,23 @@ import { MakeResult } from "../internal" +import type { ClassMethodDecorator } from "./decorator_fills" + const OVERRIDE = "override" -export const override: Annotation & PropertyDecorator = createDecoratorAnnotation({ - annotationType_: OVERRIDE, - make_, - extend_ -}) +export const override: Annotation & PropertyDecorator & ClassMethodDecorator = + createDecoratorAnnotation({ + annotationType_: OVERRIDE, + make_, + extend_, + decorate_20223_ + }) export function isOverride(annotation: Annotation): boolean { return annotation.annotationType_ === OVERRIDE } -function make_(adm: ObservableObjectAdministration, key): MakeResult { +function make_(this: Annotation, adm: ObservableObjectAdministration, key): MakeResult { // Must not be plain object if (__DEV__ && adm.isPlainObject_) { die( @@ -37,6 +41,10 @@ function make_(adm: ObservableObjectAdministration, key): MakeResult { return MakeResult.Cancel } -function extend_(adm, key, descriptor, proxyTrap): boolean { +function extend_(this: Annotation, adm, key, descriptor, proxyTrap): boolean { die(`'${this.annotationType_}' can only be used with 'makeObservable'`) } + +function decorate_20223_(this: Annotation, desc, context: DecoratorContext) { + console.warn(`'${this.annotationType_}' cannot be used with decorators - this is a no-op`) +} diff --git a/website/i18n/en.json b/website/i18n/en.json index d116201af..a387a8141 100644 --- a/website/i18n/en.json +++ b/website/i18n/en.json @@ -61,8 +61,8 @@ "sidebar_label": "Defining data stores" }, "enabling-decorators": { - "title": "Enabling decorators", - "sidebar_label": "Enabling decorators {🚀}" + "title": "Decorators", + "sidebar_label": "Decorators {🚀}" }, "faq/migrate-to-6": { "title": "Migrating from MobX 4/5" diff --git a/yarn.lock b/yarn.lock index 8cb00e84c..33fac57c6 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,7 +2,7 @@ # yarn lockfile v1 -"@ampproject/remapping@^2.1.0": +"@ampproject/remapping@^2.2.0": version "2.2.0" resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.2.0.tgz#56c133824780de3174aed5ab6834f3026790154d" integrity sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w== @@ -17,7 +17,7 @@ dependencies: "@babel/highlight" "^7.10.4" -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.18.6", "@babel/code-frame@^7.5.5": +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.18.6", "@babel/code-frame@^7.5.5": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.18.6.tgz#3b25d38c89600baa2dcc219edfa88a74eb2c427a" integrity sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q== @@ -29,34 +29,35 @@ resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.20.14.tgz#4106fc8b755f3e3ee0a0a7c27dde5de1d2b2baf8" integrity sha512-0YpKHD6ImkWMEINCyDAD0HLLUH/lPCefG8ld9it8DJB2wnApraKuhgYTvTY1z7UFIfBTGy5LwncZ+5HWWGbhFw== -"@babel/core@^7.1.0", "@babel/core@^7.1.6", "@babel/core@^7.12.3", "@babel/core@^7.12.9", "@babel/core@^7.16.0", "@babel/core@^7.4.4", "@babel/core@^7.7.5", "@babel/core@^7.9.0": - version "7.20.12" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.20.12.tgz#7930db57443c6714ad216953d1356dac0eb8496d" - integrity sha512-XsMfHovsUYHFMdrIHkZphTN/2Hzzi78R08NuHfDBehym2VsPDL6Zn/JAD/JQdnRvbSsbQc4mVaU1m6JgtTEElg== +"@babel/core@^7.1.6", "@babel/core@^7.11.6", "@babel/core@^7.12.3", "@babel/core@^7.12.9", "@babel/core@^7.16.0", "@babel/core@^7.4.4", "@babel/core@^7.9.0": + version "7.21.0" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.21.0.tgz#1341aefdcc14ccc7553fcc688dd8986a2daffc13" + integrity sha512-PuxUbxcW6ZYe656yL3EAhpy7qXKq0DmYsrJLpbB8XrsCP9Nm+XCg9XFMb5vIDliPD7+U/+M+QJlH17XOcB7eXA== dependencies: - "@ampproject/remapping" "^2.1.0" + "@ampproject/remapping" "^2.2.0" "@babel/code-frame" "^7.18.6" - "@babel/generator" "^7.20.7" + "@babel/generator" "^7.21.0" "@babel/helper-compilation-targets" "^7.20.7" - "@babel/helper-module-transforms" "^7.20.11" - "@babel/helpers" "^7.20.7" - "@babel/parser" "^7.20.7" + "@babel/helper-module-transforms" "^7.21.0" + "@babel/helpers" "^7.21.0" + "@babel/parser" "^7.21.0" "@babel/template" "^7.20.7" - "@babel/traverse" "^7.20.12" - "@babel/types" "^7.20.7" + "@babel/traverse" "^7.21.0" + "@babel/types" "^7.21.0" convert-source-map "^1.7.0" debug "^4.1.0" gensync "^1.0.0-beta.2" json5 "^2.2.2" semver "^6.3.0" -"@babel/generator@^7.20.7", "@babel/generator@^7.4.0": - version "7.20.14" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.20.14.tgz#9fa772c9f86a46c6ac9b321039400712b96f64ce" - integrity sha512-AEmuXHdcD3A52HHXxaTmYlb8q/xMEhoRP67B3T4Oq7lbmSoqroMZzjnGj3+i1io3pdnF8iBYVu4Ilj+c4hBxYg== +"@babel/generator@^7.21.0", "@babel/generator@^7.21.1", "@babel/generator@^7.7.2": + version "7.21.1" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.21.1.tgz#951cc626057bc0af2c35cd23e9c64d384dea83dd" + integrity sha512-1lT45bAYlQhFn/BHivJs43AiW2rg3/UbLyShGfF3C0KmHvO5fSghWd5kBJy30kpRRucGzXStvnnCFniCR2kXAA== dependencies: - "@babel/types" "^7.20.7" + "@babel/types" "^7.21.0" "@jridgewell/gen-mapping" "^0.3.2" + "@jridgewell/trace-mapping" "^0.3.17" jsesc "^2.5.1" "@babel/helper-annotate-as-pure@^7.16.0", "@babel/helper-annotate-as-pure@^7.18.6": @@ -147,13 +148,13 @@ dependencies: "@babel/types" "^7.16.0" -"@babel/helper-function-name@^7.16.0", "@babel/helper-function-name@^7.19.0": - version "7.19.0" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz#941574ed5390682e872e52d3f38ce9d1bef4648c" - integrity sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w== +"@babel/helper-function-name@^7.16.0", "@babel/helper-function-name@^7.19.0", "@babel/helper-function-name@^7.21.0": + version "7.21.0" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.21.0.tgz#d552829b10ea9f120969304023cd0645fa00b1b4" + integrity sha512-HfK1aMRanKHpxemaY2gqBmL04iAPOPRj7DxtNbiDOrJK+gdwkiNRVpCpUJYbUT+aZyemKN8brqTOxzCaG6ExRg== dependencies: - "@babel/template" "^7.18.10" - "@babel/types" "^7.19.0" + "@babel/template" "^7.20.7" + "@babel/types" "^7.21.0" "@babel/helper-hoist-variables@^7.16.0", "@babel/helper-hoist-variables@^7.18.6": version "7.18.6" @@ -176,10 +177,10 @@ dependencies: "@babel/types" "^7.18.6" -"@babel/helper-module-transforms@^7.16.5", "@babel/helper-module-transforms@^7.20.11": - version "7.20.11" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.20.11.tgz#df4c7af713c557938c50ea3ad0117a7944b2f1b0" - integrity sha512-uRy78kN4psmji1s2QtbtcCSaj/LILFDp0f/ymhpQH5QY3nljUZCaNWz9X1dEj/8MBdBEFECs7yRhKn8i7NjZgg== +"@babel/helper-module-transforms@^7.16.5", "@babel/helper-module-transforms@^7.20.11", "@babel/helper-module-transforms@^7.21.0": + version "7.21.2" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.21.2.tgz#160caafa4978ac8c00ac66636cb0fa37b024e2d2" + integrity sha512-79yj2AR4U/Oqq/WOV7Lx6hUjau1Zfo4cI+JLAVYeMV5XIlbOhmjEk5ulbTc9fMpmlojzZHkUUxAiK+UKn+hNQQ== dependencies: "@babel/helper-environment-visitor" "^7.18.9" "@babel/helper-module-imports" "^7.18.6" @@ -187,8 +188,8 @@ "@babel/helper-split-export-declaration" "^7.18.6" "@babel/helper-validator-identifier" "^7.19.1" "@babel/template" "^7.20.7" - "@babel/traverse" "^7.20.10" - "@babel/types" "^7.20.7" + "@babel/traverse" "^7.21.2" + "@babel/types" "^7.21.2" "@babel/helper-optimise-call-expression@^7.16.0", "@babel/helper-optimise-call-expression@^7.18.6": version "7.18.6" @@ -269,14 +270,14 @@ "@babel/traverse" "^7.16.5" "@babel/types" "^7.16.0" -"@babel/helpers@^7.20.7": - version "7.20.13" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.20.13.tgz#e3cb731fb70dc5337134cadc24cbbad31cc87ad2" - integrity sha512-nzJ0DWCL3gB5RCXbUO3KIMMsBY2Eqbx8mBpKGE/02PgyRQFcPQLbkQ1vyy596mZLaP+dAfD+R4ckASzNVmW3jg== +"@babel/helpers@^7.21.0": + version "7.21.0" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.21.0.tgz#9dd184fb5599862037917cdc9eecb84577dc4e7e" + integrity sha512-XXve0CBtOW0pd7MRzzmoyuSj0e3SEzj8pgyFxnTT1NJZL38BD1MK7yYrm8yefRPIDvNNe14xR4FdbHwpInD4rA== dependencies: "@babel/template" "^7.20.7" - "@babel/traverse" "^7.20.13" - "@babel/types" "^7.20.7" + "@babel/traverse" "^7.21.0" + "@babel/types" "^7.21.0" "@babel/highlight@^7.10.4", "@babel/highlight@^7.18.6": version "7.18.6" @@ -287,10 +288,10 @@ chalk "^2.0.0" js-tokens "^4.0.0" -"@babel/parser@^7.1.0", "@babel/parser@^7.1.6", "@babel/parser@^7.11.5", "@babel/parser@^7.12.7", "@babel/parser@^7.14.7", "@babel/parser@^7.18.9", "@babel/parser@^7.20.13", "@babel/parser@^7.20.7", "@babel/parser@^7.4.3", "@babel/parser@^7.7.0": - version "7.20.15" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.20.15.tgz#eec9f36d8eaf0948bb88c87a46784b5ee9fd0c89" - integrity sha512-DI4a1oZuf8wC+oAJA9RW6ga3Zbe8RZFt7kD9i4qAspz3I/yHet1VvC3DiSy/fsUvv5pvJuNPh0LPOdCcqinDPg== +"@babel/parser@^7.1.0", "@babel/parser@^7.1.6", "@babel/parser@^7.11.5", "@babel/parser@^7.12.7", "@babel/parser@^7.14.7", "@babel/parser@^7.18.9", "@babel/parser@^7.20.7", "@babel/parser@^7.21.0", "@babel/parser@^7.21.2", "@babel/parser@^7.7.0": + version "7.21.2" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.21.2.tgz#dacafadfc6d7654c3051a66d6fe55b6cb2f2a0b3" + integrity sha512-URpaIJQwEkEC2T9Kn+Ai6Xe/02iNaVCuT/PtoRz3GPVJVDpPd7mLo+VddTbhCRU9TXqW5mSrQfXZyi8kDKOVpQ== "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.16.2": version "7.16.2" @@ -515,6 +516,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.0" +"@babel/plugin-syntax-jsx@^7.7.2": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.18.6.tgz#a8feef63b010150abd97f1649ec296e849943ca0" + integrity sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/plugin-syntax-logical-assignment-operators@^7.10.4", "@babel/plugin-syntax-logical-assignment-operators@^7.8.3": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699" @@ -571,7 +579,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-syntax-typescript@^7.20.0": +"@babel/plugin-syntax-typescript@^7.20.0", "@babel/plugin-syntax-typescript@^7.7.2": version "7.20.0" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.20.0.tgz#4e9a0cfc769c85689b77a2e642d24e9f697fc8c7" integrity sha512-rd9TkG+u1CExzS4SM1BlMEhMXwFLKVjOAFFCDx9PbX5ycJWDoWMcwdJH9RhkPu1dOgn5TrxLot/Gx6lWFuAUNQ== @@ -990,7 +998,7 @@ dependencies: regenerator-runtime "^0.13.4" -"@babel/template@^7.16.0", "@babel/template@^7.18.10", "@babel/template@^7.20.7", "@babel/template@^7.3.3", "@babel/template@^7.4.0": +"@babel/template@^7.16.0", "@babel/template@^7.20.7", "@babel/template@^7.3.3": version "7.20.7" resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.20.7.tgz#a15090c2839a83b02aa996c0b4994005841fd5a8" integrity sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw== @@ -999,26 +1007,26 @@ "@babel/parser" "^7.20.7" "@babel/types" "^7.20.7" -"@babel/traverse@^7.1.0", "@babel/traverse@^7.11.5", "@babel/traverse@^7.12.9", "@babel/traverse@^7.13.0", "@babel/traverse@^7.16.5", "@babel/traverse@^7.20.10", "@babel/traverse@^7.20.12", "@babel/traverse@^7.20.13", "@babel/traverse@^7.20.7", "@babel/traverse@^7.4.3", "@babel/traverse@^7.7.0": - version "7.20.13" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.20.13.tgz#817c1ba13d11accca89478bd5481b2d168d07473" - integrity sha512-kMJXfF0T6DIS9E8cgdLCSAL+cuCK+YEZHWiLK0SXpTo8YRj5lpJu3CDNKiIBCne4m9hhTIqUg6SYTAI39tAiVQ== +"@babel/traverse@^7.11.5", "@babel/traverse@^7.12.9", "@babel/traverse@^7.13.0", "@babel/traverse@^7.16.5", "@babel/traverse@^7.20.7", "@babel/traverse@^7.21.0", "@babel/traverse@^7.21.2", "@babel/traverse@^7.7.0", "@babel/traverse@^7.7.2": + version "7.21.2" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.21.2.tgz#ac7e1f27658750892e815e60ae90f382a46d8e75" + integrity sha512-ts5FFU/dSUPS13tv8XiEObDu9K+iagEKME9kAbaP7r0Y9KtZJZ+NGndDvWoRAYNpeWafbpFeki3q9QoMD6gxyw== dependencies: "@babel/code-frame" "^7.18.6" - "@babel/generator" "^7.20.7" + "@babel/generator" "^7.21.1" "@babel/helper-environment-visitor" "^7.18.9" - "@babel/helper-function-name" "^7.19.0" + "@babel/helper-function-name" "^7.21.0" "@babel/helper-hoist-variables" "^7.18.6" "@babel/helper-split-export-declaration" "^7.18.6" - "@babel/parser" "^7.20.13" - "@babel/types" "^7.20.7" + "@babel/parser" "^7.21.2" + "@babel/types" "^7.21.2" debug "^4.1.0" globals "^11.1.0" -"@babel/types@^7.0.0", "@babel/types@^7.12.7", "@babel/types@^7.16.0", "@babel/types@^7.18.6", "@babel/types@^7.19.0", "@babel/types@^7.20.0", "@babel/types@^7.20.2", "@babel/types@^7.20.7", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.0", "@babel/types@^7.4.4", "@babel/types@^7.7.0": - version "7.20.7" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.20.7.tgz#54ec75e252318423fc07fb644dc6a58a64c09b7f" - integrity sha512-69OnhBxSSgK0OzTJai4kyPDiKTIe3j+ctaHdIGVbRahTLAT7L3R9oeXHC2aVSuGYt3cVnoAMDmOCgJ2yaiLMvg== +"@babel/types@^7.0.0", "@babel/types@^7.12.7", "@babel/types@^7.16.0", "@babel/types@^7.18.6", "@babel/types@^7.20.0", "@babel/types@^7.20.2", "@babel/types@^7.20.7", "@babel/types@^7.21.0", "@babel/types@^7.21.2", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4", "@babel/types@^7.7.0": + version "7.21.2" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.21.2.tgz#92246f6e00f91755893c2876ad653db70c8310d1" + integrity sha512-3wRZSs7jiFaB8AjxiiD+VqN5DTG2iRvJGQ+qYFrs/654lg6kGTQWIOFjlBo5RaXuAZjBmP3+OQH4dmhqiiyYxw== dependencies: "@babel/helper-string-parser" "^7.19.4" "@babel/helper-validator-identifier" "^7.19.1" @@ -1235,14 +1243,6 @@ human-id "^1.0.2" prettier "^1.19.1" -"@cnakazawa/watch@^1.0.3": - version "1.0.4" - resolved "https://registry.yarnpkg.com/@cnakazawa/watch/-/watch-1.0.4.tgz#f864ae85004d0fcab6f50be9141c4da368d1656a" - integrity sha512-v9kIhKwjeZThiWrLmj0y17CWoyddASLj9O2yvbZkbvw/N3rWOYy9zkV66ursAoVr0mV15bL8g0c4QZUE6cdDoQ== - dependencies: - exec-sh "^0.3.2" - minimist "^1.2.0" - "@eslint/eslintrc@^0.4.3": version "0.4.3" resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.4.3.tgz#9e42981ef035beb3dd49add17acb96e8ff6f394c" @@ -1362,15 +1362,6 @@ resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.3.tgz#e45e384e4b8ec16bce2fd903af78450f6bf7ec98" integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA== -"@jest/console@^24.9.0": - version "24.9.0" - resolved "https://registry.yarnpkg.com/@jest/console/-/console-24.9.0.tgz#79b1bc06fb74a8cfb01cbdedf945584b1b9707f0" - integrity sha512-Zuj6b8TnKXi3q4ymac8EQfc3ea/uhLeCGThFqXeC8H9/raaH8ARPUTdId+XyGd03Z4In0/VjD2OYFcBF09fNLQ== - dependencies: - "@jest/source-map" "^24.9.0" - chalk "^2.0.1" - slash "^2.0.0" - "@jest/console@^25.5.0": version "25.5.0" resolved "https://registry.yarnpkg.com/@jest/console/-/console-25.5.0.tgz#770800799d510f37329c508a9edd0b7b447d9abb" @@ -1382,264 +1373,144 @@ jest-util "^25.5.0" slash "^3.0.0" -"@jest/console@^26.6.2": - version "26.6.2" - resolved "https://registry.yarnpkg.com/@jest/console/-/console-26.6.2.tgz#4e04bc464014358b03ab4937805ee36a0aeb98f2" - integrity sha512-IY1R2i2aLsLr7Id3S6p2BA82GNWryt4oSvEXLAKc+L2zdi89dSkE8xC1C+0kpATG4JhBJREnQOH7/zmccM2B0g== +"@jest/console@^29.5.0": + version "29.5.0" + resolved "https://registry.yarnpkg.com/@jest/console/-/console-29.5.0.tgz#593a6c5c0d3f75689835f1b3b4688c4f8544cb57" + integrity sha512-NEpkObxPwyw/XxZVLPmAGKE89IQRp4puc6IQRPru6JKd1M3fW9v1xM1AnzIJE65hbCkzQAdnL8P47e9hzhiYLQ== dependencies: - "@jest/types" "^26.6.2" + "@jest/types" "^29.5.0" "@types/node" "*" chalk "^4.0.0" - jest-message-util "^26.6.2" - jest-util "^26.6.2" - slash "^3.0.0" - -"@jest/core@^25.5.4": - version "25.5.4" - resolved "https://registry.yarnpkg.com/@jest/core/-/core-25.5.4.tgz#3ef7412f7339210f003cdf36646bbca786efe7b4" - integrity sha512-3uSo7laYxF00Dg/DMgbn4xMJKmDdWvZnf89n8Xj/5/AeQ2dOQmn6b6Hkj/MleyzZWXpwv+WSdYWl4cLsy2JsoA== - dependencies: - "@jest/console" "^25.5.0" - "@jest/reporters" "^25.5.1" - "@jest/test-result" "^25.5.0" - "@jest/transform" "^25.5.1" - "@jest/types" "^25.5.0" - ansi-escapes "^4.2.1" - chalk "^3.0.0" - exit "^0.1.2" - graceful-fs "^4.2.4" - jest-changed-files "^25.5.0" - jest-config "^25.5.4" - jest-haste-map "^25.5.1" - jest-message-util "^25.5.0" - jest-regex-util "^25.2.6" - jest-resolve "^25.5.1" - jest-resolve-dependencies "^25.5.4" - jest-runner "^25.5.4" - jest-runtime "^25.5.4" - jest-snapshot "^25.5.1" - jest-util "^25.5.0" - jest-validate "^25.5.0" - jest-watcher "^25.5.0" - micromatch "^4.0.2" - p-each-series "^2.1.0" - realpath-native "^2.0.0" - rimraf "^3.0.0" + jest-message-util "^29.5.0" + jest-util "^29.5.0" slash "^3.0.0" - strip-ansi "^6.0.0" -"@jest/core@^26.6.3": - version "26.6.3" - resolved "https://registry.yarnpkg.com/@jest/core/-/core-26.6.3.tgz#7639fcb3833d748a4656ada54bde193051e45fad" - integrity sha512-xvV1kKbhfUqFVuZ8Cyo+JPpipAHHAV3kcDBftiduK8EICXmTFddryy3P7NfZt8Pv37rA9nEJBKCCkglCPt/Xjw== +"@jest/core@^29.5.0": + version "29.5.0" + resolved "https://registry.yarnpkg.com/@jest/core/-/core-29.5.0.tgz#76674b96904484e8214614d17261cc491e5f1f03" + integrity sha512-28UzQc7ulUrOQw1IsN/kv1QES3q2kkbl/wGslyhAclqZ/8cMdB5M68BffkIdSJgKBUt50d3hbwJ92XESlE7LiQ== dependencies: - "@jest/console" "^26.6.2" - "@jest/reporters" "^26.6.2" - "@jest/test-result" "^26.6.2" - "@jest/transform" "^26.6.2" - "@jest/types" "^26.6.2" + "@jest/console" "^29.5.0" + "@jest/reporters" "^29.5.0" + "@jest/test-result" "^29.5.0" + "@jest/transform" "^29.5.0" + "@jest/types" "^29.5.0" "@types/node" "*" ansi-escapes "^4.2.1" chalk "^4.0.0" + ci-info "^3.2.0" exit "^0.1.2" - graceful-fs "^4.2.4" - jest-changed-files "^26.6.2" - jest-config "^26.6.3" - jest-haste-map "^26.6.2" - jest-message-util "^26.6.2" - jest-regex-util "^26.0.0" - jest-resolve "^26.6.2" - jest-resolve-dependencies "^26.6.3" - jest-runner "^26.6.3" - jest-runtime "^26.6.3" - jest-snapshot "^26.6.2" - jest-util "^26.6.2" - jest-validate "^26.6.2" - jest-watcher "^26.6.2" - micromatch "^4.0.2" - p-each-series "^2.1.0" - rimraf "^3.0.0" + graceful-fs "^4.2.9" + jest-changed-files "^29.5.0" + jest-config "^29.5.0" + jest-haste-map "^29.5.0" + jest-message-util "^29.5.0" + jest-regex-util "^29.4.3" + jest-resolve "^29.5.0" + jest-resolve-dependencies "^29.5.0" + jest-runner "^29.5.0" + jest-runtime "^29.5.0" + jest-snapshot "^29.5.0" + jest-util "^29.5.0" + jest-validate "^29.5.0" + jest-watcher "^29.5.0" + micromatch "^4.0.4" + pretty-format "^29.5.0" slash "^3.0.0" strip-ansi "^6.0.0" -"@jest/environment@^24.3.0": - version "24.9.0" - resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-24.9.0.tgz#21e3afa2d65c0586cbd6cbefe208bafade44ab18" - integrity sha512-5A1QluTPhvdIPFYnO3sZC3smkNeXPVELz7ikPbhUj0bQjB07EoE9qtLrem14ZUYWdVayYbsjVwIiL4WBIMV4aQ== - dependencies: - "@jest/fake-timers" "^24.9.0" - "@jest/transform" "^24.9.0" - "@jest/types" "^24.9.0" - jest-mock "^24.9.0" - -"@jest/environment@^25.5.0": - version "25.5.0" - resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-25.5.0.tgz#aa33b0c21a716c65686638e7ef816c0e3a0c7b37" - integrity sha512-U2VXPEqL07E/V7pSZMSQCvV5Ea4lqOlT+0ZFijl/i316cRMHvZ4qC+jBdryd+lmRetjQo0YIQr6cVPNxxK87mA== - dependencies: - "@jest/fake-timers" "^25.5.0" - "@jest/types" "^25.5.0" - jest-mock "^25.5.0" - -"@jest/environment@^26.6.2": - version "26.6.2" - resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-26.6.2.tgz#ba364cc72e221e79cc8f0a99555bf5d7577cf92c" - integrity sha512-nFy+fHl28zUrRsCeMB61VDThV1pVTtlEokBRgqPrcT1JNq4yRNIyTHfyht6PqtUvY9IsuLGTrbG8kPXjSZIZwA== +"@jest/environment@^29.5.0": + version "29.5.0" + resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-29.5.0.tgz#9152d56317c1fdb1af389c46640ba74ef0bb4c65" + integrity sha512-5FXw2+wD29YU1d4I2htpRX7jYnAyTRjP2CsXQdo9SAM8g3ifxWPSV0HnClSn71xwctr0U3oZIIH+dtbfmnbXVQ== dependencies: - "@jest/fake-timers" "^26.6.2" - "@jest/types" "^26.6.2" + "@jest/fake-timers" "^29.5.0" + "@jest/types" "^29.5.0" "@types/node" "*" - jest-mock "^26.6.2" + jest-mock "^29.5.0" -"@jest/fake-timers@^24.3.0", "@jest/fake-timers@^24.9.0": - version "24.9.0" - resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-24.9.0.tgz#ba3e6bf0eecd09a636049896434d306636540c93" - integrity sha512-eWQcNa2YSwzXWIMC5KufBh3oWRIijrQFROsIqt6v/NS9Io/gknw1jsAC9c+ih/RQX4A3O7SeWAhQeN0goKhT9A== +"@jest/expect-utils@^29.5.0": + version "29.5.0" + resolved "https://registry.yarnpkg.com/@jest/expect-utils/-/expect-utils-29.5.0.tgz#f74fad6b6e20f924582dc8ecbf2cb800fe43a036" + integrity sha512-fmKzsidoXQT2KwnrwE0SQq3uj8Z763vzR8LnLBwC2qYWEFpjX8daRsk6rHUM1QvNlEW/UJXNXm59ztmJJWs2Mg== dependencies: - "@jest/types" "^24.9.0" - jest-message-util "^24.9.0" - jest-mock "^24.9.0" + jest-get-type "^29.4.3" -"@jest/fake-timers@^25.5.0": - version "25.5.0" - resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-25.5.0.tgz#46352e00533c024c90c2bc2ad9f2959f7f114185" - integrity sha512-9y2+uGnESw/oyOI3eww9yaxdZyHq7XvprfP/eeoCsjqKYts2yRlsHS/SgjPDV8FyMfn2nbMy8YzUk6nyvdLOpQ== +"@jest/expect@^29.5.0": + version "29.5.0" + resolved "https://registry.yarnpkg.com/@jest/expect/-/expect-29.5.0.tgz#80952f5316b23c483fbca4363ce822af79c38fba" + integrity sha512-PueDR2HGihN3ciUNGr4uelropW7rqUfTiOn+8u0leg/42UhblPxHkfoh0Ruu3I9Y1962P3u2DY4+h7GVTSVU6g== dependencies: - "@jest/types" "^25.5.0" - jest-message-util "^25.5.0" - jest-mock "^25.5.0" - jest-util "^25.5.0" - lolex "^5.0.0" + expect "^29.5.0" + jest-snapshot "^29.5.0" -"@jest/fake-timers@^26.6.2": - version "26.6.2" - resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-26.6.2.tgz#459c329bcf70cee4af4d7e3f3e67848123535aad" - integrity sha512-14Uleatt7jdzefLPYM3KLcnUl1ZNikaKq34enpb5XG9i81JpppDb5muZvonvKyrl7ftEHkKS5L5/eB/kxJ+bvA== +"@jest/fake-timers@^29.5.0": + version "29.5.0" + resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-29.5.0.tgz#d4d09ec3286b3d90c60bdcd66ed28d35f1b4dc2c" + integrity sha512-9ARvuAAQcBwDAqOnglWq2zwNIRUDtk/SCkp/ToGEhFv5r86K21l+VEs0qNTaXtyiY0lEePl3kylijSYJQqdbDg== dependencies: - "@jest/types" "^26.6.2" - "@sinonjs/fake-timers" "^6.0.1" + "@jest/types" "^29.5.0" + "@sinonjs/fake-timers" "^10.0.2" "@types/node" "*" - jest-message-util "^26.6.2" - jest-mock "^26.6.2" - jest-util "^26.6.2" - -"@jest/globals@^25.5.2": - version "25.5.2" - resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-25.5.2.tgz#5e45e9de8d228716af3257eeb3991cc2e162ca88" - integrity sha512-AgAS/Ny7Q2RCIj5kZ+0MuKM1wbF0WMLxbCVl/GOMoCNbODRdJ541IxJ98xnZdVSZXivKpJlNPIWa3QmY0l4CXA== - dependencies: - "@jest/environment" "^25.5.0" - "@jest/types" "^25.5.0" - expect "^25.5.0" - -"@jest/globals@^26.6.2": - version "26.6.2" - resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-26.6.2.tgz#5b613b78a1aa2655ae908eba638cc96a20df720a" - integrity sha512-85Ltnm7HlB/KesBUuALwQ68YTU72w9H2xW9FjZ1eL1U3lhtefjjl5c2MiUbpXt/i6LaPRvoOFJ22yCBSfQ0JIA== - dependencies: - "@jest/environment" "^26.6.2" - "@jest/types" "^26.6.2" - expect "^26.6.2" + jest-message-util "^29.5.0" + jest-mock "^29.5.0" + jest-util "^29.5.0" -"@jest/reporters@^25.5.1": - version "25.5.1" - resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-25.5.1.tgz#cb686bcc680f664c2dbaf7ed873e93aa6811538b" - integrity sha512-3jbd8pPDTuhYJ7vqiHXbSwTJQNavczPs+f1kRprRDxETeE3u6srJ+f0NPuwvOmk+lmunZzPkYWIFZDLHQPkviw== +"@jest/globals@^29.5.0": + version "29.5.0" + resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-29.5.0.tgz#6166c0bfc374c58268677539d0c181f9c1833298" + integrity sha512-S02y0qMWGihdzNbUiqSAiKSpSozSuHX5UYc7QbnHP+D9Lyw8DgGGCinrN9uSuHPeKgSSzvPom2q1nAtBvUsvPQ== dependencies: - "@bcoe/v8-coverage" "^0.2.3" - "@jest/console" "^25.5.0" - "@jest/test-result" "^25.5.0" - "@jest/transform" "^25.5.1" - "@jest/types" "^25.5.0" - chalk "^3.0.0" - collect-v8-coverage "^1.0.0" - exit "^0.1.2" - glob "^7.1.2" - graceful-fs "^4.2.4" - istanbul-lib-coverage "^3.0.0" - istanbul-lib-instrument "^4.0.0" - istanbul-lib-report "^3.0.0" - istanbul-lib-source-maps "^4.0.0" - istanbul-reports "^3.0.2" - jest-haste-map "^25.5.1" - jest-resolve "^25.5.1" - jest-util "^25.5.0" - jest-worker "^25.5.0" - slash "^3.0.0" - source-map "^0.6.0" - string-length "^3.1.0" - terminal-link "^2.0.0" - v8-to-istanbul "^4.1.3" - optionalDependencies: - node-notifier "^6.0.0" + "@jest/environment" "^29.5.0" + "@jest/expect" "^29.5.0" + "@jest/types" "^29.5.0" + jest-mock "^29.5.0" -"@jest/reporters@^26.6.2": - version "26.6.2" - resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-26.6.2.tgz#1f518b99637a5f18307bd3ecf9275f6882a667f6" - integrity sha512-h2bW53APG4HvkOnVMo8q3QXa6pcaNt1HkwVsOPMBV6LD/q9oSpxNSYZQYkAnjdMjrJ86UuYeLo+aEZClV6opnw== +"@jest/reporters@^29.5.0": + version "29.5.0" + resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-29.5.0.tgz#985dfd91290cd78ddae4914ba7921bcbabe8ac9b" + integrity sha512-D05STXqj/M8bP9hQNSICtPqz97u7ffGzZu+9XLucXhkOFBqKcXe04JLZOgIekOxdb73MAoBUFnqvf7MCpKk5OA== dependencies: "@bcoe/v8-coverage" "^0.2.3" - "@jest/console" "^26.6.2" - "@jest/test-result" "^26.6.2" - "@jest/transform" "^26.6.2" - "@jest/types" "^26.6.2" + "@jest/console" "^29.5.0" + "@jest/test-result" "^29.5.0" + "@jest/transform" "^29.5.0" + "@jest/types" "^29.5.0" + "@jridgewell/trace-mapping" "^0.3.15" + "@types/node" "*" chalk "^4.0.0" collect-v8-coverage "^1.0.0" exit "^0.1.2" - glob "^7.1.2" - graceful-fs "^4.2.4" + glob "^7.1.3" + graceful-fs "^4.2.9" istanbul-lib-coverage "^3.0.0" - istanbul-lib-instrument "^4.0.3" + istanbul-lib-instrument "^5.1.0" istanbul-lib-report "^3.0.0" istanbul-lib-source-maps "^4.0.0" - istanbul-reports "^3.0.2" - jest-haste-map "^26.6.2" - jest-resolve "^26.6.2" - jest-util "^26.6.2" - jest-worker "^26.6.2" + istanbul-reports "^3.1.3" + jest-message-util "^29.5.0" + jest-util "^29.5.0" + jest-worker "^29.5.0" slash "^3.0.0" - source-map "^0.6.0" string-length "^4.0.1" - terminal-link "^2.0.0" - v8-to-istanbul "^7.0.0" - optionalDependencies: - node-notifier "^8.0.0" - -"@jest/source-map@^24.9.0": - version "24.9.0" - resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-24.9.0.tgz#0e263a94430be4b41da683ccc1e6bffe2a191714" - integrity sha512-/Xw7xGlsZb4MJzNDgB7PW5crou5JqWiBQaz6xyPd3ArOg2nfn/PunV8+olXbbEZzNl591o5rWKE9BRDaFAuIBg== - dependencies: - callsites "^3.0.0" - graceful-fs "^4.1.15" - source-map "^0.6.0" + strip-ansi "^6.0.0" + v8-to-istanbul "^9.0.1" -"@jest/source-map@^25.5.0": - version "25.5.0" - resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-25.5.0.tgz#df5c20d6050aa292c2c6d3f0d2c7606af315bd1b" - integrity sha512-eIGx0xN12yVpMcPaVpjXPnn3N30QGJCJQSkEDUt9x1fI1Gdvb07Ml6K5iN2hG7NmMP6FDmtPEssE3z6doOYUwQ== +"@jest/schemas@^29.4.3": + version "29.4.3" + resolved "https://registry.yarnpkg.com/@jest/schemas/-/schemas-29.4.3.tgz#39cf1b8469afc40b6f5a2baaa146e332c4151788" + integrity sha512-VLYKXQmtmuEz6IxJsrZwzG9NvtkQsWNnWMsKxqWNu3+CnfzJQhp0WDDKWLVV9hLKr0l3SLLFRqcYHjhtyuDVxg== dependencies: - callsites "^3.0.0" - graceful-fs "^4.2.4" - source-map "^0.6.0" + "@sinclair/typebox" "^0.25.16" -"@jest/source-map@^26.6.2": - version "26.6.2" - resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-26.6.2.tgz#29af5e1e2e324cafccc936f218309f54ab69d535" - integrity sha512-YwYcCwAnNmOVsZ8mr3GfnzdXDAl4LaenZP5z+G0c8bzC9/dugL8zRmxZzdoTl4IaS3CryS1uWnROLPFmb6lVvA== +"@jest/source-map@^29.4.3": + version "29.4.3" + resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-29.4.3.tgz#ff8d05cbfff875d4a791ab679b4333df47951d20" + integrity sha512-qyt/mb6rLyd9j1jUts4EQncvS6Yy3PM9HghnNv86QBlV+zdL2inCdK1tuVlL+J+lpiw2BI67qXOrX3UurBqQ1w== dependencies: + "@jridgewell/trace-mapping" "^0.3.15" callsites "^3.0.0" - graceful-fs "^4.2.4" - source-map "^0.6.0" - -"@jest/test-result@^24.9.0": - version "24.9.0" - resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-24.9.0.tgz#11796e8aa9dbf88ea025757b3152595ad06ba0ca" - integrity sha512-XEFrHbBonBJ8dGp2JmF8kP/nQI/ImPpygKHwQ/SY+es59Z3L5PI4Qb9TQQMAEeYsThG1xF0k6tmG0tIKATNiiA== - dependencies: - "@jest/console" "^24.9.0" - "@jest/types" "^24.9.0" - "@types/istanbul-lib-coverage" "^2.0.0" + graceful-fs "^4.2.9" "@jest/test-result@^25.5.0": version "25.5.0" @@ -1651,111 +1522,46 @@ "@types/istanbul-lib-coverage" "^2.0.0" collect-v8-coverage "^1.0.0" -"@jest/test-result@^26.6.2": - version "26.6.2" - resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-26.6.2.tgz#55da58b62df134576cc95476efa5f7949e3f5f18" - integrity sha512-5O7H5c/7YlojphYNrK02LlDIV2GNPYisKwHm2QTKjNZeEzezCbwYs9swJySv2UfPMyZ0VdsmMv7jIlD/IKYQpQ== +"@jest/test-result@^29.5.0": + version "29.5.0" + resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-29.5.0.tgz#7c856a6ca84f45cc36926a4e9c6b57f1973f1408" + integrity sha512-fGl4rfitnbfLsrfx1uUpDEESS7zM8JdgZgOCQuxQvL1Sn/I6ijeAVQWGfXI9zb1i9Mzo495cIpVZhA0yr60PkQ== dependencies: - "@jest/console" "^26.6.2" - "@jest/types" "^26.6.2" + "@jest/console" "^29.5.0" + "@jest/types" "^29.5.0" "@types/istanbul-lib-coverage" "^2.0.0" collect-v8-coverage "^1.0.0" -"@jest/test-sequencer@^25.5.4": - version "25.5.4" - resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-25.5.4.tgz#9b4e685b36954c38d0f052e596d28161bdc8b737" - integrity sha512-pTJGEkSeg1EkCO2YWq6hbFvKNXk8ejqlxiOg1jBNLnWrgXOkdY6UmqZpwGFXNnRt9B8nO1uWMzLLZ4eCmhkPNA== - dependencies: - "@jest/test-result" "^25.5.0" - graceful-fs "^4.2.4" - jest-haste-map "^25.5.1" - jest-runner "^25.5.4" - jest-runtime "^25.5.4" - -"@jest/test-sequencer@^26.6.3": - version "26.6.3" - resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-26.6.3.tgz#98e8a45100863886d074205e8ffdc5a7eb582b17" - integrity sha512-YHlVIjP5nfEyjlrSr8t/YdNfU/1XEt7c5b4OxcXCjyRhjzLYu/rO69/WHPuYcbCWkz8kAeZVZp2N2+IOLLEPGw== - dependencies: - "@jest/test-result" "^26.6.2" - graceful-fs "^4.2.4" - jest-haste-map "^26.6.2" - jest-runner "^26.6.3" - jest-runtime "^26.6.3" - -"@jest/transform@^24.9.0": - version "24.9.0" - resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-24.9.0.tgz#4ae2768b296553fadab09e9ec119543c90b16c56" - integrity sha512-TcQUmyNRxV94S0QpMOnZl0++6RMiqpbH/ZMccFB/amku6Uwvyb1cjYX7xkp5nGNkbX4QPH/FcB6q1HBTHynLmQ== - dependencies: - "@babel/core" "^7.1.0" - "@jest/types" "^24.9.0" - babel-plugin-istanbul "^5.1.0" - chalk "^2.0.1" - convert-source-map "^1.4.0" - fast-json-stable-stringify "^2.0.0" - graceful-fs "^4.1.15" - jest-haste-map "^24.9.0" - jest-regex-util "^24.9.0" - jest-util "^24.9.0" - micromatch "^3.1.10" - pirates "^4.0.1" - realpath-native "^1.1.0" - slash "^2.0.0" - source-map "^0.6.1" - write-file-atomic "2.4.1" - -"@jest/transform@^25.5.1": - version "25.5.1" - resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-25.5.1.tgz#0469ddc17699dd2bf985db55fa0fb9309f5c2db3" - integrity sha512-Y8CEoVwXb4QwA6Y/9uDkn0Xfz0finGkieuV0xkdF9UtZGJeLukD5nLkaVrVsODB1ojRWlaoD0AJZpVHCSnJEvg== +"@jest/test-sequencer@^29.5.0": + version "29.5.0" + resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-29.5.0.tgz#34d7d82d3081abd523dbddc038a3ddcb9f6d3cc4" + integrity sha512-yPafQEcKjkSfDXyvtgiV4pevSeyuA6MQr6ZIdVkWJly9vkqjnFfcfhRQqpD5whjoU8EORki752xQmjaqoFjzMQ== dependencies: - "@babel/core" "^7.1.0" - "@jest/types" "^25.5.0" - babel-plugin-istanbul "^6.0.0" - chalk "^3.0.0" - convert-source-map "^1.4.0" - fast-json-stable-stringify "^2.0.0" - graceful-fs "^4.2.4" - jest-haste-map "^25.5.1" - jest-regex-util "^25.2.6" - jest-util "^25.5.0" - micromatch "^4.0.2" - pirates "^4.0.1" - realpath-native "^2.0.0" + "@jest/test-result" "^29.5.0" + graceful-fs "^4.2.9" + jest-haste-map "^29.5.0" slash "^3.0.0" - source-map "^0.6.1" - write-file-atomic "^3.0.0" -"@jest/transform@^26.6.2": - version "26.6.2" - resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-26.6.2.tgz#5ac57c5fa1ad17b2aae83e73e45813894dcf2e4b" - integrity sha512-E9JjhUgNzvuQ+vVAL21vlyfy12gP0GhazGgJC4h6qUt1jSdUXGWJ1wfu/X7Sd8etSgxV4ovT1pb9v5D6QW4XgA== +"@jest/transform@^29.5.0": + version "29.5.0" + resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-29.5.0.tgz#cf9c872d0965f0cbd32f1458aa44a2b1988b00f9" + integrity sha512-8vbeZWqLJOvHaDfeMuoHITGKSz5qWc9u04lnWrQE3VyuSw604PzQM824ZeX9XSjUCeDiE3GuxZe5UKa8J61NQw== dependencies: - "@babel/core" "^7.1.0" - "@jest/types" "^26.6.2" - babel-plugin-istanbul "^6.0.0" + "@babel/core" "^7.11.6" + "@jest/types" "^29.5.0" + "@jridgewell/trace-mapping" "^0.3.15" + babel-plugin-istanbul "^6.1.1" chalk "^4.0.0" - convert-source-map "^1.4.0" - fast-json-stable-stringify "^2.0.0" - graceful-fs "^4.2.4" - jest-haste-map "^26.6.2" - jest-regex-util "^26.0.0" - jest-util "^26.6.2" - micromatch "^4.0.2" - pirates "^4.0.1" + convert-source-map "^2.0.0" + fast-json-stable-stringify "^2.1.0" + graceful-fs "^4.2.9" + jest-haste-map "^29.5.0" + jest-regex-util "^29.4.3" + jest-util "^29.5.0" + micromatch "^4.0.4" + pirates "^4.0.4" slash "^3.0.0" - source-map "^0.6.1" - write-file-atomic "^3.0.0" - -"@jest/types@^24.3.0", "@jest/types@^24.9.0": - version "24.9.0" - resolved "https://registry.yarnpkg.com/@jest/types/-/types-24.9.0.tgz#63cb26cb7500d069e5a389441a7c6ab5e909fc59" - integrity sha512-XKK7ze1apu5JWQ5eZjHITP66AX+QsLlbaJRBGYr8pNzwcAE2JVkwnf0yqjHTsDRcjR0mujy/NmZMXw5kl+kGBw== - dependencies: - "@types/istanbul-lib-coverage" "^2.0.0" - "@types/istanbul-reports" "^1.1.1" - "@types/yargs" "^13.0.0" + write-file-atomic "^4.0.2" "@jest/types@^25.5.0": version "25.5.0" @@ -1778,6 +1584,18 @@ "@types/yargs" "^15.0.0" chalk "^4.0.0" +"@jest/types@^29.5.0": + version "29.5.0" + resolved "https://registry.yarnpkg.com/@jest/types/-/types-29.5.0.tgz#f59ef9b031ced83047c67032700d8c807d6e1593" + integrity sha512-qbu7kN6czmVRc3xWFQcAN03RAUamgppVUdXrvl1Wr3jlNF93o9mJbGcDWrwGB6ht44u7efB1qCFgVQmca24Uog== + dependencies: + "@jest/schemas" "^29.4.3" + "@types/istanbul-lib-coverage" "^2.0.0" + "@types/istanbul-reports" "^3.0.0" + "@types/node" "*" + "@types/yargs" "^17.0.8" + chalk "^4.0.0" + "@jridgewell/gen-mapping@^0.1.0": version "0.1.1" resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz#e5d2e450306a9491e3bd77e323e38d7aff315996" @@ -1810,7 +1628,7 @@ resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz#add4c98d341472a289190b424efbdb096991bb24" integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw== -"@jridgewell/trace-mapping@^0.3.9": +"@jridgewell/trace-mapping@^0.3.12", "@jridgewell/trace-mapping@^0.3.15", "@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.9": version "0.3.17" resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz#793041277af9073b0951a7fe0f0d8c4c98c36985" integrity sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g== @@ -2753,19 +2571,24 @@ estree-walker "^1.0.1" picomatch "^2.2.2" -"@sinonjs/commons@^1.7.0": - version "1.8.3" - resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-1.8.3.tgz#3802ddd21a50a949b6721ddd72da36e67e7f1b2d" - integrity sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ== +"@sinclair/typebox@^0.25.16": + version "0.25.24" + resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.25.24.tgz#8c7688559979f7079aacaf31aa881c3aa410b718" + integrity sha512-XJfwUVUKDHF5ugKwIcxEgc9k8b7HbznCp6eUfWgu710hMPNIO4aw4/zB5RogDQz8nd6gyCDpU9O/m6qYEWY6yQ== + +"@sinonjs/commons@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-2.0.0.tgz#fd4ca5b063554307e8327b4564bd56d3b73924a3" + integrity sha512-uLa0j859mMrg2slwQYdO/AkrOfmH+X6LTVmNTS9CqexuE2IvVORIkSpJLqePAbEnKJ77aMmCwr1NUZ57120Xcg== dependencies: type-detect "4.0.8" -"@sinonjs/fake-timers@^6.0.1": - version "6.0.1" - resolved "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-6.0.1.tgz#293674fccb3262ac782c7aadfdeca86b10c75c40" - integrity sha512-MZPUxrmFubI36XS1DI3qmI0YdN1gks62JtFZvxR67ljjSNCeK6U08Zx4msEWOXuofgqUt6zPHSi1H9fbjR/NRA== +"@sinonjs/fake-timers@^10.0.2": + version "10.0.2" + resolved "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-10.0.2.tgz#d10549ed1f423d80639c528b6c7f5a1017747d0c" + integrity sha512-SwUDyjWnah1AaNl7kxsa7cfLhlTYoiyhDAIgyh+El30YvXs/o7OLXpYH88Zdhyx9JExKrmHDJ+10bwIcY80Jmw== dependencies: - "@sinonjs/commons" "^1.7.0" + "@sinonjs/commons" "^2.0.0" "@testing-library/dom@^8.5.0": version "8.13.0" @@ -2816,23 +2639,23 @@ "@testing-library/dom" "^8.5.0" "@types/react-dom" "*" -"@tootallnate/once@1": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-1.1.2.tgz#ccb91445360179a04e7fe6aff78c00ffc1eeaf82" - integrity sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw== +"@tootallnate/once@2": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-2.0.0.tgz#f544a148d3ab35801c1f633a7441fd87c2e484bf" + integrity sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A== "@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.7": - version "7.1.17" - resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.1.17.tgz#f50ac9d20d64153b510578d84f9643f9a3afbe64" - integrity sha512-6zzkezS9QEIL8yCBvXWxPTJPNuMeECJVxSOhxNY/jfq9LxOTHivaYTqr37n9LknWWRTIkzqH2UilS5QFvfa90A== +"@types/babel__core@^7.1.14": + version "7.20.0" + resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.20.0.tgz#61bc5a4cae505ce98e1e36c5445e4bee060d8891" + integrity sha512-+n8dL/9GWblDO0iU6eZAwEIJVr5DWigtle+Q6HLOrh/pdbXOhOtqzq8VPPE2zvNJzSKY4vH/z3iT3tn0A3ypiQ== dependencies: - "@babel/parser" "^7.1.0" - "@babel/types" "^7.0.0" + "@babel/parser" "^7.20.7" + "@babel/types" "^7.20.7" "@types/babel__generator" "*" "@types/babel__template" "*" "@types/babel__traverse" "*" @@ -2852,10 +2675,10 @@ "@babel/parser" "^7.1.0" "@babel/types" "^7.0.0" -"@types/babel__traverse@*", "@types/babel__traverse@^7.0.4", "@types/babel__traverse@^7.0.6": - version "7.14.2" - resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.14.2.tgz#ffcd470bbb3f8bf30481678fb5502278ca833a43" - integrity sha512-K2waXdXBi2302XUdcHcR1jCeU0LL4TD9HRs/gk0N2Xvrht+G/BfJa4QObBQZfhMdxiCpV3COl5Nfq4uKTeTnJA== +"@types/babel__traverse@*", "@types/babel__traverse@^7.0.6": + version "7.18.3" + resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.18.3.tgz#dfc508a85781e5698d5b33443416b6268c4b3e8d" + integrity sha512-1kbcJ40lLB7MHsj39U4Sh1uTd2E7rLEa79kmDpI6cy+XiXsteB3POdQomoq4FxszMrO3ZYchkhYJw7A2862b3w== dependencies: "@babel/types" "^7.3.0" @@ -2877,10 +2700,10 @@ "@types/minimatch" "*" "@types/node" "*" -"@types/graceful-fs@^4.1.2": - version "4.1.5" - resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.5.tgz#21ffba0d98da4350db64891f92a9e5db3cdb4e15" - integrity sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw== +"@types/graceful-fs@^4.1.3": + version "4.1.6" + resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.6.tgz#e14b2576a1c25026b7f02ede1de3b84c3a1efeae" + integrity sha512-Sig0SNORX9fdW+bQuTEovKj3uHcUL6LQKbCrrqb1X7J6/ReAbhCXRAhc+SMejhLELFj2QcyuxmUooZ4bt5ReSw== dependencies: "@types/node" "*" @@ -2911,7 +2734,7 @@ dependencies: "@types/istanbul-lib-report" "*" -"@types/jest@*", "@types/jest@26.x", "@types/jest@^26.0.15": +"@types/jest@*", "@types/jest@^26.0.15": version "26.0.24" resolved "https://registry.yarnpkg.com/@types/jest/-/jest-26.0.24.tgz#943d11976b16739185913a1936e0de0c4a7d595a" integrity sha512-E/X5Vib8BWqZNRlDxj9vYXhsDwPYbPINqKF9BsnSoon4RQ0D9moEuLD8txgyypFLH7J4+Lho9Nr/c8H0Fi+17w== @@ -2935,10 +2758,19 @@ ast-types "^0.14.1" recast "^0.20.3" -"@types/json-schema@^7.0.3", "@types/json-schema@^7.0.7": - version "7.0.9" - resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.9.tgz#97edc9037ea0c38585320b28964dde3b39e4660d" - integrity sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ== +"@types/jsdom@^20.0.0": + version "20.0.1" + resolved "https://registry.yarnpkg.com/@types/jsdom/-/jsdom-20.0.1.tgz#07c14bc19bd2f918c1929541cdaacae894744808" + integrity sha512-d0r18sZPmMQr1eG35u12FZfhIXNrnsPU/g5wvRKCUf/tOGilKKwYMYGqh33BNR6ba+2gkHw1EUiHoN3mn7E5IQ== + dependencies: + "@types/node" "*" + "@types/tough-cookie" "*" + parse5 "^7.0.0" + +"@types/json-schema@^7.0.3", "@types/json-schema@^7.0.9": + version "7.0.11" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.11.tgz#d421b6c527a3037f7c84433fd2c4229e016863d3" + integrity sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ== "@types/json5@^0.0.29": version "0.0.29" @@ -2975,15 +2807,10 @@ resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0" integrity sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA== -"@types/prettier@^1.19.0": - version "1.19.1" - resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-1.19.1.tgz#33509849f8e679e4add158959fdb086440e9553f" - integrity sha512-5qOlnZscTn4xxM5MeGXAMOsIOIKIbh9e85zJWfBRVPlRMEVawzoPhINYbRGkBZCI8LxvBe7tJCdWiarA99OZfQ== - -"@types/prettier@^2.0.0": - version "2.4.2" - resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.4.2.tgz#4c62fae93eb479660c3bd93f9d24d561597a8281" - integrity sha512-ekoj4qOQYp7CvjX8ZDBgN86w3MqQhLE1hczEJbEIjgFEumDy+na/4AJAbLXfgEWFNB2pKadM5rPFtuSGMWK7xA== +"@types/prettier@^2.1.5": + version "2.7.2" + resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.7.2.tgz#6c2324641cc4ba050a8c710b2b251b377581fbf0" + integrity sha512-KufADq8uQqo1pYKVIYzfKbJfBAc0sOeXqGbFaSpv8MRmC/zXgowNZmFcbngndGk922QDmOASEXUZCaY48gs4cg== "@types/prop-types@*", "@types/prop-types@^15.5.2": version "15.7.4" @@ -3030,6 +2857,11 @@ resolved "https://registry.yarnpkg.com/@types/semver/-/semver-6.2.3.tgz#5798ecf1bec94eaa64db39ee52808ec0693315aa" integrity sha512-KQf+QAMWKMrtBMsB8/24w53tEsxllMj6TuA80TT/5igJalLI/zm0L3oXRbIAl4Ohfc85gyHX/jhMwsVkmhLU4A== +"@types/semver@^7.3.12": + version "7.3.13" + resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.3.13.tgz#da4bfd73f49bd541d28920ab0e2bf0ee80f71c91" + integrity sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw== + "@types/stack-utils@^1.0.1": version "1.0.1" resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-1.0.1.tgz#0a851d3bd96498fa25c33ab7278ed3bd65f06c3e" @@ -3047,18 +2879,16 @@ dependencies: "@types/jest" "*" +"@types/tough-cookie@*": + version "4.0.2" + resolved "https://registry.yarnpkg.com/@types/tough-cookie/-/tough-cookie-4.0.2.tgz#6286b4c7228d58ab7866d19716f3696e03a09397" + integrity sha512-Q5vtl1W5ue16D+nIaW8JWebSSraJVlK+EthKn7e7UcD4KWsaSJ8BqGPXNaPghgtcn/fhvrN17Tv8ksUsQpiplw== + "@types/yargs-parser@*": version "20.2.1" resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-20.2.1.tgz#3b9ce2489919d9e4fea439b76916abc34b2df129" integrity sha512-7tFImggNeNBVMsn0vLrpn1H1uPrUBdnARPTpZoitY37ZrdJREzf7I16tMrlK3hen349gr1NYh8CmZQa7CTG6Aw== -"@types/yargs@^13.0.0": - version "13.0.12" - resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-13.0.12.tgz#d895a88c703b78af0465a9de88aa92c61430b092" - integrity sha512-qCxJE1qgz2y0hA4pIxjBR+PelCH0U5CK1XJXFwCNqfmliatKp47UCXXE9Dyk1OXBDLvsCF57TqQEJaeLfDYEOQ== - dependencies: - "@types/yargs-parser" "*" - "@types/yargs@^15.0.0": version "15.0.14" resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-15.0.14.tgz#26d821ddb89e70492160b66d10a0eb6df8f6fb06" @@ -3066,6 +2896,13 @@ dependencies: "@types/yargs-parser" "*" +"@types/yargs@^17.0.8": + version "17.0.22" + resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-17.0.22.tgz#7dd37697691b5f17d020f3c63e7a45971ff71e9a" + integrity sha512-pet5WJ9U8yPVRhkwuEIp5ktAeAqRZOq4UdAyWLWzxbtpyXnzbtLdKiXAjJzi/KLmPGS9wk86lUFWZFN6sISo4g== + dependencies: + "@types/yargs-parser" "*" + "@typescript-eslint/eslint-plugin@^2.12.0": version "2.34.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-2.34.0.tgz#6f8ce8a46c7dea4a6f1d171d2bb8fbae6dac2be9" @@ -3076,18 +2913,20 @@ regexpp "^3.0.0" tsutils "^3.17.1" -"@typescript-eslint/eslint-plugin@^4.29.3", "@typescript-eslint/eslint-plugin@^4.6.1": - version "4.33.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.33.0.tgz#c24dc7c8069c7706bc40d99f6fa87edcb2005276" - integrity sha512-aINiAxGVdOl1eJyVjaWn/YcVAq4Gi/Yo35qHGCnqbWVz61g39D0h23veY/MA0rFFGfxK7TySg2uwDeNv+JgVpg== +"@typescript-eslint/eslint-plugin@^5.0.0": + version "5.54.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.54.1.tgz#0c5091289ce28372e38ab8d28e861d2dbe1ab29e" + integrity sha512-a2RQAkosH3d3ZIV08s3DcL/mcGc2M/UC528VkPULFxR9VnVPT8pBu0IyBAJJmVsCmhVfwQX1v6q+QGnmSe1bew== dependencies: - "@typescript-eslint/experimental-utils" "4.33.0" - "@typescript-eslint/scope-manager" "4.33.0" - debug "^4.3.1" - functional-red-black-tree "^1.0.1" - ignore "^5.1.8" - regexpp "^3.1.0" - semver "^7.3.5" + "@typescript-eslint/scope-manager" "5.54.1" + "@typescript-eslint/type-utils" "5.54.1" + "@typescript-eslint/utils" "5.54.1" + debug "^4.3.4" + grapheme-splitter "^1.0.4" + ignore "^5.2.0" + natural-compare-lite "^1.4.0" + regexpp "^3.2.0" + semver "^7.3.7" tsutils "^3.21.0" "@typescript-eslint/experimental-utils@2.34.0": @@ -3100,18 +2939,6 @@ eslint-scope "^5.0.0" eslint-utils "^2.0.0" -"@typescript-eslint/experimental-utils@4.33.0": - version "4.33.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-4.33.0.tgz#6f2a786a4209fa2222989e9380b5331b2810f7fd" - integrity sha512-zeQjOoES5JFjTnAhI5QY7ZviczMzDptls15GFsI6jyUOq0kOf9+WonkhtlIhh0RgHRnqj5gdNxW5j1EvAyYg6Q== - dependencies: - "@types/json-schema" "^7.0.7" - "@typescript-eslint/scope-manager" "4.33.0" - "@typescript-eslint/types" "4.33.0" - "@typescript-eslint/typescript-estree" "4.33.0" - eslint-scope "^5.1.1" - eslint-utils "^3.0.0" - "@typescript-eslint/parser@^2.12.0": version "2.34.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-2.34.0.tgz#50252630ca319685420e9a39ca05fe185a256bc8" @@ -3122,28 +2949,38 @@ "@typescript-eslint/typescript-estree" "2.34.0" eslint-visitor-keys "^1.1.0" -"@typescript-eslint/parser@^4.0.0", "@typescript-eslint/parser@^4.1.1": - version "4.33.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-4.33.0.tgz#dfe797570d9694e560528d18eecad86c8c744899" - integrity sha512-ZohdsbXadjGBSK0/r+d87X0SBmKzOq4/S5nzK6SBgJspFo9/CUDJ7hjayuze+JK7CZQLDMroqytp7pOcFKTxZA== +"@typescript-eslint/parser@^5.0.0": + version "5.54.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.54.1.tgz#05761d7f777ef1c37c971d3af6631715099b084c" + integrity sha512-8zaIXJp/nG9Ff9vQNh7TI+C3nA6q6iIsGJ4B4L6MhZ7mHnTMR4YP5vp2xydmFXIy8rpyIVbNAG44871LMt6ujg== + dependencies: + "@typescript-eslint/scope-manager" "5.54.1" + "@typescript-eslint/types" "5.54.1" + "@typescript-eslint/typescript-estree" "5.54.1" + debug "^4.3.4" + +"@typescript-eslint/scope-manager@5.54.1": + version "5.54.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.54.1.tgz#6d864b4915741c608a58ce9912edf5a02bb58735" + integrity sha512-zWKuGliXxvuxyM71UA/EcPxaviw39dB2504LqAmFDjmkpO8qNLHcmzlh6pbHs1h/7YQ9bnsO8CCcYCSA8sykUg== dependencies: - "@typescript-eslint/scope-manager" "4.33.0" - "@typescript-eslint/types" "4.33.0" - "@typescript-eslint/typescript-estree" "4.33.0" - debug "^4.3.1" + "@typescript-eslint/types" "5.54.1" + "@typescript-eslint/visitor-keys" "5.54.1" -"@typescript-eslint/scope-manager@4.33.0": - version "4.33.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-4.33.0.tgz#d38e49280d983e8772e29121cf8c6e9221f280a3" - integrity sha512-5IfJHpgTsTZuONKbODctL4kKuQje/bzBRkwHE8UOZ4f89Zeddg+EGZs8PD8NcN4LdM3ygHWYB3ukPAYjvl/qbQ== +"@typescript-eslint/type-utils@5.54.1": + version "5.54.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.54.1.tgz#4825918ec27e55da8bb99cd07ec2a8e5f50ab748" + integrity sha512-WREHsTz0GqVYLIbzIZYbmUUr95DKEKIXZNH57W3s+4bVnuF1TKe2jH8ZNH8rO1CeMY3U4j4UQeqPNkHMiGem3g== dependencies: - "@typescript-eslint/types" "4.33.0" - "@typescript-eslint/visitor-keys" "4.33.0" + "@typescript-eslint/typescript-estree" "5.54.1" + "@typescript-eslint/utils" "5.54.1" + debug "^4.3.4" + tsutils "^3.21.0" -"@typescript-eslint/types@4.33.0": - version "4.33.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.33.0.tgz#a1e59036a3b53ae8430ceebf2a919dc7f9af6d72" - integrity sha512-zKp7CjQzLQImXEpLt2BUw1tvOMPfNoTAfb8l51evhYbOEEzdWyQNmHWWGPR6hwKJDAi+1VXSBmnhL9kyVTTOuQ== +"@typescript-eslint/types@5.54.1": + version "5.54.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.54.1.tgz#29fbac29a716d0f08c62fe5de70c9b6735de215c" + integrity sha512-G9+1vVazrfAfbtmCapJX8jRo2E4MDXxgm/IMOF4oGh3kq7XuK3JRkOg6y2Qu1VsTRmWETyTkWt1wxy7X7/yLkw== "@typescript-eslint/typescript-estree@2.34.0": version "2.34.0" @@ -3158,26 +2995,40 @@ semver "^7.3.2" tsutils "^3.17.1" -"@typescript-eslint/typescript-estree@4.33.0": - version "4.33.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.33.0.tgz#0dfb51c2908f68c5c08d82aefeaf166a17c24609" - integrity sha512-rkWRY1MPFzjwnEVHsxGemDzqqddw2QbTJlICPD9p9I9LfsO8fdmfQPOX3uKfUaGRDFJbfrtm/sXhVXN4E+bzCA== +"@typescript-eslint/typescript-estree@5.54.1": + version "5.54.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.54.1.tgz#df7b6ae05fd8fef724a87afa7e2f57fa4a599be1" + integrity sha512-bjK5t+S6ffHnVwA0qRPTZrxKSaFYocwFIkZx5k7pvWfsB1I57pO/0M0Skatzzw1sCkjJ83AfGTL0oFIFiDX3bg== dependencies: - "@typescript-eslint/types" "4.33.0" - "@typescript-eslint/visitor-keys" "4.33.0" - debug "^4.3.1" - globby "^11.0.3" - is-glob "^4.0.1" - semver "^7.3.5" + "@typescript-eslint/types" "5.54.1" + "@typescript-eslint/visitor-keys" "5.54.1" + debug "^4.3.4" + globby "^11.1.0" + is-glob "^4.0.3" + semver "^7.3.7" tsutils "^3.21.0" -"@typescript-eslint/visitor-keys@4.33.0": - version "4.33.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.33.0.tgz#2a22f77a41604289b7a186586e9ec48ca92ef1dd" - integrity sha512-uqi/2aSz9g2ftcHWf8uLPJA70rUv6yuMW5Bohw+bwcuzaxQIHaKFZCKGoGXIrc9vkTJ3+0txM73K0Hq3d5wgIg== +"@typescript-eslint/utils@5.54.1": + version "5.54.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.54.1.tgz#7a3ee47409285387b9d4609ea7e1020d1797ec34" + integrity sha512-IY5dyQM8XD1zfDe5X8jegX6r2EVU5o/WJnLu/znLPWCBF7KNGC+adacXnt5jEYS9JixDcoccI6CvE4RCjHMzCQ== dependencies: - "@typescript-eslint/types" "4.33.0" - eslint-visitor-keys "^2.0.0" + "@types/json-schema" "^7.0.9" + "@types/semver" "^7.3.12" + "@typescript-eslint/scope-manager" "5.54.1" + "@typescript-eslint/types" "5.54.1" + "@typescript-eslint/typescript-estree" "5.54.1" + eslint-scope "^5.1.1" + eslint-utils "^3.0.0" + semver "^7.3.7" + +"@typescript-eslint/visitor-keys@5.54.1": + version "5.54.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.54.1.tgz#d7a8a0f7181d6ac748f4d47b2306e0513b98bf8b" + integrity sha512-q8iSoHTgwCfgcRJ2l2x+xCbu8nBlRAlsQ33k24Adj8eoVBE0f8dUeI+bAa8F84Mv05UGbAx57g2zrRsYIooqQg== + dependencies: + "@typescript-eslint/types" "5.54.1" + eslint-visitor-keys "^3.3.0" "@webassemblyjs/ast@1.9.0": version "1.9.0" @@ -3351,48 +3202,35 @@ JSONStream@^1.0.4, JSONStream@^1.3.4: jsonparse "^1.2.0" through ">=2.2.7 <3" -abab@^2.0.0, abab@^2.0.3, abab@^2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.5.tgz#c0b678fb32d60fc1219c784d6a826fe385aeb79a" - integrity sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q== +abab@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.6.tgz#41b80f2c871d19686216b82309231cfd3cb3d291" + integrity sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA== abbrev@1: version "1.1.1" resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== -acorn-globals@^4.3.2: - version "4.3.4" - resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-4.3.4.tgz#9fa1926addc11c97308c4e66d7add0d40c3272e7" - integrity sha512-clfQEh21R+D0leSbUdWf3OcfqyaCSAQ8Ryq00bofSekfr9W8u1jyYZo6ir0xu9Gtcf7BjcHJpnbZH7JOCpP60A== - dependencies: - acorn "^6.0.1" - acorn-walk "^6.0.1" - -acorn-globals@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-6.0.0.tgz#46cdd39f0f8ff08a876619b55f5ac8a6dc770b45" - integrity sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg== +acorn-globals@^7.0.0: + version "7.0.1" + resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-7.0.1.tgz#0dbf05c44fa7c94332914c02066d5beff62c40c3" + integrity sha512-umOSDSDrfHbTNPuNpC2NSnnA3LUrqpevPb4T9jRx4MagXNS0rs+gwiTcAvqCRmsD6utzsrzNt+ebm00SNWiC3Q== dependencies: - acorn "^7.1.1" - acorn-walk "^7.1.1" + acorn "^8.1.0" + acorn-walk "^8.0.2" acorn-jsx@^5.2.0, acorn-jsx@^5.3.1: version "5.3.2" resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== -acorn-walk@^6.0.1: - version "6.2.0" - resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-6.2.0.tgz#123cb8f3b84c2171f1f7fb252615b1c78a6b1a8c" - integrity sha512-7evsyfH1cLOCdAzZAd43Cic04yKydNx0cF+7tiA19p1XnLLPU4dpCQOqpjqwokFe//vS0QqfqqjCS2JkiIs0cA== - -acorn-walk@^7.1.1: - version "7.2.0" - resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-7.2.0.tgz#0de889a601203909b0fbe07b8938dc21d2e967bc" - integrity sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA== +acorn-walk@^8.0.2: + version "8.2.0" + resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.2.0.tgz#741210f2e2426454508853a2f44d0ab83b7f69c1" + integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA== -acorn@^6.0.1, acorn@^6.4.1: +acorn@^6.4.1: version "6.4.2" resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.2.tgz#35866fd710528e92de10cf06016498e47e39e1e6" integrity sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ== @@ -3402,10 +3240,10 @@ acorn@^7.1.0, acorn@^7.1.1, acorn@^7.4.0: resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== -acorn@^8.2.4: - version "8.6.0" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.6.0.tgz#e3692ba0eb1a0c83eaa4f37f5fa7368dd7142895" - integrity sha512-U1riIR+lBSNi3IbxtaHOIKdH8sLFv3NYfNv8sg7ZsNhcfl4HF2++BfqqrNAxoCLQW1iiylOj76ecnaUxz+z9yw== +acorn@^8.1.0, acorn@^8.8.1: + version "8.8.2" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.2.tgz#1b2f25db02af965399b9776b0c2c391276d37c4a" + integrity sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw== agent-base@4, agent-base@^4.3.0: version "4.3.0" @@ -3630,11 +3468,6 @@ array-differ@^3.0.0: resolved "https://registry.yarnpkg.com/array-differ/-/array-differ-3.0.0.tgz#3cbb3d0f316810eafcc47624734237d6aee4ae6b" integrity sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg== -array-equal@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/array-equal/-/array-equal-1.0.0.tgz#8c2a5ef2472fd9ea742b04c77a75093ba2757c93" - integrity sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM= - array-find-index@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1" @@ -3960,32 +3793,17 @@ babel-helpers@^6.24.1: babel-runtime "^6.22.0" babel-template "^6.24.1" -babel-jest@^25.5.1: - version "25.5.1" - resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-25.5.1.tgz#bc2e6101f849d6f6aec09720ffc7bc5332e62853" - integrity sha512-9dA9+GmMjIzgPnYtkhBg73gOo/RHqPmLruP3BaGL4KEX3Dwz6pI8auSN8G8+iuEG90+GSswyKvslN+JYSaacaQ== - dependencies: - "@jest/transform" "^25.5.1" - "@jest/types" "^25.5.0" - "@types/babel__core" "^7.1.7" - babel-plugin-istanbul "^6.0.0" - babel-preset-jest "^25.5.0" - chalk "^3.0.0" - graceful-fs "^4.2.4" - slash "^3.0.0" - -babel-jest@^26.6.3: - version "26.6.3" - resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-26.6.3.tgz#d87d25cb0037577a0c89f82e5755c5d293c01056" - integrity sha512-pl4Q+GAVOHwvjrck6jKjvmGhnO3jHX/xuB9d27f+EJZ/6k+6nMuPjorrYp7s++bKKdANwzElBWnLWaObvTnaZA== +babel-jest@^29.5.0: + version "29.5.0" + resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-29.5.0.tgz#3fe3ddb109198e78b1c88f9ebdecd5e4fc2f50a5" + integrity sha512-mA4eCDh5mSo2EcA9xQjVTpmbbNk32Zb3Q3QFQsNhaK56Q+yoXowzFodLux30HRgyOho5rsQ6B0P9QpMkvvnJ0Q== dependencies: - "@jest/transform" "^26.6.2" - "@jest/types" "^26.6.2" - "@types/babel__core" "^7.1.7" - babel-plugin-istanbul "^6.0.0" - babel-preset-jest "^26.6.2" + "@jest/transform" "^29.5.0" + "@types/babel__core" "^7.1.14" + babel-plugin-istanbul "^6.1.1" + babel-preset-jest "^29.5.0" chalk "^4.0.0" - graceful-fs "^4.2.4" + graceful-fs "^4.2.9" slash "^3.0.0" babel-messages@^6.23.0: @@ -4012,17 +3830,7 @@ babel-plugin-dynamic-import-node@^2.3.3: dependencies: object.assign "^4.1.0" -babel-plugin-istanbul@^5.1.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-5.2.0.tgz#df4ade83d897a92df069c4d9a25cf2671293c854" - integrity sha512-5LphC0USA8t4i1zCtjbbNb6jJj/9+X6P37Qfirc/70EQ34xKlMW+a1RHGwxGI+SwWpNwZ27HqvzAobeqaXwiZw== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - find-up "^3.0.0" - istanbul-lib-instrument "^3.3.0" - test-exclude "^5.2.3" - -babel-plugin-istanbul@^6.0.0: +babel-plugin-istanbul@^6.1.1: version "6.1.1" resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz#fa88ec59232fd9b4e36dbbc540a8ec9a9b47da73" integrity sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA== @@ -4033,23 +3841,14 @@ babel-plugin-istanbul@^6.0.0: istanbul-lib-instrument "^5.0.4" test-exclude "^6.0.0" -babel-plugin-jest-hoist@^25.5.0: - version "25.5.0" - resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-25.5.0.tgz#129c80ba5c7fc75baf3a45b93e2e372d57ca2677" - integrity sha512-u+/W+WAjMlvoocYGTwthAiQSxDcJAyHpQ6oWlHdFZaaN+Rlk8Q7iiwDPg2lN/FyJtAYnKjFxbn7xus4HCFkg5g== - dependencies: - "@babel/template" "^7.3.3" - "@babel/types" "^7.3.3" - "@types/babel__traverse" "^7.0.6" - -babel-plugin-jest-hoist@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-26.6.2.tgz#8185bd030348d254c6d7dd974355e6a28b21e62d" - integrity sha512-PO9t0697lNTmcEHH69mdtYiOIkkOlj9fySqfO3K1eCcdISevLAE0xY59VLLUj0SoiPiTX/JU2CYFpILydUa5Lw== +babel-plugin-jest-hoist@^29.5.0: + version "29.5.0" + resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.5.0.tgz#a97db437936f441ec196990c9738d4b88538618a" + integrity sha512-zSuuuAlTMT4mzLj2nPnUm6fsE6270vdOfnpbJ+RmruU75UhLFvL0N2NgI7xpeS7NaB6hGqmd5pVpGTDYvi4Q3w== dependencies: "@babel/template" "^7.3.3" "@babel/types" "^7.3.3" - "@types/babel__core" "^7.0.0" + "@types/babel__core" "^7.1.14" "@types/babel__traverse" "^7.0.6" babel-plugin-macros@^2.6.1: @@ -4258,23 +4057,6 @@ babel-preset-babili@^0.1.4: babel-plugin-transform-undefined-to-void "^6.8.2" lodash.isplainobject "^4.0.6" -babel-preset-current-node-syntax@^0.1.2: - version "0.1.4" - resolved "https://registry.yarnpkg.com/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-0.1.4.tgz#826f1f8e7245ad534714ba001f84f7e906c3b615" - integrity sha512-5/INNCYhUGqw7VbVjT/hb3ucjgkVHKXY7lX3ZjlN4gm565VyFmJUrJ/h+h16ECVB38R/9SF6aACydpKMLZ/c9w== - dependencies: - "@babel/plugin-syntax-async-generators" "^7.8.4" - "@babel/plugin-syntax-bigint" "^7.8.3" - "@babel/plugin-syntax-class-properties" "^7.8.3" - "@babel/plugin-syntax-import-meta" "^7.8.3" - "@babel/plugin-syntax-json-strings" "^7.8.3" - "@babel/plugin-syntax-logical-assignment-operators" "^7.8.3" - "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" - "@babel/plugin-syntax-numeric-separator" "^7.8.3" - "@babel/plugin-syntax-object-rest-spread" "^7.8.3" - "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" - "@babel/plugin-syntax-optional-chaining" "^7.8.3" - babel-preset-current-node-syntax@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz#b4399239b89b2a011f9ddbe3e4f401fc40cff73b" @@ -4293,20 +4075,12 @@ babel-preset-current-node-syntax@^1.0.0: "@babel/plugin-syntax-optional-chaining" "^7.8.3" "@babel/plugin-syntax-top-level-await" "^7.8.3" -babel-preset-jest@^25.5.0: - version "25.5.0" - resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-25.5.0.tgz#c1d7f191829487a907764c65307faa0e66590b49" - integrity sha512-8ZczygctQkBU+63DtSOKGh7tFL0CeCuz+1ieud9lJ1WPQ9O6A1a/r+LGn6Y705PA6whHQ3T1XuB/PmpfNYf8Fw== +babel-preset-jest@^29.5.0: + version "29.5.0" + resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-29.5.0.tgz#57bc8cc88097af7ff6a5ab59d1cd29d52a5916e2" + integrity sha512-JOMloxOqdiBSxMAzjRaH023/vvcaSaec49zvg+2LmNsktC7ei39LTJGw02J+9uUtTZUq6xbLyJ4dxe9sSmIuAg== dependencies: - babel-plugin-jest-hoist "^25.5.0" - babel-preset-current-node-syntax "^0.1.2" - -babel-preset-jest@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-26.6.2.tgz#747872b1171df032252426586881d62d31798fee" - integrity sha512-YvdtlVm9t3k777c5NPQIv6cxFFFapys25HiUmuSgHwIZhfifweR5c5Sf5nwE3MAbfu327CYSvps8Yx6ANLyleQ== - dependencies: - babel-plugin-jest-hoist "^26.6.2" + babel-plugin-jest-hoist "^29.5.0" babel-preset-current-node-syntax "^1.0.0" babel-register@^6.26.0: @@ -4501,7 +4275,7 @@ braces@^2.3.1, braces@^2.3.2: split-string "^3.0.2" to-regex "^3.0.1" -braces@^3.0.1, braces@~3.0.2: +braces@^3.0.2, braces@~3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== @@ -4520,18 +4294,6 @@ brorand@^1.0.1, brorand@^1.1.0: resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" integrity sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8= -browser-process-hrtime@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz#3c9b4b7d782c8121e56f10106d84c0d0ffc94626" - integrity sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow== - -browser-resolve@^1.11.3: - version "1.11.3" - resolved "https://registry.yarnpkg.com/browser-resolve/-/browser-resolve-1.11.3.tgz#9b7cbb3d0f510e4cb86bdbd796124d28b5890af6" - integrity sha512-exDi1BYWB/6raKHmDTCicQfTkqwN5fioMFV4j8BsfMU4R2DK/QfZfK7kOVkmWCNANf0snkBzqGqAJBao9gZMdQ== - dependencies: - resolve "1.1.7" - browserify-aes@^1.0.0, browserify-aes@^1.0.4: version "1.2.0" resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48" @@ -4788,10 +4550,10 @@ camelcase@^5.0.0, camelcase@^5.3.1: resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== -camelcase@^6.0.0: - version "6.2.1" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.2.1.tgz#250fd350cfd555d0d2160b1d51510eaf8326e86e" - integrity sha512-tVI4q5jjFV5CavAU8DXfza/TJcZutVKo/5Foskmsqcm0MsL91moHvwiGNnqaa2o6PF/7yT5ikDRcVcl8Rj6LCA== +camelcase@^6.0.0, camelcase@^6.2.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" + integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== caniuse-api@^1.5.2: version "1.6.1" @@ -4813,13 +4575,6 @@ caniuse-lite@^1.0.30001400: resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001449.tgz#a8d11f6a814c75c9ce9d851dc53eb1d1dfbcd657" integrity sha512-CPB+UL9XMT/Av+pJxCKGhdx+yg1hzplvFJQlJ2n68PyQGMz9L/E2zCyLdOL8uasbouTUgnPl+y0tccI/se+BEw== -capture-exit@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/capture-exit/-/capture-exit-2.0.0.tgz#fb953bfaebeb781f62898239dabb426d08a509a4" - integrity sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g== - dependencies: - rsvp "^4.8.4" - caseless@~0.12.0: version "0.12.0" resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" @@ -4920,6 +4675,11 @@ ci-info@^2.0.0: resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== +ci-info@^3.2.0: + version "3.8.0" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.8.0.tgz#81408265a5380c929f0bc665d62256628ce9ef91" + integrity sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw== + cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: version "1.0.4" resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de" @@ -4928,10 +4688,10 @@ cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: inherits "^2.0.1" safe-buffer "^5.0.1" -cjs-module-lexer@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-0.6.0.tgz#4186fcca0eae175970aee870b9fe2d6cf8d5655f" - integrity sha512-uc2Vix1frTfnuzxxu1Hp4ktSvM3QaI4oXl4ZUqL1wjTu/BGki9TrCWoqLTg/drR1KwAEarXuRFCG2Svr1GxPFw== +cjs-module-lexer@^1.0.0: + version "1.2.2" + resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz#9f84ba3244a512f3a54e5277e8eef4c489864e40" + integrity sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA== clap@^1.0.9: version "1.2.3" @@ -5020,6 +4780,15 @@ cliui@^6.0.0: strip-ansi "^6.0.0" wrap-ansi "^6.2.0" +cliui@^8.0.1: + version "8.0.1" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-8.0.1.tgz#0c04b075db02cbfe60dc8e6cf2f5486b1a3608aa" + integrity sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ== + dependencies: + string-width "^4.2.0" + strip-ansi "^6.0.1" + wrap-ansi "^7.0.0" + clone-deep@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-4.0.1.tgz#c19fd9bdbbf85942b4fd979c84dcf7d5f07c2387" @@ -5316,13 +5085,18 @@ conventional-recommended-bump@^5.0.0: meow "^4.0.0" q "^1.5.1" -convert-source-map@^1.4.0, convert-source-map@^1.5.1, convert-source-map@^1.6.0, convert-source-map@^1.7.0: +convert-source-map@^1.5.1, 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== dependencies: safe-buffer "~5.1.1" +convert-source-map@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-2.0.0.tgz#4b560f649fc4e918dd0ab75cf4961e8bc882d82a" + integrity sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg== + copy-concurrently@^1.0.0: version "1.0.5" resolved "https://registry.yarnpkg.com/copy-concurrently/-/copy-concurrently-1.0.5.tgz#92297398cae34937fcafd6ec8139c18051f0b5e0" @@ -5457,7 +5231,7 @@ cross-spawn@^6.0.0, cross-spawn@^6.0.5: shebang-command "^1.2.0" which "^1.2.9" -cross-spawn@^7.0.0, cross-spawn@^7.0.2: +cross-spawn@^7.0.0, cross-spawn@^7.0.2, cross-spawn@^7.0.3: version "7.0.3" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== @@ -5586,17 +5360,17 @@ csso@~2.3.1: clap "^1.0.9" source-map "^0.5.3" -cssom@^0.4.1, cssom@^0.4.4: - version "0.4.4" - resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.4.4.tgz#5a66cf93d2d0b661d80bf6a44fb65f5c2e4e0a10" - integrity sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw== +cssom@^0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.5.0.tgz#d254fa92cd8b6fbd83811b9fbaed34663cc17c36" + integrity sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw== cssom@~0.3.6: version "0.3.8" resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.8.tgz#9f1276f5b2b463f2114d3f2c75250af8c1a36f4a" integrity sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg== -cssstyle@^2.0.0, cssstyle@^2.3.0: +cssstyle@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-2.3.0.tgz#ff665a0ddbdc31864b09647f34163443d90b0852" integrity sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A== @@ -5664,23 +5438,14 @@ dashdash@^1.12.0: dependencies: assert-plus "^1.0.0" -data-urls@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-1.1.0.tgz#15ee0582baa5e22bb59c77140da8f9c76963bbfe" - integrity sha512-YTWYI9se1P55u58gL5GkQHW4P6VJBJ5iBT+B5a7i2Tjadhv52paJG0qHX4A0OR6/t52odI64KP2YvFpkDOi3eQ== - dependencies: - abab "^2.0.0" - whatwg-mimetype "^2.2.0" - whatwg-url "^7.0.0" - -data-urls@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-2.0.0.tgz#156485a72963a970f5d5821aaf642bef2bf2db9b" - integrity sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ== +data-urls@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-3.0.2.tgz#9cf24a477ae22bcef5cd5f6f0bfbc1d2d3be9143" + integrity sha512-Jy/tj3ldjZJo63sVAvg6LHt2mHvl4V6AgRAmNDtLdm7faqtsx+aJG42rsyCo9JCoRVKwPFzKlIPx3DIibwSIaQ== dependencies: - abab "^2.0.3" - whatwg-mimetype "^2.3.0" - whatwg-url "^8.0.0" + abab "^2.0.6" + whatwg-mimetype "^3.0.0" + whatwg-url "^11.0.0" dataloader@^1.4.0: version "1.4.0" @@ -5699,10 +5464,10 @@ debug@3.1.0: dependencies: ms "2.0.0" -debug@4, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.2.0, debug@^4.3.1: - version "4.3.3" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.3.tgz#04266e0b70a98d4462e6e288e38259213332b664" - integrity sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q== +debug@4, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.2.0, debug@^4.3.4: + version "4.3.4" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" + integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== dependencies: ms "2.1.2" @@ -5738,10 +5503,10 @@ decamelize@^1.1.0, decamelize@^1.1.2, decamelize@^1.2.0: resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= -decimal.js@^10.2.1: - version "10.3.1" - resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.3.1.tgz#d8c3a444a9c6774ba60ca6ad7261c3a94fd5e783" - integrity sha512-V0pfhfr8suzyPGOx3nmq4aHqabehUZn6Ch9kyFpV79TGDTWFmHqUqXdabR7QHqxzrYolF4+tVmJhUG4OURg5dQ== +decimal.js@^10.4.2: + version "10.4.3" + resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.4.3.tgz#1044092884d245d1b7f65725fa4ad4c6f781cc23" + integrity sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA== decode-uri-component@^0.2.0: version "0.2.0" @@ -5893,6 +5658,11 @@ diff-sequences@^26.6.2: resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-26.6.2.tgz#48ba99157de1923412eed41db6b6d4aa9ca7c0b1" integrity sha512-Mv/TDa3nZ9sbc5soK+OoA74BsS3mL37yixCvUAQkiuA4Wz6YtwP/K47n2rv2ovzHZvoiQeA5FTQOschKkEwB0Q== +diff-sequences@^29.4.3: + version "29.4.3" + resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-29.4.3.tgz#9314bc1fabe09267ffeca9cbafc457d8499a13f2" + integrity sha512-ofrBgwpPhCD85kMKtE9RYFFq6OC1A89oW2vvgWZNCwxrUpRUILopY7lsYyMDSjc8g6U6aiO0Qubg6r4Wgt5ZnA== + diffie-hellman@^5.0.0: version "5.0.3" resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.3.tgz#40e8ee98f55a2149607146921c63e1ae5f3d2875" @@ -5940,19 +5710,12 @@ domain-browser@^1.1.1: resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.2.0.tgz#3d31f50191a6749dd1375a7f522e823d42e54eda" integrity sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA== -domexception@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/domexception/-/domexception-1.0.1.tgz#937442644ca6a31261ef36e3ec677fe805582c90" - integrity sha512-raigMkn7CJNNo6Ihro1fzG7wr3fHuYVytzquZKX5n0yizGsTcYgzdIUwj1X9pK0VvjeihV+XiclP+DjwbsSKug== - dependencies: - webidl-conversions "^4.0.2" - -domexception@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/domexception/-/domexception-2.0.1.tgz#fb44aefba793e1574b0af6aed2801d057529f304" - integrity sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg== +domexception@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/domexception/-/domexception-4.0.0.tgz#4ad1be56ccadc86fc76d033353999a8037d03673" + integrity sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw== dependencies: - webidl-conversions "^5.0.0" + webidl-conversions "^7.0.0" dot-prop@^4.2.0: version "4.2.1" @@ -6021,10 +5784,10 @@ elliptic@^6.5.3: minimalistic-assert "^1.0.1" minimalistic-crypto-utils "^1.0.1" -emittery@^0.7.1: - version "0.7.2" - resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.7.2.tgz#25595908e13af0f5674ab419396e2fb394cdfa82" - integrity sha512-A8OG5SR/ij3SsJdWDJdkkSYUjQdCUx6APQXem0SaEePBSRg4eymGYwBkKo1Y6DU+af/Jn2dBQqDBvjnr9Vi8nQ== +emittery@^0.13.1: + version "0.13.1" + resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.13.1.tgz#c04b8c3457490e0847ae51fced3af52d338e3dad" + integrity sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ== emoji-regex@^7.0.1: version "7.0.3" @@ -6076,6 +5839,11 @@ enquirer@^2.3.0, enquirer@^2.3.4, enquirer@^2.3.5, enquirer@^2.3.6: dependencies: ansi-colors "^4.1.1" +entities@^4.4.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/entities/-/entities-4.4.0.tgz#97bdaba170339446495e653cfd2db78962900174" + integrity sha512-oYp7156SP8LkeGD0GF85ad1X9Ai79WtRsZ2gxJqtBuzH+98YUV6jkHEKlZkMbcrjJjIVJNIDP/3WL9wQkoPbWA== + env-paths@^2.2.0: version "2.2.1" resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.1.tgz#420399d416ce1fbe9bc0a07c62fa68d67fd0f8f2" @@ -6191,18 +5959,6 @@ escape-string-regexp@^4.0.0: resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== -escodegen@^1.11.1: - version "1.14.3" - resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.14.3.tgz#4e7b81fba61581dc97582ed78cab7f0e8d63f503" - integrity sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw== - dependencies: - esprima "^4.0.1" - estraverse "^4.2.0" - esutils "^2.0.2" - optionator "^0.8.1" - optionalDependencies: - source-map "~0.6.1" - escodegen@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-2.0.0.tgz#5e32b12833e8aa8fa35e1bf0befa89380484c7dd" @@ -6369,6 +6125,11 @@ eslint-visitor-keys@^2.0.0: resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303" integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== +eslint-visitor-keys@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz#f6480fa6b1f30efe2d1968aa8ac745b862469826" + integrity sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA== + eslint@^6.1.0, eslint@^6.8.0: version "6.8.0" resolved "https://registry.yarnpkg.com/eslint/-/eslint-6.8.0.tgz#62262d6729739f9275723824302fb227c8c93ffb" @@ -6500,7 +6261,7 @@ esrecurse@^4.1.0, esrecurse@^4.3.0: dependencies: estraverse "^5.2.0" -estraverse@^4.1.1, estraverse@^4.2.0: +estraverse@^4.1.1: version "4.3.0" resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== @@ -6548,11 +6309,6 @@ evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: md5.js "^1.3.4" safe-buffer "^5.1.1" -exec-sh@^0.3.2: - version "0.3.6" - resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.3.6.tgz#ff264f9e325519a60cb5e273692943483cca63bc" - integrity sha512-nQn+hI3yp+oD0huYhKwvYI32+JFeq+XkNcD1GAo3Y/MjxsfVGmrrzrnzjWiNY6f+pUCP440fThsFh5gZrRAU/w== - execa@^0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/execa/-/execa-0.7.0.tgz#944becd34cc41ee32a63a9faf27ad5a65fc59777" @@ -6579,10 +6335,10 @@ execa@^1.0.0: signal-exit "^3.0.0" strip-eof "^1.0.0" -execa@^3.2.0: - version "3.4.0" - resolved "https://registry.yarnpkg.com/execa/-/execa-3.4.0.tgz#c08ed4550ef65d858fac269ffc8572446f37eb89" - integrity sha512-r9vdGQk4bmCuK1yKQu1KTwcT2zwfWdbdaXfCtAh+5nU/4fSX+JAb7vZGvI5naJrQlvONrEB20jeruESI69530g== +execa@^4.0.0, execa@^4.0.3, execa@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-4.1.0.tgz#4e5491ad1572f2f17a77d388c6c857135b22847a" + integrity sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA== dependencies: cross-spawn "^7.0.0" get-stream "^5.0.0" @@ -6591,23 +6347,22 @@ execa@^3.2.0: merge-stream "^2.0.0" npm-run-path "^4.0.0" onetime "^5.1.0" - p-finally "^2.0.0" signal-exit "^3.0.2" strip-final-newline "^2.0.0" -execa@^4.0.0, execa@^4.0.3, execa@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/execa/-/execa-4.1.0.tgz#4e5491ad1572f2f17a77d388c6c857135b22847a" - integrity sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA== +execa@^5.0.0: + version "5.1.1" + resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" + integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== dependencies: - cross-spawn "^7.0.0" - get-stream "^5.0.0" - human-signals "^1.1.1" + cross-spawn "^7.0.3" + get-stream "^6.0.0" + human-signals "^2.1.0" is-stream "^2.0.0" merge-stream "^2.0.0" - npm-run-path "^4.0.0" - onetime "^5.1.0" - signal-exit "^3.0.2" + npm-run-path "^4.0.1" + onetime "^5.1.2" + signal-exit "^3.0.3" strip-final-newline "^2.0.0" exit@^0.1.2: @@ -6628,29 +6383,16 @@ expand-brackets@^2.1.4: snapdragon "^0.8.1" to-regex "^3.0.1" -expect@^25.5.0: - version "25.5.0" - resolved "https://registry.yarnpkg.com/expect/-/expect-25.5.0.tgz#f07f848712a2813bb59167da3fb828ca21f58bba" - integrity sha512-w7KAXo0+6qqZZhovCaBVPSIqQp7/UTcx4M9uKt2m6pd2VB1voyC8JizLRqeEqud3AAVP02g+hbErDu5gu64tlA== - dependencies: - "@jest/types" "^25.5.0" - ansi-styles "^4.0.0" - jest-get-type "^25.2.6" - jest-matcher-utils "^25.5.0" - jest-message-util "^25.5.0" - jest-regex-util "^25.2.6" - -expect@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/expect/-/expect-26.6.2.tgz#c6b996bf26bf3fe18b67b2d0f51fc981ba934417" - integrity sha512-9/hlOBkQl2l/PLHJx6JjoDF6xPKcJEsUlWKb23rKE7KzeDqUZKXKNMW27KIue5JMdBV9HgmoJPcc8HtO85t9IA== +expect@^29.5.0: + version "29.5.0" + resolved "https://registry.yarnpkg.com/expect/-/expect-29.5.0.tgz#68c0509156cb2a0adb8865d413b137eeaae682f7" + integrity sha512-yM7xqUrCO2JdpFo4XpM82t+PJBFybdqoQuJLDGeDX2ij8NZzqRHyu3Hp188/JX7SWqud+7t4MUdvcgGBICMHZg== dependencies: - "@jest/types" "^26.6.2" - ansi-styles "^4.0.0" - jest-get-type "^26.3.0" - jest-matcher-utils "^26.6.2" - jest-message-util "^26.6.2" - jest-regex-util "^26.0.0" + "@jest/expect-utils" "^29.5.0" + jest-get-type "^29.4.3" + jest-matcher-utils "^29.5.0" + jest-message-util "^29.5.0" + jest-util "^29.5.0" expose-gc@^1.0.0: version "1.0.0" @@ -6732,10 +6474,10 @@ fast-glob@^2.2.6: merge2 "^1.2.3" micromatch "^3.1.10" -fast-glob@^3.1.1: - version "3.2.7" - resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.7.tgz#fd6cb7a2d7e9aa7a7846111e85a196d6b2f766a1" - integrity sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q== +fast-glob@^3.2.9: + version "3.2.12" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.12.tgz#7f39ec99c2e6ab030337142da9e0c18f37afae80" + integrity sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w== dependencies: "@nodelib/fs.stat" "^2.0.2" "@nodelib/fs.walk" "^1.2.3" @@ -6743,7 +6485,7 @@ fast-glob@^3.1.1: merge2 "^1.3.0" micromatch "^4.0.4" -fast-json-stable-stringify@2.x, fast-json-stable-stringify@^2.0.0: +fast-json-stable-stringify@2.x, fast-json-stable-stringify@^2.0.0, fast-json-stable-stringify@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== @@ -6982,10 +6724,10 @@ forever-agent@~0.6.1: resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE= -form-data@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-3.0.1.tgz#ebd53791b78356a99af9a300d4282c4d5eb9755f" - integrity sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg== +form-data@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452" + integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww== dependencies: asynckit "^0.4.0" combined-stream "^1.0.8" @@ -7073,7 +6815,7 @@ fsevents@^1.2.7: bindings "^1.5.0" nan "^2.12.1" -fsevents@^2.1.2, fsevents@~2.3.2: +fsevents@^2.3.2, fsevents@~2.3.2: version "2.3.2" resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== @@ -7112,7 +6854,7 @@ gensync@^1.0.0-beta.2: resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== -get-caller-file@^2.0.1: +get-caller-file@^2.0.1, get-caller-file@^2.0.5: version "2.0.5" resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== @@ -7181,6 +6923,11 @@ get-stream@^5.0.0: dependencies: pump "^3.0.0" +get-stream@^6.0.0: + version "6.0.1" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" + integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== + get-symbol-description@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.0.tgz#7fdb81c900101fbd564dd5f1a30af5aadc1e58d6" @@ -7311,16 +7058,16 @@ globalyzer@0.1.0: resolved "https://registry.yarnpkg.com/globalyzer/-/globalyzer-0.1.0.tgz#cb76da79555669a1519d5a8edf093afaa0bf1465" integrity sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q== -globby@^11.0.0, globby@^11.0.3: - version "11.0.4" - resolved "https://registry.yarnpkg.com/globby/-/globby-11.0.4.tgz#2cbaff77c2f2a62e71e9b2813a67b97a3a3001a5" - integrity sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg== +globby@^11.0.0, globby@^11.1.0: + version "11.1.0" + resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" + integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== dependencies: array-union "^2.1.0" dir-glob "^3.0.1" - fast-glob "^3.1.1" - ignore "^5.1.4" - merge2 "^1.3.0" + fast-glob "^3.2.9" + ignore "^5.2.0" + merge2 "^1.4.1" slash "^3.0.0" globby@^9.2.0: @@ -7349,21 +7096,16 @@ gopd@^1.0.1: dependencies: get-intrinsic "^1.1.3" -graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.5, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.2, graceful-fs@^4.2.4: - version "4.2.8" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.8.tgz#e412b8d33f5e006593cbd3cee6df9f2cebbe802a" - integrity sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg== +graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.5, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.2, graceful-fs@^4.2.4, graceful-fs@^4.2.9: + version "4.2.10" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c" + integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== grapheme-splitter@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz#9cf3a665c6247479896834af35cf1dbb4400767e" integrity sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ== -growly@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081" - integrity sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE= - handlebars@^4.7.6: version "4.7.7" resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.7.7.tgz#9ce33416aad02dbd6c8fafa8240d5d98004945a1" @@ -7535,19 +7277,12 @@ html-comment-regex@^1.1.0: resolved "https://registry.yarnpkg.com/html-comment-regex/-/html-comment-regex-1.1.2.tgz#97d4688aeb5c81886a364faa0cad1dda14d433a7" integrity sha512-P+M65QY2JQ5Y0G9KKdlDpo0zK+/OHptU5AaBwUfAIDJZk1MYf32Frm84EcOytfJE0t5JvkAnKlmjsXDnWzCJmQ== -html-encoding-sniffer@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz#e70d84b94da53aa375e11fe3a351be6642ca46f8" - integrity sha512-71lZziiDnsuabfdYiUeWdCVyKuqwWi23L8YeIgV9jSSZHCtb6wB1BKWooH7L3tn4/FuZJMVWyNaIDr4RGmaSYw== - dependencies: - whatwg-encoding "^1.0.1" - -html-encoding-sniffer@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz#42a6dc4fd33f00281176e8b23759ca4e4fa185f3" - integrity sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ== +html-encoding-sniffer@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz#2cb1a8cf0db52414776e5b2a7a04d5dd98158de9" + integrity sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA== dependencies: - whatwg-encoding "^1.0.5" + whatwg-encoding "^2.0.0" html-escaper@^2.0.0: version "2.0.2" @@ -7567,12 +7302,12 @@ http-proxy-agent@^2.1.0: agent-base "4" debug "3.1.0" -http-proxy-agent@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz#8a8c8ef7f5932ccf953c296ca8291b95aa74aa3a" - integrity sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg== +http-proxy-agent@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz#5129800203520d434f142bc78ff3c170800f2b43" + integrity sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w== dependencies: - "@tootallnate/once" "1" + "@tootallnate/once" "2" agent-base "6" debug "4" @@ -7598,10 +7333,10 @@ https-proxy-agent@^2.2.3: agent-base "^4.3.0" debug "^3.1.0" -https-proxy-agent@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz#e2a90542abb68a762e0a0850f6c9edadfd8506b2" - integrity sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA== +https-proxy-agent@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6" + integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA== dependencies: agent-base "6" debug "4" @@ -7616,6 +7351,11 @@ human-signals@^1.1.1: resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-1.1.1.tgz#c5b1cd14f50aeae09ab6c59fe63ba3395fe4dfa3" integrity sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw== +human-signals@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" + integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== + humanize-duration@^3.15.3: version "3.27.1" resolved "https://registry.yarnpkg.com/humanize-duration/-/humanize-duration-3.27.1.tgz#2cd4ea4b03bd92184aee6d90d77a8f3d7628df69" @@ -7644,20 +7384,20 @@ husky@^4.2.5: slash "^3.0.0" which-pm-runs "^1.0.0" -iconv-lite@0.4.24, iconv-lite@^0.4.24: - version "0.4.24" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" - integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== - dependencies: - safer-buffer ">= 2.1.2 < 3" - -iconv-lite@^0.6.2: +iconv-lite@0.6.3, iconv-lite@^0.6.2: version "0.6.3" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501" integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== dependencies: safer-buffer ">= 2.1.2 < 3.0.0" +iconv-lite@^0.4.24: + version "0.4.24" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" + integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== + dependencies: + safer-buffer ">= 2.1.2 < 3" + icss-replace-symbols@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz#06ea6f83679a7749e386cfe1fe812ae5db223ded" @@ -7692,10 +7432,10 @@ ignore@^4.0.3, ignore@^4.0.6: resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== -ignore@^5.1.4, ignore@^5.1.8: - version "5.1.9" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.9.tgz#9ec1a5cbe8e1446ec60d4420060d43aa6e7382fb" - integrity sha512-2zeMQpbKz5dhZ9IwL0gbxSW5w0NK/MSAMtNuhgIHEPmaU3vPdKPL0UdvUCXs5SS4JAwsBxysK5sFMW8ocFiVjQ== +ignore@^5.1.4, ignore@^5.2.0: + version "5.2.4" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.4.tgz#a291c0c6178ff1b960befe47fcdec301674a6324" + integrity sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ== import-cost@^1.9.0: version "1.10.0" @@ -7883,18 +7623,13 @@ interpret@^1.0.0: resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.4.0.tgz#665ab8bc4da27a774a40584e812e3e0fa45b1a1e" integrity sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA== -invariant@^2.2.2, invariant@^2.2.4: +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" - integrity sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk= - ip@1.1.5: version "1.1.5" resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a" @@ -7978,10 +7713,10 @@ is-ci@^2.0.0: dependencies: ci-info "^2.0.0" -is-core-module@^2.2.0, is-core-module@^2.5.0, is-core-module@^2.8.0: - version "2.8.0" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.8.0.tgz#0321336c3d0925e497fd97f5d95cb114a5ccd548" - integrity sha512-vd15qHsaqrRL7dtH6QNuy0ndJmRDrS9HAM1CAiSifNUFv4x1a0CCVsj18hJ1mShxIG6T2i1sO78MkP56r0nYRw== +is-core-module@^2.2.0, is-core-module@^2.5.0, is-core-module@^2.8.0, is-core-module@^2.9.0: + version "2.11.0" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.11.0.tgz#ad4cb3e3863e814523c96f3f58d26cc570ff0144" + integrity sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw== dependencies: has "^1.0.3" @@ -8029,11 +7764,6 @@ is-directory@^0.3.1: resolved "https://registry.yarnpkg.com/is-directory/-/is-directory-0.3.1.tgz#61339b6f2475fc772fd9c9d83f5c8575dc154ae1" integrity sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE= -is-docker@^2.0.0: - version "2.2.1" - resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa" - integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ== - is-extendable@^0.1.0, is-extendable@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" @@ -8271,10 +8001,10 @@ is-typed-array@^1.1.3, is-typed-array@^1.1.7: gopd "^1.0.1" has-tostringtag "^1.0.0" -is-typedarray@^1.0.0, is-typedarray@~1.0.0: +is-typedarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" - integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= + integrity sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA== is-unicode-supported@^0.1.0: version "0.1.0" @@ -8316,13 +8046,6 @@ is-wsl@^1.1.0: resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d" integrity sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0= -is-wsl@^2.1.1, is-wsl@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271" - integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== - dependencies: - is-docker "^2.0.0" - isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" @@ -8355,43 +8078,15 @@ isstream@~0.1.2: resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo= -istanbul-lib-coverage@^2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.5.tgz#675f0ab69503fad4b1d849f736baaca803344f49" - integrity sha512-8aXznuEPCJvGnMSRft4udDRDtb1V3pkQkMMI5LI+6HuQz5oQ4J2UFn1H82raA3qJtyOLkkwVqICBQkjnGtn5mA== - istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz#189e7909d0a39fa5a3dfad5b03f71947770191d3" integrity sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw== -istanbul-lib-instrument@^3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-3.3.0.tgz#a5f63d91f0bbc0c3e479ef4c5de027335ec6d630" - integrity sha512-5nnIN4vo5xQZHdXno/YDXJ0G+I3dAm4XgzfSVTPLQpj/zAV2dV6Juy0yaf10/zrJOJeHoN3fraFe+XRq2bFVZA== - dependencies: - "@babel/generator" "^7.4.0" - "@babel/parser" "^7.4.3" - "@babel/template" "^7.4.0" - "@babel/traverse" "^7.4.3" - "@babel/types" "^7.4.0" - istanbul-lib-coverage "^2.0.5" - semver "^6.0.0" - -istanbul-lib-instrument@^4.0.0, istanbul-lib-instrument@^4.0.3: - version "4.0.3" - resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz#873c6fff897450118222774696a3f28902d77c1d" - integrity sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ== - dependencies: - "@babel/core" "^7.7.5" - "@istanbuljs/schema" "^0.1.2" - istanbul-lib-coverage "^3.0.0" - semver "^6.3.0" - -istanbul-lib-instrument@^5.0.4: - version "5.1.0" - resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-5.1.0.tgz#7b49198b657b27a730b8e9cb601f1e1bff24c59a" - integrity sha512-czwUz525rkOFDJxfKK6mYfIs9zBKILyrZQxjz3ABhjQXhbhFsSbo1HW/BFcsDnfJYJWA6thRR5/TUY2qs5W99Q== +istanbul-lib-instrument@^5.0.4, istanbul-lib-instrument@^5.1.0: + version "5.2.1" + resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz#d10c8885c2125574e1c231cacadf955675e1ce3d" + integrity sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg== dependencies: "@babel/core" "^7.12.3" "@babel/parser" "^7.14.7" @@ -8417,10 +8112,10 @@ istanbul-lib-source-maps@^4.0.0: istanbul-lib-coverage "^3.0.0" source-map "^0.6.1" -istanbul-reports@^3.0.2: - version "3.1.1" - resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.1.1.tgz#7085857f17d2441053c6ce5c3b8fdf6882289397" - integrity sha512-q1kvhAXWSsXfMjCdNHNPKZZv94OlspKnoGv+R9RGbnqOOQ0VbNfLFgQDVgi7hHenKsndGq3/o0OBdzDXthWcNw== +istanbul-reports@^3.1.3: + version "3.1.5" + resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.1.5.tgz#cc9a6ab25cb25659810e4785ed9d9fb742578bae" + integrity sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w== dependencies: html-escaper "^2.0.0" istanbul-lib-report "^3.0.0" @@ -8430,113 +8125,87 @@ iterall@^1.3.0: resolved "https://registry.yarnpkg.com/iterall/-/iterall-1.3.0.tgz#afcb08492e2915cbd8a0884eb93a8c94d0d72fea" integrity sha512-QZ9qOMdF+QLHxy1QIpUHUU1D5pS2CG2P69LF6L6CPjPYA/XMOmKV3PZpawHoAjHNyB0swdVTRxdYT4tbBbxqwg== -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" - integrity sha512-EOw9QEqapsDT7mKF162m8HFzRPbmP8qJQny6ldVOdOVBz3ACgPm/1nAn5fPQ/NDaYhX/AHkrGwwkCncpAVSXcw== - dependencies: - "@jest/types" "^25.5.0" - execa "^3.2.0" - throat "^5.0.0" - -jest-changed-files@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-26.6.2.tgz#f6198479e1cc66f22f9ae1e22acaa0b429c042d0" - integrity sha512-fDS7szLcY9sCtIip8Fjry9oGf3I2ht/QT21bAHm5Dmf0mD4X3ReNUf17y+bO6fR8WgbIZTlbyG1ak/53cbRzKQ== +jest-changed-files@^29.5.0: + version "29.5.0" + resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-29.5.0.tgz#e88786dca8bf2aa899ec4af7644e16d9dcf9b23e" + integrity sha512-IFG34IUMUaNBIxjQXF/iu7g6EcdMrGRRxaUSw92I/2g2YC6vCdTltl4nHvt7Ci5nSJwXIkCu8Ka1DKF+X7Z1Ag== dependencies: - "@jest/types" "^26.6.2" - execa "^4.0.0" - throat "^5.0.0" + execa "^5.0.0" + p-limit "^3.1.0" -jest-cli@^25.5.4: - version "25.5.4" - resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-25.5.4.tgz#b9f1a84d1301a92c5c217684cb79840831db9f0d" - integrity sha512-rG8uJkIiOUpnREh1768/N3n27Cm+xPFkSNFO91tgg+8o2rXeVLStz+vkXkGr4UtzH6t1SNbjwoiswd7p4AhHTw== +jest-circus@^29.5.0: + version "29.5.0" + resolved "https://registry.yarnpkg.com/jest-circus/-/jest-circus-29.5.0.tgz#b5926989449e75bff0d59944bae083c9d7fb7317" + integrity sha512-gq/ongqeQKAplVxqJmbeUOJJKkW3dDNPY8PjhJ5G0lBRvu0e3EWGxGy5cI4LAGA7gV2UHCtWBI4EMXK8c9nQKA== dependencies: - "@jest/core" "^25.5.4" - "@jest/test-result" "^25.5.0" - "@jest/types" "^25.5.0" - chalk "^3.0.0" - exit "^0.1.2" - graceful-fs "^4.2.4" - import-local "^3.0.2" - is-ci "^2.0.0" - jest-config "^25.5.4" - jest-util "^25.5.0" - jest-validate "^25.5.0" - prompts "^2.0.1" - realpath-native "^2.0.0" - yargs "^15.3.1" + "@jest/environment" "^29.5.0" + "@jest/expect" "^29.5.0" + "@jest/test-result" "^29.5.0" + "@jest/types" "^29.5.0" + "@types/node" "*" + chalk "^4.0.0" + co "^4.6.0" + dedent "^0.7.0" + is-generator-fn "^2.0.0" + jest-each "^29.5.0" + jest-matcher-utils "^29.5.0" + jest-message-util "^29.5.0" + jest-runtime "^29.5.0" + jest-snapshot "^29.5.0" + jest-util "^29.5.0" + p-limit "^3.1.0" + pretty-format "^29.5.0" + pure-rand "^6.0.0" + slash "^3.0.0" + stack-utils "^2.0.3" -jest-cli@^26.6.3: - version "26.6.3" - resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-26.6.3.tgz#43117cfef24bc4cd691a174a8796a532e135e92a" - integrity sha512-GF9noBSa9t08pSyl3CY4frMrqp+aQXFGFkf5hEPbh/pIUFYWMK6ZLTfbmadxJVcJrdRoChlWQsA2VkJcDFK8hg== +jest-cli@^29.5.0: + version "29.5.0" + resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-29.5.0.tgz#b34c20a6d35968f3ee47a7437ff8e53e086b4a67" + integrity sha512-L1KcP1l4HtfwdxXNFCL5bmUbLQiKrakMUriBEcc1Vfz6gx31ORKdreuWvmQVBit+1ss9NNR3yxjwfwzZNdQXJw== dependencies: - "@jest/core" "^26.6.3" - "@jest/test-result" "^26.6.2" - "@jest/types" "^26.6.2" + "@jest/core" "^29.5.0" + "@jest/test-result" "^29.5.0" + "@jest/types" "^29.5.0" chalk "^4.0.0" exit "^0.1.2" - graceful-fs "^4.2.4" + graceful-fs "^4.2.9" import-local "^3.0.2" - is-ci "^2.0.0" - jest-config "^26.6.3" - jest-util "^26.6.2" - jest-validate "^26.6.2" + jest-config "^29.5.0" + jest-util "^29.5.0" + jest-validate "^29.5.0" prompts "^2.0.1" - yargs "^15.4.1" - -jest-config@^25.5.4: - version "25.5.4" - resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-25.5.4.tgz#38e2057b3f976ef7309b2b2c8dcd2a708a67f02c" - integrity sha512-SZwR91SwcdK6bz7Gco8qL7YY2sx8tFJYzvg216DLihTWf+LKY/DoJXpM9nTzYakSyfblbqeU48p/p7Jzy05Atg== - dependencies: - "@babel/core" "^7.1.0" - "@jest/test-sequencer" "^25.5.4" - "@jest/types" "^25.5.0" - babel-jest "^25.5.1" - chalk "^3.0.0" - deepmerge "^4.2.2" - glob "^7.1.1" - graceful-fs "^4.2.4" - jest-environment-jsdom "^25.5.0" - jest-environment-node "^25.5.0" - jest-get-type "^25.2.6" - jest-jasmine2 "^25.5.4" - jest-regex-util "^25.2.6" - jest-resolve "^25.5.1" - jest-util "^25.5.0" - jest-validate "^25.5.0" - micromatch "^4.0.2" - pretty-format "^25.5.0" - realpath-native "^2.0.0" + yargs "^17.3.1" -jest-config@^26.6.3: - version "26.6.3" - resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-26.6.3.tgz#64f41444eef9eb03dc51d5c53b75c8c71f645349" - integrity sha512-t5qdIj/bCj2j7NFVHb2nFB4aUdfucDn3JRKgrZnplb8nieAirAzRSHP8uDEd+qV6ygzg9Pz4YG7UTJf94LPSyg== +jest-config@^29.5.0: + version "29.5.0" + resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-29.5.0.tgz#3cc972faec8c8aaea9ae158c694541b79f3748da" + integrity sha512-kvDUKBnNJPNBmFFOhDbm59iu1Fii1Q6SxyhXfvylq3UTHbg6o7j/g8k2dZyXWLvfdKB1vAPxNZnMgtKJcmu3kA== dependencies: - "@babel/core" "^7.1.0" - "@jest/test-sequencer" "^26.6.3" - "@jest/types" "^26.6.2" - babel-jest "^26.6.3" + "@babel/core" "^7.11.6" + "@jest/test-sequencer" "^29.5.0" + "@jest/types" "^29.5.0" + babel-jest "^29.5.0" chalk "^4.0.0" + ci-info "^3.2.0" deepmerge "^4.2.2" - glob "^7.1.1" - graceful-fs "^4.2.4" - jest-environment-jsdom "^26.6.2" - jest-environment-node "^26.6.2" - jest-get-type "^26.3.0" - jest-jasmine2 "^26.6.3" - jest-regex-util "^26.0.0" - jest-resolve "^26.6.2" - jest-util "^26.6.2" - jest-validate "^26.6.2" - micromatch "^4.0.2" - pretty-format "^26.6.2" + glob "^7.1.3" + graceful-fs "^4.2.9" + jest-circus "^29.5.0" + jest-environment-node "^29.5.0" + jest-get-type "^29.4.3" + jest-regex-util "^29.4.3" + jest-resolve "^29.5.0" + jest-runner "^29.5.0" + jest-util "^29.5.0" + jest-validate "^29.5.0" + micromatch "^4.0.4" + parse-json "^5.2.0" + pretty-format "^29.5.0" + slash "^3.0.0" + strip-json-comments "^3.1.1" -jest-diff@^25.2.1, jest-diff@^25.5.0: +jest-diff@^25.2.1: version "25.5.0" resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-25.5.0.tgz#1dd26ed64f96667c068cef026b677dfa01afcfa9" integrity sha512-z1kygetuPiREYdNIumRpAHY6RXiGmp70YHptjdaxTWGmA085W3iCnXNx0DhflK3vwrKmrRWyY1wUpkPMVxMK7A== @@ -8546,7 +8215,7 @@ jest-diff@^25.2.1, jest-diff@^25.5.0: jest-get-type "^25.2.6" pretty-format "^25.5.0" -jest-diff@^26.0.0, jest-diff@^26.6.2: +jest-diff@^26.0.0: version "26.6.2" resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-26.6.2.tgz#1aa7468b52c3a68d7d5c5fdcdfcd5e49bd164394" integrity sha512-6m+9Z3Gv9wN0WFVasqjCL/06+EFCMTqDEUl/b87HYK2rAPTyfz4ZIuSlPhY51PIQRWx5TaxeF1qmXKe9gfN3sA== @@ -8556,102 +8225,59 @@ jest-diff@^26.0.0, jest-diff@^26.6.2: jest-get-type "^26.3.0" pretty-format "^26.6.2" -jest-docblock@^25.3.0: - version "25.3.0" - resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-25.3.0.tgz#8b777a27e3477cd77a168c05290c471a575623ef" - integrity sha512-aktF0kCar8+zxRHxQZwxMy70stc9R1mOmrLsT5VO3pIT0uzGRSDAXxSlz4NqQWpuLjPpuMhPRl7H+5FRsvIQAg== +jest-diff@^29.5.0: + version "29.5.0" + resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-29.5.0.tgz#e0d83a58eb5451dcc1fa61b1c3ee4e8f5a290d63" + integrity sha512-LtxijLLZBduXnHSniy0WMdaHjmQnt3g5sa16W4p0HqukYTTsyTW3GD1q41TyGl5YFXj/5B2U6dlh5FM1LIMgxw== dependencies: - detect-newline "^3.0.0" + chalk "^4.0.0" + diff-sequences "^29.4.3" + jest-get-type "^29.4.3" + pretty-format "^29.5.0" -jest-docblock@^26.0.0: - version "26.0.0" - resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-26.0.0.tgz#3e2fa20899fc928cb13bd0ff68bd3711a36889b5" - integrity sha512-RDZ4Iz3QbtRWycd8bUEPxQsTlYazfYn/h5R65Fc6gOfwozFhoImx+affzky/FFBuqISPTqjXomoIGJVKBWoo0w== +jest-docblock@^29.4.3: + version "29.4.3" + resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-29.4.3.tgz#90505aa89514a1c7dceeac1123df79e414636ea8" + integrity sha512-fzdTftThczeSD9nZ3fzA/4KkHtnmllawWrXO69vtI+L9WjEIuXWs4AmyME7lN5hU7dB0sHhuPfcKofRsUb/2Fg== dependencies: detect-newline "^3.0.0" -jest-each@^25.5.0: - version "25.5.0" - resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-25.5.0.tgz#0c3c2797e8225cb7bec7e4d249dcd96b934be516" - integrity sha512-QBogUxna3D8vtiItvn54xXde7+vuzqRrEeaw8r1s+1TG9eZLVJE5ZkKoSUlqFwRjnlaA4hyKGiu9OlkFIuKnjA== - dependencies: - "@jest/types" "^25.5.0" - chalk "^3.0.0" - jest-get-type "^25.2.6" - jest-util "^25.5.0" - pretty-format "^25.5.0" - -jest-each@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-26.6.2.tgz#02526438a77a67401c8a6382dfe5999952c167cb" - integrity sha512-Mer/f0KaATbjl8MCJ+0GEpNdqmnVmDYqCTJYTvoo7rqmRiDllmp2AYN+06F93nXcY3ur9ShIjS+CO/uD+BbH4A== +jest-each@^29.5.0: + version "29.5.0" + resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-29.5.0.tgz#fc6e7014f83eac68e22b7195598de8554c2e5c06" + integrity sha512-HM5kIJ1BTnVt+DQZ2ALp3rzXEl+g726csObrW/jpEGl+CDSSQpOJJX2KE/vEg8cxcMXdyEPu6U4QX5eruQv5hA== dependencies: - "@jest/types" "^26.6.2" + "@jest/types" "^29.5.0" chalk "^4.0.0" - jest-get-type "^26.3.0" - jest-util "^26.6.2" - pretty-format "^26.6.2" - -jest-environment-jsdom-fifteen@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/jest-environment-jsdom-fifteen/-/jest-environment-jsdom-fifteen-1.0.2.tgz#49a0af55e0d32737a6114a1575dd714702ad63b0" - integrity sha512-nfrnAfwklE1872LIB31HcjM65cWTh1wzvMSp10IYtPJjLDUbTTvDpajZgIxUnhRmzGvogdHDayCIlerLK0OBBg== - dependencies: - "@jest/environment" "^24.3.0" - "@jest/fake-timers" "^24.3.0" - "@jest/types" "^24.3.0" - jest-mock "^24.0.0" - jest-util "^24.0.0" - jsdom "^15.2.1" - -jest-environment-jsdom@^25.5.0: - version "25.5.0" - resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-25.5.0.tgz#dcbe4da2ea997707997040ecf6e2560aec4e9834" - integrity sha512-7Jr02ydaq4jaWMZLY+Skn8wL5nVIYpWvmeatOHL3tOcV3Zw8sjnPpx+ZdeBfc457p8jCR9J6YCc+Lga0oIy62A== - dependencies: - "@jest/environment" "^25.5.0" - "@jest/fake-timers" "^25.5.0" - "@jest/types" "^25.5.0" - jest-mock "^25.5.0" - jest-util "^25.5.0" - jsdom "^15.2.1" - -jest-environment-jsdom@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-26.6.2.tgz#78d09fe9cf019a357009b9b7e1f101d23bd1da3e" - integrity sha512-jgPqCruTlt3Kwqg5/WVFyHIOJHsiAvhcp2qiR2QQstuG9yWox5+iHpU3ZrcBxW14T4fe5Z68jAfLRh7joCSP2Q== - dependencies: - "@jest/environment" "^26.6.2" - "@jest/fake-timers" "^26.6.2" - "@jest/types" "^26.6.2" + jest-get-type "^29.4.3" + jest-util "^29.5.0" + pretty-format "^29.5.0" + +jest-environment-jsdom@^29.5.0: + version "29.5.0" + resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-29.5.0.tgz#cfe86ebaf1453f3297b5ff3470fbe94739c960cb" + integrity sha512-/KG8yEK4aN8ak56yFVdqFDzKNHgF4BAymCx2LbPNPsUshUlfAl0eX402Xm1pt+eoG9SLZEUVifqXtX8SK74KCw== + dependencies: + "@jest/environment" "^29.5.0" + "@jest/fake-timers" "^29.5.0" + "@jest/types" "^29.5.0" + "@types/jsdom" "^20.0.0" "@types/node" "*" - jest-mock "^26.6.2" - jest-util "^26.6.2" - jsdom "^16.4.0" - -jest-environment-node@^25.5.0: - version "25.5.0" - resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-25.5.0.tgz#0f55270d94804902988e64adca37c6ce0f7d07a1" - integrity sha512-iuxK6rQR2En9EID+2k+IBs5fCFd919gVVK5BeND82fYeLWPqvRcFNPKu9+gxTwfB5XwBGBvZ0HFQa+cHtIoslA== - dependencies: - "@jest/environment" "^25.5.0" - "@jest/fake-timers" "^25.5.0" - "@jest/types" "^25.5.0" - jest-mock "^25.5.0" - jest-util "^25.5.0" - semver "^6.3.0" - -jest-environment-node@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-26.6.2.tgz#824e4c7fb4944646356f11ac75b229b0035f2b0c" - integrity sha512-zhtMio3Exty18dy8ee8eJ9kjnRyZC1N4C1Nt/VShN1apyXc8rWGtJ9lI7vqiWcyyXS4BVSEn9lxAM2D+07/Tag== - dependencies: - "@jest/environment" "^26.6.2" - "@jest/fake-timers" "^26.6.2" - "@jest/types" "^26.6.2" + jest-mock "^29.5.0" + jest-util "^29.5.0" + jsdom "^20.0.0" + +jest-environment-node@^29.5.0: + version "29.5.0" + resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-29.5.0.tgz#f17219d0f0cc0e68e0727c58b792c040e332c967" + integrity sha512-ExxuIK/+yQ+6PRGaHkKewYtg6hto2uGCgvKdb2nfJfKXgZ17DfXjvbZ+jA1Qt9A8EQSfPnt5FKIfnOO3u1h9qw== + dependencies: + "@jest/environment" "^29.5.0" + "@jest/fake-timers" "^29.5.0" + "@jest/types" "^29.5.0" "@types/node" "*" - jest-mock "^26.6.2" - jest-util "^26.6.2" + jest-mock "^29.5.0" + jest-util "^29.5.0" jest-get-type@^25.2.6: version "25.2.6" @@ -8663,162 +8289,47 @@ jest-get-type@^26.3.0: resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-26.3.0.tgz#e97dc3c3f53c2b406ca7afaed4493b1d099199e0" integrity sha512-TpfaviN1R2pQWkIihlfEanwOXK0zcxrKEE4MlU6Tn7keoXdN6/3gK/xl0yEh8DOunn5pOVGKf8hB4R9gVh04ig== -jest-haste-map@^24.9.0: - version "24.9.0" - resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-24.9.0.tgz#b38a5d64274934e21fa417ae9a9fbeb77ceaac7d" - integrity sha512-kfVFmsuWui2Sj1Rp1AJ4D9HqJwE4uwTlS/vO+eRUaMmd54BFpli2XhMQnPC2k4cHFVbB2Q2C+jtI1AGLgEnCjQ== - dependencies: - "@jest/types" "^24.9.0" - anymatch "^2.0.0" - fb-watchman "^2.0.0" - graceful-fs "^4.1.15" - invariant "^2.2.4" - jest-serializer "^24.9.0" - jest-util "^24.9.0" - jest-worker "^24.9.0" - micromatch "^3.1.10" - sane "^4.0.3" - walker "^1.0.7" - optionalDependencies: - fsevents "^1.2.7" - -jest-haste-map@^25.5.1: - version "25.5.1" - resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-25.5.1.tgz#1df10f716c1d94e60a1ebf7798c9fb3da2620943" - integrity sha512-dddgh9UZjV7SCDQUrQ+5t9yy8iEgKc1AKqZR9YDww8xsVOtzPQSMVLDChc21+g29oTRexb9/B0bIlZL+sWmvAQ== - dependencies: - "@jest/types" "^25.5.0" - "@types/graceful-fs" "^4.1.2" - anymatch "^3.0.3" - fb-watchman "^2.0.0" - graceful-fs "^4.2.4" - jest-serializer "^25.5.0" - jest-util "^25.5.0" - jest-worker "^25.5.0" - micromatch "^4.0.2" - sane "^4.0.3" - walker "^1.0.7" - which "^2.0.2" - optionalDependencies: - fsevents "^2.1.2" +jest-get-type@^29.4.3: + version "29.4.3" + resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-29.4.3.tgz#1ab7a5207c995161100b5187159ca82dd48b3dd5" + integrity sha512-J5Xez4nRRMjk8emnTpWrlkyb9pfRQQanDrvWHhsR1+VUfbwxi30eVcZFlcdGInRibU4G5LwHXpI7IRHU0CY+gg== -jest-haste-map@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-26.6.2.tgz#dd7e60fe7dc0e9f911a23d79c5ff7fb5c2cafeaa" - integrity sha512-easWIJXIw71B2RdR8kgqpjQrbMRWQBgiBwXYEhtGUTaX+doCjBheluShdDMeR8IMfJiTqH4+zfhtg29apJf/8w== +jest-haste-map@^29.5.0: + version "29.5.0" + resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-29.5.0.tgz#69bd67dc9012d6e2723f20a945099e972b2e94de" + integrity sha512-IspOPnnBro8YfVYSw6yDRKh/TiCdRngjxeacCps1cQ9cgVN6+10JUcuJ1EabrgYLOATsIAigxA0rLR9x/YlrSA== dependencies: - "@jest/types" "^26.6.2" - "@types/graceful-fs" "^4.1.2" + "@jest/types" "^29.5.0" + "@types/graceful-fs" "^4.1.3" "@types/node" "*" anymatch "^3.0.3" fb-watchman "^2.0.0" - graceful-fs "^4.2.4" - jest-regex-util "^26.0.0" - jest-serializer "^26.6.2" - jest-util "^26.6.2" - jest-worker "^26.6.2" - micromatch "^4.0.2" - sane "^4.0.3" - walker "^1.0.7" + graceful-fs "^4.2.9" + jest-regex-util "^29.4.3" + jest-util "^29.5.0" + jest-worker "^29.5.0" + micromatch "^4.0.4" + walker "^1.0.8" optionalDependencies: - fsevents "^2.1.2" - -jest-jasmine2@^25.5.4: - version "25.5.4" - resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-25.5.4.tgz#66ca8b328fb1a3c5364816f8958f6970a8526968" - integrity sha512-9acbWEfbmS8UpdcfqnDO+uBUgKa/9hcRh983IHdM+pKmJPL77G0sWAAK0V0kr5LK3a8cSBfkFSoncXwQlRZfkQ== - dependencies: - "@babel/traverse" "^7.1.0" - "@jest/environment" "^25.5.0" - "@jest/source-map" "^25.5.0" - "@jest/test-result" "^25.5.0" - "@jest/types" "^25.5.0" - chalk "^3.0.0" - co "^4.6.0" - expect "^25.5.0" - is-generator-fn "^2.0.0" - jest-each "^25.5.0" - jest-matcher-utils "^25.5.0" - jest-message-util "^25.5.0" - jest-runtime "^25.5.4" - jest-snapshot "^25.5.1" - jest-util "^25.5.0" - pretty-format "^25.5.0" - throat "^5.0.0" - -jest-jasmine2@^26.6.3: - version "26.6.3" - resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-26.6.3.tgz#adc3cf915deacb5212c93b9f3547cd12958f2edd" - integrity sha512-kPKUrQtc8aYwBV7CqBg5pu+tmYXlvFlSFYn18ev4gPFtrRzB15N2gW/Roew3187q2w2eHuu0MU9TJz6w0/nPEg== - dependencies: - "@babel/traverse" "^7.1.0" - "@jest/environment" "^26.6.2" - "@jest/source-map" "^26.6.2" - "@jest/test-result" "^26.6.2" - "@jest/types" "^26.6.2" - "@types/node" "*" - chalk "^4.0.0" - co "^4.6.0" - expect "^26.6.2" - is-generator-fn "^2.0.0" - jest-each "^26.6.2" - jest-matcher-utils "^26.6.2" - jest-message-util "^26.6.2" - jest-runtime "^26.6.3" - jest-snapshot "^26.6.2" - jest-util "^26.6.2" - pretty-format "^26.6.2" - throat "^5.0.0" - -jest-leak-detector@^25.5.0: - version "25.5.0" - resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-25.5.0.tgz#2291c6294b0ce404241bb56fe60e2d0c3e34f0bb" - integrity sha512-rV7JdLsanS8OkdDpZtgBf61L5xZ4NnYLBq72r6ldxahJWWczZjXawRsoHyXzibM5ed7C2QRjpp6ypgwGdKyoVA== - dependencies: - jest-get-type "^25.2.6" - pretty-format "^25.5.0" - -jest-leak-detector@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-26.6.2.tgz#7717cf118b92238f2eba65054c8a0c9c653a91af" - integrity sha512-i4xlXpsVSMeKvg2cEKdfhh0H39qlJlP5Ex1yQxwF9ubahboQYMgTtz5oML35AVA3B4Eu+YsmwaiKVev9KCvLxg== - dependencies: - jest-get-type "^26.3.0" - pretty-format "^26.6.2" + fsevents "^2.3.2" -jest-matcher-utils@^25.5.0: - version "25.5.0" - resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-25.5.0.tgz#fbc98a12d730e5d2453d7f1ed4a4d948e34b7867" - integrity sha512-VWI269+9JS5cpndnpCwm7dy7JtGQT30UHfrnM3mXl22gHGt/b7NkjBqXfbhZ8V4B7ANUsjK18PlSBmG0YH7gjw== +jest-leak-detector@^29.5.0: + version "29.5.0" + resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-29.5.0.tgz#cf4bdea9615c72bac4a3a7ba7e7930f9c0610c8c" + integrity sha512-u9YdeeVnghBUtpN5mVxjID7KbkKE1QU4f6uUwuxiY0vYRi9BUCLKlPEZfDGR67ofdFmDz9oPAy2G92Ujrntmow== dependencies: - chalk "^3.0.0" - jest-diff "^25.5.0" - jest-get-type "^25.2.6" - pretty-format "^25.5.0" + jest-get-type "^29.4.3" + pretty-format "^29.5.0" -jest-matcher-utils@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-26.6.2.tgz#8e6fd6e863c8b2d31ac6472eeb237bc595e53e7a" - integrity sha512-llnc8vQgYcNqDrqRDXWwMr9i7rS5XFiCwvh6DTP7Jqa2mqpcCBBlpCbn+trkG0KNhPu/h8rzyBkriOtBstvWhw== +jest-matcher-utils@^29.5.0: + version "29.5.0" + resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-29.5.0.tgz#d957af7f8c0692c5453666705621ad4abc2c59c5" + integrity sha512-lecRtgm/rjIK0CQ7LPQwzCs2VwW6WAahA55YBuI+xqmhm7LAaxokSB8C97yJeYyT+HvQkH741StzpU41wohhWw== dependencies: chalk "^4.0.0" - jest-diff "^26.6.2" - jest-get-type "^26.3.0" - pretty-format "^26.6.2" - -jest-message-util@^24.9.0: - version "24.9.0" - resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-24.9.0.tgz#527f54a1e380f5e202a8d1149b0ec872f43119e3" - integrity sha512-oCj8FiZ3U0hTP4aSui87P4L4jC37BtQwUMqk+zk/b11FR19BJDeZsZAvIHutWnmtw7r85UmR3CEWZ0HWU2mAlw== - dependencies: - "@babel/code-frame" "^7.0.0" - "@jest/test-result" "^24.9.0" - "@jest/types" "^24.9.0" - "@types/stack-utils" "^1.0.1" - chalk "^2.0.1" - micromatch "^3.1.10" - slash "^2.0.0" - stack-utils "^1.0.1" + jest-diff "^29.5.0" + jest-get-type "^29.4.3" + pretty-format "^29.5.0" jest-message-util@^25.5.0: version "25.5.0" @@ -8834,311 +8345,156 @@ jest-message-util@^25.5.0: slash "^3.0.0" stack-utils "^1.0.1" -jest-message-util@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-26.6.2.tgz#58173744ad6fc0506b5d21150b9be56ef001ca07" - integrity sha512-rGiLePzQ3AzwUshu2+Rn+UMFk0pHN58sOG+IaJbk5Jxuqo3NYO1U2/MIR4S1sKgsoYSXSzdtSa0TgrmtUwEbmA== +jest-message-util@^29.5.0: + version "29.5.0" + resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-29.5.0.tgz#1f776cac3aca332ab8dd2e3b41625435085c900e" + integrity sha512-Kijeg9Dag6CKtIDA7O21zNTACqD5MD/8HfIV8pdD94vFyFuer52SigdC3IQMhab3vACxXMiFk+yMHNdbqtyTGA== dependencies: - "@babel/code-frame" "^7.0.0" - "@jest/types" "^26.6.2" + "@babel/code-frame" "^7.12.13" + "@jest/types" "^29.5.0" "@types/stack-utils" "^2.0.0" chalk "^4.0.0" - graceful-fs "^4.2.4" - micromatch "^4.0.2" - pretty-format "^26.6.2" + graceful-fs "^4.2.9" + micromatch "^4.0.4" + pretty-format "^29.5.0" slash "^3.0.0" - stack-utils "^2.0.2" + stack-utils "^2.0.3" jest-mock-console@^1.0.1: version "1.2.3" resolved "https://registry.yarnpkg.com/jest-mock-console/-/jest-mock-console-1.2.3.tgz#4e725cd2c26d17051c35ce2c378129d52c2b4f61" integrity sha512-q4jfuHW3V3tYzwtKTF6nxjRNriUC2/D2SVfxW88lNeG1qO1mVarBUqgOAvZjTEmxuTsjzGlHQsDIgvlOZaLccg== -jest-mock@^24.0.0, jest-mock@^24.9.0: - version "24.9.0" - resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-24.9.0.tgz#c22835541ee379b908673ad51087a2185c13f1c6" - integrity sha512-3BEYN5WbSq9wd+SyLDES7AHnjH9A/ROBwmz7l2y+ol+NtSFO8DYiEBzoO1CeFc9a8DYy10EO4dDFVv/wN3zl1w== - dependencies: - "@jest/types" "^24.9.0" - -jest-mock@^25.5.0: - version "25.5.0" - resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-25.5.0.tgz#a91a54dabd14e37ecd61665d6b6e06360a55387a" - integrity sha512-eXWuTV8mKzp/ovHc5+3USJMYsTBhyQ+5A1Mak35dey/RG8GlM4YWVylZuGgVXinaW6tpvk/RSecmF37FKUlpXA== - dependencies: - "@jest/types" "^25.5.0" - -jest-mock@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-26.6.2.tgz#d6cb712b041ed47fe0d9b6fc3474bc6543feb302" - integrity sha512-YyFjePHHp1LzpzYcmgqkJ0nm0gg/lJx2aZFzFy1S6eUqNjXsOqTK10zNRff2dNfssgokjkG65OlWNcIlgd3zew== +jest-mock@^29.5.0: + version "29.5.0" + resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-29.5.0.tgz#26e2172bcc71d8b0195081ff1f146ac7e1518aed" + integrity sha512-GqOzvdWDE4fAV2bWQLQCkujxYWL7RxjCnj71b5VhDAGOevB3qj3Ovg26A5NI84ZpODxyzaozXLOh2NCgkbvyaw== dependencies: - "@jest/types" "^26.6.2" + "@jest/types" "^29.5.0" "@types/node" "*" + jest-util "^29.5.0" -jest-pnp-resolver@^1.2.1, jest-pnp-resolver@^1.2.2: +jest-pnp-resolver@^1.2.2: version "1.2.2" resolved "https://registry.yarnpkg.com/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz#b704ac0ae028a89108a4d040b3f919dfddc8e33c" integrity sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w== -jest-regex-util@^24.9.0: - version "24.9.0" - resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-24.9.0.tgz#c13fb3380bde22bf6575432c493ea8fe37965636" - integrity sha512-05Cmb6CuxaA+Ys6fjr3PhvV3bGQmO+2p2La4hFbU+W5uOc479f7FdLXUWXw4pYMAhhSZIuKHwSXSu6CsSBAXQA== - -jest-regex-util@^25.2.1, jest-regex-util@^25.2.6: +jest-regex-util@^25.2.1: version "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@^26.0.0: - version "26.0.0" - resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-26.0.0.tgz#d25e7184b36e39fd466c3bc41be0971e821fee28" - integrity sha512-Gv3ZIs/nA48/Zvjrl34bf+oD76JHiGDUxNOVgUjh3j890sblXryjY4rss71fPtD/njchl6PSE2hIhvyWa1eT0A== - -jest-resolve-dependencies@^25.5.4: - version "25.5.4" - resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-25.5.4.tgz#85501f53957c8e3be446e863a74777b5a17397a7" - integrity sha512-yFmbPd+DAQjJQg88HveObcGBA32nqNZ02fjYmtL16t1xw9bAttSn5UGRRhzMHIQbsep7znWvAvnD4kDqOFM0Uw== - dependencies: - "@jest/types" "^25.5.0" - jest-regex-util "^25.2.6" - jest-snapshot "^25.5.1" - -jest-resolve-dependencies@^26.6.3: - version "26.6.3" - resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-26.6.3.tgz#6680859ee5d22ee5dcd961fe4871f59f4c784fb6" - integrity sha512-pVwUjJkxbhe4RY8QEWzN3vns2kqyuldKpxlxJlzEYfKSvY6/bMvxoFrYYzUO1Gx28yKWN37qyV7rIoIp2h8fTg== - dependencies: - "@jest/types" "^26.6.2" - jest-regex-util "^26.0.0" - jest-snapshot "^26.6.2" +jest-regex-util@^29.4.3: + version "29.4.3" + resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-29.4.3.tgz#a42616141e0cae052cfa32c169945d00c0aa0bb8" + integrity sha512-O4FglZaMmWXbGHSQInfXewIsd1LMn9p3ZXB/6r4FOkyhX2/iP/soMG98jGvk/A3HAN78+5VWcBGO0BJAPRh4kg== -jest-resolve@^25.5.1: - version "25.5.1" - resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-25.5.1.tgz#0e6fbcfa7c26d2a5fe8f456088dc332a79266829" - integrity sha512-Hc09hYch5aWdtejsUZhA+vSzcotf7fajSlPA6EZPE1RmPBAD39XtJhvHWFStid58iit4IPDLI/Da4cwdDmAHiQ== +jest-resolve-dependencies@^29.5.0: + version "29.5.0" + resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-29.5.0.tgz#f0ea29955996f49788bf70996052aa98e7befee4" + integrity sha512-sjV3GFr0hDJMBpYeUuGduP+YeCRbd7S/ck6IvL3kQ9cpySYKqcqhdLLC2rFwrcL7tz5vYibomBrsFYWkIGGjOg== dependencies: - "@jest/types" "^25.5.0" - browser-resolve "^1.11.3" - chalk "^3.0.0" - graceful-fs "^4.2.4" - jest-pnp-resolver "^1.2.1" - read-pkg-up "^7.0.1" - realpath-native "^2.0.0" - resolve "^1.17.0" - slash "^3.0.0" + jest-regex-util "^29.4.3" + jest-snapshot "^29.5.0" -jest-resolve@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-26.6.2.tgz#a3ab1517217f469b504f1b56603c5bb541fbb507" - integrity sha512-sOxsZOq25mT1wRsfHcbtkInS+Ek7Q8jCHUB0ZUTP0tc/c41QHriU/NunqMfCUWsL4H3MHpvQD4QR9kSYhS7UvQ== +jest-resolve@^29.5.0: + version "29.5.0" + resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-29.5.0.tgz#b053cc95ad1d5f6327f0ac8aae9f98795475ecdc" + integrity sha512-1TzxJ37FQq7J10jPtQjcc+MkCkE3GBpBecsSUWJ0qZNJpmg6m0D9/7II03yJulm3H/fvVjgqLh/k2eYg+ui52w== dependencies: - "@jest/types" "^26.6.2" chalk "^4.0.0" - graceful-fs "^4.2.4" + graceful-fs "^4.2.9" + jest-haste-map "^29.5.0" jest-pnp-resolver "^1.2.2" - jest-util "^26.6.2" - read-pkg-up "^7.0.1" - resolve "^1.18.1" + jest-util "^29.5.0" + jest-validate "^29.5.0" + resolve "^1.20.0" + resolve.exports "^2.0.0" slash "^3.0.0" -jest-runner@^25.5.4: - version "25.5.4" - resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-25.5.4.tgz#ffec5df3875da5f5c878ae6d0a17b8e4ecd7c71d" - integrity sha512-V/2R7fKZo6blP8E9BL9vJ8aTU4TH2beuqGNxHbxi6t14XzTb+x90B3FRgdvuHm41GY8ch4xxvf0ATH4hdpjTqg== +jest-runner@^29.5.0: + version "29.5.0" + resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-29.5.0.tgz#6a57c282eb0ef749778d444c1d758c6a7693b6f8" + integrity sha512-m7b6ypERhFghJsslMLhydaXBiLf7+jXy8FwGRHO3BGV1mcQpPbwiqiKUR2zU2NJuNeMenJmlFZCsIqzJCTeGLQ== dependencies: - "@jest/console" "^25.5.0" - "@jest/environment" "^25.5.0" - "@jest/test-result" "^25.5.0" - "@jest/types" "^25.5.0" - chalk "^3.0.0" - exit "^0.1.2" - graceful-fs "^4.2.4" - jest-config "^25.5.4" - jest-docblock "^25.3.0" - jest-haste-map "^25.5.1" - jest-jasmine2 "^25.5.4" - jest-leak-detector "^25.5.0" - jest-message-util "^25.5.0" - jest-resolve "^25.5.1" - jest-runtime "^25.5.4" - jest-util "^25.5.0" - jest-worker "^25.5.0" - source-map-support "^0.5.6" - throat "^5.0.0" - -jest-runner@^26.6.3: - version "26.6.3" - resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-26.6.3.tgz#2d1fed3d46e10f233fd1dbd3bfaa3fe8924be159" - integrity sha512-atgKpRHnaA2OvByG/HpGA4g6CSPS/1LK0jK3gATJAoptC1ojltpmVlYC3TYgdmGp+GLuhzpH30Gvs36szSL2JQ== - dependencies: - "@jest/console" "^26.6.2" - "@jest/environment" "^26.6.2" - "@jest/test-result" "^26.6.2" - "@jest/types" "^26.6.2" + "@jest/console" "^29.5.0" + "@jest/environment" "^29.5.0" + "@jest/test-result" "^29.5.0" + "@jest/transform" "^29.5.0" + "@jest/types" "^29.5.0" "@types/node" "*" chalk "^4.0.0" - emittery "^0.7.1" - exit "^0.1.2" - graceful-fs "^4.2.4" - jest-config "^26.6.3" - jest-docblock "^26.0.0" - jest-haste-map "^26.6.2" - jest-leak-detector "^26.6.2" - jest-message-util "^26.6.2" - jest-resolve "^26.6.2" - jest-runtime "^26.6.3" - jest-util "^26.6.2" - jest-worker "^26.6.2" - source-map-support "^0.5.6" - throat "^5.0.0" - -jest-runtime@^25.5.4: - version "25.5.4" - resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-25.5.4.tgz#dc981fe2cb2137abcd319e74ccae7f7eeffbfaab" - integrity sha512-RWTt8LeWh3GvjYtASH2eezkc8AehVoWKK20udV6n3/gC87wlTbE1kIA+opCvNWyyPeBs6ptYsc6nyHUb1GlUVQ== - dependencies: - "@jest/console" "^25.5.0" - "@jest/environment" "^25.5.0" - "@jest/globals" "^25.5.2" - "@jest/source-map" "^25.5.0" - "@jest/test-result" "^25.5.0" - "@jest/transform" "^25.5.1" - "@jest/types" "^25.5.0" - "@types/yargs" "^15.0.0" - chalk "^3.0.0" - collect-v8-coverage "^1.0.0" - exit "^0.1.2" - glob "^7.1.3" - graceful-fs "^4.2.4" - jest-config "^25.5.4" - jest-haste-map "^25.5.1" - jest-message-util "^25.5.0" - jest-mock "^25.5.0" - jest-regex-util "^25.2.6" - jest-resolve "^25.5.1" - jest-snapshot "^25.5.1" - jest-util "^25.5.0" - jest-validate "^25.5.0" - realpath-native "^2.0.0" - slash "^3.0.0" - strip-bom "^4.0.0" - yargs "^15.3.1" - -jest-runtime@^26.6.3: - version "26.6.3" - resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-26.6.3.tgz#4f64efbcfac398331b74b4b3c82d27d401b8fa2b" - integrity sha512-lrzyR3N8sacTAMeonbqpnSka1dHNux2uk0qqDXVkMv2c/A3wYnvQ4EXuI013Y6+gSKSCxdaczvf4HF0mVXHRdw== - dependencies: - "@jest/console" "^26.6.2" - "@jest/environment" "^26.6.2" - "@jest/fake-timers" "^26.6.2" - "@jest/globals" "^26.6.2" - "@jest/source-map" "^26.6.2" - "@jest/test-result" "^26.6.2" - "@jest/transform" "^26.6.2" - "@jest/types" "^26.6.2" - "@types/yargs" "^15.0.0" + emittery "^0.13.1" + graceful-fs "^4.2.9" + jest-docblock "^29.4.3" + jest-environment-node "^29.5.0" + jest-haste-map "^29.5.0" + jest-leak-detector "^29.5.0" + jest-message-util "^29.5.0" + jest-resolve "^29.5.0" + jest-runtime "^29.5.0" + jest-util "^29.5.0" + jest-watcher "^29.5.0" + jest-worker "^29.5.0" + p-limit "^3.1.0" + source-map-support "0.5.13" + +jest-runtime@^29.5.0: + version "29.5.0" + resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-29.5.0.tgz#c83f943ee0c1da7eb91fa181b0811ebd59b03420" + integrity sha512-1Hr6Hh7bAgXQP+pln3homOiEZtCDZFqwmle7Ew2j8OlbkIu6uE3Y/etJQG8MLQs3Zy90xrp2C0BRrtPHG4zryw== + dependencies: + "@jest/environment" "^29.5.0" + "@jest/fake-timers" "^29.5.0" + "@jest/globals" "^29.5.0" + "@jest/source-map" "^29.4.3" + "@jest/test-result" "^29.5.0" + "@jest/transform" "^29.5.0" + "@jest/types" "^29.5.0" + "@types/node" "*" chalk "^4.0.0" - cjs-module-lexer "^0.6.0" + cjs-module-lexer "^1.0.0" collect-v8-coverage "^1.0.0" - exit "^0.1.2" glob "^7.1.3" - graceful-fs "^4.2.4" - jest-config "^26.6.3" - jest-haste-map "^26.6.2" - jest-message-util "^26.6.2" - jest-mock "^26.6.2" - jest-regex-util "^26.0.0" - jest-resolve "^26.6.2" - jest-snapshot "^26.6.2" - jest-util "^26.6.2" - jest-validate "^26.6.2" + graceful-fs "^4.2.9" + jest-haste-map "^29.5.0" + jest-message-util "^29.5.0" + jest-mock "^29.5.0" + jest-regex-util "^29.4.3" + jest-resolve "^29.5.0" + jest-snapshot "^29.5.0" + jest-util "^29.5.0" slash "^3.0.0" strip-bom "^4.0.0" - yargs "^15.4.1" - -jest-serializer@^24.9.0: - version "24.9.0" - resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-24.9.0.tgz#e6d7d7ef96d31e8b9079a714754c5d5c58288e73" - integrity sha512-DxYipDr8OvfrKH3Kel6NdED3OXxjvxXZ1uIY2I9OFbGg+vUkkg7AGvi65qbhbWNPvDckXmzMPbK3u3HaDO49bQ== - -jest-serializer@^25.5.0: - version "25.5.0" - resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-25.5.0.tgz#a993f484e769b4ed54e70e0efdb74007f503072b" - integrity sha512-LxD8fY1lByomEPflwur9o4e2a5twSQ7TaVNLlFUuToIdoJuBt8tzHfCsZ42Ok6LkKXWzFWf3AGmheuLAA7LcCA== - dependencies: - graceful-fs "^4.2.4" - -jest-serializer@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-26.6.2.tgz#d139aafd46957d3a448f3a6cdabe2919ba0742d1" - integrity sha512-S5wqyz0DXnNJPd/xfIzZ5Xnp1HrJWBczg8mMfMpN78OJ5eDxXyf+Ygld9wX1DnUWbIbhM1YDY95NjR4CBXkb2g== - dependencies: - "@types/node" "*" - graceful-fs "^4.2.4" - -jest-snapshot@^25.5.1: - version "25.5.1" - resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-25.5.1.tgz#1a2a576491f9961eb8d00c2e5fd479bc28e5ff7f" - integrity sha512-C02JE1TUe64p2v1auUJ2ze5vcuv32tkv9PyhEb318e8XOKF7MOyXdJ7kdjbvrp3ChPLU2usI7Rjxs97Dj5P0uQ== - dependencies: - "@babel/types" "^7.0.0" - "@jest/types" "^25.5.0" - "@types/prettier" "^1.19.0" - chalk "^3.0.0" - expect "^25.5.0" - graceful-fs "^4.2.4" - jest-diff "^25.5.0" - jest-get-type "^25.2.6" - jest-matcher-utils "^25.5.0" - jest-message-util "^25.5.0" - jest-resolve "^25.5.1" - make-dir "^3.0.0" - natural-compare "^1.4.0" - pretty-format "^25.5.0" - semver "^6.3.0" -jest-snapshot@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-26.6.2.tgz#f3b0af1acb223316850bd14e1beea9837fb39c84" - integrity sha512-OLhxz05EzUtsAmOMzuupt1lHYXCNib0ECyuZ/PZOx9TrZcC8vL0x+DUG3TL+GLX3yHG45e6YGjIm0XwDc3q3og== +jest-snapshot@^29.5.0: + version "29.5.0" + resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-29.5.0.tgz#c9c1ce0331e5b63cd444e2f95a55a73b84b1e8ce" + integrity sha512-x7Wolra5V0tt3wRs3/ts3S6ciSQVypgGQlJpz2rsdQYoUKxMxPNaoHMGJN6qAuPJqS+2iQ1ZUn5kl7HCyls84g== dependencies: - "@babel/types" "^7.0.0" - "@jest/types" "^26.6.2" - "@types/babel__traverse" "^7.0.4" - "@types/prettier" "^2.0.0" + "@babel/core" "^7.11.6" + "@babel/generator" "^7.7.2" + "@babel/plugin-syntax-jsx" "^7.7.2" + "@babel/plugin-syntax-typescript" "^7.7.2" + "@babel/traverse" "^7.7.2" + "@babel/types" "^7.3.3" + "@jest/expect-utils" "^29.5.0" + "@jest/transform" "^29.5.0" + "@jest/types" "^29.5.0" + "@types/babel__traverse" "^7.0.6" + "@types/prettier" "^2.1.5" + babel-preset-current-node-syntax "^1.0.0" chalk "^4.0.0" - expect "^26.6.2" - graceful-fs "^4.2.4" - jest-diff "^26.6.2" - jest-get-type "^26.3.0" - jest-haste-map "^26.6.2" - jest-matcher-utils "^26.6.2" - jest-message-util "^26.6.2" - jest-resolve "^26.6.2" + expect "^29.5.0" + graceful-fs "^4.2.9" + jest-diff "^29.5.0" + jest-get-type "^29.4.3" + jest-matcher-utils "^29.5.0" + jest-message-util "^29.5.0" + jest-util "^29.5.0" natural-compare "^1.4.0" - pretty-format "^26.6.2" - semver "^7.3.2" - -jest-util@^24.0.0, jest-util@^24.9.0: - version "24.9.0" - resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-24.9.0.tgz#7396814e48536d2e85a37de3e4c431d7cb140162" - integrity sha512-x+cZU8VRmOJxbA1K5oDBdxQmdq0OIdADarLxk0Mq+3XS4jgvhG/oKGWcIDCtPG0HgjxOYvF+ilPJQsAyXfbNOg== - dependencies: - "@jest/console" "^24.9.0" - "@jest/fake-timers" "^24.9.0" - "@jest/source-map" "^24.9.0" - "@jest/test-result" "^24.9.0" - "@jest/types" "^24.9.0" - callsites "^3.0.0" - chalk "^2.0.1" - graceful-fs "^4.1.15" - is-ci "^2.0.0" - mkdirp "^0.5.1" - slash "^2.0.0" - source-map "^0.6.0" + pretty-format "^29.5.0" + semver "^7.3.5" jest-util@^25.5.0: version "25.5.0" @@ -9151,41 +8507,29 @@ jest-util@^25.5.0: is-ci "^2.0.0" make-dir "^3.0.0" -jest-util@^26.1.0, jest-util@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-26.6.2.tgz#907535dbe4d5a6cb4c47ac9b926f6af29576cbc1" - integrity sha512-MDW0fKfsn0OI7MS7Euz6h8HNDXVQ0gaM9uW6RjfDmd1DAFcaxX9OqIakHIqhbnmF08Cf2DLDG+ulq8YQQ0Lp0Q== +jest-util@^29.0.0, jest-util@^29.5.0: + version "29.5.0" + resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-29.5.0.tgz#24a4d3d92fc39ce90425311b23c27a6e0ef16b8f" + integrity sha512-RYMgG/MTadOr5t8KdhejfvUU82MxsCu5MF6KuDUHl+NuwzUt+Sm6jJWxTJVrDR1j5M/gJVCPKQEpWXY+yIQ6lQ== dependencies: - "@jest/types" "^26.6.2" + "@jest/types" "^29.5.0" "@types/node" "*" chalk "^4.0.0" - graceful-fs "^4.2.4" - is-ci "^2.0.0" - micromatch "^4.0.2" - -jest-validate@^25.5.0: - version "25.5.0" - resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-25.5.0.tgz#fb4c93f332c2e4cf70151a628e58a35e459a413a" - integrity sha512-okUFKqhZIpo3jDdtUXUZ2LxGUZJIlfdYBvZb1aczzxrlyMlqdnnws9MOxezoLGhSaFc2XYaHNReNQfj5zPIWyQ== - dependencies: - "@jest/types" "^25.5.0" - camelcase "^5.3.1" - chalk "^3.0.0" - jest-get-type "^25.2.6" - leven "^3.1.0" - pretty-format "^25.5.0" + ci-info "^3.2.0" + graceful-fs "^4.2.9" + picomatch "^2.2.3" -jest-validate@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-26.6.2.tgz#23d380971587150467342911c3d7b4ac57ab20ec" - integrity sha512-NEYZ9Aeyj0i5rQqbq+tpIOom0YS1u2MVu6+euBsvpgIme+FOfRmoC4R5p0JiAUpaFvFy24xgrpMknarR/93XjQ== +jest-validate@^29.5.0: + version "29.5.0" + resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-29.5.0.tgz#8e5a8f36178d40e47138dc00866a5f3bd9916ffc" + integrity sha512-pC26etNIi+y3HV8A+tUGr/lph9B18GnzSRAkPaaZJIE1eFdiYm6/CewuiJQ8/RlfHd1u/8Ioi8/sJ+CmbA+zAQ== dependencies: - "@jest/types" "^26.6.2" - camelcase "^6.0.0" + "@jest/types" "^29.5.0" + camelcase "^6.2.0" chalk "^4.0.0" - jest-get-type "^26.3.0" + jest-get-type "^29.4.3" leven "^3.1.0" - pretty-format "^26.6.2" + pretty-format "^29.5.0" jest-watch-typeahead@^0.5.0: version "0.5.0" @@ -9200,7 +8544,7 @@ jest-watch-typeahead@^0.5.0: string-length "^3.1.0" strip-ansi "^6.0.0" -jest-watcher@^25.2.4, jest-watcher@^25.5.0: +jest-watcher@^25.2.4: version "25.5.0" resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-25.5.0.tgz#d6110d101df98badebe435003956fd4a465e8456" integrity sha512-XrSfJnVASEl+5+bb51V0Q7WQx65dTSk7NL4yDdVjPnRNpM0hG+ncFmDYJo9O8jaSRcAitVbuVawyXCRoxGrT5Q== @@ -9212,17 +8556,18 @@ jest-watcher@^25.2.4, jest-watcher@^25.5.0: jest-util "^25.5.0" string-length "^3.1.0" -jest-watcher@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-26.6.2.tgz#a5b683b8f9d68dbcb1d7dae32172d2cca0592975" - integrity sha512-WKJob0P/Em2csiVthsI68p6aGKTIcsfjH9Gsx1f0A3Italz43e3ho0geSAVsmj09RWOELP1AZ/DXyJgOgDKxXQ== +jest-watcher@^29.5.0: + version "29.5.0" + resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-29.5.0.tgz#cf7f0f949828ba65ddbbb45c743a382a4d911363" + integrity sha512-KmTojKcapuqYrKDpRwfqcQ3zjMlwu27SYext9pt4GlF5FUgB+7XE1mcCnSm6a4uUpFyQIkb6ZhzZvHl+jiBCiA== dependencies: - "@jest/test-result" "^26.6.2" - "@jest/types" "^26.6.2" + "@jest/test-result" "^29.5.0" + "@jest/types" "^29.5.0" "@types/node" "*" ansi-escapes "^4.2.1" chalk "^4.0.0" - jest-util "^26.6.2" + emittery "^0.13.1" + jest-util "^29.5.0" string-length "^4.0.1" jest-worker@^24.9.0: @@ -9233,40 +8578,25 @@ jest-worker@^24.9.0: merge-stream "^2.0.0" supports-color "^6.1.0" -jest-worker@^25.5.0: - version "25.5.0" - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-25.5.0.tgz#2611d071b79cea0f43ee57a3d118593ac1547db1" - integrity sha512-/dsSmUkIy5EBGfv/IjjqmFxrNAUpBERfGs1oHROyD7yxjG/w+t0GOJDX8O1k32ySmd7+a5IhnJU2qQFcJ4n1vw== - dependencies: - merge-stream "^2.0.0" - supports-color "^7.0.0" - -jest-worker@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-26.6.2.tgz#7f72cbc4d643c365e27b9fd775f9d0eaa9c7a8ed" - integrity sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ== +jest-worker@^29.5.0: + version "29.5.0" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-29.5.0.tgz#bdaefb06811bd3384d93f009755014d8acb4615d" + integrity sha512-NcrQnevGoSp4b5kg+akIpthoAFHxPBcb5P6mYPY0fUNT+sSvmtu6jlkEle3anczUKIKEbMxFimk9oTP/tpIPgA== dependencies: "@types/node" "*" + jest-util "^29.5.0" merge-stream "^2.0.0" - supports-color "^7.0.0" - -jest@^25.3.0: - version "25.5.4" - resolved "https://registry.yarnpkg.com/jest/-/jest-25.5.4.tgz#f21107b6489cfe32b076ce2adcadee3587acb9db" - integrity sha512-hHFJROBTqZahnO+X+PMtT6G2/ztqAZJveGqz//FnWWHurizkD05PQGzRZOhF3XP6z7SJmL+5tCfW8qV06JypwQ== - dependencies: - "@jest/core" "^25.5.4" - import-local "^3.0.2" - jest-cli "^25.5.4" + supports-color "^8.0.0" -jest@^26.6.2: - version "26.6.3" - resolved "https://registry.yarnpkg.com/jest/-/jest-26.6.3.tgz#40e8fdbe48f00dfa1f0ce8121ca74b88ac9148ef" - integrity sha512-lGS5PXGAzR4RF7V5+XObhqz2KZIDUA1yD0DG6pBVmy10eh0ZIXQImRuzocsI/N2XZ1GrLFwTS27In2i2jlpq1Q== +jest@^25.3.0, jest@^29.5.0: + version "29.5.0" + resolved "https://registry.yarnpkg.com/jest/-/jest-29.5.0.tgz#f75157622f5ce7ad53028f2f8888ab53e1f1f24e" + integrity sha512-juMg3he2uru1QoXX078zTa7pO85QyB9xajZc6bU+d9yEGwrKX6+vGmJQ3UdVZsvTEUARIdObzH68QItim6OSSQ== dependencies: - "@jest/core" "^26.6.3" + "@jest/core" "^29.5.0" + "@jest/types" "^29.5.0" import-local "^3.0.2" - jest-cli "^26.6.3" + jest-cli "^29.5.0" jpjs@^1.2.1: version "1.2.1" @@ -9334,70 +8664,37 @@ jscodeshift@^0.11.0: temp "^0.8.1" write-file-atomic "^2.3.0" -jsdom@^15.2.1: - version "15.2.1" - resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-15.2.1.tgz#d2feb1aef7183f86be521b8c6833ff5296d07ec5" - integrity sha512-fAl1W0/7T2G5vURSyxBzrJ1LSdQn6Tr5UX/xD4PXDx/PDgwygedfW6El/KIj3xJ7FU61TTYnc/l/B7P49Eqt6g== +jsdom@^20.0.0: + version "20.0.3" + resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-20.0.3.tgz#886a41ba1d4726f67a8858028c99489fed6ad4db" + integrity sha512-SYhBvTh89tTfCD/CRdSOm13mOBa42iTaTyfyEWBdKcGdPxPtLFBXuHR8XHb33YNYaP+lLbmSvBTsnoesCNJEsQ== dependencies: - abab "^2.0.0" - acorn "^7.1.0" - acorn-globals "^4.3.2" - array-equal "^1.0.0" - cssom "^0.4.1" - cssstyle "^2.0.0" - data-urls "^1.1.0" - domexception "^1.0.1" - escodegen "^1.11.1" - html-encoding-sniffer "^1.0.2" - nwsapi "^2.2.0" - parse5 "5.1.0" - pn "^1.1.0" - request "^2.88.0" - request-promise-native "^1.0.7" - saxes "^3.1.9" - symbol-tree "^3.2.2" - tough-cookie "^3.0.1" - w3c-hr-time "^1.0.1" - w3c-xmlserializer "^1.1.2" - webidl-conversions "^4.0.2" - whatwg-encoding "^1.0.5" - whatwg-mimetype "^2.3.0" - whatwg-url "^7.0.0" - ws "^7.0.0" - xml-name-validator "^3.0.0" - -jsdom@^16.4.0: - version "16.7.0" - resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-16.7.0.tgz#918ae71965424b197c819f8183a754e18977b710" - integrity sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw== - dependencies: - abab "^2.0.5" - acorn "^8.2.4" - acorn-globals "^6.0.0" - cssom "^0.4.4" + abab "^2.0.6" + acorn "^8.8.1" + acorn-globals "^7.0.0" + cssom "^0.5.0" cssstyle "^2.3.0" - data-urls "^2.0.0" - decimal.js "^10.2.1" - domexception "^2.0.1" + data-urls "^3.0.2" + decimal.js "^10.4.2" + domexception "^4.0.0" escodegen "^2.0.0" - form-data "^3.0.0" - html-encoding-sniffer "^2.0.1" - http-proxy-agent "^4.0.1" - https-proxy-agent "^5.0.0" + form-data "^4.0.0" + html-encoding-sniffer "^3.0.0" + http-proxy-agent "^5.0.0" + https-proxy-agent "^5.0.1" is-potential-custom-element-name "^1.0.1" - nwsapi "^2.2.0" - parse5 "6.0.1" - saxes "^5.0.1" + nwsapi "^2.2.2" + parse5 "^7.1.1" + saxes "^6.0.0" symbol-tree "^3.2.4" - tough-cookie "^4.0.0" - w3c-hr-time "^1.0.2" - w3c-xmlserializer "^2.0.0" - webidl-conversions "^6.1.0" - whatwg-encoding "^1.0.5" - whatwg-mimetype "^2.3.0" - whatwg-url "^8.5.0" - ws "^7.4.6" - xml-name-validator "^3.0.0" + tough-cookie "^4.1.2" + w3c-xmlserializer "^4.0.0" + webidl-conversions "^7.0.0" + whatwg-encoding "^2.0.0" + whatwg-mimetype "^3.0.0" + whatwg-url "^11.0.0" + ws "^8.11.0" + xml-name-validator "^4.0.0" jsesc@^1.3.0: version "1.3.0" @@ -9449,7 +8746,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.2.2: +json5@2.x, json5@^2.2.2, json5@^2.2.3: version "2.2.3" resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== @@ -9812,7 +9109,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.12, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.4, lodash@^4.2.1, lodash@^4.7.0: +lodash@^4.17.12, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.4, lodash@^4.2.1: version "4.17.21" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== @@ -9856,13 +9153,6 @@ log-update@^4.0.0: slice-ansi "^4.0.0" wrap-ansi "^6.2.0" -lolex@^5.0.0: - version "5.1.2" - resolved "https://registry.yarnpkg.com/lolex/-/lolex-5.1.2.tgz#953694d098ce7c07bc5ed6d0e42bc6c0c6d5a367" - integrity sha512-h4hmjAvHTmd+25JSwrtTIuwbKdwg5NzZVRMLn9saij4SZaepCrTCxPr35H/3bjwfMJtN+t3CX8672UIkglz28A== - dependencies: - "@sinonjs/commons" "^1.7.0" - loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.3.1, loose-envify@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" @@ -10102,18 +9392,18 @@ merge-stream@^2.0.0: resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== -merge2@^1.2.3, merge2@^1.3.0: +merge2@^1.2.3, merge2@^1.3.0, merge2@^1.4.1: version "1.4.1" resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== micromatch@4.x, micromatch@^4.0.2, micromatch@^4.0.4: - version "4.0.4" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.4.tgz#896d519dfe9db25fce94ceb7a500919bf881ebf9" - integrity sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg== + version "4.0.5" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" + integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== dependencies: - braces "^3.0.1" - picomatch "^2.2.3" + braces "^3.0.2" + picomatch "^2.3.1" micromatch@^3.1.10, micromatch@^3.1.4: version "3.1.10" @@ -10208,10 +9498,10 @@ minimist-options@^3.0.1: arrify "^1.0.1" is-plain-obj "^1.1.0" -minimist@^1.1.1, minimist@^1.1.3, minimist@^1.2.0, minimist@^1.2.5: - version "1.2.5" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" - integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== +minimist@^1.1.3, minimist@^1.2.0, minimist@^1.2.5, minimist@^1.2.6: + version "1.2.8" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" + integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== minipass@^2.3.5, minipass@^2.6.0, minipass@^2.9.0: version "2.9.0" @@ -10265,17 +9555,22 @@ mkdirp-promise@^5.0.1: mkdirp "*" mkdirp@*, mkdirp@0.x, mkdirp@^0.5.1, mkdirp@^0.5.3, mkdirp@^0.5.5, mkdirp@~0.5.1: - version "0.5.5" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" - integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== + version "0.5.6" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.6.tgz#7def03d2432dcae4ba1d611445c48396062255f6" + integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw== dependencies: - minimist "^1.2.5" + minimist "^1.2.6" -mkdirp@1.0.4, mkdirp@1.x: +mkdirp@1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== +mobx@^6.10.1: + version "6.10.2" + resolved "https://registry.yarnpkg.com/mobx/-/mobx-6.10.2.tgz#96e123deef140750360ca9a5b02a8b91fbffd4d9" + integrity sha512-B1UGC3ieK3boCjnMEcZSwxqRDMdzX65H/8zOHbuTY8ZhvrIjTUoLRR2TP2bPqIgYRfb3+dUigu8yMZufNjn0LQ== + modify-values@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/modify-values/-/modify-values-1.0.1.tgz#b3939fa605546474e3e3e3c63d64bd43b4ee6022" @@ -10370,6 +9665,11 @@ nanomatch@^1.2.9: snapdragon "^0.8.1" to-regex "^3.0.1" +natural-compare-lite@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz#17b09581988979fddafe0201e931ba933c96cbb4" + integrity sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g== + natural-compare@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" @@ -10467,29 +9767,6 @@ node-libs-browser@^2.2.1: util "^0.11.0" vm-browserify "^1.0.1" -node-notifier@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/node-notifier/-/node-notifier-6.0.0.tgz#cea319e06baa16deec8ce5cd7f133c4a46b68e12" - integrity sha512-SVfQ/wMw+DesunOm5cKqr6yDcvUTDl/yc97ybGHMrteNEY6oekXpNpS3lZwgLlwz0FLgHoiW28ZpmBHUDg37cw== - dependencies: - growly "^1.3.0" - is-wsl "^2.1.1" - semver "^6.3.0" - shellwords "^0.1.1" - which "^1.3.1" - -node-notifier@^8.0.0: - version "8.0.2" - resolved "https://registry.yarnpkg.com/node-notifier/-/node-notifier-8.0.2.tgz#f3167a38ef0d2c8a866a83e318c1ba0efeb702c5" - integrity sha512-oJP/9NAdd9+x2Q+rfphB2RJCHjod70RcRLjosiPMMu5gjIfwVnOUGq2nbTjTUbmy0DJ/tFIVT30+Qe3nzl4TJg== - dependencies: - growly "^1.3.0" - is-wsl "^2.2.0" - semver "^7.3.2" - shellwords "^0.1.1" - uuid "^8.3.0" - which "^2.0.2" - node-releases@^2.0.6: version "2.0.8" resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.8.tgz#0f349cdc8fcfa39a92ac0be9bc48b7706292b9ae" @@ -10616,7 +9893,7 @@ npm-run-path@^2.0.0: dependencies: path-key "^2.0.0" -npm-run-path@^4.0.0: +npm-run-path@^4.0.0, npm-run-path@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== @@ -10643,10 +9920,10 @@ number-is-nan@^1.0.0: resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0= -nwsapi@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.0.tgz#204879a9e3d068ff2a55139c2c772780681a38b7" - integrity sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ== +nwsapi@^2.2.2: + version "2.2.2" + resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.2.tgz#e5418863e7905df67d51ec95938d67bf801f0bb0" + integrity sha512-90yv+6538zuvUMnN+zCr8LuV6bPFdq50304114vJYJ8RDyK8D5O9Phpbd6SZWgI7PwzmmfN1upeOJlvybDSgCw== oauth-sign@~0.9.0: version "0.9.0" @@ -10720,7 +9997,7 @@ object.fromentries@^2.0.5: define-properties "^1.1.3" es-abstract "^1.19.1" -object.getownpropertydescriptors@^2.0.3, object.getownpropertydescriptors@^2.1.1: +object.getownpropertydescriptors@^2.0.3: version "2.1.3" resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.3.tgz#b223cf38e17fefb97a63c10c91df72ccb386df9e" integrity sha512-VdDoCwvJI4QdC6ndjpqFmoL3/+HxffFBbcJzKi5hwLLqqx3mdbedRpfZDdK0SrOSauj8X4GzBvnDZl4vTN7dOw== @@ -10772,7 +10049,7 @@ onetime@^2.0.0: dependencies: mimic-fn "^1.0.0" -onetime@^5.1.0: +onetime@^5.1.0, onetime@^5.1.2: version "5.1.2" resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== @@ -10858,11 +10135,6 @@ outdent@^0.5.0: resolved "https://registry.yarnpkg.com/outdent/-/outdent-0.5.0.tgz#9e10982fdc41492bb473ad13840d22f9655be2ff" integrity sha512-/jHxFIzoMXdqPzTaCpFzAAWhpkSjZPF4Vsn6jAfNpmbH/ymsmd7Qc6VE9BGn0L6YMj6uwpQLxCECpus4ukKS9Q== -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" - integrity sha512-ycIL2+1V32th+8scbpTvyHNaHe02z0sjgh91XXjAk+ZeXoPN4Z46DVUnzdso0aX4KckKw0FNNFHdjZ2UsZvxiA== - p-filter@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/p-filter/-/p-filter-2.1.0.tgz#1b1472562ae7a0f742f0f3d3d3718ea66ff9c09c" @@ -10875,11 +10147,6 @@ p-finally@^1.0.0: resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4= -p-finally@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-2.0.1.tgz#bd6fcaa9c559a096b680806f4d657b3f0f240561" - integrity sha512-vpm09aKwq6H9phqRQzecoDpD8TmVyGw70qmWlyq5onxY7tqyTTFVvxMykxQSQKILBSFlbXpypIw2T1Ml7+DDtw== - p-limit@^1.1.0: version "1.3.0" resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" @@ -10894,7 +10161,7 @@ p-limit@^2.0.0, p-limit@^2.2.0: dependencies: p-try "^2.0.0" -p-limit@^3.0.2: +p-limit@^3.0.2, p-limit@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== @@ -11034,7 +10301,7 @@ parse-json@^4.0.0: error-ex "^1.3.1" json-parse-better-errors "^1.0.1" -parse-json@^5.0.0: +parse-json@^5.0.0, parse-json@^5.2.0: version "5.2.0" resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== @@ -11064,15 +10331,12 @@ parse-url@^6.0.0: parse-path "^4.0.0" protocols "^1.4.0" -parse5@5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/parse5/-/parse5-5.1.0.tgz#c59341c9723f414c452975564c7c00a68d58acd2" - integrity sha512-fxNG2sQjHvlVAYmzBZS9YlDp6PTSSDwa98vkD4QgVDDCAo84z5X1t5XyJQ62ImdLXx5NdIIfihey6xpum9/gRQ== - -parse5@6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b" - integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw== +parse5@^7.0.0, parse5@^7.1.1: + version "7.1.2" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-7.1.2.tgz#0736bebbfd77793823240a23b7fc5e010b7f8e32" + integrity sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw== + dependencies: + entities "^4.4.0" pascal-case@^3.1.1: version "3.1.2" @@ -11129,7 +10393,7 @@ path-key@^3.0.0, path-key@^3.1.0: resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== -path-parse@^1.0.6: +path-parse@^1.0.6, path-parse@^1.0.7: version "1.0.7" resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== @@ -11176,10 +10440,10 @@ picocolors@^1.0.0: resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== -picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.2, picomatch@^2.2.3: - version "2.3.0" - resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.0.tgz#f1f061de8f6a4bf022892e2d128234fb98302972" - integrity sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw== +picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.2, picomatch@^2.2.3, picomatch@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" + integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== pify@^2.0.0, pify@^2.3.0: version "2.3.0" @@ -11208,7 +10472,7 @@ pinkie@^2.0.0: resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA= -pirates@^4.0.1, pirates@^4.0.5: +pirates@^4.0.4, pirates@^4.0.5: version "4.0.5" resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.5.tgz#feec352ea5c3268fb23a37c702ab1699f35a5f3b" integrity sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ== @@ -11248,11 +10512,6 @@ please-upgrade-node@^3.2.0: dependencies: semver-compare "^1.0.0" -pn@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/pn/-/pn-1.1.0.tgz#e2f4cef0e219f463c179ab37463e4e1ecdccbafb" - integrity sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA== - posix-character-classes@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" @@ -11574,10 +10833,10 @@ prettier@^1.19.1: resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.19.1.tgz#f7d7f5ff8a9cd872a7be4ca142095956a60797cb" integrity sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew== -prettier@^2.0.5: - version "2.5.1" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.5.1.tgz#fff75fa9d519c54cf0fce328c1017d94546bc56a" - integrity sha512-vBZcPRUR5MZJwoyi3ZoyQlc1rXeEck8KgeC9AwwOn+exuxLxq5toTRDTSaVrXHxelDMHy9zlicw8u66yxoSUFg== +prettier@^2.8.4: + version "2.8.4" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.8.4.tgz#34dd2595629bfbb79d344ac4a91ff948694463c3" + integrity sha512-vIS4Rlc2FNh0BySk3Wkd6xmwxB0FpOndW5fisM5H8hsZSxU2VWVB5CWIkIjWvrHjIhxk2g3bfMKM87zNTrZddw== pretty-format@^25.2.1, pretty-format@^25.5.0: version "25.5.0" @@ -11608,6 +10867,15 @@ pretty-format@^27.0.2: ansi-styles "^5.0.0" react-is "^17.0.1" +pretty-format@^29.5.0: + version "29.5.0" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-29.5.0.tgz#283134e74f70e2e3e7229336de0e4fce94ccde5a" + integrity sha512-V2mGkI31qdttvTFX7Mt4efOqHXqJWMu4/r66Xh3Z3BwZaPfPJgp6/gbwoujRpPUtfEF6AUUWx3Jim3GCw5g/Qw== + dependencies: + "@jest/schemas" "^29.4.3" + ansi-styles "^5.0.0" + react-is "^18.0.0" + pretty-quick@3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/pretty-quick/-/pretty-quick-3.1.0.tgz#cb172e9086deb57455dea7c7e8f136cd0a4aef6c" @@ -11723,9 +10991,9 @@ pseudomap@^1.0.2: integrity sha1-8FKijacOYYkX7wqKw0wa5aaChrM= psl@^1.1.28, psl@^1.1.33: - version "1.8.0" - resolved "https://registry.yarnpkg.com/psl/-/psl-1.8.0.tgz#9326f8bcfb013adcc005fdff056acce020e51c24" - integrity sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ== + version "1.9.0" + resolved "https://registry.yarnpkg.com/psl/-/psl-1.9.0.tgz#d0df2a137f00794565fcaf3b2c00cd09f8d5a5a7" + integrity sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag== public-encrypt@^4.0.0: version "4.0.3" @@ -11774,6 +11042,11 @@ punycode@^2.1.0, punycode@^2.1.1: resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== +pure-rand@^6.0.0: + version "6.0.1" + resolved "https://registry.yarnpkg.com/pure-rand/-/pure-rand-6.0.1.tgz#31207dddd15d43f299fdcdb2f572df65030c19af" + integrity sha512-t+x1zEHDjBwkDGY5v5ApnZ/utcd4XYDiJsaQQoptTXgUXX95sDg1elCdJghzicm7n2mbCBJ3uYWr6M22SO19rg== + q@^1.1.2, q@^1.5.1: version "1.5.1" resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" @@ -11819,6 +11092,11 @@ querystring@0.2.0: resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" integrity sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA= +querystringify@^2.1.1: + version "2.2.0" + resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.2.0.tgz#3345941b4153cb9d082d8eee4cda2016a9aef7f6" + integrity sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ== + queue-microtask@^1.2.2: version "1.2.3" resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" @@ -11945,14 +11223,6 @@ read-pkg-up@^3.0.0: find-up "^2.0.0" read-pkg "^3.0.0" -read-pkg-up@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-4.0.0.tgz#1b221c6088ba7799601c808f91161c66e58f8978" - integrity sha512-6etQSH7nJGsK0RbG/2TeDzZFa8shjQ1um+SwQQ5cwKy0dhSXdOncEhb1CPpvQG4h7FyOV6EB6YlV0yJvZQNAkA== - dependencies: - find-up "^3.0.0" - read-pkg "^3.0.0" - read-pkg-up@^7.0.1: version "7.0.1" resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-7.0.1.tgz#f3a6135758459733ae2b95638056e1854e7ef507" @@ -12055,18 +11325,6 @@ readdirp@~3.6.0: dependencies: picomatch "^2.2.1" -realpath-native@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/realpath-native/-/realpath-native-1.1.0.tgz#2003294fea23fb0672f2476ebe22fcf498a2d65c" - integrity sha512-wlgPA6cCIIg9gKz0fgAPjnzh4yR/LnXovwuo9hvyGvx3h8nX4+/iLZplfUWasXpqD8BdnGnP5njOFjkUwPzvjA== - dependencies: - util.promisify "^1.0.0" - -realpath-native@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/realpath-native/-/realpath-native-2.0.0.tgz#7377ac429b6e1fd599dc38d08ed942d0d7beb866" - integrity sha512-v1SEYUOXXdbBZK8ZuNgO4TBjamPsiSgcFr0aP+tEKpQZK8vooEUqV6nm6Cv502mX4NF2EfsnVqtNAHG+/6Ur1Q== - recast@^0.20.3, recast@^0.23.1: version "0.23.1" resolved "https://registry.yarnpkg.com/recast/-/recast-0.23.1.tgz#ee415a5561d2f99f02318ea8db81ad3a2267a6ff" @@ -12175,7 +11433,7 @@ regexpp@^2.0.1: resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-2.0.1.tgz#8d19d31cf632482b589049f8281f93dbcba4d07f" integrity sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw== -regexpp@^3.0.0, regexpp@^3.1.0: +regexpp@^3.0.0, regexpp@^3.1.0, regexpp@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2" integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== @@ -12226,22 +11484,6 @@ repeating@^2.0.0: dependencies: is-finite "^1.0.0" -request-promise-core@1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/request-promise-core/-/request-promise-core-1.1.4.tgz#3eedd4223208d419867b78ce815167d10593a22f" - integrity sha512-TTbAfBBRdWD7aNNOoVOBH4pN/KigV6LyapYNNlAPA8JwbovRti1E88m3sYAwsLi5ryhPKsE9APwnjFTgdUjTpw== - dependencies: - lodash "^4.17.19" - -request-promise-native@^1.0.7: - version "1.0.9" - resolved "https://registry.yarnpkg.com/request-promise-native/-/request-promise-native-1.0.9.tgz#e407120526a5efdc9a39b28a5679bf47b9d9dc28" - integrity sha512-wcW+sIUiWnKgNY0dqCpOZkUbF/I+YPi+f09JZIDa39Ec+q82CpSYniDp+ISgTTbKmnpJWASeJBPZmoxH84wt3g== - dependencies: - request-promise-core "1.1.4" - stealthy-require "^1.1.1" - tough-cookie "^2.3.3" - request@^2.88.0, request@^2.88.2: version "2.88.2" resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3" @@ -12283,6 +11525,11 @@ require-main-filename@^2.0.0: resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== +requires-port@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" + integrity sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ== + resolve-cwd@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-2.0.0.tgz#00a9f7387556e27038eae232caa372a6a59b665a" @@ -12317,10 +11564,10 @@ resolve-url@^0.2.1: resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= -resolve@1.1.7: - version "1.1.7" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" - integrity sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs= +resolve.exports@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/resolve.exports/-/resolve.exports-2.0.1.tgz#cee884cd4e3f355660e501fa3276b27d7ffe5a20" + integrity sha512-OEJWVeimw8mgQuj3HfkNl4KqRevH7lzeQNaWRPfx0PPse7Jk6ozcsG4FKVgtzDsC1KUF+YlTHh17NcgHOPykLw== resolve@1.17.0: version "1.17.0" @@ -12329,13 +11576,14 @@ 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.18.1, resolve@^1.19.0, resolve@^1.20.0: - version "1.20.0" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.20.0.tgz#629a013fb3f70755d6f0b7935cc1c2c5378b1975" - integrity sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A== +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.19.0, resolve@^1.20.0: + version "1.22.1" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.1.tgz#27cb2ebb53f91abb49470a928bba7558066ac177" + integrity sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw== dependencies: - is-core-module "^2.2.0" - path-parse "^1.0.6" + is-core-module "^2.9.0" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" resolve@^2.0.0-next.3: version "2.0.0-next.3" @@ -12395,7 +11643,7 @@ rimraf@2.6.3, rimraf@^2.5.4, rimraf@^2.6.2, rimraf@^2.6.3, rimraf@~2.6.2: dependencies: glob "^7.1.3" -rimraf@^3.0.0, rimraf@^3.0.2: +rimraf@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== @@ -12463,11 +11711,6 @@ rollup@^2.60.2: 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" - integrity sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA== - run-async@^2.2.0, run-async@^2.4.0: version "2.4.1" resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455" @@ -12530,37 +11773,15 @@ safe-regex@^1.1.0: resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== -sane@^4.0.3: - version "4.1.0" - resolved "https://registry.yarnpkg.com/sane/-/sane-4.1.0.tgz#ed881fd922733a6c461bc189dc2b6c006f3ffded" - integrity sha512-hhbzAgTIX8O7SHfp2c8/kREfEn4qO/9q8C9beyY6+tvZ87EpoZ3i1RIEvp27YBswnNbY9mWd6paKVmKbAgLfZA== - dependencies: - "@cnakazawa/watch" "^1.0.3" - anymatch "^2.0.0" - capture-exit "^2.0.0" - exec-sh "^0.3.2" - execa "^1.0.0" - fb-watchman "^2.0.0" - micromatch "^3.1.4" - minimist "^1.1.1" - walker "~1.0.5" - sax@~1.2.1: version "1.2.4" resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== -saxes@^3.1.9: - version "3.1.11" - resolved "https://registry.yarnpkg.com/saxes/-/saxes-3.1.11.tgz#d59d1fd332ec92ad98a2e0b2ee644702384b1c5b" - integrity sha512-Ydydq3zC+WYDJK1+gRxRapLIED9PWeSuuS41wqyoRmzvhhh9nc+QQrVMKJYzJFULazeGhzSV0QleN2wD3boh2g== - dependencies: - xmlchars "^2.1.1" - -saxes@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/saxes/-/saxes-5.0.1.tgz#eebab953fa3b7608dbe94e5dadb15c888fa6696d" - integrity sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw== +saxes@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/saxes/-/saxes-6.0.0.tgz#fe5b4a4768df4f14a201b1ba6a65c1f3d9988cc5" + integrity sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA== dependencies: xmlchars "^2.2.0" @@ -12612,10 +11833,10 @@ semver@7.0.0: resolved "https://registry.yarnpkg.com/semver/-/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e" integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A== -semver@7.x, semver@^7.1.1, semver@^7.2.1, semver@^7.3.2, semver@^7.3.4, semver@^7.3.5: - version "7.3.5" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.5.tgz#0b621c879348d8998e4b0e4be94b3f12e6018ef7" - integrity sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ== +semver@7.x, semver@^7.1.1, semver@^7.2.1, semver@^7.3.2, semver@^7.3.4, semver@^7.3.5, semver@^7.3.7: + version "7.3.8" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.8.tgz#07a78feafb3f7b32347d725e33de7e2a2df67798" + integrity sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A== dependencies: lru-cache "^6.0.0" @@ -12699,11 +11920,6 @@ shelljs@^0.8.3: interpret "^1.0.0" rechoir "^0.6.2" -shellwords@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/shellwords/-/shellwords-0.1.1.tgz#d6b9181c1a48d397324c84871efbcfc73fc0654b" - integrity sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww== - side-channel@^1.0.3, side-channel@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" @@ -12713,10 +11929,10 @@ side-channel@^1.0.3, side-channel@^1.0.4: get-intrinsic "^1.0.2" object-inspect "^1.9.0" -signal-exit@^3.0.0, signal-exit@^3.0.2: - version "3.0.6" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.6.tgz#24e630c4b0f03fea446a2bd299e62b4a6ca8d0af" - integrity sha512-sDl4qMFpijcGw22U5w63KmD3cZJfBuFlVNbVMKje2keoKML7X2UzWbc4XrmEbDwg0NXJc3yv4/ox7b+JWb57kQ== +signal-exit@^3.0.0, signal-exit@^3.0.2, signal-exit@^3.0.3, signal-exit@^3.0.7: + version "3.0.7" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" + integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== sisteransi@^1.0.5: version "1.0.5" @@ -12870,6 +12086,14 @@ source-map-resolve@^0.6.0: atob "^2.1.2" decode-uri-component "^0.2.0" +source-map-support@0.5.13: + version "0.5.13" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.13.tgz#31b24a9c2e73c2de85066c0feb7d44767ed52932" + integrity sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w== + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + source-map-support@^0.4.15: version "0.4.18" resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.18.tgz#0286a6de8be42641338594e97ccea75f0a2c585f" @@ -12877,7 +12101,7 @@ source-map-support@^0.4.15: dependencies: source-map "^0.5.6" -source-map-support@^0.5.16, source-map-support@^0.5.6, source-map-support@~0.5.12: +source-map-support@^0.5.16, source-map-support@~0.5.12: 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== @@ -12900,11 +12124,6 @@ source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1: resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== -source-map@^0.7.3: - version "0.7.3" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383" - integrity sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ== - sourcemap-codec@^1.4.4: version "1.4.8" resolved "https://registry.yarnpkg.com/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz#ea804bd94857402e6992d05a38ef1ae35a9ab4c4" @@ -13011,10 +12230,10 @@ stack-utils@^1.0.1: dependencies: escape-string-regexp "^2.0.0" -stack-utils@^2.0.2: - version "2.0.5" - resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-2.0.5.tgz#d25265fca995154659dbbfba3b49254778d2fdd5" - integrity sha512-xrQcmYhOsn/1kX+Vraq+7j4oE2j/6BFscZ0etmYg81xuM8Gq0022Pxb8+IqgOFUIaxHs0KaSb7T1+OegiNrNFA== +stack-utils@^2.0.3: + version "2.0.6" + resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-2.0.6.tgz#aaf0748169c02fc33c8232abccf933f54a1cc34f" + integrity sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ== dependencies: escape-string-regexp "^2.0.0" @@ -13026,11 +12245,6 @@ static-extend@^0.1.1: define-property "^0.2.5" object-copy "^0.1.0" -stealthy-require@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/stealthy-require/-/stealthy-require-1.1.1.tgz#35b09875b4ff49f26a777e509b3090a3226bf24b" - integrity sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks= - stream-browserify@^2.0.1: version "2.0.2" resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.2.tgz#87521d38a44aa7ee91ce1cd2a47df0cb49dd660b" @@ -13305,20 +12519,24 @@ supports-color@^6.1.0: dependencies: has-flag "^3.0.0" -supports-color@^7.0.0, supports-color@^7.1.0: +supports-color@^7.1.0: version "7.2.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== dependencies: has-flag "^4.0.0" -supports-hyperlinks@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz#4f77b42488765891774b70c79babd87f9bd594bb" - integrity sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ== +supports-color@^8.0.0: + version "8.1.1" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" + integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== dependencies: has-flag "^4.0.0" - supports-color "^7.0.0" + +supports-preserve-symlinks-flag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" + integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== svgo@^0.7.0: version "0.7.2" @@ -13333,7 +12551,7 @@ svgo@^0.7.0: sax "~1.2.1" whet.extend "~0.9.9" -symbol-tree@^3.2.2, symbol-tree@^3.2.4: +symbol-tree@^3.2.4: version "3.2.4" resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2" integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw== @@ -13446,14 +12664,6 @@ term-size@^2.1.0: resolved "https://registry.yarnpkg.com/term-size/-/term-size-2.2.1.tgz#2a6a54840432c2fb6320fea0f415531e90189f54" integrity sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg== -terminal-link@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/terminal-link/-/terminal-link-2.1.1.tgz#14a64a27ab3c0df933ea546fba55f2d078edc994" - integrity sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ== - dependencies: - ansi-escapes "^4.2.1" - supports-hyperlinks "^2.0.0" - terser-webpack-plugin@^1.4.3: version "1.4.5" resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-1.4.5.tgz#a217aefaea330e734ffacb6120ec1fa312d6040b" @@ -13478,16 +12688,6 @@ terser@^4.1.2, terser@^4.6.2: source-map "~0.6.1" source-map-support "~0.5.12" -test-exclude@^5.2.3: - version "5.2.3" - resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-5.2.3.tgz#c3d3e1e311eb7ee405e092dac10aefd09091eac0" - integrity sha512-M+oxtseCFO3EDtAaGH7iiej3CBkzXqFMbzqYAACdzKui4eZA+pq3tZEwChvOdNfa7xxy8BfbmgJSIr43cC/+2g== - dependencies: - glob "^7.1.3" - minimatch "^3.0.4" - read-pkg-up "^4.0.0" - require-main-filename "^2.0.0" - test-exclude@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-6.0.0.tgz#04a8698661d805ea6fa293b6cb9e63ac044ef15e" @@ -13521,11 +12721,6 @@ thenify-all@^1.0.0: dependencies: any-promise "^1.0.0" -throat@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/throat/-/throat-5.0.0.tgz#c5199235803aad18754a667d659b5e72ce16764b" - integrity sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA== - through2@^2.0.0, through2@^2.0.2: version "2.0.5" resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" @@ -13628,32 +12823,24 @@ to-regex@^3.0.1, to-regex@^3.0.2: regex-not "^1.0.2" safe-regex "^1.1.0" -tough-cookie@^2.3.3, tough-cookie@~2.5.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2" - integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g== +tough-cookie@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-4.1.2.tgz#e53e84b85f24e0b65dd526f46628db6c85f6b874" + integrity sha512-G9fqXWoYFZgTc2z8Q5zaHy/vJMjm+WV0AkAeHxVCQiEB1b+dGvWzFW6QV07cY5jQ5gRkeid2qIkzkxUnmoQZUQ== dependencies: - psl "^1.1.28" + psl "^1.1.33" punycode "^2.1.1" + universalify "^0.2.0" + url-parse "^1.5.3" -tough-cookie@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-3.0.1.tgz#9df4f57e739c26930a018184887f4adb7dca73b2" - integrity sha512-yQyJ0u4pZsv9D4clxO69OEjLWYw+jbgspjTue4lTQZLfV0c5l1VmK2y1JK8E9ahdpltPOaAThPcp5nKPUgSnsg== +tough-cookie@~2.5.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2" + integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g== dependencies: - ip-regex "^2.1.0" psl "^1.1.28" punycode "^2.1.1" -tough-cookie@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-4.0.0.tgz#d822234eeca882f991f0f908824ad2622ddbece4" - integrity sha512-tHdtEpQCMrc1YLrMaqXXcj6AxhYi/xgit6mZu1+EDWUn+qhUf8wMQoFIy9NXuq23zAwtcB0t/MjACGR18pcRbg== - dependencies: - psl "^1.1.33" - punycode "^2.1.1" - universalify "^0.1.2" - tr46@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/tr46/-/tr46-1.0.1.tgz#a8b13fd6bfd2489519674ccde55ba3693b706d09" @@ -13661,10 +12848,10 @@ tr46@^1.0.1: dependencies: punycode "^2.1.0" -tr46@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/tr46/-/tr46-2.1.0.tgz#fa87aa81ca5d5941da8cbf1f9b749dc969a4e240" - integrity sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw== +tr46@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-3.0.0.tgz#555c4e297a950617e8eeddef633c87d4d9d6cbf9" + integrity sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA== dependencies: punycode "^2.1.1" @@ -13693,23 +12880,6 @@ trim-right@^1.0.1: resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003" integrity sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM= -ts-jest@26.4.1: - version "26.4.1" - resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-26.4.1.tgz#08ec0d3fc2c3a39e4a46eae5610b69fafa6babd0" - integrity sha512-F4aFq01aS6mnAAa0DljNmKr/Kk9y4HVZ1m6/rtJ0ED56cuxINGq3Q9eVAh+z5vcYKe5qnTMvv90vE8vUMFxomg== - dependencies: - "@types/jest" "26.x" - bs-logger "0.x" - buffer-from "1.x" - fast-json-stable-stringify "2.x" - jest-util "^26.1.0" - json5 "2.x" - lodash.memoize "4.x" - make-error "1.x" - mkdirp "1.x" - semver "7.x" - yargs-parser "20.x" - ts-jest@^25.3.1: version "25.5.1" resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-25.5.1.tgz#2913afd08f28385d54f2f4e828be4d261f4337c7" @@ -13726,6 +12896,20 @@ ts-jest@^25.3.1: semver "6.x" yargs-parser "18.x" +ts-jest@^29.0.5: + version "29.0.5" + resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-29.0.5.tgz#c5557dcec8fe434fcb8b70c3e21c6b143bfce066" + integrity sha512-PL3UciSgIpQ7f6XjVOmbi96vmDHUqAyqDr8YxzopDqX3kfgYtX1cuNeBjP+L9sFXi6nzsGGA6R3fP3DDDJyrxA== + dependencies: + bs-logger "0.x" + fast-json-stable-stringify "2.x" + jest-util "^29.0.0" + json5 "^2.2.3" + lodash.memoize "4.x" + make-error "1.x" + semver "7.x" + yargs-parser "^21.0.1" + tsconfig-paths@^3.11.0: version "3.12.0" resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.12.0.tgz#19769aca6ee8f6a1a341e38c8fa45dd9fb18899b" @@ -13903,22 +13087,15 @@ type-fest@^0.8.1: resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== -typedarray-to-buffer@^3.1.5: - version "3.1.5" - resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080" - integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q== - dependencies: - is-typedarray "^1.0.0" - typedarray@^0.0.6: version "0.0.6" resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= -typescript@^3.7.3, typescript@^4.0.2: - version "4.5.4" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.5.4.tgz#a17d3a0263bf5c8723b9c52f43c5084edf13c2e8" - integrity sha512-VgYs2A2QIRuGphtzFV7aQJduJ2gyfTljngLzjpfW9FoYZF6xuw1W0vW9ghCKLfcWrCFxK81CSGRAvS1pn4fIUg== +typescript@^3.7.3, typescript@^5.0.2: + version "5.0.2" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.0.2.tgz#891e1a90c5189d8506af64b9ef929fca99ba1ee5" + integrity sha512-wVORMBGO/FAs/++blGNeAVdbNKtIh1rbBL2EyQ1+J9lClJ93KiiKe8PmFIVdXhHcyv44SL9oglmfeSsndo0jRw== uglify-js@^3.1.4: version "3.14.5" @@ -14021,11 +13198,16 @@ universal-user-agent@^6.0.0: resolved "https://registry.yarnpkg.com/universal-user-agent/-/universal-user-agent-6.0.0.tgz#3381f8503b251c0d9cd21bc1de939ec9df5480ee" integrity sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w== -universalify@^0.1.0, universalify@^0.1.2: +universalify@^0.1.0: version "0.1.2" resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== +universalify@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.2.0.tgz#6451760566fa857534745ab1dde952d1b1761be0" + integrity sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg== + universalify@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/universalify/-/universalify-1.0.0.tgz#b61a1da173e8435b2fe3c67d29b9adf8594bd16d" @@ -14077,6 +13259,14 @@ url-loader@^0.5.9: loader-utils "^1.0.2" mime "1.3.x" +url-parse@^1.5.3: + version "1.5.10" + resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.5.10.tgz#9d3c2f736c1d75dd3bd2be507dcc111f1e2ea9c1" + integrity sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ== + dependencies: + querystringify "^2.1.1" + requires-port "^1.0.0" + url@^0.11.0: version "0.11.0" resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1" @@ -14107,17 +13297,6 @@ util-promisify@^2.1.0: dependencies: object.getownpropertydescriptors "^2.0.3" -util.promisify@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.1.1.tgz#77832f57ced2c9478174149cae9b96e9918cd54b" - integrity sha512-/s3UsZUrIfa6xDhr7zZhnE9SLQ5RIXyYfiVnMMyMDzOc8WhWN4Nbh36H842OyurKbCDAesZOJaVyvmSl6fhGQw== - dependencies: - call-bind "^1.0.0" - define-properties "^1.1.3" - for-each "^0.3.3" - has-symbols "^1.0.1" - object.getownpropertydescriptors "^2.1.1" - util@0.10.3: version "0.10.3" resolved "https://registry.yarnpkg.com/util/-/util-0.10.3.tgz#7afb1afe50805246489e3db7fe0ed379336ac0f9" @@ -14148,33 +13327,19 @@ uuid@^3.0.1, uuid@^3.3.2: resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== -uuid@^8.3.0: - version "8.3.2" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" - integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== - v8-compile-cache@^2.0.3: version "2.3.0" resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz#2de19618c66dc247dcfb6f99338035d8245a2cee" integrity sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA== -v8-to-istanbul@^4.1.3: - version "4.1.4" - resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-4.1.4.tgz#b97936f21c0e2d9996d4985e5c5156e9d4e49cd6" - integrity sha512-Rw6vJHj1mbdK8edjR7+zuJrpDtKIgNdAvTSAcpYfgMIw+u2dPDntD3dgN4XQFLU2/fvFQdzj+EeSGfd/jnY5fQ== - dependencies: - "@types/istanbul-lib-coverage" "^2.0.1" - convert-source-map "^1.6.0" - source-map "^0.7.3" - -v8-to-istanbul@^7.0.0: - version "7.1.2" - resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-7.1.2.tgz#30898d1a7fa0c84d225a2c1434fb958f290883c1" - integrity sha512-TxNb7YEUwkLXCQYeudi6lgQ/SZrzNO4kMdlqVxaZPUIUjCv6iSSypUQX70kNBSERpQ8fk48+d61FXk+tgqcWow== +v8-to-istanbul@^9.0.1: + version "9.1.0" + resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-9.1.0.tgz#1b83ed4e397f58c85c266a570fc2558b5feb9265" + integrity sha512-6z3GW9x8G1gd+JIIgQQQxXuiJtCXeAjp6RaPEPLv62mH3iPHPxV6W3robxtCzNErRo6ZwTmzWhsbNvjyEBKzKA== dependencies: + "@jridgewell/trace-mapping" "^0.3.12" "@types/istanbul-lib-coverage" "^2.0.1" convert-source-map "^1.6.0" - source-map "^0.7.3" validate-npm-package-license@^3.0.1, validate-npm-package-license@^3.0.3: version "3.0.4" @@ -14210,30 +13375,14 @@ vm-browserify@^1.0.1: resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.2.tgz#78641c488b8e6ca91a75f511e7a3b32a86e5dda0" integrity sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ== -w3c-hr-time@^1.0.1, w3c-hr-time@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz#0a89cdf5cc15822df9c360543676963e0cc308cd" - integrity sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ== - dependencies: - browser-process-hrtime "^1.0.0" - -w3c-xmlserializer@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/w3c-xmlserializer/-/w3c-xmlserializer-1.1.2.tgz#30485ca7d70a6fd052420a3d12fd90e6339ce794" - integrity sha512-p10l/ayESzrBMYWRID6xbuCKh2Fp77+sA0doRuGn4tTIMrrZVeqfpKjXHY+oDh3K4nLdPgNwMTVP6Vp4pvqbNg== - dependencies: - domexception "^1.0.1" - webidl-conversions "^4.0.2" - xml-name-validator "^3.0.0" - -w3c-xmlserializer@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz#3e7104a05b75146cc60f564380b7f683acf1020a" - integrity sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA== +w3c-xmlserializer@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/w3c-xmlserializer/-/w3c-xmlserializer-4.0.0.tgz#aebdc84920d806222936e3cdce408e32488a3073" + integrity sha512-d+BFHzbiCx6zGfz0HyQ6Rg69w9k19nviJspaj4yNscGjrHu94sVP+aRm75yEbCh+r2/yR+7q6hux9LVtbuTGBw== dependencies: - xml-name-validator "^3.0.0" + xml-name-validator "^4.0.0" -walker@^1.0.7, walker@~1.0.5: +walker@^1.0.8: version "1.0.8" resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.8.tgz#bd498db477afe573dc04185f011d3ab8a8d7653f" integrity sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ== @@ -14275,15 +13424,10 @@ webidl-conversions@^4.0.2: resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad" integrity sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg== -webidl-conversions@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-5.0.0.tgz#ae59c8a00b121543a2acc65c0434f57b0fc11aff" - integrity sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA== - -webidl-conversions@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-6.1.0.tgz#9111b4d7ea80acd40f5270d666621afa78b69514" - integrity sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w== +webidl-conversions@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-7.0.0.tgz#256b4e1882be7debbf01d05f0aa2039778ea080a" + integrity sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g== webpack-sources@^1.0.1, webpack-sources@^1.4.0, webpack-sources@^1.4.1: version "1.4.3" @@ -14322,17 +13466,25 @@ webpack@^4: watchpack "^1.7.4" webpack-sources "^1.4.1" -whatwg-encoding@^1.0.1, whatwg-encoding@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz#5abacf777c32166a51d085d6b4f3e7d27113ddb0" - integrity sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw== +whatwg-encoding@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz#e7635f597fd87020858626805a2729fa7698ac53" + integrity sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg== dependencies: - iconv-lite "0.4.24" + iconv-lite "0.6.3" -whatwg-mimetype@^2.2.0, whatwg-mimetype@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz#3d4b1e0312d2079879f826aff18dbeeca5960fbf" - integrity sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g== +whatwg-mimetype@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz#5fa1a7623867ff1af6ca3dc72ad6b8a4208beba7" + integrity sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q== + +whatwg-url@^11.0.0: + version "11.0.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-11.0.0.tgz#0a849eebb5faf2119b901bb76fd795c2848d4018" + integrity sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ== + dependencies: + tr46 "^3.0.0" + webidl-conversions "^7.0.0" whatwg-url@^5.0.0: version "5.0.0" @@ -14351,15 +13503,6 @@ whatwg-url@^7.0.0: tr46 "^1.0.1" webidl-conversions "^4.0.2" -whatwg-url@^8.0.0, whatwg-url@^8.5.0: - version "8.7.0" - resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-8.7.0.tgz#656a78e510ff8f3937bc0bcbe9f5c0ac35941b77" - integrity sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg== - dependencies: - lodash "^4.7.0" - tr46 "^2.1.0" - webidl-conversions "^6.1.0" - whet.extend@~0.9.9: version "0.9.9" resolved "https://registry.yarnpkg.com/whet.extend/-/whet.extend-0.9.9.tgz#f877d5bf648c97e5aa542fadc16d6a259b9c11a1" @@ -14423,7 +13566,7 @@ which@^1.2.9, which@^1.3.1: dependencies: isexe "^2.0.0" -which@^2.0.1, which@^2.0.2: +which@^2.0.1: version "2.0.2" resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== @@ -14508,15 +13651,6 @@ wrappy@1: resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= -write-file-atomic@2.4.1: - version "2.4.1" - resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-2.4.1.tgz#d0b05463c188ae804396fd5ab2a370062af87529" - integrity sha512-TGHFeZEZMnv+gBFRfjAcxL5bPHrsGKtnb4qsFAws7/vlh+QfwAaySIw4AXP9ZskTTh5GWu3FLuJhsWVdiJPGvg== - dependencies: - graceful-fs "^4.1.11" - imurmurhash "^0.1.4" - signal-exit "^3.0.2" - write-file-atomic@^2.0.0, write-file-atomic@^2.3.0, write-file-atomic@^2.4.2: version "2.4.3" resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-2.4.3.tgz#1fd2e9ae1df3e75b8d8c367443c692d4ca81f481" @@ -14526,15 +13660,13 @@ write-file-atomic@^2.0.0, write-file-atomic@^2.3.0, write-file-atomic@^2.4.2: imurmurhash "^0.1.4" signal-exit "^3.0.2" -write-file-atomic@^3.0.0: - version "3.0.3" - resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-3.0.3.tgz#56bd5c5a5c70481cd19c571bd39ab965a5de56e8" - integrity sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q== +write-file-atomic@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-4.0.2.tgz#a9df01ae5b77858a027fd2e80768ee433555fcfd" + integrity sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg== dependencies: imurmurhash "^0.1.4" - is-typedarray "^1.0.0" - signal-exit "^3.0.2" - typedarray-to-buffer "^3.1.5" + signal-exit "^3.0.7" write-json-file@^2.2.0: version "2.3.0" @@ -14575,17 +13707,17 @@ write@1.0.3: dependencies: mkdirp "^0.5.1" -ws@^7.0.0, ws@^7.4.6: - version "7.5.6" - resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.6.tgz#e59fc509fb15ddfb65487ee9765c5a51dec5fe7b" - integrity sha512-6GLgCqo2cy2A2rjCNFlxQS6ZljG/coZfZXclldI8FB/1G3CCI36Zd8xy2HrFVACi8tfk5XrgLQEk+P0Tnz9UcA== +ws@^8.11.0: + version "8.13.0" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.13.0.tgz#9a9fb92f93cf41512a0735c8f4dd09b8a1211cd0" + integrity sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA== -xml-name-validator@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a" - integrity sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw== +xml-name-validator@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-4.0.0.tgz#79a006e2e63149a8600f15430f0a4725d1524835" + integrity sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw== -xmlchars@^2.1.1, xmlchars@^2.2.0: +xmlchars@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb" integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw== @@ -14600,6 +13732,11 @@ y18n@^4.0.0: resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.3.tgz#b5f259c82cd6e336921efd7bfd8bf560de9eeedf" integrity sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ== +y18n@^5.0.5: + version "5.0.8" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" + integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== + yallist@^2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" @@ -14628,11 +13765,6 @@ yargs-parser@18.x, yargs-parser@^18.1.2, yargs-parser@^18.1.3: camelcase "^5.0.0" decamelize "^1.2.0" -yargs-parser@20.x, yargs-parser@^20.2.3: - version "20.2.9" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" - integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== - yargs-parser@^15.0.1: version "15.0.3" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-15.0.3.tgz#316e263d5febe8b38eef61ac092b33dfcc9b1115" @@ -14641,6 +13773,16 @@ yargs-parser@^15.0.1: camelcase "^5.0.0" decamelize "^1.2.0" +yargs-parser@^20.2.3: + version "20.2.9" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" + integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== + +yargs-parser@^21.0.1, yargs-parser@^21.1.1: + version "21.1.1" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35" + integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== + yargs@^14.2.2: version "14.2.3" resolved "https://registry.yarnpkg.com/yargs/-/yargs-14.2.3.tgz#1a1c3edced1afb2a2fea33604bc6d1d8d688a414" @@ -14658,7 +13800,7 @@ yargs@^14.2.2: y18n "^4.0.0" yargs-parser "^15.0.1" -yargs@^15.1.0, yargs@^15.3.1, yargs@^15.4.1: +yargs@^15.1.0: version "15.4.1" resolved "https://registry.yarnpkg.com/yargs/-/yargs-15.4.1.tgz#0d87a16de01aee9d8bec2bfbf74f67851730f4f8" integrity sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A== @@ -14675,6 +13817,19 @@ yargs@^15.1.0, yargs@^15.3.1, yargs@^15.4.1: y18n "^4.0.0" yargs-parser "^18.1.2" +yargs@^17.3.1: + version "17.7.1" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.7.1.tgz#34a77645201d1a8fc5213ace787c220eabbd0967" + integrity sha512-cwiTb08Xuv5fqF4AovYacTFNxk62th7LKJ6BL9IGUpTJrWoU7/7WdQGTP2SjKf1dUNBGzDd28p/Yfs/GI6JrLw== + dependencies: + cliui "^8.0.1" + escalade "^3.1.1" + get-caller-file "^2.0.5" + require-directory "^2.1.1" + string-width "^4.2.3" + y18n "^5.0.5" + yargs-parser "^21.1.1" + yocto-queue@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b"