├── .github ├── ISSUE_TEMPLATE │ ├── bug_report.md │ └── feature_request.md └── workflows │ └── main.yaml ├── .gitignore ├── .tool-versions ├── CODE_OF_CONDUCT.md ├── EXAMPLES.md ├── LICENSE ├── README.md ├── jest.config.js ├── lib ├── executor.spec.ts ├── executor.ts ├── index.ts ├── label.spec.ts ├── label.ts ├── promises.ts ├── types.ts ├── use.spec.ts ├── use.ts ├── validation.spec.ts └── validation.ts ├── package.json ├── pnpm-lock.yaml ├── tsconfig.json └── tsup.config.ts /.github/ISSUE_TEMPLATE/bug_report.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Bug report 3 | about: Create a report to help improve this library 4 | title: '' 5 | labels: '' 6 | assignees: '' 7 | 8 | --- 9 | 10 | **Describe the bug** 11 | A clear and concise description of what the bug is. 12 | 13 | **To Reproduce** 14 | Steps to reproduce the behavior: 15 | 1. Go to '...' 16 | 2. Click on '....' 17 | 3. Scroll down to '....' 18 | 4. See error 19 | 20 | **Expected behavior** 21 | A clear and concise description of what you expected to happen. 22 | 23 | **Desktop (please complete the following information):** 24 | - OS: [e.g. iOS] 25 | - Version [e.g. 22] 26 | 27 | **Additional context** 28 | Add any other context about the problem here. 29 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/feature_request.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Feature request 3 | about: Suggest an idea for this library 4 | title: '' 5 | labels: '' 6 | assignees: '' 7 | 8 | --- 9 | 10 | **Is your feature request related to a problem? Please describe.** 11 | A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] 12 | 13 | **Describe the solution you'd like** 14 | A clear and concise description of what you want to happen. 15 | 16 | **Describe alternatives you've considered** 17 | A clear and concise description of any alternative solutions or features you've considered. 18 | 19 | **Additional context** 20 | Add any other context about the feature request here. 21 | -------------------------------------------------------------------------------- /.github/workflows/main.yaml: -------------------------------------------------------------------------------- 1 | name: Main 2 | 3 | on: 4 | push: 5 | branches: 6 | - canary 7 | pull_request: 8 | 9 | jobs: 10 | build: 11 | name: Build 12 | runs-on: ubuntu-latest 13 | env: 14 | CI: true 15 | steps: 16 | - name: Checkout Repository 17 | uses: actions/checkout@v4 18 | 19 | - name: Setup Node.js 20 | uses: actions/setup-node@v4 21 | with: 22 | node-version: 20 23 | 24 | - uses: pnpm/action-setup@v2 25 | name: Install pnpm 26 | id: pnpm-install 27 | with: 28 | version: 8 29 | run_install: false 30 | 31 | - name: Get pnpm Store Directory 32 | id: pnpm-cache 33 | shell: bash 34 | run: | 35 | echo "STORE_PATH=$(pnpm store path)" >> $GITHUB_OUTPUT 36 | 37 | - uses: actions/cache@v4 38 | name: Setup pnpm Cache 39 | with: 40 | path: ${{ steps.pnpm-cache.outputs.STORE_PATH }} 41 | key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }} 42 | restore-keys: | 43 | ${{ runner.os }}-pnpm-store- 44 | 45 | - name: Install Dependencies 46 | run: pnpm install 47 | 48 | - name: Check Types 49 | run: pnpm type-check 50 | 51 | - name: Build 52 | run: pnpm build 53 | test: 54 | name: Test with Node.js ${{ matrix.node }} 55 | runs-on: ubuntu-latest 56 | strategy: 57 | matrix: 58 | node: [16, 18, 20, 21] 59 | env: 60 | CI: true 61 | steps: 62 | - name: Checkout Repository 63 | uses: actions/checkout@v4 64 | 65 | - name: Setup Node.js 66 | uses: actions/setup-node@v4 67 | with: 68 | node-version: ${{ matrix.node }} 69 | 70 | - uses: pnpm/action-setup@v2 71 | name: Install pnpm 72 | id: pnpm-install 73 | with: 74 | version: 8 75 | run_install: false 76 | 77 | - name: Get pnpm Store Directory 78 | id: pnpm-cache 79 | shell: bash 80 | run: | 81 | echo "STORE_PATH=$(pnpm store path)" >> $GITHUB_OUTPUT 82 | 83 | - uses: actions/cache@v4 84 | name: Setup pnpm Cache 85 | with: 86 | path: ${{ steps.pnpm-cache.outputs.STORE_PATH }} 87 | key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }} 88 | restore-keys: | 89 | ${{ runner.os }}-pnpm-store- 90 | 91 | - name: Install Dependencies 92 | run: pnpm install 93 | 94 | - name: Test 95 | run: pnpm test 96 | 97 | - name: Upload Code Coverage Results 98 | uses: codecov/codecov-action@v3 99 | with: 100 | file: ./coverage/coverage-final.json 101 | fail_ci_if_error: true 102 | verbose: true 103 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # .gitignore generated from https://github.com/github/gitignore/blob/master/Node.gitignore 2 | 3 | # Logs 4 | logs 5 | *.log 6 | npm-debug.log* 7 | yarn-debug.log* 8 | yarn-error.log* 9 | lerna-debug.log* 10 | .pnpm-debug.log* 11 | 12 | # Diagnostic reports (https://nodejs.org/api/report.html) 13 | report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json 14 | 15 | # Runtime data 16 | pids 17 | *.pid 18 | *.seed 19 | *.pid.lock 20 | 21 | # Directory for instrumented libs generated by jscoverage/JSCover 22 | lib-cov 23 | 24 | # Coverage directory used by tools like istanbul 25 | coverage 26 | *.lcov 27 | 28 | # nyc test coverage 29 | .nyc_output 30 | 31 | # Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) 32 | .grunt 33 | 34 | # Bower dependency directory (https://bower.io/) 35 | bower_components 36 | 37 | # node-waf configuration 38 | .lock-wscript 39 | 40 | # Compiled binary addons (https://nodejs.org/api/addons.html) 41 | build/Release 42 | 43 | # Dependency directories 44 | node_modules/ 45 | jspm_packages/ 46 | 47 | # Snowpack dependency directory (https://snowpack.dev/) 48 | web_modules/ 49 | 50 | # TypeScript cache 51 | *.tsbuildinfo 52 | 53 | # Optional npm cache directory 54 | .npm 55 | 56 | # Optional eslint cache 57 | .eslintcache 58 | 59 | # Microbundle cache 60 | .rpt2_cache/ 61 | .rts2_cache_cjs/ 62 | .rts2_cache_es/ 63 | .rts2_cache_umd/ 64 | 65 | # Optional REPL history 66 | .node_repl_history 67 | 68 | # Output of 'npm pack' 69 | *.tgz 70 | 71 | # Yarn Integrity file 72 | .yarn-integrity 73 | 74 | # dotenv environment variables file 75 | .env 76 | .env.test 77 | .env.production 78 | 79 | # parcel-bundler cache (https://parceljs.org/) 80 | .cache 81 | .parcel-cache 82 | 83 | # Next.js build output 84 | .next 85 | out 86 | 87 | # Nuxt.js build / generate output 88 | .nuxt 89 | dist 90 | 91 | # Gatsby files 92 | .cache/ 93 | # Comment in the public line in if your project uses Gatsby and not Next.js 94 | # https://nextjs.org/blog/next-9-1#public-directory-support 95 | # public 96 | 97 | # vuepress build output 98 | .vuepress/dist 99 | 100 | # Serverless directories 101 | .serverless/ 102 | 103 | # FuseBox cache 104 | .fusebox/ 105 | 106 | # DynamoDB Local files 107 | .dynamodb/ 108 | 109 | # TernJS port file 110 | .tern-port 111 | 112 | # Stores VSCode versions used for testing VSCode extensions 113 | .vscode-test 114 | 115 | yarn.lock 116 | package-lock.json 117 | -------------------------------------------------------------------------------- /.tool-versions: -------------------------------------------------------------------------------- 1 | pnpm 8.14.3 2 | -------------------------------------------------------------------------------- /CODE_OF_CONDUCT.md: -------------------------------------------------------------------------------- 1 | # Contributor Covenant Code of Conduct 2 | 3 | ## Our Pledge 4 | 5 | In the interest of fostering an open and welcoming environment, we as 6 | contributors and maintainers pledge to making participation in our project and 7 | our community a harassment-free experience for everyone, regardless of age, body 8 | size, disability, ethnicity, sex characteristics, gender identity and expression, 9 | level of experience, education, socio-economic status, nationality, personal 10 | appearance, race, religion, or sexual identity and orientation. 11 | 12 | ## Our Standards 13 | 14 | Examples of behavior that contributes to creating a positive environment 15 | include: 16 | 17 | * Using welcoming and inclusive language 18 | * Being respectful of differing viewpoints and experiences 19 | * Gracefully accepting constructive criticism 20 | * Focusing on what is best for the community 21 | * Showing empathy towards other community members 22 | 23 | Examples of unacceptable behavior by participants include: 24 | 25 | * The use of sexualized language or imagery and unwelcome sexual attention or 26 | advances 27 | * Trolling, insulting/derogatory comments, and personal or political attacks 28 | * Public or private harassment 29 | * Publishing others' private information, such as a physical or electronic 30 | address, without explicit permission 31 | * Other conduct which could reasonably be considered inappropriate in a 32 | professional setting 33 | 34 | ## Our Responsibilities 35 | 36 | Project maintainers are responsible for clarifying the standards of acceptable 37 | behavior and are expected to take appropriate and fair corrective action in 38 | response to any instances of unacceptable behavior. 39 | 40 | Project maintainers have the right and responsibility to remove, edit, or 41 | reject comments, commits, code, wiki edits, issues, and other contributions 42 | that are not aligned to this Code of Conduct, or to ban temporarily or 43 | permanently any contributor for other behaviors that they deem inappropriate, 44 | threatening, offensive, or harmful. 45 | 46 | ## Scope 47 | 48 | This Code of Conduct applies both within project spaces and in public spaces 49 | when an individual is representing the project or its community. Examples of 50 | representing a project or community include using an official project e-mail 51 | address, posting via an official social media account, or acting as an appointed 52 | representative at an online or offline event. Representation of a project may be 53 | further defined and clarified by project maintainers. 54 | 55 | ## Enforcement 56 | 57 | Instances of abusive, harassing, or otherwise unacceptable behavior may be 58 | reported by contacting the project team at htunnicliff@hey.com. All 59 | complaints will be reviewed and investigated and will result in a response that 60 | is deemed necessary and appropriate to the circumstances. The project team is 61 | obligated to maintain confidentiality with regard to the reporter of an incident. 62 | Further details of specific enforcement policies may be posted separately. 63 | 64 | Project maintainers who do not follow or enforce the Code of Conduct in good 65 | faith may face temporary or permanent repercussions as determined by other 66 | members of the project's leadership. 67 | 68 | ## Attribution 69 | 70 | This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, 71 | available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html 72 | 73 | [homepage]: https://www.contributor-covenant.org 74 | 75 | For answers to common questions about this code of conduct, see 76 | https://www.contributor-covenant.org/faq 77 | -------------------------------------------------------------------------------- /EXAMPLES.md: -------------------------------------------------------------------------------- 1 | ## Examples 2 | 3 | ### Writing Middleware 4 | 5 | Middleware that does work before a request: 6 | 7 | ```ts 8 | import type { Middleware } from "next-api-middleware"; 9 | 10 | export const addRequestUUID: Middleware = async (req, res, next) => { 11 | // Set a custom header 12 | res.setHeader("X-Response-ID", uuid()); 13 | 14 | // Execute the remaining middleware 15 | await next(); 16 | }; 17 | ``` 18 | 19 | Middleware that does work before _and_ after a request: 20 | 21 | ```ts 22 | export const addRequestTiming = async (req, res, next) => { 23 | // Set a custom header before other middleware and the route handler 24 | res.setHeader("X-Timing-Start", new Date().getTime()); 25 | 26 | // Execute the remaining middleware 27 | await next(); 28 | 29 | // Set a custom header 30 | res.setHeader("X-Timing-End", new Date().getTime()); 31 | }; 32 | ``` 33 | 34 | Middleware that catches errors that occur in remaining middleware _and_ the request: 35 | 36 | ```ts 37 | export const logErrorsWithACME: Middleware = async (req, res, next) => { 38 | try { 39 | // Catch any errors that are thrown in remaining 40 | // middleware and the API route handler 41 | await next(); 42 | } catch (error) { 43 | Acme.captureException(error); 44 | res.status(500); 45 | res.json({ error: error.message }); 46 | } 47 | }; 48 | ``` 49 | 50 | ### Middleware groups with `label` 51 | 52 | Using `label` creates a middleware group that, by default, doesn't invoke any middleware. Instead, it allows choosing specific middleware by supplying labels as arguments in the API route. 53 | 54 | ```ts 55 | import { label } from "next-api-middleware"; 56 | import { 57 | addRequestTiming, 58 | logErrorsWithACME, 59 | addRequestUUID, 60 | } from "../helpers"; 61 | 62 | // Create a middleware wrapper that imports middleware and 63 | // assigns friendly labels 64 | const withMiddleware = label({ 65 | timing: addRequestTiming, 66 | logErrors: logErrorsWithACME, 67 | uuids: addRequestUUID, 68 | all: [addRequestTiming, logErrorsWithACME, addRequestUUID], 69 | }); 70 | 71 | const apiRouteHandler = async (req, res) => { 72 | const { name } = req.locals.user; 73 | 74 | res.status(200); 75 | res.send(`Hello, ${name}!`); 76 | }; 77 | 78 | // Only invoke `addRequestTiming` and `logErrorsWithACME`, using their 79 | // friendly labels 80 | export default withMiddleware("timing", "logErrors")(apiRouteHandler); 81 | ``` 82 | 83 | ### Middleware groups with `use` 84 | 85 | The `use` method creates a higher order function that applies middleware to an API route. `use` accepts a list of values that evaluate to middleware functions. It also accepts arrays of middleware functions, which are flattened at runtime (order is preserved). 86 | 87 | ```js 88 | import { use } from "next-api-middleware"; 89 | import { 90 | addRequestTiming, 91 | logErrorsWithACME, 92 | addRequestUUID, 93 | } from "../helpers"; 94 | import { connectDatabase, loadUsers } from "../users"; 95 | 96 | // Create a middleware wrapper to be used on API routes 97 | // that need authentication 98 | export const withAuthMiddleware = use( 99 | addRequestTiming, 100 | logErrorsWithACME, 101 | addRequestUUID, 102 | connectDatabase, 103 | loadUsers 104 | ); 105 | 106 | // Create a middleware wrapper to be used on API routes 107 | // that are only used by guests 108 | export const withGuestMiddleware = use( 109 | isProduction ? [addRequestTiming, logErrorsWithACME] : [], 110 | addRequestUUID 111 | ); 112 | 113 | // Create a middleware wrapper using arrays of middleware 114 | // functions; these are flattened and executed in the order 115 | // in which they are provided 116 | export const withXYZMiddleware = use( 117 | [addRequestUUID, connectDatabase, loadUsers], 118 | [addRequestTiming, logErrorsWithACME] 119 | ); 120 | 121 | const apiRouteHandler = async (req, res) => { 122 | const { name } = req.locals.user; 123 | 124 | res.status(200); 125 | res.send(`Hello, ${name}!`); 126 | }; 127 | 128 | export default withAuthMiddleware(apiRouteHandler); 129 | ``` 130 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2020 Hunter Tunnicliff 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 |

2 |

Next.js API Middleware

3 |

4 | 5 |

6 | 7 | npm 8 | 9 | 10 | npm 11 | 12 | 13 | license 14 | 15 | 16 | GitHub Workflow Status 17 | 18 | 19 | Codecov 20 | 21 |

22 | 23 | ## Introduction 24 | 25 | > ⚠️ **This library was written to support API routes that use the Next.js [Pages Router](https://nextjs.org/docs/pages). It has not been tested with the [App Router](https://nextjs.org/docs/app).** 26 | 27 | [Next.js API routes](https://nextjs.org/docs/api-routes/introduction) are a ridiculously fun and simple way to add backend functionality to a React app. However, when it comes time to add middleware, there is no easy way to implement it. 28 | 29 | The official Next.js docs recommend writing functions [inside your API route handler](https://nextjs.org/docs/api-routes/api-middlewares). This is a huge step backward compared to the clean APIs provided by Express.js or Koa.js. 30 | 31 | This library attempts to provide minimal, clean, composable middleware patterns that are both productive and pleasant to use. 32 | 33 | ## Table of Contents 34 | 35 | - [Quick Start](#quick-start) 36 | - [How It Works](#quick-start) 37 | - [APIs](#apis) 38 | - [`label`](#label) 39 | - [`use`](#use) 40 | - [Usage Guide](#usage-guide) 41 | - [Advanced](#advanced) 42 | - [Middleware Factories](#middleware-factories) 43 | - [Middleware Signature](#middleware-types) 44 | - [Alternatives](#alternatives) 45 | 46 | ## Quick Start 47 | 48 | ```ts 49 | import { label, Middleware } from "next-api-middleware"; 50 | import * as Sentry from "@sentry/nextjs"; 51 | import nanoid from "nanoid"; 52 | 53 | // 1 – Create middleware functions 54 | 55 | const captureErrors: Middleware = async (req, res, next) => { 56 | try { 57 | // Catch any errors that are thrown in remaining 58 | // middleware and the API route handler 59 | await next(); 60 | } catch (err) { 61 | const eventId = Sentry.captureException(err); 62 | 63 | res.status(500); 64 | res.json({ error: err }); 65 | } 66 | }; 67 | 68 | const addRequestId: Middleware = async (req, res, next) => { 69 | // Let remaining middleware and API route execute 70 | await next(); 71 | 72 | // Apply header 73 | res.setHeader("X-Response-ID", nanoid()); 74 | }; 75 | 76 | // 2 – Use `label` to assemble all middleware 77 | 78 | const withMiddleware = label( 79 | { 80 | addRequestId, 81 | sentry: captureErrors, // <-- Optionally alias middleware 82 | }, 83 | ["sentry"] // <-- Provide a list of middleware to call automatically 84 | ); 85 | 86 | // 3 – Define your API route handler 87 | 88 | const apiRouteHandler = async (req, res) => { 89 | res.status(200); 90 | res.send("Hello world!"); 91 | }; 92 | 93 | // 4 – Choose middleware to invoke for this API route 94 | 95 | export default withMiddleware("addRequestId")(apiRouteHandler); 96 | ``` 97 | 98 | ## How It Works 99 | 100 | My mental model for how this library handles middleware functions is that of a "winding and unwinding stack." 101 | 102 | Let's imagine you've used `label` to add two middleware functions to an API route. 103 | 104 | When a request comes in, this is a rough impression of how that request makes its way through all middleware functions, the API route handler itself, and then back up through the middleware. 105 | 106 | ``` 107 | |-----------------|-----------------|--------------------| 108 | | Middleware #1 | Middleware #2 | API Route Handler | 109 | |-----------------|-----------------|--------------------| 110 | | | | | 111 | Request ------|----> Setup -----|----> Setup -----|-->------| | 112 | | | | | | 113 | |-----------------|-----------------| V | 114 | | | | | 115 | | await next() | await next() | API stuff | 116 | | | | | 117 | |-----------------|-----------------| | | 118 | | | | | | 119 | Response <----|--- Teardown <---|--- Teardown <---|---------| | 120 | | | | | 121 | |-----------------|-----------------|--------------------| 122 | ``` 123 | 124 | While this is a crummy ASCII diagram, I think it gives the right impression. The request winds its way though each middleware function in succession, hits the API route handler, and then proceeds to "unwind" its way through the stack. 125 | 126 | Every middleware function has the opportunity to go through three phases: 127 | 128 | 1. Setup 129 | 2. Waiting 130 | 3. Teardown 131 | 132 | The "Setup" phase covers everything that happens before `await next()`. The "Waiting" phase is really just `await next()`. The "Teardown" phase is the remaining code within a middleware function after `await next()`. 133 | 134 | It is worth noting that although these phases are available to all middleware functions, you don't need to take advantage of them all. 135 | 136 | For example, in error catching middleware you might simply wrap `await next()` in a `try / catch` block. On the other hand, you might have request timing middleware that captures a start time during the setup phase, waits, and then captures a finish time in the teardown phase. 137 | 138 | ## APIs 139 | 140 | ### `label` 141 | 142 | This is the primary utility for creating reusuable collections of middleware for use throughout many Next.js API routes. 143 | 144 | ```ts 145 | const withMiddleware = label(middleware, defaults); 146 | ``` 147 | 148 | #### Parameters 149 | 150 | - `middleware`: an object containing middleware functions or arrays of middleware 151 | - `defaults`: (optional) an array of `middleware` keys that will be invoked automatically 152 | 153 | #### Return Value 154 | 155 | `label` returns a function (conventionally referred to as `withMiddleware`) that uses currying to accept a list of middleware names to be invoked, followed by a Next.js API handler function. 156 | 157 | Typically, `withMiddleware` will be imported in API route files and used at the default export statement: 158 | 159 | ```ts 160 | import { withMiddleware } from "../helpers/my-middleware"; 161 | 162 | const apiRouteHandler = async (req, res) => { 163 | ... 164 | } 165 | 166 | export default withMiddleware("foo", "bar", "baz")(apiRouteHandler); 167 | ``` 168 | 169 | Though `label` could contain many middleware functions, the actual middleware invoked by an API route is determined by the names passed in to `withMiddleware`. 170 | 171 | #### Examples 172 | 173 | ##### Basic Use 174 | 175 | ```ts 176 | const logErrors = async (req, res, next) => { 177 | try { 178 | await next(); 179 | } catch (error) { 180 | console.error(error); 181 | res.status(500); 182 | res.json({ error }); 183 | } 184 | }; 185 | 186 | const withMiddleware = label({ 187 | logErrors, 188 | }); 189 | 190 | // export default withMiddleware("logErrors")(apiRouteHandler); 191 | ``` 192 | 193 | ##### Aliases 194 | 195 | ```ts 196 | const withMiddleware = label({ 197 | error: logErrors, 198 | }); 199 | 200 | // export default withMiddleware("error")(apiRouteHandler); 201 | ``` 202 | 203 | ##### Groups 204 | 205 | ```ts 206 | import { foo, bar, baz } from "./my-middleware"; 207 | 208 | const withMiddleware = label({ 209 | error: logErrors, 210 | myGroup: [foo, bar, baz], 211 | }); 212 | 213 | // export default withMiddleware("error", "myGroup")(apiRouteHandler); 214 | ``` 215 | 216 | ##### Defaults 217 | 218 | ```ts 219 | const withMiddleware = label( 220 | { 221 | error: logErrors, 222 | myGroup: [foo, bar, baz], 223 | }, 224 | ["error"] 225 | ); 226 | 227 | // export default withMiddleware("myGroup")(apiRouteHandler); 228 | ``` 229 | 230 | ### `use` 231 | 232 | This utility accepts middleware functions directly and executes them all in order. It is a simpler alternative to `label` that can be useful for handling one-off middleware functions. 233 | 234 | ```ts 235 | const withInlineMiddleware = use(...middleware); 236 | ``` 237 | 238 | #### Parameters 239 | 240 | - `middleware`: a list of middleware functions and/or arrays of middleware functions 241 | 242 | #### Return Value 243 | 244 | `use` returns a function that accepts a Next.js API route handler. 245 | 246 | #### Examples 247 | 248 | ##### CORS 249 | 250 | ```ts 251 | import { use } from "next-api-middleware"; 252 | import cors from "cors"; 253 | 254 | const apiRouteThatOnlyNeedsCORS = async (req, res) => { 255 | ... 256 | } 257 | 258 | export default use(cors())(apiRouteThatOnlyNeedsCORS); 259 | ``` 260 | 261 | ## Usage Guide 262 | 263 | See [EXAMPLES.md](./EXAMPLES.md) for more detailed examples of `label` and `use`. 264 | 265 | ## Advanced 266 | 267 | ### Middleware Factories 268 | 269 | Since `use` and `label` accept values that evaluate to middleware functions, this provides the opportunity to create custom middleware factories. 270 | 271 | Here's an example of a factory that generates a middleware function to only allow requests with a given HTTP method: 272 | 273 | ```ts 274 | import { Middleware } from "next-api-middleware"; 275 | 276 | const httpMethod = ( 277 | allowedHttpMethod: "GET" | "POST" | "PATCH" 278 | ): Middleware => { 279 | return async function (req, res, next) { 280 | if (req.method === allowedHttpMethod || req.method == "OPTIONS") { 281 | await next(); 282 | } else { 283 | res.status(404); 284 | res.end(); 285 | } 286 | }; 287 | }; 288 | 289 | export const postRequestsOnlyMiddleware = httpMethod("POST"); 290 | ``` 291 | 292 | ### Middleware Signature 293 | 294 | `Middleware` is inspired by the asyncronous middleware style popularized by Koa.js. 295 | 296 | ```ts 297 | type Middleware = ( 298 | req: Request, 299 | res: Response, 300 | next: () => Promise 301 | ) => Promise; 302 | ``` 303 | 304 | ## Alternatives 305 | 306 | - [next-connect](https://github.com/hoangvvo/next-connect) 307 | -------------------------------------------------------------------------------- /jest.config.js: -------------------------------------------------------------------------------- 1 | /** @type {import("@jest/types").Config.InitialOptions} */ 2 | export default { 3 | clearMocks: true, 4 | collectCoverage: true, 5 | collectCoverageFrom: ["lib/**", "!lib/index.ts", "!lib/types.ts"], 6 | coverageDirectory: "coverage", 7 | coverageProvider: "v8", 8 | coverageReporters: ["text", "json"], 9 | testEnvironment: "node", 10 | testMatch: ["**/*.spec.ts"], 11 | transform: { 12 | "^.+\\.(t|j)sx?$": ["@swc/jest"], 13 | }, 14 | resolver: "jest-ts-webcompat-resolver", 15 | setupFilesAfterEnv: ["jest-extended"], 16 | verbose: true, 17 | }; 18 | -------------------------------------------------------------------------------- /lib/executor.spec.ts: -------------------------------------------------------------------------------- 1 | import "jest-extended"; 2 | import { NextApiHandler, NextApiRequest, NextApiResponse } from "next"; 3 | import { Middleware } from "./types"; 4 | import { makeMiddlewareExecutor } from "./executor"; 5 | 6 | async function callExecutor(executor: NextApiHandler) { 7 | const req = {} as NextApiRequest; 8 | const res = {} as NextApiResponse; 9 | 10 | return executor(req, res); 11 | } 12 | 13 | describe("makeMiddlewareExecutor", () => { 14 | describe("Execution order", () => { 15 | it("invokes callback-style middleware in order", async () => { 16 | const [cb1, cb2, cb3] = new Array(3).fill(null).map(() => 17 | jest.fn((_req, _res, next) => { 18 | next(); 19 | }) 20 | ); 21 | 22 | const handler = jest.fn(async (_, __) => {}); 23 | 24 | await callExecutor(makeMiddlewareExecutor([cb1, cb2, cb3])(handler)); 25 | 26 | expect(cb1).toHaveBeenCalledBefore(cb2); 27 | expect(cb2).toHaveBeenCalledAfter(cb1); 28 | expect(cb3).toHaveBeenCalledAfter(cb2); 29 | expect(handler).toHaveBeenCalledAfter(cb3); 30 | }); 31 | 32 | it("invokes async middleware in order", async () => { 33 | const [a1, a2, a3] = new Array(3).fill(null).map(() => 34 | jest.fn(async (_req, _res, next) => { 35 | await next(); 36 | }) 37 | ); 38 | 39 | const handler = jest.fn(async (_, __) => {}); 40 | 41 | await callExecutor(makeMiddlewareExecutor([a1, a2, a3])(handler)); 42 | 43 | expect(a1).toHaveBeenCalledBefore(a2); 44 | expect(a2).toHaveBeenCalledAfter(a1); 45 | expect(a3).toHaveBeenCalledAfter(a2); 46 | expect(handler).toHaveBeenCalledAfter(a3); 47 | }); 48 | 49 | it("invokes a combination of callback-style and async middleware in the correct order", async () => { 50 | const [cb1, cb2, cb3] = new Array(3).fill(null).map(() => 51 | jest.fn((_req, _res, next) => { 52 | next(); 53 | }) 54 | ); 55 | 56 | const [a1, a2, a3] = new Array(3).fill(null).map(() => 57 | jest.fn(async (_req, _res, next) => { 58 | await next(); 59 | }) 60 | ); 61 | 62 | const handler = jest.fn(async (_, __) => {}); 63 | 64 | await callExecutor( 65 | makeMiddlewareExecutor([cb1, a1, cb2, a2, cb3, a3])(handler) 66 | ); 67 | 68 | expect(cb1).toHaveBeenCalledBefore(a1); 69 | expect(a1).toHaveBeenCalledAfter(cb1); 70 | expect(cb2).toHaveBeenCalledAfter(a1); 71 | expect(a2).toHaveBeenCalledAfter(cb2); 72 | expect(cb3).toHaveBeenCalledAfter(a2); 73 | expect(a3).toHaveBeenCalledAfter(cb3); 74 | expect(handler).toHaveBeenCalledAfter(a3); 75 | }); 76 | }); 77 | 78 | describe("Setup and teardown", () => { 79 | it("invokes callback-style setups, async setups, and async teardowns correctly", async () => { 80 | const [setup1, setup2, setup3, setup4, teardown1, teardown2] = new Array( 81 | 6 82 | ) 83 | .fill(null) 84 | .map(() => jest.fn()); 85 | 86 | const handler = jest.fn(async (_, __) => {}); 87 | 88 | const nestedWaiting1 = jest.fn(); 89 | const nestedWaiting2 = jest.fn(); 90 | 91 | const middleware: Middleware[] = [ 92 | (_, __, next) => { 93 | setup1(); 94 | next(); 95 | }, 96 | (_, __, next) => { 97 | setup2(); 98 | next(); 99 | }, 100 | async (_, __, next) => { 101 | setup3(); 102 | await new Promise((resolve) => { 103 | setTimeout(() => { 104 | nestedWaiting1(); 105 | resolve(); 106 | }, 500); 107 | }); 108 | await next(); 109 | teardown2(); 110 | }, 111 | (_, __, next) => { 112 | setup4(); 113 | next(); 114 | }, 115 | async (_, __, next) => { 116 | await next(); 117 | teardown1(); 118 | await new Promise((resolve) => { 119 | setTimeout(() => { 120 | nestedWaiting2(); 121 | resolve(); 122 | }, 500); 123 | }); 124 | }, 125 | ]; 126 | 127 | await callExecutor(makeMiddlewareExecutor(middleware)(handler)); 128 | 129 | expect(setup1).toHaveBeenCalledBefore(setup2); 130 | expect(setup3).toHaveBeenCalledAfter(setup2); 131 | expect(setup4).toHaveBeenCalledAfter(setup3); 132 | expect(setup4).toHaveBeenCalledAfter(nestedWaiting1); 133 | expect(handler).toHaveBeenCalledAfter(setup4); 134 | expect(teardown1).toHaveBeenCalledAfter(handler); 135 | expect(teardown2).toHaveBeenCalledAfter(nestedWaiting2); 136 | expect(teardown2).toHaveBeenCalledAfter(teardown1); 137 | }); 138 | }); 139 | 140 | describe("Error handling", () => { 141 | it("prevents further middleware and handler execution when callback-style middleware fails", async () => { 142 | const [cb1, cb2, cb3] = new Array(3).fill(null).map(() => 143 | jest.fn((_req, _res, next) => { 144 | next(); 145 | }) 146 | ); 147 | 148 | const cbFailing = jest.fn((_req, _res, next) => { 149 | next(new Error("Failure")); 150 | }); 151 | 152 | const [a1, a2, a3] = new Array(3).fill(null).map(() => 153 | jest.fn(async (_req, _res, next) => { 154 | await next(); 155 | }) 156 | ); 157 | 158 | const handler = jest.fn(async (_, __) => {}); 159 | 160 | expect( 161 | callExecutor( 162 | makeMiddlewareExecutor([cb1, a1, cb2, cbFailing, a2, cb3, a3])( 163 | handler 164 | ) 165 | ) 166 | ).toReject(); 167 | 168 | expect(cb1).toHaveBeenCalledBefore(a1); 169 | expect(a1).toHaveBeenCalledAfter(cb1); 170 | expect(cb2).toHaveBeenCalledAfter(a1); 171 | expect(cbFailing).toHaveBeenCalledAfter(cb2); 172 | expect(a2).not.toHaveBeenCalled(); 173 | expect(cb3).not.toHaveBeenCalled(); 174 | expect(a3).not.toHaveBeenCalled(); 175 | expect(handler).not.toHaveBeenCalled(); 176 | }); 177 | 178 | it("prevents further middleware and handler execution when async middleware fails", async () => { 179 | const [cb1, cb2, cb3] = new Array(3).fill(null).map(() => 180 | jest.fn((_req, _res, next) => { 181 | next(); 182 | }) 183 | ); 184 | 185 | const aFailing = jest.fn(async (_req, _res, next) => { 186 | throw new Error("Failed"); 187 | }); 188 | 189 | const [a1, a2, a3] = new Array(3).fill(null).map(() => 190 | jest.fn(async (_req, _res, next) => { 191 | await next(); 192 | }) 193 | ); 194 | 195 | const handler = jest.fn(async (_, __) => {}); 196 | 197 | expect( 198 | callExecutor( 199 | makeMiddlewareExecutor([cb1, a1, cb2, aFailing, a2, cb3, a3])(handler) 200 | ) 201 | ).toReject(); 202 | 203 | expect(cb1).toHaveBeenCalledBefore(a1); 204 | expect(a1).toHaveBeenCalledAfter(cb1); 205 | expect(cb2).toHaveBeenCalledAfter(a1); 206 | expect(aFailing).toHaveBeenCalledAfter(cb2); 207 | expect(a2).not.toHaveBeenCalled(); 208 | expect(cb3).not.toHaveBeenCalled(); 209 | expect(a3).not.toHaveBeenCalled(); 210 | expect(handler).not.toHaveBeenCalled(); 211 | }); 212 | 213 | it("prevents further middleware and handler execution when async middleware fails using soley async middleware", async () => { 214 | const aFailing = jest.fn(async (_req, _res, _next) => { 215 | throw new Error("Failed"); 216 | }); 217 | 218 | const [a1, a2, a3] = new Array(3).fill(null).map(() => 219 | jest.fn(async (_req, _res, next) => { 220 | await next(); 221 | }) 222 | ); 223 | 224 | const handler = jest.fn(async (_, __) => {}); 225 | 226 | expect( 227 | callExecutor(makeMiddlewareExecutor([a1, a2, aFailing, a3])(handler)) 228 | ).toReject(); 229 | 230 | expect(a1).toHaveBeenCalledBefore(a2); 231 | expect(a2).toHaveBeenCalledAfter(a1); 232 | expect(aFailing).toHaveBeenCalledAfter(a2); 233 | expect(a3).not.toBeCalled(); 234 | expect(handler).not.toBeCalled(); 235 | }); 236 | 237 | it("enables async middleware to capture errors", async () => { 238 | const aFailing = jest.fn(async (_req, _res, _next) => { 239 | throw new Error("Failed"); 240 | }); 241 | 242 | const caughtError = jest.fn(); 243 | 244 | const aErrorHandler = jest.fn(async (_req, _res, next) => { 245 | try { 246 | await next(); 247 | } catch (err) { 248 | caughtError(err); 249 | } 250 | }); 251 | 252 | const [a1, a2, a3] = new Array(3).fill(null).map(() => 253 | jest.fn(async (_req, _res, next) => { 254 | await next(); 255 | }) 256 | ); 257 | 258 | const handler = jest.fn(async (_, __) => {}); 259 | 260 | await callExecutor( 261 | makeMiddlewareExecutor([a1, a2, aErrorHandler, a3, aFailing])(handler) 262 | ); 263 | 264 | expect(a1).toHaveBeenCalledBefore(a2); 265 | expect(a2).toHaveBeenCalledAfter(a1); 266 | expect(aErrorHandler).toHaveBeenCalledAfter(a2); 267 | expect(a3).toHaveBeenCalledAfter(aErrorHandler); 268 | expect(aFailing).toHaveBeenCalledAfter(a3); 269 | expect(handler).not.toBeCalled(); 270 | expect(caughtError).toBeCalled(); 271 | }); 272 | }); 273 | }); 274 | -------------------------------------------------------------------------------- /lib/executor.ts: -------------------------------------------------------------------------------- 1 | import { NextApiHandler, NextApiRequest, NextApiResponse } from "next"; 2 | import { controlledPromise, isPromise } from "./promises"; 3 | import { Middleware } from "./types"; 4 | 5 | // This gets invoked internally by `use` and `label` 6 | export function makeMiddlewareExecutor(middlewareFns: Middleware[]) { 7 | // This curried function receives an API route 8 | return function curryApiHandler(apiRouteFn: NextApiHandler): NextApiHandler { 9 | // The final function returned is a Next API handler that 10 | // is responsible for executing all the middleware provided, 11 | // as well as the API route handler 12 | return async function finalRouteHandler(req, res) { 13 | await new Executor(middlewareFns, apiRouteFn, req, res).run(); 14 | }; 15 | }; 16 | } 17 | 18 | export class Executor { 19 | /** 20 | * The first middleware function in the queue 21 | */ 22 | currentFn: Middleware; 23 | 24 | /** 25 | * Middleware remaining in the queue 26 | */ 27 | remaining: Middleware[]; 28 | 29 | /** 30 | * The return value of `currentFn` 31 | */ 32 | result?: void | Promise; 33 | 34 | /** 35 | * A controlled promise that is used to manage 36 | * the success or failure of this Executor 37 | */ 38 | internalPromise = controlledPromise(); 39 | succeed = this.internalPromise.resolve; 40 | fail = this.internalPromise.reject; 41 | 42 | /** 43 | * A controlled promise that is used to 44 | * "pause" async middleware from completing until 45 | * the rest of the `remaining` queue is executed 46 | */ 47 | teardownPromise = controlledPromise(); 48 | 49 | /** 50 | * Integer representing the position of the executor in 51 | * the "stack" of all middleware, starting at `1` 52 | */ 53 | stackPosition: number; 54 | 55 | constructor( 56 | [currentFn, ...remaining]: Middleware[], 57 | public apiRouteFn: NextApiHandler, 58 | public req: NextApiRequest, 59 | public res: NextApiResponse, 60 | previousStackPosition?: number 61 | ) { 62 | this.currentFn = currentFn; 63 | this.remaining = remaining; 64 | this.stackPosition = 1 + (previousStackPosition || 0); 65 | } 66 | 67 | /** 68 | * Execute the current middleware function. 69 | * 70 | * If it fails, the remaining middleware and API route 71 | * handler are not executed and the error is thrown up. 72 | * 73 | * If it succeeds, an executor is created to handle 74 | * the remaining middleware. 75 | */ 76 | async run(): Promise { 77 | try { 78 | const cleanupPromise = controlledPromise(); 79 | 80 | // Call the current function 81 | this.result = this.currentFn(this.req, this.res, (error?: any) => { 82 | cleanupPromise.resolve(); 83 | 84 | // Look for errors from synchronous middleware 85 | if (error) { 86 | // Throw errors to be caught in the try/catch block 87 | throw error; 88 | } 89 | 90 | // Return teardown promise to "pause" async middleware 91 | return this.teardownPromise.promise; 92 | }); 93 | 94 | let asyncMiddlewareFailed = false; 95 | 96 | // Add handlers to async middleware, if available 97 | if (isPromise(this.result)) { 98 | this.result.then( 99 | () => { 100 | this.succeed(); 101 | }, 102 | (err) => { 103 | asyncMiddlewareFailed = true; 104 | cleanupPromise.resolve(); 105 | this.fail(err); 106 | } 107 | ); 108 | } 109 | 110 | await cleanupPromise.promise; 111 | 112 | // Use a microtask to give async middleware a chance to fail 113 | queueMicrotask(() => { 114 | if (!asyncMiddlewareFailed) { 115 | // Things look good so far – execute the rest of the queue 116 | this.runRemaining(); 117 | } 118 | }); 119 | } catch (err) { 120 | // Catches errors from synchronous middleware 121 | this.fail(err); 122 | } 123 | 124 | return this.internalPromise.promise; 125 | } 126 | 127 | /** 128 | * Execute the remaining middleware, then resume the result 129 | * promise if it is available. 130 | */ 131 | async runRemaining(): Promise { 132 | try { 133 | if (this.remaining.length === 0) { 134 | // No more middleware, execute the API route handler 135 | await this.apiRouteFn(this.req, this.res); 136 | } else { 137 | // Recursively execute remaining middleware 138 | const remainingExecutor = new Executor( 139 | this.remaining, 140 | this.apiRouteFn, 141 | this.req, 142 | this.res, 143 | this.stackPosition 144 | ); 145 | 146 | await remainingExecutor.run(); 147 | } 148 | 149 | // The remaining queue is now empty 150 | this.finish(); 151 | } catch (err) { 152 | this.finish(err); 153 | } 154 | } 155 | 156 | /** 157 | * Ensure this executor finishes by handling errors 158 | * correctly, resuming async middleware (if the current 159 | * middleware is async), or resolving the internal 160 | * promise as a success. 161 | */ 162 | finish(error?: any) { 163 | if (isPromise(this.result)) { 164 | // Current middleware is async 165 | if (error) { 166 | // Let the result have a chance to handle the error 167 | this.teardownPromise.reject(error); 168 | } else { 169 | // Let the result continue its teardown 170 | this.teardownPromise.resolve(); 171 | } 172 | } else { 173 | // Current middleware is synchronous 174 | if (error) { 175 | // Synchronous middleware cannot handle errors, trigger a failure 176 | this.fail(error); 177 | } else { 178 | // Synchronous middleware has no teardown phase, trigger a success 179 | this.succeed(); 180 | } 181 | } 182 | } 183 | } 184 | -------------------------------------------------------------------------------- /lib/index.ts: -------------------------------------------------------------------------------- 1 | export * from "./label"; 2 | export * from "./use"; 3 | export * from "./types"; 4 | -------------------------------------------------------------------------------- /lib/label.spec.ts: -------------------------------------------------------------------------------- 1 | import { Middleware } from "./types"; 2 | import { label } from "./label"; 3 | 4 | describe("label", () => { 5 | it("throws an error for invalid middleware", () => { 6 | // @ts-expect-error 7 | expect(() => label({ notMiddleware: NaN })).toThrowError(); 8 | }); 9 | 10 | it("calls labeled middleware in order", async () => { 11 | const log: string[] = []; 12 | 13 | // Setup middleware 14 | const middleware1 = jest.fn((req, res, next) => next()); 15 | const middleware2 = jest.fn(async (req, res, next) => { 16 | log.push("setup middleware2"); 17 | await next(); 18 | log.push("teardown middleware2"); 19 | }); 20 | const middleware3 = jest.fn((req, res, next) => next()); 21 | const groupMiddleware1 = jest.fn(async (req, res, next) => { 22 | log.push("setup groupMiddleware1"); 23 | await next(); 24 | log.push("teardown groupMiddleware1"); 25 | }); 26 | const groupMiddleware2 = jest.fn(async (req, res, next) => { 27 | log.push("setup groupMiddleware2"); 28 | await next(); 29 | log.push("teardown groupMiddleware2"); 30 | }); 31 | 32 | const withMiddleware = label({ 33 | one: middleware1, 34 | two: middleware2, 35 | three: middleware3, 36 | sampleGroup: [groupMiddleware1, groupMiddleware2], 37 | }); 38 | 39 | const handler = jest.fn(); 40 | 41 | await withMiddleware("sampleGroup", "two")(handler)({} as any, {} as any); 42 | 43 | expect(middleware2).toBeCalled(); 44 | expect(groupMiddleware1).toBeCalled(); 45 | expect(groupMiddleware2).toBeCalled(); 46 | expect(handler).toBeCalled(); 47 | expect(log.toString()).toBe( 48 | [ 49 | "setup groupMiddleware1", 50 | "setup groupMiddleware2", 51 | "setup middleware2", 52 | "teardown middleware2", 53 | "teardown groupMiddleware2", 54 | "teardown groupMiddleware1", 55 | ].toString() 56 | ); 57 | }); 58 | 59 | it("calls default middleware", async () => { 60 | const middleware1 = jest.fn((req, res, next) => next()); 61 | 62 | const middlewareWithDefaults = label( 63 | { 64 | m1: middleware1, 65 | }, 66 | ["m1"] 67 | ); 68 | 69 | const handler = jest.fn(); 70 | 71 | await middlewareWithDefaults()(handler)({} as any, {} as any); 72 | 73 | expect(middleware1).toBeCalled(); 74 | expect(handler).toBeCalled(); 75 | }); 76 | 77 | it("throws errors for invalid middleware", async () => { 78 | const middleware = label({ 79 | normal: (req, res, next) => next(), 80 | }); 81 | 82 | expect(() => middleware("normal", [(a, b) => {}])).toThrowError( 83 | "Invalid middleware" 84 | ); 85 | 86 | expect(() => middleware("normal", (a, b) => {})).toThrowError( 87 | "Invalid middleware" 88 | ); 89 | 90 | // @ts-expect-error 91 | expect(() => middleware("missing")).toThrowError( 92 | 'Middleware "missing" not available' 93 | ); 94 | }); 95 | 96 | it("adds groups to final executed middleware", async () => { 97 | const m0: Middleware = jest.fn((req, res, next) => next()); 98 | const m1: Middleware = jest.fn((req, res, next) => next()); 99 | const m2: Middleware = jest.fn((req, res, next) => next()); 100 | 101 | const middleware = label({ 102 | m0, 103 | }); 104 | 105 | await middleware([m1, m2], "m0")(jest.fn())({} as any, {} as any); 106 | expect(m1).toBeCalled(); 107 | expect(m2).toBeCalled(); 108 | expect(m0).toBeCalled(); 109 | }); 110 | 111 | it("executes inline middleware", async () => { 112 | const middleware = label({}); 113 | 114 | const inlineFn = jest.fn((req, res, next) => next()); 115 | 116 | await middleware(inlineFn, inlineFn, inlineFn)(jest.fn())( 117 | {} as any, 118 | {} as any 119 | ); 120 | 121 | expect(inlineFn).toBeCalledTimes(3); 122 | }); 123 | }); 124 | -------------------------------------------------------------------------------- /lib/label.ts: -------------------------------------------------------------------------------- 1 | import { LabeledMiddleware, Middleware } from "./types"; 2 | import { makeMiddlewareExecutor } from "./executor"; 3 | import { isValidMiddleware, isValidMiddlewareArray } from "./validation"; 4 | 5 | export function label( 6 | middleware: T, 7 | defaults: (keyof T)[] = [] 8 | ) { 9 | // Check signatures 10 | isValidMiddlewareArray(Object.values(middleware).flat(), true); 11 | 12 | // Receive chosen middleware (either names or literal middleware functions) 13 | return function curryMiddlewareChoices( 14 | ...chosenMiddleware: (keyof T | Middleware | Middleware[])[] 15 | ) { 16 | const middlewareFns: Middleware[] = []; 17 | 18 | // Load middleware for each choice 19 | for (const choice of [...defaults, ...chosenMiddleware]) { 20 | // Choice is the name of a registered function, get from registered middleware 21 | if (typeof choice === "string") { 22 | const fn = middleware[choice]; 23 | if (!fn) { 24 | throw new Error(`Middleware "${choice}" not available`); 25 | } 26 | 27 | // Add middleware function or group to array 28 | middlewareFns.push(...(Array.isArray(fn) ? fn : [fn])); 29 | continue; 30 | } 31 | 32 | if (Array.isArray(choice) && isValidMiddlewareArray(choice, true)) { 33 | // Choice is an array of middleware functions 34 | middlewareFns.push(...choice); 35 | continue; 36 | } 37 | 38 | if (isValidMiddleware(choice, true)) { 39 | // Choice is a middleware function, add directly to array 40 | middlewareFns.push(choice); 41 | continue; 42 | } 43 | } 44 | 45 | // Make executor 46 | return makeMiddlewareExecutor(middlewareFns); 47 | }; 48 | } 49 | -------------------------------------------------------------------------------- /lib/promises.ts: -------------------------------------------------------------------------------- 1 | export function controlledPromise() { 2 | // Define variables to hold references to the resolve 3 | // and reject handlers within a real promise. 4 | let resolve: (value: Result | PromiseLike) => void; 5 | let reject: (err: Error) => void; 6 | 7 | // Create a promise and assign its actual resolver and rejecter 8 | // handlers to the reference variables 9 | const promise = new Promise((actualResolve, actualReject) => { 10 | resolve = actualResolve; 11 | reject = actualReject; 12 | }); 13 | 14 | return { 15 | promise, 16 | // @ts-ignore 17 | resolve: resolve, 18 | // @ts-ignore 19 | reject: reject, 20 | }; 21 | } 22 | 23 | export function isPromise(input: unknown): input is Promise { 24 | return typeof input === "object" && input !== null && "then" in input; 25 | } 26 | -------------------------------------------------------------------------------- /lib/types.ts: -------------------------------------------------------------------------------- 1 | import type { NextApiRequest, NextApiResponse } from "next"; 2 | 3 | export type Middleware = ( 4 | req: Request, 5 | res: Response, 6 | next: () => Promise 7 | ) => Promise; 8 | 9 | export type LabeledMiddleware< 10 | Request = NextApiRequest, 11 | Response = NextApiResponse 12 | > = { 13 | [name: string]: 14 | | Middleware 15 | | Array>; 16 | }; 17 | -------------------------------------------------------------------------------- /lib/use.spec.ts: -------------------------------------------------------------------------------- 1 | import { use } from "./use"; 2 | 3 | describe("use", () => { 4 | it("throws an error for invalid middleware", () => { 5 | expect(() => use(() => null)).toThrowError(); 6 | }); 7 | }); 8 | -------------------------------------------------------------------------------- /lib/use.ts: -------------------------------------------------------------------------------- 1 | import { Middleware } from "./types"; 2 | import { makeMiddlewareExecutor } from "./executor"; 3 | import { isValidMiddlewareArray } from "./validation"; 4 | 5 | export function use(...middleware: (Middleware | Middleware[])[]) { 6 | // Flatten middleware groups 7 | const middlewareFns = middleware.flat(); 8 | 9 | // Check signatures 10 | isValidMiddlewareArray(middlewareFns, true); 11 | 12 | // Make executor 13 | return makeMiddlewareExecutor(middlewareFns); 14 | } 15 | -------------------------------------------------------------------------------- /lib/validation.spec.ts: -------------------------------------------------------------------------------- 1 | import { isValidMiddleware } from "./validation"; 2 | 3 | describe("isValidMiddleware", () => { 4 | it("returns false for invalid input", () => { 5 | expect(isValidMiddleware(NaN)).toBe(false); 6 | expect(isValidMiddleware(0)).toBe(false); 7 | expect(isValidMiddleware({})).toBe(false); 8 | expect(isValidMiddleware(Function)).toBe(false); 9 | expect(isValidMiddleware([])).toBe(false); 10 | expect(isValidMiddleware(false)).toBe(false); 11 | expect(isValidMiddleware(true)).toBe(false); 12 | expect(isValidMiddleware("")).toBe(false); 13 | expect(isValidMiddleware((arg1, arg2) => {})).toBe(false); 14 | expect(isValidMiddleware((arg1, arg2, arg3, arg4) => {})).toBe(false); 15 | }); 16 | 17 | it("returns true for valid input", () => { 18 | expect(isValidMiddleware((arg1, arg2, arg3) => {})).toBe(true); 19 | }); 20 | 21 | it("throws errors for invalid input when throwOnError is enabled", () => { 22 | expect(() => isValidMiddleware("", true)).toThrowError( 23 | "Invalid middleware" 24 | ); 25 | }); 26 | }); 27 | -------------------------------------------------------------------------------- /lib/validation.ts: -------------------------------------------------------------------------------- 1 | import { Middleware } from "./types"; 2 | 3 | export function isValidMiddleware( 4 | input: unknown, 5 | throwOnFailure = false 6 | ): input is Middleware { 7 | const valid = typeof input === "function" && input.length === 3; 8 | if (!valid && throwOnFailure) { 9 | throw new Error("Invalid middleware"); 10 | } 11 | return valid; 12 | } 13 | 14 | export function isValidMiddlewareArray( 15 | input: unknown[], 16 | throwOnFailure = false 17 | ): input is Middleware[] { 18 | return input.every((item) => isValidMiddleware(item, throwOnFailure)); 19 | } 20 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "next-api-middleware", 3 | "version": "3.0.0", 4 | "description": "Middleware solution for Next.js API routes", 5 | "author": "Hunter Tunnicliff ", 6 | "repository": "htunnicliff/next-api-middleware", 7 | "license": "MIT", 8 | "type": "module", 9 | "exports": { 10 | "require": "./dist/index.cjs", 11 | "import": "./dist/index.js" 12 | }, 13 | "types": "./dist/index.d.ts", 14 | "engines": { 15 | "node": ">=16.0.0" 16 | }, 17 | "keywords": [ 18 | "next", 19 | "next.js", 20 | "middleware", 21 | "API routes" 22 | ], 23 | "files": [ 24 | "dist", 25 | "LICENSE", 26 | "package.json", 27 | "README.md" 28 | ], 29 | "scripts": { 30 | "build": "tsup", 31 | "type-check": "tsc --pretty --noEmit", 32 | "test": "jest", 33 | "version": "pnpm test && pnpm build" 34 | }, 35 | "devDependencies": { 36 | "@swc/core": "^1.3.24", 37 | "@swc/jest": "^0.2.24", 38 | "@types/jest": "^26.0.24", 39 | "@types/node": "^16.18.10", 40 | "jest": "^27.5.1", 41 | "jest-extended": "^0.11.5", 42 | "jest-ts-webcompat-resolver": "^1.0.0", 43 | "next": "^12.3.4", 44 | "tsup": "^6.5.0", 45 | "typescript": "^4.9.4" 46 | }, 47 | "peerDependencies": { 48 | "next": ">=10" 49 | } 50 | } 51 | -------------------------------------------------------------------------------- /pnpm-lock.yaml: -------------------------------------------------------------------------------- 1 | lockfileVersion: '6.0' 2 | 3 | settings: 4 | autoInstallPeers: true 5 | excludeLinksFromLockfile: false 6 | 7 | devDependencies: 8 | '@swc/core': 9 | specifier: ^1.3.24 10 | version: 1.3.24 11 | '@swc/jest': 12 | specifier: ^0.2.24 13 | version: 0.2.24(@swc/core@1.3.24) 14 | '@types/jest': 15 | specifier: ^26.0.24 16 | version: 26.0.24 17 | '@types/node': 18 | specifier: ^16.18.10 19 | version: 16.18.10 20 | jest: 21 | specifier: ^27.5.1 22 | version: 27.5.1 23 | jest-extended: 24 | specifier: ^0.11.5 25 | version: 0.11.5 26 | jest-ts-webcompat-resolver: 27 | specifier: ^1.0.0 28 | version: 1.0.0(jest-resolve@27.5.1) 29 | next: 30 | specifier: ^12.3.4 31 | version: 12.3.4(@babel/core@7.20.5)(react-dom@18.2.0)(react@18.2.0) 32 | tsup: 33 | specifier: ^6.5.0 34 | version: 6.5.0(@swc/core@1.3.24)(typescript@4.9.4) 35 | typescript: 36 | specifier: ^4.9.4 37 | version: 4.9.4 38 | 39 | packages: 40 | 41 | /@ampproject/remapping@2.2.0: 42 | resolution: {integrity: sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==} 43 | engines: {node: '>=6.0.0'} 44 | dependencies: 45 | '@jridgewell/gen-mapping': 0.1.1 46 | '@jridgewell/trace-mapping': 0.3.17 47 | dev: true 48 | 49 | /@babel/code-frame@7.18.6: 50 | resolution: {integrity: sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==} 51 | engines: {node: '>=6.9.0'} 52 | dependencies: 53 | '@babel/highlight': 7.18.6 54 | dev: true 55 | 56 | /@babel/compat-data@7.20.5: 57 | resolution: {integrity: sha512-KZXo2t10+/jxmkhNXc7pZTqRvSOIvVv/+lJwHS+B2rErwOyjuVRh60yVpb7liQ1U5t7lLJ1bz+t8tSypUZdm0g==} 58 | engines: {node: '>=6.9.0'} 59 | dev: true 60 | 61 | /@babel/core@7.20.5: 62 | resolution: {integrity: sha512-UdOWmk4pNWTm/4DlPUl/Pt4Gz4rcEMb7CY0Y3eJl5Yz1vI8ZJGmHWaVE55LoxRjdpx0z259GE9U5STA9atUinQ==} 63 | engines: {node: '>=6.9.0'} 64 | dependencies: 65 | '@ampproject/remapping': 2.2.0 66 | '@babel/code-frame': 7.18.6 67 | '@babel/generator': 7.20.5 68 | '@babel/helper-compilation-targets': 7.20.0(@babel/core@7.20.5) 69 | '@babel/helper-module-transforms': 7.20.2 70 | '@babel/helpers': 7.20.6 71 | '@babel/parser': 7.20.5 72 | '@babel/template': 7.18.10 73 | '@babel/traverse': 7.20.5 74 | '@babel/types': 7.20.5 75 | convert-source-map: 1.9.0 76 | debug: 4.3.4 77 | gensync: 1.0.0-beta.2 78 | json5: 2.2.2 79 | semver: 6.3.0 80 | transitivePeerDependencies: 81 | - supports-color 82 | dev: true 83 | 84 | /@babel/generator@7.20.5: 85 | resolution: {integrity: sha512-jl7JY2Ykn9S0yj4DQP82sYvPU+T3g0HFcWTqDLqiuA9tGRNIj9VfbtXGAYTTkyNEnQk1jkMGOdYka8aG/lulCA==} 86 | engines: {node: '>=6.9.0'} 87 | dependencies: 88 | '@babel/types': 7.20.5 89 | '@jridgewell/gen-mapping': 0.3.2 90 | jsesc: 2.5.2 91 | dev: true 92 | 93 | /@babel/helper-compilation-targets@7.20.0(@babel/core@7.20.5): 94 | resolution: {integrity: sha512-0jp//vDGp9e8hZzBc6N/KwA5ZK3Wsm/pfm4CrY7vzegkVxc65SgSn6wYOnwHe9Js9HRQ1YTCKLGPzDtaS3RoLQ==} 95 | engines: {node: '>=6.9.0'} 96 | peerDependencies: 97 | '@babel/core': ^7.0.0 98 | dependencies: 99 | '@babel/compat-data': 7.20.5 100 | '@babel/core': 7.20.5 101 | '@babel/helper-validator-option': 7.18.6 102 | browserslist: 4.21.4 103 | semver: 6.3.0 104 | dev: true 105 | 106 | /@babel/helper-environment-visitor@7.18.9: 107 | resolution: {integrity: sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==} 108 | engines: {node: '>=6.9.0'} 109 | dev: true 110 | 111 | /@babel/helper-function-name@7.19.0: 112 | resolution: {integrity: sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w==} 113 | engines: {node: '>=6.9.0'} 114 | dependencies: 115 | '@babel/template': 7.18.10 116 | '@babel/types': 7.20.5 117 | dev: true 118 | 119 | /@babel/helper-hoist-variables@7.18.6: 120 | resolution: {integrity: sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==} 121 | engines: {node: '>=6.9.0'} 122 | dependencies: 123 | '@babel/types': 7.20.5 124 | dev: true 125 | 126 | /@babel/helper-module-imports@7.18.6: 127 | resolution: {integrity: sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==} 128 | engines: {node: '>=6.9.0'} 129 | dependencies: 130 | '@babel/types': 7.20.5 131 | dev: true 132 | 133 | /@babel/helper-module-transforms@7.20.2: 134 | resolution: {integrity: sha512-zvBKyJXRbmK07XhMuujYoJ48B5yvvmM6+wcpv6Ivj4Yg6qO7NOZOSnvZN9CRl1zz1Z4cKf8YejmCMh8clOoOeA==} 135 | engines: {node: '>=6.9.0'} 136 | dependencies: 137 | '@babel/helper-environment-visitor': 7.18.9 138 | '@babel/helper-module-imports': 7.18.6 139 | '@babel/helper-simple-access': 7.20.2 140 | '@babel/helper-split-export-declaration': 7.18.6 141 | '@babel/helper-validator-identifier': 7.19.1 142 | '@babel/template': 7.18.10 143 | '@babel/traverse': 7.20.5 144 | '@babel/types': 7.20.5 145 | transitivePeerDependencies: 146 | - supports-color 147 | dev: true 148 | 149 | /@babel/helper-plugin-utils@7.20.2: 150 | resolution: {integrity: sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==} 151 | engines: {node: '>=6.9.0'} 152 | dev: true 153 | 154 | /@babel/helper-simple-access@7.20.2: 155 | resolution: {integrity: sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA==} 156 | engines: {node: '>=6.9.0'} 157 | dependencies: 158 | '@babel/types': 7.20.5 159 | dev: true 160 | 161 | /@babel/helper-split-export-declaration@7.18.6: 162 | resolution: {integrity: sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==} 163 | engines: {node: '>=6.9.0'} 164 | dependencies: 165 | '@babel/types': 7.20.5 166 | dev: true 167 | 168 | /@babel/helper-string-parser@7.19.4: 169 | resolution: {integrity: sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==} 170 | engines: {node: '>=6.9.0'} 171 | dev: true 172 | 173 | /@babel/helper-validator-identifier@7.19.1: 174 | resolution: {integrity: sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==} 175 | engines: {node: '>=6.9.0'} 176 | dev: true 177 | 178 | /@babel/helper-validator-option@7.18.6: 179 | resolution: {integrity: sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==} 180 | engines: {node: '>=6.9.0'} 181 | dev: true 182 | 183 | /@babel/helpers@7.20.6: 184 | resolution: {integrity: sha512-Pf/OjgfgFRW5bApskEz5pvidpim7tEDPlFtKcNRXWmfHGn9IEI2W2flqRQXTFb7gIPTyK++N6rVHuwKut4XK6w==} 185 | engines: {node: '>=6.9.0'} 186 | dependencies: 187 | '@babel/template': 7.18.10 188 | '@babel/traverse': 7.20.5 189 | '@babel/types': 7.20.5 190 | transitivePeerDependencies: 191 | - supports-color 192 | dev: true 193 | 194 | /@babel/highlight@7.18.6: 195 | resolution: {integrity: sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==} 196 | engines: {node: '>=6.9.0'} 197 | dependencies: 198 | '@babel/helper-validator-identifier': 7.19.1 199 | chalk: 2.4.2 200 | js-tokens: 4.0.0 201 | dev: true 202 | 203 | /@babel/parser@7.20.5: 204 | resolution: {integrity: sha512-r27t/cy/m9uKLXQNWWebeCUHgnAZq0CpG1OwKRxzJMP1vpSU4bSIK2hq+/cp0bQxetkXx38n09rNu8jVkcK/zA==} 205 | engines: {node: '>=6.0.0'} 206 | hasBin: true 207 | dependencies: 208 | '@babel/types': 7.20.5 209 | dev: true 210 | 211 | /@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.20.5): 212 | resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} 213 | peerDependencies: 214 | '@babel/core': ^7.0.0-0 215 | dependencies: 216 | '@babel/core': 7.20.5 217 | '@babel/helper-plugin-utils': 7.20.2 218 | dev: true 219 | 220 | /@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.20.5): 221 | resolution: {integrity: sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==} 222 | peerDependencies: 223 | '@babel/core': ^7.0.0-0 224 | dependencies: 225 | '@babel/core': 7.20.5 226 | '@babel/helper-plugin-utils': 7.20.2 227 | dev: true 228 | 229 | /@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.20.5): 230 | resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} 231 | peerDependencies: 232 | '@babel/core': ^7.0.0-0 233 | dependencies: 234 | '@babel/core': 7.20.5 235 | '@babel/helper-plugin-utils': 7.20.2 236 | dev: true 237 | 238 | /@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.20.5): 239 | resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==} 240 | peerDependencies: 241 | '@babel/core': ^7.0.0-0 242 | dependencies: 243 | '@babel/core': 7.20.5 244 | '@babel/helper-plugin-utils': 7.20.2 245 | dev: true 246 | 247 | /@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.20.5): 248 | resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} 249 | peerDependencies: 250 | '@babel/core': ^7.0.0-0 251 | dependencies: 252 | '@babel/core': 7.20.5 253 | '@babel/helper-plugin-utils': 7.20.2 254 | dev: true 255 | 256 | /@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.20.5): 257 | resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} 258 | peerDependencies: 259 | '@babel/core': ^7.0.0-0 260 | dependencies: 261 | '@babel/core': 7.20.5 262 | '@babel/helper-plugin-utils': 7.20.2 263 | dev: true 264 | 265 | /@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.20.5): 266 | resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} 267 | peerDependencies: 268 | '@babel/core': ^7.0.0-0 269 | dependencies: 270 | '@babel/core': 7.20.5 271 | '@babel/helper-plugin-utils': 7.20.2 272 | dev: true 273 | 274 | /@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.20.5): 275 | resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==} 276 | peerDependencies: 277 | '@babel/core': ^7.0.0-0 278 | dependencies: 279 | '@babel/core': 7.20.5 280 | '@babel/helper-plugin-utils': 7.20.2 281 | dev: true 282 | 283 | /@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.20.5): 284 | resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} 285 | peerDependencies: 286 | '@babel/core': ^7.0.0-0 287 | dependencies: 288 | '@babel/core': 7.20.5 289 | '@babel/helper-plugin-utils': 7.20.2 290 | dev: true 291 | 292 | /@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.20.5): 293 | resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} 294 | peerDependencies: 295 | '@babel/core': ^7.0.0-0 296 | dependencies: 297 | '@babel/core': 7.20.5 298 | '@babel/helper-plugin-utils': 7.20.2 299 | dev: true 300 | 301 | /@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.20.5): 302 | resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} 303 | peerDependencies: 304 | '@babel/core': ^7.0.0-0 305 | dependencies: 306 | '@babel/core': 7.20.5 307 | '@babel/helper-plugin-utils': 7.20.2 308 | dev: true 309 | 310 | /@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.20.5): 311 | resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==} 312 | engines: {node: '>=6.9.0'} 313 | peerDependencies: 314 | '@babel/core': ^7.0.0-0 315 | dependencies: 316 | '@babel/core': 7.20.5 317 | '@babel/helper-plugin-utils': 7.20.2 318 | dev: true 319 | 320 | /@babel/plugin-syntax-typescript@7.20.0(@babel/core@7.20.5): 321 | resolution: {integrity: sha512-rd9TkG+u1CExzS4SM1BlMEhMXwFLKVjOAFFCDx9PbX5ycJWDoWMcwdJH9RhkPu1dOgn5TrxLot/Gx6lWFuAUNQ==} 322 | engines: {node: '>=6.9.0'} 323 | peerDependencies: 324 | '@babel/core': ^7.0.0-0 325 | dependencies: 326 | '@babel/core': 7.20.5 327 | '@babel/helper-plugin-utils': 7.20.2 328 | dev: true 329 | 330 | /@babel/template@7.18.10: 331 | resolution: {integrity: sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA==} 332 | engines: {node: '>=6.9.0'} 333 | dependencies: 334 | '@babel/code-frame': 7.18.6 335 | '@babel/parser': 7.20.5 336 | '@babel/types': 7.20.5 337 | dev: true 338 | 339 | /@babel/traverse@7.20.5: 340 | resolution: {integrity: sha512-WM5ZNN3JITQIq9tFZaw1ojLU3WgWdtkxnhM1AegMS+PvHjkM5IXjmYEGY7yukz5XS4sJyEf2VzWjI8uAavhxBQ==} 341 | engines: {node: '>=6.9.0'} 342 | dependencies: 343 | '@babel/code-frame': 7.18.6 344 | '@babel/generator': 7.20.5 345 | '@babel/helper-environment-visitor': 7.18.9 346 | '@babel/helper-function-name': 7.19.0 347 | '@babel/helper-hoist-variables': 7.18.6 348 | '@babel/helper-split-export-declaration': 7.18.6 349 | '@babel/parser': 7.20.5 350 | '@babel/types': 7.20.5 351 | debug: 4.3.4 352 | globals: 11.12.0 353 | transitivePeerDependencies: 354 | - supports-color 355 | dev: true 356 | 357 | /@babel/types@7.20.5: 358 | resolution: {integrity: sha512-c9fst/h2/dcF7H+MJKZ2T0KjEQ8hY/BNnDk/H3XY8C4Aw/eWQXWn/lWntHF9ooUBnGmEvbfGrTgLWc+um0YDUg==} 359 | engines: {node: '>=6.9.0'} 360 | dependencies: 361 | '@babel/helper-string-parser': 7.19.4 362 | '@babel/helper-validator-identifier': 7.19.1 363 | to-fast-properties: 2.0.0 364 | dev: true 365 | 366 | /@bcoe/v8-coverage@0.2.3: 367 | resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} 368 | dev: true 369 | 370 | /@esbuild/android-arm@0.15.18: 371 | resolution: {integrity: sha512-5GT+kcs2WVGjVs7+boataCkO5Fg0y4kCjzkB5bAip7H4jfnOS3dA6KPiww9W1OEKTKeAcUVhdZGvgI65OXmUnw==} 372 | engines: {node: '>=12'} 373 | cpu: [arm] 374 | os: [android] 375 | requiresBuild: true 376 | dev: true 377 | optional: true 378 | 379 | /@esbuild/linux-loong64@0.15.18: 380 | resolution: {integrity: sha512-L4jVKS82XVhw2nvzLg/19ClLWg0y27ulRwuP7lcyL6AbUWB5aPglXY3M21mauDQMDfRLs8cQmeT03r/+X3cZYQ==} 381 | engines: {node: '>=12'} 382 | cpu: [loong64] 383 | os: [linux] 384 | requiresBuild: true 385 | dev: true 386 | optional: true 387 | 388 | /@istanbuljs/load-nyc-config@1.1.0: 389 | resolution: {integrity: sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==} 390 | engines: {node: '>=8'} 391 | dependencies: 392 | camelcase: 5.3.1 393 | find-up: 4.1.0 394 | get-package-type: 0.1.0 395 | js-yaml: 3.14.1 396 | resolve-from: 5.0.0 397 | dev: true 398 | 399 | /@istanbuljs/schema@0.1.3: 400 | resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==} 401 | engines: {node: '>=8'} 402 | dev: true 403 | 404 | /@jest/console@24.9.0: 405 | resolution: {integrity: sha512-Zuj6b8TnKXi3q4ymac8EQfc3ea/uhLeCGThFqXeC8H9/raaH8ARPUTdId+XyGd03Z4In0/VjD2OYFcBF09fNLQ==} 406 | engines: {node: '>= 6'} 407 | dependencies: 408 | '@jest/source-map': 24.9.0 409 | chalk: 2.4.2 410 | slash: 2.0.0 411 | dev: true 412 | 413 | /@jest/console@27.5.1: 414 | resolution: {integrity: sha512-kZ/tNpS3NXn0mlXXXPNuDZnb4c0oZ20r4K5eemM2k30ZC3G0T02nXUvyhf5YdbXWHPEJLc9qGLxEZ216MdL+Zg==} 415 | engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} 416 | dependencies: 417 | '@jest/types': 27.5.1 418 | '@types/node': 16.18.10 419 | chalk: 4.1.2 420 | jest-message-util: 27.5.1 421 | jest-util: 27.5.1 422 | slash: 3.0.0 423 | dev: true 424 | 425 | /@jest/core@27.5.1: 426 | resolution: {integrity: sha512-AK6/UTrvQD0Cd24NSqmIA6rKsu0tKIxfiCducZvqxYdmMisOYAsdItspT+fQDQYARPf8XgjAFZi0ogW2agH5nQ==} 427 | engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} 428 | peerDependencies: 429 | node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 430 | peerDependenciesMeta: 431 | node-notifier: 432 | optional: true 433 | dependencies: 434 | '@jest/console': 27.5.1 435 | '@jest/reporters': 27.5.1 436 | '@jest/test-result': 27.5.1 437 | '@jest/transform': 27.5.1 438 | '@jest/types': 27.5.1 439 | '@types/node': 16.18.10 440 | ansi-escapes: 4.3.2 441 | chalk: 4.1.2 442 | emittery: 0.8.1 443 | exit: 0.1.2 444 | graceful-fs: 4.2.10 445 | jest-changed-files: 27.5.1 446 | jest-config: 27.5.1 447 | jest-haste-map: 27.5.1 448 | jest-message-util: 27.5.1 449 | jest-regex-util: 27.5.1 450 | jest-resolve: 27.5.1 451 | jest-resolve-dependencies: 27.5.1 452 | jest-runner: 27.5.1 453 | jest-runtime: 27.5.1 454 | jest-snapshot: 27.5.1 455 | jest-util: 27.5.1 456 | jest-validate: 27.5.1 457 | jest-watcher: 27.5.1 458 | micromatch: 4.0.5 459 | rimraf: 3.0.2 460 | slash: 3.0.0 461 | strip-ansi: 6.0.1 462 | transitivePeerDependencies: 463 | - bufferutil 464 | - canvas 465 | - supports-color 466 | - ts-node 467 | - utf-8-validate 468 | dev: true 469 | 470 | /@jest/create-cache-key-function@27.5.1: 471 | resolution: {integrity: sha512-dmH1yW+makpTSURTy8VzdUwFnfQh1G8R+DxO2Ho2FFmBbKFEVm+3jWdvFhE2VqB/LATCTokkP0dotjyQyw5/AQ==} 472 | engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} 473 | dependencies: 474 | '@jest/types': 27.5.1 475 | dev: true 476 | 477 | /@jest/environment@27.5.1: 478 | resolution: {integrity: sha512-/WQjhPJe3/ghaol/4Bq480JKXV/Rfw8nQdN7f41fM8VDHLcxKXou6QyXAh3EFr9/bVG3x74z1NWDkP87EiY8gA==} 479 | engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} 480 | dependencies: 481 | '@jest/fake-timers': 27.5.1 482 | '@jest/types': 27.5.1 483 | '@types/node': 16.18.10 484 | jest-mock: 27.5.1 485 | dev: true 486 | 487 | /@jest/fake-timers@27.5.1: 488 | resolution: {integrity: sha512-/aPowoolwa07k7/oM3aASneNeBGCmGQsc3ugN4u6s4C/+s5M64MFo/+djTdiwcbQlRfFElGuDXWzaWj6QgKObQ==} 489 | engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} 490 | dependencies: 491 | '@jest/types': 27.5.1 492 | '@sinonjs/fake-timers': 8.1.0 493 | '@types/node': 16.18.10 494 | jest-message-util: 27.5.1 495 | jest-mock: 27.5.1 496 | jest-util: 27.5.1 497 | dev: true 498 | 499 | /@jest/globals@27.5.1: 500 | resolution: {integrity: sha512-ZEJNB41OBQQgGzgyInAv0UUfDDj3upmHydjieSxFvTRuZElrx7tXg/uVQ5hYVEwiXs3+aMsAeEc9X7xiSKCm4Q==} 501 | engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} 502 | dependencies: 503 | '@jest/environment': 27.5.1 504 | '@jest/types': 27.5.1 505 | expect: 27.5.1 506 | dev: true 507 | 508 | /@jest/reporters@27.5.1: 509 | resolution: {integrity: sha512-cPXh9hWIlVJMQkVk84aIvXuBB4uQQmFqZiacloFuGiP3ah1sbCxCosidXFDfqG8+6fO1oR2dTJTlsOy4VFmUfw==} 510 | engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} 511 | peerDependencies: 512 | node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 513 | peerDependenciesMeta: 514 | node-notifier: 515 | optional: true 516 | dependencies: 517 | '@bcoe/v8-coverage': 0.2.3 518 | '@jest/console': 27.5.1 519 | '@jest/test-result': 27.5.1 520 | '@jest/transform': 27.5.1 521 | '@jest/types': 27.5.1 522 | '@types/node': 16.18.10 523 | chalk: 4.1.2 524 | collect-v8-coverage: 1.0.1 525 | exit: 0.1.2 526 | glob: 7.2.3 527 | graceful-fs: 4.2.10 528 | istanbul-lib-coverage: 3.2.0 529 | istanbul-lib-instrument: 5.2.1 530 | istanbul-lib-report: 3.0.0 531 | istanbul-lib-source-maps: 4.0.1 532 | istanbul-reports: 3.1.5 533 | jest-haste-map: 27.5.1 534 | jest-resolve: 27.5.1 535 | jest-util: 27.5.1 536 | jest-worker: 27.5.1 537 | slash: 3.0.0 538 | source-map: 0.6.1 539 | string-length: 4.0.2 540 | terminal-link: 2.1.1 541 | v8-to-istanbul: 8.1.1 542 | transitivePeerDependencies: 543 | - supports-color 544 | dev: true 545 | 546 | /@jest/source-map@24.9.0: 547 | resolution: {integrity: sha512-/Xw7xGlsZb4MJzNDgB7PW5crou5JqWiBQaz6xyPd3ArOg2nfn/PunV8+olXbbEZzNl591o5rWKE9BRDaFAuIBg==} 548 | engines: {node: '>= 6'} 549 | dependencies: 550 | callsites: 3.1.0 551 | graceful-fs: 4.2.10 552 | source-map: 0.6.1 553 | dev: true 554 | 555 | /@jest/source-map@27.5.1: 556 | resolution: {integrity: sha512-y9NIHUYF3PJRlHk98NdC/N1gl88BL08aQQgu4k4ZopQkCw9t9cV8mtl3TV8b/YCB8XaVTFrmUTAJvjsntDireg==} 557 | engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} 558 | dependencies: 559 | callsites: 3.1.0 560 | graceful-fs: 4.2.10 561 | source-map: 0.6.1 562 | dev: true 563 | 564 | /@jest/test-result@24.9.0: 565 | resolution: {integrity: sha512-XEFrHbBonBJ8dGp2JmF8kP/nQI/ImPpygKHwQ/SY+es59Z3L5PI4Qb9TQQMAEeYsThG1xF0k6tmG0tIKATNiiA==} 566 | engines: {node: '>= 6'} 567 | dependencies: 568 | '@jest/console': 24.9.0 569 | '@jest/types': 24.9.0 570 | '@types/istanbul-lib-coverage': 2.0.4 571 | dev: true 572 | 573 | /@jest/test-result@27.5.1: 574 | resolution: {integrity: sha512-EW35l2RYFUcUQxFJz5Cv5MTOxlJIQs4I7gxzi2zVU7PJhOwfYq1MdC5nhSmYjX1gmMmLPvB3sIaC+BkcHRBfag==} 575 | engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} 576 | dependencies: 577 | '@jest/console': 27.5.1 578 | '@jest/types': 27.5.1 579 | '@types/istanbul-lib-coverage': 2.0.4 580 | collect-v8-coverage: 1.0.1 581 | dev: true 582 | 583 | /@jest/test-sequencer@27.5.1: 584 | resolution: {integrity: sha512-LCheJF7WB2+9JuCS7VB/EmGIdQuhtqjRNI9A43idHv3E4KltCTsPsLxvdaubFHSYwY/fNjMWjl6vNRhDiN7vpQ==} 585 | engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} 586 | dependencies: 587 | '@jest/test-result': 27.5.1 588 | graceful-fs: 4.2.10 589 | jest-haste-map: 27.5.1 590 | jest-runtime: 27.5.1 591 | transitivePeerDependencies: 592 | - supports-color 593 | dev: true 594 | 595 | /@jest/transform@27.5.1: 596 | resolution: {integrity: sha512-ipON6WtYgl/1329g5AIJVbUuEh0wZVbdpGwC99Jw4LwuoBNS95MVphU6zOeD9pDkon+LLbFL7lOQRapbB8SCHw==} 597 | engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} 598 | dependencies: 599 | '@babel/core': 7.20.5 600 | '@jest/types': 27.5.1 601 | babel-plugin-istanbul: 6.1.1 602 | chalk: 4.1.2 603 | convert-source-map: 1.9.0 604 | fast-json-stable-stringify: 2.1.0 605 | graceful-fs: 4.2.10 606 | jest-haste-map: 27.5.1 607 | jest-regex-util: 27.5.1 608 | jest-util: 27.5.1 609 | micromatch: 4.0.5 610 | pirates: 4.0.5 611 | slash: 3.0.0 612 | source-map: 0.6.1 613 | write-file-atomic: 3.0.3 614 | transitivePeerDependencies: 615 | - supports-color 616 | dev: true 617 | 618 | /@jest/types@24.9.0: 619 | resolution: {integrity: sha512-XKK7ze1apu5JWQ5eZjHITP66AX+QsLlbaJRBGYr8pNzwcAE2JVkwnf0yqjHTsDRcjR0mujy/NmZMXw5kl+kGBw==} 620 | engines: {node: '>= 6'} 621 | dependencies: 622 | '@types/istanbul-lib-coverage': 2.0.4 623 | '@types/istanbul-reports': 1.1.2 624 | '@types/yargs': 13.0.12 625 | dev: true 626 | 627 | /@jest/types@26.6.2: 628 | resolution: {integrity: sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==} 629 | engines: {node: '>= 10.14.2'} 630 | dependencies: 631 | '@types/istanbul-lib-coverage': 2.0.4 632 | '@types/istanbul-reports': 3.0.1 633 | '@types/node': 16.18.10 634 | '@types/yargs': 15.0.14 635 | chalk: 4.1.2 636 | dev: true 637 | 638 | /@jest/types@27.5.1: 639 | resolution: {integrity: sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==} 640 | engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} 641 | dependencies: 642 | '@types/istanbul-lib-coverage': 2.0.4 643 | '@types/istanbul-reports': 3.0.1 644 | '@types/node': 16.18.10 645 | '@types/yargs': 16.0.4 646 | chalk: 4.1.2 647 | dev: true 648 | 649 | /@jridgewell/gen-mapping@0.1.1: 650 | resolution: {integrity: sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==} 651 | engines: {node: '>=6.0.0'} 652 | dependencies: 653 | '@jridgewell/set-array': 1.1.2 654 | '@jridgewell/sourcemap-codec': 1.4.14 655 | dev: true 656 | 657 | /@jridgewell/gen-mapping@0.3.2: 658 | resolution: {integrity: sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==} 659 | engines: {node: '>=6.0.0'} 660 | dependencies: 661 | '@jridgewell/set-array': 1.1.2 662 | '@jridgewell/sourcemap-codec': 1.4.14 663 | '@jridgewell/trace-mapping': 0.3.17 664 | dev: true 665 | 666 | /@jridgewell/resolve-uri@3.1.0: 667 | resolution: {integrity: sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==} 668 | engines: {node: '>=6.0.0'} 669 | dev: true 670 | 671 | /@jridgewell/set-array@1.1.2: 672 | resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==} 673 | engines: {node: '>=6.0.0'} 674 | dev: true 675 | 676 | /@jridgewell/sourcemap-codec@1.4.14: 677 | resolution: {integrity: sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==} 678 | dev: true 679 | 680 | /@jridgewell/trace-mapping@0.3.17: 681 | resolution: {integrity: sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==} 682 | dependencies: 683 | '@jridgewell/resolve-uri': 3.1.0 684 | '@jridgewell/sourcemap-codec': 1.4.14 685 | dev: true 686 | 687 | /@next/env@12.3.4: 688 | resolution: {integrity: sha512-H/69Lc5Q02dq3o+dxxy5O/oNxFsZpdL6WREtOOtOM1B/weonIwDXkekr1KV5DPVPr12IHFPrMrcJQ6bgPMfn7A==} 689 | dev: true 690 | 691 | /@next/swc-android-arm-eabi@12.3.4: 692 | resolution: {integrity: sha512-cM42Cw6V4Bz/2+j/xIzO8nK/Q3Ly+VSlZJTa1vHzsocJRYz8KT6MrreXaci2++SIZCF1rVRCDgAg5PpqRibdIA==} 693 | engines: {node: '>= 10'} 694 | cpu: [arm] 695 | os: [android] 696 | requiresBuild: true 697 | dev: true 698 | optional: true 699 | 700 | /@next/swc-android-arm64@12.3.4: 701 | resolution: {integrity: sha512-5jf0dTBjL+rabWjGj3eghpLUxCukRhBcEJgwLedewEA/LJk2HyqCvGIwj5rH+iwmq1llCWbOky2dO3pVljrapg==} 702 | engines: {node: '>= 10'} 703 | cpu: [arm64] 704 | os: [android] 705 | requiresBuild: true 706 | dev: true 707 | optional: true 708 | 709 | /@next/swc-darwin-arm64@12.3.4: 710 | resolution: {integrity: sha512-DqsSTd3FRjQUR6ao0E1e2OlOcrF5br+uegcEGPVonKYJpcr0MJrtYmPxd4v5T6UCJZ+XzydF7eQo5wdGvSZAyA==} 711 | engines: {node: '>= 10'} 712 | cpu: [arm64] 713 | os: [darwin] 714 | requiresBuild: true 715 | dev: true 716 | optional: true 717 | 718 | /@next/swc-darwin-x64@12.3.4: 719 | resolution: {integrity: sha512-PPF7tbWD4k0dJ2EcUSnOsaOJ5rhT3rlEt/3LhZUGiYNL8KvoqczFrETlUx0cUYaXe11dRA3F80Hpt727QIwByQ==} 720 | engines: {node: '>= 10'} 721 | cpu: [x64] 722 | os: [darwin] 723 | requiresBuild: true 724 | dev: true 725 | optional: true 726 | 727 | /@next/swc-freebsd-x64@12.3.4: 728 | resolution: {integrity: sha512-KM9JXRXi/U2PUM928z7l4tnfQ9u8bTco/jb939pdFUHqc28V43Ohd31MmZD1QzEK4aFlMRaIBQOWQZh4D/E5lQ==} 729 | engines: {node: '>= 10'} 730 | cpu: [x64] 731 | os: [freebsd] 732 | requiresBuild: true 733 | dev: true 734 | optional: true 735 | 736 | /@next/swc-linux-arm-gnueabihf@12.3.4: 737 | resolution: {integrity: sha512-3zqD3pO+z5CZyxtKDTnOJ2XgFFRUBciOox6EWkoZvJfc9zcidNAQxuwonUeNts6Xbm8Wtm5YGIRC0x+12YH7kw==} 738 | engines: {node: '>= 10'} 739 | cpu: [arm] 740 | os: [linux] 741 | requiresBuild: true 742 | dev: true 743 | optional: true 744 | 745 | /@next/swc-linux-arm64-gnu@12.3.4: 746 | resolution: {integrity: sha512-kiX0vgJGMZVv+oo1QuObaYulXNvdH/IINmvdZnVzMO/jic/B8EEIGlZ8Bgvw8LCjH3zNVPO3mGrdMvnEEPEhKA==} 747 | engines: {node: '>= 10'} 748 | cpu: [arm64] 749 | os: [linux] 750 | requiresBuild: true 751 | dev: true 752 | optional: true 753 | 754 | /@next/swc-linux-arm64-musl@12.3.4: 755 | resolution: {integrity: sha512-EETZPa1juczrKLWk5okoW2hv7D7WvonU+Cf2CgsSoxgsYbUCZ1voOpL4JZTOb6IbKMDo6ja+SbY0vzXZBUMvkQ==} 756 | engines: {node: '>= 10'} 757 | cpu: [arm64] 758 | os: [linux] 759 | requiresBuild: true 760 | dev: true 761 | optional: true 762 | 763 | /@next/swc-linux-x64-gnu@12.3.4: 764 | resolution: {integrity: sha512-4csPbRbfZbuWOk3ATyWcvVFdD9/Rsdq5YHKvRuEni68OCLkfy4f+4I9OBpyK1SKJ00Cih16NJbHE+k+ljPPpag==} 765 | engines: {node: '>= 10'} 766 | cpu: [x64] 767 | os: [linux] 768 | requiresBuild: true 769 | dev: true 770 | optional: true 771 | 772 | /@next/swc-linux-x64-musl@12.3.4: 773 | resolution: {integrity: sha512-YeBmI+63Ro75SUiL/QXEVXQ19T++58aI/IINOyhpsRL1LKdyfK/35iilraZEFz9bLQrwy1LYAR5lK200A9Gjbg==} 774 | engines: {node: '>= 10'} 775 | cpu: [x64] 776 | os: [linux] 777 | requiresBuild: true 778 | dev: true 779 | optional: true 780 | 781 | /@next/swc-win32-arm64-msvc@12.3.4: 782 | resolution: {integrity: sha512-Sd0qFUJv8Tj0PukAYbCCDbmXcMkbIuhnTeHm9m4ZGjCf6kt7E/RMs55Pd3R5ePjOkN7dJEuxYBehawTR/aPDSQ==} 783 | engines: {node: '>= 10'} 784 | cpu: [arm64] 785 | os: [win32] 786 | requiresBuild: true 787 | dev: true 788 | optional: true 789 | 790 | /@next/swc-win32-ia32-msvc@12.3.4: 791 | resolution: {integrity: sha512-rt/vv/vg/ZGGkrkKcuJ0LyliRdbskQU+91bje+PgoYmxTZf/tYs6IfbmgudBJk6gH3QnjHWbkphDdRQrseRefQ==} 792 | engines: {node: '>= 10'} 793 | cpu: [ia32] 794 | os: [win32] 795 | requiresBuild: true 796 | dev: true 797 | optional: true 798 | 799 | /@next/swc-win32-x64-msvc@12.3.4: 800 | resolution: {integrity: sha512-DQ20JEfTBZAgF8QCjYfJhv2/279M6onxFjdG/+5B0Cyj00/EdBxiWb2eGGFgQhrBbNv/lsvzFbbi0Ptf8Vw/bg==} 801 | engines: {node: '>= 10'} 802 | cpu: [x64] 803 | os: [win32] 804 | requiresBuild: true 805 | dev: true 806 | optional: true 807 | 808 | /@nodelib/fs.scandir@2.1.5: 809 | resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} 810 | engines: {node: '>= 8'} 811 | dependencies: 812 | '@nodelib/fs.stat': 2.0.5 813 | run-parallel: 1.2.0 814 | dev: true 815 | 816 | /@nodelib/fs.stat@2.0.5: 817 | resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} 818 | engines: {node: '>= 8'} 819 | dev: true 820 | 821 | /@nodelib/fs.walk@1.2.8: 822 | resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} 823 | engines: {node: '>= 8'} 824 | dependencies: 825 | '@nodelib/fs.scandir': 2.1.5 826 | fastq: 1.14.0 827 | dev: true 828 | 829 | /@sinonjs/commons@1.8.6: 830 | resolution: {integrity: sha512-Ky+XkAkqPZSm3NLBeUng77EBQl3cmeJhITaGHdYH8kjVB+aun3S4XBRti2zt17mtt0mIUDiNxYeoJm6drVvBJQ==} 831 | dependencies: 832 | type-detect: 4.0.8 833 | dev: true 834 | 835 | /@sinonjs/fake-timers@8.1.0: 836 | resolution: {integrity: sha512-OAPJUAtgeINhh/TAlUID4QTs53Njm7xzddaVlEs/SXwgtiD1tW22zAB/W1wdqfrpmikgaWQ9Fw6Ws+hsiRm5Vg==} 837 | dependencies: 838 | '@sinonjs/commons': 1.8.6 839 | dev: true 840 | 841 | /@swc/core-darwin-arm64@1.3.24: 842 | resolution: {integrity: sha512-rR+9UpWm+fGXcipsjCst2hIL1GYIbo0YTLhJZWdIpQD6KRHHJMFXiydMgQQkDj2Ml7HpqUVgxj6m4ZWYL8b0OA==} 843 | engines: {node: '>=10'} 844 | cpu: [arm64] 845 | os: [darwin] 846 | requiresBuild: true 847 | dev: true 848 | optional: true 849 | 850 | /@swc/core-darwin-x64@1.3.24: 851 | resolution: {integrity: sha512-px+5vkGtgPH0m3FkkTBHynlRdS5rRz+lK+wiXIuBZFJSySWFl6RkKbvwkD+sf0MpazQlqwlv/rTOGJBw6oDffg==} 852 | engines: {node: '>=10'} 853 | cpu: [x64] 854 | os: [darwin] 855 | requiresBuild: true 856 | dev: true 857 | optional: true 858 | 859 | /@swc/core-linux-arm-gnueabihf@1.3.24: 860 | resolution: {integrity: sha512-jLs8ZOdTV4UW4J12E143QJ4mOMONQtqgAnuhBbRuWFzQ3ny1dfoC3P1jNWAJ2Xi59XdxAIXn0PggPNH4Kh34kw==} 861 | engines: {node: '>=10'} 862 | cpu: [arm] 863 | os: [linux] 864 | requiresBuild: true 865 | dev: true 866 | optional: true 867 | 868 | /@swc/core-linux-arm64-gnu@1.3.24: 869 | resolution: {integrity: sha512-A/v0h70BekrwGpp1DlzIFGcHQ3QQ2PexXcnnuIBZeMc9gNmHlcZmg3EcwAnaUDiokhNuSUFA/wV94yk1OqmSkw==} 870 | engines: {node: '>=10'} 871 | cpu: [arm64] 872 | os: [linux] 873 | requiresBuild: true 874 | dev: true 875 | optional: true 876 | 877 | /@swc/core-linux-arm64-musl@1.3.24: 878 | resolution: {integrity: sha512-pbc9eArWPTiMrbpS/pJo0IiQNAKAQBcBIDjWBGP1tcw2iDXYLw4bruwz9kI/VjakbshWb8MoE4T5ClkeuULvSw==} 879 | engines: {node: '>=10'} 880 | cpu: [arm64] 881 | os: [linux] 882 | requiresBuild: true 883 | dev: true 884 | optional: true 885 | 886 | /@swc/core-linux-x64-gnu@1.3.24: 887 | resolution: {integrity: sha512-pP5pOLlY1xd352qo7rTlpVPUI9/9VhOd4b3Lk+LzfZDq9bTL2NDlGfyrPiwa5DGHMSzrugH56K2J68eutkxYVA==} 888 | engines: {node: '>=10'} 889 | cpu: [x64] 890 | os: [linux] 891 | requiresBuild: true 892 | dev: true 893 | optional: true 894 | 895 | /@swc/core-linux-x64-musl@1.3.24: 896 | resolution: {integrity: sha512-phNbP7zGp+Wcyxq1Qxlpe5KkxO7WLT2kVQUC7aDFGlVdCr+xdXsfH1MzheHtnr0kqTVQX1aiM8XXXHfFxR0oNA==} 897 | engines: {node: '>=10'} 898 | cpu: [x64] 899 | os: [linux] 900 | requiresBuild: true 901 | dev: true 902 | optional: true 903 | 904 | /@swc/core-win32-arm64-msvc@1.3.24: 905 | resolution: {integrity: sha512-qhbiJTWAOqyR+K9xnGmCkOWSz2EmWpDBstEJCEOTc6FZiEdbiTscDmqTcMbCKaTHGu8t+6erVA4t65/Eg6uWPA==} 906 | engines: {node: '>=10'} 907 | cpu: [arm64] 908 | os: [win32] 909 | requiresBuild: true 910 | dev: true 911 | optional: true 912 | 913 | /@swc/core-win32-ia32-msvc@1.3.24: 914 | resolution: {integrity: sha512-JfghIlscE4Rz+Lc08lSoDh+R0cWxrISed5biogFfE6vZqhaDnw3E5Qshqw7O3pIaiq8L2u1nmzuyP581ZmpbRA==} 915 | engines: {node: '>=10'} 916 | cpu: [ia32] 917 | os: [win32] 918 | requiresBuild: true 919 | dev: true 920 | optional: true 921 | 922 | /@swc/core-win32-x64-msvc@1.3.24: 923 | resolution: {integrity: sha512-3AmJRr0hwciwDBbzUNqaftvppzS8v9X/iv/Wl7YaVLBVpPfQvaZzfqLycvNMGLZb5vIKXR/u58txg3dRBGsJtw==} 924 | engines: {node: '>=10'} 925 | cpu: [x64] 926 | os: [win32] 927 | requiresBuild: true 928 | dev: true 929 | optional: true 930 | 931 | /@swc/core@1.3.24: 932 | resolution: {integrity: sha512-QMOTd0AgiUT3K1crxLRqd3gw0f3FC8hhH1vvlIlryvYqU4c+FJ/T2G4ZhMKLxQlZ/jX6Rhk0gKINZRBxy2GFyQ==} 933 | engines: {node: '>=10'} 934 | hasBin: true 935 | requiresBuild: true 936 | optionalDependencies: 937 | '@swc/core-darwin-arm64': 1.3.24 938 | '@swc/core-darwin-x64': 1.3.24 939 | '@swc/core-linux-arm-gnueabihf': 1.3.24 940 | '@swc/core-linux-arm64-gnu': 1.3.24 941 | '@swc/core-linux-arm64-musl': 1.3.24 942 | '@swc/core-linux-x64-gnu': 1.3.24 943 | '@swc/core-linux-x64-musl': 1.3.24 944 | '@swc/core-win32-arm64-msvc': 1.3.24 945 | '@swc/core-win32-ia32-msvc': 1.3.24 946 | '@swc/core-win32-x64-msvc': 1.3.24 947 | dev: true 948 | 949 | /@swc/helpers@0.4.11: 950 | resolution: {integrity: sha512-rEUrBSGIoSFuYxwBYtlUFMlE2CwGhmW+w9355/5oduSw8e5h2+Tj4UrAGNNgP9915++wj5vkQo0UuOBqOAq4nw==} 951 | dependencies: 952 | tslib: 2.4.1 953 | dev: true 954 | 955 | /@swc/jest@0.2.24(@swc/core@1.3.24): 956 | resolution: {integrity: sha512-fwgxQbM1wXzyKzl1+IW0aGrRvAA8k0Y3NxFhKigbPjOJ4mCKnWEcNX9HQS3gshflcxq8YKhadabGUVfdwjCr6Q==} 957 | engines: {npm: '>= 7.0.0'} 958 | peerDependencies: 959 | '@swc/core': '*' 960 | dependencies: 961 | '@jest/create-cache-key-function': 27.5.1 962 | '@swc/core': 1.3.24 963 | jsonc-parser: 3.2.0 964 | dev: true 965 | 966 | /@tootallnate/once@1.1.2: 967 | resolution: {integrity: sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==} 968 | engines: {node: '>= 6'} 969 | dev: true 970 | 971 | /@types/babel__core@7.1.20: 972 | resolution: {integrity: sha512-PVb6Bg2QuscZ30FvOU7z4guG6c926D9YRvOxEaelzndpMsvP+YM74Q/dAFASpg2l6+XLalxSGxcq/lrgYWZtyQ==} 973 | dependencies: 974 | '@babel/parser': 7.20.5 975 | '@babel/types': 7.20.5 976 | '@types/babel__generator': 7.6.4 977 | '@types/babel__template': 7.4.1 978 | '@types/babel__traverse': 7.18.3 979 | dev: true 980 | 981 | /@types/babel__generator@7.6.4: 982 | resolution: {integrity: sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==} 983 | dependencies: 984 | '@babel/types': 7.20.5 985 | dev: true 986 | 987 | /@types/babel__template@7.4.1: 988 | resolution: {integrity: sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==} 989 | dependencies: 990 | '@babel/parser': 7.20.5 991 | '@babel/types': 7.20.5 992 | dev: true 993 | 994 | /@types/babel__traverse@7.18.3: 995 | resolution: {integrity: sha512-1kbcJ40lLB7MHsj39U4Sh1uTd2E7rLEa79kmDpI6cy+XiXsteB3POdQomoq4FxszMrO3ZYchkhYJw7A2862b3w==} 996 | dependencies: 997 | '@babel/types': 7.20.5 998 | dev: true 999 | 1000 | /@types/graceful-fs@4.1.5: 1001 | resolution: {integrity: sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw==} 1002 | dependencies: 1003 | '@types/node': 16.18.10 1004 | dev: true 1005 | 1006 | /@types/istanbul-lib-coverage@2.0.4: 1007 | resolution: {integrity: sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==} 1008 | dev: true 1009 | 1010 | /@types/istanbul-lib-report@3.0.0: 1011 | resolution: {integrity: sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==} 1012 | dependencies: 1013 | '@types/istanbul-lib-coverage': 2.0.4 1014 | dev: true 1015 | 1016 | /@types/istanbul-reports@1.1.2: 1017 | resolution: {integrity: sha512-P/W9yOX/3oPZSpaYOCQzGqgCQRXn0FFO/V8bWrCQs+wLmvVVxk6CRBXALEvNs9OHIatlnlFokfhuDo2ug01ciw==} 1018 | dependencies: 1019 | '@types/istanbul-lib-coverage': 2.0.4 1020 | '@types/istanbul-lib-report': 3.0.0 1021 | dev: true 1022 | 1023 | /@types/istanbul-reports@3.0.1: 1024 | resolution: {integrity: sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==} 1025 | dependencies: 1026 | '@types/istanbul-lib-report': 3.0.0 1027 | dev: true 1028 | 1029 | /@types/jest@26.0.24: 1030 | resolution: {integrity: sha512-E/X5Vib8BWqZNRlDxj9vYXhsDwPYbPINqKF9BsnSoon4RQ0D9moEuLD8txgyypFLH7J4+Lho9Nr/c8H0Fi+17w==} 1031 | dependencies: 1032 | jest-diff: 26.6.2 1033 | pretty-format: 26.6.2 1034 | dev: true 1035 | 1036 | /@types/node@16.18.10: 1037 | resolution: {integrity: sha512-XU1+v7h81p7145ddPfjv7jtWvkSilpcnON3mQ+bDi9Yuf7OI56efOglXRyXWgQ57xH3fEQgh7WOJMncRHVew5w==} 1038 | dev: true 1039 | 1040 | /@types/prettier@2.7.2: 1041 | resolution: {integrity: sha512-KufADq8uQqo1pYKVIYzfKbJfBAc0sOeXqGbFaSpv8MRmC/zXgowNZmFcbngndGk922QDmOASEXUZCaY48gs4cg==} 1042 | dev: true 1043 | 1044 | /@types/stack-utils@1.0.1: 1045 | resolution: {integrity: sha512-l42BggppR6zLmpfU6fq9HEa2oGPEI8yrSPL3GITjfRInppYFahObbIQOQK3UGxEnyQpltZLaPe75046NOZQikw==} 1046 | dev: true 1047 | 1048 | /@types/stack-utils@2.0.1: 1049 | resolution: {integrity: sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==} 1050 | dev: true 1051 | 1052 | /@types/yargs-parser@21.0.0: 1053 | resolution: {integrity: sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==} 1054 | dev: true 1055 | 1056 | /@types/yargs@13.0.12: 1057 | resolution: {integrity: sha512-qCxJE1qgz2y0hA4pIxjBR+PelCH0U5CK1XJXFwCNqfmliatKp47UCXXE9Dyk1OXBDLvsCF57TqQEJaeLfDYEOQ==} 1058 | dependencies: 1059 | '@types/yargs-parser': 21.0.0 1060 | dev: true 1061 | 1062 | /@types/yargs@15.0.14: 1063 | resolution: {integrity: sha512-yEJzHoxf6SyQGhBhIYGXQDSCkJjB6HohDShto7m8vaKg9Yp0Yn8+71J9eakh2bnPg6BfsH9PRMhiRTZnd4eXGQ==} 1064 | dependencies: 1065 | '@types/yargs-parser': 21.0.0 1066 | dev: true 1067 | 1068 | /@types/yargs@16.0.4: 1069 | resolution: {integrity: sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==} 1070 | dependencies: 1071 | '@types/yargs-parser': 21.0.0 1072 | dev: true 1073 | 1074 | /abab@2.0.6: 1075 | resolution: {integrity: sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==} 1076 | dev: true 1077 | 1078 | /acorn-globals@6.0.0: 1079 | resolution: {integrity: sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==} 1080 | dependencies: 1081 | acorn: 7.4.1 1082 | acorn-walk: 7.2.0 1083 | dev: true 1084 | 1085 | /acorn-walk@7.2.0: 1086 | resolution: {integrity: sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==} 1087 | engines: {node: '>=0.4.0'} 1088 | dev: true 1089 | 1090 | /acorn@7.4.1: 1091 | resolution: {integrity: sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==} 1092 | engines: {node: '>=0.4.0'} 1093 | hasBin: true 1094 | dev: true 1095 | 1096 | /acorn@8.8.1: 1097 | resolution: {integrity: sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==} 1098 | engines: {node: '>=0.4.0'} 1099 | hasBin: true 1100 | dev: true 1101 | 1102 | /agent-base@6.0.2: 1103 | resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} 1104 | engines: {node: '>= 6.0.0'} 1105 | dependencies: 1106 | debug: 4.3.4 1107 | transitivePeerDependencies: 1108 | - supports-color 1109 | dev: true 1110 | 1111 | /ansi-escapes@4.3.2: 1112 | resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} 1113 | engines: {node: '>=8'} 1114 | dependencies: 1115 | type-fest: 0.21.3 1116 | dev: true 1117 | 1118 | /ansi-regex@3.0.1: 1119 | resolution: {integrity: sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==} 1120 | engines: {node: '>=4'} 1121 | dev: true 1122 | 1123 | /ansi-regex@4.1.1: 1124 | resolution: {integrity: sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==} 1125 | engines: {node: '>=6'} 1126 | dev: true 1127 | 1128 | /ansi-regex@5.0.1: 1129 | resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} 1130 | engines: {node: '>=8'} 1131 | dev: true 1132 | 1133 | /ansi-styles@3.2.1: 1134 | resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} 1135 | engines: {node: '>=4'} 1136 | dependencies: 1137 | color-convert: 1.9.3 1138 | dev: true 1139 | 1140 | /ansi-styles@4.3.0: 1141 | resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} 1142 | engines: {node: '>=8'} 1143 | dependencies: 1144 | color-convert: 2.0.1 1145 | dev: true 1146 | 1147 | /ansi-styles@5.2.0: 1148 | resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} 1149 | engines: {node: '>=10'} 1150 | dev: true 1151 | 1152 | /any-promise@1.3.0: 1153 | resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} 1154 | dev: true 1155 | 1156 | /anymatch@3.1.3: 1157 | resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} 1158 | engines: {node: '>= 8'} 1159 | dependencies: 1160 | normalize-path: 3.0.0 1161 | picomatch: 2.3.1 1162 | dev: true 1163 | 1164 | /argparse@1.0.10: 1165 | resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} 1166 | dependencies: 1167 | sprintf-js: 1.0.3 1168 | dev: true 1169 | 1170 | /arr-diff@4.0.0: 1171 | resolution: {integrity: sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA==} 1172 | engines: {node: '>=0.10.0'} 1173 | dev: true 1174 | 1175 | /arr-flatten@1.1.0: 1176 | resolution: {integrity: sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==} 1177 | engines: {node: '>=0.10.0'} 1178 | dev: true 1179 | 1180 | /arr-union@3.1.0: 1181 | resolution: {integrity: sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q==} 1182 | engines: {node: '>=0.10.0'} 1183 | dev: true 1184 | 1185 | /array-union@2.1.0: 1186 | resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} 1187 | engines: {node: '>=8'} 1188 | dev: true 1189 | 1190 | /array-unique@0.3.2: 1191 | resolution: {integrity: sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ==} 1192 | engines: {node: '>=0.10.0'} 1193 | dev: true 1194 | 1195 | /assign-symbols@1.0.0: 1196 | resolution: {integrity: sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw==} 1197 | engines: {node: '>=0.10.0'} 1198 | dev: true 1199 | 1200 | /asynckit@0.4.0: 1201 | resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} 1202 | dev: true 1203 | 1204 | /atob@2.1.2: 1205 | resolution: {integrity: sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==} 1206 | engines: {node: '>= 4.5.0'} 1207 | hasBin: true 1208 | dev: true 1209 | 1210 | /babel-jest@27.5.1(@babel/core@7.20.5): 1211 | resolution: {integrity: sha512-cdQ5dXjGRd0IBRATiQ4mZGlGlRE8kJpjPOixdNRdT+m3UcNqmYWN6rK6nvtXYfY3D76cb8s/O1Ss8ea24PIwcg==} 1212 | engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} 1213 | peerDependencies: 1214 | '@babel/core': ^7.8.0 1215 | dependencies: 1216 | '@babel/core': 7.20.5 1217 | '@jest/transform': 27.5.1 1218 | '@jest/types': 27.5.1 1219 | '@types/babel__core': 7.1.20 1220 | babel-plugin-istanbul: 6.1.1 1221 | babel-preset-jest: 27.5.1(@babel/core@7.20.5) 1222 | chalk: 4.1.2 1223 | graceful-fs: 4.2.10 1224 | slash: 3.0.0 1225 | transitivePeerDependencies: 1226 | - supports-color 1227 | dev: true 1228 | 1229 | /babel-plugin-istanbul@6.1.1: 1230 | resolution: {integrity: sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==} 1231 | engines: {node: '>=8'} 1232 | dependencies: 1233 | '@babel/helper-plugin-utils': 7.20.2 1234 | '@istanbuljs/load-nyc-config': 1.1.0 1235 | '@istanbuljs/schema': 0.1.3 1236 | istanbul-lib-instrument: 5.2.1 1237 | test-exclude: 6.0.0 1238 | transitivePeerDependencies: 1239 | - supports-color 1240 | dev: true 1241 | 1242 | /babel-plugin-jest-hoist@27.5.1: 1243 | resolution: {integrity: sha512-50wCwD5EMNW4aRpOwtqzyZHIewTYNxLA4nhB+09d8BIssfNfzBRhkBIHiaPv1Si226TQSvp8gxAJm2iY2qs2hQ==} 1244 | engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} 1245 | dependencies: 1246 | '@babel/template': 7.18.10 1247 | '@babel/types': 7.20.5 1248 | '@types/babel__core': 7.1.20 1249 | '@types/babel__traverse': 7.18.3 1250 | dev: true 1251 | 1252 | /babel-preset-current-node-syntax@1.0.1(@babel/core@7.20.5): 1253 | resolution: {integrity: sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==} 1254 | peerDependencies: 1255 | '@babel/core': ^7.0.0 1256 | dependencies: 1257 | '@babel/core': 7.20.5 1258 | '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.20.5) 1259 | '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.20.5) 1260 | '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.20.5) 1261 | '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.20.5) 1262 | '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.20.5) 1263 | '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.20.5) 1264 | '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.20.5) 1265 | '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.20.5) 1266 | '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.20.5) 1267 | '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.20.5) 1268 | '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.20.5) 1269 | '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.20.5) 1270 | dev: true 1271 | 1272 | /babel-preset-jest@27.5.1(@babel/core@7.20.5): 1273 | resolution: {integrity: sha512-Nptf2FzlPCWYuJg41HBqXVT8ym6bXOevuCTbhxlUpjwtysGaIWFvDEjp4y+G7fl13FgOdjs7P/DmErqH7da0Ag==} 1274 | engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} 1275 | peerDependencies: 1276 | '@babel/core': ^7.0.0 1277 | dependencies: 1278 | '@babel/core': 7.20.5 1279 | babel-plugin-jest-hoist: 27.5.1 1280 | babel-preset-current-node-syntax: 1.0.1(@babel/core@7.20.5) 1281 | dev: true 1282 | 1283 | /balanced-match@1.0.2: 1284 | resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} 1285 | dev: true 1286 | 1287 | /base@0.11.2: 1288 | resolution: {integrity: sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==} 1289 | engines: {node: '>=0.10.0'} 1290 | dependencies: 1291 | cache-base: 1.0.1 1292 | class-utils: 0.3.6 1293 | component-emitter: 1.3.0 1294 | define-property: 1.0.0 1295 | isobject: 3.0.1 1296 | mixin-deep: 1.3.2 1297 | pascalcase: 0.1.1 1298 | dev: true 1299 | 1300 | /binary-extensions@2.2.0: 1301 | resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} 1302 | engines: {node: '>=8'} 1303 | dev: true 1304 | 1305 | /brace-expansion@1.1.11: 1306 | resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} 1307 | dependencies: 1308 | balanced-match: 1.0.2 1309 | concat-map: 0.0.1 1310 | dev: true 1311 | 1312 | /braces@2.3.2: 1313 | resolution: {integrity: sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==} 1314 | engines: {node: '>=0.10.0'} 1315 | dependencies: 1316 | arr-flatten: 1.1.0 1317 | array-unique: 0.3.2 1318 | extend-shallow: 2.0.1 1319 | fill-range: 4.0.0 1320 | isobject: 3.0.1 1321 | repeat-element: 1.1.4 1322 | snapdragon: 0.8.2 1323 | snapdragon-node: 2.1.1 1324 | split-string: 3.1.0 1325 | to-regex: 3.0.2 1326 | transitivePeerDependencies: 1327 | - supports-color 1328 | dev: true 1329 | 1330 | /braces@3.0.2: 1331 | resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} 1332 | engines: {node: '>=8'} 1333 | dependencies: 1334 | fill-range: 7.0.1 1335 | dev: true 1336 | 1337 | /browser-process-hrtime@1.0.0: 1338 | resolution: {integrity: sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==} 1339 | dev: true 1340 | 1341 | /browserslist@4.21.4: 1342 | resolution: {integrity: sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==} 1343 | engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} 1344 | hasBin: true 1345 | dependencies: 1346 | caniuse-lite: 1.0.30001441 1347 | electron-to-chromium: 1.4.284 1348 | node-releases: 2.0.8 1349 | update-browserslist-db: 1.0.10(browserslist@4.21.4) 1350 | dev: true 1351 | 1352 | /bser@2.1.1: 1353 | resolution: {integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==} 1354 | dependencies: 1355 | node-int64: 0.4.0 1356 | dev: true 1357 | 1358 | /buffer-from@1.1.2: 1359 | resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} 1360 | dev: true 1361 | 1362 | /bundle-require@3.1.2(esbuild@0.15.18): 1363 | resolution: {integrity: sha512-Of6l6JBAxiyQ5axFxUM6dYeP/W7X2Sozeo/4EYB9sJhL+dqL7TKjg+shwxp6jlu/6ZSERfsYtIpSJ1/x3XkAEA==} 1364 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 1365 | peerDependencies: 1366 | esbuild: '>=0.13' 1367 | dependencies: 1368 | esbuild: 0.15.18 1369 | load-tsconfig: 0.2.3 1370 | dev: true 1371 | 1372 | /cac@6.7.14: 1373 | resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} 1374 | engines: {node: '>=8'} 1375 | dev: true 1376 | 1377 | /cache-base@1.0.1: 1378 | resolution: {integrity: sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==} 1379 | engines: {node: '>=0.10.0'} 1380 | dependencies: 1381 | collection-visit: 1.0.0 1382 | component-emitter: 1.3.0 1383 | get-value: 2.0.6 1384 | has-value: 1.0.0 1385 | isobject: 3.0.1 1386 | set-value: 2.0.1 1387 | to-object-path: 0.3.0 1388 | union-value: 1.0.1 1389 | unset-value: 1.0.0 1390 | dev: true 1391 | 1392 | /callsites@3.1.0: 1393 | resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} 1394 | engines: {node: '>=6'} 1395 | dev: true 1396 | 1397 | /camelcase@5.3.1: 1398 | resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} 1399 | engines: {node: '>=6'} 1400 | dev: true 1401 | 1402 | /camelcase@6.3.0: 1403 | resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} 1404 | engines: {node: '>=10'} 1405 | dev: true 1406 | 1407 | /caniuse-lite@1.0.30001441: 1408 | resolution: {integrity: sha512-OyxRR4Vof59I3yGWXws6i908EtGbMzVUi3ganaZQHmydk1iwDhRnvaPG2WaR0KcqrDFKrxVZHULT396LEPhXfg==} 1409 | dev: true 1410 | 1411 | /chalk@2.4.2: 1412 | resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} 1413 | engines: {node: '>=4'} 1414 | dependencies: 1415 | ansi-styles: 3.2.1 1416 | escape-string-regexp: 1.0.5 1417 | supports-color: 5.5.0 1418 | dev: true 1419 | 1420 | /chalk@4.1.2: 1421 | resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} 1422 | engines: {node: '>=10'} 1423 | dependencies: 1424 | ansi-styles: 4.3.0 1425 | supports-color: 7.2.0 1426 | dev: true 1427 | 1428 | /char-regex@1.0.2: 1429 | resolution: {integrity: sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==} 1430 | engines: {node: '>=10'} 1431 | dev: true 1432 | 1433 | /chokidar@3.5.3: 1434 | resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} 1435 | engines: {node: '>= 8.10.0'} 1436 | dependencies: 1437 | anymatch: 3.1.3 1438 | braces: 3.0.2 1439 | glob-parent: 5.1.2 1440 | is-binary-path: 2.1.0 1441 | is-glob: 4.0.3 1442 | normalize-path: 3.0.0 1443 | readdirp: 3.6.0 1444 | optionalDependencies: 1445 | fsevents: 2.3.2 1446 | dev: true 1447 | 1448 | /ci-info@3.7.0: 1449 | resolution: {integrity: sha512-2CpRNYmImPx+RXKLq6jko/L07phmS9I02TyqkcNU20GCF/GgaWvc58hPtjxDX8lPpkdwc9sNh72V9k00S7ezog==} 1450 | engines: {node: '>=8'} 1451 | dev: true 1452 | 1453 | /cjs-module-lexer@1.2.2: 1454 | resolution: {integrity: sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==} 1455 | dev: true 1456 | 1457 | /class-utils@0.3.6: 1458 | resolution: {integrity: sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==} 1459 | engines: {node: '>=0.10.0'} 1460 | dependencies: 1461 | arr-union: 3.1.0 1462 | define-property: 0.2.5 1463 | isobject: 3.0.1 1464 | static-extend: 0.1.2 1465 | dev: true 1466 | 1467 | /cliui@7.0.4: 1468 | resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==} 1469 | dependencies: 1470 | string-width: 4.2.3 1471 | strip-ansi: 6.0.1 1472 | wrap-ansi: 7.0.0 1473 | dev: true 1474 | 1475 | /co@4.6.0: 1476 | resolution: {integrity: sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==} 1477 | engines: {iojs: '>= 1.0.0', node: '>= 0.12.0'} 1478 | dev: true 1479 | 1480 | /collect-v8-coverage@1.0.1: 1481 | resolution: {integrity: sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==} 1482 | dev: true 1483 | 1484 | /collection-visit@1.0.0: 1485 | resolution: {integrity: sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw==} 1486 | engines: {node: '>=0.10.0'} 1487 | dependencies: 1488 | map-visit: 1.0.0 1489 | object-visit: 1.0.1 1490 | dev: true 1491 | 1492 | /color-convert@1.9.3: 1493 | resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} 1494 | dependencies: 1495 | color-name: 1.1.3 1496 | dev: true 1497 | 1498 | /color-convert@2.0.1: 1499 | resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} 1500 | engines: {node: '>=7.0.0'} 1501 | dependencies: 1502 | color-name: 1.1.4 1503 | dev: true 1504 | 1505 | /color-name@1.1.3: 1506 | resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} 1507 | dev: true 1508 | 1509 | /color-name@1.1.4: 1510 | resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} 1511 | dev: true 1512 | 1513 | /combined-stream@1.0.8: 1514 | resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} 1515 | engines: {node: '>= 0.8'} 1516 | dependencies: 1517 | delayed-stream: 1.0.0 1518 | dev: true 1519 | 1520 | /commander@4.1.1: 1521 | resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} 1522 | engines: {node: '>= 6'} 1523 | dev: true 1524 | 1525 | /component-emitter@1.3.0: 1526 | resolution: {integrity: sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==} 1527 | dev: true 1528 | 1529 | /concat-map@0.0.1: 1530 | resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} 1531 | dev: true 1532 | 1533 | /convert-source-map@1.9.0: 1534 | resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==} 1535 | dev: true 1536 | 1537 | /copy-descriptor@0.1.1: 1538 | resolution: {integrity: sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw==} 1539 | engines: {node: '>=0.10.0'} 1540 | dev: true 1541 | 1542 | /cross-spawn@7.0.3: 1543 | resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} 1544 | engines: {node: '>= 8'} 1545 | dependencies: 1546 | path-key: 3.1.1 1547 | shebang-command: 2.0.0 1548 | which: 2.0.2 1549 | dev: true 1550 | 1551 | /cssom@0.3.8: 1552 | resolution: {integrity: sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==} 1553 | dev: true 1554 | 1555 | /cssom@0.4.4: 1556 | resolution: {integrity: sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==} 1557 | dev: true 1558 | 1559 | /cssstyle@2.3.0: 1560 | resolution: {integrity: sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==} 1561 | engines: {node: '>=8'} 1562 | dependencies: 1563 | cssom: 0.3.8 1564 | dev: true 1565 | 1566 | /data-urls@2.0.0: 1567 | resolution: {integrity: sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==} 1568 | engines: {node: '>=10'} 1569 | dependencies: 1570 | abab: 2.0.6 1571 | whatwg-mimetype: 2.3.0 1572 | whatwg-url: 8.7.0 1573 | dev: true 1574 | 1575 | /debug@2.6.9: 1576 | resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} 1577 | peerDependencies: 1578 | supports-color: '*' 1579 | peerDependenciesMeta: 1580 | supports-color: 1581 | optional: true 1582 | dependencies: 1583 | ms: 2.0.0 1584 | dev: true 1585 | 1586 | /debug@4.3.4: 1587 | resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} 1588 | engines: {node: '>=6.0'} 1589 | peerDependencies: 1590 | supports-color: '*' 1591 | peerDependenciesMeta: 1592 | supports-color: 1593 | optional: true 1594 | dependencies: 1595 | ms: 2.1.2 1596 | dev: true 1597 | 1598 | /decimal.js@10.4.3: 1599 | resolution: {integrity: sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==} 1600 | dev: true 1601 | 1602 | /decode-uri-component@0.2.2: 1603 | resolution: {integrity: sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==} 1604 | engines: {node: '>=0.10'} 1605 | dev: true 1606 | 1607 | /dedent@0.7.0: 1608 | resolution: {integrity: sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==} 1609 | dev: true 1610 | 1611 | /deep-is@0.1.4: 1612 | resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} 1613 | dev: true 1614 | 1615 | /deepmerge@4.2.2: 1616 | resolution: {integrity: sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==} 1617 | engines: {node: '>=0.10.0'} 1618 | dev: true 1619 | 1620 | /define-property@0.2.5: 1621 | resolution: {integrity: sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==} 1622 | engines: {node: '>=0.10.0'} 1623 | dependencies: 1624 | is-descriptor: 0.1.6 1625 | dev: true 1626 | 1627 | /define-property@1.0.0: 1628 | resolution: {integrity: sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==} 1629 | engines: {node: '>=0.10.0'} 1630 | dependencies: 1631 | is-descriptor: 1.0.2 1632 | dev: true 1633 | 1634 | /define-property@2.0.2: 1635 | resolution: {integrity: sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==} 1636 | engines: {node: '>=0.10.0'} 1637 | dependencies: 1638 | is-descriptor: 1.0.2 1639 | isobject: 3.0.1 1640 | dev: true 1641 | 1642 | /delayed-stream@1.0.0: 1643 | resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} 1644 | engines: {node: '>=0.4.0'} 1645 | dev: true 1646 | 1647 | /detect-newline@3.1.0: 1648 | resolution: {integrity: sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==} 1649 | engines: {node: '>=8'} 1650 | dev: true 1651 | 1652 | /diff-sequences@24.9.0: 1653 | resolution: {integrity: sha512-Dj6Wk3tWyTE+Fo1rW8v0Xhwk80um6yFYKbuAxc9c3EZxIHFDYwbi34Uk42u1CdnIiVorvt4RmlSDjIPyzGC2ew==} 1654 | engines: {node: '>= 6'} 1655 | dev: true 1656 | 1657 | /diff-sequences@26.6.2: 1658 | resolution: {integrity: sha512-Mv/TDa3nZ9sbc5soK+OoA74BsS3mL37yixCvUAQkiuA4Wz6YtwP/K47n2rv2ovzHZvoiQeA5FTQOschKkEwB0Q==} 1659 | engines: {node: '>= 10.14.2'} 1660 | dev: true 1661 | 1662 | /diff-sequences@27.5.1: 1663 | resolution: {integrity: sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ==} 1664 | engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} 1665 | dev: true 1666 | 1667 | /dir-glob@3.0.1: 1668 | resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} 1669 | engines: {node: '>=8'} 1670 | dependencies: 1671 | path-type: 4.0.0 1672 | dev: true 1673 | 1674 | /domexception@2.0.1: 1675 | resolution: {integrity: sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==} 1676 | engines: {node: '>=8'} 1677 | dependencies: 1678 | webidl-conversions: 5.0.0 1679 | dev: true 1680 | 1681 | /electron-to-chromium@1.4.284: 1682 | resolution: {integrity: sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA==} 1683 | dev: true 1684 | 1685 | /emittery@0.8.1: 1686 | resolution: {integrity: sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg==} 1687 | engines: {node: '>=10'} 1688 | dev: true 1689 | 1690 | /emoji-regex@8.0.0: 1691 | resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} 1692 | dev: true 1693 | 1694 | /error-ex@1.3.2: 1695 | resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} 1696 | dependencies: 1697 | is-arrayish: 0.2.1 1698 | dev: true 1699 | 1700 | /esbuild-android-64@0.15.18: 1701 | resolution: {integrity: sha512-wnpt3OXRhcjfIDSZu9bnzT4/TNTDsOUvip0foZOUBG7QbSt//w3QV4FInVJxNhKc/ErhUxc5z4QjHtMi7/TbgA==} 1702 | engines: {node: '>=12'} 1703 | cpu: [x64] 1704 | os: [android] 1705 | requiresBuild: true 1706 | dev: true 1707 | optional: true 1708 | 1709 | /esbuild-android-arm64@0.15.18: 1710 | resolution: {integrity: sha512-G4xu89B8FCzav9XU8EjsXacCKSG2FT7wW9J6hOc18soEHJdtWu03L3TQDGf0geNxfLTtxENKBzMSq9LlbjS8OQ==} 1711 | engines: {node: '>=12'} 1712 | cpu: [arm64] 1713 | os: [android] 1714 | requiresBuild: true 1715 | dev: true 1716 | optional: true 1717 | 1718 | /esbuild-darwin-64@0.15.18: 1719 | resolution: {integrity: sha512-2WAvs95uPnVJPuYKP0Eqx+Dl/jaYseZEUUT1sjg97TJa4oBtbAKnPnl3b5M9l51/nbx7+QAEtuummJZW0sBEmg==} 1720 | engines: {node: '>=12'} 1721 | cpu: [x64] 1722 | os: [darwin] 1723 | requiresBuild: true 1724 | dev: true 1725 | optional: true 1726 | 1727 | /esbuild-darwin-arm64@0.15.18: 1728 | resolution: {integrity: sha512-tKPSxcTJ5OmNb1btVikATJ8NftlyNlc8BVNtyT/UAr62JFOhwHlnoPrhYWz09akBLHI9nElFVfWSTSRsrZiDUA==} 1729 | engines: {node: '>=12'} 1730 | cpu: [arm64] 1731 | os: [darwin] 1732 | requiresBuild: true 1733 | dev: true 1734 | optional: true 1735 | 1736 | /esbuild-freebsd-64@0.15.18: 1737 | resolution: {integrity: sha512-TT3uBUxkteAjR1QbsmvSsjpKjOX6UkCstr8nMr+q7zi3NuZ1oIpa8U41Y8I8dJH2fJgdC3Dj3CXO5biLQpfdZA==} 1738 | engines: {node: '>=12'} 1739 | cpu: [x64] 1740 | os: [freebsd] 1741 | requiresBuild: true 1742 | dev: true 1743 | optional: true 1744 | 1745 | /esbuild-freebsd-arm64@0.15.18: 1746 | resolution: {integrity: sha512-R/oVr+X3Tkh+S0+tL41wRMbdWtpWB8hEAMsOXDumSSa6qJR89U0S/PpLXrGF7Wk/JykfpWNokERUpCeHDl47wA==} 1747 | engines: {node: '>=12'} 1748 | cpu: [arm64] 1749 | os: [freebsd] 1750 | requiresBuild: true 1751 | dev: true 1752 | optional: true 1753 | 1754 | /esbuild-linux-32@0.15.18: 1755 | resolution: {integrity: sha512-lphF3HiCSYtaa9p1DtXndiQEeQDKPl9eN/XNoBf2amEghugNuqXNZA/ZovthNE2aa4EN43WroO0B85xVSjYkbg==} 1756 | engines: {node: '>=12'} 1757 | cpu: [ia32] 1758 | os: [linux] 1759 | requiresBuild: true 1760 | dev: true 1761 | optional: true 1762 | 1763 | /esbuild-linux-64@0.15.18: 1764 | resolution: {integrity: sha512-hNSeP97IviD7oxLKFuii5sDPJ+QHeiFTFLoLm7NZQligur8poNOWGIgpQ7Qf8Balb69hptMZzyOBIPtY09GZYw==} 1765 | engines: {node: '>=12'} 1766 | cpu: [x64] 1767 | os: [linux] 1768 | requiresBuild: true 1769 | dev: true 1770 | optional: true 1771 | 1772 | /esbuild-linux-arm64@0.15.18: 1773 | resolution: {integrity: sha512-54qr8kg/6ilcxd+0V3h9rjT4qmjc0CccMVWrjOEM/pEcUzt8X62HfBSeZfT2ECpM7104mk4yfQXkosY8Quptug==} 1774 | engines: {node: '>=12'} 1775 | cpu: [arm64] 1776 | os: [linux] 1777 | requiresBuild: true 1778 | dev: true 1779 | optional: true 1780 | 1781 | /esbuild-linux-arm@0.15.18: 1782 | resolution: {integrity: sha512-UH779gstRblS4aoS2qpMl3wjg7U0j+ygu3GjIeTonCcN79ZvpPee12Qun3vcdxX+37O5LFxz39XeW2I9bybMVA==} 1783 | engines: {node: '>=12'} 1784 | cpu: [arm] 1785 | os: [linux] 1786 | requiresBuild: true 1787 | dev: true 1788 | optional: true 1789 | 1790 | /esbuild-linux-mips64le@0.15.18: 1791 | resolution: {integrity: sha512-Mk6Ppwzzz3YbMl/ZZL2P0q1tnYqh/trYZ1VfNP47C31yT0K8t9s7Z077QrDA/guU60tGNp2GOwCQnp+DYv7bxQ==} 1792 | engines: {node: '>=12'} 1793 | cpu: [mips64el] 1794 | os: [linux] 1795 | requiresBuild: true 1796 | dev: true 1797 | optional: true 1798 | 1799 | /esbuild-linux-ppc64le@0.15.18: 1800 | resolution: {integrity: sha512-b0XkN4pL9WUulPTa/VKHx2wLCgvIAbgwABGnKMY19WhKZPT+8BxhZdqz6EgkqCLld7X5qiCY2F/bfpUUlnFZ9w==} 1801 | engines: {node: '>=12'} 1802 | cpu: [ppc64] 1803 | os: [linux] 1804 | requiresBuild: true 1805 | dev: true 1806 | optional: true 1807 | 1808 | /esbuild-linux-riscv64@0.15.18: 1809 | resolution: {integrity: sha512-ba2COaoF5wL6VLZWn04k+ACZjZ6NYniMSQStodFKH/Pu6RxzQqzsmjR1t9QC89VYJxBeyVPTaHuBMCejl3O/xg==} 1810 | engines: {node: '>=12'} 1811 | cpu: [riscv64] 1812 | os: [linux] 1813 | requiresBuild: true 1814 | dev: true 1815 | optional: true 1816 | 1817 | /esbuild-linux-s390x@0.15.18: 1818 | resolution: {integrity: sha512-VbpGuXEl5FCs1wDVp93O8UIzl3ZrglgnSQ+Hu79g7hZu6te6/YHgVJxCM2SqfIila0J3k0csfnf8VD2W7u2kzQ==} 1819 | engines: {node: '>=12'} 1820 | cpu: [s390x] 1821 | os: [linux] 1822 | requiresBuild: true 1823 | dev: true 1824 | optional: true 1825 | 1826 | /esbuild-netbsd-64@0.15.18: 1827 | resolution: {integrity: sha512-98ukeCdvdX7wr1vUYQzKo4kQ0N2p27H7I11maINv73fVEXt2kyh4K4m9f35U1K43Xc2QGXlzAw0K9yoU7JUjOg==} 1828 | engines: {node: '>=12'} 1829 | cpu: [x64] 1830 | os: [netbsd] 1831 | requiresBuild: true 1832 | dev: true 1833 | optional: true 1834 | 1835 | /esbuild-openbsd-64@0.15.18: 1836 | resolution: {integrity: sha512-yK5NCcH31Uae076AyQAXeJzt/vxIo9+omZRKj1pauhk3ITuADzuOx5N2fdHrAKPxN+zH3w96uFKlY7yIn490xQ==} 1837 | engines: {node: '>=12'} 1838 | cpu: [x64] 1839 | os: [openbsd] 1840 | requiresBuild: true 1841 | dev: true 1842 | optional: true 1843 | 1844 | /esbuild-sunos-64@0.15.18: 1845 | resolution: {integrity: sha512-On22LLFlBeLNj/YF3FT+cXcyKPEI263nflYlAhz5crxtp3yRG1Ugfr7ITyxmCmjm4vbN/dGrb/B7w7U8yJR9yw==} 1846 | engines: {node: '>=12'} 1847 | cpu: [x64] 1848 | os: [sunos] 1849 | requiresBuild: true 1850 | dev: true 1851 | optional: true 1852 | 1853 | /esbuild-windows-32@0.15.18: 1854 | resolution: {integrity: sha512-o+eyLu2MjVny/nt+E0uPnBxYuJHBvho8vWsC2lV61A7wwTWC3jkN2w36jtA+yv1UgYkHRihPuQsL23hsCYGcOQ==} 1855 | engines: {node: '>=12'} 1856 | cpu: [ia32] 1857 | os: [win32] 1858 | requiresBuild: true 1859 | dev: true 1860 | optional: true 1861 | 1862 | /esbuild-windows-64@0.15.18: 1863 | resolution: {integrity: sha512-qinug1iTTaIIrCorAUjR0fcBk24fjzEedFYhhispP8Oc7SFvs+XeW3YpAKiKp8dRpizl4YYAhxMjlftAMJiaUw==} 1864 | engines: {node: '>=12'} 1865 | cpu: [x64] 1866 | os: [win32] 1867 | requiresBuild: true 1868 | dev: true 1869 | optional: true 1870 | 1871 | /esbuild-windows-arm64@0.15.18: 1872 | resolution: {integrity: sha512-q9bsYzegpZcLziq0zgUi5KqGVtfhjxGbnksaBFYmWLxeV/S1fK4OLdq2DFYnXcLMjlZw2L0jLsk1eGoB522WXQ==} 1873 | engines: {node: '>=12'} 1874 | cpu: [arm64] 1875 | os: [win32] 1876 | requiresBuild: true 1877 | dev: true 1878 | optional: true 1879 | 1880 | /esbuild@0.15.18: 1881 | resolution: {integrity: sha512-x/R72SmW3sSFRm5zrrIjAhCeQSAWoni3CmHEqfQrZIQTM3lVCdehdwuIqaOtfC2slvpdlLa62GYoN8SxT23m6Q==} 1882 | engines: {node: '>=12'} 1883 | hasBin: true 1884 | requiresBuild: true 1885 | optionalDependencies: 1886 | '@esbuild/android-arm': 0.15.18 1887 | '@esbuild/linux-loong64': 0.15.18 1888 | esbuild-android-64: 0.15.18 1889 | esbuild-android-arm64: 0.15.18 1890 | esbuild-darwin-64: 0.15.18 1891 | esbuild-darwin-arm64: 0.15.18 1892 | esbuild-freebsd-64: 0.15.18 1893 | esbuild-freebsd-arm64: 0.15.18 1894 | esbuild-linux-32: 0.15.18 1895 | esbuild-linux-64: 0.15.18 1896 | esbuild-linux-arm: 0.15.18 1897 | esbuild-linux-arm64: 0.15.18 1898 | esbuild-linux-mips64le: 0.15.18 1899 | esbuild-linux-ppc64le: 0.15.18 1900 | esbuild-linux-riscv64: 0.15.18 1901 | esbuild-linux-s390x: 0.15.18 1902 | esbuild-netbsd-64: 0.15.18 1903 | esbuild-openbsd-64: 0.15.18 1904 | esbuild-sunos-64: 0.15.18 1905 | esbuild-windows-32: 0.15.18 1906 | esbuild-windows-64: 0.15.18 1907 | esbuild-windows-arm64: 0.15.18 1908 | dev: true 1909 | 1910 | /escalade@3.1.1: 1911 | resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} 1912 | engines: {node: '>=6'} 1913 | dev: true 1914 | 1915 | /escape-string-regexp@1.0.5: 1916 | resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} 1917 | engines: {node: '>=0.8.0'} 1918 | dev: true 1919 | 1920 | /escape-string-regexp@2.0.0: 1921 | resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==} 1922 | engines: {node: '>=8'} 1923 | dev: true 1924 | 1925 | /escodegen@2.0.0: 1926 | resolution: {integrity: sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==} 1927 | engines: {node: '>=6.0'} 1928 | hasBin: true 1929 | dependencies: 1930 | esprima: 4.0.1 1931 | estraverse: 5.3.0 1932 | esutils: 2.0.3 1933 | optionator: 0.8.3 1934 | optionalDependencies: 1935 | source-map: 0.6.1 1936 | dev: true 1937 | 1938 | /esprima@4.0.1: 1939 | resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} 1940 | engines: {node: '>=4'} 1941 | hasBin: true 1942 | dev: true 1943 | 1944 | /estraverse@5.3.0: 1945 | resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} 1946 | engines: {node: '>=4.0'} 1947 | dev: true 1948 | 1949 | /esutils@2.0.3: 1950 | resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} 1951 | engines: {node: '>=0.10.0'} 1952 | dev: true 1953 | 1954 | /execa@5.1.1: 1955 | resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} 1956 | engines: {node: '>=10'} 1957 | dependencies: 1958 | cross-spawn: 7.0.3 1959 | get-stream: 6.0.1 1960 | human-signals: 2.1.0 1961 | is-stream: 2.0.1 1962 | merge-stream: 2.0.0 1963 | npm-run-path: 4.0.1 1964 | onetime: 5.1.2 1965 | signal-exit: 3.0.7 1966 | strip-final-newline: 2.0.0 1967 | dev: true 1968 | 1969 | /exit@0.1.2: 1970 | resolution: {integrity: sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==} 1971 | engines: {node: '>= 0.8.0'} 1972 | dev: true 1973 | 1974 | /expand-brackets@2.1.4: 1975 | resolution: {integrity: sha512-w/ozOKR9Obk3qoWeY/WDi6MFta9AoMR+zud60mdnbniMcBxRuFJyDt2LdX/14A1UABeqk+Uk+LDfUpvoGKppZA==} 1976 | engines: {node: '>=0.10.0'} 1977 | dependencies: 1978 | debug: 2.6.9 1979 | define-property: 0.2.5 1980 | extend-shallow: 2.0.1 1981 | posix-character-classes: 0.1.1 1982 | regex-not: 1.0.2 1983 | snapdragon: 0.8.2 1984 | to-regex: 3.0.2 1985 | transitivePeerDependencies: 1986 | - supports-color 1987 | dev: true 1988 | 1989 | /expect@24.9.0: 1990 | resolution: {integrity: sha512-wvVAx8XIol3Z5m9zvZXiyZOQ+sRJqNTIm6sGjdWlaZIeupQGO3WbYI+15D/AmEwZywL6wtJkbAbJtzkOfBuR0Q==} 1991 | engines: {node: '>= 6'} 1992 | dependencies: 1993 | '@jest/types': 24.9.0 1994 | ansi-styles: 3.2.1 1995 | jest-get-type: 24.9.0 1996 | jest-matcher-utils: 24.9.0 1997 | jest-message-util: 24.9.0 1998 | jest-regex-util: 24.9.0 1999 | transitivePeerDependencies: 2000 | - supports-color 2001 | dev: true 2002 | 2003 | /expect@27.5.1: 2004 | resolution: {integrity: sha512-E1q5hSUG2AmYQwQJ041nvgpkODHQvB+RKlB4IYdru6uJsyFTRyZAP463M+1lINorwbqAmUggi6+WwkD8lCS/Dw==} 2005 | engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} 2006 | dependencies: 2007 | '@jest/types': 27.5.1 2008 | jest-get-type: 27.5.1 2009 | jest-matcher-utils: 27.5.1 2010 | jest-message-util: 27.5.1 2011 | dev: true 2012 | 2013 | /extend-shallow@2.0.1: 2014 | resolution: {integrity: sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==} 2015 | engines: {node: '>=0.10.0'} 2016 | dependencies: 2017 | is-extendable: 0.1.1 2018 | dev: true 2019 | 2020 | /extend-shallow@3.0.2: 2021 | resolution: {integrity: sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==} 2022 | engines: {node: '>=0.10.0'} 2023 | dependencies: 2024 | assign-symbols: 1.0.0 2025 | is-extendable: 1.0.1 2026 | dev: true 2027 | 2028 | /extglob@2.0.4: 2029 | resolution: {integrity: sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==} 2030 | engines: {node: '>=0.10.0'} 2031 | dependencies: 2032 | array-unique: 0.3.2 2033 | define-property: 1.0.0 2034 | expand-brackets: 2.1.4 2035 | extend-shallow: 2.0.1 2036 | fragment-cache: 0.2.1 2037 | regex-not: 1.0.2 2038 | snapdragon: 0.8.2 2039 | to-regex: 3.0.2 2040 | transitivePeerDependencies: 2041 | - supports-color 2042 | dev: true 2043 | 2044 | /fast-glob@3.2.12: 2045 | resolution: {integrity: sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==} 2046 | engines: {node: '>=8.6.0'} 2047 | dependencies: 2048 | '@nodelib/fs.stat': 2.0.5 2049 | '@nodelib/fs.walk': 1.2.8 2050 | glob-parent: 5.1.2 2051 | merge2: 1.4.1 2052 | micromatch: 4.0.5 2053 | dev: true 2054 | 2055 | /fast-json-stable-stringify@2.1.0: 2056 | resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} 2057 | dev: true 2058 | 2059 | /fast-levenshtein@2.0.6: 2060 | resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} 2061 | dev: true 2062 | 2063 | /fastq@1.14.0: 2064 | resolution: {integrity: sha512-eR2D+V9/ExcbF9ls441yIuN6TI2ED1Y2ZcA5BmMtJsOkWOFRJQ0Jt0g1UwqXJJVAb+V+umH5Dfr8oh4EVP7VVg==} 2065 | dependencies: 2066 | reusify: 1.0.4 2067 | dev: true 2068 | 2069 | /fb-watchman@2.0.2: 2070 | resolution: {integrity: sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==} 2071 | dependencies: 2072 | bser: 2.1.1 2073 | dev: true 2074 | 2075 | /fill-range@4.0.0: 2076 | resolution: {integrity: sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==} 2077 | engines: {node: '>=0.10.0'} 2078 | dependencies: 2079 | extend-shallow: 2.0.1 2080 | is-number: 3.0.0 2081 | repeat-string: 1.6.1 2082 | to-regex-range: 2.1.1 2083 | dev: true 2084 | 2085 | /fill-range@7.0.1: 2086 | resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} 2087 | engines: {node: '>=8'} 2088 | dependencies: 2089 | to-regex-range: 5.0.1 2090 | dev: true 2091 | 2092 | /find-up@4.1.0: 2093 | resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} 2094 | engines: {node: '>=8'} 2095 | dependencies: 2096 | locate-path: 5.0.0 2097 | path-exists: 4.0.0 2098 | dev: true 2099 | 2100 | /for-in@1.0.2: 2101 | resolution: {integrity: sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==} 2102 | engines: {node: '>=0.10.0'} 2103 | dev: true 2104 | 2105 | /form-data@3.0.1: 2106 | resolution: {integrity: sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==} 2107 | engines: {node: '>= 6'} 2108 | dependencies: 2109 | asynckit: 0.4.0 2110 | combined-stream: 1.0.8 2111 | mime-types: 2.1.35 2112 | dev: true 2113 | 2114 | /fragment-cache@0.2.1: 2115 | resolution: {integrity: sha512-GMBAbW9antB8iZRHLoGw0b3HANt57diZYFO/HL1JGIC1MjKrdmhxvrJbupnVvpys0zsz7yBApXdQyfepKly2kA==} 2116 | engines: {node: '>=0.10.0'} 2117 | dependencies: 2118 | map-cache: 0.2.2 2119 | dev: true 2120 | 2121 | /fs.realpath@1.0.0: 2122 | resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} 2123 | dev: true 2124 | 2125 | /fsevents@2.3.2: 2126 | resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} 2127 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} 2128 | os: [darwin] 2129 | requiresBuild: true 2130 | dev: true 2131 | optional: true 2132 | 2133 | /function-bind@1.1.1: 2134 | resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} 2135 | dev: true 2136 | 2137 | /gensync@1.0.0-beta.2: 2138 | resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} 2139 | engines: {node: '>=6.9.0'} 2140 | dev: true 2141 | 2142 | /get-caller-file@2.0.5: 2143 | resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} 2144 | engines: {node: 6.* || 8.* || >= 10.*} 2145 | dev: true 2146 | 2147 | /get-package-type@0.1.0: 2148 | resolution: {integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==} 2149 | engines: {node: '>=8.0.0'} 2150 | dev: true 2151 | 2152 | /get-stream@6.0.1: 2153 | resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} 2154 | engines: {node: '>=10'} 2155 | dev: true 2156 | 2157 | /get-value@2.0.6: 2158 | resolution: {integrity: sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA==} 2159 | engines: {node: '>=0.10.0'} 2160 | dev: true 2161 | 2162 | /glob-parent@5.1.2: 2163 | resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} 2164 | engines: {node: '>= 6'} 2165 | dependencies: 2166 | is-glob: 4.0.3 2167 | dev: true 2168 | 2169 | /glob@7.1.6: 2170 | resolution: {integrity: sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==} 2171 | dependencies: 2172 | fs.realpath: 1.0.0 2173 | inflight: 1.0.6 2174 | inherits: 2.0.4 2175 | minimatch: 3.1.2 2176 | once: 1.4.0 2177 | path-is-absolute: 1.0.1 2178 | dev: true 2179 | 2180 | /glob@7.2.3: 2181 | resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} 2182 | dependencies: 2183 | fs.realpath: 1.0.0 2184 | inflight: 1.0.6 2185 | inherits: 2.0.4 2186 | minimatch: 3.1.2 2187 | once: 1.4.0 2188 | path-is-absolute: 1.0.1 2189 | dev: true 2190 | 2191 | /globals@11.12.0: 2192 | resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} 2193 | engines: {node: '>=4'} 2194 | dev: true 2195 | 2196 | /globby@11.1.0: 2197 | resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} 2198 | engines: {node: '>=10'} 2199 | dependencies: 2200 | array-union: 2.1.0 2201 | dir-glob: 3.0.1 2202 | fast-glob: 3.2.12 2203 | ignore: 5.2.4 2204 | merge2: 1.4.1 2205 | slash: 3.0.0 2206 | dev: true 2207 | 2208 | /graceful-fs@4.2.10: 2209 | resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==} 2210 | dev: true 2211 | 2212 | /has-flag@3.0.0: 2213 | resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} 2214 | engines: {node: '>=4'} 2215 | dev: true 2216 | 2217 | /has-flag@4.0.0: 2218 | resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} 2219 | engines: {node: '>=8'} 2220 | dev: true 2221 | 2222 | /has-value@0.3.1: 2223 | resolution: {integrity: sha512-gpG936j8/MzaeID5Yif+577c17TxaDmhuyVgSwtnL/q8UUTySg8Mecb+8Cf1otgLoD7DDH75axp86ER7LFsf3Q==} 2224 | engines: {node: '>=0.10.0'} 2225 | dependencies: 2226 | get-value: 2.0.6 2227 | has-values: 0.1.4 2228 | isobject: 2.1.0 2229 | dev: true 2230 | 2231 | /has-value@1.0.0: 2232 | resolution: {integrity: sha512-IBXk4GTsLYdQ7Rvt+GRBrFSVEkmuOUy4re0Xjd9kJSUQpnTrWR4/y9RpfexN9vkAPMFuQoeWKwqzPozRTlasGw==} 2233 | engines: {node: '>=0.10.0'} 2234 | dependencies: 2235 | get-value: 2.0.6 2236 | has-values: 1.0.0 2237 | isobject: 3.0.1 2238 | dev: true 2239 | 2240 | /has-values@0.1.4: 2241 | resolution: {integrity: sha512-J8S0cEdWuQbqD9//tlZxiMuMNmxB8PlEwvYwuxsTmR1G5RXUePEX/SJn7aD0GMLieuZYSwNH0cQuJGwnYunXRQ==} 2242 | engines: {node: '>=0.10.0'} 2243 | dev: true 2244 | 2245 | /has-values@1.0.0: 2246 | resolution: {integrity: sha512-ODYZC64uqzmtfGMEAX/FvZiRyWLpAC3vYnNunURUnkGVTS+mI0smVsWaPydRBsE3g+ok7h960jChO8mFcWlHaQ==} 2247 | engines: {node: '>=0.10.0'} 2248 | dependencies: 2249 | is-number: 3.0.0 2250 | kind-of: 4.0.0 2251 | dev: true 2252 | 2253 | /has@1.0.3: 2254 | resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==} 2255 | engines: {node: '>= 0.4.0'} 2256 | dependencies: 2257 | function-bind: 1.1.1 2258 | dev: true 2259 | 2260 | /html-encoding-sniffer@2.0.1: 2261 | resolution: {integrity: sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==} 2262 | engines: {node: '>=10'} 2263 | dependencies: 2264 | whatwg-encoding: 1.0.5 2265 | dev: true 2266 | 2267 | /html-escaper@2.0.2: 2268 | resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} 2269 | dev: true 2270 | 2271 | /http-proxy-agent@4.0.1: 2272 | resolution: {integrity: sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==} 2273 | engines: {node: '>= 6'} 2274 | dependencies: 2275 | '@tootallnate/once': 1.1.2 2276 | agent-base: 6.0.2 2277 | debug: 4.3.4 2278 | transitivePeerDependencies: 2279 | - supports-color 2280 | dev: true 2281 | 2282 | /https-proxy-agent@5.0.1: 2283 | resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==} 2284 | engines: {node: '>= 6'} 2285 | dependencies: 2286 | agent-base: 6.0.2 2287 | debug: 4.3.4 2288 | transitivePeerDependencies: 2289 | - supports-color 2290 | dev: true 2291 | 2292 | /human-signals@2.1.0: 2293 | resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} 2294 | engines: {node: '>=10.17.0'} 2295 | dev: true 2296 | 2297 | /iconv-lite@0.4.24: 2298 | resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} 2299 | engines: {node: '>=0.10.0'} 2300 | dependencies: 2301 | safer-buffer: 2.1.2 2302 | dev: true 2303 | 2304 | /ignore@5.2.4: 2305 | resolution: {integrity: sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==} 2306 | engines: {node: '>= 4'} 2307 | dev: true 2308 | 2309 | /import-local@3.1.0: 2310 | resolution: {integrity: sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==} 2311 | engines: {node: '>=8'} 2312 | hasBin: true 2313 | dependencies: 2314 | pkg-dir: 4.2.0 2315 | resolve-cwd: 3.0.0 2316 | dev: true 2317 | 2318 | /imurmurhash@0.1.4: 2319 | resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} 2320 | engines: {node: '>=0.8.19'} 2321 | dev: true 2322 | 2323 | /inflight@1.0.6: 2324 | resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} 2325 | dependencies: 2326 | once: 1.4.0 2327 | wrappy: 1.0.2 2328 | dev: true 2329 | 2330 | /inherits@2.0.4: 2331 | resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} 2332 | dev: true 2333 | 2334 | /is-accessor-descriptor@0.1.6: 2335 | resolution: {integrity: sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==} 2336 | engines: {node: '>=0.10.0'} 2337 | dependencies: 2338 | kind-of: 3.2.2 2339 | dev: true 2340 | 2341 | /is-accessor-descriptor@1.0.0: 2342 | resolution: {integrity: sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==} 2343 | engines: {node: '>=0.10.0'} 2344 | dependencies: 2345 | kind-of: 6.0.3 2346 | dev: true 2347 | 2348 | /is-arrayish@0.2.1: 2349 | resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} 2350 | dev: true 2351 | 2352 | /is-binary-path@2.1.0: 2353 | resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} 2354 | engines: {node: '>=8'} 2355 | dependencies: 2356 | binary-extensions: 2.2.0 2357 | dev: true 2358 | 2359 | /is-buffer@1.1.6: 2360 | resolution: {integrity: sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==} 2361 | dev: true 2362 | 2363 | /is-core-module@2.11.0: 2364 | resolution: {integrity: sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==} 2365 | dependencies: 2366 | has: 1.0.3 2367 | dev: true 2368 | 2369 | /is-data-descriptor@0.1.4: 2370 | resolution: {integrity: sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==} 2371 | engines: {node: '>=0.10.0'} 2372 | dependencies: 2373 | kind-of: 3.2.2 2374 | dev: true 2375 | 2376 | /is-data-descriptor@1.0.0: 2377 | resolution: {integrity: sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==} 2378 | engines: {node: '>=0.10.0'} 2379 | dependencies: 2380 | kind-of: 6.0.3 2381 | dev: true 2382 | 2383 | /is-descriptor@0.1.6: 2384 | resolution: {integrity: sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==} 2385 | engines: {node: '>=0.10.0'} 2386 | dependencies: 2387 | is-accessor-descriptor: 0.1.6 2388 | is-data-descriptor: 0.1.4 2389 | kind-of: 5.1.0 2390 | dev: true 2391 | 2392 | /is-descriptor@1.0.2: 2393 | resolution: {integrity: sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==} 2394 | engines: {node: '>=0.10.0'} 2395 | dependencies: 2396 | is-accessor-descriptor: 1.0.0 2397 | is-data-descriptor: 1.0.0 2398 | kind-of: 6.0.3 2399 | dev: true 2400 | 2401 | /is-extendable@0.1.1: 2402 | resolution: {integrity: sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==} 2403 | engines: {node: '>=0.10.0'} 2404 | dev: true 2405 | 2406 | /is-extendable@1.0.1: 2407 | resolution: {integrity: sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==} 2408 | engines: {node: '>=0.10.0'} 2409 | dependencies: 2410 | is-plain-object: 2.0.4 2411 | dev: true 2412 | 2413 | /is-extglob@2.1.1: 2414 | resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} 2415 | engines: {node: '>=0.10.0'} 2416 | dev: true 2417 | 2418 | /is-fullwidth-code-point@3.0.0: 2419 | resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} 2420 | engines: {node: '>=8'} 2421 | dev: true 2422 | 2423 | /is-generator-fn@2.1.0: 2424 | resolution: {integrity: sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==} 2425 | engines: {node: '>=6'} 2426 | dev: true 2427 | 2428 | /is-glob@4.0.3: 2429 | resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} 2430 | engines: {node: '>=0.10.0'} 2431 | dependencies: 2432 | is-extglob: 2.1.1 2433 | dev: true 2434 | 2435 | /is-number@3.0.0: 2436 | resolution: {integrity: sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==} 2437 | engines: {node: '>=0.10.0'} 2438 | dependencies: 2439 | kind-of: 3.2.2 2440 | dev: true 2441 | 2442 | /is-number@7.0.0: 2443 | resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} 2444 | engines: {node: '>=0.12.0'} 2445 | dev: true 2446 | 2447 | /is-plain-object@2.0.4: 2448 | resolution: {integrity: sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==} 2449 | engines: {node: '>=0.10.0'} 2450 | dependencies: 2451 | isobject: 3.0.1 2452 | dev: true 2453 | 2454 | /is-potential-custom-element-name@1.0.1: 2455 | resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==} 2456 | dev: true 2457 | 2458 | /is-stream@2.0.1: 2459 | resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} 2460 | engines: {node: '>=8'} 2461 | dev: true 2462 | 2463 | /is-typedarray@1.0.0: 2464 | resolution: {integrity: sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==} 2465 | dev: true 2466 | 2467 | /is-windows@1.0.2: 2468 | resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==} 2469 | engines: {node: '>=0.10.0'} 2470 | dev: true 2471 | 2472 | /isarray@1.0.0: 2473 | resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} 2474 | dev: true 2475 | 2476 | /isexe@2.0.0: 2477 | resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} 2478 | dev: true 2479 | 2480 | /isobject@2.1.0: 2481 | resolution: {integrity: sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA==} 2482 | engines: {node: '>=0.10.0'} 2483 | dependencies: 2484 | isarray: 1.0.0 2485 | dev: true 2486 | 2487 | /isobject@3.0.1: 2488 | resolution: {integrity: sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==} 2489 | engines: {node: '>=0.10.0'} 2490 | dev: true 2491 | 2492 | /istanbul-lib-coverage@3.2.0: 2493 | resolution: {integrity: sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==} 2494 | engines: {node: '>=8'} 2495 | dev: true 2496 | 2497 | /istanbul-lib-instrument@5.2.1: 2498 | resolution: {integrity: sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==} 2499 | engines: {node: '>=8'} 2500 | dependencies: 2501 | '@babel/core': 7.20.5 2502 | '@babel/parser': 7.20.5 2503 | '@istanbuljs/schema': 0.1.3 2504 | istanbul-lib-coverage: 3.2.0 2505 | semver: 6.3.0 2506 | transitivePeerDependencies: 2507 | - supports-color 2508 | dev: true 2509 | 2510 | /istanbul-lib-report@3.0.0: 2511 | resolution: {integrity: sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==} 2512 | engines: {node: '>=8'} 2513 | dependencies: 2514 | istanbul-lib-coverage: 3.2.0 2515 | make-dir: 3.1.0 2516 | supports-color: 7.2.0 2517 | dev: true 2518 | 2519 | /istanbul-lib-source-maps@4.0.1: 2520 | resolution: {integrity: sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==} 2521 | engines: {node: '>=10'} 2522 | dependencies: 2523 | debug: 4.3.4 2524 | istanbul-lib-coverage: 3.2.0 2525 | source-map: 0.6.1 2526 | transitivePeerDependencies: 2527 | - supports-color 2528 | dev: true 2529 | 2530 | /istanbul-reports@3.1.5: 2531 | resolution: {integrity: sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w==} 2532 | engines: {node: '>=8'} 2533 | dependencies: 2534 | html-escaper: 2.0.2 2535 | istanbul-lib-report: 3.0.0 2536 | dev: true 2537 | 2538 | /jest-changed-files@27.5.1: 2539 | resolution: {integrity: sha512-buBLMiByfWGCoMsLLzGUUSpAmIAGnbR2KJoMN10ziLhOLvP4e0SlypHnAel8iqQXTrcbmfEY9sSqae5sgUsTvw==} 2540 | engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} 2541 | dependencies: 2542 | '@jest/types': 27.5.1 2543 | execa: 5.1.1 2544 | throat: 6.0.1 2545 | dev: true 2546 | 2547 | /jest-circus@27.5.1: 2548 | resolution: {integrity: sha512-D95R7x5UtlMA5iBYsOHFFbMD/GVA4R/Kdq15f7xYWUfWHBto9NYRsOvnSauTgdF+ogCpJ4tyKOXhUifxS65gdw==} 2549 | engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} 2550 | dependencies: 2551 | '@jest/environment': 27.5.1 2552 | '@jest/test-result': 27.5.1 2553 | '@jest/types': 27.5.1 2554 | '@types/node': 16.18.10 2555 | chalk: 4.1.2 2556 | co: 4.6.0 2557 | dedent: 0.7.0 2558 | expect: 27.5.1 2559 | is-generator-fn: 2.1.0 2560 | jest-each: 27.5.1 2561 | jest-matcher-utils: 27.5.1 2562 | jest-message-util: 27.5.1 2563 | jest-runtime: 27.5.1 2564 | jest-snapshot: 27.5.1 2565 | jest-util: 27.5.1 2566 | pretty-format: 27.5.1 2567 | slash: 3.0.0 2568 | stack-utils: 2.0.6 2569 | throat: 6.0.1 2570 | transitivePeerDependencies: 2571 | - supports-color 2572 | dev: true 2573 | 2574 | /jest-cli@27.5.1: 2575 | resolution: {integrity: sha512-Hc6HOOwYq4/74/c62dEE3r5elx8wjYqxY0r0G/nFrLDPMFRu6RA/u8qINOIkvhxG7mMQ5EJsOGfRpI8L6eFUVw==} 2576 | engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} 2577 | hasBin: true 2578 | peerDependencies: 2579 | node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 2580 | peerDependenciesMeta: 2581 | node-notifier: 2582 | optional: true 2583 | dependencies: 2584 | '@jest/core': 27.5.1 2585 | '@jest/test-result': 27.5.1 2586 | '@jest/types': 27.5.1 2587 | chalk: 4.1.2 2588 | exit: 0.1.2 2589 | graceful-fs: 4.2.10 2590 | import-local: 3.1.0 2591 | jest-config: 27.5.1 2592 | jest-util: 27.5.1 2593 | jest-validate: 27.5.1 2594 | prompts: 2.4.2 2595 | yargs: 16.2.0 2596 | transitivePeerDependencies: 2597 | - bufferutil 2598 | - canvas 2599 | - supports-color 2600 | - ts-node 2601 | - utf-8-validate 2602 | dev: true 2603 | 2604 | /jest-config@27.5.1: 2605 | resolution: {integrity: sha512-5sAsjm6tGdsVbW9ahcChPAFCk4IlkQUknH5AvKjuLTSlcO/wCZKyFdn7Rg0EkC+OGgWODEy2hDpWB1PgzH0JNA==} 2606 | engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} 2607 | peerDependencies: 2608 | ts-node: '>=9.0.0' 2609 | peerDependenciesMeta: 2610 | ts-node: 2611 | optional: true 2612 | dependencies: 2613 | '@babel/core': 7.20.5 2614 | '@jest/test-sequencer': 27.5.1 2615 | '@jest/types': 27.5.1 2616 | babel-jest: 27.5.1(@babel/core@7.20.5) 2617 | chalk: 4.1.2 2618 | ci-info: 3.7.0 2619 | deepmerge: 4.2.2 2620 | glob: 7.2.3 2621 | graceful-fs: 4.2.10 2622 | jest-circus: 27.5.1 2623 | jest-environment-jsdom: 27.5.1 2624 | jest-environment-node: 27.5.1 2625 | jest-get-type: 27.5.1 2626 | jest-jasmine2: 27.5.1 2627 | jest-regex-util: 27.5.1 2628 | jest-resolve: 27.5.1 2629 | jest-runner: 27.5.1 2630 | jest-util: 27.5.1 2631 | jest-validate: 27.5.1 2632 | micromatch: 4.0.5 2633 | parse-json: 5.2.0 2634 | pretty-format: 27.5.1 2635 | slash: 3.0.0 2636 | strip-json-comments: 3.1.1 2637 | transitivePeerDependencies: 2638 | - bufferutil 2639 | - canvas 2640 | - supports-color 2641 | - utf-8-validate 2642 | dev: true 2643 | 2644 | /jest-diff@24.9.0: 2645 | resolution: {integrity: sha512-qMfrTs8AdJE2iqrTp0hzh7kTd2PQWrsFyj9tORoKmu32xjPjeE4NyjVRDz8ybYwqS2ik8N4hsIpiVTyFeo2lBQ==} 2646 | engines: {node: '>= 6'} 2647 | dependencies: 2648 | chalk: 2.4.2 2649 | diff-sequences: 24.9.0 2650 | jest-get-type: 24.9.0 2651 | pretty-format: 24.9.0 2652 | dev: true 2653 | 2654 | /jest-diff@26.6.2: 2655 | resolution: {integrity: sha512-6m+9Z3Gv9wN0WFVasqjCL/06+EFCMTqDEUl/b87HYK2rAPTyfz4ZIuSlPhY51PIQRWx5TaxeF1qmXKe9gfN3sA==} 2656 | engines: {node: '>= 10.14.2'} 2657 | dependencies: 2658 | chalk: 4.1.2 2659 | diff-sequences: 26.6.2 2660 | jest-get-type: 26.3.0 2661 | pretty-format: 26.6.2 2662 | dev: true 2663 | 2664 | /jest-diff@27.5.1: 2665 | resolution: {integrity: sha512-m0NvkX55LDt9T4mctTEgnZk3fmEg3NRYutvMPWM/0iPnkFj2wIeF45O1718cMSOFO1vINkqmxqD8vE37uTEbqw==} 2666 | engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} 2667 | dependencies: 2668 | chalk: 4.1.2 2669 | diff-sequences: 27.5.1 2670 | jest-get-type: 27.5.1 2671 | pretty-format: 27.5.1 2672 | dev: true 2673 | 2674 | /jest-docblock@27.5.1: 2675 | resolution: {integrity: sha512-rl7hlABeTsRYxKiUfpHrQrG4e2obOiTQWfMEH3PxPjOtdsfLQO4ReWSZaQ7DETm4xu07rl4q/h4zcKXyU0/OzQ==} 2676 | engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} 2677 | dependencies: 2678 | detect-newline: 3.1.0 2679 | dev: true 2680 | 2681 | /jest-each@27.5.1: 2682 | resolution: {integrity: sha512-1Ff6p+FbhT/bXQnEouYy00bkNSY7OUpfIcmdl8vZ31A1UUaurOLPA8a8BbJOF2RDUElwJhmeaV7LnagI+5UwNQ==} 2683 | engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} 2684 | dependencies: 2685 | '@jest/types': 27.5.1 2686 | chalk: 4.1.2 2687 | jest-get-type: 27.5.1 2688 | jest-util: 27.5.1 2689 | pretty-format: 27.5.1 2690 | dev: true 2691 | 2692 | /jest-environment-jsdom@27.5.1: 2693 | resolution: {integrity: sha512-TFBvkTC1Hnnnrka/fUb56atfDtJ9VMZ94JkjTbggl1PEpwrYtUBKMezB3inLmWqQsXYLcMwNoDQwoBTAvFfsfw==} 2694 | engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} 2695 | dependencies: 2696 | '@jest/environment': 27.5.1 2697 | '@jest/fake-timers': 27.5.1 2698 | '@jest/types': 27.5.1 2699 | '@types/node': 16.18.10 2700 | jest-mock: 27.5.1 2701 | jest-util: 27.5.1 2702 | jsdom: 16.7.0 2703 | transitivePeerDependencies: 2704 | - bufferutil 2705 | - canvas 2706 | - supports-color 2707 | - utf-8-validate 2708 | dev: true 2709 | 2710 | /jest-environment-node@27.5.1: 2711 | resolution: {integrity: sha512-Jt4ZUnxdOsTGwSRAfKEnE6BcwsSPNOijjwifq5sDFSA2kesnXTvNqKHYgM0hDq3549Uf/KzdXNYn4wMZJPlFLw==} 2712 | engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} 2713 | dependencies: 2714 | '@jest/environment': 27.5.1 2715 | '@jest/fake-timers': 27.5.1 2716 | '@jest/types': 27.5.1 2717 | '@types/node': 16.18.10 2718 | jest-mock: 27.5.1 2719 | jest-util: 27.5.1 2720 | dev: true 2721 | 2722 | /jest-extended@0.11.5: 2723 | resolution: {integrity: sha512-3RsdFpLWKScpsLD6hJuyr/tV5iFOrw7v6YjA3tPdda9sJwoHwcMROws5gwiIZfcwhHlJRwFJB2OUvGmF3evV/Q==} 2724 | dependencies: 2725 | expect: 24.9.0 2726 | jest-get-type: 22.4.3 2727 | jest-matcher-utils: 22.4.3 2728 | transitivePeerDependencies: 2729 | - supports-color 2730 | dev: true 2731 | 2732 | /jest-get-type@22.4.3: 2733 | resolution: {integrity: sha512-/jsz0Y+V29w1chdXVygEKSz2nBoHoYqNShPe+QgxSNjAuP1i8+k4LbQNrfoliKej0P45sivkSCh7yiD6ubHS3w==} 2734 | dev: true 2735 | 2736 | /jest-get-type@24.9.0: 2737 | resolution: {integrity: sha512-lUseMzAley4LhIcpSP9Jf+fTrQ4a1yHQwLNeeVa2cEmbCGeoZAtYPOIv8JaxLD/sUpKxetKGP+gsHl8f8TSj8Q==} 2738 | engines: {node: '>= 6'} 2739 | dev: true 2740 | 2741 | /jest-get-type@26.3.0: 2742 | resolution: {integrity: sha512-TpfaviN1R2pQWkIihlfEanwOXK0zcxrKEE4MlU6Tn7keoXdN6/3gK/xl0yEh8DOunn5pOVGKf8hB4R9gVh04ig==} 2743 | engines: {node: '>= 10.14.2'} 2744 | dev: true 2745 | 2746 | /jest-get-type@27.5.1: 2747 | resolution: {integrity: sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw==} 2748 | engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} 2749 | dev: true 2750 | 2751 | /jest-haste-map@27.5.1: 2752 | resolution: {integrity: sha512-7GgkZ4Fw4NFbMSDSpZwXeBiIbx+t/46nJ2QitkOjvwPYyZmqttu2TDSimMHP1EkPOi4xUZAN1doE5Vd25H4Jng==} 2753 | engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} 2754 | dependencies: 2755 | '@jest/types': 27.5.1 2756 | '@types/graceful-fs': 4.1.5 2757 | '@types/node': 16.18.10 2758 | anymatch: 3.1.3 2759 | fb-watchman: 2.0.2 2760 | graceful-fs: 4.2.10 2761 | jest-regex-util: 27.5.1 2762 | jest-serializer: 27.5.1 2763 | jest-util: 27.5.1 2764 | jest-worker: 27.5.1 2765 | micromatch: 4.0.5 2766 | walker: 1.0.8 2767 | optionalDependencies: 2768 | fsevents: 2.3.2 2769 | dev: true 2770 | 2771 | /jest-jasmine2@27.5.1: 2772 | resolution: {integrity: sha512-jtq7VVyG8SqAorDpApwiJJImd0V2wv1xzdheGHRGyuT7gZm6gG47QEskOlzsN1PG/6WNaCo5pmwMHDf3AkG2pQ==} 2773 | engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} 2774 | dependencies: 2775 | '@jest/environment': 27.5.1 2776 | '@jest/source-map': 27.5.1 2777 | '@jest/test-result': 27.5.1 2778 | '@jest/types': 27.5.1 2779 | '@types/node': 16.18.10 2780 | chalk: 4.1.2 2781 | co: 4.6.0 2782 | expect: 27.5.1 2783 | is-generator-fn: 2.1.0 2784 | jest-each: 27.5.1 2785 | jest-matcher-utils: 27.5.1 2786 | jest-message-util: 27.5.1 2787 | jest-runtime: 27.5.1 2788 | jest-snapshot: 27.5.1 2789 | jest-util: 27.5.1 2790 | pretty-format: 27.5.1 2791 | throat: 6.0.1 2792 | transitivePeerDependencies: 2793 | - supports-color 2794 | dev: true 2795 | 2796 | /jest-leak-detector@27.5.1: 2797 | resolution: {integrity: sha512-POXfWAMvfU6WMUXftV4HolnJfnPOGEu10fscNCA76KBpRRhcMN2c8d3iT2pxQS3HLbA+5X4sOUPzYO2NUyIlHQ==} 2798 | engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} 2799 | dependencies: 2800 | jest-get-type: 27.5.1 2801 | pretty-format: 27.5.1 2802 | dev: true 2803 | 2804 | /jest-matcher-utils@22.4.3: 2805 | resolution: {integrity: sha512-lsEHVaTnKzdAPR5t4B6OcxXo9Vy4K+kRRbG5gtddY8lBEC+Mlpvm1CJcsMESRjzUhzkz568exMV1hTB76nAKbA==} 2806 | dependencies: 2807 | chalk: 2.4.2 2808 | jest-get-type: 22.4.3 2809 | pretty-format: 22.4.3 2810 | dev: true 2811 | 2812 | /jest-matcher-utils@24.9.0: 2813 | resolution: {integrity: sha512-OZz2IXsu6eaiMAwe67c1T+5tUAtQyQx27/EMEkbFAGiw52tB9em+uGbzpcgYVpA8wl0hlxKPZxrly4CXU/GjHA==} 2814 | engines: {node: '>= 6'} 2815 | dependencies: 2816 | chalk: 2.4.2 2817 | jest-diff: 24.9.0 2818 | jest-get-type: 24.9.0 2819 | pretty-format: 24.9.0 2820 | dev: true 2821 | 2822 | /jest-matcher-utils@27.5.1: 2823 | resolution: {integrity: sha512-z2uTx/T6LBaCoNWNFWwChLBKYxTMcGBRjAt+2SbP929/Fflb9aa5LGma654Rz8z9HLxsrUaYzxE9T/EFIL/PAw==} 2824 | engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} 2825 | dependencies: 2826 | chalk: 4.1.2 2827 | jest-diff: 27.5.1 2828 | jest-get-type: 27.5.1 2829 | pretty-format: 27.5.1 2830 | dev: true 2831 | 2832 | /jest-message-util@24.9.0: 2833 | resolution: {integrity: sha512-oCj8FiZ3U0hTP4aSui87P4L4jC37BtQwUMqk+zk/b11FR19BJDeZsZAvIHutWnmtw7r85UmR3CEWZ0HWU2mAlw==} 2834 | engines: {node: '>= 6'} 2835 | dependencies: 2836 | '@babel/code-frame': 7.18.6 2837 | '@jest/test-result': 24.9.0 2838 | '@jest/types': 24.9.0 2839 | '@types/stack-utils': 1.0.1 2840 | chalk: 2.4.2 2841 | micromatch: 3.1.10 2842 | slash: 2.0.0 2843 | stack-utils: 1.0.5 2844 | transitivePeerDependencies: 2845 | - supports-color 2846 | dev: true 2847 | 2848 | /jest-message-util@27.5.1: 2849 | resolution: {integrity: sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==} 2850 | engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} 2851 | dependencies: 2852 | '@babel/code-frame': 7.18.6 2853 | '@jest/types': 27.5.1 2854 | '@types/stack-utils': 2.0.1 2855 | chalk: 4.1.2 2856 | graceful-fs: 4.2.10 2857 | micromatch: 4.0.5 2858 | pretty-format: 27.5.1 2859 | slash: 3.0.0 2860 | stack-utils: 2.0.6 2861 | dev: true 2862 | 2863 | /jest-mock@27.5.1: 2864 | resolution: {integrity: sha512-K4jKbY1d4ENhbrG2zuPWaQBvDly+iZ2yAW+T1fATN78hc0sInwn7wZB8XtlNnvHug5RMwV897Xm4LqmPM4e2Og==} 2865 | engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} 2866 | dependencies: 2867 | '@jest/types': 27.5.1 2868 | '@types/node': 16.18.10 2869 | dev: true 2870 | 2871 | /jest-pnp-resolver@1.2.3(jest-resolve@27.5.1): 2872 | resolution: {integrity: sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==} 2873 | engines: {node: '>=6'} 2874 | peerDependencies: 2875 | jest-resolve: '*' 2876 | peerDependenciesMeta: 2877 | jest-resolve: 2878 | optional: true 2879 | dependencies: 2880 | jest-resolve: 27.5.1 2881 | dev: true 2882 | 2883 | /jest-regex-util@24.9.0: 2884 | resolution: {integrity: sha512-05Cmb6CuxaA+Ys6fjr3PhvV3bGQmO+2p2La4hFbU+W5uOc479f7FdLXUWXw4pYMAhhSZIuKHwSXSu6CsSBAXQA==} 2885 | engines: {node: '>= 6'} 2886 | dev: true 2887 | 2888 | /jest-regex-util@27.5.1: 2889 | resolution: {integrity: sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg==} 2890 | engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} 2891 | dev: true 2892 | 2893 | /jest-resolve-dependencies@27.5.1: 2894 | resolution: {integrity: sha512-QQOOdY4PE39iawDn5rzbIePNigfe5B9Z91GDD1ae/xNDlu9kaat8QQ5EKnNmVWPV54hUdxCVwwj6YMgR2O7IOg==} 2895 | engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} 2896 | dependencies: 2897 | '@jest/types': 27.5.1 2898 | jest-regex-util: 27.5.1 2899 | jest-snapshot: 27.5.1 2900 | transitivePeerDependencies: 2901 | - supports-color 2902 | dev: true 2903 | 2904 | /jest-resolve@27.5.1: 2905 | resolution: {integrity: sha512-FFDy8/9E6CV83IMbDpcjOhumAQPDyETnU2KZ1O98DwTnz8AOBsW/Xv3GySr1mOZdItLR+zDZ7I/UdTFbgSOVCw==} 2906 | engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} 2907 | dependencies: 2908 | '@jest/types': 27.5.1 2909 | chalk: 4.1.2 2910 | graceful-fs: 4.2.10 2911 | jest-haste-map: 27.5.1 2912 | jest-pnp-resolver: 1.2.3(jest-resolve@27.5.1) 2913 | jest-util: 27.5.1 2914 | jest-validate: 27.5.1 2915 | resolve: 1.22.1 2916 | resolve.exports: 1.1.0 2917 | slash: 3.0.0 2918 | dev: true 2919 | 2920 | /jest-runner@27.5.1: 2921 | resolution: {integrity: sha512-g4NPsM4mFCOwFKXO4p/H/kWGdJp9V8kURY2lX8Me2drgXqG7rrZAx5kv+5H7wtt/cdFIjhqYx1HrlqWHaOvDaQ==} 2922 | engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} 2923 | dependencies: 2924 | '@jest/console': 27.5.1 2925 | '@jest/environment': 27.5.1 2926 | '@jest/test-result': 27.5.1 2927 | '@jest/transform': 27.5.1 2928 | '@jest/types': 27.5.1 2929 | '@types/node': 16.18.10 2930 | chalk: 4.1.2 2931 | emittery: 0.8.1 2932 | graceful-fs: 4.2.10 2933 | jest-docblock: 27.5.1 2934 | jest-environment-jsdom: 27.5.1 2935 | jest-environment-node: 27.5.1 2936 | jest-haste-map: 27.5.1 2937 | jest-leak-detector: 27.5.1 2938 | jest-message-util: 27.5.1 2939 | jest-resolve: 27.5.1 2940 | jest-runtime: 27.5.1 2941 | jest-util: 27.5.1 2942 | jest-worker: 27.5.1 2943 | source-map-support: 0.5.21 2944 | throat: 6.0.1 2945 | transitivePeerDependencies: 2946 | - bufferutil 2947 | - canvas 2948 | - supports-color 2949 | - utf-8-validate 2950 | dev: true 2951 | 2952 | /jest-runtime@27.5.1: 2953 | resolution: {integrity: sha512-o7gxw3Gf+H2IGt8fv0RiyE1+r83FJBRruoA+FXrlHw6xEyBsU8ugA6IPfTdVyA0w8HClpbK+DGJxH59UrNMx8A==} 2954 | engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} 2955 | dependencies: 2956 | '@jest/environment': 27.5.1 2957 | '@jest/fake-timers': 27.5.1 2958 | '@jest/globals': 27.5.1 2959 | '@jest/source-map': 27.5.1 2960 | '@jest/test-result': 27.5.1 2961 | '@jest/transform': 27.5.1 2962 | '@jest/types': 27.5.1 2963 | chalk: 4.1.2 2964 | cjs-module-lexer: 1.2.2 2965 | collect-v8-coverage: 1.0.1 2966 | execa: 5.1.1 2967 | glob: 7.2.3 2968 | graceful-fs: 4.2.10 2969 | jest-haste-map: 27.5.1 2970 | jest-message-util: 27.5.1 2971 | jest-mock: 27.5.1 2972 | jest-regex-util: 27.5.1 2973 | jest-resolve: 27.5.1 2974 | jest-snapshot: 27.5.1 2975 | jest-util: 27.5.1 2976 | slash: 3.0.0 2977 | strip-bom: 4.0.0 2978 | transitivePeerDependencies: 2979 | - supports-color 2980 | dev: true 2981 | 2982 | /jest-serializer@27.5.1: 2983 | resolution: {integrity: sha512-jZCyo6iIxO1aqUxpuBlwTDMkzOAJS4a3eYz3YzgxxVQFwLeSA7Jfq5cbqCY+JLvTDrWirgusI/0KwxKMgrdf7w==} 2984 | engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} 2985 | dependencies: 2986 | '@types/node': 16.18.10 2987 | graceful-fs: 4.2.10 2988 | dev: true 2989 | 2990 | /jest-snapshot@27.5.1: 2991 | resolution: {integrity: sha512-yYykXI5a0I31xX67mgeLw1DZ0bJB+gpq5IpSuCAoyDi0+BhgU/RIrL+RTzDmkNTchvDFWKP8lp+w/42Z3us5sA==} 2992 | engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} 2993 | dependencies: 2994 | '@babel/core': 7.20.5 2995 | '@babel/generator': 7.20.5 2996 | '@babel/plugin-syntax-typescript': 7.20.0(@babel/core@7.20.5) 2997 | '@babel/traverse': 7.20.5 2998 | '@babel/types': 7.20.5 2999 | '@jest/transform': 27.5.1 3000 | '@jest/types': 27.5.1 3001 | '@types/babel__traverse': 7.18.3 3002 | '@types/prettier': 2.7.2 3003 | babel-preset-current-node-syntax: 1.0.1(@babel/core@7.20.5) 3004 | chalk: 4.1.2 3005 | expect: 27.5.1 3006 | graceful-fs: 4.2.10 3007 | jest-diff: 27.5.1 3008 | jest-get-type: 27.5.1 3009 | jest-haste-map: 27.5.1 3010 | jest-matcher-utils: 27.5.1 3011 | jest-message-util: 27.5.1 3012 | jest-util: 27.5.1 3013 | natural-compare: 1.4.0 3014 | pretty-format: 27.5.1 3015 | semver: 7.3.8 3016 | transitivePeerDependencies: 3017 | - supports-color 3018 | dev: true 3019 | 3020 | /jest-ts-webcompat-resolver@1.0.0(jest-resolve@27.5.1): 3021 | resolution: {integrity: sha512-BFoaU7LeYqZNnTYEr6iMRf87xdCQntNc/Wk8YpzDBcuz+CIZ0JsTtzuMAMnKiEgTRTC1wRWLUo2RlVjVijBcHQ==} 3022 | peerDependencies: 3023 | jest-resolve: '*' 3024 | dependencies: 3025 | jest-resolve: 27.5.1 3026 | dev: true 3027 | 3028 | /jest-util@27.5.1: 3029 | resolution: {integrity: sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==} 3030 | engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} 3031 | dependencies: 3032 | '@jest/types': 27.5.1 3033 | '@types/node': 16.18.10 3034 | chalk: 4.1.2 3035 | ci-info: 3.7.0 3036 | graceful-fs: 4.2.10 3037 | picomatch: 2.3.1 3038 | dev: true 3039 | 3040 | /jest-validate@27.5.1: 3041 | resolution: {integrity: sha512-thkNli0LYTmOI1tDB3FI1S1RTp/Bqyd9pTarJwL87OIBFuqEb5Apv5EaApEudYg4g86e3CT6kM0RowkhtEnCBQ==} 3042 | engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} 3043 | dependencies: 3044 | '@jest/types': 27.5.1 3045 | camelcase: 6.3.0 3046 | chalk: 4.1.2 3047 | jest-get-type: 27.5.1 3048 | leven: 3.1.0 3049 | pretty-format: 27.5.1 3050 | dev: true 3051 | 3052 | /jest-watcher@27.5.1: 3053 | resolution: {integrity: sha512-z676SuD6Z8o8qbmEGhoEUFOM1+jfEiL3DXHK/xgEiG2EyNYfFG60jluWcupY6dATjfEsKQuibReS1djInQnoVw==} 3054 | engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} 3055 | dependencies: 3056 | '@jest/test-result': 27.5.1 3057 | '@jest/types': 27.5.1 3058 | '@types/node': 16.18.10 3059 | ansi-escapes: 4.3.2 3060 | chalk: 4.1.2 3061 | jest-util: 27.5.1 3062 | string-length: 4.0.2 3063 | dev: true 3064 | 3065 | /jest-worker@27.5.1: 3066 | resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==} 3067 | engines: {node: '>= 10.13.0'} 3068 | dependencies: 3069 | '@types/node': 16.18.10 3070 | merge-stream: 2.0.0 3071 | supports-color: 8.1.1 3072 | dev: true 3073 | 3074 | /jest@27.5.1: 3075 | resolution: {integrity: sha512-Yn0mADZB89zTtjkPJEXwrac3LHudkQMR+Paqa8uxJHCBr9agxztUifWCyiYrjhMPBoUVBjyny0I7XH6ozDr7QQ==} 3076 | engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} 3077 | hasBin: true 3078 | peerDependencies: 3079 | node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 3080 | peerDependenciesMeta: 3081 | node-notifier: 3082 | optional: true 3083 | dependencies: 3084 | '@jest/core': 27.5.1 3085 | import-local: 3.1.0 3086 | jest-cli: 27.5.1 3087 | transitivePeerDependencies: 3088 | - bufferutil 3089 | - canvas 3090 | - supports-color 3091 | - ts-node 3092 | - utf-8-validate 3093 | dev: true 3094 | 3095 | /joycon@3.1.1: 3096 | resolution: {integrity: sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==} 3097 | engines: {node: '>=10'} 3098 | dev: true 3099 | 3100 | /js-tokens@4.0.0: 3101 | resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} 3102 | dev: true 3103 | 3104 | /js-yaml@3.14.1: 3105 | resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} 3106 | hasBin: true 3107 | dependencies: 3108 | argparse: 1.0.10 3109 | esprima: 4.0.1 3110 | dev: true 3111 | 3112 | /jsdom@16.7.0: 3113 | resolution: {integrity: sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw==} 3114 | engines: {node: '>=10'} 3115 | peerDependencies: 3116 | canvas: ^2.5.0 3117 | peerDependenciesMeta: 3118 | canvas: 3119 | optional: true 3120 | dependencies: 3121 | abab: 2.0.6 3122 | acorn: 8.8.1 3123 | acorn-globals: 6.0.0 3124 | cssom: 0.4.4 3125 | cssstyle: 2.3.0 3126 | data-urls: 2.0.0 3127 | decimal.js: 10.4.3 3128 | domexception: 2.0.1 3129 | escodegen: 2.0.0 3130 | form-data: 3.0.1 3131 | html-encoding-sniffer: 2.0.1 3132 | http-proxy-agent: 4.0.1 3133 | https-proxy-agent: 5.0.1 3134 | is-potential-custom-element-name: 1.0.1 3135 | nwsapi: 2.2.2 3136 | parse5: 6.0.1 3137 | saxes: 5.0.1 3138 | symbol-tree: 3.2.4 3139 | tough-cookie: 4.1.2 3140 | w3c-hr-time: 1.0.2 3141 | w3c-xmlserializer: 2.0.0 3142 | webidl-conversions: 6.1.0 3143 | whatwg-encoding: 1.0.5 3144 | whatwg-mimetype: 2.3.0 3145 | whatwg-url: 8.7.0 3146 | ws: 7.5.9 3147 | xml-name-validator: 3.0.0 3148 | transitivePeerDependencies: 3149 | - bufferutil 3150 | - supports-color 3151 | - utf-8-validate 3152 | dev: true 3153 | 3154 | /jsesc@2.5.2: 3155 | resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} 3156 | engines: {node: '>=4'} 3157 | hasBin: true 3158 | dev: true 3159 | 3160 | /json-parse-even-better-errors@2.3.1: 3161 | resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} 3162 | dev: true 3163 | 3164 | /json5@2.2.2: 3165 | resolution: {integrity: sha512-46Tk9JiOL2z7ytNQWFLpj99RZkVgeHf87yGQKsIkaPz1qSH9UczKH1rO7K3wgRselo0tYMUNfecYpm/p1vC7tQ==} 3166 | engines: {node: '>=6'} 3167 | hasBin: true 3168 | dev: true 3169 | 3170 | /jsonc-parser@3.2.0: 3171 | resolution: {integrity: sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==} 3172 | dev: true 3173 | 3174 | /kind-of@3.2.2: 3175 | resolution: {integrity: sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==} 3176 | engines: {node: '>=0.10.0'} 3177 | dependencies: 3178 | is-buffer: 1.1.6 3179 | dev: true 3180 | 3181 | /kind-of@4.0.0: 3182 | resolution: {integrity: sha512-24XsCxmEbRwEDbz/qz3stgin8TTzZ1ESR56OMCN0ujYg+vRutNSiOj9bHH9u85DKgXguraugV5sFuvbD4FW/hw==} 3183 | engines: {node: '>=0.10.0'} 3184 | dependencies: 3185 | is-buffer: 1.1.6 3186 | dev: true 3187 | 3188 | /kind-of@5.1.0: 3189 | resolution: {integrity: sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==} 3190 | engines: {node: '>=0.10.0'} 3191 | dev: true 3192 | 3193 | /kind-of@6.0.3: 3194 | resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} 3195 | engines: {node: '>=0.10.0'} 3196 | dev: true 3197 | 3198 | /kleur@3.0.3: 3199 | resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} 3200 | engines: {node: '>=6'} 3201 | dev: true 3202 | 3203 | /leven@3.1.0: 3204 | resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==} 3205 | engines: {node: '>=6'} 3206 | dev: true 3207 | 3208 | /levn@0.3.0: 3209 | resolution: {integrity: sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==} 3210 | engines: {node: '>= 0.8.0'} 3211 | dependencies: 3212 | prelude-ls: 1.1.2 3213 | type-check: 0.3.2 3214 | dev: true 3215 | 3216 | /lilconfig@2.0.6: 3217 | resolution: {integrity: sha512-9JROoBW7pobfsx+Sq2JsASvCo6Pfo6WWoUW79HuB1BCoBXD4PLWJPqDF6fNj67pqBYTbAHkE57M1kS/+L1neOg==} 3218 | engines: {node: '>=10'} 3219 | dev: true 3220 | 3221 | /lines-and-columns@1.2.4: 3222 | resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} 3223 | dev: true 3224 | 3225 | /load-tsconfig@0.2.3: 3226 | resolution: {integrity: sha512-iyT2MXws+dc2Wi6o3grCFtGXpeMvHmJqS27sMPGtV2eUu4PeFnG+33I8BlFK1t1NWMjOpcx9bridn5yxLDX2gQ==} 3227 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 3228 | dev: true 3229 | 3230 | /locate-path@5.0.0: 3231 | resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} 3232 | engines: {node: '>=8'} 3233 | dependencies: 3234 | p-locate: 4.1.0 3235 | dev: true 3236 | 3237 | /lodash.sortby@4.7.0: 3238 | resolution: {integrity: sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==} 3239 | dev: true 3240 | 3241 | /lodash@4.17.21: 3242 | resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} 3243 | dev: true 3244 | 3245 | /loose-envify@1.4.0: 3246 | resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} 3247 | hasBin: true 3248 | dependencies: 3249 | js-tokens: 4.0.0 3250 | dev: true 3251 | 3252 | /lru-cache@6.0.0: 3253 | resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} 3254 | engines: {node: '>=10'} 3255 | dependencies: 3256 | yallist: 4.0.0 3257 | dev: true 3258 | 3259 | /make-dir@3.1.0: 3260 | resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==} 3261 | engines: {node: '>=8'} 3262 | dependencies: 3263 | semver: 6.3.0 3264 | dev: true 3265 | 3266 | /makeerror@1.0.12: 3267 | resolution: {integrity: sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==} 3268 | dependencies: 3269 | tmpl: 1.0.5 3270 | dev: true 3271 | 3272 | /map-cache@0.2.2: 3273 | resolution: {integrity: sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==} 3274 | engines: {node: '>=0.10.0'} 3275 | dev: true 3276 | 3277 | /map-visit@1.0.0: 3278 | resolution: {integrity: sha512-4y7uGv8bd2WdM9vpQsiQNo41Ln1NvhvDRuVt0k2JZQ+ezN2uaQes7lZeZ+QQUHOLQAtDaBJ+7wCbi+ab/KFs+w==} 3279 | engines: {node: '>=0.10.0'} 3280 | dependencies: 3281 | object-visit: 1.0.1 3282 | dev: true 3283 | 3284 | /merge-stream@2.0.0: 3285 | resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} 3286 | dev: true 3287 | 3288 | /merge2@1.4.1: 3289 | resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} 3290 | engines: {node: '>= 8'} 3291 | dev: true 3292 | 3293 | /micromatch@3.1.10: 3294 | resolution: {integrity: sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==} 3295 | engines: {node: '>=0.10.0'} 3296 | dependencies: 3297 | arr-diff: 4.0.0 3298 | array-unique: 0.3.2 3299 | braces: 2.3.2 3300 | define-property: 2.0.2 3301 | extend-shallow: 3.0.2 3302 | extglob: 2.0.4 3303 | fragment-cache: 0.2.1 3304 | kind-of: 6.0.3 3305 | nanomatch: 1.2.13 3306 | object.pick: 1.3.0 3307 | regex-not: 1.0.2 3308 | snapdragon: 0.8.2 3309 | to-regex: 3.0.2 3310 | transitivePeerDependencies: 3311 | - supports-color 3312 | dev: true 3313 | 3314 | /micromatch@4.0.5: 3315 | resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} 3316 | engines: {node: '>=8.6'} 3317 | dependencies: 3318 | braces: 3.0.2 3319 | picomatch: 2.3.1 3320 | dev: true 3321 | 3322 | /mime-db@1.52.0: 3323 | resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} 3324 | engines: {node: '>= 0.6'} 3325 | dev: true 3326 | 3327 | /mime-types@2.1.35: 3328 | resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} 3329 | engines: {node: '>= 0.6'} 3330 | dependencies: 3331 | mime-db: 1.52.0 3332 | dev: true 3333 | 3334 | /mimic-fn@2.1.0: 3335 | resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} 3336 | engines: {node: '>=6'} 3337 | dev: true 3338 | 3339 | /minimatch@3.1.2: 3340 | resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} 3341 | dependencies: 3342 | brace-expansion: 1.1.11 3343 | dev: true 3344 | 3345 | /mixin-deep@1.3.2: 3346 | resolution: {integrity: sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==} 3347 | engines: {node: '>=0.10.0'} 3348 | dependencies: 3349 | for-in: 1.0.2 3350 | is-extendable: 1.0.1 3351 | dev: true 3352 | 3353 | /ms@2.0.0: 3354 | resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} 3355 | dev: true 3356 | 3357 | /ms@2.1.2: 3358 | resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} 3359 | dev: true 3360 | 3361 | /mz@2.7.0: 3362 | resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} 3363 | dependencies: 3364 | any-promise: 1.3.0 3365 | object-assign: 4.1.1 3366 | thenify-all: 1.6.0 3367 | dev: true 3368 | 3369 | /nanoid@3.3.4: 3370 | resolution: {integrity: sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==} 3371 | engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} 3372 | hasBin: true 3373 | dev: true 3374 | 3375 | /nanomatch@1.2.13: 3376 | resolution: {integrity: sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==} 3377 | engines: {node: '>=0.10.0'} 3378 | dependencies: 3379 | arr-diff: 4.0.0 3380 | array-unique: 0.3.2 3381 | define-property: 2.0.2 3382 | extend-shallow: 3.0.2 3383 | fragment-cache: 0.2.1 3384 | is-windows: 1.0.2 3385 | kind-of: 6.0.3 3386 | object.pick: 1.3.0 3387 | regex-not: 1.0.2 3388 | snapdragon: 0.8.2 3389 | to-regex: 3.0.2 3390 | transitivePeerDependencies: 3391 | - supports-color 3392 | dev: true 3393 | 3394 | /natural-compare@1.4.0: 3395 | resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} 3396 | dev: true 3397 | 3398 | /next@12.3.4(@babel/core@7.20.5)(react-dom@18.2.0)(react@18.2.0): 3399 | resolution: {integrity: sha512-VcyMJUtLZBGzLKo3oMxrEF0stxh8HwuW976pAzlHhI3t8qJ4SROjCrSh1T24bhrbjw55wfZXAbXPGwPt5FLRfQ==} 3400 | engines: {node: '>=12.22.0'} 3401 | hasBin: true 3402 | peerDependencies: 3403 | fibers: '>= 3.1.0' 3404 | node-sass: ^6.0.0 || ^7.0.0 3405 | react: ^17.0.2 || ^18.0.0-0 3406 | react-dom: ^17.0.2 || ^18.0.0-0 3407 | sass: ^1.3.0 3408 | peerDependenciesMeta: 3409 | fibers: 3410 | optional: true 3411 | node-sass: 3412 | optional: true 3413 | sass: 3414 | optional: true 3415 | dependencies: 3416 | '@next/env': 12.3.4 3417 | '@swc/helpers': 0.4.11 3418 | caniuse-lite: 1.0.30001441 3419 | postcss: 8.4.14 3420 | react: 18.2.0 3421 | react-dom: 18.2.0(react@18.2.0) 3422 | styled-jsx: 5.0.7(@babel/core@7.20.5)(react@18.2.0) 3423 | use-sync-external-store: 1.2.0(react@18.2.0) 3424 | optionalDependencies: 3425 | '@next/swc-android-arm-eabi': 12.3.4 3426 | '@next/swc-android-arm64': 12.3.4 3427 | '@next/swc-darwin-arm64': 12.3.4 3428 | '@next/swc-darwin-x64': 12.3.4 3429 | '@next/swc-freebsd-x64': 12.3.4 3430 | '@next/swc-linux-arm-gnueabihf': 12.3.4 3431 | '@next/swc-linux-arm64-gnu': 12.3.4 3432 | '@next/swc-linux-arm64-musl': 12.3.4 3433 | '@next/swc-linux-x64-gnu': 12.3.4 3434 | '@next/swc-linux-x64-musl': 12.3.4 3435 | '@next/swc-win32-arm64-msvc': 12.3.4 3436 | '@next/swc-win32-ia32-msvc': 12.3.4 3437 | '@next/swc-win32-x64-msvc': 12.3.4 3438 | transitivePeerDependencies: 3439 | - '@babel/core' 3440 | - babel-plugin-macros 3441 | dev: true 3442 | 3443 | /node-int64@0.4.0: 3444 | resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==} 3445 | dev: true 3446 | 3447 | /node-releases@2.0.8: 3448 | resolution: {integrity: sha512-dFSmB8fFHEH/s81Xi+Y/15DQY6VHW81nXRj86EMSL3lmuTmK1e+aT4wrFCkTbm+gSwkw4KpX+rT/pMM2c1mF+A==} 3449 | dev: true 3450 | 3451 | /normalize-path@3.0.0: 3452 | resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} 3453 | engines: {node: '>=0.10.0'} 3454 | dev: true 3455 | 3456 | /npm-run-path@4.0.1: 3457 | resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} 3458 | engines: {node: '>=8'} 3459 | dependencies: 3460 | path-key: 3.1.1 3461 | dev: true 3462 | 3463 | /nwsapi@2.2.2: 3464 | resolution: {integrity: sha512-90yv+6538zuvUMnN+zCr8LuV6bPFdq50304114vJYJ8RDyK8D5O9Phpbd6SZWgI7PwzmmfN1upeOJlvybDSgCw==} 3465 | dev: true 3466 | 3467 | /object-assign@4.1.1: 3468 | resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} 3469 | engines: {node: '>=0.10.0'} 3470 | dev: true 3471 | 3472 | /object-copy@0.1.0: 3473 | resolution: {integrity: sha512-79LYn6VAb63zgtmAteVOWo9Vdj71ZVBy3Pbse+VqxDpEP83XuujMrGqHIwAXJ5I/aM0zU7dIyIAhifVTPrNItQ==} 3474 | engines: {node: '>=0.10.0'} 3475 | dependencies: 3476 | copy-descriptor: 0.1.1 3477 | define-property: 0.2.5 3478 | kind-of: 3.2.2 3479 | dev: true 3480 | 3481 | /object-visit@1.0.1: 3482 | resolution: {integrity: sha512-GBaMwwAVK9qbQN3Scdo0OyvgPW7l3lnaVMj84uTOZlswkX0KpF6fyDBJhtTthf7pymztoN36/KEr1DyhF96zEA==} 3483 | engines: {node: '>=0.10.0'} 3484 | dependencies: 3485 | isobject: 3.0.1 3486 | dev: true 3487 | 3488 | /object.pick@1.3.0: 3489 | resolution: {integrity: sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ==} 3490 | engines: {node: '>=0.10.0'} 3491 | dependencies: 3492 | isobject: 3.0.1 3493 | dev: true 3494 | 3495 | /once@1.4.0: 3496 | resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} 3497 | dependencies: 3498 | wrappy: 1.0.2 3499 | dev: true 3500 | 3501 | /onetime@5.1.2: 3502 | resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} 3503 | engines: {node: '>=6'} 3504 | dependencies: 3505 | mimic-fn: 2.1.0 3506 | dev: true 3507 | 3508 | /optionator@0.8.3: 3509 | resolution: {integrity: sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==} 3510 | engines: {node: '>= 0.8.0'} 3511 | dependencies: 3512 | deep-is: 0.1.4 3513 | fast-levenshtein: 2.0.6 3514 | levn: 0.3.0 3515 | prelude-ls: 1.1.2 3516 | type-check: 0.3.2 3517 | word-wrap: 1.2.3 3518 | dev: true 3519 | 3520 | /p-limit@2.3.0: 3521 | resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} 3522 | engines: {node: '>=6'} 3523 | dependencies: 3524 | p-try: 2.2.0 3525 | dev: true 3526 | 3527 | /p-locate@4.1.0: 3528 | resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} 3529 | engines: {node: '>=8'} 3530 | dependencies: 3531 | p-limit: 2.3.0 3532 | dev: true 3533 | 3534 | /p-try@2.2.0: 3535 | resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} 3536 | engines: {node: '>=6'} 3537 | dev: true 3538 | 3539 | /parse-json@5.2.0: 3540 | resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} 3541 | engines: {node: '>=8'} 3542 | dependencies: 3543 | '@babel/code-frame': 7.18.6 3544 | error-ex: 1.3.2 3545 | json-parse-even-better-errors: 2.3.1 3546 | lines-and-columns: 1.2.4 3547 | dev: true 3548 | 3549 | /parse5@6.0.1: 3550 | resolution: {integrity: sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==} 3551 | dev: true 3552 | 3553 | /pascalcase@0.1.1: 3554 | resolution: {integrity: sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw==} 3555 | engines: {node: '>=0.10.0'} 3556 | dev: true 3557 | 3558 | /path-exists@4.0.0: 3559 | resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} 3560 | engines: {node: '>=8'} 3561 | dev: true 3562 | 3563 | /path-is-absolute@1.0.1: 3564 | resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} 3565 | engines: {node: '>=0.10.0'} 3566 | dev: true 3567 | 3568 | /path-key@3.1.1: 3569 | resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} 3570 | engines: {node: '>=8'} 3571 | dev: true 3572 | 3573 | /path-parse@1.0.7: 3574 | resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} 3575 | dev: true 3576 | 3577 | /path-type@4.0.0: 3578 | resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} 3579 | engines: {node: '>=8'} 3580 | dev: true 3581 | 3582 | /picocolors@1.0.0: 3583 | resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} 3584 | dev: true 3585 | 3586 | /picomatch@2.3.1: 3587 | resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} 3588 | engines: {node: '>=8.6'} 3589 | dev: true 3590 | 3591 | /pirates@4.0.5: 3592 | resolution: {integrity: sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==} 3593 | engines: {node: '>= 6'} 3594 | dev: true 3595 | 3596 | /pkg-dir@4.2.0: 3597 | resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} 3598 | engines: {node: '>=8'} 3599 | dependencies: 3600 | find-up: 4.1.0 3601 | dev: true 3602 | 3603 | /posix-character-classes@0.1.1: 3604 | resolution: {integrity: sha512-xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg==} 3605 | engines: {node: '>=0.10.0'} 3606 | dev: true 3607 | 3608 | /postcss-load-config@3.1.4: 3609 | resolution: {integrity: sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==} 3610 | engines: {node: '>= 10'} 3611 | peerDependencies: 3612 | postcss: '>=8.0.9' 3613 | ts-node: '>=9.0.0' 3614 | peerDependenciesMeta: 3615 | postcss: 3616 | optional: true 3617 | ts-node: 3618 | optional: true 3619 | dependencies: 3620 | lilconfig: 2.0.6 3621 | yaml: 1.10.2 3622 | dev: true 3623 | 3624 | /postcss@8.4.14: 3625 | resolution: {integrity: sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig==} 3626 | engines: {node: ^10 || ^12 || >=14} 3627 | dependencies: 3628 | nanoid: 3.3.4 3629 | picocolors: 1.0.0 3630 | source-map-js: 1.0.2 3631 | dev: true 3632 | 3633 | /prelude-ls@1.1.2: 3634 | resolution: {integrity: sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==} 3635 | engines: {node: '>= 0.8.0'} 3636 | dev: true 3637 | 3638 | /pretty-format@22.4.3: 3639 | resolution: {integrity: sha512-S4oT9/sT6MN7/3COoOy+ZJeA92VmOnveLHgrwBE3Z1W5N9S2A1QGNYiE1z75DAENbJrXXUb+OWXhpJcg05QKQQ==} 3640 | dependencies: 3641 | ansi-regex: 3.0.1 3642 | ansi-styles: 3.2.1 3643 | dev: true 3644 | 3645 | /pretty-format@24.9.0: 3646 | resolution: {integrity: sha512-00ZMZUiHaJrNfk33guavqgvfJS30sLYf0f8+Srklv0AMPodGGHcoHgksZ3OThYnIvOd+8yMCn0YiEOogjlgsnA==} 3647 | engines: {node: '>= 6'} 3648 | dependencies: 3649 | '@jest/types': 24.9.0 3650 | ansi-regex: 4.1.1 3651 | ansi-styles: 3.2.1 3652 | react-is: 16.13.1 3653 | dev: true 3654 | 3655 | /pretty-format@26.6.2: 3656 | resolution: {integrity: sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg==} 3657 | engines: {node: '>= 10'} 3658 | dependencies: 3659 | '@jest/types': 26.6.2 3660 | ansi-regex: 5.0.1 3661 | ansi-styles: 4.3.0 3662 | react-is: 17.0.2 3663 | dev: true 3664 | 3665 | /pretty-format@27.5.1: 3666 | resolution: {integrity: sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==} 3667 | engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} 3668 | dependencies: 3669 | ansi-regex: 5.0.1 3670 | ansi-styles: 5.2.0 3671 | react-is: 17.0.2 3672 | dev: true 3673 | 3674 | /prompts@2.4.2: 3675 | resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} 3676 | engines: {node: '>= 6'} 3677 | dependencies: 3678 | kleur: 3.0.3 3679 | sisteransi: 1.0.5 3680 | dev: true 3681 | 3682 | /psl@1.9.0: 3683 | resolution: {integrity: sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==} 3684 | dev: true 3685 | 3686 | /punycode@2.1.1: 3687 | resolution: {integrity: sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==} 3688 | engines: {node: '>=6'} 3689 | dev: true 3690 | 3691 | /querystringify@2.2.0: 3692 | resolution: {integrity: sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==} 3693 | dev: true 3694 | 3695 | /queue-microtask@1.2.3: 3696 | resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} 3697 | dev: true 3698 | 3699 | /react-dom@18.2.0(react@18.2.0): 3700 | resolution: {integrity: sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==} 3701 | peerDependencies: 3702 | react: ^18.2.0 3703 | dependencies: 3704 | loose-envify: 1.4.0 3705 | react: 18.2.0 3706 | scheduler: 0.23.0 3707 | dev: true 3708 | 3709 | /react-is@16.13.1: 3710 | resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} 3711 | dev: true 3712 | 3713 | /react-is@17.0.2: 3714 | resolution: {integrity: sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==} 3715 | dev: true 3716 | 3717 | /react@18.2.0: 3718 | resolution: {integrity: sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==} 3719 | engines: {node: '>=0.10.0'} 3720 | dependencies: 3721 | loose-envify: 1.4.0 3722 | dev: true 3723 | 3724 | /readdirp@3.6.0: 3725 | resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} 3726 | engines: {node: '>=8.10.0'} 3727 | dependencies: 3728 | picomatch: 2.3.1 3729 | dev: true 3730 | 3731 | /regex-not@1.0.2: 3732 | resolution: {integrity: sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==} 3733 | engines: {node: '>=0.10.0'} 3734 | dependencies: 3735 | extend-shallow: 3.0.2 3736 | safe-regex: 1.1.0 3737 | dev: true 3738 | 3739 | /repeat-element@1.1.4: 3740 | resolution: {integrity: sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==} 3741 | engines: {node: '>=0.10.0'} 3742 | dev: true 3743 | 3744 | /repeat-string@1.6.1: 3745 | resolution: {integrity: sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==} 3746 | engines: {node: '>=0.10'} 3747 | dev: true 3748 | 3749 | /require-directory@2.1.1: 3750 | resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} 3751 | engines: {node: '>=0.10.0'} 3752 | dev: true 3753 | 3754 | /requires-port@1.0.0: 3755 | resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==} 3756 | dev: true 3757 | 3758 | /resolve-cwd@3.0.0: 3759 | resolution: {integrity: sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==} 3760 | engines: {node: '>=8'} 3761 | dependencies: 3762 | resolve-from: 5.0.0 3763 | dev: true 3764 | 3765 | /resolve-from@5.0.0: 3766 | resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} 3767 | engines: {node: '>=8'} 3768 | dev: true 3769 | 3770 | /resolve-url@0.2.1: 3771 | resolution: {integrity: sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg==} 3772 | deprecated: https://github.com/lydell/resolve-url#deprecated 3773 | dev: true 3774 | 3775 | /resolve.exports@1.1.0: 3776 | resolution: {integrity: sha512-J1l+Zxxp4XK3LUDZ9m60LRJF/mAe4z6a4xyabPHk7pvK5t35dACV32iIjJDFeWZFfZlO29w6SZ67knR0tHzJtQ==} 3777 | engines: {node: '>=10'} 3778 | dev: true 3779 | 3780 | /resolve@1.22.1: 3781 | resolution: {integrity: sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==} 3782 | hasBin: true 3783 | dependencies: 3784 | is-core-module: 2.11.0 3785 | path-parse: 1.0.7 3786 | supports-preserve-symlinks-flag: 1.0.0 3787 | dev: true 3788 | 3789 | /ret@0.1.15: 3790 | resolution: {integrity: sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==} 3791 | engines: {node: '>=0.12'} 3792 | dev: true 3793 | 3794 | /reusify@1.0.4: 3795 | resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} 3796 | engines: {iojs: '>=1.0.0', node: '>=0.10.0'} 3797 | dev: true 3798 | 3799 | /rimraf@3.0.2: 3800 | resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} 3801 | hasBin: true 3802 | dependencies: 3803 | glob: 7.2.3 3804 | dev: true 3805 | 3806 | /rollup@3.7.5: 3807 | resolution: {integrity: sha512-z0ZbqHBtS/et2EEUKMrAl2CoSdwN7ZPzL17UMiKN9RjjqHShTlv7F9J6ZJZJNREYjBh3TvBrdfjkFDIXFNeuiQ==} 3808 | engines: {node: '>=14.18.0', npm: '>=8.0.0'} 3809 | hasBin: true 3810 | optionalDependencies: 3811 | fsevents: 2.3.2 3812 | dev: true 3813 | 3814 | /run-parallel@1.2.0: 3815 | resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} 3816 | dependencies: 3817 | queue-microtask: 1.2.3 3818 | dev: true 3819 | 3820 | /safe-regex@1.1.0: 3821 | resolution: {integrity: sha512-aJXcif4xnaNUzvUuC5gcb46oTS7zvg4jpMTnuqtrEPlR3vFr4pxtdTwaF1Qs3Enjn9HK+ZlwQui+a7z0SywIzg==} 3822 | dependencies: 3823 | ret: 0.1.15 3824 | dev: true 3825 | 3826 | /safer-buffer@2.1.2: 3827 | resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} 3828 | dev: true 3829 | 3830 | /saxes@5.0.1: 3831 | resolution: {integrity: sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==} 3832 | engines: {node: '>=10'} 3833 | dependencies: 3834 | xmlchars: 2.2.0 3835 | dev: true 3836 | 3837 | /scheduler@0.23.0: 3838 | resolution: {integrity: sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==} 3839 | dependencies: 3840 | loose-envify: 1.4.0 3841 | dev: true 3842 | 3843 | /semver@6.3.0: 3844 | resolution: {integrity: sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==} 3845 | hasBin: true 3846 | dev: true 3847 | 3848 | /semver@7.3.8: 3849 | resolution: {integrity: sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==} 3850 | engines: {node: '>=10'} 3851 | hasBin: true 3852 | dependencies: 3853 | lru-cache: 6.0.0 3854 | dev: true 3855 | 3856 | /set-value@2.0.1: 3857 | resolution: {integrity: sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==} 3858 | engines: {node: '>=0.10.0'} 3859 | dependencies: 3860 | extend-shallow: 2.0.1 3861 | is-extendable: 0.1.1 3862 | is-plain-object: 2.0.4 3863 | split-string: 3.1.0 3864 | dev: true 3865 | 3866 | /shebang-command@2.0.0: 3867 | resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} 3868 | engines: {node: '>=8'} 3869 | dependencies: 3870 | shebang-regex: 3.0.0 3871 | dev: true 3872 | 3873 | /shebang-regex@3.0.0: 3874 | resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} 3875 | engines: {node: '>=8'} 3876 | dev: true 3877 | 3878 | /signal-exit@3.0.7: 3879 | resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} 3880 | dev: true 3881 | 3882 | /sisteransi@1.0.5: 3883 | resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} 3884 | dev: true 3885 | 3886 | /slash@2.0.0: 3887 | resolution: {integrity: sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==} 3888 | engines: {node: '>=6'} 3889 | dev: true 3890 | 3891 | /slash@3.0.0: 3892 | resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} 3893 | engines: {node: '>=8'} 3894 | dev: true 3895 | 3896 | /snapdragon-node@2.1.1: 3897 | resolution: {integrity: sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==} 3898 | engines: {node: '>=0.10.0'} 3899 | dependencies: 3900 | define-property: 1.0.0 3901 | isobject: 3.0.1 3902 | snapdragon-util: 3.0.1 3903 | dev: true 3904 | 3905 | /snapdragon-util@3.0.1: 3906 | resolution: {integrity: sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==} 3907 | engines: {node: '>=0.10.0'} 3908 | dependencies: 3909 | kind-of: 3.2.2 3910 | dev: true 3911 | 3912 | /snapdragon@0.8.2: 3913 | resolution: {integrity: sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==} 3914 | engines: {node: '>=0.10.0'} 3915 | dependencies: 3916 | base: 0.11.2 3917 | debug: 2.6.9 3918 | define-property: 0.2.5 3919 | extend-shallow: 2.0.1 3920 | map-cache: 0.2.2 3921 | source-map: 0.5.7 3922 | source-map-resolve: 0.5.3 3923 | use: 3.1.1 3924 | transitivePeerDependencies: 3925 | - supports-color 3926 | dev: true 3927 | 3928 | /source-map-js@1.0.2: 3929 | resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} 3930 | engines: {node: '>=0.10.0'} 3931 | dev: true 3932 | 3933 | /source-map-resolve@0.5.3: 3934 | resolution: {integrity: sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==} 3935 | deprecated: See https://github.com/lydell/source-map-resolve#deprecated 3936 | dependencies: 3937 | atob: 2.1.2 3938 | decode-uri-component: 0.2.2 3939 | resolve-url: 0.2.1 3940 | source-map-url: 0.4.1 3941 | urix: 0.1.0 3942 | dev: true 3943 | 3944 | /source-map-support@0.5.21: 3945 | resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} 3946 | dependencies: 3947 | buffer-from: 1.1.2 3948 | source-map: 0.6.1 3949 | dev: true 3950 | 3951 | /source-map-url@0.4.1: 3952 | resolution: {integrity: sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==} 3953 | deprecated: See https://github.com/lydell/source-map-url#deprecated 3954 | dev: true 3955 | 3956 | /source-map@0.5.7: 3957 | resolution: {integrity: sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==} 3958 | engines: {node: '>=0.10.0'} 3959 | dev: true 3960 | 3961 | /source-map@0.6.1: 3962 | resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} 3963 | engines: {node: '>=0.10.0'} 3964 | dev: true 3965 | 3966 | /source-map@0.7.4: 3967 | resolution: {integrity: sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==} 3968 | engines: {node: '>= 8'} 3969 | dev: true 3970 | 3971 | /source-map@0.8.0-beta.0: 3972 | resolution: {integrity: sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==} 3973 | engines: {node: '>= 8'} 3974 | dependencies: 3975 | whatwg-url: 7.1.0 3976 | dev: true 3977 | 3978 | /split-string@3.1.0: 3979 | resolution: {integrity: sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==} 3980 | engines: {node: '>=0.10.0'} 3981 | dependencies: 3982 | extend-shallow: 3.0.2 3983 | dev: true 3984 | 3985 | /sprintf-js@1.0.3: 3986 | resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} 3987 | dev: true 3988 | 3989 | /stack-utils@1.0.5: 3990 | resolution: {integrity: sha512-KZiTzuV3CnSnSvgMRrARVCj+Ht7rMbauGDK0LdVFRGyenwdylpajAp4Q0i6SX8rEmbTpMMf6ryq2gb8pPq2WgQ==} 3991 | engines: {node: '>=8'} 3992 | dependencies: 3993 | escape-string-regexp: 2.0.0 3994 | dev: true 3995 | 3996 | /stack-utils@2.0.6: 3997 | resolution: {integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==} 3998 | engines: {node: '>=10'} 3999 | dependencies: 4000 | escape-string-regexp: 2.0.0 4001 | dev: true 4002 | 4003 | /static-extend@0.1.2: 4004 | resolution: {integrity: sha512-72E9+uLc27Mt718pMHt9VMNiAL4LMsmDbBva8mxWUCkT07fSzEGMYUCk0XWY6lp0j6RBAG4cJ3mWuZv2OE3s0g==} 4005 | engines: {node: '>=0.10.0'} 4006 | dependencies: 4007 | define-property: 0.2.5 4008 | object-copy: 0.1.0 4009 | dev: true 4010 | 4011 | /string-length@4.0.2: 4012 | resolution: {integrity: sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==} 4013 | engines: {node: '>=10'} 4014 | dependencies: 4015 | char-regex: 1.0.2 4016 | strip-ansi: 6.0.1 4017 | dev: true 4018 | 4019 | /string-width@4.2.3: 4020 | resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} 4021 | engines: {node: '>=8'} 4022 | dependencies: 4023 | emoji-regex: 8.0.0 4024 | is-fullwidth-code-point: 3.0.0 4025 | strip-ansi: 6.0.1 4026 | dev: true 4027 | 4028 | /strip-ansi@6.0.1: 4029 | resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} 4030 | engines: {node: '>=8'} 4031 | dependencies: 4032 | ansi-regex: 5.0.1 4033 | dev: true 4034 | 4035 | /strip-bom@4.0.0: 4036 | resolution: {integrity: sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==} 4037 | engines: {node: '>=8'} 4038 | dev: true 4039 | 4040 | /strip-final-newline@2.0.0: 4041 | resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} 4042 | engines: {node: '>=6'} 4043 | dev: true 4044 | 4045 | /strip-json-comments@3.1.1: 4046 | resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} 4047 | engines: {node: '>=8'} 4048 | dev: true 4049 | 4050 | /styled-jsx@5.0.7(@babel/core@7.20.5)(react@18.2.0): 4051 | resolution: {integrity: sha512-b3sUzamS086YLRuvnaDigdAewz1/EFYlHpYBP5mZovKEdQQOIIYq8lApylub3HHZ6xFjV051kkGU7cudJmrXEA==} 4052 | engines: {node: '>= 12.0.0'} 4053 | peerDependencies: 4054 | '@babel/core': '*' 4055 | babel-plugin-macros: '*' 4056 | react: '>= 16.8.0 || 17.x.x || ^18.0.0-0' 4057 | peerDependenciesMeta: 4058 | '@babel/core': 4059 | optional: true 4060 | babel-plugin-macros: 4061 | optional: true 4062 | dependencies: 4063 | '@babel/core': 7.20.5 4064 | react: 18.2.0 4065 | dev: true 4066 | 4067 | /sucrase@3.29.0: 4068 | resolution: {integrity: sha512-bZPAuGA5SdFHuzqIhTAqt9fvNEo9rESqXIG3oiKdF8K4UmkQxC4KlNL3lVyAErXp+mPvUqZ5l13qx6TrDIGf3A==} 4069 | engines: {node: '>=8'} 4070 | hasBin: true 4071 | dependencies: 4072 | commander: 4.1.1 4073 | glob: 7.1.6 4074 | lines-and-columns: 1.2.4 4075 | mz: 2.7.0 4076 | pirates: 4.0.5 4077 | ts-interface-checker: 0.1.13 4078 | dev: true 4079 | 4080 | /supports-color@5.5.0: 4081 | resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} 4082 | engines: {node: '>=4'} 4083 | dependencies: 4084 | has-flag: 3.0.0 4085 | dev: true 4086 | 4087 | /supports-color@7.2.0: 4088 | resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} 4089 | engines: {node: '>=8'} 4090 | dependencies: 4091 | has-flag: 4.0.0 4092 | dev: true 4093 | 4094 | /supports-color@8.1.1: 4095 | resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} 4096 | engines: {node: '>=10'} 4097 | dependencies: 4098 | has-flag: 4.0.0 4099 | dev: true 4100 | 4101 | /supports-hyperlinks@2.3.0: 4102 | resolution: {integrity: sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==} 4103 | engines: {node: '>=8'} 4104 | dependencies: 4105 | has-flag: 4.0.0 4106 | supports-color: 7.2.0 4107 | dev: true 4108 | 4109 | /supports-preserve-symlinks-flag@1.0.0: 4110 | resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} 4111 | engines: {node: '>= 0.4'} 4112 | dev: true 4113 | 4114 | /symbol-tree@3.2.4: 4115 | resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==} 4116 | dev: true 4117 | 4118 | /terminal-link@2.1.1: 4119 | resolution: {integrity: sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==} 4120 | engines: {node: '>=8'} 4121 | dependencies: 4122 | ansi-escapes: 4.3.2 4123 | supports-hyperlinks: 2.3.0 4124 | dev: true 4125 | 4126 | /test-exclude@6.0.0: 4127 | resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==} 4128 | engines: {node: '>=8'} 4129 | dependencies: 4130 | '@istanbuljs/schema': 0.1.3 4131 | glob: 7.2.3 4132 | minimatch: 3.1.2 4133 | dev: true 4134 | 4135 | /thenify-all@1.6.0: 4136 | resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} 4137 | engines: {node: '>=0.8'} 4138 | dependencies: 4139 | thenify: 3.3.1 4140 | dev: true 4141 | 4142 | /thenify@3.3.1: 4143 | resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} 4144 | dependencies: 4145 | any-promise: 1.3.0 4146 | dev: true 4147 | 4148 | /throat@6.0.1: 4149 | resolution: {integrity: sha512-8hmiGIJMDlwjg7dlJ4yKGLK8EsYqKgPWbG3b4wjJddKNwc7N7Dpn08Df4szr/sZdMVeOstrdYSsqzX6BYbcB+w==} 4150 | dev: true 4151 | 4152 | /tmpl@1.0.5: 4153 | resolution: {integrity: sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==} 4154 | dev: true 4155 | 4156 | /to-fast-properties@2.0.0: 4157 | resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} 4158 | engines: {node: '>=4'} 4159 | dev: true 4160 | 4161 | /to-object-path@0.3.0: 4162 | resolution: {integrity: sha512-9mWHdnGRuh3onocaHzukyvCZhzvr6tiflAy/JRFXcJX0TjgfWA9pk9t8CMbzmBE4Jfw58pXbkngtBtqYxzNEyg==} 4163 | engines: {node: '>=0.10.0'} 4164 | dependencies: 4165 | kind-of: 3.2.2 4166 | dev: true 4167 | 4168 | /to-regex-range@2.1.1: 4169 | resolution: {integrity: sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==} 4170 | engines: {node: '>=0.10.0'} 4171 | dependencies: 4172 | is-number: 3.0.0 4173 | repeat-string: 1.6.1 4174 | dev: true 4175 | 4176 | /to-regex-range@5.0.1: 4177 | resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} 4178 | engines: {node: '>=8.0'} 4179 | dependencies: 4180 | is-number: 7.0.0 4181 | dev: true 4182 | 4183 | /to-regex@3.0.2: 4184 | resolution: {integrity: sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==} 4185 | engines: {node: '>=0.10.0'} 4186 | dependencies: 4187 | define-property: 2.0.2 4188 | extend-shallow: 3.0.2 4189 | regex-not: 1.0.2 4190 | safe-regex: 1.1.0 4191 | dev: true 4192 | 4193 | /tough-cookie@4.1.2: 4194 | resolution: {integrity: sha512-G9fqXWoYFZgTc2z8Q5zaHy/vJMjm+WV0AkAeHxVCQiEB1b+dGvWzFW6QV07cY5jQ5gRkeid2qIkzkxUnmoQZUQ==} 4195 | engines: {node: '>=6'} 4196 | dependencies: 4197 | psl: 1.9.0 4198 | punycode: 2.1.1 4199 | universalify: 0.2.0 4200 | url-parse: 1.5.10 4201 | dev: true 4202 | 4203 | /tr46@1.0.1: 4204 | resolution: {integrity: sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==} 4205 | dependencies: 4206 | punycode: 2.1.1 4207 | dev: true 4208 | 4209 | /tr46@2.1.0: 4210 | resolution: {integrity: sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==} 4211 | engines: {node: '>=8'} 4212 | dependencies: 4213 | punycode: 2.1.1 4214 | dev: true 4215 | 4216 | /tree-kill@1.2.2: 4217 | resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==} 4218 | hasBin: true 4219 | dev: true 4220 | 4221 | /ts-interface-checker@0.1.13: 4222 | resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} 4223 | dev: true 4224 | 4225 | /tslib@2.4.1: 4226 | resolution: {integrity: sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==} 4227 | dev: true 4228 | 4229 | /tsup@6.5.0(@swc/core@1.3.24)(typescript@4.9.4): 4230 | resolution: {integrity: sha512-36u82r7rYqRHFkD15R20Cd4ercPkbYmuvRkz3Q1LCm5BsiFNUgpo36zbjVhCOgvjyxNBWNKHsaD5Rl8SykfzNA==} 4231 | engines: {node: '>=14'} 4232 | hasBin: true 4233 | peerDependencies: 4234 | '@swc/core': ^1 4235 | postcss: ^8.4.12 4236 | typescript: ^4.1.0 4237 | peerDependenciesMeta: 4238 | '@swc/core': 4239 | optional: true 4240 | postcss: 4241 | optional: true 4242 | typescript: 4243 | optional: true 4244 | dependencies: 4245 | '@swc/core': 1.3.24 4246 | bundle-require: 3.1.2(esbuild@0.15.18) 4247 | cac: 6.7.14 4248 | chokidar: 3.5.3 4249 | debug: 4.3.4 4250 | esbuild: 0.15.18 4251 | execa: 5.1.1 4252 | globby: 11.1.0 4253 | joycon: 3.1.1 4254 | postcss-load-config: 3.1.4 4255 | resolve-from: 5.0.0 4256 | rollup: 3.7.5 4257 | source-map: 0.8.0-beta.0 4258 | sucrase: 3.29.0 4259 | tree-kill: 1.2.2 4260 | typescript: 4.9.4 4261 | transitivePeerDependencies: 4262 | - supports-color 4263 | - ts-node 4264 | dev: true 4265 | 4266 | /type-check@0.3.2: 4267 | resolution: {integrity: sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==} 4268 | engines: {node: '>= 0.8.0'} 4269 | dependencies: 4270 | prelude-ls: 1.1.2 4271 | dev: true 4272 | 4273 | /type-detect@4.0.8: 4274 | resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} 4275 | engines: {node: '>=4'} 4276 | dev: true 4277 | 4278 | /type-fest@0.21.3: 4279 | resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} 4280 | engines: {node: '>=10'} 4281 | dev: true 4282 | 4283 | /typedarray-to-buffer@3.1.5: 4284 | resolution: {integrity: sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==} 4285 | dependencies: 4286 | is-typedarray: 1.0.0 4287 | dev: true 4288 | 4289 | /typescript@4.9.4: 4290 | resolution: {integrity: sha512-Uz+dTXYzxXXbsFpM86Wh3dKCxrQqUcVMxwU54orwlJjOpO3ao8L7j5lH+dWfTwgCwIuM9GQ2kvVotzYJMXTBZg==} 4291 | engines: {node: '>=4.2.0'} 4292 | hasBin: true 4293 | dev: true 4294 | 4295 | /union-value@1.0.1: 4296 | resolution: {integrity: sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==} 4297 | engines: {node: '>=0.10.0'} 4298 | dependencies: 4299 | arr-union: 3.1.0 4300 | get-value: 2.0.6 4301 | is-extendable: 0.1.1 4302 | set-value: 2.0.1 4303 | dev: true 4304 | 4305 | /universalify@0.2.0: 4306 | resolution: {integrity: sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==} 4307 | engines: {node: '>= 4.0.0'} 4308 | dev: true 4309 | 4310 | /unset-value@1.0.0: 4311 | resolution: {integrity: sha512-PcA2tsuGSF9cnySLHTLSh2qrQiJ70mn+r+Glzxv2TWZblxsxCC52BDlZoPCsz7STd9pN7EZetkWZBAvk4cgZdQ==} 4312 | engines: {node: '>=0.10.0'} 4313 | dependencies: 4314 | has-value: 0.3.1 4315 | isobject: 3.0.1 4316 | dev: true 4317 | 4318 | /update-browserslist-db@1.0.10(browserslist@4.21.4): 4319 | resolution: {integrity: sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==} 4320 | hasBin: true 4321 | peerDependencies: 4322 | browserslist: '>= 4.21.0' 4323 | dependencies: 4324 | browserslist: 4.21.4 4325 | escalade: 3.1.1 4326 | picocolors: 1.0.0 4327 | dev: true 4328 | 4329 | /urix@0.1.0: 4330 | resolution: {integrity: sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg==} 4331 | deprecated: Please see https://github.com/lydell/urix#deprecated 4332 | dev: true 4333 | 4334 | /url-parse@1.5.10: 4335 | resolution: {integrity: sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==} 4336 | dependencies: 4337 | querystringify: 2.2.0 4338 | requires-port: 1.0.0 4339 | dev: true 4340 | 4341 | /use-sync-external-store@1.2.0(react@18.2.0): 4342 | resolution: {integrity: sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==} 4343 | peerDependencies: 4344 | react: ^16.8.0 || ^17.0.0 || ^18.0.0 4345 | dependencies: 4346 | react: 18.2.0 4347 | dev: true 4348 | 4349 | /use@3.1.1: 4350 | resolution: {integrity: sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==} 4351 | engines: {node: '>=0.10.0'} 4352 | dev: true 4353 | 4354 | /v8-to-istanbul@8.1.1: 4355 | resolution: {integrity: sha512-FGtKtv3xIpR6BYhvgH8MI/y78oT7d8Au3ww4QIxymrCtZEh5b8gCw2siywE+puhEmuWKDtmfrvF5UlB298ut3w==} 4356 | engines: {node: '>=10.12.0'} 4357 | dependencies: 4358 | '@types/istanbul-lib-coverage': 2.0.4 4359 | convert-source-map: 1.9.0 4360 | source-map: 0.7.4 4361 | dev: true 4362 | 4363 | /w3c-hr-time@1.0.2: 4364 | resolution: {integrity: sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==} 4365 | deprecated: Use your platform's native performance.now() and performance.timeOrigin. 4366 | dependencies: 4367 | browser-process-hrtime: 1.0.0 4368 | dev: true 4369 | 4370 | /w3c-xmlserializer@2.0.0: 4371 | resolution: {integrity: sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==} 4372 | engines: {node: '>=10'} 4373 | dependencies: 4374 | xml-name-validator: 3.0.0 4375 | dev: true 4376 | 4377 | /walker@1.0.8: 4378 | resolution: {integrity: sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==} 4379 | dependencies: 4380 | makeerror: 1.0.12 4381 | dev: true 4382 | 4383 | /webidl-conversions@4.0.2: 4384 | resolution: {integrity: sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==} 4385 | dev: true 4386 | 4387 | /webidl-conversions@5.0.0: 4388 | resolution: {integrity: sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==} 4389 | engines: {node: '>=8'} 4390 | dev: true 4391 | 4392 | /webidl-conversions@6.1.0: 4393 | resolution: {integrity: sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==} 4394 | engines: {node: '>=10.4'} 4395 | dev: true 4396 | 4397 | /whatwg-encoding@1.0.5: 4398 | resolution: {integrity: sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==} 4399 | dependencies: 4400 | iconv-lite: 0.4.24 4401 | dev: true 4402 | 4403 | /whatwg-mimetype@2.3.0: 4404 | resolution: {integrity: sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==} 4405 | dev: true 4406 | 4407 | /whatwg-url@7.1.0: 4408 | resolution: {integrity: sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==} 4409 | dependencies: 4410 | lodash.sortby: 4.7.0 4411 | tr46: 1.0.1 4412 | webidl-conversions: 4.0.2 4413 | dev: true 4414 | 4415 | /whatwg-url@8.7.0: 4416 | resolution: {integrity: sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==} 4417 | engines: {node: '>=10'} 4418 | dependencies: 4419 | lodash: 4.17.21 4420 | tr46: 2.1.0 4421 | webidl-conversions: 6.1.0 4422 | dev: true 4423 | 4424 | /which@2.0.2: 4425 | resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} 4426 | engines: {node: '>= 8'} 4427 | hasBin: true 4428 | dependencies: 4429 | isexe: 2.0.0 4430 | dev: true 4431 | 4432 | /word-wrap@1.2.3: 4433 | resolution: {integrity: sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==} 4434 | engines: {node: '>=0.10.0'} 4435 | dev: true 4436 | 4437 | /wrap-ansi@7.0.0: 4438 | resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} 4439 | engines: {node: '>=10'} 4440 | dependencies: 4441 | ansi-styles: 4.3.0 4442 | string-width: 4.2.3 4443 | strip-ansi: 6.0.1 4444 | dev: true 4445 | 4446 | /wrappy@1.0.2: 4447 | resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} 4448 | dev: true 4449 | 4450 | /write-file-atomic@3.0.3: 4451 | resolution: {integrity: sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==} 4452 | dependencies: 4453 | imurmurhash: 0.1.4 4454 | is-typedarray: 1.0.0 4455 | signal-exit: 3.0.7 4456 | typedarray-to-buffer: 3.1.5 4457 | dev: true 4458 | 4459 | /ws@7.5.9: 4460 | resolution: {integrity: sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==} 4461 | engines: {node: '>=8.3.0'} 4462 | peerDependencies: 4463 | bufferutil: ^4.0.1 4464 | utf-8-validate: ^5.0.2 4465 | peerDependenciesMeta: 4466 | bufferutil: 4467 | optional: true 4468 | utf-8-validate: 4469 | optional: true 4470 | dev: true 4471 | 4472 | /xml-name-validator@3.0.0: 4473 | resolution: {integrity: sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==} 4474 | dev: true 4475 | 4476 | /xmlchars@2.2.0: 4477 | resolution: {integrity: sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==} 4478 | dev: true 4479 | 4480 | /y18n@5.0.8: 4481 | resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} 4482 | engines: {node: '>=10'} 4483 | dev: true 4484 | 4485 | /yallist@4.0.0: 4486 | resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} 4487 | dev: true 4488 | 4489 | /yaml@1.10.2: 4490 | resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} 4491 | engines: {node: '>= 6'} 4492 | dev: true 4493 | 4494 | /yargs-parser@20.2.9: 4495 | resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==} 4496 | engines: {node: '>=10'} 4497 | dev: true 4498 | 4499 | /yargs@16.2.0: 4500 | resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==} 4501 | engines: {node: '>=10'} 4502 | dependencies: 4503 | cliui: 7.0.4 4504 | escalade: 3.1.1 4505 | get-caller-file: 2.0.5 4506 | require-directory: 2.1.1 4507 | string-width: 4.2.3 4508 | y18n: 5.0.8 4509 | yargs-parser: 20.2.9 4510 | dev: true 4511 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "ES2019", 4 | "lib": ["ES2020"], 5 | "module": "ES2020", 6 | "moduleResolution": "node", 7 | "outDir": "dist", 8 | "rootDir": "lib", 9 | "sourceMap": true, 10 | "declaration": true, 11 | "strict": true, 12 | "noImplicitAny": true, 13 | "allowSyntheticDefaultImports": true, 14 | "isolatedModules": true, 15 | "skipLibCheck": true 16 | }, 17 | "include": ["lib"], 18 | "exclude": ["node_modules", "lib/**/*.spec.ts"] 19 | } 20 | -------------------------------------------------------------------------------- /tsup.config.ts: -------------------------------------------------------------------------------- 1 | import { defineConfig, Options } from "tsup"; 2 | 3 | const shared: Options = { 4 | entry: ["lib/index.ts"], 5 | clean: true, 6 | }; 7 | 8 | export default defineConfig([ 9 | { 10 | ...shared, 11 | format: "esm", 12 | target: "node16", 13 | dts: true, 14 | }, 15 | { 16 | ...shared, 17 | format: "cjs", 18 | target: "node14", 19 | }, 20 | ]); 21 | --------------------------------------------------------------------------------