├── .eslintrc.js
├── .github
└── workflows
│ ├── ci.yml
│ └── publish.yml
├── .gitignore
├── .nvmrc
├── .prettierignore
├── CHANGELOG.md
├── CONTRIBUTING.md
├── LICENSE
├── README.md
├── babel.config.js
├── codecov.yml
├── example
├── dist
│ └── index.html
├── package.json
├── src
│ └── index.tsx
├── tsconfig.json
├── webpack.config.js
└── yarn.lock
├── jest.config.js
├── package.json
├── public.package.json
├── src
├── index.tsx
└── test.tsx
├── tsconfig.json
└── yarn.lock
/.eslintrc.js:
--------------------------------------------------------------------------------
1 | // eslint-disable-next-line no-undef
2 | module.exports = {
3 | root: true,
4 | ignorePatterns: ["dist", "example"],
5 | plugins: ["@typescript-eslint"],
6 | extends: [
7 | "eslint:recommended",
8 | "plugin:@typescript-eslint/recommended",
9 | "plugin:react-hooks/recommended",
10 | "prettier",
11 | ],
12 | overrides: [
13 | {
14 | files: ["*.ts{,x}"],
15 | parser: "@typescript-eslint/parser",
16 | parserOptions: {
17 | // eslint-disable-next-line no-undef
18 | tsconfigRootDir: __dirname,
19 | project: ["./tsconfig.json"],
20 | },
21 | extends: [
22 | "plugin:@typescript-eslint/recommended-requiring-type-checking",
23 | ],
24 | rules: {
25 | "@typescript-eslint/prefer-nullish-coalescing": "error",
26 | "@typescript-eslint/no-unnecessary-condition": "error",
27 | "@typescript-eslint/prefer-optional-chain": "error",
28 | },
29 | },
30 | ],
31 | };
32 |
--------------------------------------------------------------------------------
/.github/workflows/ci.yml:
--------------------------------------------------------------------------------
1 | name: CI
2 | on:
3 | push:
4 | branches:
5 | - main
6 | pull_request:
7 | jobs:
8 | ci:
9 | name: "Lint and Test"
10 | runs-on: ubuntu-latest
11 | steps:
12 | - uses: actions/checkout@v2
13 | - uses: actions/setup-node@v2
14 | with:
15 | node-version: "16.x"
16 | cache: "yarn"
17 | - run: yarn
18 | - run: yarn package:build
19 | - run: yarn lint
20 | - run: yarn test:ci && yarn codecov --token=$CODECOV_TOKEN
21 | env:
22 | CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
23 |
--------------------------------------------------------------------------------
/.github/workflows/publish.yml:
--------------------------------------------------------------------------------
1 | name: Publish NPM Package
2 | on:
3 | release:
4 | types: [created]
5 | jobs:
6 | build:
7 | runs-on: ubuntu-latest
8 | steps:
9 | - uses: actions/checkout@v2
10 | - uses: actions/setup-node@v2
11 | with:
12 | node-version: "16.x"
13 | cache: "yarn"
14 | registry-url: "https://registry.npmjs.org"
15 | - run: yarn package:build
16 | - run: cd dist && npm publish
17 | env:
18 | NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
19 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules
2 | dist/*
3 | example/dist/*
4 | !example/dist/index.html
5 |
6 |
--------------------------------------------------------------------------------
/.nvmrc:
--------------------------------------------------------------------------------
1 | 20.9.0
2 |
--------------------------------------------------------------------------------
/.prettierignore:
--------------------------------------------------------------------------------
1 | dist
2 |
3 |
--------------------------------------------------------------------------------
/CHANGELOG.md:
--------------------------------------------------------------------------------
1 | # Changelog
2 |
3 | ## v3.0.0
4 |
5 | ```js
6 | const [error] = useErrorBoundary();
7 | ```
8 |
9 | - The `error` wrapping that was introduced in v2 has been removed. `error` will now be the error that was caught without any wrapping for thrown primitives. The types have been updated to `unknown` to reflect that thrown JavaScript errors may be any type not just instances of `Error`.
10 |
11 | - `withErrorBoundary` now propagates the wrapped component display name for improved debugging with React dev tools. It will display as `WithErrorBoundary(${Component.displayName})`.
12 |
13 | ## v2.0.1
14 |
15 | Publish CommonJS and ESM.
16 |
17 | ## v2.0.0
18 |
19 | ```js
20 | const [error] = useErrorBoundary();
21 | ```
22 |
23 | `error` is now the error that was caught or `undefined` if nothing errored. Previously `error` was a boolean value. Providing access to the error rather
24 | than a boolean makes it more ergonomic to render UI in response to the caught error. Special thanks to @davwheat for the contribution.
25 |
26 | If something other than an instance of `Error` is thrown, it will be wrapped in an `Error` object by calling `new Error()` on the thrown value. A warning will log when this occurs: while you _may_ throw any value in JavaScript, you _should_ only throw instances of Error. This ensures a stack trace is collected is that all errors conform to a unified interface. This wrapping may be removed in a future v3 release of this library.
27 |
28 | ## v1.0.2
29 |
30 | Internal: remove unnecessary files when publishing to npm registry.
31 |
32 | ## v1.0.1
33 |
34 | Internal: fix CI publishes.
35 |
36 | ## v1.0.0
37 |
38 | No API changes. This library will now follow [semantic versioning](https://docs.npmjs.com/about-semantic-versioning).
39 |
--------------------------------------------------------------------------------
/CONTRIBUTING.md:
--------------------------------------------------------------------------------
1 | # Contributing 👫
2 |
3 | Thanks for helping make this project better!
4 |
5 | ## Report an Issue 🐛
6 |
7 | If you find a bug or want to discuss a new feature, please [create a new issue](https://github.com/tatethurston/react-use-error-boundary/issues). If you'd prefer to keep things private, feel free to [email me](mailto:tatethurston@gmail.com?subject=react-use-error-boundary).
8 |
9 | ## Contributing Code with Pull Requests 🎁
10 |
11 | Please create a [pull request](https://github.com/tatethurston/react-use-error-boundary/pulls). Expect a few iterations and some discussion before your pull request is merged. If you want to take things in a new direction, feel free to fork and iterate without hindrance!
12 |
13 | ## Code of Conduct 🧐
14 |
15 | My expectations for myself and others is to strive to build a diverse, inclusive, safe community.
16 |
17 | For more guidance, check out [thoughtbot's code of conduct](https://thoughtbot.com/open-source-code-of-conduct).
18 |
19 | ## Licensing 📃
20 |
21 | See the project's [MIT License](https://github.com/tatethurston/react-use-error-boundary/blob/master/LICENSE).
22 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2021 Tate Thurston
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # react-use-error-boundary
2 |
3 |
A React error boundary hook for function components
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 | ## What is this? 🧐
27 |
28 | React 16 introduced [Error Boundaries](https://reactjs.org/docs/error-boundaries.html). As of React 18, there still is [no equivalent hook](https://reactjs.org/docs/hooks-faq.html#do-hooks-cover-all-use-cases-for-classes) for function components.
29 |
30 | This library draws inspiration from Preact's [useErrorBoundary](https://preactjs.com/guide/v10/hooks/#useerrorboundary) and attempts to recreate a similar API.
31 |
32 | ## Installation & Usage 📦
33 |
34 | 1. Add this package to your project:
35 | - `yarn add react-use-error-boundary`
36 |
37 | Just trying things out or want to skip the build step? Use the unpkg URL:
38 |
39 | ```
40 |
41 | ```
42 |
43 | ## Examples 🚀
44 |
45 | Whenever the component or a child component throws an error you can use this hook to catch the error and display an error UI to the user.
46 |
47 | ```jsx
48 | // error = The error that was caught or `undefined` if nothing
49 | // errored. If something other than an instance of `Error`
50 | // was thrown, it will be wrapped in an `Error` object by calling
51 | // `new Error()` on the thrown value.
52 | //
53 | // resetError = Call this function to mark an error as resolved. It's
54 | // up to your app to decide what that means and if it is possible
55 | // to recover from errors.
56 | //
57 | const [error, resetError] = useErrorBoundary();
58 | ```
59 |
60 | For application monitoring, it's often useful to notify a service of any errors. `useErrorBoundary` accepts an optional callback that will be invoked when an error is encountered. The callback is invoked with `error` and `errorInfor` which are identical to [React's componentDidCatch arguments](https://reactjs.org/docs/error-boundaries.html). Identical to React, `error` is the error that was thrown, and `errorInfo` is the component stack trace.
61 |
62 | ```jsx
63 | const [error] = useErrorBoundary((error, errorInfo) =>
64 | logErrorToMyService(error, errorInfo)
65 | );
66 | ```
67 |
68 | A full example may look like this:
69 |
70 | ```jsx
71 | import { withErrorBoundary, useErrorBoundary } from "react-use-error-boundary";
72 |
73 | const App = withErrorBoundary(({ children }) => {
74 | const [error, resetError] = useErrorBoundary(
75 | // You can optionally log the error to an error reporting service
76 | (error, errorInfo) => logErrorToMyService(error, errorInfo)
77 | );
78 |
79 | if (error) {
80 | return (
81 |
82 |
{error.message}
83 |
Try again
84 |
85 | );
86 | }
87 |
88 | return {children}
;
89 | });
90 | ```
91 |
92 | Note that in addition to the hook, the component must be wrapped with `withErrorBoundary`. This function wraps the component with an Error Boundary and a context provider.
93 |
94 | This was done to avoid hooking into React internals, which would otherwise be required. The hope is that the eventual React hook solution will present a similar API, and users can easily migrate by removing the `withErrorBoundary` wrapper.
95 |
96 | Alternatively, the `` component from this library may be placed in your component tree, above each component using `useErrorBoundary`, instead of wrapping the component with `withErrorBoundary`:
97 |
98 | ```jsx
99 | import {
100 | ErrorBoundaryContext,
101 | useErrorBoundary,
102 | } from "react-use-error-boundary";
103 |
104 | const App = ({ children }) => {
105 | // ... see function body in example above
106 | };
107 |
108 | export default (
109 |
110 |
111 |
112 | );
113 | ```
114 |
115 | For a full project example take a look at the [example](https://github.com/tatethurston/react-use-error-boundary/blob/main/example).
116 |
117 | ## Known Limitations ⚠️
118 |
119 | Because React recreates the component tree from scratch after catching an error, the component using the `useErrorBoundary` hook is always remounted after an error is encountered. This means any state will be reinitialized: `useState` and `useRef` hooks will be reinitialized to their initial value and will _not_ persist across caught errors. Any values that need to be preserved across error catching must be lifted into a parent component above the component wrapped in `withErrorBoundary`.
120 |
121 | ## Highlights
122 |
123 | 🌲 [Tree shakeable](https://webpack.js.org/guides/tree-shaking/). Ships [ES Modules](https://webpack.js.org/guides/ecma-script-modules/).
124 |
125 | 🎁 Zero run time dependencies
126 |
127 | 🦶 Small footprint [673 B minified and gzipped](https://bundlephobia.com/result?p=react-use-error-boundary@2.0.0)
128 |
129 | 🪐 Isomorphic / Universal -- safe to run in any JS context: the browser or on a server
130 |
131 | 🛠 This library follows [semantic versioning](https://docs.npmjs.com/about-semantic-versioning)
132 |
133 | ## Contributing 👫
134 |
135 | PR's and issues welcomed! For more guidance check out [CONTRIBUTING.md](https://github.com/tatethurston/react-use-error-boundary/blob/master/CONTRIBUTING.md)
136 |
137 | ## Licensing 📃
138 |
139 | See the project's [MIT License](https://github.com/tatethurston/react-use-error-boundary/blob/master/LICENSE).
140 |
--------------------------------------------------------------------------------
/babel.config.js:
--------------------------------------------------------------------------------
1 | // eslint-disable-next-line no-undef
2 | module.exports = {
3 | presets: [
4 | ["@babel/preset-env", { targets: { node: "current" } }],
5 | "@babel/preset-typescript",
6 | "@babel/preset-react",
7 | ],
8 | };
9 |
--------------------------------------------------------------------------------
/codecov.yml:
--------------------------------------------------------------------------------
1 | coverage:
2 | status:
3 | project:
4 | default:
5 | target: auto
6 | threshold: 10%
7 |
--------------------------------------------------------------------------------
/example/dist/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | react-use-error-boundary-example
7 |
8 |
9 |
10 |
11 |
12 |
13 |
--------------------------------------------------------------------------------
/example/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "example",
3 | "version": "1.0.0",
4 | "description": "",
5 | "main": "index.js",
6 | "scripts": {
7 | "start": "yarn webpack && open dist/index.html"
8 | },
9 | "author": "Tate Thurston ",
10 | "license": "ISC",
11 | "devDependencies": {
12 | "@types/react-dom": "^17.0.11",
13 | "ts-loader": "^9.2.6",
14 | "typescript": "^4.5.5",
15 | "webpack": "^5.66.0",
16 | "webpack-cli": "^4.9.1"
17 | },
18 | "dependencies": {
19 | "react": "^18.2.0",
20 | "react-dom": "^18.2.0",
21 | "react-use-error-boundary": "file:../dist"
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/example/src/index.tsx:
--------------------------------------------------------------------------------
1 | import React, { FC, useState } from "react";
2 | import { withErrorBoundary, useErrorBoundary } from "react-use-error-boundary";
3 | import { render } from "react-dom";
4 |
5 | const ThrowError: FC = () => {
6 | throw new Error("Bombs away 💣");
7 | };
8 |
9 | const App: FC = withErrorBoundary(() => {
10 | const [shouldThrow, setShouldThrow] = useState(false);
11 | const [error, resetError] = useErrorBoundary((error, errorInfo) => {
12 | console.info("componentDidCatch handler called");
13 | console.error(error);
14 | console.error(errorInfo);
15 | });
16 |
17 | if (error) {
18 | const message = error instanceof Error ? error.message : (error as string);
19 | return (
20 | <>
21 | Error: {message}
22 | {
24 | setShouldThrow(false);
25 | resetError();
26 | }}
27 | >
28 | Reset Error
29 |
30 | >
31 | );
32 | }
33 |
34 | return (
35 | <>
36 | Happy Path
37 | {shouldThrow && }
38 | {
40 | setShouldThrow(true);
41 | }}
42 | >
43 | Throw Error
44 |
45 | >
46 | );
47 | });
48 |
49 | render( , document.getElementById("app"));
50 |
--------------------------------------------------------------------------------
/example/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "esModuleInterop": true,
4 | "jsx": "react",
5 | "forceConsistentCasingInFileNames": true,
6 | "isolatedModules": true,
7 | "module": "ESNext",
8 | "moduleResolution": "node",
9 | "noEmitOnError": false,
10 | "outDir": "dist",
11 | "removeComments": true,
12 | "resolveJsonModule": true,
13 | "rootDir": "src",
14 | "skipLibCheck": true,
15 | "sourceMap": true,
16 | "strict": true,
17 | "target": "ESNext",
18 | "declaration": true
19 | },
20 | "include": ["src"]
21 | }
22 |
--------------------------------------------------------------------------------
/example/webpack.config.js:
--------------------------------------------------------------------------------
1 | const path = require("path");
2 |
3 | module.exports = {
4 | entry: "./src/index.tsx",
5 | mode: "production",
6 | module: {
7 | rules: [
8 | {
9 | test: /\.tsx?$/,
10 | use: "ts-loader",
11 | exclude: /node_modules/,
12 | },
13 | ],
14 | },
15 | resolve: {
16 | extensions: [".tsx", ".ts", ".js"],
17 | },
18 | output: {
19 | filename: "main.js",
20 | path: path.resolve(__dirname, "dist"),
21 | },
22 | };
23 |
--------------------------------------------------------------------------------
/example/yarn.lock:
--------------------------------------------------------------------------------
1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
2 | # yarn lockfile v1
3 |
4 |
5 | "@discoveryjs/json-ext@^0.5.0":
6 | version "0.5.6"
7 | resolved "https://registry.yarnpkg.com/@discoveryjs/json-ext/-/json-ext-0.5.6.tgz#d5e0706cf8c6acd8c6032f8d54070af261bbbb2f"
8 | integrity sha512-ws57AidsDvREKrZKYffXddNkyaF14iHNHm8VQnZH6t99E8gczjNN0GpvcGny0imC80yQ0tHz1xVUKk/KFQSUyA==
9 |
10 | "@types/eslint-scope@^3.7.0":
11 | version "3.7.3"
12 | resolved "https://registry.yarnpkg.com/@types/eslint-scope/-/eslint-scope-3.7.3.tgz#125b88504b61e3c8bc6f870882003253005c3224"
13 | integrity sha512-PB3ldyrcnAicT35TWPs5IcwKD8S333HMaa2VVv4+wdvebJkjWuW/xESoB8IwRcog8HYVYamb1g/R31Qv5Bx03g==
14 | dependencies:
15 | "@types/eslint" "*"
16 | "@types/estree" "*"
17 |
18 | "@types/eslint@*":
19 | version "8.4.0"
20 | resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-8.4.0.tgz#95712d5b32fd99a0d9493c31c6197ea7471c3ba6"
21 | integrity sha512-JUYa/5JwoqikCy7O7jKtuNe9Z4ZZt615G+1EKfaDGSNEpzaA2OwbV/G1v08Oa7fd1XzlFoSCvt9ePl9/6FyAug==
22 | dependencies:
23 | "@types/estree" "*"
24 | "@types/json-schema" "*"
25 |
26 | "@types/estree@*", "@types/estree@^0.0.50":
27 | version "0.0.50"
28 | resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.50.tgz#1e0caa9364d3fccd2931c3ed96fdbeaa5d4cca83"
29 | integrity sha512-C6N5s2ZFtuZRj54k2/zyRhNDjJwwcViAM3Nbm8zjBpbqAdZ00mr0CFxvSKeO8Y/e03WVFLpQMdHYVfUd6SB+Hw==
30 |
31 | "@types/json-schema@*", "@types/json-schema@^7.0.8":
32 | version "7.0.9"
33 | resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.9.tgz#97edc9037ea0c38585320b28964dde3b39e4660d"
34 | integrity sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==
35 |
36 | "@types/node@*":
37 | version "17.0.10"
38 | resolved "https://registry.yarnpkg.com/@types/node/-/node-17.0.10.tgz#616f16e9d3a2a3d618136b1be244315d95bd7cab"
39 | integrity sha512-S/3xB4KzyFxYGCppyDt68yzBU9ysL88lSdIah4D6cptdcltc4NCPCAMc0+PCpg/lLIyC7IPvj2Z52OJWeIUkog==
40 |
41 | "@types/prop-types@*":
42 | version "15.7.4"
43 | resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.4.tgz#fcf7205c25dff795ee79af1e30da2c9790808f11"
44 | integrity sha512-rZ5drC/jWjrArrS8BR6SIr4cWpW09RNTYt9AMZo3Jwwif+iacXAqgVjm0B0Bv/S1jhDXKHqRVNCbACkJ89RAnQ==
45 |
46 | "@types/react-dom@^17.0.11":
47 | version "17.0.11"
48 | resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-17.0.11.tgz#e1eadc3c5e86bdb5f7684e00274ae228e7bcc466"
49 | integrity sha512-f96K3k+24RaLGVu/Y2Ng3e1EbZ8/cVJvypZWd7cy0ofCBaf2lcM46xNhycMZ2xGwbBjRql7hOlZ+e2WlJ5MH3Q==
50 | dependencies:
51 | "@types/react" "*"
52 |
53 | "@types/react@*":
54 | version "17.0.38"
55 | resolved "https://registry.yarnpkg.com/@types/react/-/react-17.0.38.tgz#f24249fefd89357d5fa71f739a686b8d7c7202bd"
56 | integrity sha512-SI92X1IA+FMnP3qM5m4QReluXzhcmovhZnLNm3pyeQlooi02qI7sLiepEYqT678uNiyc25XfCqxREFpy3W7YhQ==
57 | dependencies:
58 | "@types/prop-types" "*"
59 | "@types/scheduler" "*"
60 | csstype "^3.0.2"
61 |
62 | "@types/scheduler@*":
63 | version "0.16.2"
64 | resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.16.2.tgz#1a62f89525723dde24ba1b01b092bf5df8ad4d39"
65 | integrity sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==
66 |
67 | "@webassemblyjs/ast@1.11.1":
68 | version "1.11.1"
69 | resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.11.1.tgz#2bfd767eae1a6996f432ff7e8d7fc75679c0b6a7"
70 | integrity sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==
71 | dependencies:
72 | "@webassemblyjs/helper-numbers" "1.11.1"
73 | "@webassemblyjs/helper-wasm-bytecode" "1.11.1"
74 |
75 | "@webassemblyjs/floating-point-hex-parser@1.11.1":
76 | version "1.11.1"
77 | resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz#f6c61a705f0fd7a6aecaa4e8198f23d9dc179e4f"
78 | integrity sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==
79 |
80 | "@webassemblyjs/helper-api-error@1.11.1":
81 | version "1.11.1"
82 | resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz#1a63192d8788e5c012800ba6a7a46c705288fd16"
83 | integrity sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==
84 |
85 | "@webassemblyjs/helper-buffer@1.11.1":
86 | version "1.11.1"
87 | resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz#832a900eb444884cde9a7cad467f81500f5e5ab5"
88 | integrity sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==
89 |
90 | "@webassemblyjs/helper-numbers@1.11.1":
91 | version "1.11.1"
92 | resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz#64d81da219fbbba1e3bd1bfc74f6e8c4e10a62ae"
93 | integrity sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==
94 | dependencies:
95 | "@webassemblyjs/floating-point-hex-parser" "1.11.1"
96 | "@webassemblyjs/helper-api-error" "1.11.1"
97 | "@xtuc/long" "4.2.2"
98 |
99 | "@webassemblyjs/helper-wasm-bytecode@1.11.1":
100 | version "1.11.1"
101 | resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz#f328241e41e7b199d0b20c18e88429c4433295e1"
102 | integrity sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==
103 |
104 | "@webassemblyjs/helper-wasm-section@1.11.1":
105 | version "1.11.1"
106 | resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz#21ee065a7b635f319e738f0dd73bfbda281c097a"
107 | integrity sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==
108 | dependencies:
109 | "@webassemblyjs/ast" "1.11.1"
110 | "@webassemblyjs/helper-buffer" "1.11.1"
111 | "@webassemblyjs/helper-wasm-bytecode" "1.11.1"
112 | "@webassemblyjs/wasm-gen" "1.11.1"
113 |
114 | "@webassemblyjs/ieee754@1.11.1":
115 | version "1.11.1"
116 | resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz#963929e9bbd05709e7e12243a099180812992614"
117 | integrity sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==
118 | dependencies:
119 | "@xtuc/ieee754" "^1.2.0"
120 |
121 | "@webassemblyjs/leb128@1.11.1":
122 | version "1.11.1"
123 | resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.11.1.tgz#ce814b45574e93d76bae1fb2644ab9cdd9527aa5"
124 | integrity sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==
125 | dependencies:
126 | "@xtuc/long" "4.2.2"
127 |
128 | "@webassemblyjs/utf8@1.11.1":
129 | version "1.11.1"
130 | resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.11.1.tgz#d1f8b764369e7c6e6bae350e854dec9a59f0a3ff"
131 | integrity sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==
132 |
133 | "@webassemblyjs/wasm-edit@1.11.1":
134 | version "1.11.1"
135 | resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz#ad206ebf4bf95a058ce9880a8c092c5dec8193d6"
136 | integrity sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==
137 | dependencies:
138 | "@webassemblyjs/ast" "1.11.1"
139 | "@webassemblyjs/helper-buffer" "1.11.1"
140 | "@webassemblyjs/helper-wasm-bytecode" "1.11.1"
141 | "@webassemblyjs/helper-wasm-section" "1.11.1"
142 | "@webassemblyjs/wasm-gen" "1.11.1"
143 | "@webassemblyjs/wasm-opt" "1.11.1"
144 | "@webassemblyjs/wasm-parser" "1.11.1"
145 | "@webassemblyjs/wast-printer" "1.11.1"
146 |
147 | "@webassemblyjs/wasm-gen@1.11.1":
148 | version "1.11.1"
149 | resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz#86c5ea304849759b7d88c47a32f4f039ae3c8f76"
150 | integrity sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==
151 | dependencies:
152 | "@webassemblyjs/ast" "1.11.1"
153 | "@webassemblyjs/helper-wasm-bytecode" "1.11.1"
154 | "@webassemblyjs/ieee754" "1.11.1"
155 | "@webassemblyjs/leb128" "1.11.1"
156 | "@webassemblyjs/utf8" "1.11.1"
157 |
158 | "@webassemblyjs/wasm-opt@1.11.1":
159 | version "1.11.1"
160 | resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz#657b4c2202f4cf3b345f8a4c6461c8c2418985f2"
161 | integrity sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==
162 | dependencies:
163 | "@webassemblyjs/ast" "1.11.1"
164 | "@webassemblyjs/helper-buffer" "1.11.1"
165 | "@webassemblyjs/wasm-gen" "1.11.1"
166 | "@webassemblyjs/wasm-parser" "1.11.1"
167 |
168 | "@webassemblyjs/wasm-parser@1.11.1":
169 | version "1.11.1"
170 | resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz#86ca734534f417e9bd3c67c7a1c75d8be41fb199"
171 | integrity sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==
172 | dependencies:
173 | "@webassemblyjs/ast" "1.11.1"
174 | "@webassemblyjs/helper-api-error" "1.11.1"
175 | "@webassemblyjs/helper-wasm-bytecode" "1.11.1"
176 | "@webassemblyjs/ieee754" "1.11.1"
177 | "@webassemblyjs/leb128" "1.11.1"
178 | "@webassemblyjs/utf8" "1.11.1"
179 |
180 | "@webassemblyjs/wast-printer@1.11.1":
181 | version "1.11.1"
182 | resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz#d0c73beda8eec5426f10ae8ef55cee5e7084c2f0"
183 | integrity sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==
184 | dependencies:
185 | "@webassemblyjs/ast" "1.11.1"
186 | "@xtuc/long" "4.2.2"
187 |
188 | "@webpack-cli/configtest@^1.1.0":
189 | version "1.1.0"
190 | resolved "https://registry.yarnpkg.com/@webpack-cli/configtest/-/configtest-1.1.0.tgz#8342bef0badfb7dfd3b576f2574ab80c725be043"
191 | integrity sha512-ttOkEkoalEHa7RaFYpM0ErK1xc4twg3Am9hfHhL7MVqlHebnkYd2wuI/ZqTDj0cVzZho6PdinY0phFZV3O0Mzg==
192 |
193 | "@webpack-cli/info@^1.4.0":
194 | version "1.4.0"
195 | resolved "https://registry.yarnpkg.com/@webpack-cli/info/-/info-1.4.0.tgz#b9179c3227ab09cbbb149aa733475fcf99430223"
196 | integrity sha512-F6b+Man0rwE4n0409FyAJHStYA5OIZERxmnUfLVwv0mc0V1wLad3V7jqRlMkgKBeAq07jUvglacNaa6g9lOpuw==
197 | dependencies:
198 | envinfo "^7.7.3"
199 |
200 | "@webpack-cli/serve@^1.6.0":
201 | version "1.6.0"
202 | resolved "https://registry.yarnpkg.com/@webpack-cli/serve/-/serve-1.6.0.tgz#2c275aa05c895eccebbfc34cfb223c6e8bd591a2"
203 | integrity sha512-ZkVeqEmRpBV2GHvjjUZqEai2PpUbuq8Bqd//vEYsp63J8WyexI8ppCqVS3Zs0QADf6aWuPdU+0XsPI647PVlQA==
204 |
205 | "@xtuc/ieee754@^1.2.0":
206 | version "1.2.0"
207 | resolved "https://registry.yarnpkg.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz#eef014a3145ae477a1cbc00cd1e552336dceb790"
208 | integrity sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==
209 |
210 | "@xtuc/long@4.2.2":
211 | version "4.2.2"
212 | resolved "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.2.tgz#d291c6a4e97989b5c61d9acf396ae4fe133a718d"
213 | integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==
214 |
215 | acorn-import-assertions@^1.7.6:
216 | version "1.8.0"
217 | resolved "https://registry.yarnpkg.com/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz#ba2b5939ce62c238db6d93d81c9b111b29b855e9"
218 | integrity sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==
219 |
220 | acorn@^8.4.1:
221 | version "8.7.0"
222 | resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.7.0.tgz#90951fde0f8f09df93549481e5fc141445b791cf"
223 | integrity sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==
224 |
225 | ajv-keywords@^3.5.2:
226 | version "3.5.2"
227 | resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d"
228 | integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==
229 |
230 | ajv@^6.12.5:
231 | version "6.12.6"
232 | resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4"
233 | integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==
234 | dependencies:
235 | fast-deep-equal "^3.1.1"
236 | fast-json-stable-stringify "^2.0.0"
237 | json-schema-traverse "^0.4.1"
238 | uri-js "^4.2.2"
239 |
240 | ansi-styles@^4.1.0:
241 | version "4.3.0"
242 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937"
243 | integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==
244 | dependencies:
245 | color-convert "^2.0.1"
246 |
247 | braces@^3.0.1:
248 | version "3.0.2"
249 | resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107"
250 | integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==
251 | dependencies:
252 | fill-range "^7.0.1"
253 |
254 | browserslist@^4.14.5:
255 | version "4.19.1"
256 | resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.19.1.tgz#4ac0435b35ab655896c31d53018b6dd5e9e4c9a3"
257 | integrity sha512-u2tbbG5PdKRTUoctO3NBD8FQ5HdPh1ZXPHzp1rwaa5jTc+RV9/+RlWiAIKmjRPQF+xbGM9Kklj5bZQFa2s/38A==
258 | dependencies:
259 | caniuse-lite "^1.0.30001286"
260 | electron-to-chromium "^1.4.17"
261 | escalade "^3.1.1"
262 | node-releases "^2.0.1"
263 | picocolors "^1.0.0"
264 |
265 | buffer-from@^1.0.0:
266 | version "1.1.2"
267 | resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5"
268 | integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==
269 |
270 | caniuse-lite@^1.0.30001286:
271 | version "1.0.30001300"
272 | resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001300.tgz#11ab6c57d3eb6f964cba950401fd00a146786468"
273 | integrity sha512-cVjiJHWGcNlJi8TZVKNMnvMid3Z3TTdDHmLDzlOdIiZq138Exvo0G+G0wTdVYolxKb4AYwC+38pxodiInVtJSA==
274 |
275 | chalk@^4.1.0:
276 | version "4.1.2"
277 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01"
278 | integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==
279 | dependencies:
280 | ansi-styles "^4.1.0"
281 | supports-color "^7.1.0"
282 |
283 | chrome-trace-event@^1.0.2:
284 | version "1.0.3"
285 | resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz#1015eced4741e15d06664a957dbbf50d041e26ac"
286 | integrity sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==
287 |
288 | clone-deep@^4.0.1:
289 | version "4.0.1"
290 | resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-4.0.1.tgz#c19fd9bdbbf85942b4fd979c84dcf7d5f07c2387"
291 | integrity sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==
292 | dependencies:
293 | is-plain-object "^2.0.4"
294 | kind-of "^6.0.2"
295 | shallow-clone "^3.0.0"
296 |
297 | color-convert@^2.0.1:
298 | version "2.0.1"
299 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3"
300 | integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==
301 | dependencies:
302 | color-name "~1.1.4"
303 |
304 | color-name@~1.1.4:
305 | version "1.1.4"
306 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2"
307 | integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==
308 |
309 | colorette@^2.0.14:
310 | version "2.0.16"
311 | resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.16.tgz#713b9af84fdb000139f04546bd4a93f62a5085da"
312 | integrity sha512-hUewv7oMjCp+wkBv5Rm0v87eJhq4woh5rSR+42YSQJKecCqgIqNkZ6lAlQms/BwHPJA5NKMRlpxPRv0n8HQW6g==
313 |
314 | commander@^2.20.0:
315 | version "2.20.3"
316 | resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33"
317 | integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==
318 |
319 | commander@^7.0.0:
320 | version "7.2.0"
321 | resolved "https://registry.yarnpkg.com/commander/-/commander-7.2.0.tgz#a36cb57d0b501ce108e4d20559a150a391d97ab7"
322 | integrity sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==
323 |
324 | cross-spawn@^7.0.3:
325 | version "7.0.3"
326 | resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6"
327 | integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==
328 | dependencies:
329 | path-key "^3.1.0"
330 | shebang-command "^2.0.0"
331 | which "^2.0.1"
332 |
333 | csstype@^3.0.2:
334 | version "3.0.10"
335 | resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.0.10.tgz#2ad3a7bed70f35b965707c092e5f30b327c290e5"
336 | integrity sha512-2u44ZG2OcNUO9HDp/Jl8C07x6pU/eTR3ncV91SiK3dhG9TWvRVsCoJw14Ckx5DgWkzGA3waZWO3d7pgqpUI/XA==
337 |
338 | electron-to-chromium@^1.4.17:
339 | version "1.4.49"
340 | resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.49.tgz#5b6a3dc032590beef4be485a4b0b3fe7d0e3dfd7"
341 | integrity sha512-k/0t1TRfonHIp8TJKfjBu2cKj8MqYTiEpOhci+q7CVEE5xnCQnx1pTa+V8b/sdhe4S3PR4p4iceEQWhGrKQORQ==
342 |
343 | enhanced-resolve@^5.0.0, enhanced-resolve@^5.8.3:
344 | version "5.8.3"
345 | resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.8.3.tgz#6d552d465cce0423f5b3d718511ea53826a7b2f0"
346 | integrity sha512-EGAbGvH7j7Xt2nc0E7D99La1OiEs8LnyimkRgwExpUMScN6O+3x9tIWs7PLQZVNx4YD+00skHXPXi1yQHpAmZA==
347 | dependencies:
348 | graceful-fs "^4.2.4"
349 | tapable "^2.2.0"
350 |
351 | envinfo@^7.7.3:
352 | version "7.8.1"
353 | resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.8.1.tgz#06377e3e5f4d379fea7ac592d5ad8927e0c4d475"
354 | integrity sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw==
355 |
356 | es-module-lexer@^0.9.0:
357 | version "0.9.3"
358 | resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-0.9.3.tgz#6f13db00cc38417137daf74366f535c8eb438f19"
359 | integrity sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==
360 |
361 | escalade@^3.1.1:
362 | version "3.1.1"
363 | resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40"
364 | integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==
365 |
366 | eslint-scope@5.1.1:
367 | version "5.1.1"
368 | resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c"
369 | integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==
370 | dependencies:
371 | esrecurse "^4.3.0"
372 | estraverse "^4.1.1"
373 |
374 | esrecurse@^4.3.0:
375 | version "4.3.0"
376 | resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921"
377 | integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==
378 | dependencies:
379 | estraverse "^5.2.0"
380 |
381 | estraverse@^4.1.1:
382 | version "4.3.0"
383 | resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d"
384 | integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==
385 |
386 | estraverse@^5.2.0:
387 | version "5.3.0"
388 | resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123"
389 | integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==
390 |
391 | events@^3.2.0:
392 | version "3.3.0"
393 | resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400"
394 | integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==
395 |
396 | execa@^5.0.0:
397 | version "5.1.1"
398 | resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd"
399 | integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==
400 | dependencies:
401 | cross-spawn "^7.0.3"
402 | get-stream "^6.0.0"
403 | human-signals "^2.1.0"
404 | is-stream "^2.0.0"
405 | merge-stream "^2.0.0"
406 | npm-run-path "^4.0.1"
407 | onetime "^5.1.2"
408 | signal-exit "^3.0.3"
409 | strip-final-newline "^2.0.0"
410 |
411 | fast-deep-equal@^3.1.1:
412 | version "3.1.3"
413 | resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525"
414 | integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==
415 |
416 | fast-json-stable-stringify@^2.0.0:
417 | version "2.1.0"
418 | resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633"
419 | integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==
420 |
421 | fastest-levenshtein@^1.0.12:
422 | version "1.0.12"
423 | resolved "https://registry.yarnpkg.com/fastest-levenshtein/-/fastest-levenshtein-1.0.12.tgz#9990f7d3a88cc5a9ffd1f1745745251700d497e2"
424 | integrity sha512-On2N+BpYJ15xIC974QNVuYGMOlEVt4s0EOI3wwMqOmK1fdDY+FN/zltPV8vosq4ad4c/gJ1KHScUn/6AWIgiow==
425 |
426 | fill-range@^7.0.1:
427 | version "7.0.1"
428 | resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40"
429 | integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==
430 | dependencies:
431 | to-regex-range "^5.0.1"
432 |
433 | find-up@^4.0.0:
434 | version "4.1.0"
435 | resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19"
436 | integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==
437 | dependencies:
438 | locate-path "^5.0.0"
439 | path-exists "^4.0.0"
440 |
441 | function-bind@^1.1.1:
442 | version "1.1.1"
443 | resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d"
444 | integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==
445 |
446 | get-stream@^6.0.0:
447 | version "6.0.1"
448 | resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7"
449 | integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==
450 |
451 | glob-to-regexp@^0.4.1:
452 | version "0.4.1"
453 | resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz#c75297087c851b9a578bd217dd59a92f59fe546e"
454 | integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==
455 |
456 | graceful-fs@^4.1.2, graceful-fs@^4.2.4, graceful-fs@^4.2.9:
457 | version "4.2.9"
458 | resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.9.tgz#041b05df45755e587a24942279b9d113146e1c96"
459 | integrity sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==
460 |
461 | has-flag@^4.0.0:
462 | version "4.0.0"
463 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b"
464 | integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==
465 |
466 | has@^1.0.3:
467 | version "1.0.3"
468 | resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796"
469 | integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==
470 | dependencies:
471 | function-bind "^1.1.1"
472 |
473 | human-signals@^2.1.0:
474 | version "2.1.0"
475 | resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0"
476 | integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==
477 |
478 | import-local@^3.0.2:
479 | version "3.1.0"
480 | resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.1.0.tgz#b4479df8a5fd44f6cdce24070675676063c95cb4"
481 | integrity sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==
482 | dependencies:
483 | pkg-dir "^4.2.0"
484 | resolve-cwd "^3.0.0"
485 |
486 | interpret@^2.2.0:
487 | version "2.2.0"
488 | resolved "https://registry.yarnpkg.com/interpret/-/interpret-2.2.0.tgz#1a78a0b5965c40a5416d007ad6f50ad27c417df9"
489 | integrity sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==
490 |
491 | is-core-module@^2.8.0:
492 | version "2.8.1"
493 | resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.8.1.tgz#f59fdfca701d5879d0a6b100a40aa1560ce27211"
494 | integrity sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==
495 | dependencies:
496 | has "^1.0.3"
497 |
498 | is-number@^7.0.0:
499 | version "7.0.0"
500 | resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b"
501 | integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==
502 |
503 | is-plain-object@^2.0.4:
504 | version "2.0.4"
505 | resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677"
506 | integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==
507 | dependencies:
508 | isobject "^3.0.1"
509 |
510 | is-stream@^2.0.0:
511 | version "2.0.1"
512 | resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077"
513 | integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==
514 |
515 | isexe@^2.0.0:
516 | version "2.0.0"
517 | resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10"
518 | integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=
519 |
520 | isobject@^3.0.1:
521 | version "3.0.1"
522 | resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df"
523 | integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8=
524 |
525 | jest-worker@^27.4.1:
526 | version "27.4.6"
527 | resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-27.4.6.tgz#5d2d93db419566cb680752ca0792780e71b3273e"
528 | integrity sha512-gHWJF/6Xi5CTG5QCvROr6GcmpIqNYpDJyc8A1h/DyXqH1tD6SnRCM0d3U5msV31D2LB/U+E0M+W4oyvKV44oNw==
529 | dependencies:
530 | "@types/node" "*"
531 | merge-stream "^2.0.0"
532 | supports-color "^8.0.0"
533 |
534 | "js-tokens@^3.0.0 || ^4.0.0":
535 | version "4.0.0"
536 | resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499"
537 | integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==
538 |
539 | json-parse-better-errors@^1.0.2:
540 | version "1.0.2"
541 | resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9"
542 | integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==
543 |
544 | json-schema-traverse@^0.4.1:
545 | version "0.4.1"
546 | resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660"
547 | integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==
548 |
549 | kind-of@^6.0.2:
550 | version "6.0.3"
551 | resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd"
552 | integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==
553 |
554 | loader-runner@^4.2.0:
555 | version "4.2.0"
556 | resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-4.2.0.tgz#d7022380d66d14c5fb1d496b89864ebcfd478384"
557 | integrity sha512-92+huvxMvYlMzMt0iIOukcwYBFpkYJdpl2xsZ7LrlayO7E8SOv+JJUEK17B/dJIHAOLMfh2dZZ/Y18WgmGtYNw==
558 |
559 | locate-path@^5.0.0:
560 | version "5.0.0"
561 | resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0"
562 | integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==
563 | dependencies:
564 | p-locate "^4.1.0"
565 |
566 | loose-envify@^1.1.0:
567 | version "1.4.0"
568 | resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf"
569 | integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==
570 | dependencies:
571 | js-tokens "^3.0.0 || ^4.0.0"
572 |
573 | lru-cache@^6.0.0:
574 | version "6.0.0"
575 | resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94"
576 | integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==
577 | dependencies:
578 | yallist "^4.0.0"
579 |
580 | merge-stream@^2.0.0:
581 | version "2.0.0"
582 | resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60"
583 | integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==
584 |
585 | micromatch@^4.0.0:
586 | version "4.0.4"
587 | resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.4.tgz#896d519dfe9db25fce94ceb7a500919bf881ebf9"
588 | integrity sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==
589 | dependencies:
590 | braces "^3.0.1"
591 | picomatch "^2.2.3"
592 |
593 | mime-db@1.51.0:
594 | version "1.51.0"
595 | resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.51.0.tgz#d9ff62451859b18342d960850dc3cfb77e63fb0c"
596 | integrity sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g==
597 |
598 | mime-types@^2.1.27:
599 | version "2.1.34"
600 | resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.34.tgz#5a712f9ec1503511a945803640fafe09d3793c24"
601 | integrity sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A==
602 | dependencies:
603 | mime-db "1.51.0"
604 |
605 | mimic-fn@^2.1.0:
606 | version "2.1.0"
607 | resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b"
608 | integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==
609 |
610 | neo-async@^2.6.2:
611 | version "2.6.2"
612 | resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f"
613 | integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==
614 |
615 | node-releases@^2.0.1:
616 | version "2.0.1"
617 | resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.1.tgz#3d1d395f204f1f2f29a54358b9fb678765ad2fc5"
618 | integrity sha512-CqyzN6z7Q6aMeF/ktcMVTzhAHCEpf8SOarwpzpf8pNBY2k5/oM34UHldUwp8VKI7uxct2HxSRdJjBaZeESzcxA==
619 |
620 | npm-run-path@^4.0.1:
621 | version "4.0.1"
622 | resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea"
623 | integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==
624 | dependencies:
625 | path-key "^3.0.0"
626 |
627 | onetime@^5.1.2:
628 | version "5.1.2"
629 | resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e"
630 | integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==
631 | dependencies:
632 | mimic-fn "^2.1.0"
633 |
634 | p-limit@^2.2.0:
635 | version "2.3.0"
636 | resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1"
637 | integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==
638 | dependencies:
639 | p-try "^2.0.0"
640 |
641 | p-locate@^4.1.0:
642 | version "4.1.0"
643 | resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07"
644 | integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==
645 | dependencies:
646 | p-limit "^2.2.0"
647 |
648 | p-try@^2.0.0:
649 | version "2.2.0"
650 | resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6"
651 | integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==
652 |
653 | path-exists@^4.0.0:
654 | version "4.0.0"
655 | resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3"
656 | integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==
657 |
658 | path-key@^3.0.0, path-key@^3.1.0:
659 | version "3.1.1"
660 | resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375"
661 | integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==
662 |
663 | path-parse@^1.0.7:
664 | version "1.0.7"
665 | resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735"
666 | integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==
667 |
668 | picocolors@^1.0.0:
669 | version "1.0.0"
670 | resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c"
671 | integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==
672 |
673 | picomatch@^2.2.3:
674 | version "2.3.1"
675 | resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42"
676 | integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==
677 |
678 | pkg-dir@^4.2.0:
679 | version "4.2.0"
680 | resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3"
681 | integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==
682 | dependencies:
683 | find-up "^4.0.0"
684 |
685 | punycode@^2.1.0:
686 | version "2.1.1"
687 | resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec"
688 | integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==
689 |
690 | randombytes@^2.1.0:
691 | version "2.1.0"
692 | resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a"
693 | integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==
694 | dependencies:
695 | safe-buffer "^5.1.0"
696 |
697 | react-dom@^18.2.0:
698 | version "18.2.0"
699 | resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-18.2.0.tgz#22aaf38708db2674ed9ada224ca4aa708d821e3d"
700 | integrity sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==
701 | dependencies:
702 | loose-envify "^1.1.0"
703 | scheduler "^0.23.0"
704 |
705 | "react-use-error-boundary@file:../dist":
706 | version "3.0.0"
707 |
708 | react@^18.2.0:
709 | version "18.2.0"
710 | resolved "https://registry.yarnpkg.com/react/-/react-18.2.0.tgz#555bd98592883255fa00de14f1151a917b5d77d5"
711 | integrity sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==
712 | dependencies:
713 | loose-envify "^1.1.0"
714 |
715 | rechoir@^0.7.0:
716 | version "0.7.1"
717 | resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.7.1.tgz#9478a96a1ca135b5e88fc027f03ee92d6c645686"
718 | integrity sha512-/njmZ8s1wVeR6pjTZ+0nCnv8SpZNRMT2D1RLOJQESlYFDBvwpTA4KWJpZ+sBJ4+vhjILRcK7JIFdGCdxEAAitg==
719 | dependencies:
720 | resolve "^1.9.0"
721 |
722 | resolve-cwd@^3.0.0:
723 | version "3.0.0"
724 | resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d"
725 | integrity sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==
726 | dependencies:
727 | resolve-from "^5.0.0"
728 |
729 | resolve-from@^5.0.0:
730 | version "5.0.0"
731 | resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69"
732 | integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==
733 |
734 | resolve@^1.9.0:
735 | version "1.21.0"
736 | resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.21.0.tgz#b51adc97f3472e6a5cf4444d34bc9d6b9037591f"
737 | integrity sha512-3wCbTpk5WJlyE4mSOtDLhqQmGFi0/TD9VPwmiolnk8U0wRgMEktqCXd3vy5buTO3tljvalNvKrjHEfrd2WpEKA==
738 | dependencies:
739 | is-core-module "^2.8.0"
740 | path-parse "^1.0.7"
741 | supports-preserve-symlinks-flag "^1.0.0"
742 |
743 | safe-buffer@^5.1.0:
744 | version "5.2.1"
745 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6"
746 | integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==
747 |
748 | scheduler@^0.23.0:
749 | version "0.23.0"
750 | resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.23.0.tgz#ba8041afc3d30eb206a487b6b384002e4e61fdfe"
751 | integrity sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==
752 | dependencies:
753 | loose-envify "^1.1.0"
754 |
755 | schema-utils@^3.1.0, schema-utils@^3.1.1:
756 | version "3.1.1"
757 | resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-3.1.1.tgz#bc74c4b6b6995c1d88f76a8b77bea7219e0c8281"
758 | integrity sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==
759 | dependencies:
760 | "@types/json-schema" "^7.0.8"
761 | ajv "^6.12.5"
762 | ajv-keywords "^3.5.2"
763 |
764 | semver@^7.3.4:
765 | version "7.3.5"
766 | resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.5.tgz#0b621c879348d8998e4b0e4be94b3f12e6018ef7"
767 | integrity sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==
768 | dependencies:
769 | lru-cache "^6.0.0"
770 |
771 | serialize-javascript@^6.0.0:
772 | version "6.0.0"
773 | resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.0.tgz#efae5d88f45d7924141da8b5c3a7a7e663fefeb8"
774 | integrity sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==
775 | dependencies:
776 | randombytes "^2.1.0"
777 |
778 | shallow-clone@^3.0.0:
779 | version "3.0.1"
780 | resolved "https://registry.yarnpkg.com/shallow-clone/-/shallow-clone-3.0.1.tgz#8f2981ad92531f55035b01fb230769a40e02efa3"
781 | integrity sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==
782 | dependencies:
783 | kind-of "^6.0.2"
784 |
785 | shebang-command@^2.0.0:
786 | version "2.0.0"
787 | resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea"
788 | integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==
789 | dependencies:
790 | shebang-regex "^3.0.0"
791 |
792 | shebang-regex@^3.0.0:
793 | version "3.0.0"
794 | resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172"
795 | integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==
796 |
797 | signal-exit@^3.0.3:
798 | version "3.0.6"
799 | resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.6.tgz#24e630c4b0f03fea446a2bd299e62b4a6ca8d0af"
800 | integrity sha512-sDl4qMFpijcGw22U5w63KmD3cZJfBuFlVNbVMKje2keoKML7X2UzWbc4XrmEbDwg0NXJc3yv4/ox7b+JWb57kQ==
801 |
802 | source-map-support@~0.5.20:
803 | version "0.5.21"
804 | resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f"
805 | integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==
806 | dependencies:
807 | buffer-from "^1.0.0"
808 | source-map "^0.6.0"
809 |
810 | source-map@^0.6.0, source-map@^0.6.1:
811 | version "0.6.1"
812 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263"
813 | integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==
814 |
815 | source-map@~0.7.2:
816 | version "0.7.3"
817 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383"
818 | integrity sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==
819 |
820 | strip-final-newline@^2.0.0:
821 | version "2.0.0"
822 | resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad"
823 | integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==
824 |
825 | supports-color@^7.1.0:
826 | version "7.2.0"
827 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da"
828 | integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==
829 | dependencies:
830 | has-flag "^4.0.0"
831 |
832 | supports-color@^8.0.0:
833 | version "8.1.1"
834 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c"
835 | integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==
836 | dependencies:
837 | has-flag "^4.0.0"
838 |
839 | supports-preserve-symlinks-flag@^1.0.0:
840 | version "1.0.0"
841 | resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09"
842 | integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==
843 |
844 | tapable@^2.1.1, tapable@^2.2.0:
845 | version "2.2.1"
846 | resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.1.tgz#1967a73ef4060a82f12ab96af86d52fdb76eeca0"
847 | integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==
848 |
849 | terser-webpack-plugin@^5.1.3:
850 | version "5.3.0"
851 | resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.3.0.tgz#21641326486ecf91d8054161c816e464435bae9f"
852 | integrity sha512-LPIisi3Ol4chwAaPP8toUJ3L4qCM1G0wao7L3qNv57Drezxj6+VEyySpPw4B1HSO2Eg/hDY/MNF5XihCAoqnsQ==
853 | dependencies:
854 | jest-worker "^27.4.1"
855 | schema-utils "^3.1.1"
856 | serialize-javascript "^6.0.0"
857 | source-map "^0.6.1"
858 | terser "^5.7.2"
859 |
860 | terser@^5.7.2:
861 | version "5.10.0"
862 | resolved "https://registry.yarnpkg.com/terser/-/terser-5.10.0.tgz#b86390809c0389105eb0a0b62397563096ddafcc"
863 | integrity sha512-AMmF99DMfEDiRJfxfY5jj5wNH/bYO09cniSqhfoyxc8sFoYIgkJy86G04UoZU5VjlpnplVu0K6Tx6E9b5+DlHA==
864 | dependencies:
865 | commander "^2.20.0"
866 | source-map "~0.7.2"
867 | source-map-support "~0.5.20"
868 |
869 | to-regex-range@^5.0.1:
870 | version "5.0.1"
871 | resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4"
872 | integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==
873 | dependencies:
874 | is-number "^7.0.0"
875 |
876 | ts-loader@^9.2.6:
877 | version "9.2.6"
878 | resolved "https://registry.yarnpkg.com/ts-loader/-/ts-loader-9.2.6.tgz#9937c4dd0a1e3dbbb5e433f8102a6601c6615d74"
879 | integrity sha512-QMTC4UFzHmu9wU2VHZEmWWE9cUajjfcdcws+Gh7FhiO+Dy0RnR1bNz0YCHqhI0yRowCE9arVnNxYHqELOy9Hjw==
880 | dependencies:
881 | chalk "^4.1.0"
882 | enhanced-resolve "^5.0.0"
883 | micromatch "^4.0.0"
884 | semver "^7.3.4"
885 |
886 | typescript@^4.5.5:
887 | version "4.5.5"
888 | resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.5.5.tgz#d8c953832d28924a9e3d37c73d729c846c5896f3"
889 | integrity sha512-TCTIul70LyWe6IJWT8QSYeA54WQe8EjQFU4wY52Fasj5UKx88LNYKCgBEHcOMOrFF1rKGbD8v/xcNWVUq9SymA==
890 |
891 | uri-js@^4.2.2:
892 | version "4.4.1"
893 | resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e"
894 | integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==
895 | dependencies:
896 | punycode "^2.1.0"
897 |
898 | watchpack@^2.3.1:
899 | version "2.3.1"
900 | resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.3.1.tgz#4200d9447b401156eeca7767ee610f8809bc9d25"
901 | integrity sha512-x0t0JuydIo8qCNctdDrn1OzH/qDzk2+rdCOC3YzumZ42fiMqmQ7T3xQurykYMhYfHaPHTp4ZxAx2NfUo1K6QaA==
902 | dependencies:
903 | glob-to-regexp "^0.4.1"
904 | graceful-fs "^4.1.2"
905 |
906 | webpack-cli@^4.9.1:
907 | version "4.9.1"
908 | resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-4.9.1.tgz#b64be825e2d1b130f285c314caa3b1ba9a4632b3"
909 | integrity sha512-JYRFVuyFpzDxMDB+v/nanUdQYcZtqFPGzmlW4s+UkPMFhSpfRNmf1z4AwYcHJVdvEFAM7FFCQdNTpsBYhDLusQ==
910 | dependencies:
911 | "@discoveryjs/json-ext" "^0.5.0"
912 | "@webpack-cli/configtest" "^1.1.0"
913 | "@webpack-cli/info" "^1.4.0"
914 | "@webpack-cli/serve" "^1.6.0"
915 | colorette "^2.0.14"
916 | commander "^7.0.0"
917 | execa "^5.0.0"
918 | fastest-levenshtein "^1.0.12"
919 | import-local "^3.0.2"
920 | interpret "^2.2.0"
921 | rechoir "^0.7.0"
922 | webpack-merge "^5.7.3"
923 |
924 | webpack-merge@^5.7.3:
925 | version "5.8.0"
926 | resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-5.8.0.tgz#2b39dbf22af87776ad744c390223731d30a68f61"
927 | integrity sha512-/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q==
928 | dependencies:
929 | clone-deep "^4.0.1"
930 | wildcard "^2.0.0"
931 |
932 | webpack-sources@^3.2.2:
933 | version "3.2.3"
934 | resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-3.2.3.tgz#2d4daab8451fd4b240cc27055ff6a0c2ccea0cde"
935 | integrity sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==
936 |
937 | webpack@^5.66.0:
938 | version "5.66.0"
939 | resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.66.0.tgz#789bf36287f407fc92b3e2d6f978ddff1bfc2dbb"
940 | integrity sha512-NJNtGT7IKpGzdW7Iwpn/09OXz9inIkeIQ/ibY6B+MdV1x6+uReqz/5z1L89ezWnpPDWpXF0TY5PCYKQdWVn8Vg==
941 | dependencies:
942 | "@types/eslint-scope" "^3.7.0"
943 | "@types/estree" "^0.0.50"
944 | "@webassemblyjs/ast" "1.11.1"
945 | "@webassemblyjs/wasm-edit" "1.11.1"
946 | "@webassemblyjs/wasm-parser" "1.11.1"
947 | acorn "^8.4.1"
948 | acorn-import-assertions "^1.7.6"
949 | browserslist "^4.14.5"
950 | chrome-trace-event "^1.0.2"
951 | enhanced-resolve "^5.8.3"
952 | es-module-lexer "^0.9.0"
953 | eslint-scope "5.1.1"
954 | events "^3.2.0"
955 | glob-to-regexp "^0.4.1"
956 | graceful-fs "^4.2.9"
957 | json-parse-better-errors "^1.0.2"
958 | loader-runner "^4.2.0"
959 | mime-types "^2.1.27"
960 | neo-async "^2.6.2"
961 | schema-utils "^3.1.0"
962 | tapable "^2.1.1"
963 | terser-webpack-plugin "^5.1.3"
964 | watchpack "^2.3.1"
965 | webpack-sources "^3.2.2"
966 |
967 | which@^2.0.1:
968 | version "2.0.2"
969 | resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1"
970 | integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==
971 | dependencies:
972 | isexe "^2.0.0"
973 |
974 | wildcard@^2.0.0:
975 | version "2.0.0"
976 | resolved "https://registry.yarnpkg.com/wildcard/-/wildcard-2.0.0.tgz#a77d20e5200c6faaac979e4b3aadc7b3dd7f8fec"
977 | integrity sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==
978 |
979 | yallist@^4.0.0:
980 | version "4.0.0"
981 | resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72"
982 | integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==
983 |
--------------------------------------------------------------------------------
/jest.config.js:
--------------------------------------------------------------------------------
1 | // eslint-disable-next-line no-undef
2 | module.exports = {
3 | clearMocks: true,
4 | coverageDirectory: "coverage",
5 | testEnvironment: "jsdom",
6 | };
7 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "react-use-error-boundary-development",
3 | "license": "MIT",
4 | "author": "Tate ",
5 | "homepage": "https://github.com/tatethurston/react-use-error-boundary#readme",
6 | "repository": {
7 | "type": "git",
8 | "url": "git+https://github.com/tatethurston/react-use-error-boundary.git"
9 | },
10 | "bugs": {
11 | "url": "https://github.com/tatethurston/react-use-error-boundary/issues"
12 | },
13 | "scripts": {
14 | "build:commonjs": "yarn tsc --module commonjs --outDir dist/cjs",
15 | "build:module": "yarn tsc",
16 | "build:watch": "yarn build --watch",
17 | "clean": "rm -rf dist/*",
18 | "lint": "yarn typecheck && prettier --check . && prettier-package-json --list-different package.json && eslint .",
19 | "lint:fix": "prettier --write . && prettier-package-json --write package.json && eslint --fix .",
20 | "lint:fix:md": "prettier --write '*.md'",
21 | "lint:fix:package": "prettier-package-json --write package.json",
22 | "lint:fix:ts": "eslint --fix './src/**/*.ts{,x}'",
23 | "package:build": "yarn install && yarn clean && yarn build:commonjs && yarn build:module && yarn package:prune && yarn package:copy:files",
24 | "package:copy:files": "cp ./LICENSE ./README.md dist/ && cp ./public.package.json dist/package.json",
25 | "package:prune": "find dist -name test.* -delete",
26 | "test": "jest src/*",
27 | "test:ci": "yarn test --coverage",
28 | "typecheck": "yarn tsc --noEmit && (cd example && yarn && yarn tsc --noEmit)",
29 | "typecheck:watch": "yarn typecheck --watch"
30 | },
31 | "devDependencies": {
32 | "@babel/preset-env": "^7.18.2",
33 | "@babel/preset-react": "^7.17.12",
34 | "@babel/preset-typescript": "^7.17.12",
35 | "@testing-library/react": "^13.3.0",
36 | "@testing-library/user-event": "^14.2.1",
37 | "@types/jest": "^28.1.3",
38 | "@types/node": "^18.0.0",
39 | "@types/react": "^18.0.14",
40 | "@typescript-eslint/eslint-plugin": "^5.29.0",
41 | "@typescript-eslint/parser": "^5.29.0",
42 | "babel-loader": "^8.2.5",
43 | "codecov": "^3.8.3",
44 | "eslint": "^8.18.0",
45 | "eslint-config-prettier": "^8.5.0",
46 | "eslint-plugin-react-hooks": "^4.6.0",
47 | "husky": "^4.3.0",
48 | "jest": "^28.1.1",
49 | "jest-environment-jsdom": "^28.1.1",
50 | "prettier": "^2.7.1",
51 | "prettier-package-json": "^2.6.3",
52 | "react": "^18.2.0",
53 | "react-dom": "^18.2.0",
54 | "typescript": "^4.7.4"
55 | },
56 | "husky": {
57 | "hooks": {
58 | "pre-commit": "yarn lint:fix"
59 | }
60 | }
61 | }
62 |
--------------------------------------------------------------------------------
/public.package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "react-use-error-boundary",
3 | "version": "3.0.0",
4 | "description": "A React error boundary hook for function components",
5 | "license": "MIT",
6 | "author": "Tate ",
7 | "homepage": "https://github.com/tatethurston/react-use-error-boundary#readme",
8 | "repository": {
9 | "type": "git",
10 | "url": "git+https://github.com/tatethurston/react-use-error-boundary.git"
11 | },
12 | "bugs": {
13 | "url": "https://github.com/tatethurston/react-use-error-boundary/issues"
14 | },
15 | "sideEffects": false,
16 | "types": "index.d.ts",
17 | "peerDependencies": {
18 | "react": ">= 16.8"
19 | },
20 | "main": "./cjs/index.js",
21 | "module": "./index.js",
22 | "exports": {
23 | "./package.json": "./package.json",
24 | ".": {
25 | "import": "./index.js",
26 | "module": "./index.js",
27 | "default": "./cjs/index.js"
28 | }
29 | },
30 | "keywords": [
31 | "componentDidCatch",
32 | "error boundary hook",
33 | "react error boundary",
34 | "react hook",
35 | "useErrorBoundary"
36 | ]
37 | }
38 |
--------------------------------------------------------------------------------
/src/index.tsx:
--------------------------------------------------------------------------------
1 | import React, {
2 | Component,
3 | useState,
4 | useCallback,
5 | createContext,
6 | useContext,
7 | MutableRefObject,
8 | useMemo,
9 | useRef,
10 | ComponentType,
11 | ReactNode,
12 | PropsWithChildren,
13 | ReactElement,
14 | ErrorInfo,
15 | } from "react";
16 |
17 | type ComponentDidCatch = (error: unknown, errorInfo: ErrorInfo) => void;
18 |
19 | interface ErrorBoundaryProps {
20 | error: unknown | undefined;
21 | onError: ComponentDidCatch;
22 | }
23 |
24 | class ErrorBoundary extends Component> {
25 | displayName = "ReactUseErrorBoundary";
26 |
27 | componentDidCatch(
28 | ...args: Parameters>
29 | ) {
30 | // silence React warning:
31 | // ErrorBoundary: Error boundaries should implement getDerivedStateFromError(). In that method, return a state update to display an error message or fallback UI
32 | this.setState({});
33 | this.props.onError(...args);
34 | }
35 |
36 | render() {
37 | return this.props.children;
38 | }
39 | }
40 |
41 | const noop = () => false;
42 |
43 | interface ErrorBoundaryCtx {
44 | componentDidCatch: MutableRefObject;
45 | error: unknown | undefined;
46 | setError: (error: Error | undefined) => void;
47 | }
48 |
49 | const errorBoundaryContext = createContext({
50 | componentDidCatch: { current: undefined },
51 | error: undefined,
52 | setError: noop,
53 | });
54 |
55 | // eslint-disable-next-line @typescript-eslint/ban-types
56 | export function ErrorBoundaryContext({
57 | children,
58 | }: {
59 | children?: ReactNode | undefined;
60 | }) {
61 | const [error, setError] = useState();
62 | const componentDidCatch = useRef();
63 | const ctx = useMemo(
64 | () => ({
65 | componentDidCatch,
66 | error,
67 | setError,
68 | }),
69 | [error]
70 | );
71 | return (
72 |
73 | {
76 | setError(error);
77 | componentDidCatch.current?.(error, errorInfo);
78 | }}
79 | >
80 | {children}
81 |
82 |
83 | );
84 | }
85 | ErrorBoundaryContext.displayName = "ReactUseErrorBoundaryContext";
86 |
87 | export function withErrorBoundary>(
88 | WrappedComponent: ComponentType
89 | // eslint-disable-next-line @typescript-eslint/no-explicit-any
90 | ): (props: PropsWithChildren) => ReactElement {
91 | function WithErrorBoundary(props: Props) {
92 | return (
93 |
94 |
95 |
96 | );
97 | }
98 | WithErrorBoundary.displayName = `WithErrorBoundary(${
99 | // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
100 | WrappedComponent.displayName ?? WrappedComponent.name ?? "Component"
101 | })`;
102 |
103 | return WithErrorBoundary;
104 | }
105 |
106 | type UseErrorBoundaryReturn = [
107 | error: unknown | undefined,
108 | resetError: () => void
109 | ];
110 |
111 | export function useErrorBoundary(
112 | componentDidCatch?: ComponentDidCatch
113 | ): UseErrorBoundaryReturn {
114 | const ctx = useContext(errorBoundaryContext);
115 | ctx.componentDidCatch.current = componentDidCatch;
116 | const resetError = useCallback(() => {
117 | ctx.setError(undefined);
118 | // eslint-disable-next-line react-hooks/exhaustive-deps
119 | }, []);
120 |
121 | return [ctx.error, resetError];
122 | }
123 |
--------------------------------------------------------------------------------
/src/test.tsx:
--------------------------------------------------------------------------------
1 | import React, { FC, useState } from "react";
2 | import { useErrorBoundary, withErrorBoundary } from ".";
3 | import { render, screen } from "@testing-library/react";
4 | import userEvent from "@testing-library/user-event";
5 |
6 | // suppress error boundary console errors in test output
7 | jest.spyOn(global.console, "error").mockImplementation();
8 | jest.spyOn(global.console, "warn").mockImplementation();
9 |
10 | const ThrowError: FC = () => {
11 | throw new Error("Bombs away 💣");
12 | };
13 |
14 | const HappyPath: FC = () => Happy Path
;
15 |
16 | describe(useErrorBoundary, () => {
17 | it("invokes the componentDidCatch handler when there is an error", () => {
18 | const componentDidCatch = jest.fn();
19 |
20 | const Example: FC = withErrorBoundary(() => {
21 | const [error] = useErrorBoundary(componentDidCatch);
22 | if (error) {
23 | return null;
24 | }
25 |
26 | return ;
27 | });
28 |
29 | render( );
30 |
31 | expect(componentDidCatch).toHaveBeenCalledTimes(1);
32 | });
33 |
34 | it("thrown primitives", () => {
35 | let error;
36 |
37 | const ThrowNonError: FC = () => {
38 | throw "Bombs away 💣";
39 | };
40 |
41 | const Example: FC = withErrorBoundary(() => {
42 | [error] = useErrorBoundary();
43 | if (error) {
44 | return Error: {error as string}
;
45 | }
46 |
47 | return ;
48 | });
49 |
50 | render( );
51 |
52 | expect(screen.queryByText(/Error:/)).toMatchInlineSnapshot(`
53 |
54 | Error:
55 | Bombs away 💣
56 |
57 | `);
58 | });
59 |
60 | it("does not invoke the componentDidCatch handler when there is not an error", () => {
61 | const componentDidCatch = jest.fn();
62 |
63 | const Example: FC = withErrorBoundary(() => {
64 | const [error] = useErrorBoundary(componentDidCatch);
65 | if (error) {
66 | return null;
67 | }
68 |
69 | return ;
70 | });
71 |
72 | render( );
73 |
74 | expect(componentDidCatch).toHaveBeenCalledTimes(0);
75 | });
76 |
77 | it("invoking resetError handler resets the error state", async () => {
78 | const Example: FC = withErrorBoundary(() => {
79 | const [shouldThrow, setShouldThrow] = useState(false);
80 | const [error, resetError] = useErrorBoundary();
81 |
82 | if (error) {
83 | return (
84 | <>
85 | Error
86 | {
88 | setShouldThrow(false);
89 | resetError();
90 | }}
91 | >
92 | Reset Error
93 |
94 | >
95 | );
96 | }
97 |
98 | return (
99 | <>
100 | Happy Path
101 | {shouldThrow && }
102 | {
104 | setShouldThrow(true);
105 | }}
106 | >
107 | Throw Error
108 |
109 | >
110 | );
111 | });
112 |
113 | render( );
114 | expect(screen.queryByText("Happy Path")).not.toBeNull();
115 | expect(screen.queryByText("Error")).toBeNull();
116 |
117 | await userEvent.click(screen.getByText("Throw Error"));
118 |
119 | expect(screen.queryByText("Happy Path")).toBeNull();
120 | expect(screen.queryByText("Error")).not.toBeNull();
121 |
122 | await userEvent.click(screen.getByText("Reset Error"));
123 |
124 | expect(screen.queryByText("Happy Path")).not.toBeNull();
125 | expect(screen.queryByText("Error")).toBeNull();
126 | });
127 | });
128 |
--------------------------------------------------------------------------------
/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "allowJs": false,
4 | "declaration": true,
5 | "esModuleInterop": true,
6 | "forceConsistentCasingInFileNames": true,
7 | "isolatedModules": true,
8 | "jsx": "react",
9 | "module": "ESNext",
10 | "moduleResolution": "Node",
11 | "noEmitOnError": false,
12 | "outDir": "dist",
13 | "removeComments": true,
14 | "resolveJsonModule": true,
15 | "rootDir": "src",
16 | "skipLibCheck": true,
17 | "sourceMap": false,
18 | "strict": true,
19 | "target": "ESNext"
20 | },
21 | "include": ["src"]
22 | }
23 |
--------------------------------------------------------------------------------