├── .npmignore ├── .github ├── FUNDING.yml └── workflows │ └── ci.yml ├── .gitignore ├── .eslintrc ├── package.json ├── LICENSE ├── index.d.ts ├── README.md ├── index.js ├── test.js └── pnpm-lock.yaml /.npmignore: -------------------------------------------------------------------------------- 1 | .github 2 | .gitignore 3 | -------------------------------------------------------------------------------- /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | ko_fi: cyyynthia 2 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # editor 2 | .idea 3 | .vscode 4 | 5 | # modules 6 | node_modules 7 | 8 | # test 9 | *.nogit.* 10 | -------------------------------------------------------------------------------- /.github/workflows/ci.yml: -------------------------------------------------------------------------------- 1 | name: ci 2 | on: [push, pull_request] 3 | 4 | jobs: 5 | build: 6 | runs-on: ubuntu-latest 7 | strategy: 8 | matrix: 9 | node: [12.x, 14.x, 17.x] 10 | name: Node ${{ matrix.node }} 11 | steps: 12 | - uses: actions/checkout@v1 13 | - name: Setup node 14 | uses: actions/setup-node@v1 15 | with: 16 | node-version: ${{ matrix.node }} 17 | - uses: pnpm/action-setup@v1.2.1 18 | with: 19 | version: 5.13.4 20 | run_install: true 21 | - run: pnpm run lint 22 | - run: pnpm run test 23 | -------------------------------------------------------------------------------- /.eslintrc: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "standard", 3 | "env": { "node": true }, 4 | "rules": { 5 | "no-void": "off", 6 | "no-undefined": "error", 7 | "prefer-const": "error", 8 | "prefer-destructuring": [ 9 | "error", 10 | { 11 | "VariableDeclarator": { 12 | "array": false, 13 | "object": true 14 | }, 15 | "AssignmentExpression": { 16 | "array": true, 17 | "object": true 18 | } 19 | } 20 | ], 21 | "prefer-template": "error", 22 | "array-bracket-newline": [ 23 | "error", 24 | "consistent" 25 | ], 26 | "array-bracket-spacing": [ 27 | "error", 28 | "always" 29 | ], 30 | "multiline-ternary": [ 31 | "error", 32 | "always-multiline" 33 | ], 34 | "object-property-newline": "error" 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "fastify-tokenize", 3 | "version": "1.4.0", 4 | "description": "A fastify plugin to add Tokenize support through a decorator.", 5 | "main": "index.js", 6 | "repository": "https://github.com/cyyynthia/fastify-tokenize", 7 | "author": "Cynthia ", 8 | "license": "BSD-3-Clause", 9 | "scripts": { 10 | "lint": "eslint .", 11 | "test": "jest test.js" 12 | }, 13 | "dependencies": { 14 | "@cyyynthia/tokenize": "^1.1.3", 15 | "fastify-plugin": "^3.0.1" 16 | }, 17 | "devDependencies": { 18 | "eslint": "^8.14.0", 19 | "eslint-config-standard": "^17.0.0", 20 | "eslint-plugin-import": "^2.26.0", 21 | "eslint-plugin-n": "^15.2.0", 22 | "eslint-plugin-promise": "^6.0.0", 23 | "eslint-plugin-standard": "^4.1.0", 24 | "fastify": "^3.29.0", 25 | "jest": "^28.0.3" 26 | }, 27 | "peerDependencies": { 28 | "fastify": ">= 3", 29 | "@fastify/auth": ">= 2.0.0", 30 | "@fastify/cookie": ">= 5.0.0" 31 | }, 32 | "peerDependenciesMeta": { 33 | "@fastify/auth": { "optional": true }, 34 | "@fastify/cookie": { "optional": true } 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2020 Cynthia K. Rey, All rights reserved. 2 | 3 | Redistribution and use in source and binary forms, with or without 4 | modification, are permitted provided that the following conditions are met: 5 | 6 | 1. Redistributions of source code must retain the above copyright notice, this 7 | list of conditions and the following disclaimer. 8 | 2. Redistributions in binary form must reproduce the above copyright notice, 9 | this list of conditions and the following disclaimer in the 10 | documentation and/or other materials provided with the distribution. 11 | 3. Neither the name of the copyright holder nor the names of its contributors 12 | may be used to endorse or promote products derived from this software without 13 | specific prior written permission. 14 | 15 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 16 | ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 17 | WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 18 | DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE 19 | FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 20 | DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 21 | SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 22 | CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 23 | OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 24 | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 25 | -------------------------------------------------------------------------------- /index.d.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2020 Cynthia K. Rey, All rights reserved. 3 | * 4 | * Redistribution and use in source and binary forms, with or without 5 | * modification, are permitted provided that the following conditions are met: 6 | * 7 | * 1. Redistributions of source code must retain the above copyright notice, this 8 | * list of conditions and the following disclaimer. 9 | * 2. Redistributions in binary form must reproduce the above copyright notice, 10 | * this list of conditions and the following disclaimer in the 11 | * documentation and/or other materials provided with the distribution. 12 | * 3. Neither the name of the copyright holder nor the names of its contributors 13 | * may be used to endorse or promote products derived from this software without 14 | * specific prior written permission. 15 | * 16 | * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 17 | * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 18 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 19 | * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE 20 | * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 21 | * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 22 | * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 23 | * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 24 | * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 25 | * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 26 | */ 27 | 28 | import type { default as Tokenize, AccountFetcher, AsyncAccountFetcher } from '@cyyynthia/tokenize' 29 | import type { FastifyPluginCallback, FastifyReply } from 'fastify' 30 | import type { RouteGenericInterface } from 'fastify/types/route' 31 | 32 | declare namespace FastifyTokenize { 33 | interface Options { 34 | secret: string 35 | } 36 | 37 | interface OptionsAuth extends Options { 38 | fastifyAuth: true, 39 | fetchAccount: AccountFetcher | AsyncAccountFetcher, 40 | cookie?: string | false, 41 | header?: string | null | false 42 | cookieSigned?: boolean 43 | } 44 | } 45 | 46 | declare module 'fastify' { 47 | interface RequestGenericInterface { 48 | TokenizeUser?: unknown 49 | } 50 | 51 | interface FastifyRequest { 52 | user?: RouteGeneric['TokenizeUser'] | null 53 | } 54 | 55 | interface FastifyInstance { 56 | readonly tokenize: Tokenize 57 | verifyTokenizeToken (request: FastifyRequest, reply: FastifyReply): Promise 58 | } 59 | } 60 | 61 | declare const fastifyTokenize: FastifyPluginCallback 62 | export default fastifyTokenize 63 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # fastify-tokenize 2 | [![ko-fi](https://www.ko-fi.com/img/githubbutton_sm.svg)](https://ko-fi.com/G2G71TSDF)
3 | [![License](https://img.shields.io/github/license/cyyynthia/fastify-tokenize.svg?style=flat-square)](https://github.com/cyyynthia/fastify-tokenize/blob/mistress/LICENSE) 4 | ![CI](https://github.com/cyyynthia/fastify-tokenize/workflows/ci/badge.svg) 5 | 6 | An extremely tiny plugin for Fastify for [@cyyynthia/tokenize](https://npm.im/@cyyynthia/tokenize). Allows you to share the same 7 | instance of Tokenize on every part of your server. 8 | 9 | Also includes compatibility for the [fastify-auth](https://github.com/fastify/fastify-auth) plugin for enhanced 10 | experience and flexibility in your Fastify server. 11 | 12 | Tokenize removes the pain of generating secure tokens and makes it easy to issue and validate tokens in your 13 | application. 14 | 15 | ## Install 16 | ``` 17 | pnpm i fastify-tokenize 18 | yarn add fastify-tokenize 19 | npm i fastify-tokenize 20 | ``` 21 | 22 | ## Usage 23 | This plugin decorates the `fastify` instance with a `tokenize` object. This object is an instance of Tokenize 24 | initialized with the secret provided. 25 | 26 | ```js 27 | fastify.register(require('fastify-tokenize'), { secret: 'btw have i told you i use arch' }) 28 | ``` 29 | 30 | ### `fastify-auth` compatibility 31 | You can make use of the very flexible [fastify-auth](https://github.com/fastify/fastify-auth) to authenticate users, 32 | and let fastify-tokenize handle the whole part of authenticating the user. To enable it, just set `fastifyAuth` to 33 | true, and compatibility functions will magically get added. 34 | 35 | On successful authentications, fastify-tokenize will decorate the request with the `user` property. This property can 36 | then be used within your app to greet users with their username or perform more specific checks. 37 | 38 | It is mandatory to provide a `fetchAccount` option when registering fastify-tokenize. This method will receive the 39 | account ID as unique argument and should the user account (or a promise resolving to a user account). The only 40 | required property is `lastTokenReset` (or `last_token_reset`) which is used to invalidate tokens generated prior 41 | this date. 42 | 43 | ```js 44 | // We'll assume we use mongodb as our database here. 45 | 46 | fastify.register(require('fastify-auth')) 47 | fastify.register(require('fastify-mongodb'), { url: 'mongodb://localhost:27017/my-awesome-db' }) 48 | fastify.register(require('fastify-tokenize'), { 49 | fastifyAuth: true, 50 | fetchAccount: (userId) => fastify.mongo.db.collection('users').findOne({ _id: userId }), 51 | secret: 'btw have i told you i use arch' 52 | }) 53 | 54 | fastify.route({ 55 | method: 'GET', 56 | url: '/secure-place', 57 | // fastify.verifyTokenizeToken is added by fastify-tokenize when fastifyAuth is set to "true" 58 | preHandler: fastify.auth([ fastify.verifyTokenizeToken ]), 59 | handler: (req, reply) => { 60 | req.log.info('Auth route') 61 | reply.send({ hello: 'world' }) 62 | } 63 | }) 64 | ``` 65 | 66 | By default, fastify-tokenize checks for either the `token` cookie without performing signature checks (will only work if 67 | [fastify-cookie](https://github.com/fastify/fastify-cookie)) is registered, or a token passed in the `authorization` 68 | header. You can obviously customize this for yourself through the following options: 69 | 70 | - Setting `cookie` to false will disable authentication through cookies. Same thing for `header` 71 | - Setting `cookie` to any string will tell fastify-tokenize to check for this cookie when attempting to authenticate a 72 | request 73 | - You can set `cookieSigned` to true so fastify-tokenize knows the cookie has to be passed through `unsignCookie` 74 | - Setting `header` to `null` (default) will attempt to look for a naked token 75 | - Setting `header` to any string will tell fastify-tokenize to only look for specific authorization types 76 | Example: if you set `header` to `User`, it'll look for `authorization: User ` 77 | 78 | ## Usage with TypeScript 79 | You can type the `request.user` field just like Fastify lets you type the querystring and various other request metadata: 80 | ```ts 81 | import type { FastifyInstance, FastifyRequest, FastifyReply } from 'fastify' 82 | import type { User } from './models' 83 | 84 | async function process (request: FastifyRequest<{ TokenizeUser: User }>, reply: FastifyReply) { 85 | if ('user' in request && request.user) { 86 | // typeof request.user is User 87 | } 88 | } 89 | ``` 90 | -------------------------------------------------------------------------------- /index.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2020 Cynthia K. Rey, All rights reserved. 3 | * 4 | * Redistribution and use in source and binary forms, with or without 5 | * modification, are permitted provided that the following conditions are met: 6 | * 7 | * 1. Redistributions of source code must retain the above copyright notice, this 8 | * list of conditions and the following disclaimer. 9 | * 2. Redistributions in binary form must reproduce the above copyright notice, 10 | * this list of conditions and the following disclaimer in the 11 | * documentation and/or other materials provided with the distribution. 12 | * 3. Neither the name of the copyright holder nor the names of its contributors 13 | * may be used to endorse or promote products derived from this software without 14 | * specific prior written permission. 15 | * 16 | * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 17 | * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 18 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 19 | * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE 20 | * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 21 | * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 22 | * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 23 | * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 24 | * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 25 | * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 26 | */ 27 | 28 | const Tokenize = require('@cyyynthia/tokenize') 29 | const fp = require('fastify-plugin') 30 | 31 | function fastifyTokenize (fastify, options, next) { 32 | if (!options.secret) { 33 | next(new Error('`secret` parameter is mandatory')) 34 | return 35 | } 36 | 37 | if (typeof options.secret !== 'string') { 38 | next(new Error('`secret` parameter must be a string')) 39 | return 40 | } 41 | 42 | if (fastify.tokenize) { 43 | next(new Error('fastify-tokenize has already registered')) 44 | return 45 | } 46 | 47 | const tokenize = new Tokenize(options.secret) 48 | fastify.decorate('tokenize', tokenize) 49 | fastify.decorateRequest('user', null) 50 | fastify.addHook('onRequest', (req, _, done) => { 51 | // Wipe user for every request 52 | req.user = null 53 | done() 54 | }) 55 | 56 | if (options.fastifyAuth) { 57 | if (!options.fetchAccount) { 58 | next(new Error('`fetchAccount` parameter is mandatory when using fastify-auth compatibility')) 59 | return 60 | } 61 | 62 | if (typeof options.fetchAccount !== 'function') { 63 | next(new Error('`fetchAccount` parameter must be a function')) 64 | return 65 | } 66 | 67 | let cookie = 'token' 68 | let header = null 69 | if (typeof options.cookie !== 'undefined') { 70 | if (options.cookie !== false && (typeof options.cookie !== 'string' || !options.cookie)) { 71 | next(new Error('`cookie` parameter must be either a string or false.')) 72 | return 73 | } 74 | 75 | // eslint-disable-next-line prefer-destructuring 76 | cookie = options.cookie 77 | } 78 | if (typeof options.header !== 'undefined') { 79 | if (options.header !== false && options.header !== null && (typeof options.header !== 'string' || !options.header)) { 80 | next(new Error('`header` parameter must be either a string, null or false.')) 81 | return 82 | } 83 | 84 | // eslint-disable-next-line prefer-destructuring 85 | header = options.header 86 | } 87 | 88 | if (cookie === false && header === false) { 89 | next(new Error('You can\'t disable both cookies and headers!')) 90 | return 91 | } 92 | 93 | if (![ 'undefined', 'boolean' ].includes(typeof options.cookieSigned)) { 94 | next(new Error('`cookieSigned` parameter must be a boolean.')) 95 | return 96 | } 97 | 98 | fastify.decorate('verifyTokenizeToken', async function (request, reply) { 99 | let token 100 | if (cookie !== false && request.cookies) { // Try to find cookie 101 | token = request.cookies[cookie] 102 | if (token && options.cookieSigned) { 103 | const tokenCookie = reply.unsignCookie(token) 104 | token = tokenCookie.valid && tokenCookie.value 105 | } 106 | } 107 | if (!token && header !== false) { // Try to find header 108 | token = request.headers.authorization 109 | if (token && header !== null) { 110 | const splitted = token.split(' ') 111 | token = splitted.length !== 2 || splitted[0] !== header ? null : splitted[1] 112 | } 113 | } 114 | 115 | if (!token) { 116 | throw new Error('No authentication token found') 117 | } 118 | // Validate token 119 | const user = await this.tokenize.validate(token, options.fetchAccount.bind(this)) 120 | if (user === false) { 121 | throw new Error('Invalid token') 122 | } 123 | if (user === null) { 124 | throw new Error('User not found') 125 | } 126 | request.user = user 127 | }) 128 | } 129 | 130 | next() 131 | } 132 | 133 | module.exports = fp(fastifyTokenize, { fastify: '>= 3', name: 'fastify-tokenize' }) 134 | -------------------------------------------------------------------------------- /test.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2020 Cynthia K. Rey, All rights reserved. 3 | * 4 | * Redistribution and use in source and binary forms, with or without 5 | * modification, are permitted provided that the following conditions are met: 6 | * 7 | * 1. Redistributions of source code must retain the above copyright notice, this 8 | * list of conditions and the following disclaimer. 9 | * 2. Redistributions in binary form must reproduce the above copyright notice, 10 | * this list of conditions and the following disclaimer in the 11 | * documentation and/or other materials provided with the distribution. 12 | * 3. Neither the name of the copyright holder nor the names of its contributors 13 | * may be used to endorse or promote products derived from this software without 14 | * specific prior written permission. 15 | * 16 | * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 17 | * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 18 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 19 | * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE 20 | * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 21 | * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 22 | * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 23 | * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 24 | * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 25 | * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 26 | */ 27 | 28 | /* eslint-env jest */ 29 | 30 | const Fastify = require('fastify') 31 | const Tokenize = require('@cyyynthia/tokenize') 32 | const fastifyTokenize = require('./index') 33 | let fastify 34 | 35 | function register (opts = {}) { 36 | return fastify.register(fastifyTokenize, { secret: 'meow', ...opts }) 37 | } 38 | 39 | describe('fastify-tokenize', function () { 40 | beforeEach(function () { 41 | fastify = Fastify() 42 | }) 43 | 44 | afterEach(function () { 45 | fastify.close() 46 | }) 47 | 48 | describe('options validation', function () { 49 | it('should require the presence of `secret` option', async function () { 50 | expect.assertions(1) 51 | fastify.register(fastifyTokenize) 52 | return expect(fastify.ready()).rejects.toThrow(/mandatory/) 53 | }) 54 | 55 | it('should make sure `secret` is a string', async function () { 56 | expect.assertions(1) 57 | fastify.register(fastifyTokenize, { secret: true }) 58 | return expect(fastify.ready()).rejects.toThrow(/string/) 59 | }) 60 | 61 | it('should require the presence of `fetchAccount` option when `fastifyAuth` is true', async function () { 62 | expect.assertions(1) 63 | register({ fastifyAuth: true }) 64 | return expect(fastify.ready()).rejects.toThrow(/mandatory/) 65 | }) 66 | 67 | it('should make sure `fetchAccount` is a function', async function () { 68 | expect.assertions(1) 69 | register({ fastifyAuth: true, fetchAccount: 'meow' }) 70 | return expect(fastify.ready()).rejects.toThrow(/function/) 71 | }) 72 | 73 | it('should accept `false` as a value for `cookie`', function () { 74 | register({ fastifyAuth: true, fetchAccount: () => null, cookie: false }) 75 | return fastify.ready() 76 | }) 77 | 78 | it('should accept a string as a value for `cookie`', async function () { 79 | register({ fastifyAuth: true, fetchAccount: () => null, cookie: 'very-nice-auth-token' }) 80 | return fastify.ready() 81 | }) 82 | 83 | it('should reject invalid `cookie` values', async function () { 84 | expect.assertions(1) 85 | register({ fastifyAuth: true, fetchAccount: () => null, cookie: 69 }) 86 | return expect(fastify.ready()).rejects.toThrow(/must be/) 87 | }) 88 | 89 | it('should accept `false` as a value for `header`', function () { 90 | register({ fastifyAuth: true, fetchAccount: () => null, header: false }) 91 | return fastify.ready() 92 | }) 93 | 94 | it('should accept `null` as a value for `header`', function () { 95 | register({ fastifyAuth: true, fetchAccount: () => null, header: null }) 96 | return fastify.ready() 97 | }) 98 | 99 | it('should accept a string as a value for `header`', async function () { 100 | register({ fastifyAuth: true, fetchAccount: () => null, header: 'User' }) 101 | return fastify.ready() 102 | }) 103 | 104 | it('should reject invalid `header` values', async function () { 105 | expect.assertions(1) 106 | register({ fastifyAuth: true, fetchAccount: () => null, header: 69 }) 107 | return expect(fastify.ready()).rejects.toThrow(/must be/) 108 | }) 109 | 110 | it('should not allow having both `cookie` and `header` set to false', async function () { 111 | expect.assertions(1) 112 | register({ fastifyAuth: true, fetchAccount: () => null, header: false, cookie: false }) 113 | return expect(fastify.ready()).rejects.toThrow(/disable both/) 114 | }) 115 | 116 | it('should make sure `cookieSigned` is a boolean', async function () { 117 | expect.assertions(1) 118 | register({ fastifyAuth: true, fetchAccount: () => null, cookieSigned: 'meow' }) 119 | return expect(fastify.ready()).rejects.toThrow(/boolean/) 120 | }) 121 | }) 122 | 123 | describe('fastify decoration', function () { 124 | it('should not let register fastify-tokenize multiple times', function () { 125 | expect.assertions(1) 126 | register() 127 | register() 128 | return expect(fastify.ready()).rejects.toThrow(/already/) 129 | }) 130 | 131 | it('should add a `tokenize` property to fastify', async function () { 132 | expect.assertions(2) 133 | await register().ready() 134 | expect(fastify).toHaveProperty('tokenize') 135 | expect(fastify.tokenize).toBeInstanceOf(Tokenize) 136 | }) 137 | 138 | it('should not add a `verifyTokenizeToken` property to fastify if `fastifyAuth` isn\'t set', async function () { 139 | expect.assertions(1) 140 | await register().ready() 141 | expect(fastify).not.toHaveProperty('verifyTokenizeToken') 142 | }) 143 | 144 | it('should add a `verifyTokenizeToken` property to fastify with fastifyAuth', async function () { 145 | expect.assertions(2) 146 | await register({ fastifyAuth: true, fetchAccount: () => null }).ready() 147 | expect(fastify).toHaveProperty('verifyTokenizeToken') 148 | expect(typeof fastify.verifyTokenizeToken).toBe('function') 149 | }) 150 | }) 151 | 152 | describe('token validation', function () { 153 | it('should return an error for invalid tokens', async function () { 154 | expect.assertions(1) 155 | register({ fastifyAuth: true, fetchAccount: () => null }) 156 | await fastify.ready() 157 | 158 | const forgedReq = { cookies: { token: 'meow' }, headers: {} } 159 | return expect(fastify.verifyTokenizeToken(forgedReq, null)).rejects.toThrow(/invalid token/i) 160 | }) 161 | 162 | it('should return an error for tokens that are not bound to any user', async function () { 163 | expect.assertions(1) 164 | register({ fastifyAuth: true, fetchAccount: () => null }) 165 | await fastify.ready() 166 | 167 | const forgedReq = { cookies: { token: fastify.tokenize.generate('meow') }, headers: {} } 168 | return expect(fastify.verifyTokenizeToken(forgedReq, null)).rejects.toThrow(/not found/i) 169 | }) 170 | 171 | it('should go through if the token is valid', async function () { 172 | register({ fastifyAuth: true, fetchAccount: () => ({ lastTokenReset: 0 }) }) 173 | await fastify.ready() 174 | 175 | const forgedReq = { cookies: { token: fastify.tokenize.generate('meow') }, headers: {} } 176 | await fastify.verifyTokenizeToken(forgedReq, null) 177 | }) 178 | 179 | describe('cookies', function () { 180 | it('should target the right cookie', async function () { 181 | register({ fastifyAuth: true, fetchAccount: () => ({ lastTokenReset: 0 }), cookie: 'rawr' }) 182 | await fastify.ready() 183 | 184 | const forgedReq = { cookies: { rawr: fastify.tokenize.generate('meow') }, headers: {} } 185 | await fastify.verifyTokenizeToken(forgedReq, null) 186 | }) 187 | 188 | it('should not attempt to use cookie', async function () { 189 | expect.assertions(1) 190 | register({ fastifyAuth: true, fetchAccount: () => null, cookie: false }) 191 | await fastify.ready() 192 | 193 | const forgedReq = { cookies: { token: 'meow' }, headers: {} } 194 | return expect(fastify.verifyTokenizeToken(forgedReq, null)).rejects.toThrow(/token found/i) 195 | }) 196 | 197 | it('should attempt to unsign the token if `cookieSigned` is set to true', async function () { 198 | expect.assertions(1) 199 | register({ fastifyAuth: true, fetchAccount: () => ({ lastTokenReset: 0 }), cookieSigned: true }) 200 | await fastify.ready() 201 | 202 | const unsignCookie = jest.fn(t => ({ valid: true, value: t })) 203 | const forgedReq = { cookies: { token: fastify.tokenize.generate('meow') }, headers: {} } 204 | const forgedRes = { unsignCookie } 205 | await fastify.verifyTokenizeToken(forgedReq, forgedRes) 206 | return expect(unsignCookie.mock.calls.length).toBe(1) 207 | }) 208 | 209 | it('should not attempt to unsign the token if `cookieSigned` isn\'t set to true', async function () { 210 | expect.assertions(1) 211 | register({ fastifyAuth: true, fetchAccount: () => ({ lastTokenReset: 0 }) }) 212 | await fastify.ready() 213 | 214 | const unsignCookie = jest.fn(t => ({ valid: true, value: t })) 215 | const forgedReq = { cookies: { token: fastify.tokenize.generate('meow') }, headers: {} } 216 | const forgedRes = { unsignCookie } 217 | await fastify.verifyTokenizeToken(forgedReq, forgedRes) 218 | return expect(unsignCookie.mock.calls.length).toBe(0) 219 | }) 220 | }) 221 | 222 | describe('headers', function () { 223 | it('should target the specified authorization method only', async function () { 224 | expect.assertions(1) 225 | register({ fastifyAuth: true, fetchAccount: () => null, header: 'User' }) 226 | await fastify.ready() 227 | 228 | const forgedReq = { cookies: {}, headers: { authorization: 'meow' } } 229 | return expect(fastify.verifyTokenizeToken(forgedReq, null)).rejects.toThrow(/token found/i) 230 | }) 231 | 232 | it('should not attempt to use header', async function () { 233 | expect.assertions(1) 234 | register({ fastifyAuth: true, fetchAccount: () => null, header: false }) 235 | await fastify.ready() 236 | 237 | const forgedReq = { cookies: {}, headers: { authorization: 'meow' } } 238 | return expect(fastify.verifyTokenizeToken(forgedReq, null)).rejects.toThrow(/token found/i) 239 | }) 240 | }) 241 | }) 242 | }) 243 | -------------------------------------------------------------------------------- /pnpm-lock.yaml: -------------------------------------------------------------------------------- 1 | lockfileVersion: 5.3 2 | 3 | specifiers: 4 | '@cyyynthia/tokenize': ^1.1.3 5 | eslint: ^8.14.0 6 | eslint-config-standard: ^17.0.0 7 | eslint-plugin-import: ^2.26.0 8 | eslint-plugin-n: ^15.2.0 9 | eslint-plugin-promise: ^6.0.0 10 | eslint-plugin-standard: ^4.1.0 11 | fastify: ^3.29.0 12 | fastify-plugin: ^3.0.1 13 | jest: ^28.0.3 14 | 15 | dependencies: 16 | '@cyyynthia/tokenize': 1.1.3 17 | fastify-plugin: 3.0.1 18 | 19 | devDependencies: 20 | eslint: 8.14.0 21 | eslint-config-standard: 17.0.0_14af0798efd537ecbc8732fe6f15829c 22 | eslint-plugin-import: 2.26.0_eslint@8.14.0 23 | eslint-plugin-n: 15.2.0_eslint@8.14.0 24 | eslint-plugin-promise: 6.0.0_eslint@8.14.0 25 | eslint-plugin-standard: 4.1.0_eslint@8.14.0 26 | fastify: 3.29.0 27 | jest: 28.0.3 28 | 29 | packages: 30 | 31 | /@ampproject/remapping/2.2.0: 32 | resolution: {integrity: sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==} 33 | engines: {node: '>=6.0.0'} 34 | dependencies: 35 | '@jridgewell/gen-mapping': 0.1.1 36 | '@jridgewell/trace-mapping': 0.3.9 37 | dev: true 38 | 39 | /@babel/code-frame/7.16.7: 40 | resolution: {integrity: sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==} 41 | engines: {node: '>=6.9.0'} 42 | dependencies: 43 | '@babel/highlight': 7.17.9 44 | dev: true 45 | 46 | /@babel/compat-data/7.17.10: 47 | resolution: {integrity: sha512-GZt/TCsG70Ms19gfZO1tM4CVnXsPgEPBCpJu+Qz3L0LUDsY5nZqFZglIoPC1kIYOtNBZlrnFT+klg12vFGZXrw==} 48 | engines: {node: '>=6.9.0'} 49 | dev: true 50 | 51 | /@babel/core/7.17.10: 52 | resolution: {integrity: sha512-liKoppandF3ZcBnIYFjfSDHZLKdLHGJRkoWtG8zQyGJBQfIYobpnVGI5+pLBNtS6psFLDzyq8+h5HiVljW9PNA==} 53 | engines: {node: '>=6.9.0'} 54 | dependencies: 55 | '@ampproject/remapping': 2.2.0 56 | '@babel/code-frame': 7.16.7 57 | '@babel/generator': 7.17.10 58 | '@babel/helper-compilation-targets': 7.17.10_@babel+core@7.17.10 59 | '@babel/helper-module-transforms': 7.17.7 60 | '@babel/helpers': 7.17.9 61 | '@babel/parser': 7.17.10 62 | '@babel/template': 7.16.7 63 | '@babel/traverse': 7.17.10 64 | '@babel/types': 7.17.10 65 | convert-source-map: 1.8.0 66 | debug: 4.3.4 67 | gensync: 1.0.0-beta.2 68 | json5: 2.2.1 69 | semver: 6.3.0 70 | transitivePeerDependencies: 71 | - supports-color 72 | dev: true 73 | 74 | /@babel/generator/7.17.10: 75 | resolution: {integrity: sha512-46MJZZo9y3o4kmhBVc7zW7i8dtR1oIK/sdO5NcfcZRhTGYi+KKJRtHNgsU6c4VUcJmUNV/LQdebD/9Dlv4K+Tg==} 76 | engines: {node: '>=6.9.0'} 77 | dependencies: 78 | '@babel/types': 7.17.10 79 | '@jridgewell/gen-mapping': 0.1.1 80 | jsesc: 2.5.2 81 | dev: true 82 | 83 | /@babel/helper-compilation-targets/7.17.10_@babel+core@7.17.10: 84 | resolution: {integrity: sha512-gh3RxjWbauw/dFiU/7whjd0qN9K6nPJMqe6+Er7rOavFh0CQUSwhAE3IcTho2rywPJFxej6TUUHDkWcYI6gGqQ==} 85 | engines: {node: '>=6.9.0'} 86 | peerDependencies: 87 | '@babel/core': ^7.0.0 88 | dependencies: 89 | '@babel/compat-data': 7.17.10 90 | '@babel/core': 7.17.10 91 | '@babel/helper-validator-option': 7.16.7 92 | browserslist: 4.20.3 93 | semver: 6.3.0 94 | dev: true 95 | 96 | /@babel/helper-environment-visitor/7.16.7: 97 | resolution: {integrity: sha512-SLLb0AAn6PkUeAfKJCCOl9e1R53pQlGAfc4y4XuMRZfqeMYLE0dM1LMhqbGAlGQY0lfw5/ohoYWAe9V1yibRag==} 98 | engines: {node: '>=6.9.0'} 99 | dependencies: 100 | '@babel/types': 7.17.10 101 | dev: true 102 | 103 | /@babel/helper-function-name/7.17.9: 104 | resolution: {integrity: sha512-7cRisGlVtiVqZ0MW0/yFB4atgpGLWEHUVYnb448hZK4x+vih0YO5UoS11XIYtZYqHd0dIPMdUSv8q5K4LdMnIg==} 105 | engines: {node: '>=6.9.0'} 106 | dependencies: 107 | '@babel/template': 7.16.7 108 | '@babel/types': 7.17.10 109 | dev: true 110 | 111 | /@babel/helper-hoist-variables/7.16.7: 112 | resolution: {integrity: sha512-m04d/0Op34H5v7pbZw6pSKP7weA6lsMvfiIAMeIvkY/R4xQtBSMFEigu9QTZ2qB/9l22vsxtM8a+Q8CzD255fg==} 113 | engines: {node: '>=6.9.0'} 114 | dependencies: 115 | '@babel/types': 7.17.10 116 | dev: true 117 | 118 | /@babel/helper-module-imports/7.16.7: 119 | resolution: {integrity: sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg==} 120 | engines: {node: '>=6.9.0'} 121 | dependencies: 122 | '@babel/types': 7.17.10 123 | dev: true 124 | 125 | /@babel/helper-module-transforms/7.17.7: 126 | resolution: {integrity: sha512-VmZD99F3gNTYB7fJRDTi+u6l/zxY0BE6OIxPSU7a50s6ZUQkHwSDmV92FfM+oCG0pZRVojGYhkR8I0OGeCVREw==} 127 | engines: {node: '>=6.9.0'} 128 | dependencies: 129 | '@babel/helper-environment-visitor': 7.16.7 130 | '@babel/helper-module-imports': 7.16.7 131 | '@babel/helper-simple-access': 7.17.7 132 | '@babel/helper-split-export-declaration': 7.16.7 133 | '@babel/helper-validator-identifier': 7.16.7 134 | '@babel/template': 7.16.7 135 | '@babel/traverse': 7.17.10 136 | '@babel/types': 7.17.10 137 | transitivePeerDependencies: 138 | - supports-color 139 | dev: true 140 | 141 | /@babel/helper-plugin-utils/7.16.7: 142 | resolution: {integrity: sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==} 143 | engines: {node: '>=6.9.0'} 144 | dev: true 145 | 146 | /@babel/helper-simple-access/7.17.7: 147 | resolution: {integrity: sha512-txyMCGroZ96i+Pxr3Je3lzEJjqwaRC9buMUgtomcrLe5Nd0+fk1h0LLA+ixUF5OW7AhHuQ7Es1WcQJZmZsz2XA==} 148 | engines: {node: '>=6.9.0'} 149 | dependencies: 150 | '@babel/types': 7.17.10 151 | dev: true 152 | 153 | /@babel/helper-split-export-declaration/7.16.7: 154 | resolution: {integrity: sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw==} 155 | engines: {node: '>=6.9.0'} 156 | dependencies: 157 | '@babel/types': 7.17.10 158 | dev: true 159 | 160 | /@babel/helper-validator-identifier/7.16.7: 161 | resolution: {integrity: sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==} 162 | engines: {node: '>=6.9.0'} 163 | dev: true 164 | 165 | /@babel/helper-validator-option/7.16.7: 166 | resolution: {integrity: sha512-TRtenOuRUVo9oIQGPC5G9DgK4743cdxvtOw0weQNpZXaS16SCBi5MNjZF8vba3ETURjZpTbVn7Vvcf2eAwFozQ==} 167 | engines: {node: '>=6.9.0'} 168 | dev: true 169 | 170 | /@babel/helpers/7.17.9: 171 | resolution: {integrity: sha512-cPCt915ShDWUEzEp3+UNRktO2n6v49l5RSnG9M5pS24hA+2FAc5si+Pn1i4VVbQQ+jh+bIZhPFQOJOzbrOYY1Q==} 172 | engines: {node: '>=6.9.0'} 173 | dependencies: 174 | '@babel/template': 7.16.7 175 | '@babel/traverse': 7.17.10 176 | '@babel/types': 7.17.10 177 | transitivePeerDependencies: 178 | - supports-color 179 | dev: true 180 | 181 | /@babel/highlight/7.17.9: 182 | resolution: {integrity: sha512-J9PfEKCbFIv2X5bjTMiZu6Vf341N05QIY+d6FvVKynkG1S7G0j3I0QoRtWIrXhZ+/Nlb5Q0MzqL7TokEJ5BNHg==} 183 | engines: {node: '>=6.9.0'} 184 | dependencies: 185 | '@babel/helper-validator-identifier': 7.16.7 186 | chalk: 2.4.2 187 | js-tokens: 4.0.0 188 | dev: true 189 | 190 | /@babel/parser/7.17.10: 191 | resolution: {integrity: sha512-n2Q6i+fnJqzOaq2VkdXxy2TCPCWQZHiCo0XqmrCvDWcZQKRyZzYi4Z0yxlBuN0w+r2ZHmre+Q087DSrw3pbJDQ==} 192 | engines: {node: '>=6.0.0'} 193 | hasBin: true 194 | dev: true 195 | 196 | /@babel/plugin-syntax-async-generators/7.8.4_@babel+core@7.17.10: 197 | resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} 198 | peerDependencies: 199 | '@babel/core': ^7.0.0-0 200 | dependencies: 201 | '@babel/core': 7.17.10 202 | '@babel/helper-plugin-utils': 7.16.7 203 | dev: true 204 | 205 | /@babel/plugin-syntax-bigint/7.8.3_@babel+core@7.17.10: 206 | resolution: {integrity: sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==} 207 | peerDependencies: 208 | '@babel/core': ^7.0.0-0 209 | dependencies: 210 | '@babel/core': 7.17.10 211 | '@babel/helper-plugin-utils': 7.16.7 212 | dev: true 213 | 214 | /@babel/plugin-syntax-class-properties/7.12.13_@babel+core@7.17.10: 215 | resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} 216 | peerDependencies: 217 | '@babel/core': ^7.0.0-0 218 | dependencies: 219 | '@babel/core': 7.17.10 220 | '@babel/helper-plugin-utils': 7.16.7 221 | dev: true 222 | 223 | /@babel/plugin-syntax-import-meta/7.10.4_@babel+core@7.17.10: 224 | resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==} 225 | peerDependencies: 226 | '@babel/core': ^7.0.0-0 227 | dependencies: 228 | '@babel/core': 7.17.10 229 | '@babel/helper-plugin-utils': 7.16.7 230 | dev: true 231 | 232 | /@babel/plugin-syntax-json-strings/7.8.3_@babel+core@7.17.10: 233 | resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} 234 | peerDependencies: 235 | '@babel/core': ^7.0.0-0 236 | dependencies: 237 | '@babel/core': 7.17.10 238 | '@babel/helper-plugin-utils': 7.16.7 239 | dev: true 240 | 241 | /@babel/plugin-syntax-logical-assignment-operators/7.10.4_@babel+core@7.17.10: 242 | resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} 243 | peerDependencies: 244 | '@babel/core': ^7.0.0-0 245 | dependencies: 246 | '@babel/core': 7.17.10 247 | '@babel/helper-plugin-utils': 7.16.7 248 | dev: true 249 | 250 | /@babel/plugin-syntax-nullish-coalescing-operator/7.8.3_@babel+core@7.17.10: 251 | resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} 252 | peerDependencies: 253 | '@babel/core': ^7.0.0-0 254 | dependencies: 255 | '@babel/core': 7.17.10 256 | '@babel/helper-plugin-utils': 7.16.7 257 | dev: true 258 | 259 | /@babel/plugin-syntax-numeric-separator/7.10.4_@babel+core@7.17.10: 260 | resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==} 261 | peerDependencies: 262 | '@babel/core': ^7.0.0-0 263 | dependencies: 264 | '@babel/core': 7.17.10 265 | '@babel/helper-plugin-utils': 7.16.7 266 | dev: true 267 | 268 | /@babel/plugin-syntax-object-rest-spread/7.8.3_@babel+core@7.17.10: 269 | resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} 270 | peerDependencies: 271 | '@babel/core': ^7.0.0-0 272 | dependencies: 273 | '@babel/core': 7.17.10 274 | '@babel/helper-plugin-utils': 7.16.7 275 | dev: true 276 | 277 | /@babel/plugin-syntax-optional-catch-binding/7.8.3_@babel+core@7.17.10: 278 | resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} 279 | peerDependencies: 280 | '@babel/core': ^7.0.0-0 281 | dependencies: 282 | '@babel/core': 7.17.10 283 | '@babel/helper-plugin-utils': 7.16.7 284 | dev: true 285 | 286 | /@babel/plugin-syntax-optional-chaining/7.8.3_@babel+core@7.17.10: 287 | resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} 288 | peerDependencies: 289 | '@babel/core': ^7.0.0-0 290 | dependencies: 291 | '@babel/core': 7.17.10 292 | '@babel/helper-plugin-utils': 7.16.7 293 | dev: true 294 | 295 | /@babel/plugin-syntax-top-level-await/7.14.5_@babel+core@7.17.10: 296 | resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==} 297 | engines: {node: '>=6.9.0'} 298 | peerDependencies: 299 | '@babel/core': ^7.0.0-0 300 | dependencies: 301 | '@babel/core': 7.17.10 302 | '@babel/helper-plugin-utils': 7.16.7 303 | dev: true 304 | 305 | /@babel/plugin-syntax-typescript/7.17.10_@babel+core@7.17.10: 306 | resolution: {integrity: sha512-xJefea1DWXW09pW4Tm9bjwVlPDyYA2it3fWlmEjpYz6alPvTUjL0EOzNzI/FEOyI3r4/J7uVH5UqKgl1TQ5hqQ==} 307 | engines: {node: '>=6.9.0'} 308 | peerDependencies: 309 | '@babel/core': ^7.0.0-0 310 | dependencies: 311 | '@babel/core': 7.17.10 312 | '@babel/helper-plugin-utils': 7.16.7 313 | dev: true 314 | 315 | /@babel/template/7.16.7: 316 | resolution: {integrity: sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w==} 317 | engines: {node: '>=6.9.0'} 318 | dependencies: 319 | '@babel/code-frame': 7.16.7 320 | '@babel/parser': 7.17.10 321 | '@babel/types': 7.17.10 322 | dev: true 323 | 324 | /@babel/traverse/7.17.10: 325 | resolution: {integrity: sha512-VmbrTHQteIdUUQNTb+zE12SHS/xQVIShmBPhlNP12hD5poF2pbITW1Z4172d03HegaQWhLffdkRJYtAzp0AGcw==} 326 | engines: {node: '>=6.9.0'} 327 | dependencies: 328 | '@babel/code-frame': 7.16.7 329 | '@babel/generator': 7.17.10 330 | '@babel/helper-environment-visitor': 7.16.7 331 | '@babel/helper-function-name': 7.17.9 332 | '@babel/helper-hoist-variables': 7.16.7 333 | '@babel/helper-split-export-declaration': 7.16.7 334 | '@babel/parser': 7.17.10 335 | '@babel/types': 7.17.10 336 | debug: 4.3.4 337 | globals: 11.12.0 338 | transitivePeerDependencies: 339 | - supports-color 340 | dev: true 341 | 342 | /@babel/types/7.17.10: 343 | resolution: {integrity: sha512-9O26jG0mBYfGkUYCYZRnBwbVLd1UZOICEr2Em6InB6jVfsAv1GKgwXHmrSg+WFWDmeKTA6vyTZiN8tCSM5Oo3A==} 344 | engines: {node: '>=6.9.0'} 345 | dependencies: 346 | '@babel/helper-validator-identifier': 7.16.7 347 | to-fast-properties: 2.0.0 348 | dev: true 349 | 350 | /@bcoe/v8-coverage/0.2.3: 351 | resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} 352 | dev: true 353 | 354 | /@cyyynthia/tokenize/1.1.3: 355 | resolution: {integrity: sha512-sg/0tuXC2oF51vwjzAxhf7Hxb9pEOH9I/ACGb2ZUWaSCdQqK+T70Ss4xlg0KIy2pR+N43IP/B+2Uq2UpGJbJ6w==} 356 | dev: false 357 | 358 | /@eslint/eslintrc/1.2.2: 359 | resolution: {integrity: sha512-lTVWHs7O2hjBFZunXTZYnYqtB9GakA1lnxIf+gKq2nY5gxkkNi/lQvveW6t8gFdOHTg6nG50Xs95PrLqVpcaLg==} 360 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 361 | dependencies: 362 | ajv: 6.12.6 363 | debug: 4.3.4 364 | espree: 9.3.1 365 | globals: 13.13.0 366 | ignore: 5.2.0 367 | import-fresh: 3.3.0 368 | js-yaml: 4.1.0 369 | minimatch: 3.1.2 370 | strip-json-comments: 3.1.1 371 | transitivePeerDependencies: 372 | - supports-color 373 | dev: true 374 | 375 | /@fastify/ajv-compiler/1.1.0: 376 | resolution: {integrity: sha512-gvCOUNpXsWrIQ3A4aXCLIdblL0tDq42BG/2Xw7oxbil9h11uow10ztS2GuFazNBfjbrsZ5nl+nPl5jDSjj5TSg==} 377 | dependencies: 378 | ajv: 6.12.6 379 | dev: true 380 | 381 | /@fastify/error/2.0.0: 382 | resolution: {integrity: sha512-wI3fpfDT0t7p8E6dA2eTECzzOd+bZsZCJ2Hcv+Onn2b7ZwK3RwD27uW2QDaMtQhAfWQQP+WNK7nKf0twLsBf9w==} 383 | dev: true 384 | 385 | /@humanwhocodes/config-array/0.9.5: 386 | resolution: {integrity: sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw==} 387 | engines: {node: '>=10.10.0'} 388 | dependencies: 389 | '@humanwhocodes/object-schema': 1.2.1 390 | debug: 4.3.4 391 | minimatch: 3.1.2 392 | transitivePeerDependencies: 393 | - supports-color 394 | dev: true 395 | 396 | /@humanwhocodes/object-schema/1.2.1: 397 | resolution: {integrity: sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==} 398 | dev: true 399 | 400 | /@istanbuljs/load-nyc-config/1.1.0: 401 | resolution: {integrity: sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==} 402 | engines: {node: '>=8'} 403 | dependencies: 404 | camelcase: 5.3.1 405 | find-up: 4.1.0 406 | get-package-type: 0.1.0 407 | js-yaml: 3.14.1 408 | resolve-from: 5.0.0 409 | dev: true 410 | 411 | /@istanbuljs/schema/0.1.3: 412 | resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==} 413 | engines: {node: '>=8'} 414 | dev: true 415 | 416 | /@jest/console/28.0.2: 417 | resolution: {integrity: sha512-tiRpnMeeyQuuzgL5UNSeiqMwF8UOWPbAE5rzcu/1zyq4oPG2Ox6xm4YCOruwbp10F8odWc+XwVxTyGzMSLMqxA==} 418 | engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} 419 | dependencies: 420 | '@jest/types': 28.0.2 421 | '@types/node': 17.0.30 422 | chalk: 4.1.2 423 | jest-message-util: 28.0.2 424 | jest-util: 28.0.2 425 | slash: 3.0.0 426 | dev: true 427 | 428 | /@jest/core/28.0.3: 429 | resolution: {integrity: sha512-cCQW06vEZ+5r50SB06pOnSWsOBs7F+lswPYnKKfBz1ncLlj1sMqmvjgam8q40KhlZ8Ut4eNAL2Hvfx4BKIO2FA==} 430 | engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} 431 | peerDependencies: 432 | node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 433 | peerDependenciesMeta: 434 | node-notifier: 435 | optional: true 436 | dependencies: 437 | '@jest/console': 28.0.2 438 | '@jest/reporters': 28.0.3 439 | '@jest/test-result': 28.0.2 440 | '@jest/transform': 28.0.3 441 | '@jest/types': 28.0.2 442 | '@types/node': 17.0.30 443 | ansi-escapes: 4.3.2 444 | chalk: 4.1.2 445 | ci-info: 3.3.0 446 | exit: 0.1.2 447 | graceful-fs: 4.2.10 448 | jest-changed-files: 28.0.2 449 | jest-config: 28.0.3_@types+node@17.0.30 450 | jest-haste-map: 28.0.2 451 | jest-message-util: 28.0.2 452 | jest-regex-util: 28.0.2 453 | jest-resolve: 28.0.3 454 | jest-resolve-dependencies: 28.0.3 455 | jest-runner: 28.0.3 456 | jest-runtime: 28.0.3 457 | jest-snapshot: 28.0.3 458 | jest-util: 28.0.2 459 | jest-validate: 28.0.2 460 | jest-watcher: 28.0.2 461 | micromatch: 4.0.5 462 | pretty-format: 28.0.2 463 | rimraf: 3.0.2 464 | slash: 3.0.0 465 | strip-ansi: 6.0.1 466 | transitivePeerDependencies: 467 | - supports-color 468 | - ts-node 469 | dev: true 470 | 471 | /@jest/environment/28.0.2: 472 | resolution: {integrity: sha512-IvI7dEfqVEffDYlw9FQfVBt6kXt/OI38V7QUIur0ulOQgzpKYJDVvLzj4B1TVmHWTGW5tcnJdlZ3hqzV6/I9Qg==} 473 | engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} 474 | dependencies: 475 | '@jest/fake-timers': 28.0.2 476 | '@jest/types': 28.0.2 477 | '@types/node': 17.0.30 478 | jest-mock: 28.0.2 479 | dev: true 480 | 481 | /@jest/expect-utils/28.0.2: 482 | resolution: {integrity: sha512-YryfH2zN5c7M8eLtn9oTBRj1sfD+X4cHNXJnTejqCveOS33wADEZUxJ7de5++lRvByNpRpfAnc8zTK7yrUJqgA==} 483 | engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} 484 | dependencies: 485 | jest-get-type: 28.0.2 486 | dev: true 487 | 488 | /@jest/expect/28.0.3: 489 | resolution: {integrity: sha512-VEzZr85bqNomgayQkR7hWG5HnbZYWYWagQriZsixhLmOzU6PCpMP61aeVhkCoRrg7ri5f7JDpeTPzDAajIwFHw==} 490 | engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} 491 | dependencies: 492 | expect: 28.0.2 493 | jest-snapshot: 28.0.3 494 | transitivePeerDependencies: 495 | - supports-color 496 | dev: true 497 | 498 | /@jest/fake-timers/28.0.2: 499 | resolution: {integrity: sha512-R75yUv+WeybPa4ZVhX9C+8XN0TKjUoceUX+/QEaDVQGxZZOK50eD74cs7iMDTtpodh00d8iLlc9197vgF6oZjA==} 500 | engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} 501 | dependencies: 502 | '@jest/types': 28.0.2 503 | '@sinonjs/fake-timers': 9.1.2 504 | '@types/node': 17.0.30 505 | jest-message-util: 28.0.2 506 | jest-mock: 28.0.2 507 | jest-util: 28.0.2 508 | dev: true 509 | 510 | /@jest/globals/28.0.3: 511 | resolution: {integrity: sha512-q/zXYI6CKtTSIt1WuTHBYizJhH7K8h+xG5PE3C0oawLlPIvUMDYmpj0JX0XsJwPRLCsz/fYXHZVG46AaEhSPmw==} 512 | engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} 513 | dependencies: 514 | '@jest/environment': 28.0.2 515 | '@jest/expect': 28.0.3 516 | '@jest/types': 28.0.2 517 | transitivePeerDependencies: 518 | - supports-color 519 | dev: true 520 | 521 | /@jest/reporters/28.0.3: 522 | resolution: {integrity: sha512-xrbIc7J/xwo+D7AY3enAR9ZWYCmJ8XIkstTukTGpKDph0gLl/TJje9jl3dssvE4KJzYqMKiSrnE5Nt68I4fTEg==} 523 | engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} 524 | peerDependencies: 525 | node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 526 | peerDependenciesMeta: 527 | node-notifier: 528 | optional: true 529 | dependencies: 530 | '@bcoe/v8-coverage': 0.2.3 531 | '@jest/console': 28.0.2 532 | '@jest/test-result': 28.0.2 533 | '@jest/transform': 28.0.3 534 | '@jest/types': 28.0.2 535 | '@jridgewell/trace-mapping': 0.3.9 536 | '@types/node': 17.0.30 537 | chalk: 4.1.2 538 | collect-v8-coverage: 1.0.1 539 | exit: 0.1.2 540 | glob: 7.2.0 541 | graceful-fs: 4.2.10 542 | istanbul-lib-coverage: 3.2.0 543 | istanbul-lib-instrument: 5.2.0 544 | istanbul-lib-report: 3.0.0 545 | istanbul-lib-source-maps: 4.0.1 546 | istanbul-reports: 3.1.4 547 | jest-util: 28.0.2 548 | jest-worker: 28.0.2 549 | slash: 3.0.0 550 | string-length: 4.0.2 551 | terminal-link: 2.1.1 552 | v8-to-istanbul: 9.0.0 553 | transitivePeerDependencies: 554 | - supports-color 555 | dev: true 556 | 557 | /@jest/schemas/28.0.2: 558 | resolution: {integrity: sha512-YVDJZjd4izeTDkij00vHHAymNXQ6WWsdChFRK86qck6Jpr3DCL5W3Is3vslviRlP+bLuMYRLbdp98amMvqudhA==} 559 | engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} 560 | dependencies: 561 | '@sinclair/typebox': 0.23.5 562 | dev: true 563 | 564 | /@jest/source-map/28.0.2: 565 | resolution: {integrity: sha512-Y9dxC8ZpN3kImkk0LkK5XCEneYMAXlZ8m5bflmSL5vrwyeUpJfentacCUg6fOb8NOpOO7hz2+l37MV77T6BFPw==} 566 | engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} 567 | dependencies: 568 | '@jridgewell/trace-mapping': 0.3.9 569 | callsites: 3.1.0 570 | graceful-fs: 4.2.10 571 | dev: true 572 | 573 | /@jest/test-result/28.0.2: 574 | resolution: {integrity: sha512-4EUqgjq9VzyUiVTvZfI9IRJD6t3NYBNP4f+Eq8Zr93+hkJ0RrGU4OBTw8tfNzidKX+bmuYzn8FxqpxOPIGGCMA==} 575 | engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} 576 | dependencies: 577 | '@jest/console': 28.0.2 578 | '@jest/types': 28.0.2 579 | '@types/istanbul-lib-coverage': 2.0.4 580 | collect-v8-coverage: 1.0.1 581 | dev: true 582 | 583 | /@jest/test-sequencer/28.0.2: 584 | resolution: {integrity: sha512-zhnZ8ydkZQTPL7YucB86eOlD79zPy5EGSUKiR2Iv93RVEDU6OEP33kwDBg70ywOcxeJGDRhyo09q7TafNCBiIg==} 585 | engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} 586 | dependencies: 587 | '@jest/test-result': 28.0.2 588 | graceful-fs: 4.2.10 589 | jest-haste-map: 28.0.2 590 | slash: 3.0.0 591 | dev: true 592 | 593 | /@jest/transform/28.0.3: 594 | resolution: {integrity: sha512-+Y0ikI7SwoW/YbK8t9oKwC70h4X2Gd0OVuz5tctRvSV/EDQU00AAkoqevXgPSSFimUmp/sp7Yl8s/1bExDqOIg==} 595 | engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} 596 | dependencies: 597 | '@babel/core': 7.17.10 598 | '@jest/types': 28.0.2 599 | '@jridgewell/trace-mapping': 0.3.9 600 | babel-plugin-istanbul: 6.1.1 601 | chalk: 4.1.2 602 | convert-source-map: 1.8.0 603 | fast-json-stable-stringify: 2.1.0 604 | graceful-fs: 4.2.10 605 | jest-haste-map: 28.0.2 606 | jest-regex-util: 28.0.2 607 | jest-util: 28.0.2 608 | micromatch: 4.0.5 609 | pirates: 4.0.5 610 | slash: 3.0.0 611 | write-file-atomic: 4.0.1 612 | transitivePeerDependencies: 613 | - supports-color 614 | dev: true 615 | 616 | /@jest/types/28.0.2: 617 | resolution: {integrity: sha512-hi3jUdm9iht7I2yrV5C4s3ucCJHUP8Eh3W6rQ1s4n/Qw9rQgsda4eqCt+r3BKRi7klVmZfQlMx1nGlzNMP2d8A==} 618 | engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} 619 | dependencies: 620 | '@jest/schemas': 28.0.2 621 | '@types/istanbul-lib-coverage': 2.0.4 622 | '@types/istanbul-reports': 3.0.1 623 | '@types/node': 17.0.30 624 | '@types/yargs': 17.0.10 625 | chalk: 4.1.2 626 | dev: true 627 | 628 | /@jridgewell/gen-mapping/0.1.1: 629 | resolution: {integrity: sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==} 630 | engines: {node: '>=6.0.0'} 631 | dependencies: 632 | '@jridgewell/set-array': 1.1.0 633 | '@jridgewell/sourcemap-codec': 1.4.11 634 | dev: true 635 | 636 | /@jridgewell/resolve-uri/3.0.6: 637 | resolution: {integrity: sha512-R7xHtBSNm+9SyvpJkdQl+qrM3Hm2fea3Ef197M3mUug+v+yR+Rhfbs7PBtcBUVnIWJ4JcAdjvij+c8hXS9p5aw==} 638 | engines: {node: '>=6.0.0'} 639 | dev: true 640 | 641 | /@jridgewell/set-array/1.1.0: 642 | resolution: {integrity: sha512-SfJxIxNVYLTsKwzB3MoOQ1yxf4w/E6MdkvTgrgAt1bfxjSrLUoHMKrDOykwN14q65waezZIdqDneUIPh4/sKxg==} 643 | engines: {node: '>=6.0.0'} 644 | dev: true 645 | 646 | /@jridgewell/sourcemap-codec/1.4.11: 647 | resolution: {integrity: sha512-Fg32GrJo61m+VqYSdRSjRXMjQ06j8YIYfcTqndLYVAaHmroZHLJZCydsWBOTDqXS2v+mjxohBWEMfg97GXmYQg==} 648 | dev: true 649 | 650 | /@jridgewell/trace-mapping/0.3.9: 651 | resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} 652 | dependencies: 653 | '@jridgewell/resolve-uri': 3.0.6 654 | '@jridgewell/sourcemap-codec': 1.4.11 655 | dev: true 656 | 657 | /@sinclair/typebox/0.23.5: 658 | resolution: {integrity: sha512-AFBVi/iT4g20DHoujvMH1aEDn8fGJh4xsRGCP6d8RpLPMqsNPvW01Jcn0QysXTsg++/xj25NmJsGyH9xug/wKg==} 659 | dev: true 660 | 661 | /@sinonjs/commons/1.8.3: 662 | resolution: {integrity: sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ==} 663 | dependencies: 664 | type-detect: 4.0.8 665 | dev: true 666 | 667 | /@sinonjs/fake-timers/9.1.2: 668 | resolution: {integrity: sha512-BPS4ynJW/o92PUR4wgriz2Ud5gpST5vz6GQfMixEDK0Z8ZCUv2M7SkBLykH56T++Xs+8ln9zTGbOvNGIe02/jw==} 669 | dependencies: 670 | '@sinonjs/commons': 1.8.3 671 | dev: true 672 | 673 | /@types/babel__core/7.1.19: 674 | resolution: {integrity: sha512-WEOTgRsbYkvA/KCsDwVEGkd7WAr1e3g31VHQ8zy5gul/V1qKullU/BU5I68X5v7V3GnB9eotmom4v5a5gjxorw==} 675 | dependencies: 676 | '@babel/parser': 7.17.10 677 | '@babel/types': 7.17.10 678 | '@types/babel__generator': 7.6.4 679 | '@types/babel__template': 7.4.1 680 | '@types/babel__traverse': 7.17.1 681 | dev: true 682 | 683 | /@types/babel__generator/7.6.4: 684 | resolution: {integrity: sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==} 685 | dependencies: 686 | '@babel/types': 7.17.10 687 | dev: true 688 | 689 | /@types/babel__template/7.4.1: 690 | resolution: {integrity: sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==} 691 | dependencies: 692 | '@babel/parser': 7.17.10 693 | '@babel/types': 7.17.10 694 | dev: true 695 | 696 | /@types/babel__traverse/7.17.1: 697 | resolution: {integrity: sha512-kVzjari1s2YVi77D3w1yuvohV2idweYXMCDzqBiVNN63TcDWrIlTVOYpqVrvbbyOE/IyzBoTKF0fdnLPEORFxA==} 698 | dependencies: 699 | '@babel/types': 7.17.10 700 | dev: true 701 | 702 | /@types/graceful-fs/4.1.5: 703 | resolution: {integrity: sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw==} 704 | dependencies: 705 | '@types/node': 17.0.30 706 | dev: true 707 | 708 | /@types/istanbul-lib-coverage/2.0.4: 709 | resolution: {integrity: sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==} 710 | dev: true 711 | 712 | /@types/istanbul-lib-report/3.0.0: 713 | resolution: {integrity: sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==} 714 | dependencies: 715 | '@types/istanbul-lib-coverage': 2.0.4 716 | dev: true 717 | 718 | /@types/istanbul-reports/3.0.1: 719 | resolution: {integrity: sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==} 720 | dependencies: 721 | '@types/istanbul-lib-report': 3.0.0 722 | dev: true 723 | 724 | /@types/json5/0.0.29: 725 | resolution: {integrity: sha1-7ihweulOEdK4J7y+UnC86n8+ce4=} 726 | dev: true 727 | 728 | /@types/node/17.0.30: 729 | resolution: {integrity: sha512-oNBIZjIqyHYP8VCNAV9uEytXVeXG2oR0w9lgAXro20eugRQfY002qr3CUl6BAe+Yf/z3CRjPdz27Pu6WWtuSRw==} 730 | dev: true 731 | 732 | /@types/prettier/2.6.0: 733 | resolution: {integrity: sha512-G/AdOadiZhnJp0jXCaBQU449W2h716OW/EoXeYkCytxKL06X1WCXB4DZpp8TpZ8eyIJVS1cw4lrlkkSYU21cDw==} 734 | dev: true 735 | 736 | /@types/stack-utils/2.0.1: 737 | resolution: {integrity: sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==} 738 | dev: true 739 | 740 | /@types/yargs-parser/21.0.0: 741 | resolution: {integrity: sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==} 742 | dev: true 743 | 744 | /@types/yargs/17.0.10: 745 | resolution: {integrity: sha512-gmEaFwpj/7f/ROdtIlci1R1VYU1J4j95m8T+Tj3iBgiBFKg1foE/PSl93bBd5T9LDXNPo8UlNN6W0qwD8O5OaA==} 746 | dependencies: 747 | '@types/yargs-parser': 21.0.0 748 | dev: true 749 | 750 | /abstract-logging/2.0.1: 751 | resolution: {integrity: sha512-2BjRTZxTPvheOvGbBslFSYOUkr+SjPtOnrLP33f+VIWLzezQpZcqVg7ja3L4dBXmzzgwT+a029jRx5PCi3JuiA==} 752 | dev: true 753 | 754 | /acorn-jsx/5.3.2_acorn@8.7.1: 755 | resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} 756 | peerDependencies: 757 | acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 758 | dependencies: 759 | acorn: 8.7.1 760 | dev: true 761 | 762 | /acorn/8.7.1: 763 | resolution: {integrity: sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A==} 764 | engines: {node: '>=0.4.0'} 765 | hasBin: true 766 | dev: true 767 | 768 | /ajv/6.12.6: 769 | resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} 770 | dependencies: 771 | fast-deep-equal: 3.1.3 772 | fast-json-stable-stringify: 2.1.0 773 | json-schema-traverse: 0.4.1 774 | uri-js: 4.4.1 775 | dev: true 776 | 777 | /ajv/8.11.0: 778 | resolution: {integrity: sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==} 779 | dependencies: 780 | fast-deep-equal: 3.1.3 781 | json-schema-traverse: 1.0.0 782 | require-from-string: 2.0.2 783 | uri-js: 4.4.1 784 | dev: true 785 | 786 | /ansi-escapes/4.3.2: 787 | resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} 788 | engines: {node: '>=8'} 789 | dependencies: 790 | type-fest: 0.21.3 791 | dev: true 792 | 793 | /ansi-regex/5.0.1: 794 | resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} 795 | engines: {node: '>=8'} 796 | dev: true 797 | 798 | /ansi-styles/3.2.1: 799 | resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} 800 | engines: {node: '>=4'} 801 | dependencies: 802 | color-convert: 1.9.3 803 | dev: true 804 | 805 | /ansi-styles/4.3.0: 806 | resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} 807 | engines: {node: '>=8'} 808 | dependencies: 809 | color-convert: 2.0.1 810 | dev: true 811 | 812 | /ansi-styles/5.2.0: 813 | resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} 814 | engines: {node: '>=10'} 815 | dev: true 816 | 817 | /anymatch/3.1.2: 818 | resolution: {integrity: sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==} 819 | engines: {node: '>= 8'} 820 | dependencies: 821 | normalize-path: 3.0.0 822 | picomatch: 2.3.1 823 | dev: true 824 | 825 | /archy/1.0.0: 826 | resolution: {integrity: sha1-+cjBN1fMHde8N5rHeyxipcKGjEA=} 827 | dev: true 828 | 829 | /argparse/1.0.10: 830 | resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} 831 | dependencies: 832 | sprintf-js: 1.0.3 833 | dev: true 834 | 835 | /argparse/2.0.1: 836 | resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} 837 | dev: true 838 | 839 | /array-includes/3.1.4: 840 | resolution: {integrity: sha512-ZTNSQkmWumEbiHO2GF4GmWxYVTiQyJy2XOTa15sdQSrvKn7l+180egQMqlrMOUMCyLMD7pmyQe4mMDUT6Behrw==} 841 | engines: {node: '>= 0.4'} 842 | dependencies: 843 | call-bind: 1.0.2 844 | define-properties: 1.1.4 845 | es-abstract: 1.19.5 846 | get-intrinsic: 1.1.1 847 | is-string: 1.0.7 848 | dev: true 849 | 850 | /array.prototype.flat/1.3.0: 851 | resolution: {integrity: sha512-12IUEkHsAhA4DY5s0FPgNXIdc8VRSqD9Zp78a5au9abH/SOBrsp082JOWFNTjkMozh8mqcdiKuaLGhPeYztxSw==} 852 | engines: {node: '>= 0.4'} 853 | dependencies: 854 | call-bind: 1.0.2 855 | define-properties: 1.1.4 856 | es-abstract: 1.19.5 857 | es-shim-unscopables: 1.0.0 858 | dev: true 859 | 860 | /atomic-sleep/1.0.0: 861 | resolution: {integrity: sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==} 862 | engines: {node: '>=8.0.0'} 863 | dev: true 864 | 865 | /avvio/7.2.5: 866 | resolution: {integrity: sha512-AOhBxyLVdpOad3TujtC9kL/9r3HnTkxwQ5ggOsYrvvZP1cCFvzHWJd5XxZDFuTn+IN8vkKSG5SEJrd27vCSbeA==} 867 | dependencies: 868 | archy: 1.0.0 869 | debug: 4.3.4 870 | fastq: 1.13.0 871 | queue-microtask: 1.2.3 872 | transitivePeerDependencies: 873 | - supports-color 874 | dev: true 875 | 876 | /babel-jest/28.0.3_@babel+core@7.17.10: 877 | resolution: {integrity: sha512-S0ADyYdcrt5fp9YldRYWCUHdk1BKt9AkvBkLWBoNAEV9NoWZPIj5+MYhPcGgTS65mfv3a+Ymf2UqgWoAVd41cA==} 878 | engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} 879 | peerDependencies: 880 | '@babel/core': ^7.8.0 881 | dependencies: 882 | '@babel/core': 7.17.10 883 | '@jest/transform': 28.0.3 884 | '@types/babel__core': 7.1.19 885 | babel-plugin-istanbul: 6.1.1 886 | babel-preset-jest: 28.0.2_@babel+core@7.17.10 887 | chalk: 4.1.2 888 | graceful-fs: 4.2.10 889 | slash: 3.0.0 890 | transitivePeerDependencies: 891 | - supports-color 892 | dev: true 893 | 894 | /babel-plugin-istanbul/6.1.1: 895 | resolution: {integrity: sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==} 896 | engines: {node: '>=8'} 897 | dependencies: 898 | '@babel/helper-plugin-utils': 7.16.7 899 | '@istanbuljs/load-nyc-config': 1.1.0 900 | '@istanbuljs/schema': 0.1.3 901 | istanbul-lib-instrument: 5.2.0 902 | test-exclude: 6.0.0 903 | transitivePeerDependencies: 904 | - supports-color 905 | dev: true 906 | 907 | /babel-plugin-jest-hoist/28.0.2: 908 | resolution: {integrity: sha512-Kizhn/ZL+68ZQHxSnHyuvJv8IchXD62KQxV77TBDV/xoBFBOfgRAk97GNs6hXdTTCiVES9nB2I6+7MXXrk5llQ==} 909 | engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} 910 | dependencies: 911 | '@babel/template': 7.16.7 912 | '@babel/types': 7.17.10 913 | '@types/babel__core': 7.1.19 914 | '@types/babel__traverse': 7.17.1 915 | dev: true 916 | 917 | /babel-preset-current-node-syntax/1.0.1_@babel+core@7.17.10: 918 | resolution: {integrity: sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==} 919 | peerDependencies: 920 | '@babel/core': ^7.0.0 921 | dependencies: 922 | '@babel/core': 7.17.10 923 | '@babel/plugin-syntax-async-generators': 7.8.4_@babel+core@7.17.10 924 | '@babel/plugin-syntax-bigint': 7.8.3_@babel+core@7.17.10 925 | '@babel/plugin-syntax-class-properties': 7.12.13_@babel+core@7.17.10 926 | '@babel/plugin-syntax-import-meta': 7.10.4_@babel+core@7.17.10 927 | '@babel/plugin-syntax-json-strings': 7.8.3_@babel+core@7.17.10 928 | '@babel/plugin-syntax-logical-assignment-operators': 7.10.4_@babel+core@7.17.10 929 | '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3_@babel+core@7.17.10 930 | '@babel/plugin-syntax-numeric-separator': 7.10.4_@babel+core@7.17.10 931 | '@babel/plugin-syntax-object-rest-spread': 7.8.3_@babel+core@7.17.10 932 | '@babel/plugin-syntax-optional-catch-binding': 7.8.3_@babel+core@7.17.10 933 | '@babel/plugin-syntax-optional-chaining': 7.8.3_@babel+core@7.17.10 934 | '@babel/plugin-syntax-top-level-await': 7.14.5_@babel+core@7.17.10 935 | dev: true 936 | 937 | /babel-preset-jest/28.0.2_@babel+core@7.17.10: 938 | resolution: {integrity: sha512-sYzXIdgIXXroJTFeB3S6sNDWtlJ2dllCdTEsnZ65ACrMojj3hVNFRmnJ1HZtomGi+Be7aqpY/HJ92fr8OhKVkQ==} 939 | engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} 940 | peerDependencies: 941 | '@babel/core': ^7.0.0 942 | dependencies: 943 | '@babel/core': 7.17.10 944 | babel-plugin-jest-hoist: 28.0.2 945 | babel-preset-current-node-syntax: 1.0.1_@babel+core@7.17.10 946 | dev: true 947 | 948 | /balanced-match/1.0.2: 949 | resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} 950 | dev: true 951 | 952 | /brace-expansion/1.1.11: 953 | resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} 954 | dependencies: 955 | balanced-match: 1.0.2 956 | concat-map: 0.0.1 957 | dev: true 958 | 959 | /braces/3.0.2: 960 | resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} 961 | engines: {node: '>=8'} 962 | dependencies: 963 | fill-range: 7.0.1 964 | dev: true 965 | 966 | /browserslist/4.20.3: 967 | resolution: {integrity: sha512-NBhymBQl1zM0Y5dQT/O+xiLP9/rzOIQdKM/eMJBAq7yBgaB6krIYLGejrwVYnSHZdqjscB1SPuAjHwxjvN6Wdg==} 968 | engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} 969 | hasBin: true 970 | dependencies: 971 | caniuse-lite: 1.0.30001334 972 | electron-to-chromium: 1.4.129 973 | escalade: 3.1.1 974 | node-releases: 2.0.4 975 | picocolors: 1.0.0 976 | dev: true 977 | 978 | /bser/2.1.1: 979 | resolution: {integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==} 980 | dependencies: 981 | node-int64: 0.4.0 982 | dev: true 983 | 984 | /buffer-from/1.1.2: 985 | resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} 986 | dev: true 987 | 988 | /builtins/4.1.0: 989 | resolution: {integrity: sha512-1bPRZQtmKaO6h7qV1YHXNtr6nCK28k0Zo95KM4dXfILcZZwoHJBN1m3lfLv9LPkcOZlrSr+J1bzMaZFO98Yq0w==} 990 | dependencies: 991 | semver: 7.3.7 992 | dev: true 993 | 994 | /call-bind/1.0.2: 995 | resolution: {integrity: sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==} 996 | dependencies: 997 | function-bind: 1.1.1 998 | get-intrinsic: 1.1.1 999 | dev: true 1000 | 1001 | /callsites/3.1.0: 1002 | resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} 1003 | engines: {node: '>=6'} 1004 | dev: true 1005 | 1006 | /camelcase/5.3.1: 1007 | resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} 1008 | engines: {node: '>=6'} 1009 | dev: true 1010 | 1011 | /camelcase/6.3.0: 1012 | resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} 1013 | engines: {node: '>=10'} 1014 | dev: true 1015 | 1016 | /caniuse-lite/1.0.30001334: 1017 | resolution: {integrity: sha512-kbaCEBRRVSoeNs74sCuq92MJyGrMtjWVfhltoHUCW4t4pXFvGjUBrfo47weBRViHkiV3eBYyIsfl956NtHGazw==} 1018 | dev: true 1019 | 1020 | /chalk/2.4.2: 1021 | resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} 1022 | engines: {node: '>=4'} 1023 | dependencies: 1024 | ansi-styles: 3.2.1 1025 | escape-string-regexp: 1.0.5 1026 | supports-color: 5.5.0 1027 | dev: true 1028 | 1029 | /chalk/4.1.2: 1030 | resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} 1031 | engines: {node: '>=10'} 1032 | dependencies: 1033 | ansi-styles: 4.3.0 1034 | supports-color: 7.2.0 1035 | dev: true 1036 | 1037 | /char-regex/1.0.2: 1038 | resolution: {integrity: sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==} 1039 | engines: {node: '>=10'} 1040 | dev: true 1041 | 1042 | /ci-info/3.3.0: 1043 | resolution: {integrity: sha512-riT/3vI5YpVH6/qomlDnJow6TBee2PBKSEpx3O32EGPYbWGIRsIlGRms3Sm74wYE1JMo8RnO04Hb12+v1J5ICw==} 1044 | dev: true 1045 | 1046 | /cjs-module-lexer/1.2.2: 1047 | resolution: {integrity: sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==} 1048 | dev: true 1049 | 1050 | /cliui/7.0.4: 1051 | resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==} 1052 | dependencies: 1053 | string-width: 4.2.3 1054 | strip-ansi: 6.0.1 1055 | wrap-ansi: 7.0.0 1056 | dev: true 1057 | 1058 | /co/4.6.0: 1059 | resolution: {integrity: sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=} 1060 | engines: {iojs: '>= 1.0.0', node: '>= 0.12.0'} 1061 | dev: true 1062 | 1063 | /collect-v8-coverage/1.0.1: 1064 | resolution: {integrity: sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==} 1065 | dev: true 1066 | 1067 | /color-convert/1.9.3: 1068 | resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} 1069 | dependencies: 1070 | color-name: 1.1.3 1071 | dev: true 1072 | 1073 | /color-convert/2.0.1: 1074 | resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} 1075 | engines: {node: '>=7.0.0'} 1076 | dependencies: 1077 | color-name: 1.1.4 1078 | dev: true 1079 | 1080 | /color-name/1.1.3: 1081 | resolution: {integrity: sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=} 1082 | dev: true 1083 | 1084 | /color-name/1.1.4: 1085 | resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} 1086 | dev: true 1087 | 1088 | /concat-map/0.0.1: 1089 | resolution: {integrity: sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=} 1090 | dev: true 1091 | 1092 | /convert-source-map/1.8.0: 1093 | resolution: {integrity: sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==} 1094 | dependencies: 1095 | safe-buffer: 5.1.2 1096 | dev: true 1097 | 1098 | /cookie/0.4.2: 1099 | resolution: {integrity: sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==} 1100 | engines: {node: '>= 0.6'} 1101 | dev: true 1102 | 1103 | /cross-spawn/7.0.3: 1104 | resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} 1105 | engines: {node: '>= 8'} 1106 | dependencies: 1107 | path-key: 3.1.1 1108 | shebang-command: 2.0.0 1109 | which: 2.0.2 1110 | dev: true 1111 | 1112 | /debug/2.6.9: 1113 | resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} 1114 | dependencies: 1115 | ms: 2.0.0 1116 | dev: true 1117 | 1118 | /debug/3.2.7: 1119 | resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} 1120 | dependencies: 1121 | ms: 2.1.3 1122 | dev: true 1123 | 1124 | /debug/4.3.4: 1125 | resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} 1126 | engines: {node: '>=6.0'} 1127 | peerDependencies: 1128 | supports-color: '*' 1129 | peerDependenciesMeta: 1130 | supports-color: 1131 | optional: true 1132 | dependencies: 1133 | ms: 2.1.2 1134 | dev: true 1135 | 1136 | /dedent/0.7.0: 1137 | resolution: {integrity: sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw=} 1138 | dev: true 1139 | 1140 | /deep-is/0.1.4: 1141 | resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} 1142 | dev: true 1143 | 1144 | /deepmerge/4.2.2: 1145 | resolution: {integrity: sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==} 1146 | engines: {node: '>=0.10.0'} 1147 | dev: true 1148 | 1149 | /define-properties/1.1.4: 1150 | resolution: {integrity: sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==} 1151 | engines: {node: '>= 0.4'} 1152 | dependencies: 1153 | has-property-descriptors: 1.0.0 1154 | object-keys: 1.1.1 1155 | dev: true 1156 | 1157 | /detect-newline/3.1.0: 1158 | resolution: {integrity: sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==} 1159 | engines: {node: '>=8'} 1160 | dev: true 1161 | 1162 | /diff-sequences/28.0.2: 1163 | resolution: {integrity: sha512-YtEoNynLDFCRznv/XDalsKGSZDoj0U5kLnXvY0JSq3nBboRrZXjD81+eSiwi+nzcZDwedMmcowcxNwwgFW23mQ==} 1164 | engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} 1165 | dev: true 1166 | 1167 | /doctrine/2.1.0: 1168 | resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} 1169 | engines: {node: '>=0.10.0'} 1170 | dependencies: 1171 | esutils: 2.0.3 1172 | dev: true 1173 | 1174 | /doctrine/3.0.0: 1175 | resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} 1176 | engines: {node: '>=6.0.0'} 1177 | dependencies: 1178 | esutils: 2.0.3 1179 | dev: true 1180 | 1181 | /electron-to-chromium/1.4.129: 1182 | resolution: {integrity: sha512-GgtN6bsDtHdtXJtlMYZWGB/uOyjZWjmRDumXTas7dGBaB9zUyCjzHet1DY2KhyHN8R0GLbzZWqm4efeddqqyRQ==} 1183 | dev: true 1184 | 1185 | /emittery/0.10.2: 1186 | resolution: {integrity: sha512-aITqOwnLanpHLNXZJENbOgjUBeHocD+xsSJmNrjovKBW5HbSpW3d1pEls7GFQPUWXiwG9+0P4GtHfEqC/4M0Iw==} 1187 | engines: {node: '>=12'} 1188 | dev: true 1189 | 1190 | /emoji-regex/8.0.0: 1191 | resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} 1192 | dev: true 1193 | 1194 | /error-ex/1.3.2: 1195 | resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} 1196 | dependencies: 1197 | is-arrayish: 0.2.1 1198 | dev: true 1199 | 1200 | /es-abstract/1.19.5: 1201 | resolution: {integrity: sha512-Aa2G2+Rd3b6kxEUKTF4TaW67czBLyAv3z7VOhYRU50YBx+bbsYZ9xQP4lMNazePuFlybXI0V4MruPos7qUo5fA==} 1202 | engines: {node: '>= 0.4'} 1203 | dependencies: 1204 | call-bind: 1.0.2 1205 | es-to-primitive: 1.2.1 1206 | function-bind: 1.1.1 1207 | get-intrinsic: 1.1.1 1208 | get-symbol-description: 1.0.0 1209 | has: 1.0.3 1210 | has-symbols: 1.0.3 1211 | internal-slot: 1.0.3 1212 | is-callable: 1.2.4 1213 | is-negative-zero: 2.0.2 1214 | is-regex: 1.1.4 1215 | is-shared-array-buffer: 1.0.2 1216 | is-string: 1.0.7 1217 | is-weakref: 1.0.2 1218 | object-inspect: 1.12.0 1219 | object-keys: 1.1.1 1220 | object.assign: 4.1.2 1221 | string.prototype.trimend: 1.0.4 1222 | string.prototype.trimstart: 1.0.4 1223 | unbox-primitive: 1.0.2 1224 | dev: true 1225 | 1226 | /es-shim-unscopables/1.0.0: 1227 | resolution: {integrity: sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==} 1228 | dependencies: 1229 | has: 1.0.3 1230 | dev: true 1231 | 1232 | /es-to-primitive/1.2.1: 1233 | resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} 1234 | engines: {node: '>= 0.4'} 1235 | dependencies: 1236 | is-callable: 1.2.4 1237 | is-date-object: 1.0.5 1238 | is-symbol: 1.0.4 1239 | dev: true 1240 | 1241 | /escalade/3.1.1: 1242 | resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} 1243 | engines: {node: '>=6'} 1244 | dev: true 1245 | 1246 | /escape-string-regexp/1.0.5: 1247 | resolution: {integrity: sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=} 1248 | engines: {node: '>=0.8.0'} 1249 | dev: true 1250 | 1251 | /escape-string-regexp/2.0.0: 1252 | resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==} 1253 | engines: {node: '>=8'} 1254 | dev: true 1255 | 1256 | /escape-string-regexp/4.0.0: 1257 | resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} 1258 | engines: {node: '>=10'} 1259 | dev: true 1260 | 1261 | /eslint-config-standard/17.0.0_14af0798efd537ecbc8732fe6f15829c: 1262 | resolution: {integrity: sha512-/2ks1GKyqSOkH7JFvXJicu0iMpoojkwB+f5Du/1SC0PtBL+s8v30k9njRZ21pm2drKYm2342jFnGWzttxPmZVg==} 1263 | peerDependencies: 1264 | eslint: ^8.0.1 1265 | eslint-plugin-import: ^2.25.2 1266 | eslint-plugin-n: ^15.0.0 1267 | eslint-plugin-promise: ^6.0.0 1268 | dependencies: 1269 | eslint: 8.14.0 1270 | eslint-plugin-import: 2.26.0_eslint@8.14.0 1271 | eslint-plugin-n: 15.2.0_eslint@8.14.0 1272 | eslint-plugin-promise: 6.0.0_eslint@8.14.0 1273 | dev: true 1274 | 1275 | /eslint-import-resolver-node/0.3.6: 1276 | resolution: {integrity: sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw==} 1277 | dependencies: 1278 | debug: 3.2.7 1279 | resolve: 1.22.0 1280 | dev: true 1281 | 1282 | /eslint-module-utils/2.7.3: 1283 | resolution: {integrity: sha512-088JEC7O3lDZM9xGe0RerkOMd0EjFl+Yvd1jPWIkMT5u3H9+HC34mWWPnqPrN13gieT9pBOO+Qt07Nb/6TresQ==} 1284 | engines: {node: '>=4'} 1285 | dependencies: 1286 | debug: 3.2.7 1287 | find-up: 2.1.0 1288 | dev: true 1289 | 1290 | /eslint-plugin-es/4.1.0_eslint@8.14.0: 1291 | resolution: {integrity: sha512-GILhQTnjYE2WorX5Jyi5i4dz5ALWxBIdQECVQavL6s7cI76IZTDWleTHkxz/QT3kvcs2QlGHvKLYsSlPOlPXnQ==} 1292 | engines: {node: '>=8.10.0'} 1293 | peerDependencies: 1294 | eslint: '>=4.19.1' 1295 | dependencies: 1296 | eslint: 8.14.0 1297 | eslint-utils: 2.1.0 1298 | regexpp: 3.2.0 1299 | dev: true 1300 | 1301 | /eslint-plugin-import/2.26.0_eslint@8.14.0: 1302 | resolution: {integrity: sha512-hYfi3FXaM8WPLf4S1cikh/r4IxnO6zrhZbEGz2b660EJRbuxgpDS5gkCuYgGWg2xxh2rBuIr4Pvhve/7c31koA==} 1303 | engines: {node: '>=4'} 1304 | peerDependencies: 1305 | eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 1306 | dependencies: 1307 | array-includes: 3.1.4 1308 | array.prototype.flat: 1.3.0 1309 | debug: 2.6.9 1310 | doctrine: 2.1.0 1311 | eslint: 8.14.0 1312 | eslint-import-resolver-node: 0.3.6 1313 | eslint-module-utils: 2.7.3 1314 | has: 1.0.3 1315 | is-core-module: 2.9.0 1316 | is-glob: 4.0.3 1317 | minimatch: 3.1.2 1318 | object.values: 1.1.5 1319 | resolve: 1.22.0 1320 | tsconfig-paths: 3.14.1 1321 | dev: true 1322 | 1323 | /eslint-plugin-n/15.2.0_eslint@8.14.0: 1324 | resolution: {integrity: sha512-lWLg++jGwC88GDGGBX3CMkk0GIWq0y41aH51lavWApOKcMQcYoL3Ayd0lEdtD3SnQtR+3qBvWQS3qGbR2BxRWg==} 1325 | engines: {node: '>=12.22.0'} 1326 | peerDependencies: 1327 | eslint: '>=7.0.0' 1328 | dependencies: 1329 | builtins: 4.1.0 1330 | eslint: 8.14.0 1331 | eslint-plugin-es: 4.1.0_eslint@8.14.0 1332 | eslint-utils: 3.0.0_eslint@8.14.0 1333 | ignore: 5.2.0 1334 | is-core-module: 2.9.0 1335 | minimatch: 3.1.2 1336 | resolve: 1.22.0 1337 | semver: 6.3.0 1338 | dev: true 1339 | 1340 | /eslint-plugin-promise/6.0.0_eslint@8.14.0: 1341 | resolution: {integrity: sha512-7GPezalm5Bfi/E22PnQxDWH2iW9GTvAlUNTztemeHb6c1BniSyoeTrM87JkC0wYdi6aQrZX9p2qEiAno8aTcbw==} 1342 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 1343 | peerDependencies: 1344 | eslint: ^7.0.0 || ^8.0.0 1345 | dependencies: 1346 | eslint: 8.14.0 1347 | dev: true 1348 | 1349 | /eslint-plugin-standard/4.1.0_eslint@8.14.0: 1350 | resolution: {integrity: sha512-ZL7+QRixjTR6/528YNGyDotyffm5OQst/sGxKDwGb9Uqs4In5Egi4+jbobhqJoyoCM6/7v/1A5fhQ7ScMtDjaQ==} 1351 | peerDependencies: 1352 | eslint: '>=5.0.0' 1353 | dependencies: 1354 | eslint: 8.14.0 1355 | dev: true 1356 | 1357 | /eslint-scope/7.1.1: 1358 | resolution: {integrity: sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==} 1359 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 1360 | dependencies: 1361 | esrecurse: 4.3.0 1362 | estraverse: 5.3.0 1363 | dev: true 1364 | 1365 | /eslint-utils/2.1.0: 1366 | resolution: {integrity: sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==} 1367 | engines: {node: '>=6'} 1368 | dependencies: 1369 | eslint-visitor-keys: 1.3.0 1370 | dev: true 1371 | 1372 | /eslint-utils/3.0.0_eslint@8.14.0: 1373 | resolution: {integrity: sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==} 1374 | engines: {node: ^10.0.0 || ^12.0.0 || >= 14.0.0} 1375 | peerDependencies: 1376 | eslint: '>=5' 1377 | dependencies: 1378 | eslint: 8.14.0 1379 | eslint-visitor-keys: 2.1.0 1380 | dev: true 1381 | 1382 | /eslint-visitor-keys/1.3.0: 1383 | resolution: {integrity: sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==} 1384 | engines: {node: '>=4'} 1385 | dev: true 1386 | 1387 | /eslint-visitor-keys/2.1.0: 1388 | resolution: {integrity: sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==} 1389 | engines: {node: '>=10'} 1390 | dev: true 1391 | 1392 | /eslint-visitor-keys/3.3.0: 1393 | resolution: {integrity: sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==} 1394 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 1395 | dev: true 1396 | 1397 | /eslint/8.14.0: 1398 | resolution: {integrity: sha512-3/CE4aJX7LNEiE3i6FeodHmI/38GZtWCsAtsymScmzYapx8q1nVVb+eLcLSzATmCPXw5pT4TqVs1E0OmxAd9tw==} 1399 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 1400 | hasBin: true 1401 | dependencies: 1402 | '@eslint/eslintrc': 1.2.2 1403 | '@humanwhocodes/config-array': 0.9.5 1404 | ajv: 6.12.6 1405 | chalk: 4.1.2 1406 | cross-spawn: 7.0.3 1407 | debug: 4.3.4 1408 | doctrine: 3.0.0 1409 | escape-string-regexp: 4.0.0 1410 | eslint-scope: 7.1.1 1411 | eslint-utils: 3.0.0_eslint@8.14.0 1412 | eslint-visitor-keys: 3.3.0 1413 | espree: 9.3.1 1414 | esquery: 1.4.0 1415 | esutils: 2.0.3 1416 | fast-deep-equal: 3.1.3 1417 | file-entry-cache: 6.0.1 1418 | functional-red-black-tree: 1.0.1 1419 | glob-parent: 6.0.2 1420 | globals: 13.13.0 1421 | ignore: 5.2.0 1422 | import-fresh: 3.3.0 1423 | imurmurhash: 0.1.4 1424 | is-glob: 4.0.3 1425 | js-yaml: 4.1.0 1426 | json-stable-stringify-without-jsonify: 1.0.1 1427 | levn: 0.4.1 1428 | lodash.merge: 4.6.2 1429 | minimatch: 3.1.2 1430 | natural-compare: 1.4.0 1431 | optionator: 0.9.1 1432 | regexpp: 3.2.0 1433 | strip-ansi: 6.0.1 1434 | strip-json-comments: 3.1.1 1435 | text-table: 0.2.0 1436 | v8-compile-cache: 2.3.0 1437 | transitivePeerDependencies: 1438 | - supports-color 1439 | dev: true 1440 | 1441 | /espree/9.3.1: 1442 | resolution: {integrity: sha512-bvdyLmJMfwkV3NCRl5ZhJf22zBFo1y8bYh3VYb+bfzqNB4Je68P2sSuXyuFquzWLebHpNd2/d5uv7yoP9ISnGQ==} 1443 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 1444 | dependencies: 1445 | acorn: 8.7.1 1446 | acorn-jsx: 5.3.2_acorn@8.7.1 1447 | eslint-visitor-keys: 3.3.0 1448 | dev: true 1449 | 1450 | /esprima/4.0.1: 1451 | resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} 1452 | engines: {node: '>=4'} 1453 | hasBin: true 1454 | dev: true 1455 | 1456 | /esquery/1.4.0: 1457 | resolution: {integrity: sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==} 1458 | engines: {node: '>=0.10'} 1459 | dependencies: 1460 | estraverse: 5.3.0 1461 | dev: true 1462 | 1463 | /esrecurse/4.3.0: 1464 | resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} 1465 | engines: {node: '>=4.0'} 1466 | dependencies: 1467 | estraverse: 5.3.0 1468 | dev: true 1469 | 1470 | /estraverse/5.3.0: 1471 | resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} 1472 | engines: {node: '>=4.0'} 1473 | dev: true 1474 | 1475 | /esutils/2.0.3: 1476 | resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} 1477 | engines: {node: '>=0.10.0'} 1478 | dev: true 1479 | 1480 | /execa/5.1.1: 1481 | resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} 1482 | engines: {node: '>=10'} 1483 | dependencies: 1484 | cross-spawn: 7.0.3 1485 | get-stream: 6.0.1 1486 | human-signals: 2.1.0 1487 | is-stream: 2.0.1 1488 | merge-stream: 2.0.0 1489 | npm-run-path: 4.0.1 1490 | onetime: 5.1.2 1491 | signal-exit: 3.0.7 1492 | strip-final-newline: 2.0.0 1493 | dev: true 1494 | 1495 | /exit/0.1.2: 1496 | resolution: {integrity: sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=} 1497 | engines: {node: '>= 0.8.0'} 1498 | dev: true 1499 | 1500 | /expect/28.0.2: 1501 | resolution: {integrity: sha512-X0qIuI/zKv98k34tM+uGeOgAC73lhs4vROF9MkPk94C1zujtwv4Cla8SxhWn0G1OwvG9gLLL7RjFBkwGVaZ83w==} 1502 | engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} 1503 | dependencies: 1504 | '@jest/expect-utils': 28.0.2 1505 | jest-get-type: 28.0.2 1506 | jest-matcher-utils: 28.0.2 1507 | jest-message-util: 28.0.2 1508 | jest-util: 28.0.2 1509 | dev: true 1510 | 1511 | /fast-decode-uri-component/1.0.1: 1512 | resolution: {integrity: sha512-WKgKWg5eUxvRZGwW8FvfbaH7AXSh2cL+3j5fMGzUMCxWBJ3dV3a7Wz8y2f/uQ0e3B6WmodD3oS54jTQ9HVTIIg==} 1513 | dev: true 1514 | 1515 | /fast-deep-equal/3.1.3: 1516 | resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} 1517 | dev: true 1518 | 1519 | /fast-json-stable-stringify/2.1.0: 1520 | resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} 1521 | dev: true 1522 | 1523 | /fast-json-stringify/2.7.13: 1524 | resolution: {integrity: sha512-ar+hQ4+OIurUGjSJD1anvYSDcUflywhKjfxnsW4TBTD7+u0tJufv6DKRWoQk3vI6YBOWMoz0TQtfbe7dxbQmvA==} 1525 | engines: {node: '>= 10.0.0'} 1526 | dependencies: 1527 | ajv: 6.12.6 1528 | deepmerge: 4.2.2 1529 | rfdc: 1.3.0 1530 | string-similarity: 4.0.4 1531 | dev: true 1532 | 1533 | /fast-levenshtein/2.0.6: 1534 | resolution: {integrity: sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=} 1535 | dev: true 1536 | 1537 | /fast-redact/3.1.1: 1538 | resolution: {integrity: sha512-odVmjC8x8jNeMZ3C+rPMESzXVSEU8tSWSHv9HFxP2mm89G/1WwqhrerJDQm9Zus8X6aoRgQDThKqptdNA6bt+A==} 1539 | engines: {node: '>=6'} 1540 | dev: true 1541 | 1542 | /fast-safe-stringify/2.1.1: 1543 | resolution: {integrity: sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==} 1544 | dev: true 1545 | 1546 | /fastify-plugin/3.0.1: 1547 | resolution: {integrity: sha512-qKcDXmuZadJqdTm6vlCqioEbyewF60b/0LOFCcYN1B6BIZGlYJumWWOYs70SFYLDAH4YqdE1cxH/RKMG7rFxgA==} 1548 | dev: false 1549 | 1550 | /fastify/3.29.0: 1551 | resolution: {integrity: sha512-zXSiDTdHJCHcmDrSje1f1RfzTmUTjMtHnPhh6cdokgfHhloQ+gy0Du+KlEjwTbcNC3Djj4GAsBzl6KvfI9Ah2g==} 1552 | dependencies: 1553 | '@fastify/ajv-compiler': 1.1.0 1554 | '@fastify/error': 2.0.0 1555 | abstract-logging: 2.0.1 1556 | avvio: 7.2.5 1557 | fast-json-stringify: 2.7.13 1558 | find-my-way: 4.5.1 1559 | flatstr: 1.0.12 1560 | light-my-request: 4.9.0 1561 | pino: 6.14.0 1562 | process-warning: 1.0.0 1563 | proxy-addr: 2.0.7 1564 | rfdc: 1.3.0 1565 | secure-json-parse: 2.4.0 1566 | semver: 7.3.7 1567 | tiny-lru: 8.0.2 1568 | transitivePeerDependencies: 1569 | - supports-color 1570 | dev: true 1571 | 1572 | /fastq/1.13.0: 1573 | resolution: {integrity: sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==} 1574 | dependencies: 1575 | reusify: 1.0.4 1576 | dev: true 1577 | 1578 | /fb-watchman/2.0.1: 1579 | resolution: {integrity: sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg==} 1580 | dependencies: 1581 | bser: 2.1.1 1582 | dev: true 1583 | 1584 | /file-entry-cache/6.0.1: 1585 | resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} 1586 | engines: {node: ^10.12.0 || >=12.0.0} 1587 | dependencies: 1588 | flat-cache: 3.0.4 1589 | dev: true 1590 | 1591 | /fill-range/7.0.1: 1592 | resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} 1593 | engines: {node: '>=8'} 1594 | dependencies: 1595 | to-regex-range: 5.0.1 1596 | dev: true 1597 | 1598 | /find-my-way/4.5.1: 1599 | resolution: {integrity: sha512-kE0u7sGoUFbMXcOG/xpkmz4sRLCklERnBcg7Ftuu1iAxsfEt2S46RLJ3Sq7vshsEy2wJT2hZxE58XZK27qa8kg==} 1600 | engines: {node: '>=10'} 1601 | dependencies: 1602 | fast-decode-uri-component: 1.0.1 1603 | fast-deep-equal: 3.1.3 1604 | safe-regex2: 2.0.0 1605 | semver-store: 0.3.0 1606 | dev: true 1607 | 1608 | /find-up/2.1.0: 1609 | resolution: {integrity: sha1-RdG35QbHF93UgndaK3eSCjwMV6c=} 1610 | engines: {node: '>=4'} 1611 | dependencies: 1612 | locate-path: 2.0.0 1613 | dev: true 1614 | 1615 | /find-up/4.1.0: 1616 | resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} 1617 | engines: {node: '>=8'} 1618 | dependencies: 1619 | locate-path: 5.0.0 1620 | path-exists: 4.0.0 1621 | dev: true 1622 | 1623 | /flat-cache/3.0.4: 1624 | resolution: {integrity: sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==} 1625 | engines: {node: ^10.12.0 || >=12.0.0} 1626 | dependencies: 1627 | flatted: 3.2.5 1628 | rimraf: 3.0.2 1629 | dev: true 1630 | 1631 | /flatstr/1.0.12: 1632 | resolution: {integrity: sha512-4zPxDyhCyiN2wIAtSLI6gc82/EjqZc1onI4Mz/l0pWrAlsSfYH/2ZIcU+e3oA2wDwbzIWNKwa23F8rh6+DRWkw==} 1633 | dev: true 1634 | 1635 | /flatted/3.2.5: 1636 | resolution: {integrity: sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg==} 1637 | dev: true 1638 | 1639 | /forwarded/0.2.0: 1640 | resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} 1641 | engines: {node: '>= 0.6'} 1642 | dev: true 1643 | 1644 | /fs.realpath/1.0.0: 1645 | resolution: {integrity: sha1-FQStJSMVjKpA20onh8sBQRmU6k8=} 1646 | dev: true 1647 | 1648 | /fsevents/2.3.2: 1649 | resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} 1650 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} 1651 | os: [darwin] 1652 | requiresBuild: true 1653 | dev: true 1654 | optional: true 1655 | 1656 | /function-bind/1.1.1: 1657 | resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} 1658 | dev: true 1659 | 1660 | /functional-red-black-tree/1.0.1: 1661 | resolution: {integrity: sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=} 1662 | dev: true 1663 | 1664 | /gensync/1.0.0-beta.2: 1665 | resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} 1666 | engines: {node: '>=6.9.0'} 1667 | dev: true 1668 | 1669 | /get-caller-file/2.0.5: 1670 | resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} 1671 | engines: {node: 6.* || 8.* || >= 10.*} 1672 | dev: true 1673 | 1674 | /get-intrinsic/1.1.1: 1675 | resolution: {integrity: sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==} 1676 | dependencies: 1677 | function-bind: 1.1.1 1678 | has: 1.0.3 1679 | has-symbols: 1.0.3 1680 | dev: true 1681 | 1682 | /get-package-type/0.1.0: 1683 | resolution: {integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==} 1684 | engines: {node: '>=8.0.0'} 1685 | dev: true 1686 | 1687 | /get-stream/6.0.1: 1688 | resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} 1689 | engines: {node: '>=10'} 1690 | dev: true 1691 | 1692 | /get-symbol-description/1.0.0: 1693 | resolution: {integrity: sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==} 1694 | engines: {node: '>= 0.4'} 1695 | dependencies: 1696 | call-bind: 1.0.2 1697 | get-intrinsic: 1.1.1 1698 | dev: true 1699 | 1700 | /glob-parent/6.0.2: 1701 | resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} 1702 | engines: {node: '>=10.13.0'} 1703 | dependencies: 1704 | is-glob: 4.0.3 1705 | dev: true 1706 | 1707 | /glob/7.2.0: 1708 | resolution: {integrity: sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==} 1709 | dependencies: 1710 | fs.realpath: 1.0.0 1711 | inflight: 1.0.6 1712 | inherits: 2.0.4 1713 | minimatch: 3.1.2 1714 | once: 1.4.0 1715 | path-is-absolute: 1.0.1 1716 | dev: true 1717 | 1718 | /globals/11.12.0: 1719 | resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} 1720 | engines: {node: '>=4'} 1721 | dev: true 1722 | 1723 | /globals/13.13.0: 1724 | resolution: {integrity: sha512-EQ7Q18AJlPwp3vUDL4mKA0KXrXyNIQyWon6T6XQiBQF0XHvRsiCSrWmmeATpUzdJN2HhWZU6Pdl0a9zdep5p6A==} 1725 | engines: {node: '>=8'} 1726 | dependencies: 1727 | type-fest: 0.20.2 1728 | dev: true 1729 | 1730 | /graceful-fs/4.2.10: 1731 | resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==} 1732 | dev: true 1733 | 1734 | /has-bigints/1.0.2: 1735 | resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} 1736 | dev: true 1737 | 1738 | /has-flag/3.0.0: 1739 | resolution: {integrity: sha1-tdRU3CGZriJWmfNGfloH87lVuv0=} 1740 | engines: {node: '>=4'} 1741 | dev: true 1742 | 1743 | /has-flag/4.0.0: 1744 | resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} 1745 | engines: {node: '>=8'} 1746 | dev: true 1747 | 1748 | /has-property-descriptors/1.0.0: 1749 | resolution: {integrity: sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==} 1750 | dependencies: 1751 | get-intrinsic: 1.1.1 1752 | dev: true 1753 | 1754 | /has-symbols/1.0.3: 1755 | resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} 1756 | engines: {node: '>= 0.4'} 1757 | dev: true 1758 | 1759 | /has-tostringtag/1.0.0: 1760 | resolution: {integrity: sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==} 1761 | engines: {node: '>= 0.4'} 1762 | dependencies: 1763 | has-symbols: 1.0.3 1764 | dev: true 1765 | 1766 | /has/1.0.3: 1767 | resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==} 1768 | engines: {node: '>= 0.4.0'} 1769 | dependencies: 1770 | function-bind: 1.1.1 1771 | dev: true 1772 | 1773 | /html-escaper/2.0.2: 1774 | resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} 1775 | dev: true 1776 | 1777 | /human-signals/2.1.0: 1778 | resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} 1779 | engines: {node: '>=10.17.0'} 1780 | dev: true 1781 | 1782 | /ignore/5.2.0: 1783 | resolution: {integrity: sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==} 1784 | engines: {node: '>= 4'} 1785 | dev: true 1786 | 1787 | /import-fresh/3.3.0: 1788 | resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} 1789 | engines: {node: '>=6'} 1790 | dependencies: 1791 | parent-module: 1.0.1 1792 | resolve-from: 4.0.0 1793 | dev: true 1794 | 1795 | /import-local/3.1.0: 1796 | resolution: {integrity: sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==} 1797 | engines: {node: '>=8'} 1798 | hasBin: true 1799 | dependencies: 1800 | pkg-dir: 4.2.0 1801 | resolve-cwd: 3.0.0 1802 | dev: true 1803 | 1804 | /imurmurhash/0.1.4: 1805 | resolution: {integrity: sha1-khi5srkoojixPcT7a21XbyMUU+o=} 1806 | engines: {node: '>=0.8.19'} 1807 | dev: true 1808 | 1809 | /inflight/1.0.6: 1810 | resolution: {integrity: sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=} 1811 | dependencies: 1812 | once: 1.4.0 1813 | wrappy: 1.0.2 1814 | dev: true 1815 | 1816 | /inherits/2.0.4: 1817 | resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} 1818 | dev: true 1819 | 1820 | /internal-slot/1.0.3: 1821 | resolution: {integrity: sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==} 1822 | engines: {node: '>= 0.4'} 1823 | dependencies: 1824 | get-intrinsic: 1.1.1 1825 | has: 1.0.3 1826 | side-channel: 1.0.4 1827 | dev: true 1828 | 1829 | /ipaddr.js/1.9.1: 1830 | resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==} 1831 | engines: {node: '>= 0.10'} 1832 | dev: true 1833 | 1834 | /is-arrayish/0.2.1: 1835 | resolution: {integrity: sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=} 1836 | dev: true 1837 | 1838 | /is-bigint/1.0.4: 1839 | resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==} 1840 | dependencies: 1841 | has-bigints: 1.0.2 1842 | dev: true 1843 | 1844 | /is-boolean-object/1.1.2: 1845 | resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} 1846 | engines: {node: '>= 0.4'} 1847 | dependencies: 1848 | call-bind: 1.0.2 1849 | has-tostringtag: 1.0.0 1850 | dev: true 1851 | 1852 | /is-callable/1.2.4: 1853 | resolution: {integrity: sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==} 1854 | engines: {node: '>= 0.4'} 1855 | dev: true 1856 | 1857 | /is-core-module/2.9.0: 1858 | resolution: {integrity: sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==} 1859 | dependencies: 1860 | has: 1.0.3 1861 | dev: true 1862 | 1863 | /is-date-object/1.0.5: 1864 | resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} 1865 | engines: {node: '>= 0.4'} 1866 | dependencies: 1867 | has-tostringtag: 1.0.0 1868 | dev: true 1869 | 1870 | /is-extglob/2.1.1: 1871 | resolution: {integrity: sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=} 1872 | engines: {node: '>=0.10.0'} 1873 | dev: true 1874 | 1875 | /is-fullwidth-code-point/3.0.0: 1876 | resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} 1877 | engines: {node: '>=8'} 1878 | dev: true 1879 | 1880 | /is-generator-fn/2.1.0: 1881 | resolution: {integrity: sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==} 1882 | engines: {node: '>=6'} 1883 | dev: true 1884 | 1885 | /is-glob/4.0.3: 1886 | resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} 1887 | engines: {node: '>=0.10.0'} 1888 | dependencies: 1889 | is-extglob: 2.1.1 1890 | dev: true 1891 | 1892 | /is-negative-zero/2.0.2: 1893 | resolution: {integrity: sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==} 1894 | engines: {node: '>= 0.4'} 1895 | dev: true 1896 | 1897 | /is-number-object/1.0.7: 1898 | resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==} 1899 | engines: {node: '>= 0.4'} 1900 | dependencies: 1901 | has-tostringtag: 1.0.0 1902 | dev: true 1903 | 1904 | /is-number/7.0.0: 1905 | resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} 1906 | engines: {node: '>=0.12.0'} 1907 | dev: true 1908 | 1909 | /is-regex/1.1.4: 1910 | resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} 1911 | engines: {node: '>= 0.4'} 1912 | dependencies: 1913 | call-bind: 1.0.2 1914 | has-tostringtag: 1.0.0 1915 | dev: true 1916 | 1917 | /is-shared-array-buffer/1.0.2: 1918 | resolution: {integrity: sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==} 1919 | dependencies: 1920 | call-bind: 1.0.2 1921 | dev: true 1922 | 1923 | /is-stream/2.0.1: 1924 | resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} 1925 | engines: {node: '>=8'} 1926 | dev: true 1927 | 1928 | /is-string/1.0.7: 1929 | resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} 1930 | engines: {node: '>= 0.4'} 1931 | dependencies: 1932 | has-tostringtag: 1.0.0 1933 | dev: true 1934 | 1935 | /is-symbol/1.0.4: 1936 | resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==} 1937 | engines: {node: '>= 0.4'} 1938 | dependencies: 1939 | has-symbols: 1.0.3 1940 | dev: true 1941 | 1942 | /is-weakref/1.0.2: 1943 | resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} 1944 | dependencies: 1945 | call-bind: 1.0.2 1946 | dev: true 1947 | 1948 | /isexe/2.0.0: 1949 | resolution: {integrity: sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=} 1950 | dev: true 1951 | 1952 | /istanbul-lib-coverage/3.2.0: 1953 | resolution: {integrity: sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==} 1954 | engines: {node: '>=8'} 1955 | dev: true 1956 | 1957 | /istanbul-lib-instrument/5.2.0: 1958 | resolution: {integrity: sha512-6Lthe1hqXHBNsqvgDzGO6l03XNeu3CrG4RqQ1KM9+l5+jNGpEJfIELx1NS3SEHmJQA8np/u+E4EPRKRiu6m19A==} 1959 | engines: {node: '>=8'} 1960 | dependencies: 1961 | '@babel/core': 7.17.10 1962 | '@babel/parser': 7.17.10 1963 | '@istanbuljs/schema': 0.1.3 1964 | istanbul-lib-coverage: 3.2.0 1965 | semver: 6.3.0 1966 | transitivePeerDependencies: 1967 | - supports-color 1968 | dev: true 1969 | 1970 | /istanbul-lib-report/3.0.0: 1971 | resolution: {integrity: sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==} 1972 | engines: {node: '>=8'} 1973 | dependencies: 1974 | istanbul-lib-coverage: 3.2.0 1975 | make-dir: 3.1.0 1976 | supports-color: 7.2.0 1977 | dev: true 1978 | 1979 | /istanbul-lib-source-maps/4.0.1: 1980 | resolution: {integrity: sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==} 1981 | engines: {node: '>=10'} 1982 | dependencies: 1983 | debug: 4.3.4 1984 | istanbul-lib-coverage: 3.2.0 1985 | source-map: 0.6.1 1986 | transitivePeerDependencies: 1987 | - supports-color 1988 | dev: true 1989 | 1990 | /istanbul-reports/3.1.4: 1991 | resolution: {integrity: sha512-r1/DshN4KSE7xWEknZLLLLDn5CJybV3nw01VTkp6D5jzLuELlcbudfj/eSQFvrKsJuTVCGnePO7ho82Nw9zzfw==} 1992 | engines: {node: '>=8'} 1993 | dependencies: 1994 | html-escaper: 2.0.2 1995 | istanbul-lib-report: 3.0.0 1996 | dev: true 1997 | 1998 | /jest-changed-files/28.0.2: 1999 | resolution: {integrity: sha512-QX9u+5I2s54ZnGoMEjiM2WeBvJR2J7w/8ZUmH2um/WLAuGAYFQcsVXY9+1YL6k0H/AGUdH8pXUAv6erDqEsvIA==} 2000 | engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} 2001 | dependencies: 2002 | execa: 5.1.1 2003 | throat: 6.0.1 2004 | dev: true 2005 | 2006 | /jest-circus/28.0.3: 2007 | resolution: {integrity: sha512-HJ3rUCm3A3faSy7KVH5MFCncqJLtrjEFkTPn9UIcs4Kq77+TXqHsOaI+/k73aHe6DJQigLUXq9rCYj3MYFlbIw==} 2008 | engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} 2009 | dependencies: 2010 | '@jest/environment': 28.0.2 2011 | '@jest/expect': 28.0.3 2012 | '@jest/test-result': 28.0.2 2013 | '@jest/types': 28.0.2 2014 | '@types/node': 17.0.30 2015 | chalk: 4.1.2 2016 | co: 4.6.0 2017 | dedent: 0.7.0 2018 | is-generator-fn: 2.1.0 2019 | jest-each: 28.0.2 2020 | jest-matcher-utils: 28.0.2 2021 | jest-message-util: 28.0.2 2022 | jest-runtime: 28.0.3 2023 | jest-snapshot: 28.0.3 2024 | jest-util: 28.0.2 2025 | pretty-format: 28.0.2 2026 | slash: 3.0.0 2027 | stack-utils: 2.0.5 2028 | throat: 6.0.1 2029 | transitivePeerDependencies: 2030 | - supports-color 2031 | dev: true 2032 | 2033 | /jest-cli/28.0.3: 2034 | resolution: {integrity: sha512-NCPTEONCnhYGo1qzPP4OOcGF04YasM5GZSwQLI1HtEluxa3ct4U65IbZs6DSRt8XN1Rq0jhXwv02m5lHB28Uyg==} 2035 | engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} 2036 | hasBin: true 2037 | peerDependencies: 2038 | node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 2039 | peerDependenciesMeta: 2040 | node-notifier: 2041 | optional: true 2042 | dependencies: 2043 | '@jest/core': 28.0.3 2044 | '@jest/test-result': 28.0.2 2045 | '@jest/types': 28.0.2 2046 | chalk: 4.1.2 2047 | exit: 0.1.2 2048 | graceful-fs: 4.2.10 2049 | import-local: 3.1.0 2050 | jest-config: 28.0.3 2051 | jest-util: 28.0.2 2052 | jest-validate: 28.0.2 2053 | prompts: 2.4.2 2054 | yargs: 17.4.1 2055 | transitivePeerDependencies: 2056 | - '@types/node' 2057 | - supports-color 2058 | - ts-node 2059 | dev: true 2060 | 2061 | /jest-config/28.0.3: 2062 | resolution: {integrity: sha512-3gWOEHwGpNhyYOk9vnUMv94x15QcdjACm7A3lERaluwnyD6d1WZWe9RFCShgIXVOHzRfG1hWxsI2U0gKKSGgDQ==} 2063 | engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} 2064 | peerDependencies: 2065 | '@types/node': '*' 2066 | ts-node: '>=9.0.0' 2067 | peerDependenciesMeta: 2068 | '@types/node': 2069 | optional: true 2070 | ts-node: 2071 | optional: true 2072 | dependencies: 2073 | '@babel/core': 7.17.10 2074 | '@jest/test-sequencer': 28.0.2 2075 | '@jest/types': 28.0.2 2076 | babel-jest: 28.0.3_@babel+core@7.17.10 2077 | chalk: 4.1.2 2078 | ci-info: 3.3.0 2079 | deepmerge: 4.2.2 2080 | glob: 7.2.0 2081 | graceful-fs: 4.2.10 2082 | jest-circus: 28.0.3 2083 | jest-environment-node: 28.0.2 2084 | jest-get-type: 28.0.2 2085 | jest-regex-util: 28.0.2 2086 | jest-resolve: 28.0.3 2087 | jest-runner: 28.0.3 2088 | jest-util: 28.0.2 2089 | jest-validate: 28.0.2 2090 | micromatch: 4.0.5 2091 | parse-json: 5.2.0 2092 | pretty-format: 28.0.2 2093 | slash: 3.0.0 2094 | strip-json-comments: 3.1.1 2095 | transitivePeerDependencies: 2096 | - supports-color 2097 | dev: true 2098 | 2099 | /jest-config/28.0.3_@types+node@17.0.30: 2100 | resolution: {integrity: sha512-3gWOEHwGpNhyYOk9vnUMv94x15QcdjACm7A3lERaluwnyD6d1WZWe9RFCShgIXVOHzRfG1hWxsI2U0gKKSGgDQ==} 2101 | engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} 2102 | peerDependencies: 2103 | '@types/node': '*' 2104 | ts-node: '>=9.0.0' 2105 | peerDependenciesMeta: 2106 | '@types/node': 2107 | optional: true 2108 | ts-node: 2109 | optional: true 2110 | dependencies: 2111 | '@babel/core': 7.17.10 2112 | '@jest/test-sequencer': 28.0.2 2113 | '@jest/types': 28.0.2 2114 | '@types/node': 17.0.30 2115 | babel-jest: 28.0.3_@babel+core@7.17.10 2116 | chalk: 4.1.2 2117 | ci-info: 3.3.0 2118 | deepmerge: 4.2.2 2119 | glob: 7.2.0 2120 | graceful-fs: 4.2.10 2121 | jest-circus: 28.0.3 2122 | jest-environment-node: 28.0.2 2123 | jest-get-type: 28.0.2 2124 | jest-regex-util: 28.0.2 2125 | jest-resolve: 28.0.3 2126 | jest-runner: 28.0.3 2127 | jest-util: 28.0.2 2128 | jest-validate: 28.0.2 2129 | micromatch: 4.0.5 2130 | parse-json: 5.2.0 2131 | pretty-format: 28.0.2 2132 | slash: 3.0.0 2133 | strip-json-comments: 3.1.1 2134 | transitivePeerDependencies: 2135 | - supports-color 2136 | dev: true 2137 | 2138 | /jest-diff/28.0.2: 2139 | resolution: {integrity: sha512-33Rnf821Y54OAloav0PGNWHlbtEorXpjwchnToyyWbec10X74FOW7hGfvrXLGz7xOe2dz0uo9JVFAHHj/2B5pg==} 2140 | engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} 2141 | dependencies: 2142 | chalk: 4.1.2 2143 | diff-sequences: 28.0.2 2144 | jest-get-type: 28.0.2 2145 | pretty-format: 28.0.2 2146 | dev: true 2147 | 2148 | /jest-docblock/28.0.2: 2149 | resolution: {integrity: sha512-FH10WWw5NxLoeSdQlJwu+MTiv60aXV/t8KEwIRGEv74WARE1cXIqh1vGdy2CraHuWOOrnzTWj/azQKqW4fO7xg==} 2150 | engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} 2151 | dependencies: 2152 | detect-newline: 3.1.0 2153 | dev: true 2154 | 2155 | /jest-each/28.0.2: 2156 | resolution: {integrity: sha512-/W5Wc0b+ipR36kDaLngdVEJ/5UYPOITK7rW0djTlCCQdMuWpCFJweMW4TzAoJ6GiRrljPL8FwiyOSoSHKrda2w==} 2157 | engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} 2158 | dependencies: 2159 | '@jest/types': 28.0.2 2160 | chalk: 4.1.2 2161 | jest-get-type: 28.0.2 2162 | jest-util: 28.0.2 2163 | pretty-format: 28.0.2 2164 | dev: true 2165 | 2166 | /jest-environment-node/28.0.2: 2167 | resolution: {integrity: sha512-o9u5UHZ+NCuIoa44KEF0Behhsz/p1wMm0WumsZfWR1k4IVoWSt3aN0BavSC5dd26VxSGQvkrCnJxxOzhhUEG3Q==} 2168 | engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} 2169 | dependencies: 2170 | '@jest/environment': 28.0.2 2171 | '@jest/fake-timers': 28.0.2 2172 | '@jest/types': 28.0.2 2173 | '@types/node': 17.0.30 2174 | jest-mock: 28.0.2 2175 | jest-util: 28.0.2 2176 | dev: true 2177 | 2178 | /jest-get-type/28.0.2: 2179 | resolution: {integrity: sha512-ioj2w9/DxSYHfOm5lJKCdcAmPJzQXmbM/Url3rhlghrPvT3tt+7a/+oXc9azkKmLvoiXjtV83bEWqi+vs5nlPA==} 2180 | engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} 2181 | dev: true 2182 | 2183 | /jest-haste-map/28.0.2: 2184 | resolution: {integrity: sha512-EokdL7l5uk4TqWGawwrIt8w3tZNcbeiRxmKGEURf42pl+/rWJy3sCJlon5HBhJXZTW978jk6600BLQOI7i25Ig==} 2185 | engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} 2186 | dependencies: 2187 | '@jest/types': 28.0.2 2188 | '@types/graceful-fs': 4.1.5 2189 | '@types/node': 17.0.30 2190 | anymatch: 3.1.2 2191 | fb-watchman: 2.0.1 2192 | graceful-fs: 4.2.10 2193 | jest-regex-util: 28.0.2 2194 | jest-util: 28.0.2 2195 | jest-worker: 28.0.2 2196 | micromatch: 4.0.5 2197 | walker: 1.0.8 2198 | optionalDependencies: 2199 | fsevents: 2.3.2 2200 | dev: true 2201 | 2202 | /jest-leak-detector/28.0.2: 2203 | resolution: {integrity: sha512-UGaSPYtxKXl/YKacq6juRAKmMp1z2os8NaU8PSC+xvNikmu3wF6QFrXrihMM4hXeMr9HuNotBrQZHmzDY8KIBQ==} 2204 | engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} 2205 | dependencies: 2206 | jest-get-type: 28.0.2 2207 | pretty-format: 28.0.2 2208 | dev: true 2209 | 2210 | /jest-matcher-utils/28.0.2: 2211 | resolution: {integrity: sha512-SxtTiI2qLJHFtOz/bySStCnwCvISAuxQ/grS+74dfTy5AuJw3Sgj9TVUvskcnImTfpzLoMCDJseRaeRrVYbAOA==} 2212 | engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} 2213 | dependencies: 2214 | chalk: 4.1.2 2215 | jest-diff: 28.0.2 2216 | jest-get-type: 28.0.2 2217 | pretty-format: 28.0.2 2218 | dev: true 2219 | 2220 | /jest-message-util/28.0.2: 2221 | resolution: {integrity: sha512-knK7XyojvwYh1XiF2wmVdskgM/uN11KsjcEWWHfnMZNEdwXCrqB4sCBO94F4cfiAwCS8WFV6CDixDwPlMh/wdA==} 2222 | engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} 2223 | dependencies: 2224 | '@babel/code-frame': 7.16.7 2225 | '@jest/types': 28.0.2 2226 | '@types/stack-utils': 2.0.1 2227 | chalk: 4.1.2 2228 | graceful-fs: 4.2.10 2229 | micromatch: 4.0.5 2230 | pretty-format: 28.0.2 2231 | slash: 3.0.0 2232 | stack-utils: 2.0.5 2233 | dev: true 2234 | 2235 | /jest-mock/28.0.2: 2236 | resolution: {integrity: sha512-vfnJ4zXRB0i24jOTGtQJyl26JKsgBKtqRlCnsrORZbG06FToSSn33h2x/bmE8XxqxkLWdZBRo+/65l8Vi3nD+g==} 2237 | engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} 2238 | dependencies: 2239 | '@jest/types': 28.0.2 2240 | '@types/node': 17.0.30 2241 | dev: true 2242 | 2243 | /jest-pnp-resolver/1.2.2_jest-resolve@28.0.3: 2244 | resolution: {integrity: sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==} 2245 | engines: {node: '>=6'} 2246 | peerDependencies: 2247 | jest-resolve: '*' 2248 | peerDependenciesMeta: 2249 | jest-resolve: 2250 | optional: true 2251 | dependencies: 2252 | jest-resolve: 28.0.3 2253 | dev: true 2254 | 2255 | /jest-regex-util/28.0.2: 2256 | resolution: {integrity: sha512-4s0IgyNIy0y9FK+cjoVYoxamT7Zeo7MhzqRGx7YDYmaQn1wucY9rotiGkBzzcMXTtjrCAP/f7f+E0F7+fxPNdw==} 2257 | engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} 2258 | dev: true 2259 | 2260 | /jest-resolve-dependencies/28.0.3: 2261 | resolution: {integrity: sha512-lCgHMm0/5p0qHemrOzm7kI6JDei28xJwIf7XOEcv1HeAVHnsON8B8jO/woqlU+/GcOXb58ymieYqhk3zjGWnvQ==} 2262 | engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} 2263 | dependencies: 2264 | jest-regex-util: 28.0.2 2265 | jest-snapshot: 28.0.3 2266 | transitivePeerDependencies: 2267 | - supports-color 2268 | dev: true 2269 | 2270 | /jest-resolve/28.0.3: 2271 | resolution: {integrity: sha512-lfgjd9JhEjpjIN3HLUfdysdK+A7ePQoYmd7WL9DUEWqdnngb1rF56eee6iDXJxl/3eSolpP43VD7VrhjL3NsoQ==} 2272 | engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} 2273 | dependencies: 2274 | chalk: 4.1.2 2275 | graceful-fs: 4.2.10 2276 | jest-haste-map: 28.0.2 2277 | jest-pnp-resolver: 1.2.2_jest-resolve@28.0.3 2278 | jest-util: 28.0.2 2279 | jest-validate: 28.0.2 2280 | resolve: 1.22.0 2281 | resolve.exports: 1.1.0 2282 | slash: 3.0.0 2283 | dev: true 2284 | 2285 | /jest-runner/28.0.3: 2286 | resolution: {integrity: sha512-4OsHMjBLtYUWCENucAQ4Za0jGfEbOFi/Fusv6dzUuaweqx8apb4+5p2LR2yvgF4StFulmxyC238tGLftfu+zBA==} 2287 | engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} 2288 | dependencies: 2289 | '@jest/console': 28.0.2 2290 | '@jest/environment': 28.0.2 2291 | '@jest/test-result': 28.0.2 2292 | '@jest/transform': 28.0.3 2293 | '@jest/types': 28.0.2 2294 | '@types/node': 17.0.30 2295 | chalk: 4.1.2 2296 | emittery: 0.10.2 2297 | graceful-fs: 4.2.10 2298 | jest-docblock: 28.0.2 2299 | jest-environment-node: 28.0.2 2300 | jest-haste-map: 28.0.2 2301 | jest-leak-detector: 28.0.2 2302 | jest-message-util: 28.0.2 2303 | jest-resolve: 28.0.3 2304 | jest-runtime: 28.0.3 2305 | jest-util: 28.0.2 2306 | jest-watcher: 28.0.2 2307 | jest-worker: 28.0.2 2308 | source-map-support: 0.5.13 2309 | throat: 6.0.1 2310 | transitivePeerDependencies: 2311 | - supports-color 2312 | dev: true 2313 | 2314 | /jest-runtime/28.0.3: 2315 | resolution: {integrity: sha512-7FtPUmvbZEHLOdjsF6dyHg5Pe4E0DU+f3Vvv8BPzVR7mQA6nFR4clQYLAPyJGnsUvN8WRWn+b5a5SVwnj1WaGg==} 2316 | engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} 2317 | dependencies: 2318 | '@jest/environment': 28.0.2 2319 | '@jest/fake-timers': 28.0.2 2320 | '@jest/globals': 28.0.3 2321 | '@jest/source-map': 28.0.2 2322 | '@jest/test-result': 28.0.2 2323 | '@jest/transform': 28.0.3 2324 | '@jest/types': 28.0.2 2325 | chalk: 4.1.2 2326 | cjs-module-lexer: 1.2.2 2327 | collect-v8-coverage: 1.0.1 2328 | execa: 5.1.1 2329 | glob: 7.2.0 2330 | graceful-fs: 4.2.10 2331 | jest-haste-map: 28.0.2 2332 | jest-message-util: 28.0.2 2333 | jest-mock: 28.0.2 2334 | jest-regex-util: 28.0.2 2335 | jest-resolve: 28.0.3 2336 | jest-snapshot: 28.0.3 2337 | jest-util: 28.0.2 2338 | slash: 3.0.0 2339 | strip-bom: 4.0.0 2340 | transitivePeerDependencies: 2341 | - supports-color 2342 | dev: true 2343 | 2344 | /jest-snapshot/28.0.3: 2345 | resolution: {integrity: sha512-nVzAAIlAbrMuvVUrS1YxmAeo1TfSsDDU+K5wv/Ow56MBp+L+Y71ksAbwRp3kGCgZAz4oOXcAMPAwtT9Yh1hlQQ==} 2346 | engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} 2347 | dependencies: 2348 | '@babel/core': 7.17.10 2349 | '@babel/generator': 7.17.10 2350 | '@babel/plugin-syntax-typescript': 7.17.10_@babel+core@7.17.10 2351 | '@babel/traverse': 7.17.10 2352 | '@babel/types': 7.17.10 2353 | '@jest/expect-utils': 28.0.2 2354 | '@jest/transform': 28.0.3 2355 | '@jest/types': 28.0.2 2356 | '@types/babel__traverse': 7.17.1 2357 | '@types/prettier': 2.6.0 2358 | babel-preset-current-node-syntax: 1.0.1_@babel+core@7.17.10 2359 | chalk: 4.1.2 2360 | expect: 28.0.2 2361 | graceful-fs: 4.2.10 2362 | jest-diff: 28.0.2 2363 | jest-get-type: 28.0.2 2364 | jest-haste-map: 28.0.2 2365 | jest-matcher-utils: 28.0.2 2366 | jest-message-util: 28.0.2 2367 | jest-util: 28.0.2 2368 | natural-compare: 1.4.0 2369 | pretty-format: 28.0.2 2370 | semver: 7.3.7 2371 | transitivePeerDependencies: 2372 | - supports-color 2373 | dev: true 2374 | 2375 | /jest-util/28.0.2: 2376 | resolution: {integrity: sha512-EVdpIRCC8lzqhp9A0u0aAKlsFIzufK6xKxNK7awsnebTdOP4hpyQW5o6Ox2qPl8gbeUKYF+POLyItaND53kpGA==} 2377 | engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} 2378 | dependencies: 2379 | '@jest/types': 28.0.2 2380 | '@types/node': 17.0.30 2381 | chalk: 4.1.2 2382 | ci-info: 3.3.0 2383 | graceful-fs: 4.2.10 2384 | picomatch: 2.3.1 2385 | dev: true 2386 | 2387 | /jest-validate/28.0.2: 2388 | resolution: {integrity: sha512-nr0UOvCTtxP0YPdsk01Gk7e7c0xIiEe2nncAe3pj0wBfUvAykTVrMrdeASlAJnlEQCBuwN/GF4hKoCzbkGNCNw==} 2389 | engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} 2390 | dependencies: 2391 | '@jest/types': 28.0.2 2392 | camelcase: 6.3.0 2393 | chalk: 4.1.2 2394 | jest-get-type: 28.0.2 2395 | leven: 3.1.0 2396 | pretty-format: 28.0.2 2397 | dev: true 2398 | 2399 | /jest-watcher/28.0.2: 2400 | resolution: {integrity: sha512-uIVJLpQ/5VTGQWBiBatHsi7jrCqHjHl0e0dFHMWzwuIfUbdW/muk0DtSr0fteY2T7QTFylv+7a5Rm8sBKrE12Q==} 2401 | engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} 2402 | dependencies: 2403 | '@jest/test-result': 28.0.2 2404 | '@jest/types': 28.0.2 2405 | '@types/node': 17.0.30 2406 | ansi-escapes: 4.3.2 2407 | chalk: 4.1.2 2408 | emittery: 0.10.2 2409 | jest-util: 28.0.2 2410 | string-length: 4.0.2 2411 | dev: true 2412 | 2413 | /jest-worker/28.0.2: 2414 | resolution: {integrity: sha512-pijNxfjxT0tGAx+8+OzZ+eayVPCwy/rsZFhebmC0F4YnXu1EHPEPxg7utL3m5uX3EaFH1/jwDxGa1EbjJCST2g==} 2415 | engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} 2416 | dependencies: 2417 | '@types/node': 17.0.30 2418 | merge-stream: 2.0.0 2419 | supports-color: 8.1.1 2420 | dev: true 2421 | 2422 | /jest/28.0.3: 2423 | resolution: {integrity: sha512-uS+T5J3w5xyzd1KSJCGKhCo8WTJXbNl86f5SW11wgssbandJOVLRKKUxmhdFfmKxhPeksl1hHZ0HaA8VBzp7xA==} 2424 | engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} 2425 | hasBin: true 2426 | peerDependencies: 2427 | node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 2428 | peerDependenciesMeta: 2429 | node-notifier: 2430 | optional: true 2431 | dependencies: 2432 | '@jest/core': 28.0.3 2433 | import-local: 3.1.0 2434 | jest-cli: 28.0.3 2435 | transitivePeerDependencies: 2436 | - '@types/node' 2437 | - supports-color 2438 | - ts-node 2439 | dev: true 2440 | 2441 | /js-tokens/4.0.0: 2442 | resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} 2443 | dev: true 2444 | 2445 | /js-yaml/3.14.1: 2446 | resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} 2447 | hasBin: true 2448 | dependencies: 2449 | argparse: 1.0.10 2450 | esprima: 4.0.1 2451 | dev: true 2452 | 2453 | /js-yaml/4.1.0: 2454 | resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} 2455 | hasBin: true 2456 | dependencies: 2457 | argparse: 2.0.1 2458 | dev: true 2459 | 2460 | /jsesc/2.5.2: 2461 | resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} 2462 | engines: {node: '>=4'} 2463 | hasBin: true 2464 | dev: true 2465 | 2466 | /json-parse-even-better-errors/2.3.1: 2467 | resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} 2468 | dev: true 2469 | 2470 | /json-schema-traverse/0.4.1: 2471 | resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} 2472 | dev: true 2473 | 2474 | /json-schema-traverse/1.0.0: 2475 | resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} 2476 | dev: true 2477 | 2478 | /json-stable-stringify-without-jsonify/1.0.1: 2479 | resolution: {integrity: sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=} 2480 | dev: true 2481 | 2482 | /json5/1.0.1: 2483 | resolution: {integrity: sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==} 2484 | hasBin: true 2485 | dependencies: 2486 | minimist: 1.2.6 2487 | dev: true 2488 | 2489 | /json5/2.2.1: 2490 | resolution: {integrity: sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==} 2491 | engines: {node: '>=6'} 2492 | hasBin: true 2493 | dev: true 2494 | 2495 | /kleur/3.0.3: 2496 | resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} 2497 | engines: {node: '>=6'} 2498 | dev: true 2499 | 2500 | /leven/3.1.0: 2501 | resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==} 2502 | engines: {node: '>=6'} 2503 | dev: true 2504 | 2505 | /levn/0.4.1: 2506 | resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} 2507 | engines: {node: '>= 0.8.0'} 2508 | dependencies: 2509 | prelude-ls: 1.2.1 2510 | type-check: 0.4.0 2511 | dev: true 2512 | 2513 | /light-my-request/4.9.0: 2514 | resolution: {integrity: sha512-b1U3z4OVPoO/KanT14NRkXMr9rRtXAiq0ORqNrqhDyb5bGkZjAdEc6GRN1GWCfgaLBG+aq73qkCLDNeB3c2sLw==} 2515 | dependencies: 2516 | ajv: 8.11.0 2517 | cookie: 0.4.2 2518 | process-warning: 1.0.0 2519 | set-cookie-parser: 2.4.8 2520 | dev: true 2521 | 2522 | /lines-and-columns/1.2.4: 2523 | resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} 2524 | dev: true 2525 | 2526 | /locate-path/2.0.0: 2527 | resolution: {integrity: sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=} 2528 | engines: {node: '>=4'} 2529 | dependencies: 2530 | p-locate: 2.0.0 2531 | path-exists: 3.0.0 2532 | dev: true 2533 | 2534 | /locate-path/5.0.0: 2535 | resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} 2536 | engines: {node: '>=8'} 2537 | dependencies: 2538 | p-locate: 4.1.0 2539 | dev: true 2540 | 2541 | /lodash.merge/4.6.2: 2542 | resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} 2543 | dev: true 2544 | 2545 | /lru-cache/6.0.0: 2546 | resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} 2547 | engines: {node: '>=10'} 2548 | dependencies: 2549 | yallist: 4.0.0 2550 | dev: true 2551 | 2552 | /make-dir/3.1.0: 2553 | resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==} 2554 | engines: {node: '>=8'} 2555 | dependencies: 2556 | semver: 6.3.0 2557 | dev: true 2558 | 2559 | /makeerror/1.0.12: 2560 | resolution: {integrity: sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==} 2561 | dependencies: 2562 | tmpl: 1.0.5 2563 | dev: true 2564 | 2565 | /merge-stream/2.0.0: 2566 | resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} 2567 | dev: true 2568 | 2569 | /micromatch/4.0.5: 2570 | resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} 2571 | engines: {node: '>=8.6'} 2572 | dependencies: 2573 | braces: 3.0.2 2574 | picomatch: 2.3.1 2575 | dev: true 2576 | 2577 | /mimic-fn/2.1.0: 2578 | resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} 2579 | engines: {node: '>=6'} 2580 | dev: true 2581 | 2582 | /minimatch/3.1.2: 2583 | resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} 2584 | dependencies: 2585 | brace-expansion: 1.1.11 2586 | dev: true 2587 | 2588 | /minimist/1.2.6: 2589 | resolution: {integrity: sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==} 2590 | dev: true 2591 | 2592 | /ms/2.0.0: 2593 | resolution: {integrity: sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=} 2594 | dev: true 2595 | 2596 | /ms/2.1.2: 2597 | resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} 2598 | dev: true 2599 | 2600 | /ms/2.1.3: 2601 | resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} 2602 | dev: true 2603 | 2604 | /natural-compare/1.4.0: 2605 | resolution: {integrity: sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=} 2606 | dev: true 2607 | 2608 | /node-int64/0.4.0: 2609 | resolution: {integrity: sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=} 2610 | dev: true 2611 | 2612 | /node-releases/2.0.4: 2613 | resolution: {integrity: sha512-gbMzqQtTtDz/00jQzZ21PQzdI9PyLYqUSvD0p3naOhX4odFji0ZxYdnVwPTxmSwkmxhcFImpozceidSG+AgoPQ==} 2614 | dev: true 2615 | 2616 | /normalize-path/3.0.0: 2617 | resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} 2618 | engines: {node: '>=0.10.0'} 2619 | dev: true 2620 | 2621 | /npm-run-path/4.0.1: 2622 | resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} 2623 | engines: {node: '>=8'} 2624 | dependencies: 2625 | path-key: 3.1.1 2626 | dev: true 2627 | 2628 | /object-inspect/1.12.0: 2629 | resolution: {integrity: sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g==} 2630 | dev: true 2631 | 2632 | /object-keys/1.1.1: 2633 | resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} 2634 | engines: {node: '>= 0.4'} 2635 | dev: true 2636 | 2637 | /object.assign/4.1.2: 2638 | resolution: {integrity: sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==} 2639 | engines: {node: '>= 0.4'} 2640 | dependencies: 2641 | call-bind: 1.0.2 2642 | define-properties: 1.1.4 2643 | has-symbols: 1.0.3 2644 | object-keys: 1.1.1 2645 | dev: true 2646 | 2647 | /object.values/1.1.5: 2648 | resolution: {integrity: sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg==} 2649 | engines: {node: '>= 0.4'} 2650 | dependencies: 2651 | call-bind: 1.0.2 2652 | define-properties: 1.1.4 2653 | es-abstract: 1.19.5 2654 | dev: true 2655 | 2656 | /once/1.4.0: 2657 | resolution: {integrity: sha1-WDsap3WWHUsROsF9nFC6753Xa9E=} 2658 | dependencies: 2659 | wrappy: 1.0.2 2660 | dev: true 2661 | 2662 | /onetime/5.1.2: 2663 | resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} 2664 | engines: {node: '>=6'} 2665 | dependencies: 2666 | mimic-fn: 2.1.0 2667 | dev: true 2668 | 2669 | /optionator/0.9.1: 2670 | resolution: {integrity: sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==} 2671 | engines: {node: '>= 0.8.0'} 2672 | dependencies: 2673 | deep-is: 0.1.4 2674 | fast-levenshtein: 2.0.6 2675 | levn: 0.4.1 2676 | prelude-ls: 1.2.1 2677 | type-check: 0.4.0 2678 | word-wrap: 1.2.3 2679 | dev: true 2680 | 2681 | /p-limit/1.3.0: 2682 | resolution: {integrity: sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==} 2683 | engines: {node: '>=4'} 2684 | dependencies: 2685 | p-try: 1.0.0 2686 | dev: true 2687 | 2688 | /p-limit/2.3.0: 2689 | resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} 2690 | engines: {node: '>=6'} 2691 | dependencies: 2692 | p-try: 2.2.0 2693 | dev: true 2694 | 2695 | /p-locate/2.0.0: 2696 | resolution: {integrity: sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=} 2697 | engines: {node: '>=4'} 2698 | dependencies: 2699 | p-limit: 1.3.0 2700 | dev: true 2701 | 2702 | /p-locate/4.1.0: 2703 | resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} 2704 | engines: {node: '>=8'} 2705 | dependencies: 2706 | p-limit: 2.3.0 2707 | dev: true 2708 | 2709 | /p-try/1.0.0: 2710 | resolution: {integrity: sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=} 2711 | engines: {node: '>=4'} 2712 | dev: true 2713 | 2714 | /p-try/2.2.0: 2715 | resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} 2716 | engines: {node: '>=6'} 2717 | dev: true 2718 | 2719 | /parent-module/1.0.1: 2720 | resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} 2721 | engines: {node: '>=6'} 2722 | dependencies: 2723 | callsites: 3.1.0 2724 | dev: true 2725 | 2726 | /parse-json/5.2.0: 2727 | resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} 2728 | engines: {node: '>=8'} 2729 | dependencies: 2730 | '@babel/code-frame': 7.16.7 2731 | error-ex: 1.3.2 2732 | json-parse-even-better-errors: 2.3.1 2733 | lines-and-columns: 1.2.4 2734 | dev: true 2735 | 2736 | /path-exists/3.0.0: 2737 | resolution: {integrity: sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=} 2738 | engines: {node: '>=4'} 2739 | dev: true 2740 | 2741 | /path-exists/4.0.0: 2742 | resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} 2743 | engines: {node: '>=8'} 2744 | dev: true 2745 | 2746 | /path-is-absolute/1.0.1: 2747 | resolution: {integrity: sha1-F0uSaHNVNP+8es5r9TpanhtcX18=} 2748 | engines: {node: '>=0.10.0'} 2749 | dev: true 2750 | 2751 | /path-key/3.1.1: 2752 | resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} 2753 | engines: {node: '>=8'} 2754 | dev: true 2755 | 2756 | /path-parse/1.0.7: 2757 | resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} 2758 | dev: true 2759 | 2760 | /picocolors/1.0.0: 2761 | resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} 2762 | dev: true 2763 | 2764 | /picomatch/2.3.1: 2765 | resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} 2766 | engines: {node: '>=8.6'} 2767 | dev: true 2768 | 2769 | /pino-std-serializers/3.2.0: 2770 | resolution: {integrity: sha512-EqX4pwDPrt3MuOAAUBMU0Tk5kR/YcCM5fNPEzgCO2zJ5HfX0vbiH9HbJglnyeQsN96Kznae6MWD47pZB5avTrg==} 2771 | dev: true 2772 | 2773 | /pino/6.14.0: 2774 | resolution: {integrity: sha512-iuhEDel3Z3hF9Jfe44DPXR8l07bhjuFY3GMHIXbjnY9XcafbyDDwl2sN2vw2GjMPf5Nkoe+OFao7ffn9SXaKDg==} 2775 | hasBin: true 2776 | dependencies: 2777 | fast-redact: 3.1.1 2778 | fast-safe-stringify: 2.1.1 2779 | flatstr: 1.0.12 2780 | pino-std-serializers: 3.2.0 2781 | process-warning: 1.0.0 2782 | quick-format-unescaped: 4.0.4 2783 | sonic-boom: 1.4.1 2784 | dev: true 2785 | 2786 | /pirates/4.0.5: 2787 | resolution: {integrity: sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==} 2788 | engines: {node: '>= 6'} 2789 | dev: true 2790 | 2791 | /pkg-dir/4.2.0: 2792 | resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} 2793 | engines: {node: '>=8'} 2794 | dependencies: 2795 | find-up: 4.1.0 2796 | dev: true 2797 | 2798 | /prelude-ls/1.2.1: 2799 | resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} 2800 | engines: {node: '>= 0.8.0'} 2801 | dev: true 2802 | 2803 | /pretty-format/28.0.2: 2804 | resolution: {integrity: sha512-UmGZ1IERwS3yY35LDMTaBUYI1w4udZDdJGGT/DqQeKG9ZLDn7/K2Jf/JtYSRiHCCKMHvUA+zsEGSmHdpaVp1yw==} 2805 | engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} 2806 | dependencies: 2807 | '@jest/schemas': 28.0.2 2808 | ansi-regex: 5.0.1 2809 | ansi-styles: 5.2.0 2810 | react-is: 18.1.0 2811 | dev: true 2812 | 2813 | /process-warning/1.0.0: 2814 | resolution: {integrity: sha512-du4wfLyj4yCZq1VupnVSZmRsPJsNuxoDQFdCFHLaYiEbFBD7QE0a+I4D7hOxrVnh78QE/YipFAj9lXHiXocV+Q==} 2815 | dev: true 2816 | 2817 | /prompts/2.4.2: 2818 | resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} 2819 | engines: {node: '>= 6'} 2820 | dependencies: 2821 | kleur: 3.0.3 2822 | sisteransi: 1.0.5 2823 | dev: true 2824 | 2825 | /proxy-addr/2.0.7: 2826 | resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} 2827 | engines: {node: '>= 0.10'} 2828 | dependencies: 2829 | forwarded: 0.2.0 2830 | ipaddr.js: 1.9.1 2831 | dev: true 2832 | 2833 | /punycode/2.1.1: 2834 | resolution: {integrity: sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==} 2835 | engines: {node: '>=6'} 2836 | dev: true 2837 | 2838 | /queue-microtask/1.2.3: 2839 | resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} 2840 | dev: true 2841 | 2842 | /quick-format-unescaped/4.0.4: 2843 | resolution: {integrity: sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==} 2844 | dev: true 2845 | 2846 | /react-is/18.1.0: 2847 | resolution: {integrity: sha512-Fl7FuabXsJnV5Q1qIOQwx/sagGF18kogb4gpfcG4gjLBWO0WDiiz1ko/ExayuxE7InyQkBLkxRFG5oxY6Uu3Kg==} 2848 | dev: true 2849 | 2850 | /regexpp/3.2.0: 2851 | resolution: {integrity: sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==} 2852 | engines: {node: '>=8'} 2853 | dev: true 2854 | 2855 | /require-directory/2.1.1: 2856 | resolution: {integrity: sha1-jGStX9MNqxyXbiNE/+f3kqam30I=} 2857 | engines: {node: '>=0.10.0'} 2858 | dev: true 2859 | 2860 | /require-from-string/2.0.2: 2861 | resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} 2862 | engines: {node: '>=0.10.0'} 2863 | dev: true 2864 | 2865 | /resolve-cwd/3.0.0: 2866 | resolution: {integrity: sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==} 2867 | engines: {node: '>=8'} 2868 | dependencies: 2869 | resolve-from: 5.0.0 2870 | dev: true 2871 | 2872 | /resolve-from/4.0.0: 2873 | resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} 2874 | engines: {node: '>=4'} 2875 | dev: true 2876 | 2877 | /resolve-from/5.0.0: 2878 | resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} 2879 | engines: {node: '>=8'} 2880 | dev: true 2881 | 2882 | /resolve.exports/1.1.0: 2883 | resolution: {integrity: sha512-J1l+Zxxp4XK3LUDZ9m60LRJF/mAe4z6a4xyabPHk7pvK5t35dACV32iIjJDFeWZFfZlO29w6SZ67knR0tHzJtQ==} 2884 | engines: {node: '>=10'} 2885 | dev: true 2886 | 2887 | /resolve/1.22.0: 2888 | resolution: {integrity: sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==} 2889 | hasBin: true 2890 | dependencies: 2891 | is-core-module: 2.9.0 2892 | path-parse: 1.0.7 2893 | supports-preserve-symlinks-flag: 1.0.0 2894 | dev: true 2895 | 2896 | /ret/0.2.2: 2897 | resolution: {integrity: sha512-M0b3YWQs7R3Z917WRQy1HHA7Ba7D8hvZg6UE5mLykJxQVE2ju0IXbGlaHPPlkY+WN7wFP+wUMXmBFA0aV6vYGQ==} 2898 | engines: {node: '>=4'} 2899 | dev: true 2900 | 2901 | /reusify/1.0.4: 2902 | resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} 2903 | engines: {iojs: '>=1.0.0', node: '>=0.10.0'} 2904 | dev: true 2905 | 2906 | /rfdc/1.3.0: 2907 | resolution: {integrity: sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==} 2908 | dev: true 2909 | 2910 | /rimraf/3.0.2: 2911 | resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} 2912 | hasBin: true 2913 | dependencies: 2914 | glob: 7.2.0 2915 | dev: true 2916 | 2917 | /safe-buffer/5.1.2: 2918 | resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} 2919 | dev: true 2920 | 2921 | /safe-regex2/2.0.0: 2922 | resolution: {integrity: sha512-PaUSFsUaNNuKwkBijoAPHAK6/eM6VirvyPWlZ7BAQy4D+hCvh4B6lIG+nPdhbFfIbP+gTGBcrdsOaUs0F+ZBOQ==} 2923 | dependencies: 2924 | ret: 0.2.2 2925 | dev: true 2926 | 2927 | /secure-json-parse/2.4.0: 2928 | resolution: {integrity: sha512-Q5Z/97nbON5t/L/sH6mY2EacfjVGwrCcSi5D3btRO2GZ8pf1K1UN7Z9H5J57hjVU2Qzxr1xO+FmBhOvEkzCMmg==} 2929 | dev: true 2930 | 2931 | /semver-store/0.3.0: 2932 | resolution: {integrity: sha512-TcZvGMMy9vodEFSse30lWinkj+JgOBvPn8wRItpQRSayhc+4ssDs335uklkfvQQJgL/WvmHLVj4Ycv2s7QCQMg==} 2933 | dev: true 2934 | 2935 | /semver/6.3.0: 2936 | resolution: {integrity: sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==} 2937 | hasBin: true 2938 | dev: true 2939 | 2940 | /semver/7.3.7: 2941 | resolution: {integrity: sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==} 2942 | engines: {node: '>=10'} 2943 | hasBin: true 2944 | dependencies: 2945 | lru-cache: 6.0.0 2946 | dev: true 2947 | 2948 | /set-cookie-parser/2.4.8: 2949 | resolution: {integrity: sha512-edRH8mBKEWNVIVMKejNnuJxleqYE/ZSdcT8/Nem9/mmosx12pctd80s2Oy00KNZzrogMZS5mauK2/ymL1bvlvg==} 2950 | dev: true 2951 | 2952 | /shebang-command/2.0.0: 2953 | resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} 2954 | engines: {node: '>=8'} 2955 | dependencies: 2956 | shebang-regex: 3.0.0 2957 | dev: true 2958 | 2959 | /shebang-regex/3.0.0: 2960 | resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} 2961 | engines: {node: '>=8'} 2962 | dev: true 2963 | 2964 | /side-channel/1.0.4: 2965 | resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==} 2966 | dependencies: 2967 | call-bind: 1.0.2 2968 | get-intrinsic: 1.1.1 2969 | object-inspect: 1.12.0 2970 | dev: true 2971 | 2972 | /signal-exit/3.0.7: 2973 | resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} 2974 | dev: true 2975 | 2976 | /sisteransi/1.0.5: 2977 | resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} 2978 | dev: true 2979 | 2980 | /slash/3.0.0: 2981 | resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} 2982 | engines: {node: '>=8'} 2983 | dev: true 2984 | 2985 | /sonic-boom/1.4.1: 2986 | resolution: {integrity: sha512-LRHh/A8tpW7ru89lrlkU4AszXt1dbwSjVWguGrmlxE7tawVmDBlI1PILMkXAxJTwqhgsEeTHzj36D5CmHgQmNg==} 2987 | dependencies: 2988 | atomic-sleep: 1.0.0 2989 | flatstr: 1.0.12 2990 | dev: true 2991 | 2992 | /source-map-support/0.5.13: 2993 | resolution: {integrity: sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==} 2994 | dependencies: 2995 | buffer-from: 1.1.2 2996 | source-map: 0.6.1 2997 | dev: true 2998 | 2999 | /source-map/0.6.1: 3000 | resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} 3001 | engines: {node: '>=0.10.0'} 3002 | dev: true 3003 | 3004 | /sprintf-js/1.0.3: 3005 | resolution: {integrity: sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=} 3006 | dev: true 3007 | 3008 | /stack-utils/2.0.5: 3009 | resolution: {integrity: sha512-xrQcmYhOsn/1kX+Vraq+7j4oE2j/6BFscZ0etmYg81xuM8Gq0022Pxb8+IqgOFUIaxHs0KaSb7T1+OegiNrNFA==} 3010 | engines: {node: '>=10'} 3011 | dependencies: 3012 | escape-string-regexp: 2.0.0 3013 | dev: true 3014 | 3015 | /string-length/4.0.2: 3016 | resolution: {integrity: sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==} 3017 | engines: {node: '>=10'} 3018 | dependencies: 3019 | char-regex: 1.0.2 3020 | strip-ansi: 6.0.1 3021 | dev: true 3022 | 3023 | /string-similarity/4.0.4: 3024 | resolution: {integrity: sha512-/q/8Q4Bl4ZKAPjj8WerIBJWALKkaPRfrvhfF8k/B23i4nzrlRj2/go1m90In7nG/3XDSbOo0+pu6RvCTM9RGMQ==} 3025 | dev: true 3026 | 3027 | /string-width/4.2.3: 3028 | resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} 3029 | engines: {node: '>=8'} 3030 | dependencies: 3031 | emoji-regex: 8.0.0 3032 | is-fullwidth-code-point: 3.0.0 3033 | strip-ansi: 6.0.1 3034 | dev: true 3035 | 3036 | /string.prototype.trimend/1.0.4: 3037 | resolution: {integrity: sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==} 3038 | dependencies: 3039 | call-bind: 1.0.2 3040 | define-properties: 1.1.4 3041 | dev: true 3042 | 3043 | /string.prototype.trimstart/1.0.4: 3044 | resolution: {integrity: sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==} 3045 | dependencies: 3046 | call-bind: 1.0.2 3047 | define-properties: 1.1.4 3048 | dev: true 3049 | 3050 | /strip-ansi/6.0.1: 3051 | resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} 3052 | engines: {node: '>=8'} 3053 | dependencies: 3054 | ansi-regex: 5.0.1 3055 | dev: true 3056 | 3057 | /strip-bom/3.0.0: 3058 | resolution: {integrity: sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=} 3059 | engines: {node: '>=4'} 3060 | dev: true 3061 | 3062 | /strip-bom/4.0.0: 3063 | resolution: {integrity: sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==} 3064 | engines: {node: '>=8'} 3065 | dev: true 3066 | 3067 | /strip-final-newline/2.0.0: 3068 | resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} 3069 | engines: {node: '>=6'} 3070 | dev: true 3071 | 3072 | /strip-json-comments/3.1.1: 3073 | resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} 3074 | engines: {node: '>=8'} 3075 | dev: true 3076 | 3077 | /supports-color/5.5.0: 3078 | resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} 3079 | engines: {node: '>=4'} 3080 | dependencies: 3081 | has-flag: 3.0.0 3082 | dev: true 3083 | 3084 | /supports-color/7.2.0: 3085 | resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} 3086 | engines: {node: '>=8'} 3087 | dependencies: 3088 | has-flag: 4.0.0 3089 | dev: true 3090 | 3091 | /supports-color/8.1.1: 3092 | resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} 3093 | engines: {node: '>=10'} 3094 | dependencies: 3095 | has-flag: 4.0.0 3096 | dev: true 3097 | 3098 | /supports-hyperlinks/2.2.0: 3099 | resolution: {integrity: sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ==} 3100 | engines: {node: '>=8'} 3101 | dependencies: 3102 | has-flag: 4.0.0 3103 | supports-color: 7.2.0 3104 | dev: true 3105 | 3106 | /supports-preserve-symlinks-flag/1.0.0: 3107 | resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} 3108 | engines: {node: '>= 0.4'} 3109 | dev: true 3110 | 3111 | /terminal-link/2.1.1: 3112 | resolution: {integrity: sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==} 3113 | engines: {node: '>=8'} 3114 | dependencies: 3115 | ansi-escapes: 4.3.2 3116 | supports-hyperlinks: 2.2.0 3117 | dev: true 3118 | 3119 | /test-exclude/6.0.0: 3120 | resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==} 3121 | engines: {node: '>=8'} 3122 | dependencies: 3123 | '@istanbuljs/schema': 0.1.3 3124 | glob: 7.2.0 3125 | minimatch: 3.1.2 3126 | dev: true 3127 | 3128 | /text-table/0.2.0: 3129 | resolution: {integrity: sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=} 3130 | dev: true 3131 | 3132 | /throat/6.0.1: 3133 | resolution: {integrity: sha512-8hmiGIJMDlwjg7dlJ4yKGLK8EsYqKgPWbG3b4wjJddKNwc7N7Dpn08Df4szr/sZdMVeOstrdYSsqzX6BYbcB+w==} 3134 | dev: true 3135 | 3136 | /tiny-lru/8.0.2: 3137 | resolution: {integrity: sha512-ApGvZ6vVvTNdsmt676grvCkUCGwzG9IqXma5Z07xJgiC5L7akUMof5U8G2JTI9Rz/ovtVhJBlY6mNhEvtjzOIg==} 3138 | engines: {node: '>=6'} 3139 | dev: true 3140 | 3141 | /tmpl/1.0.5: 3142 | resolution: {integrity: sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==} 3143 | dev: true 3144 | 3145 | /to-fast-properties/2.0.0: 3146 | resolution: {integrity: sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=} 3147 | engines: {node: '>=4'} 3148 | dev: true 3149 | 3150 | /to-regex-range/5.0.1: 3151 | resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} 3152 | engines: {node: '>=8.0'} 3153 | dependencies: 3154 | is-number: 7.0.0 3155 | dev: true 3156 | 3157 | /tsconfig-paths/3.14.1: 3158 | resolution: {integrity: sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ==} 3159 | dependencies: 3160 | '@types/json5': 0.0.29 3161 | json5: 1.0.1 3162 | minimist: 1.2.6 3163 | strip-bom: 3.0.0 3164 | dev: true 3165 | 3166 | /type-check/0.4.0: 3167 | resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} 3168 | engines: {node: '>= 0.8.0'} 3169 | dependencies: 3170 | prelude-ls: 1.2.1 3171 | dev: true 3172 | 3173 | /type-detect/4.0.8: 3174 | resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} 3175 | engines: {node: '>=4'} 3176 | dev: true 3177 | 3178 | /type-fest/0.20.2: 3179 | resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} 3180 | engines: {node: '>=10'} 3181 | dev: true 3182 | 3183 | /type-fest/0.21.3: 3184 | resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} 3185 | engines: {node: '>=10'} 3186 | dev: true 3187 | 3188 | /unbox-primitive/1.0.2: 3189 | resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} 3190 | dependencies: 3191 | call-bind: 1.0.2 3192 | has-bigints: 1.0.2 3193 | has-symbols: 1.0.3 3194 | which-boxed-primitive: 1.0.2 3195 | dev: true 3196 | 3197 | /uri-js/4.4.1: 3198 | resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} 3199 | dependencies: 3200 | punycode: 2.1.1 3201 | dev: true 3202 | 3203 | /v8-compile-cache/2.3.0: 3204 | resolution: {integrity: sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==} 3205 | dev: true 3206 | 3207 | /v8-to-istanbul/9.0.0: 3208 | resolution: {integrity: sha512-HcvgY/xaRm7isYmyx+lFKA4uQmfUbN0J4M0nNItvzTvH/iQ9kW5j/t4YSR+Ge323/lrgDAWJoF46tzGQHwBHFw==} 3209 | engines: {node: '>=10.12.0'} 3210 | dependencies: 3211 | '@jridgewell/trace-mapping': 0.3.9 3212 | '@types/istanbul-lib-coverage': 2.0.4 3213 | convert-source-map: 1.8.0 3214 | dev: true 3215 | 3216 | /walker/1.0.8: 3217 | resolution: {integrity: sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==} 3218 | dependencies: 3219 | makeerror: 1.0.12 3220 | dev: true 3221 | 3222 | /which-boxed-primitive/1.0.2: 3223 | resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} 3224 | dependencies: 3225 | is-bigint: 1.0.4 3226 | is-boolean-object: 1.1.2 3227 | is-number-object: 1.0.7 3228 | is-string: 1.0.7 3229 | is-symbol: 1.0.4 3230 | dev: true 3231 | 3232 | /which/2.0.2: 3233 | resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} 3234 | engines: {node: '>= 8'} 3235 | hasBin: true 3236 | dependencies: 3237 | isexe: 2.0.0 3238 | dev: true 3239 | 3240 | /word-wrap/1.2.3: 3241 | resolution: {integrity: sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==} 3242 | engines: {node: '>=0.10.0'} 3243 | dev: true 3244 | 3245 | /wrap-ansi/7.0.0: 3246 | resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} 3247 | engines: {node: '>=10'} 3248 | dependencies: 3249 | ansi-styles: 4.3.0 3250 | string-width: 4.2.3 3251 | strip-ansi: 6.0.1 3252 | dev: true 3253 | 3254 | /wrappy/1.0.2: 3255 | resolution: {integrity: sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=} 3256 | dev: true 3257 | 3258 | /write-file-atomic/4.0.1: 3259 | resolution: {integrity: sha512-nSKUxgAbyioruk6hU87QzVbY279oYT6uiwgDoujth2ju4mJ+TZau7SQBhtbTmUyuNYTuXnSyRn66FV0+eCgcrQ==} 3260 | engines: {node: ^12.13.0 || ^14.15.0 || >=16} 3261 | dependencies: 3262 | imurmurhash: 0.1.4 3263 | signal-exit: 3.0.7 3264 | dev: true 3265 | 3266 | /y18n/5.0.8: 3267 | resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} 3268 | engines: {node: '>=10'} 3269 | dev: true 3270 | 3271 | /yallist/4.0.0: 3272 | resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} 3273 | dev: true 3274 | 3275 | /yargs-parser/21.0.1: 3276 | resolution: {integrity: sha512-9BK1jFpLzJROCI5TzwZL/TU4gqjK5xiHV/RfWLOahrjAko/e4DJkRDZQXfvqAsiZzzYhgAzbgz6lg48jcm4GLg==} 3277 | engines: {node: '>=12'} 3278 | dev: true 3279 | 3280 | /yargs/17.4.1: 3281 | resolution: {integrity: sha512-WSZD9jgobAg3ZKuCQZSa3g9QOJeCCqLoLAykiWgmXnDo9EPnn4RPf5qVTtzgOx66o6/oqhcA5tHtJXpG8pMt3g==} 3282 | engines: {node: '>=12'} 3283 | dependencies: 3284 | cliui: 7.0.4 3285 | escalade: 3.1.1 3286 | get-caller-file: 2.0.5 3287 | require-directory: 2.1.1 3288 | string-width: 4.2.3 3289 | y18n: 5.0.8 3290 | yargs-parser: 21.0.1 3291 | dev: true 3292 | --------------------------------------------------------------------------------